Modbus 协议主要有三种传输模式,它们共享相同的核心功能,但物理层和数据封装方式不同。
表格
|
特性 |
Modbus RTU |
Modbus ASCII |
Modbus TCP/IP |
|
物理层 |
RS-232 / RS-485 等串口 |
RS-232 / RS-485 等串口 |
以太网 (Ethernet) |
|
数据格式 |
二进制,紧凑高效 |
ASCII 字符,可读性高 |
以太网帧,封装在 TCP/IP 中 |
|
校验方式 |
CRC (循环冗余校验) |
LRC (纵向冗余校验) |
由 TCP/IP 协议栈负责 |
|
主要特点 |
工业最常用,效率高 |
调试方便,效率较低 |
速度快,支持远程通信 |
Modbus 定义了四种基本的数据类型来访问设备信息:
● 线圈 (Coils):可读写的开关量,如继电器的通断。
● 离散输入 (Discrete Inputs):只读的开关量,如按钮或传感器的状态。
● 保持寄存器 (Holding Registers):可读写的 16 位数据,常用于存储和设置参数。
● 输入寄存器 (Input Registers):只读的 16 位数据,常用于采集模拟量,如电压、温度。
功能码定义了主站希望从站执行的操作。
● 01: 读线圈
● 02: 读离散输入
● 03: 读保持寄存器(最常用)
● 04: 读输入寄存器
● 05: 写单个线圈
● 06: 写单个保持寄存器
● 15 (0x0F): 写多个线圈
● 16 (0x10): 写多个保持寄存器
海康的视觉算法平台软件 VisionMaster (VM) 内置了强大的通信管理模块,可以方便地与支持 Modbus 协议的设备(如 PLC、机器人、传感器)进行数据交互,实现视觉系统与自动化产线的联动。
在 VisionMaster 的“系统”菜单中,进入“通讯管理”。
● 添加设备:在“设备管理”中添加一个 Modbus 设备。
● 设置参数:
● 通信方式:选择 TcpClient (VM 作为客户端) 或 TcpServer (VM 作为服务器)。对于 Modbus RTU,则选择串口通信。
● 目标 IP/端口:填写从站设备的 IP 地址和端口号(Modbus TCP 默认为 502)。
● 从站地址:填写目标从站设备的地址(1-247)。
● 寄存器设置:定义需要读写的寄存器首地址和数量,例如设置首地址为 100,个数为 300,则 VM 会持续轮询该地址区域的数据。
VM 通过特定的模块来实现数据的收发。
● 发送数据:使用“发送数据”模块,将 VM 内部的全局变量值写入到指定的 Modbus 寄存器地址中,从而控制外部设备。
● 接收数据:使用“接收数据”模块,持续监听并获取 Modbus 从站返回的数据。
接收到的原始数据需要经过解析才能被 VM 的流程使用。
● 协议解析/组装:在“接收事件”中,创建“字节匹配-协议组装”事件。在此事件中,可以绑定之前配置的 Modbus 设备,并详细定义如何解析数据,例如:
● 字节起止位置:指定从接收到的数据流中提取哪几个字节。
● 数据类型:指定数据的格式,如 int (整型)。
● 字节顺序:指定数据的字节序,如 ABCD、CDAB 等,这在与不同厂商的设备通信时尤为重要。
● 全局触发:解析后的事件可以与“全局触发”功能关联。当接收到特定数据(例如,某个寄存器的值变为 1)时,可以触发 VM 执行指定的流程,如“执行流程1”、“执行流程2”等,从而实现由外部信号驱动视觉检测。
● 流程触发:PLC 向 VM 的指定寄存器写入一个触发信号(如将地址 100 的值设为 1),VM 接收到并解析后,触发相应的视觉检测流程。流程执行完毕后,VM 可以通过脚本模块将触发信号归零,等待下一次触发。
● 数据交互:VM 将视觉定位或测量的结果(如 X, Y 坐标)通过“发送数据”模块写入到 PLC 的寄存器中,供机器人或运动控制系统使用。
一、Modbus 与海康通讯基础
1)协议类型(选对第一步)
Modbus TCP(最常用):以太网,RJ45,默认端口 502,IP 互通即可。
Modbus RTU:串口 RS485,A+/B-,波特率 / 数据位 / 校验位必须一致。
2)海康角色(VM/VC3000)
VM(VisionMaster):既可做 主站(Client) 连 PLC / 从站,也可做 从站(Server) 被 PLC 读写。
VC3000 工控机:运行 VM,网口直连 PLC / 交换机。
SC 智能相机:仅作 Modbus TCP 从站(Server),PLC 做主站读写。
3)寄存器地址映射(核心!)
Modbus 地址分四类,海康常用 4x 保持寄存器(读写):
40001~49999:对应 地址 0~9998(VM 里填 0 即 40001)。
功能码:03 读、06 写单个、10 写多个。
二、硬件接线(图文)
1)Modbus TCP(推荐)
要求:同网段 IP,互相 ping 通,关闭防火墙。
例:PLC 192.168.1.100,VM 192.168.1.200,网关一致。
2)Modbus RTU(RS485)
三、VisionMaster(VM)配置全流程(图文)
步骤 1:打开通讯管理
顶部工具栏点 通讯管理(图标:天线 / 信号)。
步骤 2:新建 Modbus 设备(TCP 为例)
1、点 添加设备 → 选 Modbus 通讯。
2、设备类型:Modbus TCP 主站(VM 连 PLC)或 从站(PLC 连 VM)。
3、基本参数:
设备名:自定义(如 “PLC_H5U”)
远程 IP:PLC IP(如 192.168.1.100)
端口:502(默认)
从站地址:1(PLC 站号)。
步骤 3:配置接收事件(PLC→VM 触发)
实现:PLC 写 40001=1 → VM 触发流程并复位 40001=0。
切到 接收事件 → 添加事件。
事件名:“Start_Trigger”
绑定设备:选刚建的 Modbus 设备
寄存器类型:保持寄存器(4x)
起始地址:0(对应 40001)
数据类型:16 位整型
触发条件:等于 1(上升沿有效)。
开启 事件触发后复位寄存器 → 复位值 0。
步骤 4:配置发送事件(VM→PLC 回传结果)
实现:VM 流程结束 → 把 OK/NG、X、Y、角度 写入 PLC 40002~40005。
切到 发送事件 → 添加事件。
事件名:“Send_Result”
触发时机:流程结束时自动发送
绑定设备:同前 Modbus 设备
寄存器配置(示例):
32 位浮点:占 2 个寄存器,VM 自动高低字拆分。
步骤 5:全局触发绑定(让事件真的触发流程)
左侧 全局模块 → 触发管理 → 添加触发。
触发源:选 通讯接收事件 → 绑定 “Start_Trigger”
触发动作:执行指定流程 → 选你的视觉流程。
● 排查:IP 同网段、ping 通、防火墙关闭、端口 502 未被占用。
● VM 侧:通讯管理 → 设备 → 连接测试,显示 “连接成功” 即可。

● 32 位浮点:VM 默认 小端序,PLC 需对应设置(高低字交换)。
● 用调试工具(如 Modbus Poll)直接读写寄存器,验证数据。
Modbus Poll 调试工具界面
● 确认:接收事件 触发条件 = 1、复位 = 0、全局触发已绑定流程。
● PLC 侧:用 上升沿脉冲 写 1,避免持续高电平。
|
参数 |
推荐值 |
说明 |
|
远程 IP |
192.168.1.100 |
PLC IP |
|
端口 |
502 |
Modbus TCP 默认端口 |
|
从站地址 |
1 |
PLC 站号 |
|
起始地址 |
0(40001) |
触发地址 |
|
数据类型 |
16 位整型 |
触发信号 |
● 寄存器:40003、40004(X 坐标)
● 类型:32 位浮点
● 字节序:小端序(低字在前)