1 Communication

Version 9.1 by Stone Wu on 2022/07/12 11:34

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

1624342015914-382.png

V-Box as slave:

Select the protocol “Modbus RTU Master”,

then set BaudRate,Port,Stop Bit,Data Bit,Parity

1624348709622-711.png

Address List

TypeRegisterFunction code & Description
Word304 (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 )
403 (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 )
W603 (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 )
W1603 (read holding register: read current binary value in one or more holding registers)
10 (write values to multiple addresses )
Bit001 (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)
102 (Read the input state)
05 (Force a single coil to force the on/off state of a logic coil)
0F (Write multiple bits)
W501 (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)
W1501 (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

1624348978863-771.png

1.3 Siemens S7-1200

download link

1.4 Allen-Bradley Ethernet DF1

download link

1.5 Communication with S7-200 Smart

download link

1.6 Delta DVP Ethernet

download link

1.7 Delta DVP Serial Protocol

download link

1.8 Communicate with Mitsubishi FX Series

download link

1.9 Communicate with VB inverter

download link

1.10 Omron CP1 Series

download link

1.11 Omron CJ2M

download link

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

--------------------------------------------------------------------------------------------------------------------------------------------------------------------