马 敏,杨胜伟
(中国民航大学 电子信息与自动化学院,天津 300300)
在很多工业控制中都会用到上位机与下位机之间的通信,两者之间经常使用串口来实现数据交换[1]。为了上位机与下位机之间快速、高效的通信,需要根据两者之间的通信协议在上位机设计相应的串口通信程序[2]。LabVIEW提供与遵从GPIB、VXI、RS232和RS485协议的硬件及数据采集卡通信的全部功能,还内置了支持TCP/IP、ActiveX等软件标准的库函数。其图形化编程语言环境,简单直观,相较传统的文本语言串口通信程序开发,极大节省程序开发时间,可以完成各种各样的编程任务。因此利用LabVIEW实现PC机与MCU的串口通信是一种更为简捷的方法。本文采用LabVIEW实现了与下位机的串口通信,并设计了多气体监测系统,实现了数据的采集、显示与存储。
整个数据通信系统配置由带LabVIEW监控程序的PC机、USB通讯电缆、智能控制器构成。在下位机系统中,由各传感器将采集到的参数传递给STM8处理器进行处理,并通过串口模块与上位机交互。在上位机系统中,由LabVIEW编写的串口程序与下位机实现整个系统的通信并对传递的信号进行处理。系统结构如图1所示。
图1 系统结构Fig.1 System structure
STM8L151是一种具有超低功耗特性的功能强大的单片机,STM8L151片内有1个通用串行同步/异步模块USART1,支持通用异步协议 (UART协议)和同步协议(SPI协议),通信方式为通用异步接收/发送(UART)。主机为PC机时,通过RS-485接口实现主机与从机的通信。电路原理图如图2所示。
图2 系统串口硬件电路Fig.2 System serial port hardware circuit
本文设计的通信系统采用主从式的UART通信协议,在此协议模式下MCU为从机,带LabVIEW监控程序的PC机为主机[3]。STM8将各路采集的数据以一定的数据格式存储到一个数据帧中,当收到上位机指令时此数据帧通过串口发送至PC,采用LabVIEW软件对串口收到的数据进行采集、显示、处理和存储。
本系统采用通用RS485总线,所有控制板连接在1条RS485总线上;下位机在通信中处于从站的地位,上位PC机处于主站地位。工作时采用指令/应答的通信方式,每一种指令帧对应着一种应答帧。当针对某台从机发送指令时,所有的从机都能监听到该指令,但只有地址匹配的从机才真正接收主机指令然后作出相应的响应,地址不匹配的从机不予以应答,仅处于侦测状态。
所有通信都以“打包”方式发生。1个报文就是1个简单的字符串 (每个字符8位),1个报文中最多可含255个字节。组成这个报文的字节构成标准异步串行数据,8位数据位,1位停止位,偶校验的方式传递。
1帧完整的消息包含1个地址字节、1个命令字节、1个数据长度字节、N个数据字节及2个校验字节,其中校验域为16位CRC校验方式下生成的CRC16校验码。其格式如表1所示。
表1 帧格式Tab.1 Frame format
每一帧消息的发送都要以3.5个字符时间以上的停顿间隔开始;因此,当系统检测到当前一个字节与上一个字节的间隔时间大于3.5个T约于3.5 ms时,自动将这一个字节做为一个消息帧的开始。
当接收到第一个字节(地址),每个设备都进行解码以判断是否发往自己的。在最后一个传输字符之后,同样至少3.5个字符时间以上的停顿间隔来表明一帧消息的结束。一个新的消息可在此停顿后开始。
整个消息帧必须连续的发送。如果在帧完成之前的2个字节间有超过3.5个字符时间的停顿时间,接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域。同样地,如果一个新消息在小于3.5个字符时间内接着前个消息开始,接收的设备将认为它是前一消息的延续。这将导致通信错误,因为在校验时值肯定是错误的。
从机的地址是一个字节,范围为1~255(0xFF)。主机通过将要联络的从机的地址放入消息中的地址域来选通从机。当从机发送回应消息时,它把自己的地址放入回应的地址域中,以便主设备知道是哪一个设备作出回应。
当消息从主机发往从机时,功能代码将使从机知道需要执行哪些具体的任务。对于不同的命令,从机将做不同的应答;如果操作正确,对于查询性质的指令,从机将返回一条带有指定的信息的消息;对于操作性质的指令,从机在完成指定操作后,将返回一个空数据(即数据长度字节为0)的消息到主机,以确认操作成功;如果通信异常,从机将返回一个包括异常码在内的异常响应。
LabVIEW提供了功能强大的VISA(virtual in strument software architecture)库,VISA 作为 LabVIEW程序中驱动程序间相互通信的底层功能模块,可连接不同标准的I/O设备,是一个用来在串口通信设备、VXI设备、GPIB设备及其他基于计算机设备间通信的函数库[4]。
1)VISA resource name:VISA 资源名称,即串口号。
2)VISA Configure Serial Port节点。该节点完成串口参数的设置,包括串口资源分配、波特率、数据位、停止位、校验位等,波特率默认值为9600,数据比特默认为8位。该节点位于仪器I/O面板的Serial中。
3)VISA Write节点。如果初始化没有问题,就可以使用这个节点发送数据。它是指将输出缓冲区中的数据发送VISA resource name指定的串口。
4)VISA Bytes at Serial Port节点。此节点用来查询VISA resource name指定的串口接收缓冲区中的数据字节数,通常将此节点放到VISA Write之后用来得到串口字节数。
5)VISA Read节点。此节点的作用是将VISA resource name指定的串口接收缓冲区中的数据读取指定字节数的数据到计算机内存中。
6)在某些特殊情况下,需要设置串口接收/发送缓冲区的大小,此时可以使用VISA Set I/O Buffer Size;而使用VISA Flush I/O Buffer则可以清空接收与发送缓冲区。在串口使用结束后,使用VISA Close结束与VISA resource name指定的串口之间的会话。
图3 程序流程Fig.3 Program flow chart
1)数据转换
在LabVIEW平台控制的串行通信过程中,数据格式是以字符串的格式组成的,字符串中的每个字符实际上对应我们熟悉的ASCII字符,即计算机能够识别的数据代码是ASCII代码,所以在传送到串口发送数据之前要经过代码转换,这就意味着以十进制、二进制、十六进制表示的数据必须转化为ASCII字符串才能进行传送和接收[5]。程序如图4所示。
图4 16进制转化为ASCII码Fig.4 Hexadecimal into ASCII
2)数据校验
本设计采用CRC16的数据校验,保证通信数据的可靠性。CRC16包含2个字节,低字节在前,高字节在后[6]。CRC16码由发送设备计算,放置于发送信息的尾部。接收信息的设备再重新计算接收到信息的CRC16码,比较计算得到的CRC16码是否与接收到的相符,如果两者不相符,则表明出错。
图5CRC校验Fig.5 Cyclic redundancy check
3)数据处理与显示
当LabVIEW接收到串口传来的数据时,先截取第一个字符判断地址,再截取第二个字符判断功能命令。然后将接收到的数据转化为数值显示出来,并设置了报警阈值。
4)数据保存
在工业生产和科学实验过程中,人们往往通过对历史数据分析、比较才挖掘到有用信息,并利用这些信息进一步地设计方案或实验。所以,串口调试软件的数据的存储显得格外有意义,尤其采用时间命名文件,保存为.xls或.txt格式,这一点就显得尤为突出。本上位机软件能够实时存储接收到的数据,并且以便于事后分析的格式完整存储,其存储数据可以直接导入MabLAB等软件经行分析。
图6 数据处理及存储程序Fig.6 Data processing and storage program
为了测试系统的可靠性,使用上述气体采集系统对某实验室的气体浓度进行监测,首先配置VISA参数,波特率9600,数据位为8位,偶校验。然后打开功能命令开关,选择气体类型,气体单位和数值量程,最后读取数据。图7为测试时的主界面,部分数据如图8所示。
图7 系统上位机主界面Fig.7 PC interface
图8 部分采集的数据Fig.8 Partial data
本文采用STM8串口作为数据发送端,Lab-VIEW作为数据接收端,实现了对多气体传感器的实时数据采集,能够正确地显示出各通道采集数据的实时波形。本系统具有成本低,操作简单,界面友好,功能丰富,可移植性强,可扩展性强等特点。在实现以上功能的基础上,以后可以对该平台进一步扩展,如成本的降低,硬件系统性能的提高,更高速的通信方式,用户界面的完善,远程控制等方面,使平台更加实用方便。
[1]吕向锋,高洪林,马亮,等.基于LabVIEW串口通信的研究[J].国外电子测量技术,2009,28(12):27-30.
[2]王定远,胡吉朝,李嫒.基于MScomm32和LabVIEW的串口通信技术[J].国外电子测量技术,2006,25(4):61-64.
[3]张杰,张轶,王晓刚,等.基于USB串口的LabVIEW与MSP430通信实现[J].自动化与仪表,2011,26(3):38-41.
[4]崔牧凡.基于LabVIEW和FPGA的串口通信系统设计与实现[J].计算机应用,2012,32(S2):82-84.
[5]赵梅,胡天亮,张倩,等.基于LabVIEW的AMT数据采集系统设计与研究[J].山东大学学报:工学版,2011,41(6):70-74.
[6]陈金平,王生泽,吴文英.基于LabVIEW的CRC检错码校验方法[J].自动化仪表,2004,25(5):74-76.