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. String ,StringBuffer,StringBuilder精髓比較

    1. 在运行速度方面的比較:StringBuilder > StringBuffer > String 2. StringBuffer与StringBuilder.他们是字符串变量,是可改 ...

  2. HDU 1164 Eddy's research I【素数筛选法】

    思路:将输入的这个数分成n个素数的相乘的结果,用一个数组存储起来.之后再输出就能够了 Eddy's research I Time Limit: 2000/1000 MS (Java/Others)  ...

  3. ClientID 获取服务端控件,客户端id的方法

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx. ...

  4. 解决SMARTFORMS 中table 控件单行跨页的问题

    在CX项目中,MM模块做了大量的的单据打印的工作,一个问题困扰了我好久,一直不能解决.当物料描述很长时,table控件在单元格中能自动换行,这样就有可能在换页处出现一行记录的一部分打在上一页,一部分记 ...

  5. 【程序猿助手】Emacs,最强的编辑器,之间的不

     wx_fmt=png" alt="" style="max-width:100%; height:auto!important"> 内容简单 ...

  6. cheese desktop内容

    #!/usr/bin/env xdg-open [Desktop Entry] Encoding=UTF- Version=1.0 Type=Application Terminal=false Na ...

  7. effective c++ 条款23 perfer nonmember nonfreind function to member function

    主要的理由还是封装.nonmember nonfreind function 不能访问类private 成员变量. 这个场景是有一个类提供了一些基本功能,比如 class WebBrowser { p ...

  8. 英特尔® 硬件加速执行管理器安装指南 — Microsoft Windows*

    介绍 本文将指导您安装英特尔® 硬件加速执行管理器(英特尔® HAXM),这是一款可以使用英特尔® 虚拟化技术(VT)加快 Android* 开发速度的硬件辅助虚拟化引擎(管理程序). 前提条件 英特 ...

  9. hive RegexSerDe View

    EXTERNALkeyword它允许用户创建一个外部表.在表中的同时施工指定的路径中的实际数据(LOCATION).Hive 创建内部表时.会将数据移动到数据仓库指向的路径:若创建外部表,仅记录数据所 ...

  10. 辛星和你解读PHP递归

    事实上递归成其他的编程语言可以是初学者练习功能,但由于PHP特殊性,我们把它拿出来具体解释什么.关于什么是递归先说说.我是第一个承认正在寻求一些递归阶乘,例如,我们写一个函数,然后问多少的阶乘. 看以 ...