• 易迪拓培训,专注于微波、射频、天线设计工程师的培养
首页 > 无线通信 > 技术文章 > 基于PLC的Modbus协议的实现

基于PLC的Modbus协议的实现

录入:edatop.com     点击:

      按照上述程序格式, 即可在数据发送区写入指令进行相应的操作。

  1) 读取温度, 其指令格式: [ 设备地址] [ 命令号] [ 通道号] [ 传感器编号] [ 读取个数高8 位] [ 低8位] [ CRC 低8 位] [ CRC 高8 位] , 其中CRC 校验字节以子程序形式调用. 设备响应: [ 设备地址] [ 命令号] [ 返回的字节个数] [ 数据1] [ 数据2] . . . [ 数据n] [ CRC 低8 位] [ CRC 高8 位] 。

  每个18b20 读取温度的返回值占用两个字节.

  转换方法: 将实际温度扩大100 倍, 再将此数值分为两个字节传送出来即可. 例如, 实测出来温度是28.65℃ , 扩大100 倍即2 865, 则发送的第一个字节是2 865/ 256 即是11, 第二个字节是2 865% 256 即49, 那么传送的两个字节为0×0B 和0×31。

  需要注意的是, 由于采用两线制的485 连线方式, 会产生回波通信, 即接收端会先接收到自己发送出去的数据, 但数据还是会正常发送给采集模块, 此时接收端则应该避开前面的无用数据, 接收后面模块响应的有效数据。

  2) 在系统运行后, 若需更换传感器, 则需执行以下两条指令, 首先, 搜索ID, [ 01] [ 06] [ 0c] [ 00][ 00] [ 00] [ CRC 低] [ CRC 高] , 此指令为搜索模块1上各个通道的所有传感器。 然后写编号, 例如: [ 01][ 06] [ 09] [ 05] [ 00] [ 05] [ CRC 低] [ CRC 高] , 表示将第9 通道的原来编号为05 的传感器更换后重新设定为05, 执行此两条指令后, 方可重新读取温度。

  3) CRC 校验字节的生成是比较关键的一步,其过程比较复杂, 步骤如下:

  ①预置一个16 位CRC 寄存器为十六进制FFFF, 即所有数位均为1。

  ②该16 位寄存器的低8 位字节与信息帧的第一个字节的低8 位进行& 异或?运算. 运算结果放入这个16 位寄存器。

  ③ 把这个16 寄存器向右移一位, 用0 填补高位。

  ④若向右( 标记位) 移出的数位是1, 则生成多项式A001( 1010000000000001) 和这个寄存器进行"异或"运算; 若向右移出的数位是0, 则返回③。

  ⑤重复③ 和④, 直至移出8 位。

  ⑥重复③ ~⑤, 直至该报文所有字节均与16 位寄存器进行& 异或?运算, 并移位8 次。

  ⑦将得到的l6 位CRC 寄存器的高、低位字节进行, 即2 字节CRC, 加到报文。

  其程序流程如图5, 以上面的温度读取指令为例, 其CRC 校验梯形图如图6。

\
图5 CRC 校验流程
\

图6 CRC 校验程序

  在读取温度时, 应严格遵守DS18b20 的读写时序, 否则就会出现错误, 丢帧等, 若用脉冲信号定时读取, 则间隔应不小于100 ms. 一般出现错误帧时数据显示为0℃, 此时可以进行简单的滤波, 例如传回值为0 时不显示数据, 或者多组数据取平均值后再显示, 以避免温度显示的大幅度跳动。 DS18b20的初始化温度显示为85℃, 若一直不变, 则此传感器可能已经损坏或是接线不良, 应进行相应的检查。

上一篇:中国TDD-LTE阵营加大 频谱价格不断上涨
下一篇:云计算存储技术

手机天线设计培训教程详情>>

手机天线设计培训教程 国内最全面、系统、专业的手机天线设计培训课程,没有之一;是您学习手机天线设计的最佳选择...【More..

射频和天线工程师培训课程详情>>

  网站地图