zoukankan      html  css  js  c++  java
  • ModbusRTU模式和结束符(转)

    Modbus RTU模式的协议字段

    起始位

    设备地址

    功能码

    数据

    CRC校验

    结束符

    至少3.5个字符

    8bit

    8bit

    N*8bit

    16bit

    至少3.5个字符

     

    Modbus协议RTU模式要求每一帧的起始和结束都以至少3.5个字符为间隔。

    每个字符间隔是字符位数/波特率,以1位起始位,8位数据,1位停止位,无奇偶校验位的10位数据。

    以波特率为9600b/s为例,字符间隔为1.14ms,也就是每一帧的开始和结束都伴随着至少3.5*1.14=4.01ms的时间间隔。

    在字节流中以1.5个字符时间作为帧间间隔,以上面的通信速率,则1.5*1.14=1.71ms,即字符流中出现1.71ms的间隔时可能意味着一帧数据结束。

    但必须同时满足其后的一段时间内(2个字符)不会再接收到字符,否则认为结束的该帧为错误帧。

    由于收到的每个字节都有可能成为一帧数据的最后一个字节,因此,每接收一个字节,关闭上一个已经开启的3.5个字符时间和1.5个字符时间的定时器,处理完接收到得数据后再次启动3.5个字符时间和1.5个字符时间的定时器,以检测该帧数据的结束

    这也就是上面所说的在帧间间隔后的一段时间内(2个字符)不能接收到数据,否则该帧为错误帧。1.5个字符时间和3.5个字符时间的定时起点是一致的,这是Modbus协议RTU模式的关键之处

    当然这也增加了系统的中断负荷。在发生1.5个字符时间中断后,处理其接收到得数据(这里未考虑设备地址、超时、奇偶校验等错误),计算接收到的字符数-2个字节的CRC校验和,将计算结果与接收到得最后两个字节(当做发送的CRC校验)进行比较,从而得知这是否是完整的一帧数据。CRC校验正确,说明这是一帧完整的数据,CRC校验错误,说明这是一帧错误的数据帧,数据帧不完整。

    发生1.5个字符时间中断后,如未发生3.5个字符时间中断,再次接收到字符,同样说明接收到得是一帧不完整的数据帧;如随后发生3.5个字符时间中断,则处理刚接到的完整数据帧,给予对应的应答。这里的3.5个字符时间同时也可作为下一帧数据的起始

  • 相关阅读:
    ACL2019对话、问答相关论文整理
    docker for windows添加卷映射
    聊聊多轮任务型对话那些事
    创建用户故事地图(User Story Mapping)的8个步骤
    关于如何做出好的产品
    知识体系整理
    关于如何做好需求的方法
    使用rasa搭建聊天机器人
    【转载】指代消解笔记
    计算机相关会议排名(一)
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12007342.html
Copyright © 2011-2022 走看看