分享

程序员日志,以智能电表为例,描述Modbus协议的实现方式

 永续智慧馆藏 2018-02-10

嗯,说实话,我也觉得这一章多此一举,因为有着前面几章,基本也就足够了,写这些日志的目的不是为了多么深入学习解构这些协议,毕竟这些协议都还有着更深层次的应用,那就需要更加深入进去研究了,我们这里就不提了。我写这些日志就是为了,在新接触到一种协议的时候,能够更快更系统的熟悉入手,以前刚接触一个新协议时,总是会希望能够有着明确的指导,该怎么去解构,怎么去入手,才能更加深入的去学习。

好的,废话不多说,这也是关于modbus的最后一篇,以后有兴趣了在更深入的写一些吧,不然,总有刷文骗点击的嫌疑啊!智能电表的协议呢,大致也是差不多了,通讯方式我们还是采用RS-485,通讯制式还是9600,n,8,1,看看下面的功能代码,是不是也比较熟悉。

程序员日志,以智能电表为例,描述Modbus协议的实现方式

智能电表的功能代码表

在上面我们可以看出一点小差别来,我们之前的协议都是读出寄存器里的整型数据,而这里有指令可以读出浮点型数据,我们都知道浮点数在计算机里可以通过IEEE754规范来显示,有32位也有64位,这里我们使用的是32的单精度标准浮点数,即上位机每次要读取两个地址,4个字节,才能完整的表达一个浮点数,其他功能的寄存器地址我就不贴了,基本和以前讲过的大同小异,我们主要看看浮点型参数的寄存器地址。

程序员日志,以智能电表为例,描述Modbus协议的实现方式

浮点数参数的地址表

注意一点,在协议里返回的参数字节顺序是按照低字的高字节、低字的低字节、高字的高字节、高字的高字节的顺序排列的,如果和PLC设备通讯的话,可能需要注意一下,比如西门子的有些PLC的字节顺序正好是反过来的。

程序员日志,以智能电表为例,描述Modbus协议的实现方式

设置参数地址表

在功能代码为0x0F的情况下,我们可以看到设备地址的每个字节都有单独的含义,靠,实在是没啥好说的,和以前的配置参数的数据桢一毛一样,我就不再这骗字数了,大家见谅哈~

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多