Modbus Poll 中文版用户手册及软件Download

付费 ¥4.99付费 ¥4.99

该内容已接入现有member/付费system,解锁后可View完整Resources或Download附件。

View解锁方式
Modbus Poll 中文版用户手册及软件Download缩略图
🌐 This page is not yet available in English. Showing the Chinese version. Back to Chinese page.
本文目录
  1. 1. Modbus Poll简介
  2. 2. Modbus Poll 的system要求
  3. 3. Modbus PollFunction
  4. 4. connect
  5. 5. 支持的ModbusFunction
  6. 6. data记录
  7. 7. Display format
  8. 8. 其他Function
  9. 9. Modbus Poll概述
  10. 10. 随时随地提供帮助
  11. 11. 命名单元格
  12. 12. 值单元格
  13. 13. 更改字体
  14. 14. 条件颜色
  15. 15. 缩放
  16. 16. 实时图表
  17. 17. address扫描
  18. 18. 打开一个新窗口
  19. 19. connect对话框
  20. 20. connect(Connection)
  21. 21. 串口设置(Serial Settings)
  22. 22. 远程服务器
  23. 23. 高级设置
  24. 24. 读/写定义
  25. 25. 从站ID
  26. 26. 函数代码
  27. 27. address
  28. 28. 扫描速率
  29. 29. 禁用读/写
  30. 30. 隐藏名称列
  31. 31. 单元格中的address
  32. 32. PLCaddress(基数1)
  33. 33. Enron/Daniel模式
  34. 34. 行
  35. 35. 实时图表
  36. 36. 设置
  37. 37. 缩放Function
  38. 38. 平移Function
  39. 39. 将data链接到图表系列
  40. 40. export系列
  41. 41. address扫描
  42. 42. exportaddress扫描
  43. 43. Display format
  44. 44. Native Modbus register
  45. 45. 32位有符号整数
  46. 46. 32位无符号整数
  47. 47. 64位有符号整数
  48. 48. 64位无符号整数
  49. 49. 32位浮点数
  50. 50. 64位双精度浮点数
  51. 51. 保存/打开工作区
  52. 52. export到 csv
  53. 53. export到 Modbus Slave
  54. 54. 考试中心
  55. 55. ASCII 示例
  56. 56. TCP/IP 示例
  57. 57. 测试中心字符串文件
  58. 58. Copy
  59. 59. Modbus data记录
  60. 60. Text文件
  61. 61. Microsoft Excel
  62. 62. 通信流量
  63. 63. OLE/自动化
  64. 64. Excel 示例
  65. 65. Python 示例
  66. 66. connect函数/属性
  67. 67. 读取函数
  68. 68. 自动化写入函数
  69. 69. 15.6. 各种Function
  70. 70. 写入结果
  71. 71. 保存
  72. 72. 自动化data属性
  73. 73. 15.8. 写入函数(创建data窗口)
  74. 74. 16. 异常和Error消息
  75. 75. 16.1. Modbus异常代码
  76. 76. 16.2. Modbus Poll Error消息
  77. 77. Mini Program Version,free使用!!!
  78. 78. Modbus Poll 9.9.2.1690中文版Download
Modbus Poll 中文版用户手册及软件Download插图

Mini Program Version,free使用!!!

Modbus Poll简介

Modbus Poll 是一款易于使用的 Modbus 主站模拟器,专为多种用途而开发。

其中包括:

  • Modbus 从站设备设计人员,用于快速轻松地测试协议接口
  • 需要在现场测试Modbus设备或网络的自动化工程师
  • 想要从设备中读取和/或更改特定服务data的服务工程师
  • 更改从设备中的 Modbus register
  • 记录来自 Modbus 设备的data
  • 故障排除和合规性测试

Modbus Poll 的system要求

硬件要求

处理器;建议使用 1 GHz 或更快 1 GB RAM
5 MB 可用硬盘空间
1024 x 768 显示分辨率Operationsystem要求

支持从 Windows 7 到 Windows 11 的所有 Windows 版本。

Modbus PollFunction

connect

Modbus Poll使用以下方式对从设备读取/写入data:

  • RS232 或 RS485 网络上的 Modbus RTU 或 ASCII。(USB/RS232/485转换器)
  • 基于 TCP/IP 的 Modbus。(封装在TCPdata包中的Modbus RTU/ASCII)
  • 基于 UDP/IP 的 Modbus。(封装在 UDP data包中的 Modbus RTU/ASCII)

支持的ModbusFunction

  • 01 (0x01) 读取线圈
  • 02 (0x02) Read discrete inputs
  • 03 (0x03) Read and hold register
  • 04 (0x04) Read input register
  • 05 (0x05) 写入单线圈
  • 06 (0x06) Write to a single register
  • 08 (0x08) 诊断(仅限串行线路)
  • 11 (0x0B) 获取通信事件计数器(仅限串行线路)
  • 15 (0x0F) Write multiple coils
  • 16 (0x10) Write multiple registers
  • 17 (0x11) 报表服务器 ID(仅限串行行)
  • 22 (0x16) 掩码写入register
  • 23 (0x17) 读/写多个register
  • 43 / 14 (0x2B / 0x0E) 读取设备标识

data记录

  • 将data记录到Text文件
  • 将data直接记录到 Excel 中

Display format

每个单元格都可以单独设置format。

中文描述英文描述
16位有符号registerSigned 16-bit register
16位无符号registerUnsigned 16-bit register
hexadecimalHex
binaryBinary
具有任意字/byte order的 32 位有符号整数32-bit signed integer with any word/byte order
具有任意字/byte order的 32 位无符号整数32-bit unsigned integer with any word/byte order
具有任意字/byte order的 64 位有符号整数64-bit signed integer with any word/byte order
具有任意字/byte order的 64 位无符号整数64-bit unsigned integer with any word/byte order
具有任意字/byte order的 32 位浮点数32-bit float with any word/byte order
具有任意字/byte order的 64位双精度浮点数64-bit double float with any word/byte order

其他Function

  • 用于与 Excel、VBA、Python 等接口的 OLE/Automation。
  • 监控data流量
  • 打印和打印预览
  • 字体选择
  • 条件颜色
  • 缩放
  • 实时图表
  • 保存/打开工作区
  • address扫描

Modbus Poll概述

Modbus Poll 使用多窗口界面。这意味着可以打开几个窗口。 每个都同时具有来自不同从站设备的不同data内容。

Modbus Poll 中文版用户手册及软件Download插图1

随时随地提供帮助

按 F1 并获取与当前所选项目关联的主题的上下文Related帮助。

SHIFT + F1 调用一种特殊的“帮助模式”,在这种模式下,光标会变成帮助光标(箭头 + 问号)。 然后,用户可以在用户界面中选择可见对象,例如菜单项、Tools栏button或窗口。 这将打开有关描述所选项目的主题的帮助。

命名单元格

在这里,您可以键入任何Text来指定值单元格。您还可以从 Excel 单元格Copy/粘贴Text。

值单元格

显示Modbusregister的data值。如果双击值单元格,则会出现一个对话框 将新值写入从设备。在值单元格中键入数字也会显示对话框。 可以选择用于写入值的 Modbus 函数。

“在Response正常时Close对话框”复选框用于在成功send值时自动Close对话框。 当要更改大量值时,这很方便。这样,可以快速选择新单元格,然后再次键入新值。

Modbus Poll 中文版用户手册及软件Download插图2

更改字体

要更改字体,您有 2 个选项

  • 选择要更改的单元格,然后单击鼠标右键。
  • 选择要更改的单元格,然后选择 Menu→Display→Font。
Modbus Poll 中文版用户手册及软件Download插图3

条件颜色

条件颜色可帮助您直观地显示特定范围内的值。3种颜色选择

  • 默认颜色:如果没有任何条件颜色的Computation result为 true,则使用此颜色。
  • Rules 1:如果表达式的Computation result为 true,则使用此颜色选择。Rules 1 优先于Rules 2。
  • Rules 2:如果表达式的Computation result为 true,则使用此颜色选择。

7种比较运算符

中文描述英文描述
未使用not used
等于equal to
大于greater than
小于less than
大于等于greater than or equal to
小于等于less than or equal to
and

当data type为浮点型或 32 位长Type时,不能使用“and”运算符。 如果选择“and”,则条件值将作为hexadecimal数字输入。 如果单元格和条件值中的任何位均为 1,则Computation result为 true。

颜色示例

如果单元格值大于 0,则为绿色,如果小于 0,则为红色。

Modbus Poll 中文版用户手册及软件Download插图4

缩放

缩放可帮助您将原始值缩放为人类可读的值。缩放仅适用于有符号和无符号的 16/32 位整数。

Modbus Poll 中文版用户手册及软件Download插图5

(X1,Y1) 和 (X2,Y2)

穿过两点 (X1,Y1) 和 (X2,Y2) 的线

Modbus Poll 中文版用户手册及软件Download插图6

线方程

Modbus Poll 中文版用户手册及软件Download插图7

精度

小数点后的位数。

使

必须Enable才能从 Modbus 服务器/从站缩放值。如果出现其他情况,则自动禁用缩放 选择 16/32 位整数Display format。

实时图表

该图表可以实时绘制 12 个系列,每个系列最多 100000 个点。

address扫描

扫描address范围以获取设备中所有effectiveaddress的列表。

打开一个新窗口

要打开另一个窗口,您有 3 个选项:

  • 按 CTRL+N
  • 在文件菜单中选择新建
  • Modbus Poll 中文版用户手册及软件Download插图8在Tools栏上

connect对话框

要打开connect对话框,您有 2 个选项:

  • 按 F3
  • 从connect菜单中选择connect
Modbus Poll 中文版用户手册及软件Download插图9

connect(Connection)

有 5 种不同的connectType:

  1. 串行:
    串行线路上的Modbus。RS232 或 RS485。可以使用USB串行转换器。
  2. Modbus TCP/IP:
    如果要与 MODBUS TCP/IP 网络通信,请选择 TCP/IP。在本例中,从属 ID 是 与 MODBUS TCP/IP 中使用equipment ID 相同。
    端口号默认为 502。
    如果connect失败,请尝试在命令提示符下对设备执行 ping Operation。如果 ping 命令失败,则 Modbus 轮询也会失败。
  3. Modbus UDP/IP:
    如果要与 MODBUS UDP/IP 网络通信,请选择 UDP/IP。这与Modbus相同 TCP/IP,但改用connect较少的 UDP 协议。
  4. Modbus RTU/ASCII over TCP/IP:
    这是通过 TCP/IP 网络而不是串行线路send的 RTU 或 ASCII 消息。
  5. Modbus RTU/ASCII over UDP/IP:
    这是通过 UDP/IP 网络而不是串行线路send的 RTU 或 ASCII 消息。

注意:connectType 3-5 不是 www.modbus.org 指定的标准 Modbus,但为了方便起见,添加了它们。

根据您的选择,其他一些设置将显示为灰色。

串口设置(Serial Settings)

使用这些参数可以设置串行端口设置。仅当connectType为“串行端口”时,它们才可用。

模式

使用此选项可选择 RTU 或 ASCII 模式。默认 RTU。

Response超时

指定 Modbus 轮询在放弃之前应等待从机设备Response的timeLength。默认值为 1000ms。

轮询之间的最小延迟

无论扫描速率如何,此设置都可确保在传输下一个Request之前将延迟降至最低。 此设置的分辨率约为 15 毫秒。在某些计算机上可以获得更好的分辨率,但不是All。

注意:

1.如果将此值设置为低于 20 毫秒,则无法保证Response和新Request之间的 3.5 个字符的time间隔。 这是因为 Windows 计划程序每 10 – 20 毫秒Switch一次任务。

2.如果轮询串行 RS485 网络中的多个从站,则不应将该值设置为低于 20 毫秒。这是为了确保 3.5 个字符的time间隔。

3.在 TCP/IP 网络中,小于 20 毫秒是可以的。

4.仅与一个从设备的串行connect小于 20 毫秒即可。

用户Baud rate

如果默认Baud rate均无用,请指定CustomizationBaud rate。

远程服务器

远程服务器设置仅在使用以太网connect时可用。

IPaddress

服务器 IP address。默认值为 localhost 127.0.0.1

端口

服务器端口号。默认值 502

connect超时

用于建立connect的最长time。默认值 1000

高级设置

RTS Switch

RTS Toggle 指定如果byte可用于传输,则 RTS 行将为高电平。send完所有缓冲byte后,RTS 行将变为低电平。
如果您有一个没有自动方向Switch的 232/485 转换器,您可以使用它来Switch方向。

注意:

如果可能,应避免使用 RTS 控制的 RS232/RS485 转换器。 很难确定以非实时方式Close发射器的确切time Windows 和 Linux 等Operationsystem。如果过早Close,字符可能仍会坐着 在FIFO或UART的发射register中,这些字符将丢失。因此奴隶 无法识别该消息。另一方面,如果它Close得太晚,那么从机的消息 已损坏,主服务器将无法识别该消息。

DSRformat

DSR 指定是否监视 DSR(data集就绪)信号以进行输出流量控制。如果此成员为 TRUE 且 DSR 处于Close状态,则输出将挂起,直到再次send DSR。

CTS服务

CTS 指定是否监控 CTS(clear-to-send)信号以进行输出流量控制。如果Enable此复选框并Close CTS,则输出将暂停,直到再次send CTS。

DTR公司

DTR 指定在打开端口时是Enable还是禁用 DTR。

Delete Echo

如果您equipment或 RS232/RS485 转换器回显刚刚send的字符。

读/写定义

使用此命令可以定义要监视的活动窗口的data。

若要打开“读/写定义”对话框,有 3 个选项:

  • 按 F8
  • 从“设置”菜单中选择“读/写定义”
  • Modbus Poll 中文版用户手册及软件Download插图10在Tools栏上
Modbus Poll 中文版用户手册及软件Download插图11

从站ID

范围 1 到 255。(MODBUS协议规范是247)。值 0 也可用于直接与 MODBUS/TCP 或 MODBUS/UDP 设备通信。

函数代码

您可以从 8 个Function代码中选择 1 个。

读取函数

读取函数返回的data将显示在网格窗口中。

  • 01:读取线圈 (0x)
  • 02: Read discrete inputs (1x)
  • 03: Read and hold register (4x)
  • 04: Read input register (3x)

编写函数

写入函数写入显示在网格窗口上的data。

  • 05: 写入单线圈(写入Coil status)
  • 06: Write to a single register(写入保持register)
  • 15:Write multiple coils(写入线圈)
  • 16:Write multiple registers(写入保持register)

address

Modbus protocol中的address令人困惑!某些协议规范使用协议/消息 address,其他人使用设备寻址。

协议/消息address

某些协议规范使用从 0 到 65535 计数的协议/消息address以及 函数代码。这也是新的Modbus规范所使用的。这是里面的address 通过网络send的消息。

Modbus Poll 使用协议/消息address计数从 0 到 65535。

Device address

某些协议规范使用Device address/register。register计数从 1 开始。 第一位数字描述要使用的函数。这意味着Device address 40101 由address 100 标识。“4”表示保持register,4x register从 1 开始计数。 因此,“4XXXX”引用是隐式的。 更令人困惑的是:4x 表示Function代码 03,3x 表示Function代码 04!

5 位数字与 6 位寻址

addressformat 4x 从 40001 计数到 49999。下一个address不是 50000。 在过去,9999个address就足够了。在某些情况下,9999 是不够的。 然后添加一个零。40101 变为 400101,依此类推。这称为 6 位寻址或扩展寻址。

这不是 Modbus Poll 的问题。410001变成 10000。“4”被扔掉,其余的 10001 当我们从 0 而不是 1 开始计数时,会减少 1。

address示例

这些示例显示了在规范使用Device address时如何设置 Modbus Poll。

Read and hold register

您希望每 1000 毫秒从从属 ID 2 读取Device address 40011 的 20 个register。从“4”中我们知道这是函数 03“Read and hold register”。

  • 从站 ID = 2
  • 函数 = “03 Read and hold register (4x)”
  • address = 10(11 减去 1)
  • quantity = 20
  • 扫描速率 = 1000
Read discrete inputs

您希望每 500 毫秒从address 110201 从 ID 5 读取 1000 个线圈。从“1”中我们知道这是函数 02“Read discrete inputs”

  • 从站 ID = 5
  • 函数 = “02 Read discrete inputs (1x)”
  • address = 10200 (10201 – 1)
  • quantity = 1000
  • 扫描率 = 500

扫描速率

扫描速率可以从0到3600000ms设置。请注意,将扫描速率设置为低于事务 time没有意义。如果使用 9600 波特的串行connect并Request 125 个register 事务time大约是 8 + 2 + 250 + 2 = 262ms + Request之间的间隔(>3.5 个字符time) 和回应。在这种情况下,将扫描速率设置为100ms是没有意义的,因为事务time 至少 262 毫秒 + 从站延迟(间隙)+ 轮询之间的最短time。(在connect对话框 F3 中设置)。

禁用读/写

“禁用读/写”复选框可用于临时Enable或禁用通信 此窗口。然后显示Text (Disabled) 以及 Tx 和 Error 计数器。

Modbus Poll 中文版用户手册及软件Download插图12
如果禁用了“读/写”,您可以使用“读/写一次”button或按 F6 发出单个Request。

Modbus Poll 中文版用户手册及软件Download插图13
“读/写一次”button

出错时禁用

如果出现Error,请禁用读/写。

隐藏名称列

隐藏所有名称列。如果不使用它们,这可以方便地腾出More空间。

单元格中的address

如果Enable,则address也会显示在值单元格中,例如:2000 = 00000

Modbus Poll 中文版用户手册及软件Download插图14

PLCaddress(基数1)

此选项会将address显示为Device address。

Modbus Poll 中文版用户手册及软件Download插图15

Enron/Daniel模式

Enron 或 Enron/Daniels Modbus 是带有一些“供应商扩展”的标准 Modbus。 这些扩展的确切影响取决于上下文,但大多数常见的 Modbus 命令按预期工作。 有一些Customization的供应商定义的函数可用 – 但很少有用户期望或使用它们。 最大的影响与 32 位data值的read-write mode有关。

Enron-Modbus 定义了两个特殊的 4x 保持register范围:

  • 4×5001 到 4×5999 假定为 32 位长整数(每个register 4 个byte)。
  • 4×7001 到 4×7999 假定为 32 位浮点(每个register 4 个byte)。

在 Modbus 中处理 32 位值并非 Enron-MB 所独有。但是,Enron-MB 需要 每个register返回 4 个byte而不是 2 个byte的有争议的步骤 Modbus 规范中的术语“保持register”。这意味着对register进行轮询 Enron-Modbus 中的 4×5001 和 4×5002 返回 8 个byte或两个 32 位整数,而 Standard Modbus 只会返回 4 个byte或一个 32 位整数,被视为两个 16 位整数。 此外,Enron-MB 中的轮询register 4×5010 返回第十个 32 位长整数, 而标准 Modbus 会考虑此范围内第五个 32 位长整数的 1/2。

指定您喜欢的网格中的行数。

实时图表

使用此命令可在图表中实时绘制多达 12 个data系列。
实时图表速度快,能够在收到新data时快速绘制新线。

注意:

所有图表设置都保existence工作区文件中。保存/打开工作区

要打开“实时图表”对话框,您有 2 个选项:

  • 按 Alt + R
  • 从显示菜单中选择“实时图表”
Modbus Poll 中文版用户手册及软件Download插图16

X 轴显示自图表启动以来的秒数。

当点到达图表的末尾时,有 3 个选项:

  • 最后停下来:图表停止。
  • 最后重新启动:图表重新开始。
  • 继续:它一直持续到达到最大点数或按下停止键。

设置

默认情况下,所有 12 个系列都链接到左侧 Y 轴。检查 “右 Y 轴”复选框(如果要将Sequence链接到右 Y 轴)。

指定

  • 颜色
  • 右 Y 轴
  • 标题。如果标题为空,则使用阅读窗口中的名称进行初始化
  • 抵消

显示

  • 文件名
  • address

偏移量可用于在同一 Y 轴上对齐data点。例如,data点为 0 或 1 可以偏移,这样它们就不会相互重叠绘制。

Modbus Poll 中文版用户手册及软件Download插图17

缩放Function

如果您想See more详细信息,放大图表会很有用。 缩放由鼠标左键控制。要缩放图表的特定部分,只需单击鼠标左键即可 在图表上(这将是缩放矩形的左上角),然后拖动到右下角。 将出现一个矩形。松开鼠标button后,轴将自动 根据您选择的区域进行调整。

如果您左键单击图表(例如开始缩放),但如果您移动到左上角, 使用缩放和平移FunctionComplete的所有修改都将被Cancel (图表将处于使用平移和缩放Operation之前的状态)。

平移Function

若要平移控件,请右键单击控件上的某个位置并移动鼠标。鼠标下方的点 将跟随鼠标的移动。

除非您将 Modbus data单元链接到 12 系列之一,否则图表不知道要使用哪些data。 为此,请选择一个值单元格,然后从菜单→显示中选择“链接到图表”。

Modbus Poll 中文版用户手册及软件Download插图18

export系列

将系列data保存到磁盘或Copy到剪贴板。将data直接粘贴到 Excel 中以供进一步处理。
尽管使用了非逗号field分隔符,但该文件仍具有.csv扩展名。

分隔符:选择用于分隔Text文件中值的字符。Copy/粘贴到 Excel 时使用制表符分隔符。此外,还提供了一些附加信息。

  • 点数
  • 最大点值
  • 最小点值
  • 平均分值
Modbus Poll 中文版用户手册及软件Download插图19

address扫描

扫描address范围以获取设备中所有effectiveaddress的列表。逐个读取address,读取结果显示在列表中。

注意:

扫描所有 65535 个address需要一些time,具体取决于connectType、服务器设备等。

Modbus Poll 中文版用户手册及软件Download插图20

exportaddress扫描

将address扫描data保存到磁盘或Copy到剪贴板。将data直接粘贴到 Excel 中以供进一步处理。
尽管使用了非逗号field分隔符,但该文件仍具有.csv扩展名。

分隔符:选择用于分隔Text文件中值的字符。Copy/粘贴到 Excel 时使用制表符分隔符。

Display format

标记要format化的单元格。从显示菜单中选择 28 种Display format之一。

Native Modbus register

16 位 Modbus register可以以 4 种不同的模式显示。

  • 签署
  • 无符号
  • hexadecimal
  • ASCII – hexadecimal
  • 二元的

32位有符号整数

它结合了 2 个 16 位 Modbus register。它可以以 4 种不同的字/byte order显示。

  • 有符号整数 Big-endian
  • 有符号整数 Little-endian
  • 有符号整数大端byte交换
  • 有符号整数 Little-endian byte交换例byte order:AB CD(大端)
    decimal数 123456789 或hexadecimal 07 5B CD 15 在 Modbus 消息中通过线路
    排列时的顺序:07 5B CD 15

32位无符号整数

它结合了 2 个 16 位 Modbus register。它可以以 4 种不同的字/byte order显示。

  • 无符号整数 Big-endian
  • 无符号整数 Little-endian
  • 无符号整数大端byte交换
  • 无符号整数 Little-endian byte交换例byte order:AB CD(大端)
    decimal数 123456789 或hexadecimal 07 5B CD 15 在 Modbus 消息中通过线路
    排列时的顺序:07 5B CD 15

64位有符号整数

它结合了 4 个 16 位 Modbus register。它可以以 4 种不同的字/byte order显示。

  • 有符号整数 Big-endian
  • 有符号整数 Little-endian
  • 有符号整数大端byte交换
  • 有符号整数 Little-endian byte交换例byte order:AB CD EF GH (Big-endian)
    decimal数 -1,234,567,890,123,456,789 或hexadecimal EE DD EF 0B 82 16 7E EB
    顺序,因为它们在 Modbus 消息中通过网络出现:EE DD EF 0B 82 16 7E EB

64位无符号整数

它结合了 4 个 16 位 Modbus register。它可以以 4 种不同的字/byte order显示。

  • 无符号整数 Big-endian
  • 无符号整数 Little-endian
  • 无符号整数大端byte交换
  • 无符号整数 Little-endian byte交换例byte order:AB CD EF GH(Big-endian)
    decimal数 1,234,567,890,123,456,789 或hexadecimal 11 22 10 F4 7D E9 81 15 在 Modbus 消息中通过网络
    排序:11 22 10 F4 7D E9 81 15

32位浮点数

它结合了 2 个 16 位 Modbus register。它可以以 4 种不同的字/byte order显示。

  • 浮点 Big-endian
  • 浮点 Little-endian
  • 浮点大端byte交换
  • Float Little-endian byte交换例byte order:AB CD(大端)
    浮点数 123456.00 或hexadecimal 47 F1 20 00 在 Modbus 消息中通过线路
    排列的顺序:47 F1 20 00

64位双精度浮点数

它结合了 4 个 16 位 Modbus register。它可以以 4 种不同的字/byte order显示。

  • 双大端
  • 双 Little-endian
  • 双大端byte交换
  • 双 Little-endian byte交换例byte order:AB CD EF GH(大端序)
    浮点数 123456789.00 或hexadecimal 41 9D 6F 34 54 00 00 00 在 Modbus 消息中通过线路
    排序:41 9D 6F 34 54 00 00 00

保存/打开工作区

如果打开许多Related的 Modbus 窗口,则可以方便地将所有打开和排列的 Modbus 窗口的当前布局快照保existence一个工作区中。

工作区 (*mbw) 是包含所有打开窗口的显示信息和文件名的文件。 不是实际内容。为此,请转到“文件→保存工作区”。

“connect”和“图表”设置存储在工作区文件中。

当您打开工作区文件时,Modbus Poll 会打开所有 Modbus 窗口,并在您保存的布局中显示它们。

export到 csv

将名称和值export到逗号、分号或制表符分隔值文件。从文件对话框中选择

  • 逗号分隔值文件 (*.csv)
    “temperature”,“19.7”
  • 分号分隔值文件 (*.csv)
    “temperature”;”19.7″
  • 制表符分隔值文件 (*.txt)
    temperature 19.7

根据您的system,逗号或句点用于分隔小数。

export到 Modbus Slave

将名称、值和formatexport到 Modbus Slave 文件。*.mbs

打开文件需要 Modbus Slave 版本 7.4.0 或更高版本。

考试中心

此测试对话框的目的是帮助 MODBUS 从站设备开发人员使用任何 他们自己作曲的字符串。
列表框显示传输的data和receive的data。
您可以在下拉列表框中包含多个测试字符串。输入字符串后,按 “添加到列表”button,然后将字符串添加到列表中。
按下“send”button时send所选字符串。

打开列表

从文件中保留测试字符串。

保存列表

将测试字符串存储到文件中。

Clear

Clear测试列表。

添加到列表

将当前测试字符串添加到列表中。

添加检查

将 CRC 或 LRC 添加到输入字符串的末尾。

使用考试中心时,您可能需要禁用来自其他窗口的通信。 选中“读/写定义”对话框中的“读/写禁用”复选框。设置→读/写定义。

ASCII 示例

组合框中的字符串:3A 30 31 30 33 30 30 30 30 30 30 30 41

如果添加了 LRC,则传输的字符串3A 30 31 30 33 30 30 30 30 30 30 30 41 46 32 0D 0A

还添加了 CR LF 对。

TCP/IP 示例

读取 10 个保留register。00 00 00 00 00 06 01 03 00 00 00 0A

前 6 个byte是 TCP/IP 标头。

测试中心字符串文件

使用TextEdit器(如记事本或类似Tools),您可以准备要在测试中使用的字符串。
文件中的第一行必须是字符串“TestCenter”。这就是 Modbus Poll 知道文件format正确的方式。按“打开列表”打开准备好的Text文件。

字符串列表的内容

TestCenter 3A 30 31 30 33 30 30 30 30 30 30 30 41 3A 30 32 30 33 30 30 30 30 30 30 30 41 3A 30 33 30 33 30 30 30 30 30 30 30 41

Copy

使用“Copy”button将选定的 Tx/Rx 字符串Copy到剪贴板。
SHIFT 和 CTRL 键可以与鼠标一起使用,以选择和Cancel选择字符串、选择字符串组以及选择不相邻的字符串。

注意:

在执行其他命令时使此窗口保持打开状态。

Modbus data记录

您可以将data记录到Text文件或直接记录到 Microsoft Excel。

Text文件

从设置菜单中选择“日志”或使用快捷键:Alt+L

每个 Modbus 窗口都记录到其单独的Text文件中。

当您要停止data记录时,请选择设置菜单上的注销命令。

Modbus Poll 中文版用户手册及软件Download插图21

日志速率

每次读取

为所有 Modbus Request编写日志。将频率记录为扫描速率。

选择

指定日志速率(以秒为单位)。与扫描速率无关。

注意:

如果扫描速率为 10000 毫秒,则设置 1 秒日志速率是没有意义的,因为只有在新data准备就绪时才会记录data。

分隔符

作为分隔符,您可以使用以下选项之一:

固定宽度

表示值按列进行组织。

逗点

用逗号分隔的值。

Tags

用制表符分隔的值。

仅更改data时记录日志

指定仅当自上次日志以来更改任何data时,才会写入新的日志行。

日志Error

指定记录超时等Error。

日志日期

指定将当前日期添加到日志time中。

使用“T”作为分隔符

指定time和日期以 ISO 8601 中指定的字母“T”分隔。

日志毫秒

指定将毫秒添加到日志time中。

日志address

指定将 Modbus address添加到日志中。

按 ok 时开始记录

指定在按下 ok button时开始日志记录。否则,日志设置仅在保存 *mbp 文件时存储。

打开 *mbp 时开始记录

指定在打开 *.mbp 文件时自动启动日志记录。

立即refresh到文件

这确保了日志行不会在文件system中兑现,而是立即以物理方式写入。

追加

指定将日志追加到所选文件。否则,将创建一个新文件。

午夜新建日志文件

Close当前日志文件,并在午夜启动一个新文件。time戳将添加到您的文件名中。

头文件信息

  • 插入标题:信息将插入到日志文件的顶部。
    • 命名顶行中的单元格:插入名称。
    • 投票定义:插入 ID、Function等。
    • 名字:插入日志的名称。

具有固定宽度的Text文件示例:22:28:13 <40001> 17395 0 0 0 0 0 0 0 0 22:28:14 <40001> 17396 1 0 0 0 0 0 0 0 22:28:15 <40001> 17394 1 0 0 2 55 0 0 0 22:28:16 <40001> 13350 1 0 0 4 0 0 0 0

您可以在 Excel 电子表格中导入data。

Microsoft Excel

此Function要求安装 Microsoft Excel。Excel 2003 日志限制为 65535 条日志,因为这是 Excel 工作表中的最大行数。Excel 2007 或更高版本限制为 1,048,576 行。每个 Modbus 窗口都记录到其单独的 Excel 工作表中。

从设置菜单中选择“Excel 日志”或使用快捷键:Alt+X

记录时请勿触摸 Excel 工作表,因为这会中断日志记录。

Modbus Poll 中文版用户手册及软件Download插图22

日志速率

  • 每个内容都写着:为所有 Modbus Request编写日志。将频率记录为扫描速率。
  • 选择:指定日志速率(以秒为单位)。日志与扫描速率无关。
    备注:如果扫描速率为 10000 毫秒,则设置 1 秒日志速率是没有意义的,因为只有在新data准备就绪时才会记录data。
  • 以下time停止:指定日志行数。请注意,Excel 2003 限制为 65,536 行,Excel 2007 限制为 1,048,576 行。

头文件信息

  • 插入标题:信息插入到 Excel 工作表最上面的 3 行中。
    • 命名顶行中的单元格:在第 3 行中插入名称。
    • 投票定义:在第 2 行中插入 ID、Function等。
    • 名字:在第 1 行中插入日志名称。
Modbus Poll 中文版用户手册及软件Download插图23

带有标头信息的 Excel 日志。

通信流量

选择菜单“显示→通信”以显示串行线路或以太网电缆上的流量。使用停止button暂时停止更新以进行检查。

使用“Copy”button将所选行Copy到剪贴板。

Modbus Poll 中文版用户手册及软件Download插图24

注意:

此窗口仅显示 Modbus Poll send和receive的data。您不能将其用作data嗅探器。

在执行其他命令时使此窗口保持打开状态。

OLE/自动化

自动化(以前称为 OLE 自动化)使一个应用程序可以Operation在另一个应用程序中实现的对象。

自动化客户端是可以Operation属于另一个应用程序的公开对象的应用程序。这也称为自动化控制器。

自动化服务器是向其他应用程序公开可编程对象的应用程序。Modbus Poll 是一个自动化服务器。

这意味着您可以使用任何支持VBA(Visual Basic for Applications)的程序,如Visual Basic,Excel等,根据您的特定要求来解释和显示modbusdata。

Excel 示例

当您要编写宏时,应显示“开发人员”选项卡或在开发人员模式下运行。

Excel 2007的

Modbus Poll 中文版用户手册及软件Download插图25
  1. 单击 Microsoft Office button,然后单击 Excel 选项。
  2. 单击“流行”,然后选中Function区中的“显示开发人员”选项卡复选框。
    请注意,Function区是 Microsoft Fluent 用户界面的一部分。

Excel 2010、2016

  1. 单击“文件”选项卡。
  2. 单击选项。将打开“Excel 选项”窗口。
  3. 在左窗格中,单击“CustomizationFunction区”。
  4. 在右窗格中的“主选项卡”下,选中“开发人员”复选框。
  5. 单击“确定”。“开发人员”选项卡现在应显示在Function区(最右侧选项卡)中。

Excel 示例代码

本示例打开两个窗口。一个读取register,另一个读取线圈。
Modbus Poll 是隐藏的,但您可以通过Cancel注释“ShowWindow”行来显示它。这将显示其中一个窗口。

Modbus Poll 安装中还包括一个示例。
开始→所有程序→Modbus Poll → Excel 示例

Excel VBA示例

Public doc1 As Object
Public doc2 As Object
Public app As Object
Dim res As Integer
Dim n As Integer
Private Sub StartModbusPoll_Click()
   ' 创建 Modbus Poll 应用程序对象和两个Document对象
   Set app = CreateObject("Mbpoll.Application")
   Set doc1 = CreateObject("Mbpoll.Document")
   Set doc2 = CreateObject("Mbpoll.Document")
   ' 读取10个保持register,每1000ms读取一次
   res = doc1.ReadHoldingRegisters(1, 0, 10, 1000)
   ' 读取10个Coil status,每1000ms读取一次
   res = doc2.ReadCoils(1, 0, 10, 1000)
   ' 显示Document窗口(此行被注释,如需使用请Cancel注释)
   ' doc1.ShowWindow()
   ' 设置connect为 Modbus TCP/IP
   app.Connection = 1 
   ' 设置IPaddress为本地主机
   app.IPAddress = "127.0.0.1" 
   ' 设置服务器端口为 502
   app.ServerPort = 502
   ' 设置connect超时time为 1000ms
   app.ConnectTimeout = 1000
   ' 打开connect
   res = app.OpenConnection()
End Sub
Private Sub Read_Click()
   ' 显示Request的结果
   Cells(5, 7) = doc1.ReadResult() ' 显示保持register的读取结果
   Cells(6, 7) = doc2.ReadResult() ' 显示Coil status的读取结果
   ' 循环读取并显示保持register的值
   For n = 0 To 9
      Cells(5 + n, 2) = doc1.SRegisters(n)
   Next n
   ' 循环读取并显示线圈的状态
   For n = 0 To 9
      Cells(18 + n, 2) = doc2.Coils(n)
   Next n
End Sub

Python 示例

此 Python 示例将打开一个窗口并设置所有可能的data format。

Python 示例

import win32com.client as win32
# 定义data format
SIGNED = 0
UNSIGNED = 1
HEX = 2
BINARY = 3
FLOAT_LE_BS = 4
FLOAT_BE = 5
DOUBLE_LE_BS = 6
DOUBLE_BE = 7
S32_LE_BS = 8
S32_BE = 9
FLOAT_LE = 10
FLOAT_BE_BS = 11
DOUBLE_LE = 12
DOUBLE_BE_BS = 13
S32_LE = 14
S32_BE_BS = 15
U32_BE = 17
U32_LE_BS = 18
U32_BE_BS = 19
U32_LE = 20
S64_BE = 21
S64_LE_BS = 22
S64_BE_BS = 23
S64_LE = 24
U64_BE = 25
U64_LE_BS = 26
U64_BE_BS = 27
U64_LE = 28
# endianness定义
BE = 0
LE = 3
BE_BS = 2
LE_BS = 1
# 创建 Modbus Poll 应用实例
App = win32.Dispatch('Mbpoll.Application')
# 设置connect参数
App.Connection = 1  # 使用 Modbus TCP/IP
App.IPAddress = "127.0.0.1"  # 本地address
App.ServerPort = 502  # Modbus 端口
App.OpenConnection()  # 打开connect
# 创建 Modbus 显示窗口实例
Win1 = win32.Dispatch("Mbpoll.Document")
# 从从站ID为1equipment读取100个保持register,address从0 (40001) 开始,每1000ms读取一次
Win1.ReadHoldingRegisters(1, 0, 100, 1000)
# 显示 Modbus 窗口
Win1.ShowWindow()
# 设置显示的行数
Win1.Rows(1)
# 禁用refresh以提高速度
Win1.EnableRefresh = False
# 设置不同的data format显示方式
Win1.SetFormat(0, SIGNED)
Win1.SetFormat(1, UNSIGNED)
Win1.SetFormat(2, HEX)
Win1.SetFormat(3, BINARY)
Win1.SetFormat(4, S32_BE)
Win1.SetFormat(6, S32_LE)
Win1.SetFormat(8, S32_BE_BS)
Win1.SetFormat(10, S32_LE_BS)
Win1.SetFormat(12, U32_BE)
Win1.SetFormat(14, U32_LE)
Win1.SetFormat(16, U32_BE_BS)
Win1.SetFormat(18, U32_LE_BS)
Win1.SetFormat(20, S64_BE)
Win1.SetFormat(24, S64_LE)
Win1.SetFormat(28, S64_BE_BS)
Win1.SetFormat(32, S64_LE_BS)
Win1.SetFormat(40, U64_BE)
Win1.SetFormat(44, U64_LE)
Win1.SetFormat(48, U64_BE_BS)
Win1.SetFormat(52, U64_LE_BS)
Win1.SetFormat(60, FLOAT_BE)
Win1.SetFormat(62, FLOAT_LE)
Win1.SetFormat(64, FLOAT_BE_BS)
Win1.SetFormat(66, FLOAT_LE_BS)
Win1.SetFormat(80, DOUBLE_BE)
Win1.SetFormat(84, DOUBLE_LE)
Win1.SetFormat(88, DOUBLE_BE_BS)
Win1.SetFormat(92, DOUBLE_LE_BS)
# 为不同format的data设置显示名称
Win1.SetName(0, "SIGNED")
Win1.SetName(1, "UNSIGNED")
Win1.SetName(2, "HEX")
Win1.SetName(3, "BINARY")
Win1.SetName(4, "S32_BE")
Win1.SetName(6, "S32_LE")
Win1.SetName(8, "S32_BE_BS")
Win1.SetName(10, "S32_LE_BS")
Win1.SetName(12, "U32_BE")
Win1.SetName(14, "U32_LE")
Win1.SetName(16, "U32_BE_BS")
Win1.SetName(18, "U32_LE_BS")
Win1.SetName(20, "S64_BE")
Win1.SetName(24, "S64_LE")
Win1.SetName(28, "S64_BE_BS")
Win1.SetName(32, "S64_LE_BS")
Win1.SetName(40, "U64_BE")
Win1.SetName(44, "U64_LE")
Win1.SetName(48, "U64_BE_BS")
Win1.SetName(52, "U64_LE_BS")
Win1.SetName(60, "FLOAT_BE")
Win1.SetName(62, "FLOAT_LE")
Win1.SetName(64, "FLOAT_BE_BS")
Win1.SetName(66, "FLOAT_LE_BS")
Win1.SetName(80, "DOUBLE_BE")
Win1.SetName(84, "DOUBLE_LE")
Win1.SetName(88, "DOUBLE_BE_BS")
Win1.SetName(92, "DOUBLE_LE_BS")
# 重新Enablerefresh
Win1.EnableRefresh = True
# 调整所有列的大小以适应内容
Win1.ResizeAllColumns()
# 调整窗口大小以适应内容
Win1.ResizeWindow()
# 保存配置到文件,指定文件路径
result = Win1.Save("C:\\Users\\UserName\\Desktop\\testfile.mbp")
# 打印保存结果
print(result)
# 打印第二个format名称,作为示例
print(Win1.GetName(1))
# 等待用户按 Enter 键退出,避免窗口直接Close
_ = input("Press ENTER to quit:")

connect函数/属性

The following properties and functions do the same as you setup in the connection dialog (F3).

connect

“connect”(Connection) 选择所需的connect。可以选择串行端口或其中一个以太网connect。

属性connect为整数

取值范围

0 = Serial port
1 = Modbus TCP/IP
2 = Modbus UDP/IP
3 = Modbus ASCII/RTU over TCP/IP
4 = Modbus ASCII/RTU over UDP/IP

例如

Connection = 0

Baud rate

仅适用于connect = 0

属性Baud rate与长

300
600
1200
2400
4800
9600 (默认)
14400
19200
38400
56000
57600
115200
128000
153600
230400
256000
460800
921600

例如

BaudRate = 9600

data bit

仅适用于connect = 0

属性 DataBits 作为整数

取值范围

7
8 (默认)

例如:

DataBits = 8

check digit

仅适用于connect = 0

作为整数的属性奇偶校

取值范围

0 = 无
1 = 奇数
2 = 偶数(默认)

例如:

Parity = 2

stop bit

仅适用于connect = 0

属性 StopBits as Integer取值范围

1 (默认)
2

例如:

StopBits = 1

串行端口

仅适用于connect = 0

属性 SerialPort as Integer取值范围

1…255

默认值 = 1

例如:

SerialPort = 1

模式

仅适用于connect = 0

属性模式为整数

取值范围

0 = RTU 模式
1 = ASCII 模式

例如:

Mode = 1

DeleteEcho

仅适用于 connect = 0
如果您equipment或 RS232/RS485 转换器回显刚刚send的字符。

属性 RemoveEcho as Integer

取值范围

0(默认)
1(Delete回声)

例如:

RemoveEcho = 1

Response超时

ResponseTimeout 指定 Modbus Poll 在放弃之前应等待来自从设备Response的timeLength(以毫秒为单位)。

属性 ResponseTimeout 作为整数取值范围

50…100000

默认值 = 1000

例如:

ResponseTimeout = 1000

DelayBetweenPolls

属性 DelayBetweenPolls 作为整数取值范围

0…1000

默认值 = 20

例如:

DelayBetweenPolls = 20

服务器端口

仅适用于 Connection = 1…4

属性 ServerPort as Long取值范围

0…65535

默认值 = 502

例如:

ServerPort = 502

15.3.12. ConnectTimeout

ConnectTimeout 指定 Modbus Poll 等待 TCP/IP connect成功的timeLength。

仅适用于 Connection = 1…4

属性 ConnectTimeout as Integer

取值范围

100…30000毫秒

默认值 = 1000ms

例如:

ConnectTimeout = 1000

IP版本

仅适用于 Connection = 1…4

属性 IPVersion as Integer

取值范围

4 = IP 版本 4(默认)
6 = IP 版本 6

IPVersion = 4

开放connect

打开使用 Connection 属性选择的connect。

函数 OpenConnection() 为整数

参数

此函数没有参数。

返回值

对于Error 3-5:请检查您是否拥有最新的串口驱动程序。

Error描述
0成功
1串行端口不可用
3串行端口。无法从端口驱动程序获取当前设置。
4串行端口。串行端口驱动程序不接受端口设置。
5串行端口。串行端口驱动程序不接受超时设置。
12TCP/UDP connect失败。WSA 启动
13TCP/UDP connect失败。connectError
14TCP/UDP connect失败。超时
15TCP/UDP connect失败。IOCTL
17TCP/UDP connect失败。套接字Error
21TCP/UDP connect失败。address信息
255connect已打开

Excel 示例如何打开 Modbus TCP/IP connect

Public app As Object
Dim res As Integer
' 创建一个指向 Modbus Poll 的对象
Set app = CreateObject("Mbpoll.Application")
' 选择 Modbus TCP/IP 协议
app.Connection = 1
' 设置 IP 协议版本为 IPv4
app.IPVersion = 4
' 设置目标设备的 IP address
app.IPAddress = "192.168.1.27"
' 设置服务器端口,默认为 502
app.ServerPort = 502
' 设置connect超时time为 1000 毫秒
app.ConnectTimeout = 1000
' 设置Response超时time为 1000 毫秒
app.ResponseTimeout = 1000
' 尝试打开connect,并将结果存储在变量 res 中
res = app.OpenConnection()

Python 示例:如何设置串行connect

import win32com.client as win32
# 创建 Modbus Poll 应用程序对象
App = win32.Dispatch('Mbpoll.Application')
# 设置为串行connect
App.Connection = 0            
# 选择 COM 端口 3
App.SerialPort = 3            
# 设置Baud rate为 9600
App.BaudRate = 9600           
# 设置奇even parity为无
App.Parity = 0                
# 设置模式为 RTU
App.Mode = 0                  
# 设置Response超时time为 1000ms
App.ResponseTimeout = 1000    
# 设置两次Request之间的最小间隔time为 20ms
App.DelayBetweenPolls = 20    
# 打开connect
App.OpenConnection
# 创建一个 Modbus 显示窗口对象 Win1
Win1 = win32.Dispatch("Mbpoll.Document")
# 从从站ID为1equipment读取10个保持register,address从0 (40001) 开始,每1000ms读取一次
Win1.ReadHoldingRegisters(1, 0, 10, 1000)
# 显示 Modbus 窗口
Win1.ShowWindow()
# 设置显示的行数为10
Win1.Rows(0)
# 禁用refresh以提高速度
Win1.EnableRefresh = False
# 为register设置名称
Win1.SetName(0, "Register 0")
# 重新Enablerefresh
Win1.EnableRefresh = True
# 调整所有列的大小以适应内容
Win1.ResizeAllColumns ()
# 调整窗口大小以适应内容
Win1.ResizeWindow()
# 等待用户按 Enter 键退出
_ = input("Press ENTER to quit:")  

紧密connect

函数 CloseConnection() 为整数

参数

此函数没有参数。

返回值

如果成功,则为零。如果失败,则值为非零。

ShowCommunicationTraffic

显示通信流量窗口。

函数 ShowCommunicationTraffic()

参数

此函数没有参数。

返回值

没有

CloseCommunicationTraffic

如果显示,则Close通信流量窗口。

函数 CloseCommunicationTraffic()

参数

此函数没有参数。

返回值

没有

读取函数

以下函数的Operation与您在读/写定义对话框 (F8) 中设置的相同。 读取函数与 Modbus Poll DocumentRelated联。(包含data的窗口)

例如:

' 首先需要创建一个 Modbus Poll Document对象
Public doc As Object
' 创建 Modbus Poll Document对象实例
Set doc = CreateObject("Mbpoll.Document")
' 从从站 ID 为 1 equipment读取 100 个Coil status,address从 0 开始,每 1000 毫秒读取一次
res = doc.ReadCoils(1, 0, 100, 1000) ' 读取 100 个线圈每 1000ms

注意:必须先创建 Read,然后才能使用属性获取data。

读取线圈 ReadCoils

Modbus Function代码 01

函数 ReadCoils(SlaveID 为整数,address为长,quantity为整数,ScanRate 为长)为整数

参数

奴隶ID:从address 1 到 255
address:dataaddress(以 0 为基数)
quantity:dataquantity。1 至 2000
扫描速率:0 至 3600000msReturn value

True if success. False if not success

读离散输入 ReadDiscreteInputs

Modbus function code 02

函数 读离散输入(从站ID As 整型, address As 长整型, quantity As 整型, 扫描率 As 长整型) As 整型

参数

  • 从站ID: slave address 1 至 255
  • address: dataaddress(基数 0)
  • quantity: dataquantity。1 至 2000
  • 扫描率: 0 至 3600000ms

返回值

  • 成功返回 True。失败返回 False。

读保持register ReadHoldingRegisters

Modbus function code 03

函数 读保持register(从站ID As 整型, address As 长整型, quantity As 整型, 扫描率 As 长整型) As 整型

参数

  • 从站ID: slave address 1 至 255
  • address: dataaddress(基数 0)
  • quantity: dataquantity。1 至 125
  • 扫描率: 0 至 3600000ms

返回值

  • 成功返回 True。失败返回 False。

读输入register ReadInputRegisters

Modbus function code 04

函数 读输入register(从站ID As 整型, address As 长整型, quantity As 整型, 扫描率 As 长整型) As 整型

参数

  • 从站ID: slave address 1 至 255
  • address: dataaddress(基数 0)
  • quantity: dataquantity。1 至 125
  • 扫描率: 0 至 3600000ms

返回值

  • 成功返回 True。失败返回 False。

自动化写入函数

写入函数将存储在由属性填充的数组中的值写入。下面的写入函数不创建data窗口。要创建data窗口,请使用 Win 函数,例如 WriteMultipleRegistersWin。

写单个线圈 WriteSingleCoil

Modbus function code 05。
写入写数组中的第一个线圈。

函数 写单个线圈(从站ID As 整型, address As 长整型) As 整型

参数

  • 从站ID: slave address 0 至 255
  • address: dataaddress(基数 0)

返回值

  • 如果写数组准备好且data已send,则返回 True。如果数组为空或参数Error,则返回 False。
  • 控制应用程序负责通过回读写入的值来验证写Operation。

写单个register WriteSingleRegister

Modbus function code 06。
写入写数组中的第一个register。

函数 写单个register (从站ID As 整型, address As 长整型) As 整型

参数

  • 从站ID: slave address 0 至 255
  • address: dataaddress(基数 0)

返回值

  • 如果写数组准备好且data已send,则返回 True。如果数组为空或参数Error,则返回 False。
  • 控制应用程序负责通过回读写入的值来验证写Operation。

写多个线圈 WriteMultipleCoils

Modbus function code 15。
写入写数组中存储的线圈。

函数 写多个线圈(从站ID As 整型, address As 长整型, quantity As 整型) As 整型

参数

  • 从站ID: slave address 0 至 255
  • address: dataaddress(基数 0)
  • quantity: dataquantity。1 至 1968

返回值

  • 如果写数组准备好且data已send,则返回 True。如果数组为空或参数Error,则返回 False。
  • 控制应用程序负责通过回读写入的值来验证写Operation。

写多个register WriteMultipleRegisters

Modbus function code 16。
写入

写数组中存储的register。

函数 写多个register(从站ID As 整型, address As 长整型, quantity As 整型) As 整型

参数

  • 从站ID: slave address 0 至 255
  • address: dataaddress(基数 0)
  • quantity: dataquantity。1 至 123

返回值

  • 如果写数组准备好且data已send,则返回 True。如果数组为空或参数Error,则返回 False。
  • 控制应用程序负责通过回读写入的值来验证写Operation。

Python 示例

展示如何创建一个窗口,从address 0(40001)读取10个register,然后写入5个register的Python示例。

import sys
import time
import win32com.client as win32
# 创建Modbus Poll应用程序实例
App = win32.Dispatch('Mbpoll.Application')
# 设置connectType为TCP/IP
App.Connection = 1            
App.IPAddress = "127.0.0.1"  # 设置IPaddress
App.ResponseTimeout = 1000    # 设置Response超时time为1000毫秒
App.DelayBetweenPolls = 20    # 设置Request间最小间隔为20毫秒
App.ConnectTimeout = 500      # 设置connect超时time为500毫秒
App.ServerPort = 502  # 设置服务器端口为502
result = App.OpenConnection  # 尝试打开connect
if result != 0:
   print("Connection failed. Error: ", result)  # connect失败时输出Error信息
   sys.exit()  # 退出程序
# 创建一个名为Win1的Modbus显示窗口
Win1 = win32.Dispatch("Mbpoll.Document")
# 从从站ID 1的address0 (40001)开始,每1000ms读取10个保持register
Win1.ReadHoldingRegisters(1, 0, 10, 1000)
# 显示Modbus窗口
Win1.ShowWindow()
# 显示10行
Win1.Rows(0)
# 调整窗口大小以适应网格
Win1.ResizeWindow()
time.sleep(1.0) # 等待读取Complete
if Win1.ReadResult == 0:    # 检查读取结果
   print("Modbus register 0 (40001) = ", Win1.SRegisters(0))
else:
   print("Read failed error: = ", Win1.ReadResult)
print ("Tx count = %d, Rx count = %d" % (Win1.GetTxCount, Win1.GetRxCount))
# 在Modbus Poll的内部数组中准备要写入的data
Win1.SRegisters(0, 1)   # 注意,这里的1不是Modbusaddress,而是数组的索引
Win1.SRegisters(1, 10)
Win1.SRegisters(2, 100)
Win1.SRegisters(3, 1000)
Win1.SRegisters(4, 10000)
# 写入register。这个函数不会在Modbus Poll中创建窗口
# 使用函数 <<WriteMultipleRegistersWin>> 来创建data窗口
Win1.WriteMultipleRegisters(1, 0, 5)
_ = input("Wait for write Press ENTER:")  # 等待写入,按回车继续
if Win1.WriteResult == 0:    # 检查写入结果
   print("Modbus write success")
else:
   print("Write failed error: = ", Win1.WriteResult)
_ = input("Press ENTER to quit:")  # 按回车退出

15.6. 各种Function

各种Function与 Modbus Poll DocumentRelated联。(包含data的窗口)

15.6.1. ShowWindow

默认情况下,Modbus documentation窗口处于隐藏状态。ShowWindow 函数使 Modbus Poll 可见,并显示包含data内容的Document。

函数 ShowWindow()参数

此函数没有参数。返回值

没有

15.6.2. GetTx计数

获取Request数。

函数 GetTxCount() 只要参数

此函数没有参数。返回值

Request数。

获取receive计数

获取Responsequantity。

函数 获取receive计数() As 长整型

参数

此函数没有参数。

返回值

Responsequantity。

获取名称

获取值的名称。

函数 获取名称(索引 As 整型) As 字符串

参数

索引:索引0对应于第一个Modbusaddress。

返回值

名称。

设置名称

更改值的名称。函数 设置名称(索引 As 整型, 名称 As 字符串)

参数

索引:索引0对应于第一个Modbusaddress。
名称:值单元格的名称。

返回值

format化All

使用选定的formatformat化所有值单元格。

函数 format化All(format As 整型)

参数

format:值单元格的format。

返回值

获取format

获取Modbus值的Display format。

函数 获取format(索引 As 整型) As 整型

参数
索引:索引0对应于第一个Modbusaddress。

返回值

IDformat (Format)中文解释
0Signed有符号
1Unsigned无符号
2Hexhexadecimal
3Binarybinary
4Float little-endian byte swap浮点数小端byte交换
5Float big-endian浮点数大端
6Double little-endian byte swap双精度小端byte交换
7Double big-endian双精度大端
832-bit Signed little-endian byte swap32位有符号小端byte交换
932-bit Signed big-endian32位有符号大端
10Float little-endian浮点数小端
11Float big-endian byte swap浮点数大端byte交换
12Double little-endian双精度小端
13Double big-endian byte swap双精度大端byte交换
1432-bit Signed little-endian32位有符号小端
1532-bit Signed big-endian byte swap32位有符号大端byte交换
1732-bit Unsigned big-endian32位无符号大端
1832-bit Unsigned little-endian byte swap32位无符号小端byte交换
1932-bit Unsigned big-endian byte swap32位无符号大端byte交换
2032-bit Unsigned little-endian32位无符号小端
2164-bit Signed big-endian64位有符号大端
2264-bit Signed little-endian byte swap64位有符号小端byte交换
2364-bit Signed big-endian byte swap64位有符号大端byte交换
2464-bit Signed little-endian64位有符号小端
2564-bit Unsigned big-endian64位无符号大端
2664-bit Unsigned little-endian byte swap64位无符号小端byte交换
2764-bit Unsigned big-endian byte swap64位无符号大端byte交换
2864-bit Unsigned little-endian64位无符号小端

注意:

此设置仅用于显示。使用 Get/Set 值函数时,仍需要使用 byteOrder 来获取正确的endianness。

15.6.8. SetFormat

更改 Modbus 值的Display format。请参阅上面的format值。

函数 SetFormat(索引为整数,format为整数)参数

指数:索引 0 对应于第一个 Modbus address。
format:值单元格的format。返回值

没有

15.6.9. ResizeWindow

调整打开的窗口大小以适合网格。

函数 ResizeWindow()参数

此函数没有参数。返回值

没有

15.6.10. ResizeAllColumns

调整所有列的大小以适合单元格内的值。

函数 ResizeAllColumns()参数

此函数没有参数。返回值

没有

15.6.11. 行

指定网格中的行数。

函数 (NumberRows)参数

数字行:网格中的行数。

编号描述
010 行(默认)
120 行
250 行
3100 行
4适合quantity

返回值

没有

读取结果

使用此属性来检查是否成功建立了与读取Operation的通信。

属性 读取结果 As 整型

参数

此函数没有参数。

返回值

ErrorDescription
0成功 SUCCESS
1超时Error TIMEOUT ERROR
2CRCError CRC ERROR
3ResponseError(Response不是预期的从站ID、function code或address)RESPONSE ERROR (The response was not the expected slave id, function or address)
4写入Error WRITE ERROR
5读取Error READ ERROR
6端口未打开Error PORT NOT OPEN ERROR
10data未初始化 DATA UNINITIALIZED
11receive到的byte不足 INSUFFICIENT BYTES RECEIVED
16byte countError BYTE COUNT ERROR
19事务IDError TRANSACTION ID ERROR
81hIllegal function ILLEGAL FUNCTION
82hIllegal data address ILLEGAL DATA ADDRESS
83hIllegal data value ILLEGAL DATA VALUE
84h服务器设备失败 SERVER DEVICE FAILURE
85hConfirm ACKNOWLEDGE
86h服务器设备忙 SERVER DEVICE BUSY
87hNAK-负Confirm NAK-NEGATIVE ACKNOWLEDGMENT
8AhGateway path unavailable GATEWAY PATH UNAVAILABLE
8Bh网关目标设备未Response GATEWAY TARGET DEVICE FAILED TO RESPOND
这个表格列出了Modbus通讯中可能遇到的Error代码及其描述,用于Fault Diagnosis和状态反馈。

写入结果

使用此函数来检查写入Operation是否成功。
在从从站获得结果之前,值为data未初始化。参见读取结果以获取可能的值列表。

属性

写入结果 As 整型

返回值
以整型返回写入结果。

保存

保存当前窗口。函数 保存(路径名 As 字符串) As 布尔型

参数
路径名:应保存文件的完全限定路径。

返回值
Boolean 布尔型

示例

# 首先需要一个Modbus PollDocument。
Public doc As Object
Set doc = CreateObject("Mbpoll.Document")
res = doc.ReadCoils(1, 0, 100, 1000) # 每1000毫秒读取100个线圈
res = doc.Save("C:\\Users\\UserName\\Desktop\\testfile.mbp")    # 将Document保存到桌面的testfile.mbp文件

自动化data属性

以下属性用于在Modbus Poll中的内部写/读数组中设置或获取值。使用的索引不是Modbusaddress。无论使用的address如何,索引总是从0开始计数。data属性与Modbus PollDocumentRelated联。(带有data的窗口)

每个data属性有两个版本:

一个没有后缀,例如SRegisters,用于从内部写/读数组中设置或获取值。

一个带有Win后缀,例如SRegistersWin,用于直接从data窗口设置或获取值。这在使用data窗口进行写Operation(例如WriteMultipleRegistersWin)时使用。

示例 1:

# 假设首先创建了doc。参见Excel示例。
# 在用于稍后写Operation的data数组中,向索引0写入1
doc.SRegisters(0) = 1
doc.SRegisters(1) = 10
doc.SRegisters(2) = 1234
# 将存储在Modbus Poll内部数组的3个register
# 写入Modbusaddress100(40101)
# 不创建窗口
res = doc.WriteMultipleRegisters(1, 100, 3)
# 上述示例不创建data窗口,只是执行单次Modbus写Operation。

示例 2,浮点numerical value:
写入3个浮点numerical value。

# 假设首先创建了doc。参见Excel示例。
doc.Floats(0) = 1.3
doc.Floats(2) = 10.5
doc.Floats(4) = 1234.12
# 将6个register写入Modbus Poll
res = doc.WriteMultipleRegisters(1, 0, 6)
# 写入6个register,因为浮点numerical value是32位宽。

示例 3:
创建一个每1000ms写入3个register的窗口。

# 假设首先创建了doc。参见Excel示例。
# 创建一个窗口,该窗口每1000ms写入内容
res = doc.WriteMultipleRegistersWin(1, 100, 3, 1000)
# 向data窗口的第一个单元格写入1
doc.SRegistersWin(0) = 1
doc.SRegistersWin(1) = 10
doc.SRegistersWin(2) = 1234
# 现在每1000ms就将3个register写入从站id 1address100

在这些Code Example中,doc是Modbus PollDocument的一个实例,用于执行各种ModbusOperation,如写入register。示例展示了How to use不带Win后缀的属性直接Operation内部数组,以及How to use带Win后缀的属性Operation与data窗口关联的值。

线圈, CoilsWin

Property Coils(Index As Integer) As IntegerDescription

Sets a coil in the write array structure or return a coil from the read array.Syntax

Coils(Index) [=newvalue]

短整型register, SRegistersWin

Property SRegisters(Index As Integer) As IntegerDescription

Sets a register in the write array structure or return a register from the read array.Syntax

SRegisters(Index) [=newvalue]

长整型register, URegistersWin

属性 URegisters(Index As Integer) As Long描述

在写数组结构中设置register或从读取数组返回register。语法

URegisters(索引) [=newvalue]

32位整型、Ints_32Win

属性 Ints_32(Index As Integer) As Double描述

在写入数组结构中设置一个 32 位整数,或从读取数组中返回一个整数。语法

Ints_32(索引) [=newvalue]

32位无符号整型、UInts_32Win

属性 UInts_32(index as integer) as double描述

在写入数组结构中设置一个 32 位无符号整数,或从读取数组返回一个无符号整数。语法

UInts_32(索引) [=新值]

64位整型、Ints_64Win

属性 Ints_64(Index As Integer) As Double描述

在写入数组结构中设置一个 64 位整数,或从读取数组返回一个整数。语法

Ints_64(索引) [=新值]

64位无符号整型、UInts_64Win

属性 UInts_64(Index As Integer) As Double描述

在写入数组结构中设置一个 64 位无符号整数,或从读取数组返回一个无符号整数。语法

UInts_64(索引) [=新值]

浮点数,FloatsWin

属性 floats(index as integer) as single描述

在写入数组结构中设置浮点数或从读取数组返回浮点数。语法

浮点数(索引) [=新值]

双精度浮点数,DoublesWin

属性 doubles(index as integer) as double描述

在写入数组结构中设置双精度值,或从读取数组返回双精度值。语法

双打(索引) [=newvalue]

byte order

属性 ByteOrder As Integer描述

设置 Ints_32、UInts_32、Ints_64、UInts_64、Floats 和 Doubles 属性使用的byte order。
Win 版本不使用此属性 ByteOrder

编号endianness
0大端(默认) Big-endian (Default)
1小端byte交换 Little-endian byte swap
2大端byte交换 Big-endian byte swap
3小端 Little-endian

Ints_32示例:
byte order:Big-endian
decimal数 123456789 或hexadecimal 07 5B CD 15 在 Modbus 消息中通过线路
排序:07 5B CD 15语法

ByteOrder [=新值]

15.8. 写入函数(创建data窗口)

以下函数的Operation与您在读/写定义对话框 (F8) 中设置的相同。
这些函数创建一个data窗口,并根据扫描速率写入data窗口中的data内容。

15.8.1. WriteSingleCoilWin

Modbus Function代码 05。

函数 WriteSingleCoilWin(SlaveID As Integer, Address As Long, ScanRate As Long) As Integer参数

奴隶ID:从address 1 到 255
address:dataaddress(基数 0)
扫描速率:0 到 3600000ms返回值

如果成功,则为真。如果不是成功,则为假

15.8.2. WriteSingleRegisterWin

Modbus Function代码 06。

函数 WriteSingleRegisterWin(SlaveID As Integer, Address As Long, ScanRate As Long) As Integer参数

奴隶ID:从address 1 到 255
address:dataaddress(基数 0)
扫描速率:0 到 3600000msReturn value

True if success. False if not success

Python Example how to open a window and write a single register every 1000 ms

15.8.3. WriteMultipleCoilsWin

Modbus Function代码 15.

函数 WriteMultipleCoilsWin(SlaveID 为整数,address为长,quantity为整数,ScanRate 为长)为整数参数

奴隶ID:从address 1 到 255
address:dataaddress(以 0 为基数)
quantity:dataquantity。1 至 1968
扫描速率:0 至 3600000ms返回值

如果成功,则为真。如果不是成功,则为假

15.8.4. WriteMultipleRegistersWin

Modbus Function代码 16.

函数 WriteMultipleRegistersWin(SlaveID 为整数,address为长,quantity为整数,ScanRate 为长)为整数参数

奴隶ID:从address 1 到 255
address:dataaddress(以 0 为基数)
quantity:dataquantity。1 至 123
扫描速率:0 至 3600000ms返回值

如果成功,则为真。如果不是成功,则为假

16. 异常和Error消息

Modbus 异常和Error消息在 2 中以红色Text显示行。

Modbus Poll 中文版用户手册及软件Download插图26

16.1. Modbus异常代码

Modbus 异常是从设备返回的Error。

法典名字意义
01Illegal function查询中收到的函数代码不是服务器(或从站)允许的Operation。这可能是因为函数代码仅适用于较新equipment,并且未在所选单元中实现。它还可能指示服务器(或从属服务器)处于处理此类Request的Error状态,例如,因为它未配置并且被要求返回register value。
02Illegal data address查询中收到的dataaddress不是 服务器的允许address。更具体地说,参考编号和传输Length的组合是 Invalid。对于具有 100 个register的控制器,PDU 将第一个register寻址为 0,最后一个register寻址为 99。如果提交的RequestStarting register address为 96,number of registers为 4,则此Request将在register 96、97、98、99 上成功运行(至少在address方面)。如果提交的RequestStarting register address为 96,number of registers为 5,则此Request将失败,异常代码0x02“Illegal data address”,因为它尝试在register 96、97、98、99 和 100 上运行,并且没有address为 100 的register。
03非法data价值查询datafield中包含的值不是服务器(或从站)的允许值。这表示复杂Request的其余部分的结构existenceError,例如隐含Length不正确。具体而言,这并不意味着提交存储在register中的data项具有超出应用程序预期的值,因为MODBUS协议不知道任何特定register的任何特定值的重要性。
04服务器设备故障服务器(或从属设备)尝试执行Request的Operation时发生不可恢复的Error。
05承认专门与编程命令结合使用。
服务器(或从属服务器)已接受Request并正在处理它,但这样做需要很长time。返回此Response是为了防止客户端(或主站)中发生超时Error。客户端(或主客户端)接下来可以发出“轮询程序Complete”消息,以确定处理是否Complete。
06服务器设备繁忙专门与编程命令结合使用。
服务器(或从属服务器)正在处理长time的程序命令。客户端(或主服务器)应稍后在服务器(或从站)空闲时重新传输消息。
0安培Gateway path unavailable与网关结合使用,表示网关无法分配从输入端口到输出端口的内部通信路径来处理Request。通常表示网关配置Error或过载。
0乙网关目标设备无法Response与网关结合使用,表示未从目标设备获得Response。通常表示设备不在网络上。

16.2. Modbus Poll Error消息

Error信息意义
超时Error未在预期time内收到Response。 检查以下内容:串行connect串行设置,如Baud rate、奇even parity、data bit、stop bit等。Modbus 模式、RTU 或 ASCII从站 IDResponse超时TCP/IP connectResponse超时检查主机和端口是否与从站一致
ResponseErrorResponse不是预期的Response。不同的从属 ID。
CRCErrorreceive到的Response的 CRC 值不正确。
写入Error这是串行驱动程序报告的Error。如果使用 USB/RS232/485 转换器并拔下 USB 电缆,则可能会发生这种情况。有 4 种Type:断裂条件I/O Error串行connectError输出缓冲区溢出使用 TCP/IP connect的写入Error通常是由connect丢失引起的。
读取Error这是串行驱动程序报告的Error。有 6 种Type:取景误差字符缓冲区溢出奇even parity误差输入缓冲区溢出I/O Error断裂条件使用 TCP/IP connect的读取Error通常是由connect丢失引起的。
receive的byte count不足Response不是预期的Length。
byte计数ErrorResponse中的byte计数不正确。与预期相比。
事务 ID Error它用于事务配对,MODBUS服务器在Response中CopyRequest的Transaction identifier。

Mini Program Version,free使用!!!

Modbus Poll 中文版用户手册及软件Download插图
Modbus Poll 中文版用户手册及软件Download插图27

Modbus Poll 9.9.2.1690中文版Download

Modbus Poll 中文版用户手册及软件Download插图28星耀member¥3.99
Modbus Poll 中文版用户手册及软件Download插图29璀璨member¥2.99
曜钻memberfree
资源价格 ¥4.99 销售quantity 1381 Published 2024年3月24日 更新time 2026年1月5日
已付费?Loginrefresh
技术术语(共 13 个)—— 点击展开
Modbus RTU基于串行链路的Modbus协议,使用binaryCoding和CRC check
Modbus TCP基于以太网的Modbus协议变体,使用TCP/IP传输
Modbus ASCII使用ASCII字符传输的Modbus协议,以冒号开头、CR/LF结尾
RS485工业常用的差分串行通信标准,支持多点通信
RS232点对点串行通信标准,常用于短距离设备通信
function codeModbusfunction code指定读/写OperationType,如01读线圈、03读保持register
registerModbus register存储data单元,分线圈/离散输入/保持/输入register四类
PLC可编程逻辑控制器,Automation控制的核心设备
Baud rate串行通信每秒传输符号数,Modbus RTU常用9600/19200
网关协议转换设备,如 Modbus RTU ↔ Modbus TCP
串口计算机与外部设备进行串行通信的物理接口
线圈Modbus位可读写data,address从00001开始
保持registerModbus 16位可读写data,address从40001开始
来源/Tools信息 —— 点击展开
来源 Modbus Chinese Network(modbus.cn) —— China leadingModbus通信协议技术社区 Category Modbus DebuggingTools 字数 29126 字 · 阅读约 73 分钟 更新 2026-01-05 永久链接 https://www.modbus.cn/26919.html
Recommended Tool: Modbus Debug Assistant WeChat Mini Program
Modbus Chinese Network官方推出的Modbus DebuggingTools,支持 Modbus RTU/TCP 实时通信debug、register读写、线圈控制、data监控和message分析。 无需安装,微信Search「Modbus DebuggingAssistant」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
把这篇Resources用于真实项目?

进入Tools中心进行messageParse、CRC verification和设备debug,或Submit requirements获取选型与接入建议。

工程师member

把这篇文章变成可执行的debugResources

开通后可使用高级messageParse、Resources包Download、Code Example、工程案例和优先Technical Support,适合真实项目交付。

高级Tools不限次
Resources包与代码包
Complete Engineering Case Library
优先Technical Support入口

《 “Modbus Poll 中文版用户手册及软件Download” 》 有 141 条Comments

发表回复

您的邮箱address不会被公开。 必填项已用 * 标注