1. RTU的传输机制

  RTU,即远程传输单元。ModBus主机通过RTU方式发送数据帧给从机时,数据帧格式为:

  (1) 主机发出目标从机的地址
  (2) 接着是功能码
  ModBus提供了127个功能码,即规定主机找从机要实现的操作分了128种可能,功能码表示收到主机的数据帧的从机之后要干什么事情,如0x03功能码表示是主机要读从机的数据
  (3) 针对功能码,附加的数据信息(相当于c函数的形参一样)
举个例子,主机去读地址为2的从机的数据,那么地址域为0x02,功能码为0x03,附加数据信息则是要表明主机要读从设备的哪些存储单元上的数据: 从哪个地址开始读,读多长(从机的每个存储单元都有一个确定的地址)。
  针对不同的功能码,其数据域代表的意义不同。以0x03功能码为例,数据域的意义是哪个地址开始,读多少个。
  (4) 如上构成一条数据帧之后,再全部参与CRC16的校验,CRC16就是将它们进行一种特定的方式运算,最后得到一个16位的二进制数,这个二进制数反映了整个数据帧的一种规则,这个二进制数尾加在数据帧后面,称之校验码。
  注意几点:
  a. 主、从机上电后,都处于接收状态,从机不能主动发数据包给主机。主机将自己转为发送状态之后,发出如上数据帧。因为每个从机都处于接收状态,所以所有从机都收到主机发出的数据包。
  b. 从机在读取主机的数据包,但是一个问题,从机并不知道该接收到何时才停止接收,因为主机没有告诉从机这次它要发送多少字节数据给从机,而且主机发送的数据帧的长度又不是固定不变的。从机是要在收到一个完成的数据包之后才来判断这个数据包的(是不是给我的,要我做哪些事情)。ModBus规定的数据帧并没有明确规定数据包何时结束,特别是RTU方式,它并没有明确的结束标志。因此ModBus借用人类平时的语言交流规约,发数据包的一方在发数据的时候,接收方一直在接收,当发送方发送完毕之后,间隔3.5字符之后发送方仍然没有发送数据,接收方就会认为发送方已经把数据发送结束了(接收方在发送方发送数据期间其计时器一直为0,当发送方停止发送之后,计时器开始计时,直到计时到3.5字符之后,确定停止发送数据给接收方了,接收方开始分析处理接收的数据包)。
  所以注意,发送数据包的一方在写程序的发送数据包的时候中间不要停顿,一口气发完。若发送方发数据中途停顿下来了但又没有停3.5个字符的时间,那么接收方会把停顿前收到的数据直接丢弃。
  c. 3.5个字符的时间如何计算?
  假设ModBus协议运行于RS-485硬件层上,RS-485的波特率为9600bit/s,那么每bit数据传输的时间t等于1/9600=104us,8位数据位+起停位共10位,即一字节数据需要10位,每一位的传输速度为104us,那么发送一字节数据需要1040us,3.5字符等于3.5字节,那么3.5字符时间=3.5*1040us = 3640us,大概4ms。可以取5到6毫秒但不能小于3.6毫秒,不然实现不了ModBus协议。
  由于RTU方式,对于整个数据包并没有发送起始标志,也没有发送结束标志(就像打电话,拨号后的”喂~”是发送起始标志,”先这样”是发送结束标志),因此需要硬件上的定时器来规约数据包的起停标志,如上述所讲。因此,RTU方式的ModBus在程序设计中,需要开发者懂得:
单片机定时器的使用,定时4毫秒
串口的收发数据

2. ASC的传输机制

  相对于RTU传输方式,ASC传输方式比较简单。
  假设主机去读地址为2的从机的数据:
  (1) ASC有明确的起始标志,主机要去寻找每一台从机的时候,它会先发出一个”:”的ASC码,”:”的ASC码是0x3a,所以从机只要收到0x3a就知道主机在寻找从机了。
  (2) 0x3a之后,就是要发送0x02这个地址域。ASC方式,0x02会被拆成’0’和’2’并发出各自的ASC码值
  (3) 地址过后是功能码、数据码,同上
  (4) 校验码部分,从地址域到数据域结束参与校验,但不是CRC校验而是LRC校验。LRC校验的实现是(地址+功能码+数据1+…+数据n)%256,那么就得到一个小于256的数,再用c语言中的按位取反加1(加1其实是求补码),注意加法操作不能加上”:”,这个开始标志是不需要判断正误的。(当然这个算法是不需要我们写的,移植现成的库或者代码即可)
  (5) 把计算出来的校验码尾加在数据域之后,它也是占据2字节。同理,还是需要拆分,然后发送其ASC码值的二进制数
  (6) 最后发送0x13 0x10作为数据包的结束标志,0x13是c语言中的’\r’(回车),0x10则是’\n’(换行)(更正:0x13和0x10改为13和10)

  ASC在调试上非常方便,如在串口终端可以明确看到”:”等标志,但是效率低,一个字节的数据需要拆成两字节来传输,数据量增大了一倍,所以在工作中用得相对较少。

3. 从机的应答数据包

  上面讲的是主机查询从机的机制,主机发出非0的从机地址时,目标从机收到数据包后都应给予反馈,那么就需要知道从机反馈主机的数据包格式了。
  从机回应主机的数据包格式跟主机查询数据包格式是一样的,但是有两个地方需要调整:
  假设主机寻找从机,从机去获取传感器上的数据,从机明知传感器是坏的,所以从机需要对回复有所调整,
  a. 正常返回时,从机发回的功能码和主机发来的功能码一致,为1~127
  b. 异常发回时,从机在收到的功能码的基础上加上128(主机判断从机返回数据包的功能码>=128时就可以知道从机设备是异常的)

ModBus RTU和ModBus ASC相关推荐

  1. Modbus RTU转Modbus TCP模块,RS232/485转WiFi模块,WJ105

    产品特点: ● Modbus RTU协议自动转换成Mobus TCP协议 ● Wi-Fi支持802.11b/g/n 协议 ● 手机轻松设置WiFi密码和配置参数 ● RS232/485波特率从300到 ...

  2. Modbus RTU转Modbus TCP模块,RS232/485转以太网模块,WJ102

    产品特点: ● Modbus RTU协议自动转换成Mobus TCP协议 ● 100M高速网卡,10/100M 自适应以太网接口 ● 支持 AUTO MDI/MDIX,可使用交叉网线或平行网线连接 ● ...

  3. 详细解读Modbus RTU、Modbus ASCII、Modbus TCP的区别

    Modbus 是Modicon公司于1979年开发的串行通信协议.它最初设计用于公司的可编程逻辑控制器(PLC). Modbus是一种开放式协议,支持使用RS232/RS485/RS422协议的串行设 ...

  4. RS232(Modbus RTU)+RS485(Modbus RTU)协议RFID识别磁导航AGV小车传感器|定位仪CK-GL16-AB的安装与磁处理方法

    RS232(Modbus RTU)+RS485(Modbus RTU)协议RFID识别磁导航AGV小车传感器|定位仪CK-GL16-AB是一款面向AGV行业新推出的一款"跨界"传感 ...

  5. ModBus RTU与ModBus TCP通信协议详解

    1.Modbus简介 Modbus通信协议由Modicon公司(现已经为施耐德公司并购,成为其旗下的子品牌)于1979年发明的,是全球最早用于工业现场的总线规约.由于其免费公开发行,该协议免费使用,M ...

  6. Modbus和Modbus Rtu和Modbus tcp

    Modbus rtu和Modbus tcp两个协议的本质都是MODBUS协议,都是靠MODBUS寄存器地址来交换数据:但所用的硬件接口不一样,Modbus RTU一般采用串口RS232C或RS485/ ...

  7. Modbus RTU 通信工具设计

    Modbus 是一个工业上常用的通讯协议.一种通讯约定. ModBus 协议是应用层报文传输协议(OSI 模型第7层),它定义了一个与通信层无关的协议数据单元(PDU),即PDU=功能码+数据域. M ...

  8. modbus协议和串口服务器,Modbus RTU通信模式与Modbus ASCII通信模式的异同点

    Modbus基于串行通信存在两种模式:Modbus RTU与Modbus ASCII模式,不管是RTU模式还是ASCII模式,Modbus信息都以帧的方式传输,每个信息帧有确定的起始点和结束点,使接收 ...

  9. Modbus RTU 通信应用案例

    如何打开项目归档文件 例程中的TIA博途项目文件与STEP 7项目文件均为归档文件,需要按如下方式打开: TIA博途项目文件 1. 打开TIA博途软件,通过软件左下方"项目视图"按 ...

  10. 一文看懂Modbus, Rtu, Rs485等名词的联系

    Modbus rtu和Modbus tcp两个协议的本质都是MODBUS协议,都是靠MODBUS寄存器地址来交换数据:但所用的硬件接口不一样,Modbus RTU一般采用串口RS232C或RS485/ ...

最新文章

  1. SharePoint使用BCS开发你第一个应用程序(三)
  2. des vue 双倍长 解密_3DES双倍长加密 - osc_ojx9hm4t的个人空间 - OSCHINA - 中文开源技术交流社区...
  3. 设计模式--外观模式
  4. java如何访问局域网共享文件
  5. CCS如何恢复到默认界面?
  6. 网站安全狗V3.0—— .NET安全设置及保护实战教程
  7. Java从零开始(二) Tomacat
  8. python语言是非跨平台语言吗_python是跨平台的语言吗
  9. 苹果零售业逐步恢复:部分已允许顾客店内试用AirPods
  10. xcode java mac_mac 下常用命令(xcode常用命令,环境相关等)
  11. Python办公自动化 - 4 PDF办公自动化
  12. linux下使用SSH实现端口映射
  13. 2016秋招面经(蘑菇街+BT+网易杭研+CVTE+唯品会)
  14. 【安全知识分享】2021年安全生产月活动方案(附下载)
  15. 校企勾结?京东被指压榨实习生:不结薪资、暴力对待、校方威胁...
  16. 连接查询之内连接(等值连接、非等值连接和自连接)
  17. 【Router】PC连接到路由LAN,但是无法获取到IP地址问题分析及解决方案
  18. 器件选型电源篇-AC/DC电源模块选型及性能测试
  19. ffmpeg 去除图片中的水印
  20. 网游装备防盗设计之交易系统

热门文章

  1. 绿云酒店管理系统 服务器要求,绿云宾馆管理软件-系统基础.doc
  2. linux系统的wps办公软件,linux上安装wps办公软件
  3. android首字母检索音乐,ATX 系列 - 如何测试网易云音乐 (Android 篇)
  4. Mysql之sql注入
  5. 宝马 android手机同步,BMW将发布无线安卓互联系统,CarPlay终于不再一家独大!
  6. 希尔伯特空间、欧几里德空间
  7. 计算机系统修复命令提示符,老司机帮您w10蓝屏后用命令提示符修复系统的方法...
  8. 软件测试性能测试报告完整版,性能测试报告模板
  9. Git下载安装及设置详细教程
  10. Xshell使用教程(不断总结...)