通过modbus连接

慧程HiperMATRIX 支持对modbus协议的连接,可以使用 TCP/IP的方式 连接到modbus。与 Siemens 和某些 Allen Bradley 连接类似,modbus 设备不支持标签浏览。您可以在HiperMatrix手动创建设备属性,或使用点位导入/导出在 Excel 创建所有点位。目前,HiperMATRIX 支持使用TCP/UDP/RTU连接的modbus

创建modbus TCP/UDP 连接

  1. 进入配置管理-连接配置,点击新建连接
  2. 选择modbus协议, 根据您设备的通信协议是 TCP/UDP/RTU 选择对应的连接模式,其中TCP/UDP的连接配置信息完全相同,RTU的配置有很大差异,详情请看属性说明中的表格。

  1. 在连接中填入相关配置

其中:

  • 基础属性中:主机名表示 modbus中master的ip地址,端口默认使用 502
  • 高级属性中:client's station number 代表 master连接下的slave设备号
  • 字节序:代表着此设备传输的数据格式,四种格式供选择,默认是大端,请根据设备具体的输出数据格式选择对应的格式。
英文 中文
big endian 大端
little endian 小端
big endian byte swap 大端字节序反转
little endian byte swap 小端字节序反转
  1. 点击测试连接,连接成功代表master节点服务正常,如失败可以在连接日志中查看失败原因。

  2. 点击提交。提交完成后将显示连接列表,连接状态应该为已连接,启用状态为启用

相关属性说明:

通用信息 内容
名称 设备连接的名称
描述 设备连接的描述
启用 连接是否处于活动状态。禁用此设置会终止与设备的通信。
连接性
主机名 设备的主机名或 IP 地址。如192.168.13.12
端口 连接到设备时使用的端口。默认值为 502。
超时 请求超时时间,以毫秒为单位。默认值为 10,000。 (即为10秒钟)
高级
client's station number 可以理解为设备号。默认值为 1。
连接超时后重新连接 在连续几次超时后,设备连接将尝试重新连接到设备。此设置确定在重新连接之前必须发生多少次连续超时。
字节序 传输出来的数据格式
连接性
串口名 开放的串口名称
波特率 符号的传输速率
数据位 数据包中的实际数据位
终止位 单个包中的最后一位
校验位 奇偶校验位

创建设备挂载连接

在设备配置中创建设备,将连接设置为刚刚创建的对应连接,

注意:连接一定要选择正确。否则匹配不到正确的连接。

配置数据地址:

根据modbus的配置,填入对应的地址即可获取对应的数据 .

modbus相关知识

Modbus协议是一个主/从架构的协议。

​ 在同一个Modbus网络中同一时刻只有一个节点是主(master)节点,其他使用Modbus协议参与通信的节点是从(slave)节点,从节点的最大编号为247。每一个slave设备都有一个唯一的地址。在串行和MB+网络中,通讯总是由主节点发起(在以太网上,任何一个设备都能发送一个Modbus命令,但是通常也只有一个主节点设备启动指令),子节点在没有收到主节点请求时不会发送数据。各个子节点之间不会直接相互通信。

传输方式

​ Modbus 协议是一种应用层报文传输协议,包括ASCIIRTUTCP三种报文类型,协议本身并没有定义物理层,只是定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。
​ Modbus 协议使用串口传输时可以选择RTU或ASCII模式,并规定了消息、数据结构、命令和应答方式并需要对数据进行校验。ASCII 模式采用LRC校验,RTU模式采用16 位CRC校验。通过以太网传输时使用TCP,这种模式不使用校验,因为TCP协议是一个面向连接的可靠协议。

modbus数据存储区(地址处理)

modbus的存储区分为5种

存储区 对应地址码 所占大小/bit 读写权限 数据范围(短版本)
线圈状态(Coil Status) 0(0xxxx) 1 可读可写 00001-09999
离散输入状态(Input Status) 1(1xxxx) 1 只读 10001-19999
输入寄存器(Input Register) 3(3xxxx) 16 只读 30001-39999
保持寄存器(Holding Register) 4(4xxxx) 16 可读可写 40001-49999
扩展寄存器(Extended Register) 6(6xxxx) 16 可读可写 600000-699999

补充说明:

最初,Modbus 格式允许指定多达 10000 个地址或离散输入、线圈、输入寄存器和保持寄存器。后来,这被扩展为允许每个内存区域(扩展寄存器区域除外)内最多 65536 个地址。当使用长地址格式即输入寄存器:1 时,可以指定 1 到 65535 之间的地址。当使用较短的版本时,有两种可用的格式,即 30001 和 300001。较短的格式 3XXXX 被限制在 30001 和 39999 之间,而较长的格式 3XXXXX 被限制在 300001 和 365535 之间。这些内存区域都从地址 1 开始。

​ 对于扩展寄存器区域,可以指定地址 0-99999。这些寄存器映射到长度为 10000 的文件记录。地址 600000 对应于文件记录 0 中的第一个地址。地址 610000 则是第二个文件记录中的第一个地址,依此类推。请注意,通常只有 10 个文件记录(600000 到 699999),但规范允许 65536 个文件记录。使用扩展寄存器:格式您可以引用所有这些,如果使用较短的格式,则它被限制为 699999。该内存区域从地址 0 开始。

大多数内存区域从地址 1 开始,除了从 0 开始的扩展寄存器区域。当它在 Modbus 协议中发送时,它们都映射到 0x0000。

输入、保持和扩展寄存器由 16 位寄存器组成,而离散输入和线圈区域由位组成。

对于数据存储,若处于离散量输入(1)、线圈(0)的数据存储区域,则其中只能存储boolean类型,占一个Bit
若处于输入寄存器(3)与保存寄存器(4),则默认占据2个byte

若类型属于长整型(Long)浮点数(Float)双重浮点数(Double) , 则占据4个byte,侵占其后的一个地址

modbus字节序说明

modbus中对于长整型(Long)浮点数(Float)双重浮点数(Double) 拥有多种解析方式

一般分为: 有些地方使用1234用以表示

  • Null --用于bool、bit、uint16、int16四种数据类型,表示无字节序
  • ABCD --Big-endian (大端模式),
  • DCBA --Little-endian (小端模式),
  • BADC --Big-endian byte swap (大端反转),
  • CDAB --Little-endian byte swap (小端反转),

目前 **慧程HiperMATRIX ** 中默认采用ABCD形式进行解析查看。

暂不支持更改。所以在进行配置时需要指定大字节序进行配置。

不同解析会得到完全不同的结果。

另对于 kepServer ,默认采用CDAB

若选择对应的ABCD,则需要进行如下的设置

modbus对于数组的处理,

modbus中对于数组的处理,是指从起始位置,读取多少个,不存在单一位置存放数组的情况。

例如:

该模拟软件数据地址从0开始,故需要+1进行地址确认。

40001 数组长度为2 , 则读取到: [1, 4060]

40004 数组长度为2, 则读取到: [3.14, 2.7]

2024-10-16
0