MODBUS的CRC校验和程序(6)

2019-03-10 12:35

4.2.3 实现50ms时限

在发送命令的过程中,程序利用Timer1控件定时,中断后通过调用信息发送子函数实现主机对各个从机的轮巡查询。在子函数中,程序利用Output属性发送查询命令,之后,不用检测CommEvent属性值,而是启动另一个定时器控件Timer2(间隔属性设置为10ms),直接利用Input属性从接收缓冲区读取字符串,每隔10ms读取一次,循环接收从机应答字符串,直至达到最大时限(50ms)。

该定时器事件是程序的核心,它不仅实现了50ms接收时限,而且在这里对接收到的响应数据帧进行有效性判别和应答。该段程序流程图如图5所示。

图5 定时器Timer2事件过程流程图

Fig.5 The event process flowchart of Timer2

图中,REVOK—处理mbEvent所代表的事件;mbEvent=0—正常接收并进行数据解析;mbEvent=1—地址错误;mbEvent=2—功能码错误;mbEvent=3—CRC16校验错误;i—循环变量。

4.2.4 安全数组实现循环接收

主机接收从机的响应数据时,通过启动定时器Timer2,每隔10ms对输入缓冲区中的数据进行一次读取,直至最大时限(50ms),实现了循环接收输入缓冲区中的数据。根据下位机的回送的数据信息,上位机解析所接收的数据,并进行必要的处理。一般而言从下位机发送的数据都有一定的帧长度,特别是对于一些固化好的智能仪表。因此最好的方法是按照通信回送的帧长度,在上位机程序中分别开辟两个数组。一个为安全数组,设为动态数组,用来循环接收串口缓冲区中的数据;另一个作为接收数组,长度为回送数据帧长度,用来复制接收安全数组中的数据并进行解析。这样可以提高整个系统的容错能力。具体代码(写在定时器事件中)如下:

Dim inputbuf(14) As Byte ’接收数组

Dim inputsafebuf() As Byte ’安全数组

Dim a As Integer

Dim index As Integer

a = 0

……

Private Sub Timer2_Timer()

Inputsafebuf = MSComm1.Input ’将输入缓冲区中的数据放入安全数组中

For index = LBound(inputsafebuf) To UBound(inputsafebuf)

inputbuf(index + a) = inputsafebuf(index)

Next index ’将安全数组中的数据放入接收数组中

a = UBound(inputsafebuf) + a + 1 ’循环变量,实现循环接收

……

End Sub

代码中的inputbuf()为接收数组,而inputsafebuf()就是另外开辟的安全数组。

4.3 窗体载入事件过程

窗体载入事件(Form_Load)在程序刚开始时被调用,负责设置通信端口参数,启动定时器Timer1。主要程序代码如下:

Pravite Form_Load()

MSComm.CommPort = 1 ’设定需要使用的串口,当然这里可以用输入方式灵活设定。暂定1号端口

MSComm.Settings = “9600,n,8,1” ’设定传输的波特率和校验方式

MSComm.InputLen = 0 ’一次全部读入所需要的数据

MSComm.InputMode = comInputModeBinary ’设定为二进制的数据流方式

……

MSComm1.Portopen = True ’打开通信串口

Timer1.Interval = 100 ’设定定时器1定时值为100ms

Timer1.Enable = True ’启动定时器1

Timer2.Interval = 10 ’设定定时器2定时值为10ms

Timer2.Enable = False ’关闭定时器2

End Sub

4.4 定时器Timer1事件过程

此事件会在每1个属性值的间隔内(前已设定为100ms)被调用一次,完成主机和从机之间的周期性轮巡通信。主要程序代码如下:

Dim j As Interger

Dim n As Interger

j = 0

Pravite Timer1_Timer()

j = j + 1

n = j

If j >= 10 Then j = 0 ’周期性轮巡

SendPackage n ’调用与n号从机通信的子程序

End Sub

5 结论

在本监控系统中,RS485总线上连有10台低压智能综合保护器,所选用的传输波特率为9600bps,保护器中的动态信息数据可以在PC机上实现每隔1s更新一次。对于保护器中的其他数据信息,发送与接收数据帧最大不超过60byte,因此,该通讯软件完全能够满足传输过程中的稳定性、可靠性和准确性。但在实际通讯的过程中,可根据工业现场的具体情况调整传输波特率和轮巡周期的长度。

本文设计的通信软件已应用于低压配电监控系统中,实践证明本系统能够正常运行,上位机与下位机的通信稳定可靠,软件使用方便,实现了对综合保护器DYZB-101A的智能化控制,有效地降低了工业现场的故障发生率。本通信协议和通信软件也有一定的通用性,提供了一个对于工厂、电厂、工业监控系统简单实用的通信软件。


MODBUS的CRC校验和程序(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中小学布置调整规划

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: