Wiki source code of 1 Communication with device

Version 1.1 by Leo Wei on 2022/06/08 12:58

Show last authors
1 = **1 General communication with PLC** =
2
3 == **1.1 Modbus RTU** ==
4
5 ==== V-Box as master: ====
6
7 Select the protocol “(% class="mark" %)Modbus RTU Slave(All Fuction)”,
8
9 (% class="mark" %)then set BaudRate,Port,Stop Bit,Data Bit,Parity
10
11 (% style="text-align:center" %)
12 [[image:1624342015914-382.png||class="img-thumbnail" height="486" width="800"]]
13
14 ==== V-Box as slave: ====
15
16 Select the protocol “(% class="mark" %)**Modbus RTU Master”**,
17
18 (% class="mark" %)then set BaudRate,Port,Stop Bit,Data Bit,Parity
19
20 (% style="text-align:center" %)
21 [[image:1624348709622-711.png||queryString="width=809&height=493" class="img-thumbnail" height="488" width="800"]]
22
23 **Address List**
24
25 (% class="table-bordered" %)
26 |**Type**|**Register**|**Function code & Description**
27 |(% rowspan="11" %)Word|(% rowspan="3" %)3|04 (read input register: read current binary value in one or more input registers)
28 |06 (write single register: write a binary value to a holding register)
29 |10 (write values to multiple addresses )
30 |(% rowspan="3" %)4|03 (read holding register: read current binary value in one or more holding registers)
31 |06 (write single register: write a binary value to a holding register)
32 |10 (write values to multiple addresses )
33 |(% rowspan="3" %)W6|03 (read holding register: read current binary value in one or more holding registers)
34 |06 (write single register: write a binary value to a holding register)
35 |10 (write values to multiple addresses )
36 |(% rowspan="2" %)W16|03 (read holding register: read current binary value in one or more holding registers)
37 |10 (write values to multiple addresses )
38 |(% rowspan="11" %)Bit|(% rowspan="3" %)0|01 (Read coil state)
39 |05 (Force a single coil to force the on/off state of a logic coil)
40 |0F (Write multiple bits, ie write continuously)
41 |(% rowspan="3" %)1|02 (Read the input state)
42 |05 (Force a single coil to force the on/off state of a logic coil)
43 |0F (Write multiple bits)
44 |(% rowspan="3" %)W5|01 (Read coil state to obtain the current state of a set of logic coils)
45 |05 (Force a single coil to force the on/off state of a logic coil)
46 |0F (Write multiple bits)
47 |(% rowspan="2" %)W15|01 (Read coil state to obtain the current state of a set of logic coils)
48 |0F (Write multiple bits)
49
50 == **1.2 WECON LX3V PLC** ==
51
52 Select the protocol (% class="mark" %)"WECON LX3V"
53
54 (% class="mark" %)then set BaudRate,Port,Stop Bit,Data Bit,Parity same with PLC.
55
56 (% class="mark" %)WECON PLC RS422 port,default communication parameters is 9600,1,7,ZEVEN
57
58 (% style="text-align:center" %)
59 [[image:1624348978863-771.png||queryString="width=812&height=494" class="img-thumbnail" height="487" width="800"]]
60
61 == **1.3 Siemens S7-1200** ==
62
63 [[download link>>https://ftp.we-con.com.cn/Download/WIKI/V-BOX/Demo/%E9%80%9A%E8%AE%AF%E6%A1%88%E4%BE%8B/Communicate%20with%20S7-1200%20via%20Ehernet.zip]]
64
65 == **1.4 Allen-Bradley Ethernet DF1** ==
66
67 [[download link>>https://ftp.we-con.com.cn/Download/WIKI/V-BOX/Demo/%E9%80%9A%E8%AE%AF%E6%A1%88%E4%BE%8B/Allen-Bradley%20Ethernet%20DF1.zip]]
68
69 == **1.5 Communication with S7-200 Smart** ==
70
71 [[download link>>https://ftp.we-con.com.cn/Download/WIKI/V-BOX/Demo/%E9%80%9A%E8%AE%AF%E6%A1%88%E4%BE%8B/Communication%20with%20S7-200%20Smart.zip]]
72
73 == **1.6 Delta DVP Ethernet** ==
74
75 [[download link>>https://ftp.we-con.com.cn/Download/WIKI/V-BOX/Demo/%E9%80%9A%E8%AE%AF%E6%A1%88%E4%BE%8B/Delta%20DVP%20Ethernet.zip]]
76
77 == **1.7 Delta DVP Serial Protocol** ==
78
79 [[download link>>https://ftp.we-con.com.cn/Download/WIKI/V-BOX/Demo/%E9%80%9A%E8%AE%AF%E6%A1%88%E4%BE%8B/Delta%20DVP%20Ethernet.zip]]
80
81 = **2 User define protocol** =
82
83 More serial port script instruction,please refer manual:[[Lua script function>>doc:xwiki:V-BOX.V-Net.1\.User Manual.04\.Lua script function and operation.01\.Lua script function.WebHome]]~-~-->[[3.Serial port operation>>url:http://docs.we-con.com.cn/wiki/vbox/view/HMI/04.Lua%20script%20%20function%20and%20operation/01.Lua%20script%20function/#H3.Serialportoperation]]
84
85 == **2.1 Read the temperature sensor.** ==
86
87 the commond format is as beliow:
88
89 Send commond:01 03 02 00 00 03 04 73
90
91 Feedback commond:01 03 06 07 F7 0E 7E B7 35
92
93 Temperature data:07 F7,desimal = 2039,it means temperature is 20.39℃.
94
95 Humidity data:0E 7E,desimal = 3710, it mean humidity is 37.10%RH.
96
97 Script Demo:
98
99 ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--
100
101 function com.main()
102 ~-~-dosomething
103 openPlc()
104 end
105 function openPlc()
106 if obj then
107 ~-~- If the serial port opened,then read/write data by timing
108
109 local wri = string.pack(">HHHH",0X0103,0X0200,0X0003,0X0473)
110 local arr = reading(wri)
111 ~-~- if arr ~~=nil then
112 ~-~- if arr[1] ==33 and arr[2] ==v[2][2] and arr[3] ==v[2][3] then
113 ~-~- local A = arr[4]*256
114 ~-~- local B = A+arr[5]
115 ~-~- addr_setword(v[1],B)
116 ~-~- end
117 ~-~- end
118
119 else
120 ~-~-judge if there is a serial object, then initialize and open the serial port
121 local configs = {
122 name = 'COM1', ~-~-Select serial port COM1
123 mode = 485, ~-~-Communication mode RS485
124 baud_rate = 9600, ~-~-Baud rate 9600
125 stop_bit = 1, ~-~-stop bit 1
126 data_len = 8, ~-~-data length 8
127 check_bit = 'NONE', ~-~-no parity
128
129 }
130 obj,err = serial.open(configs) ~-~-Open serial port
131 if not obj then
132 print("serial open :failed", err) ~-~- Open serial port failed
133 end
134 end
135 end
136
137 function reading(wri)
138 obj:flush() ~-~- Clear serial port
139 obj:write(wri) ~-~- Write serial port
140 print(string.byte(wri,1,#wri))
141 obj:flush() ~-~- Clear serial port 
142 local readed =obj:read(9,1000) ~-~- Read 9 bytes, timeout 1 second
143 if readed and readed ~~= "" then 
144 ~-~- judge that a non-empty string is read
145 print(string.byte(readed,1,#readed))
146 a={string.byte(readed, 1, #readed)}
147 if nil ~~= a[4] and nil ~~= a[5] and nil ~~= a[6] and nil ~~= a[7] then
148 a1=a[4]*256+a[5]
149 a2=a[6]*256+a[7]
150 addr_setword("@HDW0",a1)
151 addr_setword("@HDW1",a2)
152 end
153 return {string.byte(readed, 1, #readed)}
154 elseif readed == nil then
155 print("serial read err:", err or "")
156 return nil
157 end
158 return nil
159 end
160
161 ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-