首页 理论教育Modbus编程方法-现场总线应用技术

Modbus编程方法-现场总线应用技术

【摘要】:当波特率为38400 bit/s时,Modbus通信协议推荐此时1个字符时间为500μs,即定时器定时时间为250μs。图3-20 Modbus数据串行口接收中断服务程序结构框图

由RTU模式消息帧格式可以看出,在完整的一帧消息开始传输时,必须和上一帧消息之间至少有3.5个字符时间的间隔,这样接收方在接收时才能将该帧作为一个新的数据帧接收。另外,在本数据帧进行传输时,帧中传输的每个字符之间必须不能超过1.5个字符时间的间隔,否则,本帧将被视为无效帧,但接收方将继续等待和判断下一次3.5个字符的时间间隔之后出现的新一帧并进行相应的处理。

因此,在编程时首先要考虑1.5个字符时间和3.5个字符时间的设定和判断。

1.字符时间的设定

在RTU模式中,1个字符时间是指按照用户设定的波特率传输一个字节所需要的时间。

例如,当传输波特率为2400 bit/s时,1个字符时间为

11×1/2400=4583μs

同样,可得出1.5个字符时间和3.5个字符时间分别为

11×1.5/2400=6875μs

11×3.5/2400=16041μs

为了节省定时器,在设定这两个时间段时可以使用同一个定时器,定时时间取为1.5个字符时间和3.5个字符时间的最大公约数即0.5个字符时间,同时设定两个计数器变量为m和n,用户可以在需要开始启动时间判断时将m和n清零。而在定时器的中断服务程序中,只需要对m和n分别做加一运算,并判断是否累加到3和7。当m=3时,说明1.5个字符时间已到,此时可以将1.5个字符时间已到标志T15FLG置成01H,并将m重新清零;当n=7时,说明3.5个字符时间已到,此时将3.5个字符时间已到标志T35FLG置成01H,并将n重新清零。(www.chuimin.cn)

波特率为1200~19200 bit/s,定时器定时时间均采用此方法计算而得。

当波特率为38400 bit/s时,Modbus通信协议推荐此时1个字符时间为500μs,即定时器定时时间为250μs。

2.数据帧接收的编程方法

在实现Modbus通信时,设每个字节的一帧信息需要11位,其中1位起始位、8位数据位、2位停止位、无校验位。通过串行口的中断接收数据,中断服务程序每次只接收并处理一字节数据,并启动定时器实现时序判断。

在接收新一帧数据时,接收完第一个字节之后,置一帧标志FLAG为0AAH,表明当前存在一有效帧正在接收,在接收该帧的过程中,一旦出现时序不对,则将帧标志FLAG置成55H,表明当前存在的帧为无效帧。其后,接收到本帧的剩余字节仍然放入接收缓冲区,但标志FLAG不再改变,直至接收到3.5字符时间间隔后的新一帧数据的第一个字节,主程序即可根据FLAG标志判断当前是否有有效帧需要处理。

Modbus数据串行口接收中断服务程序如图3-20所示。

978-7-111-55649-7-Chapter03-30.jpg

图3-20 Modbus数据串行口接收中断服务程序结构框图