特殊指令:MODBUS通讯


MODBUS通讯指令支持以下物理介质的通讯:

  • RS485:由驱动模块Rtu_ModbusL实现。
  • 以太网:由驱动模块TcpIp_ModbusL实现。
  • CAN:由驱动模块Can_ModbusL实现。

Modbus_Enable:MODBUS通讯端口使能

本指令用于通讯端口的使能,使能通讯端口需要指定工作模式、站地址。

参数名称数据类型读写方向说明
EN能流输入当EN使能时,使能对应端口上的MODBUS通讯协议,如果端口上的协议已经使能,则更新工作模式和站地址。
PortUSINT输入通讯端口。
ModeUSINT输入MODBUS工作模式。
  • Disable:通讯端口除能MODBUS协议。
  • MasterEnable:通讯端口做为主站使能MODBUS协议。
  • SlaveEnable:通讯端口做为从站使能MODBUS协议。
  • BothEnable:通讯端口做为主站或从站使能MODBUS协议(没有主站指令激活时做为从站,有主站指令时切换为主站)。
AddrUSINT输入MODBUS站地址(1至255)。
ErrorUSINT输出操作结果。

Modbus_MasterStatus:获取通讯端口的主站状态

本指令用于获取通讯端口的主站状态。

参数名称数据类型读写方向说明
EN能流输入当EN使能时,获取通讯端口的主站状态,并将状态写入指定的变量中去。
PortUSINT输入通讯端口。
EnabledBIT输出MODBUS主站协议是否使能。
BusyUSINT输出MODBUS主站激活的连接数量。
FreeUSINT输出MODBUS主站空闲的连接数量。
FinishedUDINT输出MODBUS主站通讯成功的次数。
FailedUDINT输出MODBUS主站通讯失败的次数。

Modbus_SlaveStatus:获取通讯端口的从站状态

本指令用于获取通讯端口的从站状态。

参数名称数据类型读写方向说明
EN能流输入当EN使能时,获取通讯端口的从站状态,并将状态写入指定的变量中去。
PortUSINT输入通讯端口。
EnabledBIT输出MODBUS从站协议是否使能。
BusyUSINT输出MODBUS从站激活的连接数量。
FreeUSINT输出MODBUS从站空闲的连接数量。
FinishedUDINT输出MODBUS从站通讯成功的次数。
FailedUDINT输出MODBUS从站通讯失败的次数。

Modbus_RtuSetup:RS485通讯参数设置

本指令用来设置RS485通讯口的通讯参数。

参数名称数据类型读写方向说明
EN能流输入当EN使能时,设置通讯参数。
PortUSINT输入通讯端口。
BaudRateUDINT输入串口的通讯波特率,例如38400表示通讯波特率为38400位/秒。
ParityUSINT输入 奇偶校验的方式:
  • [0] - Parity_No:无校验。
  • [1] - Parity_Even:偶校验。
  • [2] - Parity_Odd:奇校验。
StopBitsUSINT输入 停止位的数量:
  • [0] - StopBits_0_5:0.5位停止位。
  • [1] - StopBits_1:1位停止位。
  • [2] - StopBits_1_5:1.5位停止位。
  • [3] - StopBits_2:2位停止位。
InterCharCntUSINT输入用于判断帧结束的总线空闲时间,单位为当前波特率下传输一个字节的时间。例如4表示总线上如果有4个字节的传输时间为空闲,则判断当前帧传输结束。
ReplyWaitTUINT输入主站请求发送后,等待从站应答的时间。
Err USINT 输出 配置操作是否出错:
  • [0] - Err_None:无错误。
  • [4] - Err_Failed:配置失败。

Modbus_CanSetup:CAN通讯参数设置

本指令用来设置CAN通讯口的通讯参数。

参数名称数据类型读写方向说明
EN能流输入当EN使能时,设置通讯参数。
PortUSINT输入通讯端口。
ExtBOOL输入通讯帧类型:0 - 标准帧,1 - 扩展帧。
MtsrIdUDINT输入主站发送数据帧的ID号。
MrstIdUDINT输入从站发送数据帧的ID号。
ReplyWaitTUINT输入主站请求发送后,等待从站应答的时间。
InterFrameTUINT输入多帧数据通讯的最大间隔时间。
Err USINT 输出 配置操作是否出错:
  • [0] - Err_None:无错误。
  • [4] - Err_Failed:配置失败。

Modbus_TcpSetup:TCP/IP通讯参数设置

本指令用来设置TCP/IP通讯口的通讯参数。

参数名称数据类型读写方向说明
EN能流输入当EN使能时,设置通讯参数。
PortUSINT输入通讯端口。
LocalPortUINT输入以TCP/IP通讯的端口,Modbus通讯默认使用502。
ReyplyWaitTUINT输入主站请求发送后,等待从站应答的时间。
MasterKeepTUINT输入主站空闲后,保持连接的时间。
SlaveKeepTUINT输入从站空闲后,保持连接的时间。
Err USINT 输出 配置操作是否出错:
  • [0] - Err_None:无错误。
  • [4] - Err_Failed:配置失败。

Modbus_RtuRead:MODBUS读变量(串口)

本指令通过串口读取远程MODBUS设备的变量值。

参数名称数据类型读写方向说明
EN能流输入当EN使能时,MODBUS读变量指令将通讯任务写入对应通讯端口的任务队列。如果任务已经在队列中,则只更新任务状态。
PortUSINT输入通讯端口。
SlaveUSINT输入远程设备的MODBUS从站地址。
RegUSINT输入 远程设备的MODBUS变量类型。
  • Reg_0x_Coils:输出线圈(0xxxx)。
  • Reg_1x_Inputs:输入触点(1xxxx)。
  • Reg_3x_InputRegs:输入寄存器(3xxxx)。
  • Reg_4x_HoldingRegs:保持寄存器(4xxxx)。
OffsetUINT输入 远程设备的MODBUS变量偏移量。
CountUSINT输入需要读取变量的数量。
DataUSINT输出读取变量的值(连续多个变量,数量由Count决定)。
DoneBIT输出0:读取未完成;1:读取完成或失败。
Error USINT 输出 读取失败的原因:
  • Err_None:无错误。
  • Err_Port:通讯端口不存在或通讯介质错误。
  • Err_QueueIsFull:通讯任务队列满。
  • Err_Addr:远程设备变量格式错误。
  • Err_Failed:通讯超时或应答错误。

Modbus_RtuWrite:MODBUS写变量(串口)

本指令通过串口修改远程MODBUS设备的变量值。

参数名称数据类型读写方向说明
EN能流输入当EN使能时,MODBUS读变量指令将通讯任务写入对应通讯端口的任务队列。如果任务已经在队列中,则只更新任务状态。
PortUSINT输入通讯端口。
SlaveUSINT输入远程设备的MODBUS从站地址。
Reg USINT 输入 远程设备的MODBUS变量类型。
  • Reg_0x_Coils:输出线圈(0xxxx)。
  • Reg_1x_Inputs:输入触点(1xxxx)。
  • Reg_3x_InputRegs:输入寄存器(3xxxx)。
  • Reg_4x_HoldingRegs:保持寄存器(4xxxx)。
OffsetUINT输入 远程设备的MODBUS变量偏移量。
CountUSINT输入需要修改变量的数量。
DataUSINT输入变量修改的值。(连续多个变量,数量由Count决定)
DoneBIT输出0:修改未完成;1:修改完成或失败。
Error USINT 输出 修改失败的原因:
  • Err_None:无错误。
  • Err_Port:通讯端口不存在或通讯介质错误。
  • Err_QueueIsFull:通讯任务队列满。
  • Err_Addr:远程设备变量格式错误。
  • Err_Failed:通讯超时或应答错误。

Modbus_CanRead:MODBUS读变量(CAN)

本指令通过CAN读取远程MODBUS设备的变量值。

参数名称数据类型读写方向说明
EN能流输入当EN使能时,MODBUS读变量指令将通讯任务写入对应通讯端口的任务队列。如果任务已经在队列中,则只更新任务状态。
PortUSINT输入通讯端口。
SlaveUSINT输入远程设备的MODBUS从站地址。
Reg USINT 输入 远程设备的MODBUS变量类型。
  • Reg_0x_Coils:输出线圈(0xxxx)。
  • Reg_1x_Inputs:输入触点(1xxxx)。
  • Reg_3x_InputRegs:输入寄存器(3xxxx)。
  • Reg_4x_HoldingRegs:保持寄存器(4xxxx)。
Offset UINT 输入 远程设备的MODBUS变量偏移量。
CountUSINT输入需要读取变量的数量。
DataUSINT输出读取变量的值(连续多个变量,数量由Count决定)。
DoneBIT输出0:读取未完成;1:读取完成或失败。
Error USINT 输出 读取失败的原因:
  • Err_None:无错误。
  • Err_Port:通讯端口不存在或通讯介质错误。
  • Err_QueueIsFull:通讯任务队列满。
  • Err_Addr:远程设备变量格式错误。
  • Err_Failed:通讯超时或应答错误。

Modbus_CanWrite:MODBUS写变量(CAN)

本指令通过CAN修改远程MODBUS设备的变量值。

参数名称数据类型读写方向说明
EN能流输入当EN使能时,MODBUS读变量指令将通讯任务写入对应通讯端口的任务队列。如果任务已经在队列中,则只更新任务状态。
PortUSINT输入通讯端口。
SlaveUSINT输入远程设备的MODBUS从站地址。
Reg USINT 输入 远程设备的MODBUS变量类型。
  • Reg_0x_Coils:输出线圈(0xxxx)。
  • Reg_1x_Inputs:输入触点(1xxxx)。
  • Reg_3x_InputRegs:输入寄存器(3xxxx)。
  • Reg_4x_HoldingRegs:保持寄存器(4xxxx)。
Offset UINT 输入 远程设备的MODBUS变量偏移量。
CountUSINT输入需要修改变量的数量。
DataUSINT输入变量修改的值。(连续多个变量,数量由Count决定)
DoneBIT输出0:修改未完成;1:修改完成或失败。
Error USINT 输出 修改失败的原因:
  • Err_None:无错误。
  • Err_Port:通讯端口不存在或通讯介质错误。
  • Err_QueueIsFull:通讯任务队列满。
  • Err_Addr:远程设备变量格式错误。
  • Err_Failed:通讯超时或应答错误。

Modbus_TcpRead:MODBUS读变量(以太网)

本指令通过以太网读取远程MODBUS设备的变量值。

参数名称数据类型读写方向说明
EN能流输入当EN使能时,MODBUS读变量指令将通讯任务写入对应通讯端口的任务队列。如果任务已经在队列中,则只更新任务状态。
PortUSINT输入通讯端口。
IPAddr1 - IPAddr4USINT输入远程设备的IP地址。
IPPortUINT输入远程设备的端口号,MODBUS协议默认使用502。
SlaveUSINT输入远程设备的MODBUS从站地址(单元ID)。
Reg USINT 输入 远程设备的MODBUS变量类型。
  • Reg_0x_Coils:输出线圈(0xxxx)。
  • Reg_1x_Inputs:输入触点(1xxxx)。
  • Reg_3x_InputRegs:输入寄存器(3xxxx)。
  • Reg_4x_HoldingRegs:保持寄存器(4xxxx)。
Offset UINT 输入 远程设备的MODBUS变量偏移量。
CountUSINT输入需要读取变量的数量。
DataUSINT输出读取变量的值(连续多个变量,数量由Count决定)。
DoneBIT输出0:读取未完成;1:读取完成或失败。
Error USINT 输出 读取失败的原因:
  • Err_None:无错误。
  • Err_Port:通讯端口不存在或通讯介质错误。
  • Err_QueueIsFull:通讯任务队列满。
  • Err_Addr:远程设备变量格式错误。
  • Err_Failed:通讯超时或应答错误。

Modbus_TcpWrite:MODBUS写变量(以太网)

本指令通过以太网修改远程MODBUS设备的变量值。

参数名称数据类型读写方向说明
EN能流输入当EN使能时,MODBUS读变量指令将通讯任务写入对应通讯端口的任务队列。如果任务已经在队列中,则只更新任务状态。
PortUSINT输入通讯端口。
IPAddr1 - IPAddr4USINT输入远程设备的IP地址。
IPPortUINT输入远程设备的端口号,MODBUS协议默认使用502。
SlaveUSINT输入远程设备的MODBUS从站地址(单元ID)。
Reg USINT 输入 远程设备的MODBUS变量类型。
  • Reg_0x_Coils:输出线圈(0xxxx)。
  • Reg_1x_Inputs:输入触点(1xxxx)。
  • Reg_3x_InputRegs:输入寄存器(3xxxx)。
  • Reg_4x_HoldingRegs:保持寄存器(4xxxx)。
Offset UINT 输入 远程设备的MODBUS变量偏移量。
CountUSINT输入需要修改变量的数量。
DataUSINT输入变量修改的值。(连续多个变量,数量由Count决定)
DoneBIT输出0:修改未完成;1:修改完成或失败。
Error USINT 输出 修改失败的原因:
  • Err_None:无错误。
  • Err_Port:通讯端口不存在或通讯介质错误。
  • Err_QueueIsFull:通讯任务队列满。
  • Err_Addr:远程设备变量格式错误。
  • Err_Failed:通讯超时或应答错误。