西门子6ES7214-1AD23-0XB8诚信经营
1、引言
本文主要从应用的角度利用VB6.0的MSComm控件和MODBUS协议,成功实现了某liuliang控制系统中工控机与带RS-232输出接口的智能数字liuliang积算仪之间的串口通信功能。D08-8CZM数字显示表应用于底吹氩liuliang控制系统中liuliang的显示,工控机通过读取其显示值作为反馈信号,从而实现liuliang的闭环控制。
2、D08-8CZM型智能数字liuliang显示积算仪与串口通信
2.1 硬件构成
D07-12A型质量liuliang传感器采用毛细管传热温差量热法原理测量气体的质量liuliang(无需温度压力补偿)。将传感器加热电桥测得的liuliang信号送入放大器放大,放大后的liuliang检测电压与设定电压进行比较,再将差值信号放大后去控制调节阀门,闭环控制流过通道的liuliang使之与设定的liuliang相等。当本liuliang积算仪与MFC(质量liuliang计)配套使用时,只需用电缆通过D型插头将liuliang积算仪与MFC连接起来即可。采用一台上位机与一台D08-8CZMliuliang积算仪进行通信的方式,使用RS232通讯方式:将2引脚(TXD)与上位机串口的RXD(工控机串口的2引脚)相连;3引脚(RXD)与上位机串口的TXD(工控机串口的3引脚)相连;5引脚(SG)与上位机串口的SG(工控机串口的5引脚)相连。
2.2 通讯原理
工控机作为上位机与从机(数字liuliang积算仪)采用主从应答方式进行通信,一个网络中只有一个主机(上位机,节点地址为0),主机通过站号(数字liuliang积算仪的唯一地址)区分不同的从机。上位机始终处于主动状态,根据程序运行的需要向(通信端口)数字liuliang积算仪发出读写等命令;从机处于被动状态,接收并响应上位机的命令。需要读采样数据时,上位机通过通信口向指定地址的数字liuliang积算仪发出读数据命令,数字liuliang积算仪响应并将数据准备好,按统一的数据通信帧格式编成响应字符串,主机读通信口接收缓冲区即可读到所需的数据。向数字liuliang积算仪写数据时,上位机向指定数字liuliang积算仪发出写命令及参数数据,积算仪即可接受并返回响应情况。上位机通过RS-232通信进行运行状态监控、参数设置、诊断等远程测控功能,实现这些功能采用了不同的通信格式。其中MODBUS协议通讯原理图如下:
图1 MODBUS协议的询问应答环路
2.3 通讯协议
本通信协议应用于D08-8CZM型liuliang积算仪与上位机的通信,数据以16进制格式传输,波特率:9600;数据位8位;停止位:1位;效验位:无。本协议与MODBUS协议兼容,可以通过上位机显示liuliang积算仪的瞬时liuliang、累积liuliang、满量程、单位和阀状态(包括阀控、关闭和清洗),可以通过上位机设定liuliang积算仪的瞬时liuliang、使liuliang积算仪的累积liuliang清零。在本协议用到了MODBUS协议的命令$03(Reading1~9words)、命令$05(Force single coil)和命令$06(Writing 1 word)。
使用命令$03可以通过上位机读liuliang积算仪的当前状态,其通信协议的具体格式为:
上位机 积算仪:01 03 00 02 00 08 E5 CC
各字节含义:
01: MODBUS地址;
03: 功能码03(Reading 1~9words);
00 02:起始地址,00为高8位,02为低8位;
00 08:读取的字数;
E5 CC:CRC效验值,E5为CRC的低8位,CC为高8位。
上位机 积算仪:01 03 10 (1)~(16) CRCL CRCH
各字节含义:
01:MODBUS地址;
03:MODBUS命令号;
10:上传的字节数;
(1)~(4):瞬时liuliang值;“00~09”表示数字“0~9”,“10~19”表示“0.~9.”;
(5)~(10):liuliang累积值;同上;
(11)~(14):满量程;同上;
(15):liuliang单位;00表示SCCM和SCC,01表示SCCM和SL,11表示SLM和SL;
(16):阀状态;00表示关闭,80表示阀控,FF表示清洗;
CRCL:CRC的低八位;CRCH:CRC的高8位。
3、用VB实现串行通讯
3.1 MSComm控件
VB的通信控件MSComm能够提供串行通信的全部功能,程序编写、调试简单方便,开发速度快,该控件封装了通信过程中的底层操作程序,用户只需设置和监控控件的属性和事件,就可以方便地实现异步串行通信。
采用MSComm控件接收数据,按照接收方式分两种形式:事件驱动方式,定时查询方式。本例为适应liuliang的实时控制采用定时驱动方式,若定时器计时到,通过串行通信口向指定地址liuliang积算仪发出读写等操作命令,等待时间到则检查InBufferCount属性值来判断输入缓冲区中是否接受到了相应数目的字符,从而进行读取、判断数据合法性和数据存储、处理等操作。
3.2 通信功能的编程实现
程序框图如下:
图2 串口通信程序框图
串口初始化:MSComm1.CommPort = 1
MSComm1.SThreshold = 1
MSComm1.Settings = 9600,N,8,1
MSComm1.InBufferSize = 1024
MSComm1.OutBufferSize = 1024
MSComm1.bbbbbMode = combbbbbModeBinary
打开串口并定时发送数据命令:Private Sub Timer1_Timer()
Dim bytearray(0 To 7) As Byte
bytearray(0) = &H1
bytearray(1) = &H3
bytearray(2) = &H0
bytearray(3) = &H2
bytearray(4) = &H0
bytearray(5) = &H8
bytearray(6) = &HE5
bytearray(7) = &HCC
MSComm1.bbbbbLen = 21
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
MSComm1.RThreshold = 1
MSComm1.PortOpen = True
If MSComm1.PortOpen = True Then
MSComm1.Output = bytearray
End If
End Sub
接受数据:Private Sub MSComm1_OnComm()
Do
DoEvents
Loop Until MSComm1.InBufferCount = 21
Dim dataread() As Byte
Dim tempdata As Variant
Dim str As bbbbbb
If MSComm1.CommEvent = comEvReceive Then
tempdata = MSComm1.bbbbb
ReDim dataread(UBound(tempdata)) As Byte
For i = 0 To UBound(tempdata)
dataread(i) = tempdata(i)
End Sub
同理利用以上程序框图和通信协议可以完成下图的所有功能:
图3 基于VB的D08-8CZM型liuliang积算仪
4、结束语
利用VB6.0的MSComm控件和MODBUS协议,实现了工控机与带RS-232输出接口的智能数字liuliang积算仪之间的串口通信功能,使其能够实时的采集瞬时liuliang,并成功的应用于底吹氩liuliang闭环控制系统。这种通信方式灵活方便,结构简单,可靠性高,完全达到了预期的要求,具有较好的实际价值和使用性。
工业现场经常要采集多点数据,模拟信号或开关信号,一般用到RS485总线,使用一主带多从的通信方式,该种方式接线方便只需要两根屏蔽电缆线,通信距离远大可支持1500m,加中继器还可延长通信距离,采用差分信号方式抗电磁干扰好。但该方式通信速度不能太快,一般采用主从召唤的方式采集各子单元的数据,即主单元依次召唤各子单元(见图1),召唤到哪个单元哪个单元上传数据,总线的使用权完全由主单元分配,各子单元不能擅自占领总线。如果系统的单元多,主单元循环采集一周的时间就很长,子单元信息变化时不能及时发送给主单元,导致系统对突变事件的反应处理速度慢。本文通过总线状态检测、从机主动上发的方式解决。
图1 常规RS485总线主从方式接口图
硬件设计
整个系统由主单元和多个子单元组成(图2),主单元包括:ARM7微控制器、程序存储器、数据存储器、与子单元通信RS485、与主单元通信RS485、系统电源和通信隔离电源;子单元包括:MSP430单片机、与子单元通信RS485、系统电源和通信隔离电源。
图2 系统框图
主单元
ARM微控制器是主单元的核心,采用三星32位ARM7TDMI内核芯片S3C44B0,该芯片高处理速度可达76MHZ,总线开放,可外扩程序存储器FLASH和数据存储器SDRAM,该系统外扩了SST公司生产的39VF1601和现代生产的HY57V641620HG,2个UART串行接口,使用ADI的隔离RS485芯片ADM2483进行接口电平转换,总线状态检测使用74HC125三态门芯片。
子单元
子单元的微控制器使用TI的MSP430F133单片机,该单片机处理速度可达8MHz,8K字节片内FLASH存储,256K字节片内SRAM。
电源电路
电源电路采用开关电源供电,开关电源输入电压范围比较宽,输出直流电压5V,通过SP1117-3.3和SP1117-2.5芯片输出3.3V电源。RS485需要的隔离5V电源通过DC-DC模块得到。
总线检测电路
总线状态检测使用74HC125三态门芯片和单片机的两个I/O(图3),当系统都不使用总线时,每个单元的74HC125都输出高阻状态,此时总线为低电平,当有单元要使用总线时,他检测总线状态,如果总线为低电平,该单元迅速把74HC125改为输出状态,此时总线变为高电平,该单元占领总线,往总线上发送数据,发送数据完成再把74HC125改为高阻状态。如果检测到总线是高电平,等待检测,直到总线变低后再占领总线。
图3 总线检测电路
隔离485电路
使用ADI的ADM2483芯片进行接口电平转换(图4),该芯片属于隔离485,双电源供电输入输出隔离。
图4 隔离485电路
软件设计
主机程序部分需要实现各从机上传数据的接收、处理和上传。主机接收子单元信息通过一个RS485串口实现,数据格式为16进制,数据位8位,1个起始位,1个结束位,无寄偶校验位,波特率9600bps。采用串行口中断的方式接收,主机程序初始化完成后等待各从机发送信息,当主机接收到个字节后,判断该字节是否为设备号,如果不是设备号,接收个数清零,如果是设备号继续接收第二个字节;判定第二个字节是否为正确的功能码,如果功能码错误,接收个数清零重新接收,功能码正确;接收第三个字节,该字节为从单元发送信息的字节个数x,计算从单元发送总字节个数为M=X+3+2,3个开头字节和2个CRC校验码,主机接收到M个字节后,判断CRC校验码是否正确,错误舍弃所有信息,正确则把从单元的信息保存到数据区,该次接收结束,主机继续等待接收。
信息的上传通过一个RS232串口实现。当主机接收到从机信息后,进行数据的处理,发现从单元信息发生变化,主机准备把从机信息发送到上位机,重新初始化发送缓冲区,通过中断的方式依次发送信息到上位机,发送信息包括设备号、功能码、发送字节个数、信息字节和CRC校验码。
主机单元接收数据流程图示于图5。
图5 程序流程图
结语
笔者所设计的系统实现了开关信号的多点监测,一个主机单元,32个从机单元,每个从机单元监测32个开关,该系统共可监测1024个开关,使用9600bps的波特率。采用主从召换的方式,开关信号监测的反应时间一般要用20-30s,使用该种总线检测的方式,开关信号的反应速度慢也不超过1s,快时只有几百ms,大大tigao反应时间,并且由于不用时时召唤,总线数据流少,tigao了总线的稳定性。