基于AVR128的简单Modbus协议实现

2020-07-29来源: 51hei关键字: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语言中的’’结束显示,所以校验字节没有显示出来,我将它投影到端口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后判定该数据帧是帧错误。。

关键字:AVR128  Modbus协议 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic504718.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:AVR第4课:流水灯
下一篇:AVR第9课:定时器1的CTC模式

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

基于AVR128单纯Modbus协议实施
Modbus通信协议Modicon公司1979在发展中,适用于工业现场总线协议控制。Modbus通信系统包含芯片的节点,并与组合物可编程控制的公共传输线,它的目的是收集和监视多个节点的数据。Modbus协议采用主从模式,通信系统具有多个节点的从一台主机机监视器。最多支持从节点247个。每一个从机均有自己独立的从机地址。并且改地址可以被主机识别。可以支持Modbus协议的通讯系统有RS-232。RS-422,RS-485等。同一时候Modbus协议具有标准、开放、免费、帧格式简单等特点而被广大project师所採用。Modbus协议中传输数据採用ASCII和RTU两种模式。当中ASCII传输方式表示的数据通俗易懂。便于和PC机直接
发表于 2020-07-29
基于AVR128单纯<font color='red'>Modbus</font><font color='red'>协议</font>实施
AVR16 AVR128的DS18B20温度传感器protues仿真与源码
单片机温度计设计仿真原理图如下 有AVR16芯片和AVR128芯片2个版本单片机源程序如下:/*-------------------------------作者:小新email:xuxing1261207@126.com--------------------------------*/#include <iom16v.h>#include <macros.h>#include "lcd.h"#include "ds18b20.h"unsigned int  temp1=20,temp2=35;void main(void){ 
发表于 2019-11-07
<font color='red'>AVR</font>16 <font color='red'>AVR128</font>的DS18B20温度传感器protues仿真与源码
AVR128_uC/OS-II 移植代码
开发平台:AVR128 移植系统:uC/OS-II功能:  系统建立两个任务,操作“8个LED”  以及 “蜂鸣器”(附上LED和蜂鸣器 部分的原理图)代码量少,添加了个人注释,容易理解电路原理图如下: 此工程为TS8900-M128开发板uCOSii移植教程代码功能是    1--8个LED进行“亮-灭”操作    2--控制蜂鸣器“响-不响”操作单片机源程序如下:/************************************Copyright(c)****************************** 
发表于 2019-10-28
<font color='red'>AVR128</font>_uC/OS-II 移植代码
AVR128单片机最小系统串口,外部中断,跑马灯,uCOS-II移植
实验名称:串口通信实验功能描述:计算机通过串口向开发板发送数据,开发板将数据原样送回。实验目的:学习串口通信实验说明:MCU--M128          内部8M晶振      连接方式:利用串口线将开发板和计算机相连。单片机源程序如下:/************************************************文件:sio.c用途:结构化串口通信程序************************************************/#include "config.h"
发表于 2019-10-25
Avr128 看门狗设置
**********************************************//********************************************************** system:clock:7.3728M        watchdog由片内一个独立的振荡器驱动。1MHZ***********************************************************/#include <iom128v.h>#include "D:\ICC_H\CmmICC.h"/*端口初始化*/void port_init() {  DDRB=0xFF
发表于 2018-05-18
第18章 RS485通信和Modbus协议
在工业控制、电力通讯、智能仪表等领域,通常情况下是采用串口通信的方式进行数据交换。最初采用的方式是RS232接口,由于工业现场比较复杂,各种电气设备会在环境中产生比较多的电磁干扰,会导致信号传输错误。除此之外,RS232接口只能实现点对点通信,不具备联网功能,最大传输距离也只能达到几十米,不能满足远距离通信要求。而RS485则解决了这些问题,数据信号采用差分传输方式,可以有效的解决共模干扰问题,最大距离可以到1200米,并且允许多个收发设备接到同一条总线上。随着工业应用通信越来越多,1979年施耐德电气制定了一个用于工业现场的总线协议Modbus协议,现在工业中使用RS485通信场合很多都采用Modbus协议,本节课我们要讲解一下
发表于 2020-07-23
第18章 RS485通信和<font color='red'>Modbus</font><font color='red'>协议</font>
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved