Modbus
指令列表 Modbus函数用于建立Modbus主站与从站进行通讯,寄存器地址的取值范围与定义请参考对应从站的Modbus寄存器地址定义说明。
指令 | 功能 |
---|---|
ModbusCreate | 创建Modbus主站 |
ModbusRTUCreate | 创建基于RS485接口的Modbus主站 |
ModbusClose | 和Modbus从站断开连接 |
GetInBits | 读取触点寄存器 |
GetInRegs | 读取输入寄存器 |
GetCoils | 读取线圈寄存器 |
SetCoils | 写入线圈寄存器 |
GetHoldRegs | 读取保持寄存器 |
SetHoldRegs | 写入保存寄存器 |
各类寄存器对应的Modbus功能码遵循标准Modbus协议:
寄存器类型 读取寄存器 写单个寄存器 写多 个寄存器 线圈寄存器 01 05 0F 触点寄存器 02 - - 输入寄存器 04 - - 保持寄存器 03 06 10
ModbusCreate
原型:
ModbusCreate(IP, port, slave_id, isRTU)
描述:
创建Modbus主站,并和从站建立连接。最多支持同时连接15个设备。
连接机器人自带的从站时IP设 置为机器人的IP(默认192.168.5.1,可修改),端口设置为502(map1)或1502(map2),详见附录A Modbus寄存器定义。
连接第三方从站时,IP和端口为第三方从站的地址,读写寄存器时的寄存器地址的取值范围与定义请参考对应从站的Modbus寄存器地址定义说明。
必选参数:
- IP:从站IP地址。
- port:从站端口。
可选参数:
-
slave_id:从站ID。
-
isRTU:布尔值。如果不携带或为fasle,建立ModbusTCP通信; 如果为true,建立ModbusRTU通信。
注意:
此参数决定了连接建立后传输数据使用的协议格式,并不影响连接结果。因此,如果创建主站时该参数设置错误,依然可以创建成功,但后续通讯时会导致异常。
返回:
-
err:
- 0:创建Modbus主站成功
- 1:创建的主站已达到最大数量,创建新主站失败
- 2:初始化主站失败,建议检查IP,端口,网络是否正常等
- 3:连接从站失败,建议排查从站是否正常建立,网络是否正常等
-
id:返回的主站索引,后续调用其他Modbus指令时使用。取值范围:[0, 14]
示例:
-- 创建Modbus主站,并和指定从站建立连接。
local ip="192.168.5.123"
local port=503
local err=0
local id=0
err, id = ModbusCreate(ip, port, 1)
-- 创建Modbus主站,并和机器人自带从站建立连接。
local ip="192.168.5.1"
local port=502
local err=0
local id=0
err, id = ModbusCreate(ip, port)
ModbusRTUCreate
原型:
ModbusRTUCreate(slave_id, baud, parity, data_bit, stop_bit)
描述:
创建基于RS485接口的Modbus主站,并和从站建立连接。最多支持同时连接15个设备。
必选参数:
- slave_id:从站ID。
- baud:RS485接口的波特率。
可选参数:
- parity:是否有奇偶校验位。"O"表示奇校验,"E"表示偶校验,"N"表示无奇偶校验位。不带参时默认值为“E”。
- data_bit:数据位长度。取值范围:8。不带参时默认值为8。
- stopbit:停止位长度。取值范围:1,2。不带参时默认值为1。
返回:
- err:
- 0表示创建Modbus主站成功
- 1表示创建Modbus主站失败。
- id:返回的主站索引,后续调用其他Modbus指令时使用。
示例:
-- 创建Modbus主站并与RS485接口连接的从站建立连接,从站ID为1,波特率为115200。
err, id = ModbusRTUCreate(1, 115200)
ModbusClose
原型:
ModbusClose(id)
描述:
和Modbus从站断开连接,释放主站。
必选参数:
- id:已创建的主站索引。
返回:
- 操作结果
- 0:断开连接成功。
- 1:断开连接失败。
示例:
-- 和Modbus从站断开连接。
ModbusClose(id)
GetInBits
原型:
GetInBits(id, addr, count)
描述:
读取Modbus从站触点寄存器地址的值。对应Modbus功能码02。
必选参数:
- id:已创建的主站索引。
- addr:触点寄存器起始地址。
- count:连续读取触点寄存器的数量。取值范围:1~2000(ModbusTCP协议协议限制,实际取值范围请根据从站寄存器数量或协议规范确定)
返回:
触点寄存器地址的值,存储在table中。table中第一个值对应触点寄存器起始地址的值。
示例:
-- 从地址0开始连续读取5个地址的值。 inBits = GetInBits(id,0,5)
GetInRegs
原型:
GetInRegs(id, addr, count, type)
描述:
按照指定的数据类型,读取Modbus从站输入寄存器地址的值。对应Modbus功能码04。
必选参数:
-
id:已创建的 主站索引。
-
addr:输入寄存器起始地址。
-
count:连续读取输入寄存器的数量。取值范围:1~125(ModbusTCP协议协议限制,实际取值范围请根据从站寄存器数量或协议规范确定) 可选参数:
-
type:数据类型。如果为空,默认为U16
- U16:16位无符号整数(2个字节,占用1个寄存器)
- U32:32位无符号整数(4个字节,占用2个寄存器)
- F32:32位单精度浮点数(4个字节,占用2个寄存器)
- F64:64位双精度浮点数(8个字节,占用4个寄存器)
返回:
输入寄存器地址的值,存储在table中。table中第一个值对应输入寄存器起始地址的值。
示例:
-- 从地址2048开始读取一个32位无符号整数。
data = GetInRegs(id, 2048, 2, "U32")
GetCoils
原型:
GetCoils(id, addr, count)
描述:
读取Modbus从站线圈寄存器地址的值。对应Modbus功能码01。
必选参数:
- id:已创建的主站索引。
- addr:线圈寄存器起始地址地址。
- count:连续读取线圈寄存器的数量。取值范围:1~2000(ModbusTCP协议协议限制,实际取值范围请根据从站寄存器数量或协议规范确定) 返回:
线圈寄存器地址的值,存储在table中。table中第一个值对应线圈寄存器起始地址的值。
示例:
-- 从地址0开始连续读取5个地址的值。
Coils = GetCoils(id,0,5)
SetCoils
原型:
SetCoils(id, addr, count, table)
描述:
将指定的值写入线圈寄存器指定的地址。对应Modbus功能码05(写单个)和0F(写多个)。
必选参数:
- id:已创建的主站索引。
- addr:线圈寄存器起始地址。
- count:连续写入线圈寄存器的数量。取值范围:1~1968(ModbusTCP协议协议限制,实际取值范围请根据从站寄存器数量或协议规范确定)
- table:要写入线圈寄存器的值,存储在table中。table中第一个值对应线圈寄存器起始地址的值。 示例:
-- 从地址1024开始,连续写5个线圈。
local Coils = {0,1,1,1,0}
SetCoils(id, 1024, #coils, Coils)
GetHoldRegs
原型:
GetHoldRegs(id, addr, count, type)
描述:
按照指定的数据类型,读取Modbus从站保持寄存器地址的值。对应Modbus功能码03。
必选参数:
-
id:已创建的主站索引。
-
addr:保持寄存器起始地址。
-
count:连续读取 保持寄存器的数量。取值范围:1~125(ModbusTCP协议协议限制,实际取值范围请根据从站寄存器数量或协议规范确定) 可选参数:
-
type:数据类型。如果为空,默认为U16
- U16:16位无符号整数(2个字节,占用1个寄存器)
- U32:32位无符号整数(4个字节,占用2个寄存器)
- F32:32位单精度浮点数(4个字节,占用2个寄存器)
- F64:64位双精度浮点数(8个字节,占用4个寄存器)
返回:
保持寄存器地址的值,存储在table中。table中第一个值对应保持寄存器起始地址的值。
示例:
-- 从地址2048开始读取一个32位无符号整数。
data = GetHoldRegs(id, 2048, 2, "U32")
SetHoldRegs
原型:
SetHoldRegs(id, addr, count, table, type)
描述:
按照指定的数据类型,写入指定的值到保持寄存器指定的地址。对应Modbus功能码06(写单个)和10(写多个)。
必选参数:
-
id:已创建的主站索引。
-
addr:保持寄存器起始地址。
-
count:连续写入保持寄存器的数量。取值范围:1~123(ModbusTCP协议协议限制,实际取值范围请根据从站寄存器数量或协议规范确定)
-
table:要写入保持寄存器的值,存储在table中。table中第一个值对应保持寄存器起始地址的值。 可选参数:
-
type:数据类型。如果为空,默认为U16
- U16:16位无符号整数(2个字节,占用1个寄存器)
- U32:32位无符号整数(4个字节,占用2个寄存器)
- F32:32位单精度浮点数(4个字节,占用2个寄存器)
- F64:64位双精度浮点数(8个字节,占用4个寄存器)
示例:
-- 从地址2048开始,写入一个64位双精度浮点数。
local data = {95.32105}
SetHoldRegs(id, 2048, 4, data, "F64")