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纵向冗余校验。

之间进行串口通讯,串口通讯上跑的是简单的Modbus协议。

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmVuZ3llaHVkaWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

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

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

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

中进行显示。

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

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

按下button1结果例如以下

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

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

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

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

进行超时推断,假设超过10ms,数据帧依旧不完整那么推断此数据帧为错误帧。

结果例如以下。

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

该仿真的仿真程序和仿真project存放到网盘地址

shareid=368414814&uk=840368654&third=0">http://yun.baidu.com/share/link?

shareid=368414814&uk=840368654&third=0

里边包括了U1 和U2的project代码分别在各自的MAIN目录的。仿真文件ISIS目录的。

我希望对你有所帮助。

88

版权声明:本文博主原创文章。博客,未经同意不得转载。

基于AVR128单纯Modbus协议实施的更多相关文章

  1. Modbus协议

    总体上来说,发送命令格式如下:模块号(1字节)功能码 起始地址(2字节)   数据(X字节) CRC(2位) 模块号(1字节)功能码(要读取的寄存器,读 01,设置05,Coil Status/Inp ...

  2. C# MODBUS协议 上位机(转)

    源:C# MODBUS协议 上位机 C#写了一款上位机监控软件,基于MODBUS_RTU协议. 软件的基本结构: 采用定时器(Timer控件)为时间片. 串口采用serialPort1_DataRec ...

  3. 《ServerSuperIO Designer IDE使用教程》-3.Modbus协议,读取多个寄存器,实现多种数据类型解析。发布:v4.2.2版本

    更新内容,v4.2.2版本:1.增加Modbus协议读取多个寄存器,并且按多种数据类型解析数据.2.Modbus Serial和Modbus TCP两个驱动合并成一个驱动.3.修改数据库结构,保存配置 ...

  4. Python的网络编程[6] -> Modbus 协议 -> Modbus 的基本理论与 Python 实现

    Modbus协议 / Modbus Protocol 目录 Modbus 协议简介 Modbus RTU协议 Modbus TCP协议与 Python 实现 Modbus 功能码 Modbus TCP ...

  5. Modbus 协议

    转载:https://www.cnblogs.com/DreamRecorder/p/9081127.html 一.Modbus 协议简介     Modbus 协议是应用于电子控制器上的一种通用语言 ...

  6. Modbus​协议​深入​讲解_NI

    from:https://www.ni.com/zh-cn/innovations/white-papers/14/the-modbus-protocol-in-depth.html 已​更新 Mar ...

  7. Modbus教程| Modbus协议,ASCII和RTU帧,Modbus工作

    转载自:https://www.rfwireless-world.com/Tutorials/Modbus-Protocol-tutorial.html 这个Modbus教程涵盖了modbus协议基础 ...

  8. 工控安全入门(一)—— Modbus协议

    modbus基础知识 modbus协议最初是由Modicon公司在1971年推出的全球第一款真正意义上用于工业现场的总线协议,最初是为了实现串行通信,运用在串口(如RS232.RS485等)传输上的, ...

  9. Modbus协议和应用开发介绍

    因业务需要了解Modbus协议的使用,因此对Modbus的协议,以及相应的C#处理应用进行了解,针对协议的几种方式(RTU.ASCII.TCPIP)进行了封装,以及对Modbus的各种功能码的特点进行 ...

随机推荐

  1. HttpMime 处理 多部件 POST 请求

    HttpMime 处理 多部件 POST 请求 在有的场合例如我们要用到上传文件的时候,就不能使用基本的GET请求和POST 请求了,我们要使用多部件的POST请求.由于Android 附带的 Htt ...

  2. Codeforces #252 (Div. 2) B. Valera and Fruits

    题目倒是不难,可是读起来非常恶心 依据题目的描写叙述不easy找到适合存储的方法 后来我就想不跟着出题人的思路走 我自己开一个数组c 令c[a[i]] = b[i] 则c[i] == [j] 代表第i ...

  3. sql server 行列互转

    1 列转行 测试脚本 ),课程 ),分数 int) ) ) ) ) ) ) go 转化脚本 select 姓名 , end) 语文, end) 数学 , end) 物理 from tb group b ...

  4. 学了Java 你未必知道这些

    作为一个正奔跑向编程完美天堂的朝圣者,本人觉得在平常的编程中,应该要做到以下几点: 一:汝应注释,这样做既方便别人,也方便自己去读懂代码的逻辑 二:注重细节,为自己写的每行代码负责,比如,在并发编程的 ...

  5. maven 打包 时出现非法字符: /65279错误

    maven 打包 时出现非法字符: /65279错误 碰到的一个问题: 使用下面的命令给工程打包时, maven mvn clean package -Ptest01 -Dmaven.test.ski ...

  6. shell统计

    for i in `ls -r *_*.csv`;do cat $i|echo $i": "`wc -l`;done>tongji.txt

  7. JAVA命令参数详解

    JAVA命令参数详解 JAVA命令详解 结构 说明 Java 和 OldJava JIT 选项 另请参阅 结构 java [ options ] class [ argument ... ] java ...

  8. android IllegalStateException

    由于android的线程非安全,直接在子线程中对UI进行更新是不被允许的,同样在常用的 适配器+List<E> 组合中,子线程直接更新与适配器绑定的List,便可能产生IllegalSta ...

  9. hdu 1395 2^x mod n = 1 暴力过~~最好学下欧拉定理~~~

    2^x mod n = 1 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  10. lua简洁的功能(两)

    Lua中的函数带有词法定界的第一类值. 第一类值: 在Lua中,函数和其它值(数值,字符串)一样,函数能够被存放在变量中,也存放在表中, 能够作为函数的參数,还能够作为函数的返回值. 词法定界:被嵌套 ...