1 General communication with PLC
1.1 Modbus RTU
V-Box as master:
Select the protocol “Modbus RTU Slave(All Fuction)”,
then set BaudRate,Port,Stop Bit,Data Bit,Parity
V-Box as slave:
Select the protocol “Modbus RTU Master”,
then set BaudRate,Port,Stop Bit,Data Bit,Parity
Address List
Type | Register | Function code & Description |
Word | 3 | 04 (read input register: read current binary value in one or more input registers) |
06 (write single register: write a binary value to a holding register) | ||
10 (write values to multiple addresses ) | ||
4 | 03 (read holding register: read current binary value in one or more holding registers) | |
06 (write single register: write a binary value to a holding register) | ||
10 (write values to multiple addresses ) | ||
W6 | 03 (read holding register: read current binary value in one or more holding registers) | |
06 (write single register: write a binary value to a holding register) | ||
10 (write values to multiple addresses ) | ||
W16 | 03 (read holding register: read current binary value in one or more holding registers) | |
10 (write values to multiple addresses ) | ||
Bit | 0 | 01 (Read coil state) |
05 (Force a single coil to force the on/off state of a logic coil) | ||
0F (Write multiple bits, ie write continuously) | ||
1 | 02 (Read the input state) | |
05 (Force a single coil to force the on/off state of a logic coil) | ||
0F (Write multiple bits) | ||
W5 | 01 (Read coil state to obtain the current state of a set of logic coils) | |
05 (Force a single coil to force the on/off state of a logic coil) | ||
0F (Write multiple bits) | ||
W15 | 01 (Read coil state to obtain the current state of a set of logic coils) | |
0F (Write multiple bits) |
1.2 WECON LX3V PLC
Select the protocol "WECON LX3V"
then set BaudRate,Port,Stop Bit,Data Bit,Parity same with PLC.
WECON PLC RS422 port,default communication parameters is 9600,1,7,ZEVEN
1.3 Siemens S7-1200
1.4 Allen-Bradley Ethernet DF1
1.5 Communication with S7-200 Smart
1.6 Delta DVP Ethernet
1.7 Delta DVP Serial Protocol
1.8 Communicate with Mitsubishi FX Series
1.9 Communicate with VB inverter
1.10 Omron CP1 Series
1.11 Omron CJ2M
2 User define protocol
More serial port script instruction,please refer manual:Lua script function--->3.Serial port operation
2.1 Read the temperature sensor.
the commond format is as beliow:
Send commond:01 03 02 00 00 03 04 73
Feedback commond:01 03 06 07 F7 0E 7E B7 35
Temperature data:07 F7,desimal = 2039,it means temperature is 20.39℃.
Humidity data:0E 7E,desimal = 3710, it mean humidity is 37.10%RH.
Script Demo:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
function com.main()
--dosomething
openPlc()
end
function openPlc()
if obj then
-- If the serial port opened,then read/write data by timing
local wri = string.pack(">HHHH",0X0103,0X0200,0X0003,0X0473)
local arr = reading(wri)
-- if arr ~=nil then
-- if arr[1] ==33 and arr[2] ==v[2][2] and arr[3] ==v[2][3] then
-- local A = arr[4]*256
-- local B = A+arr[5]
-- addr_setword(v[1],B)
-- end
-- end
else
--judge if there is a serial object, then initialize and open the serial port
local configs = {
name = 'COM1', --Select serial port COM1
mode = 485, --Communication mode RS485
baud_rate = 9600, --Baud rate 9600
stop_bit = 1, --stop bit 1
data_len = 8, --data length 8
check_bit = 'NONE', --no parity
}
obj,err = serial.open(configs) --Open serial port
if not obj then
print("serial open :failed", err) -- Open serial port failed
end
end
end
function reading(wri)
obj:flush() -- Clear serial port
obj:write(wri) -- Write serial port
print(string.byte(wri,1,#wri))
obj:flush() -- Clear serial port
local readed =obj:read(9,1000) -- Read 9 bytes, timeout 1 second
if readed and readed ~= "" then
-- judge that a non-empty string is read
print(string.byte(readed,1,#readed))
a={string.byte(readed, 1, #readed)}
if nil ~= a[4] and nil ~= a[5] and nil ~= a[6] and nil ~= a[7] then
a1=a[4]*256+a[5]
a2=a[6]*256+a[7]
addr_setword("@HDW0",a1)
addr_setword("@HDW1",a2)
end
return {string.byte(readed, 1, #readed)}
elseif readed == nil then
print("serial read err:", err or "")
return nil
end
return nil
end
--------------------------------------------------------------------------------------------------------------------------------------------------------------------