基于AVR128的简单Modbus协议实现

Modbus通讯协议是由Modicon公司在1979年开发的,应用于工业现场控制的总线协议。Modbus通讯系统包括带有可编程控制的芯片节点和公共传输线组成,其目的是用于多节点数据的采集和监控。Modbus协议采用主从模式,通讯系统中有一个主机对多个节点从机进行监控,从机节点最多支持247个。每个从机均有自己独立的从机地址,而且改地址能够被主机识别。

能够支持Modbus协议的通讯系统有RS-232,RS-422,RS-485等。同时Modbus协议具有标准、开放、免费、帧格式简单等特点而被广大工程师所采用。

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语言中的’\0’结束显示,所以校验字节没有显示出来,我将它投影到端口B上,端口B的状态是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后判定该数据帧是帧错误。。

该仿真的仿真程序和仿真工程存放到网盘地址http://yun.baidu.com/share/link?shareid=368414814&uk=840368654&third=0

里边包含了U1 和U2的工程代码分别在各自的MAIN文件夹中。仿真文件在ISIS文件夹中。希望对你有帮助。88

基于AVR128的简单Modbus协议实现,布布扣,bubuko.com

时间: 2024-10-17 23:02:07

基于AVR128的简单Modbus协议实现的相关文章

简单Modbus协议数据源工具实现(一)WinForm

这是一个学习C#.Winform的自我回顾过程,用来发现存在的不足,也为了推动自己继续学习. 大学通信专业毕业之后,进入了一家电力科技公司从事软件开发工作,主要用的是Delphi语言进行电力通信协议的上位机开发.因为上位机需要与下位机通信才好进行测试,而事实上没有那么多现成的装置给你借用调试,加上公司慢慢的开始推行C#/WPF来做一些定制软件,所以想学习一下C#,刚好现在也有一个自身的需求出现--上位机程序调试困难,所以就从最易入手的winform程序切入,慢慢的加深对于C#语言的理解.于是就打

实现基于RS-485通信和Modbus协议的远程智能消防监测系统

题目要求: 监测端上电后LED1至LED8全部熄灭,LED9每隔2秒闪烁一次(亮0.5秒,灭1.5秒). 采集端测到火焰时,监测端LED1至LED4出现流水灯效果. 采集端火焰消失后,监测端流水灯效果保持. 按下一次监测端KEY1按键,能停止流水灯效果. 使用2块M3主控模块.1个火焰传感器模块,选取一块M3主控模块作为监测端,另一块M3主控模块安装火焰传感器模块作为采集端. 1.将“485采集端程序.hex”文件下载到采集端,使用“485节点配置工具.exe”配置采集端地址为0x01.传感器类

基于AVR128单纯Modbus协议实施

Modbus通信协议Modicon公司1979在发展中,适用于工业现场总线协议控制.Modbus通信系统包含芯片的节点,并与组合物可编程控制的公共传输线,它的目的是收集和监视多个节点的数据.Modbus协议采用主从模式,通信系统具有多个节点的从一台主机机监视器.最多支持从节点247个.每一个从机均有自己独立的从机地址.并且改地址可以被主机识别. 可以支持Modbus协议的通讯系统有RS-232.RS-422,RS-485等.同一时候Modbus协议具有标准.开放.免费.帧格式简单等特点而被广大p

基于MODBUS协议的单片机与(串口屏)触摸屏通信(图文)

导读:触摸屏能够直观.生动地显示运行参数和运行状态,而且通过触摸屏画面可以直接修改系统运行参数,人机交互性好.触摸屏和单片机通信,需要根据触摸屏采用的通信协议为单片机编写相应的通信程序.Modbus协议是美国Modicon公司推出的一种有效支持控制器之间以及控制器经由网络(例如以太网)和其它设备之间进行通信的协议.关键词:触摸屏,MCS-51单片机,Modbus协议,通信 在工业控制中经常需要观察系统的运行状态或者修改运行参数.触摸屏能够直观.生动地显示运行参数和运行状态,而且通过触摸屏画面可以

JAVA学习第六十课 — UDP协议 &基于多线程模拟简单的QQ聊天程序

UDP传输 UDP有发送端和接受端,有两大类,DatagramSocket.DatagramPacket 建立发送端和接收端 建立数据包 调用Socket的接收发送方法 关闭Socket 注意:发送端和接收端是两个独立的运行程序 UDP发送端演示 DatagramPacket(byte[] buf, int length, InetAddress address, int port) 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号. public static voi

涨知识-VI 基于TCP/UDP的应用层协议

基于TCP/UDP的应用层协议: 基于TCP: Telnet(Teletype over the Network, 网络电传),通过一个终端(terminal)登陆到网络 FTP(File Transfer Protocol 文件传输协议) SMTP(Simple Mail Transfer Protocol 简单邮件传输协议),用来发送电子邮件 POP3(Post Office Protocol 3)邮件读取协议,协议通常被用来接受电子邮件 HTTP HTTPS 基于UDP: NFS(net

SNMP:简单网络管理协议

为什么需要监控? 随着当前企业IT环境中服务器.应用程序数量和类型的不断增加,运维部门需要通过科学和高效的手段尽可能详细.实时和准确的获取整个架构中具体到每个服务器.每个系统甚至每个应用程序工作的细节,并且会对所获取到的原始数据进行分析.绘图和统计.以便为后续的性能调优.架构调整提供参考依据. 常见的检测对象涵盖了IT运行环境的方方面面,包括机房环境.硬件.网络等,而每一个方面所涉及的监控项目则种类繁多.例如对硬件环境的检测中,所涵盖内容就包括服务器的温度/风扇转速等指标:针对系统环境的监控,包

模拟Modbus协议问题

问题: 在嵌入式系统开发中,Modbus协议是工业控制系统中广泛应用的一种协议.本题用来简单模拟Modbus协议,只需根据条件生成符合该协议的数据帧,并解析所获取的数据.假设设备使用的协议发送数据格式如下:<SlaveAddress, 1 Byte> <Function, 1 Byte> <Start Address, 2 Bytes> <NumberofBytes, 2 Bytes> <Checksum, 2 Bytes>其中前四项将在输入条件

RTU的优势与Modbus协议介绍

RTU是REMOTE TERMINAL UNIT 的简称,即远方数据终端,用于监视.控制与数据采集的应用.具有遥测.遥信.遥调.遥控功能.RTU功能必须确保两种功能:1,有数据传输功能.2,有采集和控制功能. 经过多年的PLC+DTU在工业自动化应用中已经普遍采用这种方式在进行数据的在线监测和远程控制.当RTU面世后,RTU集成的A/D和I/O采集功能已经可以达到取代部分PLC功能了. 1,在一些相对简单的温度.压力.湿度.水位.烟雾等传感器的数据采集监测,完全已经可以通过RTU取代前端早期的P