基于AVR128单纯Modbus协议实施

发布者:梅花居士最新更新时间:2020-07-29 来源: 51hei关键字:AVR128  Modbus  协议实施 手机看文章 扫描二维码
随时随地手机看文章

Modbus通信协议Modicon公司1979在发展中,适用于工业现场总线协议控制。Modbus通信系统包含芯片的节点,并与组合物可编程控制的公共传输线,它的目的是收集和监视多个节点的数据。Modbus协议采用主从模式,通信系统具有多个节点的从一台主机机监视器。最多支持从节点247个。每一个从机均有自己独立的从机地址。并且改地址可以被主机识别。


可以支持Modbus协议的通讯系统有RS-232。RS-422,RS-485等。同一时候Modbus协议具有标准、开放、免费、帧格式简单等特点而被广大project师所採用。


Modbus协议中传输数据採用ASCII和RTU两种模式。当中ASCII传输方式表示的数据通俗易懂。便于和PC机直接通信识别,但其缺点是採用单字节表示一个数据,传输同样的数据须要很多其它的帧数和时间。RTU模式採用压缩的十六进制表示方式。一个字节能够压缩装载两个数据,这样同样的帧数下RTU模式能够传输很多其它的数据。


Modbus数据帧校验分两种方式:CRC循环冗余校验和LRC纵向冗余校验。


以下使用Proteus仿真atmega128.两片128之间进行串口通讯,串口通讯上跑的是简单的Modbus协议。


仿真图例如以下所看到的:


说明:U1使用1602进行接收数据的显示。


数据帧採用RTU模式,可是为了方便1602进行显示。传输的数据帧消息採用了0X3x(0,1,2,3...等数的ASCII表示形式,这样能够直接送入1602进行显示。从而方便模拟)。图片中间的三个按键是U2的三个中断。


按下之后U2单片机会发送一帧数据。数据内容是0X30, 0X31,0X33,0X01。0X34。0X37。


依照Modbus协议0X30,0X31是表示的从机地址,0X33是表示命令字符。0X01表示数据域长度,0X34表示数据域。0X37是进行的LRC校验。我们採用这样的方式进行简化是为了方便1602进行显示,当中0x01是ASCII码中的空格’‘也可以在1602中进行显示。


单片机U1的PB口和PE口状态分别显示了LRC校验字节和数据域首字节。


当按下button1的时候U2发送数据帧,U1进行接收而且对接收数据继续校验,假设校验无误。那么进行显示。


按下button1结果例如以下


中间的01因为是空格的ASCII码值所以1602显示空格。因为数据域我是採用数组存放数据方式。LCD显示代码以C语言中的’’结束显示。所以校验字节没有显示出来。我将它投影到portB上,portB的状态是0X37。这样也就验证了这个简单的Modbus协议的正常传输。


按动U2的button2能够主动产生一个LRC校验错误。(我在代码校验的时候也没有採用标准的LRC校验。仅仅是进行了累加校验)。U2在对数据帧填充完成的时候刻意更改校验值。将更改后的数据帧发送给U1,U1接收后进行校验则产生校验错误提示。按下button2结果如图


从虚拟终端中我们能够看出。我们手动更改了校验值,由0x37更改成0XFF,那么U1接收到的数据进行校验那么就会产生校验错误提示。。


实际校验结果还是0X37,可是我们在发送前将校验改成了0XFF。导致接收方校验0x37 !=0xff,从而产生错误。。


按下button3回产生数据帧错误。按下button3,U2刻意发送一个不完整的数据帧。假设数据帧不完整,U1不可能进行无限时间的等待。所以U1使用定时器0进行超时推断,假设超过10ms,数据帧依旧不完整那么推断此数据帧为错误帧。


结果例如以下。


在事件3中我们能够让U2不发送校验码,导致该帧数据不完整。U1等待10ms后判定该数据帧是帧错误。。

关键字:AVR128  Modbus  协议实施 引用地址:基于AVR128单纯Modbus协议实施

上一篇:AVR第9课:定时器1的CTC模式
下一篇:IAR for AVR 配置JTAGICE mkII仿真时不擦EEPROM

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved