版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

一、 说明

ModBus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。

...

《ModBus驱动用户手册》指导用户进行ModBus驱动的正确配置。内容可分为驱动配置和驱动测试,正确结果为ModBus驱动可以读写ModSim的值。

二、 ModBus驱动配置

《Modbus驱动配置》目的是本地的ModBusRTU和ModBusTCP能够读写通过ModBus服务端的数据

modbus驱动根据协议不同,分为两个驱动,请根据实际情况配置:

  • modbusRTU,用于通过窗口通信modbusRTU,用于通过串口通信
  • modbusTCP,用于通过网口通信

1. ModSim和ModScan使用

ModSim是ModBus模拟器,用来模拟ModBus中的寄存器数值,可以通过ModScan读取到该寄存器值。

用到ModSim4中寄存器,分别是Coil Outputs(DO)、Digital Inputs(DI)、Analogue Inputs(AI)、Holding Registers (AO)

2. 驱动配置

系统驱动中需要包含ModBusRTU和ModBusTCP这两个驱动,并在t_device_driver中配置好驱动,注意id为主键,不可重复

驱动名称根据协议不同,请选择:modbustcp或者modbusrtu 这两个驱动为产品自带,如果没有可以在驱动列表中添加:

eview启动成功后 eview系统的启动、停止与重启

访问:127.0.0.1/config

用户名:admin 密码:admin

Image Added

Image AddedImage Removed

3. 设备配置

  • 通信连接配置
    • modbustcp驱动
      • 连接方式(conntype)请选择tcpclient方式
      • 连接参数:
        • 设备IP输入设备的实际IP
        • 设备端口 (port)一般是502,除非特别指定
      • 示例:添加设备,连接方式选择tcpclient,驱动ID为t_device_driver中配置的驱动的id,设备id为主键,连接参数格式为ip=xx.xx.xx.xx;port=xx
    • modbusrtu驱动
      • 连接方式, 请选择serial串口方式
      • 连接参数:
        • 对于网关,有4个串口,串口名称分别需要输入:/dev/ttyO1,/dev/ttyO2,/dev/ttyO3,/dev/ttyO4, 具体见:串口通讯参数配置
        • 对于windows,串口为:COM1,COM2,COM3,COM4,以此类推。可通过设备管理器查看应该配置哪个串口对于windows,串口为:COM1,COM2,COM3,COM4,以此类推。可通过设备管理器查看应该配置哪个串口
        • 对于Linux,串口根据情况而定
        • 配置串口波特率、奇偶校验位等

...

  • 设备参数配置
  • 设备参数1:站号或从级地址,通常用于modbusrtu以区分不同设备。如果设备未说明,可不输入如果设备未说明,可不输入,此时缺省值为:1
    • 注意,站号在设备可以设置,在变量地址也可以指定!变量地址中指定的优先级高于设备中指定的优先级。
    • 指定方法:X#TYPE:nnnn,如5#AO:1001,表示5号子站的AO:1001地址
  • 设备参数2:无或者0表示按正常指令;1表示多寄存器指令。通常不需要填写
  • 设备参数3:每个数据块自动组块时的最大字节数。缺省为230个字节。通常不需要填写
    • 例外情况包括:北辰模块有时候,只能取98个寄存器(196个字节),此时如果读取不到就需要调整这个值
  • 页面配置方式如下:
  • Image Added
  • Image Added
  • 点击保存按钮即可  下方数据库配置,自行忽略 
  • modbustcp,通过网络方式配置的数据库示例:
    • Image Added
  • modbusrtu,网关中配置示例,网关第一个串口为/dev/ttyO1:
    • Image Added
  • modbusrtu,windows中配置示例,windows第一个串口为COM1:
    • Image Added
    配置的数据库示例:
    • Image Removed

4. 变量配置

在表t_device_tag中配置点名。tag中配置点名。格式:[站号#]数据块类型:块内偏移[.位]

  • 点名格式为:[站号#]数据块类型:块内偏移[.位]
    • 数据块类型:AI、AO、DI、DO。其中AI、AO为字寄存器,每个表示2个字节;DI、DO为位寄存器,每个表示1个位(bit)。
    • 站号#,表示指定站号,如果没有则取设备参数中配置的站号
    • .位,表示取第N位
  • 点名格式为:数据类型:地址
  • 数据块类型:AI、AO、DI、DO
  • 地址从1开始,如AI:1表示ai类型地址为1的寄存器的值。
  • 如果需要寄存器的一个位,则用AI:1.0

...

  • 常用示例:
    • AO:1001,AO类型的第1001个字寄存器
    • AO:1001.15,AO类型的第1001个字寄存器的第15位(0....15位)
    • DO:1001,DO类型的第1001个位寄存器
    • 2#AO:1001,2号子站AO类型的第1001个字寄存器
    • 2#AO:1001.15,2号子站AO类型的第1001个字寄存器的第15位(0....15位)
    • 2#DO:1001,  2号子站DO类型的第1001个位寄存器

Image Added



三、 测试

  • modsim工具是一个可以模拟真实设备的程序。程序下载地址:ftp://ftp.peakinfo.cn/software/modbus/    该程序不需要安装,双击即可:
    • Image Added 
    modsim工具是一个可以模拟真实设备的程序。
    • 打开ModSim,选择数据类型为Holding Registers, 对应数据库中的AO类型的点
  • 如果上面启动eview-server时,点击的是bin/pkservermgr.exe,该步骤不用做:
    • 启动bin\start_pkmemdb.bat,
    • 启动bin\pknodeserver.exe,将点写入内存数据库中
  • 启动bin\pktagmonitor.exe,用于检测点值
  • 修改40001的点值,观察exe的值得变化

四、 功能码请求类型

读取寄存器功能码:

读取AI(输入寄存器):3

读取AO(保持寄存器):4

...

写入DO(多个线圈):15

写入AO(多个寄存器):16


五、 ModBusTCP协议分析

ModBusTCP无校验码,头部6个长度,数据区(pdu)读请求为6个字节,读应答根据请求寄存器长度而定。

...

应答:00 03 00 00 00 06 01 05 00 2D FF 00


  • 向AO地址AO:3004写值42。

请求:1F 39 00 00 00 09 01 10 0B BC 00 01 02 00 2A

解析:1F 39(0x1F39事务号) 00 00(0x0000表示是modbus协议) 00 09(后面字节个数9个) 01(站号) 10(命令号,16,表示写入多个寄存器指令) 0B BC(起始地址,0x0BBC=3004) 00 01(寄存器个数,1个) 02(数据长度2个字节) 00 2A(控制值0x2A=42)

应答:1F 39 00 00 00 06 01 10 0B BC 00 01

解析:1F 39(0X1F39事务号) 00 00(0x0000表示是modbus协议00 06(后面字节个数9个) 01(站号) 10(命令号,16,表示写入多个寄存器指令) 0B BC(起始地址,0x0BBC=3004) 00 01(寄存器个数,1个)

抓包wireshark的控制命令的截图如下:

Image Added

六、 ModBusRTU协议分析

ModBusRTU有校验码,请求的数据长度是8个字节。


七、 ModBus协议文本

PI_MBUS_300.pdf

开放型Modbus.doc

...