• modbus_百度经验


    1. 转自:https://jingyan.baidu.com/article/2c8c281dbdfa9f0009252a74.html
    2. 图片都没了,百度真差劲~~~还是博客园好!!!
    3.  
    4.  

      通讯数据的类型及格式:

       
    5.  

      通讯信息传输过程:

      当通讯命令由发送设备(主机)发送至接收设备(从机)时,符合相应地址码的从机接收通讯命令,并根据功能码及相关要求读取信息,如果CRC校验无误,则执行相应的任务,然后把执行结果(数据)返送给主机。返回的信息中包括地址码、功能码、执行后的数据以及CRC校验码。如果CRC校验出错就不返回任何信息。

    6.  

      地址码

      地址码是每次通讯信息帧的第一字节(8位),从0到255。这个字节表明由用户设置地址的从机将接收由主机发送来的信息。每个从机都必须有唯一的地址码,并且只有符合地址码的从机才能响应回送信息。当从机回送信息时,回送数据均以各自的地址码开始。主机

      发送的地址码表明将发送到的从机地址,而从机返回的地址码表明回送的从机地址。相应的地址码表明该信息来自于何处。

    7.  

       功能码:

      是每次通讯信息帧传送的第二个字节。ModBus通讯规约可定义的功能码为1到127。变送器仅用到其中的一部分功能码。作为主机请求发送,通过功能码告诉从机应执行什么动作。作为从机响应,从机返回的功能码与从主机发送来的功能码一样,并表明从机已响应主机并且已进行相关的操作。

        表8.1 MODBUS部分功能码

       
    8.  

      数据区:

      数据区包括需要由从机返送何种信息或执行什么动作。这些信息可以是数据(如:开关量输入/输出、模拟量输入/输出、寄存器等等)、参考地址等。例如,主机通过功能码03告诉从机返回寄存器的值(包含要读取寄存器的起始地址及读取寄存器的长度),则返回的数据包括寄存器的数据长度及数据内容。对于不同的从机,地址和数据信息都不相同(应给出通讯信息表)。

      响应的命令格式是从机地址、功能码、数据区及CRC码。数据区的数据都是两个字节,并且高位在前(电能量除外)。

    9.  

      MODBUS功能码简介

      功能码“03”:读多路寄存器输入

      例如:主机要读取地址为01,起始地址为0000的1个从机寄存器数据。

      从机数据寄存器的地址和数据为:

      主机发送的报文格式:

       
       
    10.  

      错误校验码(CRC校验):

      主机或从机可用校验码进行判别接收信息是否正确。由于电子噪声或一些其它干扰,信息在传输过程中有时会发生错误,错误校验码(CRC)可以检验主机或从机在通讯数据传送过程中的信息是否有误,错误的数据可以放弃(无论是发送还是接收),这样增加了系统的安全和效率。

      MODBUS通讯协议的CRC(冗余循环码)包含2个字节,即16位二进制数。CRC码由发送设备(主机)计算,放置于发送信息帧的尾部。接收信息的设备(从机)再重新计算接收到信息的CRC,比较计算得到的CRC是否与接收到的相符,如果两者不相符,则表明出错。

      在进行CRC计算时只用8个数据位,起始位及停止位,如有奇偶校验位也包括奇偶校验位,都不参与CRC计算。

    11.  

      CRC码的计算方法是:

      1.预置1个16位的寄存器为十六进制FFFF(即全为1);称此寄存器为CRC寄存器;

      2.把第一个8位二进制数据(既通讯信息帧的第一个字节)与16位的CRC寄存器的低

         8位相异或,把结果放于CRC寄存器;

      3.把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检查右移后的移出位;

      4.如果移出位为0:重复第3步(再次右移一位);

      如果移出位为1:CRC寄存器与多项式A001(1010 0000 0000 0001)进行异或;

      5.重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;

      6.重复步骤2到步骤5,进行通讯信息帧下一个字节的处理;

      7.将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低

         字节进行交换;

      8.最后得到的CRC寄存器内容即为:CRC码。

    12.  

      通讯错误信息及数据的处理:

       
    13.  

  • 相关阅读:
    [转]PC客户端与Android服务端的Socket同步通信(USB)
    [转]Android手机通过socket与pc通信
    [转]异常:android.os.NetworkOnMainThreadException
    [转]使用openssl库实现RSA、AES数据加密
    朴素贝叶斯分类器
    关于Mysql数据库的注意点
    poj 2386 Lake Counting
    poj 3253 Fence Repair
    poj 3069 Saruman's Army
    pat1100. Mars Numbers (20)
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/11333122.html
Copyright © 2020-2023  润新知