0 引 言
Labview是美国国家仪器公司(NI公司)推出的专为数据采集、仪器控制、数据分析与数据表达的图形化编程环境,它是一个开放的开发环境,具有 PCI,GPIB,PXI,VXI,RS-232/485,USB等各种仪器通讯总线标准的所有功能函数,开发者可以利用这些函数与不同总线标准接口的数据采集硬件交互工作。但现实中的数据采集卡很多是利用美国NI公司提供的专用数据采集卡,价格较贵,不利于普及Labview软件测控的学习和应用。
Proteus软件支持51单片机,集程序编辑,原理图绘制和程序仿真于一体,它不仅能仿真单片机CPU的工作情况,也能仿真单片机外围电路,具有电路互动仿真功能,通过动态外设模型,如键盘、开关,发光二极管,数码管,液晶和传感器、电机等,可实时显示单片机系统输入、输出结果;另外还配置了多种虚拟仪器如示波器、逻辑分析仪等,方便对实验图形和数据的测量。
基于Labview和Proteus的特性,本文利用Proteus仿真下位机运行,而Labview实现上位机对下位机运行的监控,两软件采用虚拟串口进行RS-232串口通讯,在纯软件环境下,完成基于Labview软件数据采集系统的组建。这种方法成本低,效率高,可以方便地应用到测控技术的学习和设计中。
要实现上述方法,当然要正确安装Labview和Proteus软件,另外还必须安装NI_VISA串口通讯协议驱动和虚拟串口软件VSPD XP。本文通过虚拟串口软件VSPD XP模拟出一对互联的虚拟串口,分别为COM3和COM4,并且把COM3配置给Proteus环境下的单片机串口终端,把COM4配置给Labview 作为串口资源[1]。
本文通过一个上位机监控下位机走马灯电路的实验,来介绍这种Labview及Proteus软件环境下单片机串口通讯的仿真方法。
1 基于Labview的上位机信号处理和显示软件设计
Labview虚拟仪器程序由前面板和框图程序组成,前面板是人机交互的界面,界面上有用户输入和显示输出两类控件;框图程序则是用户编制的程序源代码,以定义和控制在前面板上的控件输入和输出功能。图1为上位机监控下位机走马灯电路的Labview源程序。
图1 上位机监控下位机走马灯电路的Labview源程序
上图的图形化编程设计是采用NI_VISA串口Serial函数来访问和控制串口的。VISA中的Serial函数库里包含VISA Configure Serial Port、VISA Write、VISA Read、VISA Close等子函数。本设计用到的四个VISA串口子函数是:VISA串口配置函数VISA Configure Serial Port、VISA写入函数VISA Write、VISA读取函数VISA Read和VISA 关闭函数VISA Close[2][3]。它们的图标分别如图2所示:
图2 VISA串口子函数图标
VISA串口配置函数VISA Configure Serial Port的作用是完成串口参数的初始化设置,
包括了串口资源名称,波特率,奇偶校验、数据比特、是否启用终止符等,图1中该函数连接了两个输入变量,变量名为“请选择串口名”和“波特率”,它们分别连在串口资源名称和波特率参数端子上,变量值是在前面板上相应控件来设定的,另外该函数在是否启用终止符的端子上还连接了一个布尔常量,常量值为 false,含义是不启用终止符,其它输入参数采用默认值。图1中VISA串口配置函数有两个输出端子,图标上面的输出端子输出的是串口资源名称,下面的输出端子输出的是错误码,输出端子向下游函数传递信息。
VISA写入函数VISA Write有三个输入端子,图1中VISA Read图标的上面一个输入端子是前面VISA Configure Serial Port函数传递的串口资源名称,下面的输入端子是传递的错误码,意思是若前面的函数出错了,会往这里输入一个错误码,然后继续往下面传递,有错误码出现时程序是不会工作的。中间的输入端子是写入缓冲区入口,写入缓冲区支持的数据格式是字符串。Labview程序向下位机传送两个无符号字节数据,它们的变量名分别为“走马灯循环次数”和“走马灯状态延时时间”,其具体值分别在前面板中设置。这两个数据通过“创建数组”函数和“字节数组至字符串转换”函数,组成字符串,输入VISA Write函数的写入缓冲区中。
VISA Write函数图标上面输出端子输出的是串口资源名称,下面输出端子输出的是错误码,继续向下游函数传递信息。
VISA读取函数VISA Read中间的输入端子是每次从串口读取的数据字节数,本文设置的字节数是1,它会以字符串的形式从该函数的中间输出端子输出,字符串只包含一个8位字节。
从VISA Read函数输出的字符串通过“字符串至字节数组转换”函数 ,和“索引数组”函数,把字符串转换为8位无符号字节数据,再通过“数值至布尔数组转换”函数 ,和“索引数组”函数,把8位无符号字节拆分出8个布尔数,并以指示灯的形式显示在前面板中,用来监视下位机8个走马灯的运行状态。
VISA关闭函数VISA Close的作用是当程序停止之前,必须要把使用的串口设备关闭,若不关闭,其他程序就不能使用该设备。
图1中有个条件结构,在前面板按下“发送参数”按钮,满足“真”条件,于是可以把变量“走马灯循环次数”和“走马灯状态延时时间”通过VISA Write函数,经串口传送到单片机走马灯电路。在条件结构的外边还有个While循环结构,每次循环向下位机写入一次控制参数,读取一次从下位机上传的走马灯实时状态,直到前面板按下“停止”按钮,结束While循环[4][5]。
图1的程序源代码所支持的虚拟仪器前面板如图3所示。
图3 上位机监控下位机走马灯电路的Labview前面板
在前面板编辑界面的菜单栏,选择“操作”,弹出下拉菜单,选择“运行”,于是图3所示前面板处于运行状态,在前面板中设置串口号为COM4,波特率为 9600,COM4是VSPD XP软件模拟出的虚拟串口。在名称为“走马灯循环次数”的数值输入控件,以及名称为“走马灯状态延时时间”的水平填充滑动杆控件里,输入控制参数,这两个参数发送给下位机,用来控制Proteus环境下走马灯电路运行,同时下位机走马灯的状态也会实时地反映在Labview前面板8个指示灯上。
2 基于Proteus的下位机走马灯电路运行与通讯电路软硬件设计
图 4所示,走马灯电路以单片机AT89C51为控制核心,晶振为11.0592MHz,该晶振频率能保证波特率为9600bps时,串行通讯的同步性能。 P2口连着8个发光二极管,当P2口某个引脚为低电平时,与该引脚相连的发光二极管就亮,如果逐个点亮发光二极管,就会出现走马灯的现象[6]。
图4 下位机走马灯电路运行与通讯原理图
图4中COMPIM元件是串口映射模块,在Proteus软件里,可直接和单片机相连,不需要另外加MAX232器件进行TTL和RS232电平转换。双击COMPIM模块,出现如图5所示设置对话框。
图5 COMPIM模块参数设置
在COMPIM模块参数设置对话框中,把物理串口设置为VSPD XP软件模拟出的虚拟串口COM3,波特率设为9600,并且设置数据位为8位,停止位为1位,无奇偶校验位。
然后双击图4中的单片机AT89C51芯片,出现设置对话框,在这个对话框里,一定要把时钟频率从默认的12MHz改为11.0592MHz,这样当通讯传输的波特率为9600bps时,可以准确地计算出T1定时初值,不会产生累计误差,保证与上位机通讯的同步性能[7]。
根据硬件电路,下位机的软件框图如图6所示。
图6 下位机走马灯电路运行与通讯程序框图
单片机串口通讯方式的确定是由它的特殊功能寄存器SCON来设定,SCON的值设为50H,意思是采用方式1,允许串口接收数据,10位异步收发,8位数据位,1位起始位,1位停止位,波特率由定时器T1的溢出率控制。
定时器的溢出率是溢出时间的倒数,所以只要通过设定定时器的计数初值,就可以得到每次溢出所需的时间。定时器的工作方式由TMOD来设定,TMOD的值设为 20H,意思是采用方式2工作,8位初值自动重装的8位计数器,以晶振频率1/12作为计数脉冲的频率,当8位计数器计数溢出时,寄存器TH1向TL1自动重装,TL1继续计数,如此反复。根据串口方式1的波特率计算公式:波特率=(1/32)×(T1溢出率),若晶振频率为11.0592MHz,波特率为9600bps,TH1和TL1都需设为FDH。
3 结 论
单片机程序利用keil软件编制,并编译成HEX目标文件,在Proteus环境下的硬件原理图中,双击单片机芯片,在随之出现的对话框中,通过 “Program File”的设置栏里找到HEX文件,再点击对话框的“OK”按钮,程序目标代码就加载到了单片机里。在Proteus工作界面下方有4个仿真控制按钮 ,分别为运行按钮、步进按钮、暂停按钮和停止按钮,单击运行按钮,走马灯电路进入仿真状态。此时若运行Labview前面板,就可在两个软件环境中,交互实现上位机监控下位机走马灯的虚拟实验。
采用Labview软件和Proteus仿真软件结合实验,可以克服采用商用数据采集卡的实验中硬件电路固定,不能更改的局限,同时提高了设计效率,降低了设计成本,还可以根据任务要求,帮助设计者研发出价格低廉,功能专一的测控设备。