Wiki source code of 08 Macro Script
Last modified by Jett on 2024/11/19 11:03
Show last authors
author | version | line-number | content |
---|---|---|---|
1 | This chapter provides information about scripts in PIStudio. | ||
2 | |||
3 | = **Script type** = | ||
4 | |||
5 | Script is applied to realize complex control functions. HMI compile software provide powerful function, simple operation, reliable script system, the features of script are list as follow: | ||
6 | |||
7 | Similar to BASIC grammatical structure; | ||
8 | |||
9 | * BASIC work as the first computer language for the general public, it is easy and efficient to use. | ||
10 | |||
11 | Support all of program logic control structures; | ||
12 | |||
13 | * Software script supports three logic control structures: order, condition, loops. It could realize complexity procedures. | ||
14 | |||
15 | Powerful function; Functions of script are divided into two types: system and custom function. | ||
16 | |||
17 | * System function: the functions that system has been predefined for users. | ||
18 | * Custom function: users could define a function and apply to all scripts. | ||
19 | |||
20 | Support variety of data format; | ||
21 | |||
22 | * Script supports integer, floating, BCD code, byte, string and etc. | ||
23 | |||
24 | **Scripts Running Method** | ||
25 | |||
26 | 1. **Background Script:** Run independently during start project, screen updates have no influence and valid of all scripts. | ||
27 | 1. **Screen Script:** Only run under the designated screen. Screen script start running until screen is closed or switched. | ||
28 | |||
29 | And both screen and background have four modes for script | ||
30 | |||
31 | (% class="table-bordered" %) | ||
32 | |=**Property**|=**Description** | ||
33 | |Initialize|The script would be executed once during loading project. | ||
34 | |Close|The script would be run once during closing HMI project. | ||
35 | |Timing|The script would run under certain conditions after the HMI is started, until the condition ends. | ||
36 | |Bit trigger|Script would be repeat executed when meet the condition of bit trigger. | ||
37 | |||
38 | == Initialize == | ||
39 | |||
40 | Initialize script divided into screen initialize script and background initialize script. Screen initialize script runs once during the initialization of screen; background initialize script runs during the loading of project. | ||
41 | |||
42 | **Operating procedures** | ||
43 | |||
44 | Click "Background script" in project manager to enter script editor screen, or click "Screen script" in right click menu of screen to enter script editor screen; | ||
45 | |||
46 | (% style="text-align:center" %) | ||
47 | [[image:9.Scripts_html_96fb2991c0580f0f.gif||class="img-thumbnail"]] | ||
48 | |||
49 | |||
50 | (% style="text-align:center" %) | ||
51 | [[image:9.Scripts_html_3cebb8edeabbd760.gif||class="img-thumbnail"]] | ||
52 | |||
53 | Double click "initialize" to open script edit window, as below shows; | ||
54 | |||
55 | (% style="text-align:center" %) | ||
56 | [[image:9.Scripts_html_8d93c592be893fad.gif||class="img-thumbnail"]] | ||
57 | |||
58 | Enter scripts in edit window; | ||
59 | |||
60 | == Close == | ||
61 | |||
62 | Close script divided into screen close script and background close script. Screen close script runs once During the destroying of screen because of closing or switching; background close script runs during the closing of project (such as restart HMI, into HMI setup). | ||
63 | |||
64 | **Operating procedures** | ||
65 | |||
66 | 1. Click "Background script" in project manager to enter script editor screen, or click "Screen script" in right click menu of screen to enter script editor screen; | ||
67 | 1. Double click "Close" to open script edit window; | ||
68 | 1. Enter scripts in edit window; | ||
69 | |||
70 | == Timing == | ||
71 | |||
72 | The script would run for a designated time interval. | ||
73 | |||
74 | **Operating procedures of creating one** | ||
75 | |||
76 | Click "Background script" in project manager to enter script editor screen, or click "Screen script" in right click menu of screen to enter script editor screen; | ||
77 | |||
78 | Double click "Timing", it would pop-up below setting window; | ||
79 | |||
80 | (% style="text-align:center" %) | ||
81 | [[image:9.Scripts_html_ca0d08792c31539e.gif||class="img-thumbnail"]] | ||
82 | |||
83 | (% class="table-bordered" %) | ||
84 | |=**Property**|=**Description** | ||
85 | |Cycle|Script runs at designated time interval, unit is 10 ms. | ||
86 | |Ok|Script created. | ||
87 | |Cancel|Cancel the current script setting. | ||
88 | |||
89 | Enter scripts in edit window; | ||
90 | |||
91 | **Operating procedures of editing** | ||
92 | |||
93 | 1. Click "Background script" in project manager to enter script editor screen, or click "Screen script" in right click menu of screen to enter script editor screen; | ||
94 | 1. Select "Timing", and click [[image:9.Scripts_html_d1db672f9b0fe31.gif]] to modify the script execution interval; | ||
95 | 1. Double click selected "Timing" to open editing window; | ||
96 | |||
97 | **Operating procedures of deleting** | ||
98 | |||
99 | Click "Background script" in project manager to enter script editor screen, or click "Screen script" in right click menu of screen to enter script editor screen; | ||
100 | |||
101 | (% style="text-align:center" %) | ||
102 | [[image:9.Scripts_html_f7b5302abd3000e3.gif||class="img-thumbnail"]] | ||
103 | |||
104 | Select "Timing", and click [[image:9.Scripts_html_75dc3ed25fdbc359.gif]] to change interval of script, it pops-up above window | ||
105 | |||
106 | Select "Yes" to execute operation or select "No" to cancel operation; | ||
107 | |||
108 | (% class="box infomessage" %) | ||
109 | ((( | ||
110 | **✎Note:** The maximum number of timing script for each screen or background is 32. | ||
111 | ))) | ||
112 | |||
113 | == Trigger bit == | ||
114 | |||
115 | **Introduction** | ||
116 | |||
117 | Trigger control script is that software will check whether the designated bit meet trigger condition every 20ms. Script execute once condition is met until project closed. | ||
118 | |||
119 | **Operating procedures of creating one** | ||
120 | |||
121 | Click "Background script" in project manager to enter script editor screen, or click "Screen script" in right click menu of screen to enter script editor screen; | ||
122 | |||
123 | Double click "Trigger bit", it pops-up below setting window; | ||
124 | |||
125 | (% style="text-align:center" %) | ||
126 | [[image:9.Scripts_html_5aa68df50f16cfa2.gif||class="img-thumbnail"]] | ||
127 | |||
128 | * Bit address: It sets trigger address for script; | ||
129 | * Condition: detailed information as below shows; | ||
130 | |||
131 | (% class="table-bordered" %) | ||
132 | |=**Condition**|=**Description** | ||
133 | |TRUE|Script execute once the bit value is TRUE, detects the bit every per approximately 20 ms; | ||
134 | |FALSE|Script execute once the bit value is FALSE, detects the bit every per approximately 20 ms; | ||
135 | |Bit changed|Execute once the trigger bit switches state; | ||
136 | |Rising|Script execute once the bit value from FALSE to TRUE, detects the bit every per approximately 20 ms; | ||
137 | |Falling|Script execute once the bit value from TURE to FALSE, detects the bit every per approximately 20 ms; | ||
138 | |||
139 | Set trigger bit and condition, click "OK" to open editing window. | ||
140 | |||
141 | **Operating procedures of editing** | ||
142 | |||
143 | * Click "Background script" in project manager to enter script editor screen, or click "Screen script" in right click menu of screen to enter script editor screen; | ||
144 | * Select "Trigger script", and click [[image:9.Scripts_html_d1db672f9b0fe31.gif]] to change trigger bit and condition; | ||
145 | * Double click selected "Trigger script" to open editing window. | ||
146 | |||
147 | **Operating procedures of deleting** | ||
148 | |||
149 | * Click "Background script" in project manager to enter script editor screen, or click "Screen script" in right click menu of screen to enter script editor screen; | ||
150 | * Select "Trigger script", and click [[image:9.Scripts_html_75dc3ed25fdbc359.gif]] to change interval of script, it pops-up below window | ||
151 | |||
152 | (% style="text-align:center" %) | ||
153 | [[image:9.Scripts_html_f7b5302abd3000e3.gif||class="img-thumbnail"]] | ||
154 | |||
155 | * Select "Yes" to execute operation or select "No" to cancel operation; | ||
156 | |||
157 | (% class="box infomessage" %) | ||
158 | ((( | ||
159 | **✎Note:** The maximum number of trigger script for each screen or background is 32. | ||
160 | ))) | ||
161 | |||
162 | == Background function == | ||
163 | |||
164 | Global function is a collection of codes;it can be called in any script.The method reference system function; | ||
165 | |||
166 | **Operating procedures** | ||
167 | |||
168 | Double click "Background function" in project manager; | ||
169 | |||
170 | (% style="text-align:center" %) | ||
171 | [[image:9.Scripts_html_6240f0610ba63eff.gif||class="img-thumbnail"]] | ||
172 | |||
173 | Set parameters; | ||
174 | |||
175 | (% style="text-align:center" %) | ||
176 | [[image:9.Scripts_html_d196f8a817949f3e.gif||class="img-thumbnail"]] | ||
177 | |||
178 | (% class="table-bordered" %) | ||
179 | |**Property**|**Description** | ||
180 | |Function name|Function name could not be the same as existing. | ||
181 | |Return type|None, string, integer, float. | ||
182 | |Parameter 1|The name of parameter 1. | ||
183 | |||
184 | **Operating procedures of editing** | ||
185 | |||
186 | * Click "Background function" in project manager to enter script editor screen; | ||
187 | * Select Function name, and click [[image:9.Scripts_html_c653b64bc266a016.gif]] to change parameters; | ||
188 | * Double click selected "Trigger script" to open editing window; | ||
189 | |||
190 | **Operating procedures of deleting** | ||
191 | |||
192 | * Click "Background function" in project manager to enter script editor screen; | ||
193 | * Select Function name, and click [[image:9.Scripts_html_75dc3ed25fdbc359.gif]] to change interval of script, it pops-up below window | ||
194 | |||
195 | (% style="text-align:center" %) | ||
196 | [[image:9.Scripts_html_f7b5302abd3000e3.gif||class="img-thumbnail"]] | ||
197 | |||
198 | * Select "Yes" to execute operation or select "No" to cancel operation; | ||
199 | |||
200 | (% class="box infomessage" %) | ||
201 | ((( | ||
202 | **✎Note:** The maximum parameters for each function are 4, and parameter name can't be unique; | ||
203 | ))) | ||
204 | |||
205 | = Script usage = | ||
206 | |||
207 | Script can make project more convenient and flexible. Script is useful in realizing complex HMI function. If the script is used improperly, it may affect the efficiency of entire project. So pay attention to the follow issues: | ||
208 | |||
209 | * Do not use too much script loops, if the script loops that execute too many times; it might influence the efficiency of HMI. | ||
210 | * In the cycle scripts, avoid using external register, due to the relatively slow serial communication, frequent access to external registers may cause the execution of scripts severely reduced, even influence the screen respond efficiently. There is fine to use internal register. | ||
211 | * The maximum script length is 512 rows. | ||
212 | |||
213 | This section describes how to edit scripts and use some of the accompanying tools and features of the script editor. | ||
214 | |||
215 | == **Script access to device** == | ||
216 | |||
217 | Software script supports an efficiency way to access the device address by using symbol @. | ||
218 | |||
219 | (% class="table-bordered" %) | ||
220 | |=**Writing**|=**Meaning**|=**Examples** | ||
221 | |@B_;@b_;|Access designated bit address|((( | ||
222 | @B_I0.0:access bit address I0.0 | ||
223 | |||
224 | @b_HDX0.0:access bit address HDX0.0 | ||
225 | ))) | ||
226 | |@W_;@w_;|(% rowspan="2" %)((( | ||
227 | Access designated word address | ||
228 | |||
229 | HMI connect more than automatic control devices, "#"stands for choosing number before the symbol,":"stands for accessing the station number before symbol. | ||
230 | |||
231 | Access the first protocol without "#",access default station number1 without":". | ||
232 | )))|((( | ||
233 | @W_IW0:access word address IW0 | ||
234 | |||
235 | @b_HDW0:access word address HDW0 | ||
236 | ))) | ||
237 | |@B_(the number of protocol connection)#(station number):address|((( | ||
238 | @B_2#2:I0.0:access the bit address I0.0, with the connection number 2 and station number 2; | ||
239 | |||
240 | @B_I0.0:access to bit address I0.0; | ||
241 | ))) | ||
242 | |||
243 | The script can access with the device though: write and read. | ||
244 | |||
245 | **For example** | ||
246 | |||
247 | {{code language="basic"}} | ||
248 | If @B_HDX0.0 = 1 then 'read the value from address HDX0.0. | ||
249 | |||
250 | @B_HDX0.0 = 0 'write 0 to address HDX0.0 | ||
251 | |||
252 | Else | ||
253 | |||
254 | @B_HDX0.0 = 1 'write 1 to address HDX0.0 | ||
255 | |||
256 | Endif | ||
257 | |||
258 | @W_QW0 = @W_QW0 + 1 'read data from address QW0, add 1 to this value then write to address QW0 | ||
259 | {{/code}} | ||
260 | |||
261 | == **Grammar checking** == | ||
262 | |||
263 | **Operating procedures** | ||
264 | |||
265 | 1. Select [[image:9.Scripts_html_2a530bda982b4281.gif]] from script tool bar; | ||
266 | 1. System does not prompt grammar error if grammar is correct, or system will list all errors; | ||
267 | 1. Check error information, and modify errors; | ||
268 | |||
269 | **Error information** | ||
270 | |||
271 | ~1. Identifier ~*~** contains invalid characters | ||
272 | |||
273 | 2. Attempt to redeclare sub ~*~** | ||
274 | |||
275 | 3. Attempt to redeclare function ~*~** | ||
276 | |||
277 | 4. Attempt to use reserved word ~*~** as identifier | ||
278 | |||
279 | 5. Attempt to use type ~*~** as identifier | ||
280 | |||
281 | 6. Unexpected ')' while parsing arguments for function ~*~** | ||
282 | |||
283 | 7. Could not parse expression (one of the arguments of function ~*~**) | ||
284 | |||
285 | 8. Could not parse arguments of ~*~** | ||
286 | |||
287 | 9. Too many arguments for function ~*~** | ||
288 | |||
289 | 10. Not enough arguments for function ~*~** | ||
290 | |||
291 | ~11. '(' expected after sub name ~*~** | ||
292 | |||
293 | 12. Unexpected '(' while parsing arguments for sub ~*~** | ||
294 | |||
295 | 13. Could not parse expression (one of the arguments of sub ~*~**) | ||
296 | |||
297 | 14. Could not parse arguments of ~*~** | ||
298 | |||
299 | 15. Too many arguments for sub/function ~*~** | ||
300 | |||
301 | 16. Not enough arguments for sub/function ~*~** | ||
302 | |||
303 | 17. Could not parse expression | ||
304 | |||
305 | 18. '(' expected after function name ~*~** | ||
306 | |||
307 | 19. Unexpected use of sub ~*~** as a part of expression | ||
308 | |||
309 | 20. Illegal statements preceding subs/functions declaration | ||
310 | |||
311 | 21. Unexpected end of file while looking for 'endsub' | ||
312 | |||
313 | 22. End of line expected after 'else'. | ||
314 | |||
315 | 23. End of line expected after 'endif'. | ||
316 | |||
317 | 24. End of line expected after 'next'. | ||
318 | |||
319 | 25. End of line expected after 'wend'. | ||
320 | |||
321 | 26. 'while', 'until' or end of line expected afte r'do'. | ||
322 | |||
323 | 27. Could not parse expression after 'while' | ||
324 | |||
325 | 28. Could not parse expression after 'until' | ||
326 | |||
327 | 29. 'do' without 'loop' | ||
328 | |||
329 | 30. Sub ~*~** contains invalid character'@' | ||
330 | |||
331 | 31. Sub ~*~** already declared | ||
332 | |||
333 | 32. Function ~*~** already declared | ||
334 | |||
335 | 33. Sub name expected after 'sub' | ||
336 | |||
337 | 34. Function name expected after 'function' | ||
338 | |||
339 | 35. Variable name expected | ||
340 | |||
341 | 36. Argument ~*~** contains invalid character '@' | ||
342 | |||
343 | 37. 'integer', 'floating' or 'string' expected | ||
344 | |||
345 | 38. ''',' or ')' expected | ||
346 | |||
347 | 39. 'endsub' without 'sub' | ||
348 | |||
349 | 40. 'end function' without 'function' | ||
350 | |||
351 | 41. End of line expected after 'beep' | ||
352 | |||
353 | 42. 'dim' unexpected here | ||
354 | |||
355 | 43. Variable name expected after 'dim' | ||
356 | |||
357 | 44. 'as' expected after variable name | ||
358 | |||
359 | 45. 'integer' 'floating' or 'string' expected after 'as' | ||
360 | |||
361 | 46. ',' or end of line expected after type in dim statement | ||
362 | |||
363 | 47. Could not parse expression after 'while' | ||
364 | |||
365 | 48. End of line expected after' while' condition | ||
366 | |||
367 | 49. 'while' without 'wend' | ||
368 | |||
369 | 50. End of line expected after 'wend' | ||
370 | |||
371 | 51. 'wend' without 'while' | ||
372 | |||
373 | 52. Variable name expected after' for' | ||
374 | |||
375 | 53. '=' expected after variable name | ||
376 | |||
377 | 54. Could not parse expression after 'for' | ||
378 | |||
379 | 55. 'to' expected | ||
380 | |||
381 | 56. Could not parse expression after 'to' | ||
382 | |||
383 | 57. Could not parse expression after 'step' | ||
384 | |||
385 | 58. End of line expected | ||
386 | |||
387 | 59. 'for' without 'next' | ||
388 | |||
389 | 60. End of line expected after 'next' | ||
390 | |||
391 | 61. 'Next' without 'for' | ||
392 | |||
393 | 62. Could not parse expression after'if' | ||
394 | |||
395 | 63. 'then' expected | ||
396 | |||
397 | 64. Unexpected end of file while looking for 'endif' | ||
398 | |||
399 | 65. Unexpected end of file while looking for 'else' or 'endif' | ||
400 | |||
401 | 66. 'else' without ‘if' | ||
402 | |||
403 | 67. 'end if' without 'if' | ||
404 | |||
405 | 68. Label name expected after 'goto' | ||
406 | |||
407 | 69. Unexpected end of line while looking for ')' in function call | ||
408 | |||
409 | 70. ',' expected | ||
410 | |||
411 | 71. Missing ')' | ||
412 | |||
413 | 72. Unexpected end of line in expression | ||
414 | |||
415 | 73. Unexpected end of file in expression | ||
416 | |||
417 | = **Script function list** = | ||
418 | |||
419 | == Mathematical == | ||
420 | |||
421 | (% class="table-bordered" %) | ||
422 | |=(% style="width: 181px;" %)**Function**|=(% style="width: 1308px;" %)**Introduction** | ||
423 | |[[Abs>>||anchor="HAbs"]]|Get absolute value | ||
424 | |[[ACos>>||anchor="HACos"]]|Compute the inverse cosine value | ||
425 | |[[Asc>>||anchor="HAsc"]]|Return the first character of the string in ASCII value | ||
426 | |[[ASin>>||anchor="HASin"]]|Calculate the arcsine value | ||
427 | |[[ATan>>||anchor="HATan"]]|Return an arctangent value,the radian ranges -pi/2 to pi/2 | ||
428 | |[[ATan2>>||anchor="HATan2"]]|Return the arctangent value | ||
429 | |[[Cos>>||anchor="HCos"]]|Return a cosine value of an angle | ||
430 | |[[Exp>>||anchor="HExp"]]| | ||
431 | |[[Hypot>>||anchor="HHypot"]]|Calculate the value of the hypotenuse of a right triangle | ||
432 | |[[Tan>>||anchor="HTan"]]|Implement tan calculation to computing the value | ||
433 | |[[Sin>>||anchor="HSin"]]|Implement sin calculation to computing the value | ||
434 | |[[Sqr>>||anchor="HSqr"]]|Assign a square root value | ||
435 | |[[SignedInt16>>||anchor="HSignedInt16"]]|Assign the value to [val] from address A1 which is signed integer | ||
436 | |[[SignedInt32>>||anchor="HSignedInt32"]]|Assign the value to [val] from address A1 which is signed even integer | ||
437 | |||
438 | == Data migration == | ||
439 | |||
440 | (% class="table-bordered" %) | ||
441 | |=(% style="width: 178px;" %)**Function**|=(% style="width: 1311px;" %)**Introduction** | ||
442 | |[[BMOV>>||anchor="HBMOV"]]|Copy data with a designated length from source address | ||
443 | |[[FILL>>||anchor="HFILL"]]|Write the same value to designated address constantly | ||
444 | |[[SetKeyMap>>||anchor="HSetKeyMap"]]|The key values of the keyboard are mapped so that multiple keyboard buttons perform the same function | ||
445 | |||
446 | == Process control == | ||
447 | |||
448 | (% class="table-bordered" %) | ||
449 | |=(% style="width: 181px;" %)**Function**|=(% style="width: 1308px;" %)**Introduction** | ||
450 | |[[Goto>>||anchor="HGoto"]]|Go to the designated row unconditionally in a function body | ||
451 | |FOR|Execute a command repeatedly for designated times | ||
452 | |[[End>>||anchor="HEnd"]]|End the execution of script | ||
453 | |while|If the condition is true, then all the commands before Wend in the statement will be executed and then recheck the condition, if the condition is false, the command after Wend will be executed | ||
454 | |||
455 | == Data conversion == | ||
456 | |||
457 | (% class="table-bordered" %) | ||
458 | |=(% style="width: 182px;" %)**Function**|=(% style="width: 1307px;" %)**Introduction** | ||
459 | |[[A2H>>||anchor="HA2H"]]|Convert string A1 to hexadecimal number | ||
460 | |[[AsFloating>>||anchor="HAsFloating"]]|Convert parameter to a float | ||
461 | |[[AsInteger>>||anchor="HAsInteger"]]|Convert parameter to a integer | ||
462 | |[[AsString>>||anchor="HAsString"]]|Convert parameter to a string | ||
463 | |[[B2W>>||anchor="HB2W"]]|Convert an array | ||
464 | |[[BCD>>||anchor="HBCD"]]|Convert binary to BCD, save the result as return value | ||
465 | |[[BIN>>||anchor="HBIN"]]|Convert BCDto binary, save the result in return value | ||
466 | |[[Chr>>||anchor="HChr"]]|Convert integer parameter into correspond ASCII character,return the character string | ||
467 | |[[D2F>>||anchor="HD2F"]]|Convert the 32 bit integer format data to float then output the result | ||
468 | |[[D2Float>>||anchor="HD2Float"]]|Convert the designated value to floating then assign to variable | ||
469 | |[[D2Int>>||anchor="HD2Int"]]|Output the 32-bit integer in the form of integer | ||
470 | |[[DegToRad>>||anchor="HDegToRad"]]|Convert the angle into correspond radian, and display | ||
471 | |[[F2D>>||anchor="HF2D"]]|Convert a 32 bit floating to integer format, and then output the result | ||
472 | |[[F2S>>||anchor="HF2S"]]|Output a format of floating that in the type of string | ||
473 | |[[Float2D>>||anchor="HFloat2D"]]|Copy floating value to the address | ||
474 | |[[H2A>>||anchor="HH2A"]]| of ASCII | ||
475 | |[[Int2D>>||anchor="HInt2D"]]|Write the 32-bit integer into the specified address | ||
476 | |[[Lcase>>||anchor="HLcase"]]|Convert all parameters to lowercase strings | ||
477 | |[[MAX>>||anchor="HMAX"]]|Compare the value of A2 and A3, assign the greater number to A1 | ||
478 | |[[MIN>>||anchor="HMIN"]]|Compare the value of A2 and A3, assign the smaller number to A1 | ||
479 | |[[RadToDeg>>||anchor="HRadToDeg"]]|Convert radiant value to degree | ||
480 | |[[S2F>>||anchor="HS2F"]]|Convert string to floating in the specified format | ||
481 | |[[SWAP>>||anchor="HSWAP"]]|Exchange the high and low bytes of the parameter | ||
482 | |[[W2B>>||anchor="HW2B"]]|Combine the high byte of the value of two consecutive addresses into a new value | ||
483 | |[[W2D>>||anchor="HW2D"]]|Convert the unsigned Word to unsigned Dword and save the result | ||
484 | |[[W2F>>||anchor="HW2F"]]|Convert a 16bit integer to a 32bit floating, and then save to the next word address | ||
485 | |[[W2S>>||anchor="HW2S"]]|Convert integer word text as S1 format, and then save | ||
486 | |||
487 | == String processing == | ||
488 | |||
489 | (% class="table-bordered" %) | ||
490 | |=(% style="width: 180px;" %)**Function**|=(% style="width: 1309px;" %)**Introduction** | ||
491 | |[[A2I>>||anchor="HA2I"]]|A string of length is intercepted from A1 and converted to a single/double word integer, and then this integer is assigned to A2 | ||
492 | |[[InStr>>||anchor="HInStr"]]|Return the position of str1 in str2 | ||
493 | |[[Left>>||anchor="HLeft"]]|Return a string of the specified length from the left side of parameter | ||
494 | |[[Len>>||anchor="HLen"]]|Return the string length | ||
495 | |[[LTrim>>||anchor="HLTrim"]]|Remove the left empty part of the string and return | ||
496 | |[[Mid>>||anchor="HMid"]]|Returns a string contain a specified characters length from a string | ||
497 | |[[Right>>||anchor="HRight"]]|Return a string of the specified length from the right side of parameter | ||
498 | |[[RTrim>>||anchor="HRTrim"]]|Clear the empty part on the right side of string [str], then assign the empty part to val | ||
499 | |[[Trim>>||anchor="HTrim"]]|Return a value of an address without empty string next to it | ||
500 | |[[UCase>>||anchor="HUCase"]]|Capitalize the string data, and then assign the value to val | ||
501 | |||
502 | == Fixed constant == | ||
503 | |||
504 | (% class="table-bordered" %) | ||
505 | |=**Function**|=**Introduction** | ||
506 | |Pi|pi = 3.14159265358979321 | ||
507 | |True|TRUE = 1 | ||
508 | |False|FALSE = 0 | ||
509 | |Operator|Operator in scripts edit window | ||
510 | |Variable|A variable is any factor, trait, or condition that can exist in differing amounts or types | ||
511 | |||
512 | == Bit control == | ||
513 | |||
514 | (% class="table-bordered" %) | ||
515 | |=(% style="width: 178px;" %)**Function**|=(% style="width: 1311px;" %)**Introduction** | ||
516 | |[[Clrb>>||anchor="HClrb"]]|Set the bit of A1 as FALSE | ||
517 | |[[InvB>>||anchor="HInvB"]]|The state of inverse bit | ||
518 | |[[SetB>>||anchor="HSetB"]]|Set the bit A1 ON | ||
519 | |||
520 | == File operation == | ||
521 | |||
522 | |=(% style="width: 168px;" %)**Function**|=(% style="width: 1338px;" %)**Introduction** | ||
523 | |(% style="width:168px" %)[[HmiRegoperator>>path:#HHmiRegoperator]]|(% style="width:1338px" %)Data of Upload/ Download address | ||
524 | |(% style="width:168px" %)[[CopyFile>>path:#HCopyFile]]|(% style="width:1338px" %)Copy the A3 file from the A1 directory to the A2 directory according to the format of A4 and A5 | ||
525 | |(% style="width:168px" %)[[DbToCSVFile>>path:#HDbToCSVFile]]|(% style="width:1338px" %) file to csv format and export it | ||
526 | |(% style="width:168px" %)[[FileCmpDir>>path:#HFileCmpDir]]|(% style="width:1338px" %)The filename input and the filename in the folder whether is duplicate or not | ||
527 | |(% style="width:168px" %)[[MyDeleteFile>>path:#HMyDeleteFile]]|(% style="width:1338px" %)Delete the designated file | ||
528 | |(% style="width:168px" %)[[WriteWordToFile>>path:#HWriteWordToFile]]|(% style="width:1338px" %)Write data with designated length to designated file | ||
529 | |(% style="width:168px" %)[[ReadWordFormFile>>path:#HReadWordFormFile]]|(% style="width:1338px" %)Read data with designated length from designated file | ||
530 | |||
531 | == Comparison == | ||
532 | |||
533 | (% class="table-bordered" %) | ||
534 | |=(% colspan="2" style="width: 389.5px;" %)Function|=Introduction | ||
535 | |(% rowspan="8" %)IF... THEN GOTO...|(% style="width:148.719px" %)IF=|(% rowspan="18" style="width:691.5px" %)Execute correspond instruction when fulfill condition. Condition will be tested during executing if. it will execute the next instruction block of then, if condition is true. Otherwise, execute the later of else. Complete the two instructions, next execute the later of End if. | ||
536 | |(% style="width:148.719px" %)IF<> | ||
537 | |(% style="width:148.719px" %)IF> | ||
538 | |(% style="width:148.719px" %)IF>= | ||
539 | |(% style="width:148.719px" %)IF< | ||
540 | |(% style="width:148.719px" %)IF<= | ||
541 | |(% style="width:148.719px" %)IF AND=0 | ||
542 | |(% style="width:148.719px" %)IF AND<>0 | ||
543 | |(% rowspan="8" style="width:255.281px" %)IF|(% style="width:148.719px" %)IF= | ||
544 | |(% style="width:148.719px" %)IF<> | ||
545 | |(% style="width:148.719px" %)IF> | ||
546 | |(% style="width:148.719px" %)IF>= | ||
547 | |(% style="width:148.719px" %)IF< | ||
548 | |(% style="width:148.719px" %)IF<= | ||
549 | |(% style="width:148.719px" %)IF AND=0 | ||
550 | |(% style="width:148.719px" %)IF AND<>0 | ||
551 | |(% colspan="2" style="width:389.5px" %)ELSE | ||
552 | |(% colspan="2" style="width:389.5px" %)ENDIF | ||
553 | |||
554 | == Application type == | ||
555 | |||
556 | (% class="table-bordered" %) | ||
557 | |=(% style="width: 181px;" %)**Function**|=(% style="width: 1308px;" %)**Introduction** | ||
558 | |[[AddrStringCompare>>||anchor="HAddrStringCompare"]]|Compare the designated length of two character strings | ||
559 | |[[Beep>>||anchor="HBeep"]]|Enable buzzer | ||
560 | |[[IsFloating>>||anchor="HIsFloating"]]|whether a parameter is floating, return TRUE if it is floating, otherwise return FALSE | ||
561 | |[[IsInteger>>||anchor="HIsInteger"]]|whether a parameter(A1) is integer, return TRUE if the parameter is integer, otherwise return FALSE | ||
562 | |[[Log>>||anchor="HLog"]]|Log function: return the natural logarithm of the value | ||
563 | |[[Log10>>||anchor="HLog10"]]|Log function: return the natural logarithm of the value | ||
564 | |[[MSeconds>>||anchor="HMSeconds"]]|Display the current microseconds of system | ||
565 | |[[NewNoAddr>>||anchor="HNewNoAddr"]]|At the basic of source address A2,offset designated length,obtain a new address A1 | ||
566 | |[[NewStatAddr>>||anchor="HNewStatAddr"]]|At the basic of source address A2,offset the designated length,to obtain a new station A1. | ||
567 | |[[NStringCompare>>||anchor="HNStringCompare"]]|Compare whether the designated length of two strings is the same,return 1 to A1 if yes,otherwise return 0 | ||
568 | |[[Power>>||anchor="HPower"]]|The value of [expr2] to the power of [expr1] will be assigned to Var | ||
569 | |[[RAND>>||anchor="HRAND"]]|Generate a random number | ||
570 | |[[ReadAddr>>||anchor="HReadAddr"]]|Assign the value in the specified address to [word] | ||
571 | |[[SleepA>>||anchor="HSleepA"]]|Wait time T(ms) | ||
572 | |[[WriteAddr>>||anchor="HWriteAddr"]]|Assign the value from A2 to address A1 | ||
573 | |||
574 | == Others == | ||
575 | |||
576 | (% class="table-bordered" %) | ||
577 | |=(% style="width: 182px;" %)**Function**|=(% style="width: 1307px;" %)**Introduction** | ||
578 | |[[DIM...AS...>>||anchor="HDIM...AS..."]]|Declare a variable | ||
579 | |do|Condition determent instruction | ||
580 | |[[Function>>||anchor="HFunction"]]|Differ from internal function, need to declare the name, parameter, code of the function | ||
581 | |[[Sub>>||anchor="HSub"]]|Declare the name, parameters and codes of the Sub (sub function) | ||
582 | |[[PrintText>>||anchor="HPrintText"]]|Output the contents to the printer for printing | ||
583 | |[[PI_GetTickCount>>||anchor="HPI_GetTickCount"]]|Write the starting time in the set address as a 32-bit integer | ||
584 | |[[StAndFtChange>>||anchor="HStAndFtChange"]]|Calculate the number of seconds from January 1, 1970 to the current time | ||
585 | |[[GetServerDelayInfo>>||anchor="HGetServerDelayInfo"]]|Convert string to hexadecimal number | ||
586 | |||
587 | = **Function description** = | ||
588 | |||
589 | == A2H == | ||
590 | |||
591 | **Function** | ||
592 | |||
593 | Val = A2H(A1) | ||
594 | |||
595 | **Description** | ||
596 | |||
597 | Convert string in the specified address to a hexadecimal number; | ||
598 | |||
599 | **Parameters** | ||
600 | |||
601 | * **A1:** Source data, only convert the first four digits of string | ||
602 | * **Val:** The value is hexadecimal number. | ||
603 | |||
604 | **Example** | ||
605 | |||
606 | {{code language="basic"}} | ||
607 | @W_HDW20=A2H(@W_HDW10) ' convert the string of HDW10 to hex then save in HDW20. | ||
608 | {{/code}} | ||
609 | |||
610 | **Input:** @W_HDW10=255 | ||
611 | |||
612 | **Result:** @W_HDW20=255 | ||
613 | |||
614 | (% class="box infomessage" %) | ||
615 | ((( | ||
616 | **✎Note:** | ||
617 | |||
618 | * A1 needs to be address (such as:@W_HDW000002). | ||
619 | * Only [0~~1], [a~~f] can be converted, others will be converted to 0 | ||
620 | ))) | ||
621 | |||
622 | == A2I == | ||
623 | |||
624 | **Function** | ||
625 | |||
626 | A2I (A1, A2, length, S) | ||
627 | |||
628 | **Description** | ||
629 | |||
630 | Intercept a string of the specified length from A1,convert it to a single/double word integer and assign this integer to A2. | ||
631 | |||
632 | **Parameters** | ||
633 | |||
634 | * **A1:** String to be intercepted | ||
635 | * **A2:** The final integer value | ||
636 | * **Length:** intercepts the length of the string | ||
637 | * **S:** Control single or double words. | ||
638 | ** S=0, indicating an integer single word; S=1, indicating an integer double word. | ||
639 | |||
640 | **Return value:** none | ||
641 | |||
642 | **Example** | ||
643 | |||
644 | {{code language="basic"}} | ||
645 | A2I("@W_HDW200","@W_HDW100",4,0) 'converts a string into a 16-bit (single word) decimal integer | ||
646 | |||
647 | A2I("@W_HDW600","@W_HDW500",4,1)' converts a string to a 32-bit (double word) decimal integer | ||
648 | {{/code}} | ||
649 | |||
650 | **Input: **@W_HDW200="12345", **Result:** @W_HDW100=1234 | ||
651 | |||
652 | **Input: **@W_HDW600="12345", **Result:** @W_HDW500=1234 | ||
653 | |||
654 | (% class="box infomessage" %) | ||
655 | ((( | ||
656 | **✎Note:** A1 and A2 need to be address (such as:@W_HDW000002). | ||
657 | ))) | ||
658 | |||
659 | == **Abs** == | ||
660 | |||
661 | **Function** | ||
662 | |||
663 | val = Abs(A1) | ||
664 | |||
665 | **Description** | ||
666 | |||
667 | The absolute value of A1. | ||
668 | |||
669 | **Parameters** | ||
670 | |||
671 | * **A1: **the data of absolute value, need to be variable. | ||
672 | * **Val: **it is absolute value that is address or variable. | ||
673 | |||
674 | **Example** | ||
675 | |||
676 | {{code language="lua"}} | ||
677 | Dim a as integer 'a is defined as integer | ||
678 | |||
679 | a = SignedInt16("@W_HDW0")'convert the data of @W_HDW0 into signed data. | ||
680 | |||
681 | @W_HDW1 = Abs(a) 'assign the returned absolute value to @W_HDW1 | ||
682 | {{/code}} | ||
683 | |||
684 | **Input: **@W_HDW0=-6 | ||
685 | |||
686 | **Result: **@W_HDW1=6 | ||
687 | |||
688 | (% class="box infomessage" %) | ||
689 | ((( | ||
690 | **✎Note: SignedInt16** function is designed to convert unsigned to signed. | ||
691 | ))) | ||
692 | |||
693 | == **ACos** == | ||
694 | |||
695 | **Function** | ||
696 | |||
697 | val = ACos(A1) | ||
698 | |||
699 | **Description** | ||
700 | |||
701 | To compute the inverse cosine value of A1. | ||
702 | |||
703 | **Parameters** | ||
704 | |||
705 | * **A1: **floating value, can be an address or variable. | ||
706 | * **Val: **return value is floating, can be an address or variable. | ||
707 | |||
708 | **Example** | ||
709 | |||
710 | {{code language="lua"}} | ||
711 | Dim a ,b as floating'define two float variable a,b | ||
712 | |||
713 | a = 0.5 'assign the designated value to a | ||
714 | |||
715 | b = ACos(a) 'the inverse cosine value of "a" is a radian which assign to variable b. | ||
716 | |||
717 | 'to add the following sentence if needed to view the return value: | ||
718 | |||
719 | float2d("@W_HDW200", b)'float b written into HDW200. | ||
720 | {{/code}} | ||
721 | |||
722 | **Result:** @W_HDW200=1.047 | ||
723 | |||
724 | (% class="box infomessage" %) | ||
725 | ((( | ||
726 | **✎Note:** Please call **RadToDeg** function to convert radian into angle. | ||
727 | ))) | ||
728 | |||
729 | == **AddrStringCompare** == | ||
730 | |||
731 | **Function** | ||
732 | |||
733 | val = AddrStringCompare(A1, A2, length) | ||
734 | |||
735 | **Description** | ||
736 | |||
737 | It is designed to compare the designated length of two character strings. The string value is 1 when the two strings are the same. | ||
738 | |||
739 | **Parameters** | ||
740 | |||
741 | * **A1, A2: **character string, need to be an address (such as:"@W_HDW000002") | ||
742 | * **Length: **The length of character string. | ||
743 | * **Val: **Return value, 0 or 1. | ||
744 | |||
745 | **Example** | ||
746 | |||
747 | {{code language="lua"}} | ||
748 | if AddrStringCompare("@W_HDW10","@W_HDW0",2)=1 then | ||
749 | |||
750 | 'compare the character string of HDW10 and @W_HDW0 whether value are 1. | ||
751 | |||
752 | @W_HDW20=1 '@W_HDW20 display 1 | ||
753 | |||
754 | else | ||
755 | |||
756 | @W_HDW20=0'@W_HDW20 display 0 | ||
757 | |||
758 | Endif | ||
759 | {{/code}} | ||
760 | |||
761 | **Input: **@W_HDW10="1a2 ", @W_HDW0="1a2 ", | ||
762 | |||
763 | **Result:** @W_HDW20=1 | ||
764 | |||
765 | **Input: **@W_HDW10="ab2 ", @W_HDW0="12a ", | ||
766 | |||
767 | **Result: **@W_HDW20=0 | ||
768 | |||
769 | == **Asc** == | ||
770 | |||
771 | **Function** | ||
772 | |||
773 | val = Asc(A1) | ||
774 | |||
775 | **Description** | ||
776 | |||
777 | Return the first character of the string in ASCII value. | ||
778 | |||
779 | **Parameters** | ||
780 | |||
781 | * **A1:**character string, it can be an address (such as: @W_HDW000002) | ||
782 | * **val:**return value,ASCII value,it could be an address or variable. | ||
783 | |||
784 | **Example** | ||
785 | |||
786 | {{code language="lua"}} | ||
787 | @W_HDW10 = Asc("A") 'return the ASCII value of A to HDW10 | ||
788 | |||
789 | @W_HDW11 = Asc("a")'return the ASCII value of a to HDW11 | ||
790 | |||
791 | @W_HDW12 = Asc("Apple") 'return the first character A of string Apple to HDW12 | ||
792 | |||
793 | @W_HDW13 = Asc("123") 'return the first character ASCII value 1 of string 123 to HDW13. | ||
794 | {{/code}} | ||
795 | |||
796 | **Result:** | ||
797 | |||
798 | * @W_HDW10 = 65 | ||
799 | * @W_HDW11 = 97 | ||
800 | * @W_HDW12 = 65 | ||
801 | * @W_HDW13 = 49 | ||
802 | |||
803 | == **AsFloating** == | ||
804 | |||
805 | **Function** | ||
806 | |||
807 | val = AsFloating(A1) | ||
808 | |||
809 | **Description** | ||
810 | |||
811 | Convert parameter A1 to a float. | ||
812 | |||
813 | **Parameters** | ||
814 | |||
815 | * A1: integer variable. | ||
816 | * **val: **return float value, can be a variable or address. | ||
817 | |||
818 | **Example** | ||
819 | |||
820 | {{code language="lua"}} | ||
821 | Dim a as integer 'define a integer variable {a}. | ||
822 | |||
823 | a = @W_HDW10 'assign @W_HDW10 to a | ||
824 | |||
825 | b = AsFloating(a) 'convert integer a to float then assign to b. | ||
826 | |||
827 | b = b/1.2 'add as following sentence when need to view the return value: | ||
828 | |||
829 | Float 2D("@W_HDW11",b) 'float variable b written into HDW11. | ||
830 | {{/code}} | ||
831 | |||
832 | **Input: **@W_HDW10=24, | ||
833 | |||
834 | **Result: **@W_HDW11=20.00(set two decimals) | ||
835 | |||
836 | == **ASin** == | ||
837 | |||
838 | **Function** | ||
839 | |||
840 | val = ASin(A1) | ||
841 | |||
842 | **Description** | ||
843 | |||
844 | Calculate the arcsine value of A1. | ||
845 | |||
846 | **Parameters** | ||
847 | |||
848 | * **A1: **Float can be an address or variable. | ||
849 | * **Val: **Return float value, can be an address or variable. | ||
850 | |||
851 | **Example** | ||
852 | |||
853 | {{code language="lua"}} | ||
854 | Dim a, b as floating'define two float variable a,b | ||
855 | |||
856 | a = 0.5'assign the designated value to a | ||
857 | |||
858 | b=ASin(a) 'calculate the arcsine value of a ,assign the radian to b. | ||
859 | |||
860 | 'Add the following command if need to view the return value: | ||
861 | |||
862 | float2d ("@W_HDW200", b) 'float variable b written into HDW200 | ||
863 | {{/code}} | ||
864 | |||
865 | **Result: **@W_HDW200=0.524 | ||
866 | |||
867 | (% class="box infomessage" %) | ||
868 | ((( | ||
869 | **✎Note:** Pleasecall **RadToDeg** function to convert radian into angle. | ||
870 | ))) | ||
871 | |||
872 | == **AsInteger** == | ||
873 | |||
874 | **Function** | ||
875 | |||
876 | val = AsInteger(A1) | ||
877 | |||
878 | **Description** | ||
879 | |||
880 | Convert parameter A1 to integer value. | ||
881 | |||
882 | **Parameters** | ||
883 | |||
884 | * **A1: **floating need to be a variable. | ||
885 | * **Val: **the value returned could can be a variable or address. | ||
886 | |||
887 | **Example** | ||
888 | |||
889 | {{code language="lua"}} | ||
890 | Dim a as floating 'define floating variable a | ||
891 | |||
892 | a = D2Float("@W_HDW0",a) 'use D2Float function to save the float date of HDW0 in a | ||
893 | |||
894 | b= AsInteger(a) 'convert the float a into integer, the return value assigned to b | ||
895 | |||
896 | @W_HDW10=b 'save b to HDW10 | ||
897 | {{/code}} | ||
898 | |||
899 | **Input:** @W_HDW0=20.12, | ||
900 | |||
901 | **Result:** @W_HDW10=20 | ||
902 | |||
903 | == **AsString** == | ||
904 | |||
905 | **Function** | ||
906 | |||
907 | val = AsString(A1) | ||
908 | |||
909 | **Description** | ||
910 | |||
911 | Convert parameter A1 to a character string. | ||
912 | |||
913 | **Parameters** | ||
914 | |||
915 | * A1: not string parameter, it can be a variable. | ||
916 | * Val: return string value, variable or address. | ||
917 | |||
918 | **Example** | ||
919 | |||
920 | Script 1: | ||
921 | |||
922 | {{code}} | ||
923 | a=123 'assign a value to a | ||
924 | |||
925 | b=234 'assign a value to b | ||
926 | |||
927 | c=AsString(a)+AsString(b) 'convert a and b to string then add up the two strings ,assign the result to c. | ||
928 | |||
929 | @W_HDW0=c 'assign c to HDW0 | ||
930 | |||
931 | d=a+b 'plus a with b | ||
932 | |||
933 | @W_HDW100=d 'assign d to (HDW100) | ||
934 | {{/code}} | ||
935 | |||
936 | **Result: ** | ||
937 | |||
938 | * @W_HDW0=123234 | ||
939 | * @W_HDW100=357 | ||
940 | |||
941 | Script 2: | ||
942 | |||
943 | {{code language="lua"}} | ||
944 | W2S("@W_HDW200","@W_HDW300","02d") | ||
945 | |||
946 | W2S("@W_HDW210","@W_HDW400","02d") | ||
947 | |||
948 | W2S("@W_HDW220","@W_HDW500","02d") | ||
949 | |||
950 | @W_HDW0=AsString(@W_HDW300)+AsString(@W_HDW400)+AsString(@W_HDW500) | ||
951 | {{/code}} | ||
952 | |||
953 | **Input: **@W_HDW200=12,@W_HDW210=34,@W_HDW220=56 | ||
954 | |||
955 | **Result :**@W_HDW300=12,@W_HDW400=34,@W_HDW500=56,@W_HDW0=123456 | ||
956 | |||
957 | (% class="box infomessage" %) | ||
958 | ((( | ||
959 | **✎Note:** Ensure the data always is two words; otherwise occur error. reference the other chapter of W2S function | ||
960 | ))) | ||
961 | |||
962 | |||
963 | Script 3: | ||
964 | |||
965 | {{code language="lua"}} | ||
966 | dim a as string | ||
967 | |||
968 | a=AsString(@W_HDW0) | ||
969 | |||
970 | @W_HDW100=a | ||
971 | {{/code}} | ||
972 | |||
973 | **Input: **@W_HDW0=ABC | ||
974 | |||
975 | **Result :**@W_HDW100=ABC | ||
976 | |||
977 | == **ATan** == | ||
978 | |||
979 | **Function** | ||
980 | |||
981 | var = ATan(A1) | ||
982 | |||
983 | **Description** | ||
984 | |||
985 | Return an arctangent value,the radian ranges -pi/2 to pi/2. | ||
986 | |||
987 | **Parameters** | ||
988 | |||
989 | * **A1: **Can be float, address or variable. | ||
990 | * **Val: **radian of return value. | ||
991 | |||
992 | **Example** | ||
993 | |||
994 | {{code language="basic"}} | ||
995 | @W_HDW20= Atan(@W_HDW10)'save the arctangent value of (HDW10) to (HDW20) | ||
996 | {{/code}} | ||
997 | |||
998 | **Input: **@W_HDW10=1.000,@W_HDW20=0.785 | ||
999 | |||
1000 | (% class="box infomessage" %) | ||
1001 | ((( | ||
1002 | **✎Note:** Please call RadToDeg function convert radian to angle. | ||
1003 | ))) | ||
1004 | |||
1005 | == **ATan2** == | ||
1006 | |||
1007 | **Function** | ||
1008 | |||
1009 | val = ATan2(A1,A2) | ||
1010 | |||
1011 | **Description** | ||
1012 | |||
1013 | Return the arctangent value of A1/A2,radian range | ||
1014 | |||
1015 | **Parameters** | ||
1016 | |||
1017 | * **A1, A2:** Address or variable. | ||
1018 | * **Val: **returned value is a radian, range -pi to pi. | ||
1019 | * **Notice: **ATan2 use sign of two parameters to define the quadrant of return value. | ||
1020 | |||
1021 | **Example** | ||
1022 | |||
1023 | //{{code language="lua"}}@W_HDW20= ATan2 (@W_HDW10,@W_HDW12)'save the arctangent value of (HDW10/HDW12) to (HDW20).{{/code}}// | ||
1024 | |||
1025 | **Input:**@W_HDW10=1.0,@W_HDW12=1.0, | ||
1026 | |||
1027 | **Result: **@W_HDW20=0.785 | ||
1028 | |||
1029 | (% class="box infomessage" %) | ||
1030 | ((( | ||
1031 | **✎Note:** Please call **RadToDeg** function convert radian to angle. | ||
1032 | ))) | ||
1033 | |||
1034 | == **B2W** == | ||
1035 | |||
1036 | **Function** | ||
1037 | |||
1038 | B2W(A1, A2, length) | ||
1039 | |||
1040 | **Description** | ||
1041 | |||
1042 | Convert an array (begins with A2, unit: byte, to another array (begins with A1, unit: word). | ||
1043 | |||
1044 | **Parameters** | ||
1045 | |||
1046 | * **A1: **Saving address after converting | ||
1047 | * **A2: **Address of the value be converted | ||
1048 | * **Length:** The length of conversion | ||
1049 | |||
1050 | **Return value: **None | ||
1051 | |||
1052 | **Example** | ||
1053 | |||
1054 | //{{code language="lua"}}B2W(@W_HDW100,@W_HDW10,2) 'convert (@W_HDW10) to the length of 2,save as the result that begins with @W_HDW100.{{/code}}// | ||
1055 | |||
1056 | **Input: **@W_HDW10=1A2B | ||
1057 | |||
1058 | **Result: ** | ||
1059 | |||
1060 | * @W_HDW100=2B | ||
1061 | * @W_HDW101=1A | ||
1062 | |||
1063 | (% class="box infomessage" %) | ||
1064 | ((( | ||
1065 | **✎Note:** | ||
1066 | |||
1067 | * A1 and A2 need to be address(e.g.: @W_HDW000002); | ||
1068 | * Length could be address or variable; | ||
1069 | * This is a subprogram; it has no returned value. | ||
1070 | ))) | ||
1071 | |||
1072 | == **BCD** == | ||
1073 | |||
1074 | **Function** | ||
1075 | |||
1076 | val = BCD(A1) | ||
1077 | |||
1078 | **Description** | ||
1079 | |||
1080 | Convert A1(binary) to BCD, save the result as return value. | ||
1081 | |||
1082 | **Parameters** | ||
1083 | |||
1084 | * **A1: **The binary be converted; it can be an address or variable. | ||
1085 | * **Val: **Return value, BCD code; it can be an address or variable. | ||
1086 | |||
1087 | **Example** | ||
1088 | |||
1089 | //{{code language="lua"}}@W_HDW20=BCD(@W_HDW10) 'convert HDW10 (binary) to BCD code, then save in (HDW20){{/code}}// | ||
1090 | |||
1091 | **Input:** @W_HDW10=11111111(binary) | ||
1092 | |||
1093 | **Result:** @W_HDW20=255 | ||
1094 | |||
1095 | (% class="box infomessage" %) | ||
1096 | ((( | ||
1097 | **✎Note:** Return value is a word; it hexadecimal corresponds to BCD code. | ||
1098 | ))) | ||
1099 | |||
1100 | == **Beep** == | ||
1101 | |||
1102 | **Function** | ||
1103 | |||
1104 | Beep() | ||
1105 | |||
1106 | **Description** | ||
1107 | |||
1108 | Enable buzzer | ||
1109 | |||
1110 | **Parameters** | ||
1111 | |||
1112 | None | ||
1113 | |||
1114 | **Example** | ||
1115 | |||
1116 | {{code language="lua"}} | ||
1117 | if @B_HDX100.0=1 then 'beep when the bit switch HDX100.0 set ON | ||
1118 | |||
1119 | beep() | ||
1120 | |||
1121 | endif | ||
1122 | {{/code}} | ||
1123 | |||
1124 | **Result: **HMI beep when bit switch HDX100.0 set ON. | ||
1125 | |||
1126 | == **BIN** == | ||
1127 | |||
1128 | **Function** | ||
1129 | |||
1130 | Val = BIN(A1) | ||
1131 | |||
1132 | **Description** | ||
1133 | |||
1134 | Convert A1 (BCD) into binary, save the result in return value. | ||
1135 | |||
1136 | **Parameters** | ||
1137 | |||
1138 | * **A1:** The BCD code is converted; it can be address or variable. | ||
1139 | * **Val:** Return binary value,it can be address or variable. | ||
1140 | |||
1141 | **Example** | ||
1142 | |||
1143 | //{{code language="lua"}}@W_HDW20=BIN(@W_HDW10) 'convert HDW10(BCD) to binary, save the result in (HDW20){{/code}}// | ||
1144 | |||
1145 | **Input:** @W_HDW10=255 | ||
1146 | |||
1147 | **Result:** @W_HDW20=11111111 (binary) | ||
1148 | |||
1149 | == **BMOV** == | ||
1150 | |||
1151 | **Function** | ||
1152 | |||
1153 | BMOV(A1, A2,length) | ||
1154 | |||
1155 | **Description** | ||
1156 | |||
1157 | Copy data with a designated length from source address A2 to A1. | ||
1158 | |||
1159 | **Parameter** | ||
1160 | |||
1161 | * **A1:** saving address; | ||
1162 | * **A2:** source address; | ||
1163 | |||
1164 | **length:** operating length; | ||
1165 | |||
1166 | **Example** | ||
1167 | |||
1168 | {{code language="lua"}} | ||
1169 | @W_HDW20 = 20 'assign value to HDW20 | ||
1170 | |||
1171 | @W_HDW21 = 21 'assign value to HDW21 | ||
1172 | |||
1173 | @W_HDW22 = 22 'assign value to HDW22 | ||
1174 | |||
1175 | BMOV(@W_HDW10,@W_HDW20,3) 'assign the word address of HDW20, HDW21, HDW22 to HDW10, HDW11, HDW12 | ||
1176 | {{/code}} | ||
1177 | |||
1178 | **Result:** | ||
1179 | |||
1180 | * @W_HDW10 = 20 | ||
1181 | * @W_HDW11 = 21 | ||
1182 | * @W_HDW12 = 22 | ||
1183 | |||
1184 | **✎Note:** | ||
1185 | |||
1186 | * A1 and A2 need to be address | ||
1187 | * Length can be an integer variable or an address. When destAddr and srcAddr are PLC (external device) addresses, the length range is 1-2048, and the 2049th address would not be operated when the range is exceeded. | ||
1188 | * When destAddr and srcAddr are HMI addresses, the length range is 1-4096, and This function is invalid when out of range. | ||
1189 | |||
1190 | == **Chr** == | ||
1191 | |||
1192 | **Function** | ||
1193 | |||
1194 | val = Chr(A1, A2, ...) | ||
1195 | |||
1196 | **Description** | ||
1197 | |||
1198 | Convert integer parameter into correspond ASCII character, return the character string. | ||
1199 | |||
1200 | **Parameters** | ||
1201 | |||
1202 | * **A1, A2....:** converted integer; it can be an address or variable. | ||
1203 | * **Val: **returned value, can be an address or variable. | ||
1204 | |||
1205 | **Example** | ||
1206 | |||
1207 | {{code language="lua"}} | ||
1208 | @W_HDW100=Chr(@W_HDW20, @W_HDW21, @W_HDW22, @W_HDW23, @W_HDW24) | ||
1209 | |||
1210 | 'convert the value of(HDW20, HDW21 ,HDW22, HDW23, HDW24) to ASCII character, assign the value to (HDW100) | ||
1211 | {{/code}} | ||
1212 | |||
1213 | **Input** 72,69,76,76,79 step by step according to HDW20, HDW21, HDW22, HDW23, HDW24, | ||
1214 | |||
1215 | **Result: **returns HELLO to (@W_HDW100). | ||
1216 | |||
1217 | == **ClrB** == | ||
1218 | |||
1219 | **Function** | ||
1220 | |||
1221 | ClrB(A1) | ||
1222 | |||
1223 | **Description** | ||
1224 | |||
1225 | Set the bit of A1 as FALSE (0). | ||
1226 | |||
1227 | **Parameters** | ||
1228 | |||
1229 | **A1:** System address(bit) | ||
1230 | |||
1231 | (% class="box infomessage" %) | ||
1232 | ((( | ||
1233 | **✎Note:** subprogram has no return value. | ||
1234 | ))) | ||
1235 | |||
1236 | **Example** | ||
1237 | |||
1238 | //{{code language="lua"}}ClrB(@B_HDX100.0) 'assign 0 to (@B_HDX100.0){{/code}}// | ||
1239 | |||
1240 | == **Constant** == | ||
1241 | |||
1242 | **Description** | ||
1243 | |||
1244 | Script supported constant, users can use on script: | ||
1245 | |||
1246 | pi = 3.14159265358979321 | ||
1247 | |||
1248 | TRUE = 1 | ||
1249 | |||
1250 | FALSE = 0 | ||
1251 | |||
1252 | **Example** | ||
1253 | |||
1254 | {{code language="lua"}} | ||
1255 | Dim a as integer 'define integer a | ||
1256 | |||
1257 | a = RadToDeg(pi) 'convert radian pi to angle then assign to a,RadToDeg function is used to convert radian to angle. | ||
1258 | |||
1259 | @W_HDW11 = a 'assign a to (HDW11) | ||
1260 | {{/code}} | ||
1261 | |||
1262 | **Result: **@W_HDW11=180 | ||
1263 | |||
1264 | == **CopyFile** == | ||
1265 | |||
1266 | **Function** | ||
1267 | |||
1268 | A6=CopyFile(A1,A2,A3,A4,A5) | ||
1269 | |||
1270 | **Description** | ||
1271 | |||
1272 | Copy the A3 file from the A1 directory to the A2 directory according to the format of A4 and A5, and write returned value status to A6. | ||
1273 | |||
1274 | **Parameters** | ||
1275 | |||
1276 | * **A1: **the source path of the file to be copied. | ||
1277 | * **A2: **target path. | ||
1278 | * **A3:** the name of the file to be copied. | ||
1279 | * **A4: **copy type (0: copy file, 1: copy directory). | ||
1280 | * **A5: **Whether to overwrite the file with the same name when copying (0: Yes, 1: No). | ||
1281 | * **A6: **returned value. | ||
1282 | ** 0: copy failed | ||
1283 | ** 1: copy succeeded | ||
1284 | ** 2: Parameter error | ||
1285 | ** 3: U disk does not exist | ||
1286 | ** 4: SD card does not exist | ||
1287 | ** 5: Path error | ||
1288 | |||
1289 | **Example** | ||
1290 | |||
1291 | Copy a single file: | ||
1292 | |||
1293 | {{code language="lua"}} | ||
1294 | @W_HDW100 = " test.csv" | ||
1295 | |||
1296 | CopyFile("UDisk/Test","Flash/Test","test.csv",0,0) 'Copy the Test.csv file in the UDisk/Test directory to the Flash/Test directory. | ||
1297 | |||
1298 | Can also be written as CopyFile("UDisk/Test","Flash/Test",@W_HDW100,0,0) | ||
1299 | |||
1300 | (2) Copy the entire directory file: | ||
1301 | |||
1302 | CopyFile("UDisk/Test","Flash/Test","",1,0) ' Copy the files in the UDisk/Test | ||
1303 | |||
1304 | directory to the Flash/Test directory. | ||
1305 | {{/code}} | ||
1306 | |||
1307 | (% class="box infomessage" %) | ||
1308 | ((( | ||
1309 | **✎Note:** | ||
1310 | |||
1311 | * Both source and destination paths need to begin with UDisk or Flash or SDCard; | ||
1312 | * A1 and A2 could be string (requires double quotes) or variable, maximum character length 127 allowed in path; | ||
1313 | * A3 could be a string, such as: [FileName] (requires double quotes); or address, such as: @W_HDW100 (no need to add double quotes); | ||
1314 | * A4 and A5 could be values, addressesor variable; | ||
1315 | * A6 could be address or variable. | ||
1316 | ))) | ||
1317 | |||
1318 | == **Cos** == | ||
1319 | |||
1320 | **Function** | ||
1321 | |||
1322 | Val = Cos(A1) | ||
1323 | |||
1324 | **Description** | ||
1325 | |||
1326 | Return a cosine value of an angle. | ||
1327 | |||
1328 | **Parameters** | ||
1329 | |||
1330 | * **A1: **a float radian of angle, it can be an address or variable. | ||
1331 | * **Val: **return float value, it can be an address or variable. | ||
1332 | |||
1333 | **Example** | ||
1334 | |||
1335 | {{code language="lua"}} | ||
1336 | Dim a, b as floating 'define float a, b | ||
1337 | |||
1338 | b = pi/3 'convert the value of HDW11 to float and assign to 'b'. | ||
1339 | |||
1340 | a=Cos(b) 'return the cosine value of'b' and assign the result to 'a'. | ||
1341 | |||
1342 | 'to add the following sentence if need to view the return value: | ||
1343 | |||
1344 | Float2D("@W_HDW20",a) 'the float value of a written into HDW13. | ||
1345 | {{/code}} | ||
1346 | |||
1347 | **Result: **@W_HDW20=0.5 | ||
1348 | |||
1349 | (% class="box infomessage" %) | ||
1350 | ((( | ||
1351 | **✎Note:** Please call **RadToDeg** function convert radian to angle. | ||
1352 | ))) | ||
1353 | |||
1354 | == **D2F** == | ||
1355 | |||
1356 | **Function** | ||
1357 | |||
1358 | D2F (A1, A2) or A1= D2F (A1, A2) | ||
1359 | |||
1360 | **Description** | ||
1361 | |||
1362 | Convert the 32-bit integer format data to float then output the result. | ||
1363 | |||
1364 | **Parameters** | ||
1365 | |||
1366 | * **A1: **required data, begin with"@"; | ||
1367 | * **A2: **source data, begin with"@"; | ||
1368 | |||
1369 | **Example** | ||
1370 | |||
1371 | {{code language="lua"}} | ||
1372 | D2F(@W_HDW2,@W_HDW0) 'convert the double word (HDW0) to float, save the result to (HDW2). | ||
1373 | |||
1374 | @W_HDW2=D2F(@W_HDW2,@W_HDW0) 'convert the double word (HDW0) to float, save the result to (HDW2). | ||
1375 | {{/code}} | ||
1376 | |||
1377 | **Result: **HDW0=100, HDW2=100 | ||
1378 | |||
1379 | == **D2Float** == | ||
1380 | |||
1381 | **Function** | ||
1382 | |||
1383 | F= D2Float("A1",F) | ||
1384 | |||
1385 | **Description** | ||
1386 | |||
1387 | Convert the designated value to floating then assign to variable. | ||
1388 | |||
1389 | **Parameters** | ||
1390 | |||
1391 | * **A1:** Source data; | ||
1392 | * **F:** User-defined floating variable | ||
1393 | |||
1394 | **Example** | ||
1395 | |||
1396 | {{code language="lua"}} | ||
1397 | dim F as floating 'define F as floating | ||
1398 | |||
1399 | F=D2Float("@W_HDW10",F) 'assign the value of (HDW10) to F in floating | ||
1400 | |||
1401 | Float2D("@W_HDW12",F) 'copy the floating value of F to HDW12 register,use to display result. | ||
1402 | {{/code}} | ||
1403 | |||
1404 | **Result: ** | ||
1405 | |||
1406 | * HDW10=200, | ||
1407 | * HDW12=200. | ||
1408 | |||
1409 | (% class="box infomessage" %) | ||
1410 | ((( | ||
1411 | **✎Note:** A1 needs to be address; | ||
1412 | ))) | ||
1413 | |||
1414 | == **D2Int** == | ||
1415 | |||
1416 | **Function** | ||
1417 | |||
1418 | A2= D2Float("A1",A2) | ||
1419 | |||
1420 | **Description** | ||
1421 | |||
1422 | Output the 32-bit integer in the form of integer. | ||
1423 | |||
1424 | **Parameters** | ||
1425 | |||
1426 | * **A1:** Source data can only be the HMI internal or external register starting with "@". | ||
1427 | * **A2: **Target data can only use theinteger variable defined by script. | ||
1428 | |||
1429 | **Example** | ||
1430 | |||
1431 | {{code language="basic"}} | ||
1432 | dim var1 as integer 'define var1 as integer | ||
1433 | |||
1434 | var1=D2Int("@W_HDW0",var1) 'Read out the 32-bit integer in HDW0 and save the result in var1. | ||
1435 | |||
1436 | HDW0=9999999 | ||
1437 | {{/code}} | ||
1438 | |||
1439 | **Result:** Var1=9999999 | ||
1440 | |||
1441 | == **DataLogToUorSD** == | ||
1442 | |||
1443 | **Function** | ||
1444 | |||
1445 | DataLogToUorSD (A1, A2, A3, A4, A5, A6, A7, A8) | ||
1446 | |||
1447 | **Description** | ||
1448 | |||
1449 | Exported Data record (database file) as db or csv format file, and register HSW1853 can change the exported file type. | ||
1450 | |||
1451 | (HSW1853 = 0: exported as db format, filename format: Start time-end time-group name.db) | ||
1452 | |||
1453 | (HSW1853 = 1: exported as csv format, filename format: Start time-end time-group name.csv) | ||
1454 | |||
1455 | **Parameters** | ||
1456 | |||
1457 | * A1: Data record group name address (string, must be address). For example: " @W_HDW30 " | ||
1458 | * A2: Start time address (string, must be address). For example: " @W_HDW40 " | ||
1459 | * A3: End time address (string, must be address). For example: " @W_HDW50 " | ||
1460 | * A4: db file save location (integer value) | ||
1461 | ** = 1: Saved on SD card | ||
1462 | ** = 2: Save in USB flash drive | ||
1463 | * A5: Return value(string, must be address). For example: " @W_HDW60 ", return result of the script will be written to HDW60; Meaning of value in address: | ||
1464 | ** = 1: Script executed successfully | ||
1465 | ** = 100: U disk or SD card unplugged | ||
1466 | ** = 101: U disk or SD card does not exist | ||
1467 | ** = 102: Script executed failed | ||
1468 | ** = 201: db export failed | ||
1469 | ** = 203: Script is being executed (previous executed script doesn't exit) | ||
1470 | * A6: Script running mode (integer value) | ||
1471 | ** = 1: Wait for script execution before exit | ||
1472 | ** = Others: Exit without waiting for the result of script execution (when the data record volume is large, it takes some time to execute the script, and when wait for the result of script execution, it may affect the execution of other scripts) | ||
1473 | * A7: Path name address (string, must be address). For example: " @W_HDW70 ", script will automatically prefix the folder name HMI_, for example: @W_HDW70 = "Log", the db file will be saved under the directory of HMI_Log in U disk or SD. | ||
1474 | * A8: Reserved address (string, must be address). For example:" @W_HDW80 ". This address is temporarily useless but needs to be set. | ||
1475 | |||
1476 | **Example** | ||
1477 | |||
1478 | {{code language="basic"}} | ||
1479 | @W_HDW30 = "Record test" 'Data record group name | ||
1480 | @W_HDW40 = 2021 | ||
1481 | @W_HDW41 = 04 | ||
1482 | @W_HDW42 = 30 | ||
1483 | @W_HDW43 = 09 | ||
1484 | @W_HDW44 = 0 | ||
1485 | @W_HDW45 = 0 | ||
1486 | 'Start time 2021-04-30 09:00:00 | ||
1487 | @W_HDW50 = 2021 | ||
1488 | @W_HDW51 = 04 | ||
1489 | @W_HDW52 = 30 | ||
1490 | @W_HDW53 = 20 | ||
1491 | @W_HDW54 = 0 | ||
1492 | @W_HDW55 = 0 | ||
1493 | 'End time 2021-04-30 20:00:00 | ||
1494 | @W_HDW70 = "Log" 'Directory name | ||
1495 | |||
1496 | DataLogToUorSD ("@ W_HDW30", "@ W_HDW40", "@ W_HDW50", 2, "@ W_HDW60", 1, "@ W_HDW70", "@ W_HDW80") | ||
1497 | |||
1498 | 'Export the data records collected from 2021-04-30 09:00:00 to 2021-04-30 20:00:00 under the group name of the record test to the HMI_Log directory of the U disk with the file name being 20210430090000-20210430200000-record tests. db. (HSW1853 is 0). | ||
1499 | {{/code}} | ||
1500 | |||
1501 | == **DbToCSVFile** == | ||
1502 | |||
1503 | **Function** | ||
1504 | |||
1505 | A8=DbToCSVFile(A1,A2,A3,A4,A5,A6,A7) | ||
1506 | |||
1507 | **Description** | ||
1508 | |||
1509 | Convert db (database file) file to csv format and export it. | ||
1510 | |||
1511 | **Parameters** | ||
1512 | |||
1513 | * **A1: **db file save path (value is integer); | ||
1514 | ** =0: Alarm record file in HMI flash; | ||
1515 | ** =1: Alarm record file in UDisk (USB flash disk); | ||
1516 | ** =2: Alarm record file in SD card; | ||
1517 | ** =3: Data record file in HMI flash; | ||
1518 | ** =4: Data record file in UDisk (USB flash disk); | ||
1519 | ** =5: Data record file in SD card; | ||
1520 | * **A2: **group numer of db file (value is integer); | ||
1521 | ** Used during exporting data record file, the group number could be seen in the data record setting interface; | ||
1522 | * **A3:** csv file save path (value is integer); | ||
1523 | ** =0: Save in UDisk (USB flash disk); | ||
1524 | ** =1: Save in SD card; | ||
1525 | * **A4: **csv name; | ||
1526 | * **A5: **start time of data recordin db file(string), consecutive 6 word addresses (the values in the address are year, month, day, hour, minute, second); | ||
1527 | * **A6:** end time of data recordin db file(string), consecutive 6 word addresses (the values in the address are year, month, day, hour, minute, second); | ||
1528 | * **A7:** csv encoding format; | ||
1529 | ** =0 UTF8 format; | ||
1530 | ** =1 GBK format; | ||
1531 | * **A8:** returned value; | ||
1532 | ** =0: Failed to export; | ||
1533 | ** =1: Exported; | ||
1534 | ** =2: db file path error; | ||
1535 | ** =3: U disk or SD card does not exist; | ||
1536 | ** =4: csv name error; | ||
1537 | ** =5: db file does not exist; | ||
1538 | ** =6: csv file already exists; | ||
1539 | |||
1540 | **Example** | ||
1541 | |||
1542 | * @W_HDW100 = 2018 | ||
1543 | * @W_HDW101 = 12 | ||
1544 | * @W_HDW102 = 25 | ||
1545 | * @W_HDW103 = 19 | ||
1546 | * @W_HDW104 = 10 | ||
1547 | * @W_HDW105 = 30 | ||
1548 | * @W_HDW200 = 2018 | ||
1549 | * @W_HDW201 = 12 | ||
1550 | * @W_HDW202 = 25 | ||
1551 | * @W_HDW203 = 20 | ||
1552 | * @W_HDW204 = 10 | ||
1553 | * @W_HDW205 = 30 | ||
1554 | |||
1555 | **Export data record file** | ||
1556 | |||
1557 | {{code language="basic"}} | ||
1558 | DbToCsvFile(3,2,0,"123.csv","@W_HDW100","@W_HDW200",0) | ||
1559 | 'In the HMI flash, the group number is 2, and the data records collected in the time of 2010.12.25 19:10:30-2018.12.25 20:10:30 | ||
1560 | 'are exported to the 123.csv file in the Udisk in UTF8 format. | ||
1561 | {{/code}} | ||
1562 | |||
1563 | **Export alarm record file** | ||
1564 | |||
1565 | {{code language="basic"}} | ||
1566 | DbToCsvFile(0,0,0,"456.csv","@W_HDW100","@W_HDW200",1) | ||
1567 | 'The alarm records generated in HMI Flash at 2018.12.25 19:10:30-2018.12.25 20:10:30 | ||
1568 | 'are exported to the 456.csv file in the Udisk in GBK format | ||
1569 | {{/code}} | ||
1570 | |||
1571 | (% class="box infomessage" %) | ||
1572 | ((( | ||
1573 | **✎Note:** | ||
1574 | |||
1575 | * A1 can be an address or a variable or a value, and the path need to start with UDisk or Flash or SDCard; | ||
1576 | * A2 can be an address or a variable or a value; | ||
1577 | * A3 can be an address or a variable or a value, and the path need to start with UDisk or Flash or SDCard; | ||
1578 | * A4 can be an address or variables or string, and the length of the file name (sum of values, English, Chinese) could not exceed 127; | ||
1579 | * A5 need to be an address; | ||
1580 | * A6 need to be an address; | ||
1581 | * A7 can be an address or a variable or a value; | ||
1582 | ))) | ||
1583 | |||
1584 | == **DegToRad** == | ||
1585 | |||
1586 | **Function** | ||
1587 | |||
1588 | A2 = DegToRad(A1) | ||
1589 | |||
1590 | **Description** | ||
1591 | |||
1592 | Convert the angle into correspond radian, and display. | ||
1593 | |||
1594 | **Parameters** | ||
1595 | |||
1596 | * **A1:** inputting angle supports address, other variable or floating. | ||
1597 | * **A2: **outputting radian supports address, other variable or floating. | ||
1598 | |||
1599 | **Example** | ||
1600 | |||
1601 | Script 1 | ||
1602 | |||
1603 | //{{code language="lua"}}@W_HDW12=DegToRad(@W_HDW10) 'input angle on (HDW10),convert to correspond redian and copy to (HDW12){{/code}}// | ||
1604 | |||
1605 | **Result: **HDW10=180; HDW12=3.14159 | ||
1606 | |||
1607 | Script 2 | ||
1608 | |||
1609 | {{code language="lua"}} | ||
1610 | dim a as floating 'set variable | ||
1611 | |||
1612 | dim b as floating 'set variable | ||
1613 | |||
1614 | b=30 'input angle | ||
1615 | |||
1616 | a=DegToRad(b) 'convert the length of radian and copy to variable {a} | ||
1617 | |||
1618 | float2d("@W_HDW0", a) 'display the value of floating on(HDW0) | ||
1619 | {{/code}} | ||
1620 | |||
1621 | **Result:** HDW0=0.52360 | ||
1622 | |||
1623 | == **DIM ... AS ...** == | ||
1624 | |||
1625 | **Function** | ||
1626 | |||
1627 | Dim "variable" as "date type" | ||
1628 | |||
1629 | **Description** | ||
1630 | |||
1631 | Declare a variable, stable the type of data. | ||
1632 | |||
1633 | **Parameters** | ||
1634 | |||
1635 | * **Variable: **begin with letter, other character can be letter, numbers, underscores ('_'), need to begin with '@' if it is address; | ||
1636 | * **Data type: **string,floating,integer; | ||
1637 | |||
1638 | **Example** | ||
1639 | |||
1640 | {{code language="lua"}} | ||
1641 | dim a as integer 'define a as integer | ||
1642 | |||
1643 | dim @W_HDW0 as floating 'define @W_HDW0 as floating | ||
1644 | |||
1645 | dim hi as string 'define "hi" as string | ||
1646 | {{/code}} | ||
1647 | |||
1648 | **Result:** | ||
1649 | |||
1650 | a is integer | ||
1651 | |||
1652 | @W_HDW0 is floating | ||
1653 | |||
1654 | hi is string | ||
1655 | |||
1656 | (% class="box infomessage" %) | ||
1657 | ((( | ||
1658 | **✎Note:** Use the variable of Dim during running, could not change the type, Dim will be missed if the type of variable is no difined. Variable could be declared in once. | ||
1659 | ))) | ||
1660 | |||
1661 | == **DO ... LOOP** == | ||
1662 | |||
1663 | **Function** | ||
1664 | |||
1665 | Do [While | Until condition] | ||
1666 | |||
1667 | [statements] | ||
1668 | |||
1669 | Loop | ||
1670 | |||
1671 | or | ||
1672 | |||
1673 | Do | ||
1674 | |||
1675 | [statements] | ||
1676 | |||
1677 | Loop [While | Until condition] | ||
1678 | |||
1679 | **Description** | ||
1680 | |||
1681 | Condition determent instruction. | ||
1682 | |||
1683 | * Do while.loop executes an instruction of block repeatedly when condition is true. | ||
1684 | * Do until.loop executes an instruction of block repeatedly until condition is false. | ||
1685 | |||
1686 | **Parameters** | ||
1687 | |||
1688 | **Condition: **determine condition; obtain the expression of True or False. | ||
1689 | |||
1690 | **Statements: **execute one or more instructions repeatedly when condition is True or until condition is True. | ||
1691 | |||
1692 | If condition is true, all statements are executed until the Wend statement is encountered. Control then returns to the While statement and condition is again checked. If condition is still True, the process is repeated. If it is not true, execution resumes with the statement following the Wend statement. | ||
1693 | |||
1694 | **Example** | ||
1695 | |||
1696 | {{code language="lua"}} | ||
1697 | dim i as integer 'end DO loop when i=100 | ||
1698 | |||
1699 | do while i<100 | ||
1700 | |||
1701 | i=i+1 | ||
1702 | |||
1703 | @W_HDW0=i | ||
1704 | |||
1705 | loop | ||
1706 | {{/code}} | ||
1707 | |||
1708 | **Result: **HDW0=100 | ||
1709 | |||
1710 | == **End** == | ||
1711 | |||
1712 | **Function** | ||
1713 | |||
1714 | Terminates the script immediately. | ||
1715 | |||
1716 | **Description** | ||
1717 | |||
1718 | End the execution of script. | ||
1719 | |||
1720 | **Parameters** | ||
1721 | |||
1722 | **Statement:** Judging condition, use with IF together. end script when meet condition. | ||
1723 | |||
1724 | **Example** | ||
1725 | |||
1726 | //{{code language="lua"}}If a = 10 Then End 'end script when a=10.{{/code}}// | ||
1727 | |||
1728 | **Result:** End the script program. | ||
1729 | |||
1730 | == **Exp** == | ||
1731 | |||
1732 | **Function** | ||
1733 | |||
1734 | A1=Exp(A2) | ||
1735 | |||
1736 | **Description** | ||
1737 | |||
1738 | Returns the power value of e (natural logarithm), save the outputting result to A1, e=2.71828182846. | ||
1739 | |||
1740 | **Parameters** | ||
1741 | |||
1742 | * **A1: **the goal date: the power floating value of returning, need to begin with '@'([[(% class="wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink" %)__e.g.@W_HDW10__>>path:mailto:'@'(e.g.@W_HDW10]](%%)); | ||
1743 | * **A2: **Source data, natural exponential function, need to be integer or variable. Could not not begin with the address of "@"(e.g.@W_HDW10) | ||
1744 | |||
1745 | **Example** | ||
1746 | |||
1747 | {{code language="lua"}} | ||
1748 | dim a as integer'define a as integer | ||
1749 | |||
1750 | a = @W_HDW2 ' assign the value of (HDW2) to variable a | ||
1751 | |||
1752 | @W_HDW0= Exp(a)'exponential is the value of (HDW2),save result to(HDW0) | ||
1753 | {{/code}} | ||
1754 | |||
1755 | **Result:** | ||
1756 | |||
1757 | * HDW2=2, | ||
1758 | * HDW0=7.38905600 | ||
1759 | |||
1760 | == **F2D** == | ||
1761 | |||
1762 | **Function** | ||
1763 | |||
1764 | F2D (A1, A2) | ||
1765 | |||
1766 | **Description** | ||
1767 | |||
1768 | Convert a 32 bit floating to integer format, then output the result. | ||
1769 | |||
1770 | **Parameters** | ||
1771 | |||
1772 | * **A1: **Destination, the value can be an address(e.g.@W_HDW12). | ||
1773 | * **A2: **source date, it can be an address or other variable. | ||
1774 | |||
1775 | **Example** | ||
1776 | |||
1777 | //{{code language="lua"}}F2D(@W_HDW12,@W_HDW10) 'convert the floating of (HDW10) to integer, save in (HDW12).{{/code}}// | ||
1778 | |||
1779 | **Result:** | ||
1780 | |||
1781 | * HDW10=200, | ||
1782 | * HDW12=200 | ||
1783 | |||
1784 | == **F2S** == | ||
1785 | |||
1786 | **Function** | ||
1787 | |||
1788 | F2S (A1,A2,s1) | ||
1789 | |||
1790 | **Description** | ||
1791 | |||
1792 | Output a format of floating that in the type of string. | ||
1793 | |||
1794 | **Parameters** | ||
1795 | |||
1796 | * **A1:** Source address, used to store floating, the value is an address(e.g.@W_HDW200); | ||
1797 | * **A2:** Destination address, used to store string after converted, value is an address(e.g.@W_HDW100). | ||
1798 | * **S1:** the format of displaying goal data. such as the format of 03.03f,f, used for outputting a single-precision in the form of decimal.m.nf:means m column and n decimals when outputting. | ||
1799 | |||
1800 | **Example** | ||
1801 | |||
1802 | //{{code language="lua"}}F2S("@W_HDW200", "@W_HDW100", "03.03f") '(HDW200) is floating input,(HDW100) is text output;{{/code}}// | ||
1803 | |||
1804 | **Result: ** | ||
1805 | |||
1806 | * HDW200=1.22365, | ||
1807 | * HDW100=1.224 | ||
1808 | |||
1809 | == **FileCmpDir** == | ||
1810 | |||
1811 | **Function** | ||
1812 | |||
1813 | FileCmpDir(A1, A2, A3, A4, A5, A6, A7, A8, A9) | ||
1814 | |||
1815 | **Description** | ||
1816 | |||
1817 | The filename input and the filename in the folder whether is duplicate or not. | ||
1818 | |||
1819 | **Parameters** | ||
1820 | |||
1821 | A1: file path (value is integer); | ||
1822 | |||
1823 | In HMI: | ||
1824 | |||
1825 | * =0: Recipe folder in HMI flash; | ||
1826 | * =1: Custom folder in UDisk (USB flash disk); | ||
1827 | * =2: Custom folder in SD card. | ||
1828 | * =3: Custom folder in HMI flash; | ||
1829 | |||
1830 | In simulator: | ||
1831 | |||
1832 | * = 0: D:/Recipe/ | ||
1833 | * = 1: C:/WECON/CustomFileDir/ | ||
1834 | * = 2: C:/WECON/CustomFileDir/ | ||
1835 | * = 3: C:/WECON/CustomFileDir/ | ||
1836 | |||
1837 | **✎Note:** | ||
1838 | |||
1839 | A1 can be an address,variable or fixed value. | ||
1840 | |||
1841 | A2: file name (value is string); | ||
1842 | |||
1843 | The file name would be compared; | ||
1844 | |||
1845 | **✎Note: ** | ||
1846 | |||
1847 | A2 can be an address, variable or string. The length of file name cannot exceed 32 characters. | ||
1848 | |||
1849 | A3: folder name (value is integer); | ||
1850 | |||
1851 | The folder name would be compared; | ||
1852 | |||
1853 | **✎Note: ** | ||
1854 | |||
1855 | A3 can be an address, variable or string. The length of file name cannot exceed 32 characters. | ||
1856 | |||
1857 | A4:file name display address (value is a string); | ||
1858 | |||
1859 | Display the specified number of file names in the specified folder. | ||
1860 | |||
1861 | **✎Note:** | ||
1862 | |||
1863 | A4 Can only use address here. And the length of the file name cannot exceed 32 characters. | ||
1864 | |||
1865 | A5: Function type (value is an integer) | ||
1866 | |||
1867 | ~= 0: compare whether the file name in the folder and the file name input are duplicated or not. | ||
1868 | |||
1869 | ~= 1: return list of file names. | ||
1870 | |||
1871 | ~= 100: compare file names, without input suffix .csv | ||
1872 | |||
1873 | **✎Note: ** | ||
1874 | |||
1875 | A5 can be an address, variable or value. | ||
1876 | |||
1877 | A6: Return value (value is an integer) | ||
1878 | |||
1879 | ~= 1: Successfully opened the folder. | ||
1880 | |||
1881 | ~= 2: Failed to open the folder. | ||
1882 | |||
1883 | ~= 3: The file has duplicate names | ||
1884 | |||
1885 | **✎Note:** | ||
1886 | |||
1887 | A6 must be an address. | ||
1888 | |||
1889 | A7: File number (value is an integer) | ||
1890 | |||
1891 | Display the number of files in the folder (up to 100) | ||
1892 | |||
1893 | **✎Note: ** | ||
1894 | |||
1895 | A7 must be an address. | ||
1896 | |||
1897 | A8: File creation time (value is a string); | ||
1898 | |||
1899 | Display the time of file creation, time occupies 32 characters | ||
1900 | |||
1901 | A9: The maximum number of files to read (value is an integer) | ||
1902 | |||
1903 | Set the maximum number of files to read (up to 100 files) | ||
1904 | |||
1905 | **✎Note:** A9 can be an address, variable or value. | ||
1906 | |||
1907 | **Example** | ||
1908 | |||
1909 | Read the specified number of files in the folder. | ||
1910 | |||
1911 | (% class="box" %) | ||
1912 | ((( | ||
1913 | FileCmpDir(@W_HDW1254, @W_HDW50, "File", "", 0, "@W_HDW0", "", "", 10)'Determine whether there is a file with the same name as @W_HDW50 in the file directory of HDW1254.@W_HDW0=3 is Yes.@W_HDW0 = 1 is No.@W_HDW0=2 is comparison failed. | ||
1914 | ))) | ||
1915 | |||
1916 | Compare filename input and the filename in the folder whether is duplicate or not. | ||
1917 | |||
1918 | (% class="box" %) | ||
1919 | ((( | ||
1920 | FileCmpDir(@W_HDW1254, "", "File", "@W_HDW200", 1, "@W_HDW0", "@W_HDW300", "@W_HDW400", 10)’The file name under the directory File in the flash is written to the continuous address begin from @W_HDW200, the file creation time is written to the continuous address begin from @W_HDW400, the number of files is written to the address @W_HDW300, the maximum number of files is 10 | ||
1921 | ))) | ||
1922 | |||
1923 | Compare the csv file name in the folder and the csv file name input whether is duplicated or not. | ||
1924 | |||
1925 | (% class="box" %) | ||
1926 | ((( | ||
1927 | FileCmpDir(@W_HDW1254, @W_HDW50, "File", "", 100, "@W_HDW0", "", "", 10)' Judge whether there is a file in the directory File in the flash is same with following: @W_HDW50, @W_HDW50.csv, @ W_HDW50.CSV , @W_HDW0=3 is Yes, @W_HDW0 = 1 is No ,@W_HDW0=2 is comparison failed | ||
1928 | ))) | ||
1929 | |||
1930 | == **FILL** == | ||
1931 | |||
1932 | **Function** | ||
1933 | |||
1934 | FILL (A1, A2, A3) | ||
1935 | |||
1936 | **Description** | ||
1937 | |||
1938 | Write the same value to designated address constantly. | ||
1939 | |||
1940 | **Parameters** | ||
1941 | |||
1942 | **A1:** The beginning address, it can be an address (e.g.@ W_ HDW25); | ||
1943 | |||
1944 | **A2:** Source data, it needs to be written in continuous value, the value can be an address, variable or constant; | ||
1945 | |||
1946 | **A3:** The number of operation, writing address number, it can be an address, variable or constant; | ||
1947 | |||
1948 | When the PLC (external device) address is used in this function, the length range is 1-2048, and only the 2048th address can be operated when the range is exceeded. | ||
1949 | |||
1950 | When the HMI internal address is used in this function, the length range is 1-4096. If the function is out of range, then the function is invalid. | ||
1951 | |||
1952 | **Example** | ||
1953 | |||
1954 | //FILL (@W_HDW25, 10, 3) 'At the beginning three address of @W_ HDW25 is 10.// | ||
1955 | |||
1956 | **Result: **At the beginning three address of @W_ HDW25 is 10, @W_ HDW25=10, @W_ HDW26=10, @W_ HDW27=10. | ||
1957 | |||
1958 | == **Float2D** == | ||
1959 | |||
1960 | **Function** | ||
1961 | |||
1962 | Float2D (A1,A2); | ||
1963 | |||
1964 | **Description** | ||
1965 | |||
1966 | Copy floating value to the address. | ||
1967 | |||
1968 | **Parameters** | ||
1969 | |||
1970 | * **A1: **Goal address, the value need to be address (e.g.@W_HDW102); | ||
1971 | * **A2:** Source data, it can be floating; | ||
1972 | |||
1973 | **Example** | ||
1974 | |||
1975 | {{code language="lua"}} | ||
1976 | dim f as floating 'define f as floating | ||
1977 | |||
1978 | f=1.1 'assign a designated value to f | ||
1979 | |||
1980 | Float2D ("@W_HDW102",f) 'assign the value f to HDW102 | ||
1981 | {{/code}} | ||
1982 | |||
1983 | **Result:** HDW102=1.1 | ||
1984 | |||
1985 | == **For. to. step. next** == | ||
1986 | |||
1987 | **Function** | ||
1988 | |||
1989 | For counter = start to end Step | ||
1990 | |||
1991 | [Statements] | ||
1992 | |||
1993 | Next | ||
1994 | |||
1995 | **Description** | ||
1996 | |||
1997 | Execute a command repeatedly for designated times. | ||
1998 | |||
1999 | **Parameters** | ||
2000 | |||
2001 | * **counter: **Work as a variable for loop counter; | ||
2002 | * **start: **The start value of counter, it could be any variable type or expression; | ||
2003 | * **end: **The end value of counter, it could be any variable type or expression; | ||
2004 | * **step: **Every loop, the changed value of counter is step value, step default if it is not designation. Step default as below: | ||
2005 | ** if start>end, step default is 1; | ||
2006 | ** if start< end. It could be any variable type or expression; | ||
2007 | * **statements: **Between For with Next, execute instruction set of designated times; | ||
2008 | ** Set a loop of for...Next in another loop, it can nest call the loop of for...Next. Different from a while, for only search once value from end. Empty for loop will be ignored, and could not delay time. | ||
2009 | |||
2010 | **Example** | ||
2011 | |||
2012 | {{code language="lua"}} | ||
2013 | 'Use HDX2.0 to trigger the loop | ||
2014 | |||
2015 | for i=100 to 0 step -5 ' set the start is 100,end is 0,subtract 5 every time, execute 20 times totally. | ||
2016 | |||
2017 | @W_HDW100=@W_HDW100+1 ' execute (HDW100+1) 21 times totally, the final result is 21. | ||
2018 | |||
2019 | Next | ||
2020 | |||
2021 | @B_HDX2.0=0 | ||
2022 | {{/code}} | ||
2023 | |||
2024 | **Result: **HDW100=21 | ||
2025 | |||
2026 | == **Function** == | ||
2027 | |||
2028 | **Function** | ||
2029 | |||
2030 | * Function name (arglist) | ||
2031 | * statements | ||
2032 | * name = expression | ||
2033 | * statements | ||
2034 | * End Function | ||
2035 | |||
2036 | **Description** | ||
2037 | |||
2038 | Unlike internal function, it needs to declare the name, parameter, code of the function. | ||
2039 | |||
2040 | **Parameters** | ||
2041 | |||
2042 | * **Name: **function name. | ||
2043 | * **arglist: **stands for the variable list of parameter, this parameter will be entered during calling function. use comma to separate. | ||
2044 | * **statements: **a set of code in running function body. | ||
2045 | |||
2046 | **Notice: **it could not define a function program at any other program body. Write name first and then follow with parameter list, when calling function. Declare function need to before be calling. in the internal function body, it could be assigned to a function name from returned value at any place. Return value is 0 if not assign function name. Functions can recursive, but it may lead to stack overflow. | ||
2047 | |||
2048 | **Example** | ||
2049 | |||
2050 | {{code language="lua"}} | ||
2051 | Function sincos (angle as floating) | ||
2052 | |||
2053 | sincos = sin(angle) + cos(angle) | ||
2054 | |||
2055 | End Function< | ||
2056 | |||
2057 | ........ | ||
2058 | |||
2059 | @W_0002 = sincos(pi/2) | ||
2060 | |||
2061 | ........ | ||
2062 | {{/code}} | ||
2063 | |||
2064 | == **GetServerDelayInfo** == | ||
2065 | |||
2066 | **Function** | ||
2067 | |||
2068 | A3=GetSerVerDelayInfo(A1,A2) | ||
2069 | |||
2070 | **Description** | ||
2071 | |||
2072 | Convert string A1 to hexadecimal number. | ||
2073 | |||
2074 | **Parameters** | ||
2075 | |||
2076 | **A1:** The starting address, save the delay data of each server (10 consecutive addresses, the last 7 addresses are reserved), when the server testing fails, the value in the corresponding address is -1. The unit is ms (signed decimal number). | ||
2077 | |||
2078 | (% class="table-bordered" %) | ||
2079 | |=**Address**|=**Description** | ||
2080 | |A1|Delay data of the server configured in [Project Settings] | ||
2081 | |A1+1|Delay data of Server 1 | ||
2082 | |A1+2|Delay data of Server 2 | ||
2083 | |||
2084 | **A2: **Server test result address | ||
2085 | |||
2086 | (% class="table-bordered" %) | ||
2087 | |=(% style="width: 239px;" %)**Address**|=(% style="width: 1250px;" %)**Description** | ||
2088 | |(% style="width:239px" %)0 bit|(% style="width:1250px" %)Set ON, Server configured in [Project Settings] fails | ||
2089 | |(% style="width:239px" %)1^^st^^bit|(% style="width:1250px" %)Set ON, Server 1 fails | ||
2090 | |(% style="width:239px" %)2^^nd^^bit|(% style="width:1250px" %)Set ON, Server 2 fails | ||
2091 | |(% style="width:239px" %)3^^rd^^~~ 10^^th^^bits|(% style="width:1250px" %)Reserved | ||
2092 | |(% style="width:239px" %)11^^th^^bit|(% style="width:1250px" %)Set ON, network error, network port interface failure | ||
2093 | |||
2094 | **A3:**Returns the preferred server number or network status (automatically selects the server with the best connection network status). | ||
2095 | |||
2096 | * =0: Server configured in [Project Settings]; | ||
2097 | * =1: Server 1; | ||
2098 | * =2: Server 2; | ||
2099 | * =3~~10: Reserved; | ||
2100 | * =100: Try again later (two test intervals need to wait 30 seconds); | ||
2101 | * =101: Failed to test Server; | ||
2102 | |||
2103 | **Example** | ||
2104 | |||
2105 | //{{code language="lua"}}@W_HDW200 = GetServerDelayInfo("@W_HDW100", "@W_HDW50"){{/code}}// | ||
2106 | |||
2107 | Result: | ||
2108 | |||
2109 | * HDW100: Delay data of the server configured in [Project Settings] | ||
2110 | * HDW101: Delay data of Server 1 | ||
2111 | * HDW102: Delay data of Server 2 | ||
2112 | * HDX50.0=1:Server configured in [Project Settings] fails | ||
2113 | * HDX50.1=1: Server 1 fails | ||
2114 | * HDX50.2=1:Server 2 fails; | ||
2115 | * HDX50.11= 1: network error, network port interface failure; | ||
2116 | |||
2117 | When the server signal is stable, the optimal server is automatically connected according to the network status @W_HDW200. When the server connection is abnormal, @W_HDW200=101, the server test fails or the test is abnormal. | ||
2118 | |||
2119 | (% class="box infomessage" %) | ||
2120 | ((( | ||
2121 | **✎Note:** The time interval between executions of this function could not be less than 30 seconds, otherwise an error will occur. | ||
2122 | ))) | ||
2123 | |||
2124 | == **Goto** == | ||
2125 | |||
2126 | **Function** | ||
2127 | |||
2128 | Goto label | ||
2129 | |||
2130 | **Description** | ||
2131 | |||
2132 | Go to the designated row without any condition in a function body. | ||
2133 | |||
2134 | **Parameters** | ||
2135 | |||
2136 | * **Label:** target character, start with letter in row label, end with(:)of any string.row label has no sensitive to the format of letter. | ||
2137 | |||
2138 | **Example** | ||
2139 | |||
2140 | //Goto sd 'go to the row which start with "sd";// | ||
2141 | |||
2142 | **Result:** Go to sd row. | ||
2143 | |||
2144 | (% class="box infomessage" %) | ||
2145 | ((( | ||
2146 | **✎Note:** Goto only can jump into the internal function that visible row. | ||
2147 | ))) | ||
2148 | |||
2149 | == **H2A** == | ||
2150 | |||
2151 | **Function** | ||
2152 | |||
2153 | A1 = H2A (A2) | ||
2154 | |||
2155 | **Description** | ||
2156 | |||
2157 | Convert a binary (16-bit) to hexadecimals (4-bit) of ASCII. | ||
2158 | |||
2159 | **Parameters** | ||
2160 | |||
2161 | * **A1: **Returned value, string, it could be an address or variable. | ||
2162 | * **A2: **Binary is needed to be converted, the value could be a address or variable. | ||
2163 | |||
2164 | **Example** | ||
2165 | |||
2166 | //{{code language="lua"}}@W_HDW100= H2A (@W_HDW0) ' convert the binary of (HDW0) to character and save in (HDW100).{{/code}}// | ||
2167 | |||
2168 | **Result:** | ||
2169 | |||
2170 | * HDW0=200, | ||
2171 | * HDW100=00C8 (Character Input/Display Object) | ||
2172 | |||
2173 | == **HmiRegoperator** == | ||
2174 | |||
2175 | **Function** | ||
2176 | |||
2177 | HmiRegoperator (A1,A2,A3,A4,A5,A6) | ||
2178 | |||
2179 | **Description** | ||
2180 | |||
2181 | Data of Upload/ Download address | ||
2182 | |||
2183 | **Parameters** | ||
2184 | |||
2185 | * **A1: **The start address of target | ||
2186 | * **A2: **Length, address length, unit: word, range: 1~~1000 | ||
2187 | * **A3: s**torage | ||
2188 | ** A3=0, select USB flash disk as storage, and save files in Root directory; | ||
2189 | ** A3=1, select SD card as storage, and save files in Root directory; | ||
2190 | * **A4: **File name address, itneed to be address such as"@ W_HDW2" | ||
2191 | * **A5**: Upload / download data | ||
2192 | ** A5=0, save the data in the specified address as a file and store the file in the root directory; | ||
2193 | ** A5=1, Read data from file and it woule be written into specified address; | ||
2194 | * **A6:** State display, it needs to be address, such as "@ W_HDW2"; | ||
2195 | ** A6=1, Normal | ||
2196 | ** A6=2, USB flash disk/ SD card does not exist | ||
2197 | ** A6=3, File doesn’t exist; | ||
2198 | ** A6=4, File name error; | ||
2199 | ** A6=5, Check error | ||
2200 | ** A6=6, Abnormal communication; | ||
2201 | ** A6=7, HUW register is not allowed; | ||
2202 | ** A6=8, Address length range error (address length range: 1-1000); | ||
2203 | |||
2204 | **Example** | ||
2205 | |||
2206 | Script 1 | ||
2207 | |||
2208 | (% class="box" %) | ||
2209 | ((( | ||
2210 | //HmiRegoperator("@W_HDW0",10,0,"@W_HDW2000",0,"@W_HDW3000")’The data in HDW0-HDW10 is saved as a file, the file name is set by HDW2000 and stored in a USB flash disk.// | ||
2211 | ))) | ||
2212 | |||
2213 | Script 2 | ||
2214 | |||
2215 | (% class="box" %) | ||
2216 | ((( | ||
2217 | //HmiRegoperator("@W_HDW0",10,1,"@W_HDW2000",1,"@W_HDW3000")// | ||
2218 | |||
2219 | //Read the values from files which stored in the SD card (files named by the HDW2000), and write these values to the HDW0-HDW10.// | ||
2220 | ))) | ||
2221 | |||
2222 | **✎Note:** | ||
2223 | |||
2224 | * The length of the file name is less than 32 characters, and the file name consists of numbers and letters (the file name does not meet this standard; WECON does not guarantee the accuracy of the data). | ||
2225 | * The interval of download function operation should be 5s or more. | ||
2226 | * A1 need to be address such as “@W_HDW2”. | ||
2227 | * Please use “Character Input/Display” object for it, and the file name consists of numbers and letters, could not be punctuated characters, maximum character length 32 allowed. | ||
2228 | |||
2229 | == **Hypot** == | ||
2230 | |||
2231 | **Function** | ||
2232 | |||
2233 | Var = Hypot (expr1, expr2) | ||
2234 | |||
2235 | **Description** | ||
2236 | |||
2237 | Calculate the value of the hypotenuse of a right triangle. | ||
2238 | |||
2239 | **Parameters** | ||
2240 | |||
2241 | * **expr1, expr2: **Source data, the two sides of right triangle. it need to be address; | ||
2242 | * **Var:** Destination data,it need to be address; | ||
2243 | |||
2244 | **Example** | ||
2245 | |||
2246 | (% class="box" %) | ||
2247 | ((( | ||
2248 | //@W_HDW200=Hypot (@W_HDW105,@W_HDW108) ' input the value of right-angle side at (HDW105) and (HDW108),and assign the result of the hypotenuse to (HDW200).// | ||
2249 | ))) | ||
2250 | |||
2251 | **Result: ** | ||
2252 | |||
2253 | * HDW105=3, | ||
2254 | * HDW108=4, | ||
2255 | * HDW200=5 | ||
2256 | |||
2257 | (% class="box infomessage" %) | ||
2258 | ((( | ||
2259 | **✎Note:** hypot function could support integer and floating when the format of source data and target data are the same. | ||
2260 | ))) | ||
2261 | |||
2262 | == **IF ... THEN ... ELSE ... END IF** == | ||
2263 | |||
2264 | **Function** | ||
2265 | |||
2266 | If condition Then | ||
2267 | |||
2268 | Statements | ||
2269 | |||
2270 | [Else | ||
2271 | |||
2272 | else statements] | ||
2273 | |||
2274 | End If | ||
2275 | |||
2276 | **Description** | ||
2277 | |||
2278 | Conditional judgments instruction. When the [Condition] defined by [IF] is TURN, the operation following [THEN] is performed. When [Condition] is FALSE, the operation after [ELSE] is executed. | ||
2279 | |||
2280 | **Parameters** | ||
2281 | |||
2282 | * **condition: **any expression, the value could be true or false. | ||
2283 | * **statement: **execute the instruction block when condition is true. | ||
2284 | * **else statement: **execute the instruction block when condition is false. | ||
2285 | |||
2286 | **Example** | ||
2287 | |||
2288 | {{code language="lua"}} | ||
2289 | if @W_HDW105=200 then ' judging condition: whether the value of (HDW105) is 200 | ||
2290 | |||
2291 | @W_HDW108=1 'the value of (HDW108) is 1 if fulfil condition | ||
2292 | |||
2293 | else | ||
2294 | |||
2295 | @W_HDW200=1 ' the value of (HDW200) is 1 if not fulfil condition. | ||
2296 | |||
2297 | Endif | ||
2298 | {{/code}} | ||
2299 | |||
2300 | **Result:** | ||
2301 | |||
2302 | * HDW105=199; | ||
2303 | * HDW108=0; | ||
2304 | * HDW200=1 | ||
2305 | |||
2306 | == **InStr** == | ||
2307 | |||
2308 | **Function** | ||
2309 | |||
2310 | var = InStr ("str1", "str2") | ||
2311 | |||
2312 | **Description** | ||
2313 | |||
2314 | Returned the position of str1 in str2(start with 0), set -1 if no result. | ||
2315 | |||
2316 | **Parameters** | ||
2317 | |||
2318 | * **str1:** source string, it could only be string, not address; | ||
2319 | * **str2:** target string, it could only be string, not address; | ||
2320 | * **var:** Returned value, the format of data needs to be string; | ||
2321 | |||
2322 | **Example** | ||
2323 | |||
2324 | {{code language="lua"}} | ||
2325 | dim a as floating | ||
2326 | |||
2327 | a = InStr ("Hello", "o") ' calculate the position of"o"in"hello". | ||
2328 | |||
2329 | float2d ("@W_HDW0",a) ' Returned value is 4.(start with 0) | ||
2330 | {{/code}} | ||
2331 | |||
2332 | **Result:** HDW0=4 | ||
2333 | |||
2334 | == **Int2D** == | ||
2335 | |||
2336 | **Function** | ||
2337 | |||
2338 | Int2D("A1",A2) | ||
2339 | |||
2340 | **Description** | ||
2341 | |||
2342 | Write the 32-bit integer into the target address | ||
2343 | |||
2344 | **Parameters** | ||
2345 | |||
2346 | * **A1: **Source data could only be the HMI internal or external register starting with "@". | ||
2347 | * **A2:** Target data could only use the integer variable defined by script. | ||
2348 | |||
2349 | **Example** | ||
2350 | |||
2351 | {{code language="lua"}} | ||
2352 | dim var1 as integer 'define var1 as integer | ||
2353 | |||
2354 | Int2D("@W_HDW0", var1) 'Read out the 32-bit integer in var1 and save the result in HDW0 . | ||
2355 | |||
2356 | var1=9999999, | ||
2357 | {{/code}} | ||
2358 | |||
2359 | **Result:** HDW0=9999999. | ||
2360 | |||
2361 | == **InvB** == | ||
2362 | |||
2363 | **Function** | ||
2364 | |||
2365 | InvB (A1) | ||
2366 | |||
2367 | **Description** | ||
2368 | |||
2369 | The state of inverse bit, it is a sub function, no returned value. Achieve the state of switching address constantly. | ||
2370 | |||
2371 | **Parameters** | ||
2372 | |||
2373 | * **A1:** it is an address. | ||
2374 | |||
2375 | **Example** | ||
2376 | |||
2377 | //{{code language="lua"}}InvB (@B_HDX0.1) 'switch the state of (HDX0.1).{{/code}}// | ||
2378 | |||
2379 | **Result: **Switch the state of (HDX0.1) constantly. | ||
2380 | |||
2381 | == **IsFloating** == | ||
2382 | |||
2383 | **Function** | ||
2384 | |||
2385 | A2=IsFloating (A1) | ||
2386 | |||
2387 | **Description** | ||
2388 | |||
2389 | Decide whether a parameter is floating, return true if it is floating, otherwise return FALSE. | ||
2390 | |||
2391 | **Parameter** | ||
2392 | |||
2393 | * **A1:** source data, variable; | ||
2394 | * **A2:** target data, variable; | ||
2395 | |||
2396 | **Example** | ||
2397 | |||
2398 | {{code language="lua"}} | ||
2399 | dim a as integer | ||
2400 | |||
2401 | dim b as floating | ||
2402 | |||
2403 | b= D2float ("@W_HDW200",b) 'assign the value of (HDW200) to b | ||
2404 | |||
2405 | a = IsFloating (b) 'judge whether b is floating or not | ||
2406 | |||
2407 | @W_HDW300=a 'save the result to (HDW300) | ||
2408 | {{/code}} | ||
2409 | |||
2410 | **Result: **HDW300=1 | ||
2411 | |||
2412 | == **IsInteger** == | ||
2413 | |||
2414 | **Function** | ||
2415 | |||
2416 | A2= IsInteger (A1) | ||
2417 | |||
2418 | **Description** | ||
2419 | |||
2420 | Determine whether a parameter(A1) is integer, return TRUE if the parameter is integer, otherwise return FALSE. | ||
2421 | |||
2422 | **Parameter** | ||
2423 | |||
2424 | * **A1:** Source date, it is variable or number; | ||
2425 | * **A2:** Target date, need to be variable, it could not be system address ; | ||
2426 | |||
2427 | **Example** | ||
2428 | |||
2429 | {{code language="lua"}} | ||
2430 | dim a as integer | ||
2431 | |||
2432 | a = IsInteger (20) 'determine whether 20 is integer | ||
2433 | |||
2434 | @W_HDW300=a ' display the result on (HDW300) | ||
2435 | {{/code}} | ||
2436 | |||
2437 | **Result:** HDW300=1 | ||
2438 | |||
2439 | == **IsString** == | ||
2440 | |||
2441 | **Function** | ||
2442 | |||
2443 | val = IsString(expr) | ||
2444 | |||
2445 | **Description** | ||
2446 | |||
2447 | Determine whether a parameter is string, return TRUE if it is string, otherwise return FALSE. | ||
2448 | |||
2449 | **Parameters** | ||
2450 | |||
2451 | * **Expr:** source string, it could be a variable or string, not address; | ||
2452 | * **Val:** target date, the result need to be variable, could not be address; | ||
2453 | |||
2454 | **Example** | ||
2455 | |||
2456 | {{code language="lua"}} | ||
2457 | dim a as integer 'define variable, display the result; | ||
2458 | |||
2459 | a= isstring ("hello") 'determine whether"hello"is string; | ||
2460 | |||
2461 | @W_HDW0=a 'assign the result to (HDW0) | ||
2462 | {{/code}} | ||
2463 | |||
2464 | **Result: **HDW=1 | ||
2465 | |||
2466 | == **Lcase** == | ||
2467 | |||
2468 | **Function** | ||
2469 | |||
2470 | A2 = LCase(A1) | ||
2471 | |||
2472 | **Description** | ||
2473 | |||
2474 | Convert all parameters to lowercase strings. | ||
2475 | |||
2476 | **Parameters** | ||
2477 | |||
2478 | * **A1: **source string, it could be an address or variable; | ||
2479 | * **A2: **outputting string, it could be an address or variable; | ||
2480 | |||
2481 | **Example** | ||
2482 | |||
2483 | (% class="box" %) | ||
2484 | ((( | ||
2485 | //@W_HDW33 = LCase (@W_HDW25) 'input source sting on (HDW25), convert it to destination string and display the result on (HDW33);// | ||
2486 | ))) | ||
2487 | |||
2488 | **Result:** HDW25=HELLO | ||
2489 | |||
2490 | HDW33=hello | ||
2491 | |||
2492 | == **Left** == | ||
2493 | |||
2494 | **Function** | ||
2495 | |||
2496 | Val =Left (String, Length) | ||
2497 | |||
2498 | **Description** | ||
2499 | |||
2500 | Return a string of the specified length from the left side of parameter. | ||
2501 | |||
2502 | **Parameters** | ||
2503 | |||
2504 | * **String:** source string; it could be an address or string. | ||
2505 | * **Length: **return the number of character. It could be an address, integer or variable. Return empty string if length<1. return the whole string if length not less than the character number of string. | ||
2506 | * **Val: **destination string, outputting string, it could be an address or variable. | ||
2507 | |||
2508 | **Example** | ||
2509 | |||
2510 | (% class="box" %) | ||
2511 | ((( | ||
2512 | //@W_HDW30=Left (@W_HDW36, @W_HDW40) '(HDW36) used to input source string,(HDW30) used to display the string result;// | ||
2513 | ))) | ||
2514 | |||
2515 | Result: | ||
2516 | |||
2517 | * HDW36=hello, | ||
2518 | * HDW40=2, | ||
2519 | * HDW30=he | ||
2520 | |||
2521 | == **Len** == | ||
2522 | |||
2523 | **Function** | ||
2524 | |||
2525 | Length=Len(String) | ||
2526 | |||
2527 | **Description** | ||
2528 | |||
2529 | Return the string length. | ||
2530 | |||
2531 | **Parameters** | ||
2532 | |||
2533 | * **String:** source string, it could be a address or string; | ||
2534 | * **Length:** target data, return value, it could be a address, variable, integer or floating; | ||
2535 | |||
2536 | **Example** | ||
2537 | |||
2538 | //{{code language="lua"}}@W_HDW30=Len (@W_HDW36) 'count the character number of (HDW36), save the result to (HDW30);{{/code}}// | ||
2539 | |||
2540 | **Result:** | ||
2541 | |||
2542 | * HDW36=hello | ||
2543 | * HDW30=5 | ||
2544 | |||
2545 | == **Log** == | ||
2546 | |||
2547 | **Function** | ||
2548 | |||
2549 | a= Logn (x)=Log(x)/Log(n) | ||
2550 | |||
2551 | **Description** | ||
2552 | |||
2553 | Log function:return the natural logarithm of the value. | ||
2554 | |||
2555 | **Parameters** | ||
2556 | |||
2557 | * **a: **source date,it could be a variable, but it could not be address; | ||
2558 | * **x, n:** source date, it could be a variable, but it could not be address; | ||
2559 | |||
2560 | **Example** | ||
2561 | |||
2562 | {{code language="lua"}} | ||
2563 | Dim a as integer 'define a as integer; | ||
2564 | |||
2565 | Dim b as integer 'define b as integer; | ||
2566 | |||
2567 | Dim c as integer 'define c as integer; | ||
2568 | |||
2569 | b=@W_HDW10 'assigns a value to b | ||
2570 | |||
2571 | c=@W_HDW20 'assigns a value to c | ||
2572 | |||
2573 | a=Log (b)/Log(c) 'calculate logarithm | ||
2574 | |||
2575 | @W_HDW0 | ||
2576 | |||
2577 | =a 'assign the result to (HDW0) | ||
2578 | {{/code}} | ||
2579 | |||
2580 | **Result:** | ||
2581 | |||
2582 | * HDW10=27, | ||
2583 | * HDW20=3, | ||
2584 | * HDW0=3 | ||
2585 | |||
2586 | == **Log10** == | ||
2587 | |||
2588 | **Function** | ||
2589 | |||
2590 | a=Log10(x)= Log(x) / Log(10) | ||
2591 | |||
2592 | **Description** | ||
2593 | |||
2594 | Log function: return the natural logarithm. | ||
2595 | |||
2596 | **Parameters** | ||
2597 | |||
2598 | * **A:** target data, result could be variable, could not be address; | ||
2599 | * **x:** source data, it could be variable that needs to be the multiples of 10, can’t be address | ||
2600 | |||
2601 | **Example** | ||
2602 | |||
2603 | {{code language="lua"}} | ||
2604 | dim a as integer 'define a as integer | ||
2605 | |||
2606 | dim b as integer 'define b as integer | ||
2607 | |||
2608 | b=@W_HDW10 'assign a value to b | ||
2609 | |||
2610 | a= Log (b)/Log(10) 'result | ||
2611 | |||
2612 | @W_HDW0=a 'assign the result to (HDW0) | ||
2613 | {{/code}} | ||
2614 | |||
2615 | **Result: ** | ||
2616 | |||
2617 | * HDW10=100, | ||
2618 | * HDW0=2 | ||
2619 | |||
2620 | == **LTrim** == | ||
2621 | |||
2622 | **Function** | ||
2623 | |||
2624 | val=LTrim("string") | ||
2625 | |||
2626 | **Description** | ||
2627 | |||
2628 | Remove the left empty part of the string and return. | ||
2629 | |||
2630 | **Parameters** | ||
2631 | |||
2632 | * **Val:** Destination string, it could be either a variable or address; | ||
2633 | * **string:** Source string, it could be either a variable or address; | ||
2634 | |||
2635 | **Example** | ||
2636 | |||
2637 | {{code language="lua"}} | ||
2638 | dim a as string | ||
2639 | |||
2640 | a=Ltrim("hello") | ||
2641 | |||
2642 | @W_HDW103=a | ||
2643 | {{/code}} | ||
2644 | |||
2645 | **Result:** HDW103=hello | ||
2646 | |||
2647 | == **MAX** == | ||
2648 | |||
2649 | **Function** | ||
2650 | |||
2651 | A1=MAX(A2,A3) | ||
2652 | |||
2653 | **Description** | ||
2654 | |||
2655 | Compare the value of A2 and A3, assign the greater value to A1. | ||
2656 | |||
2657 | **Parameters** | ||
2658 | |||
2659 | * **A1:** Return value (used to store the greater value between A2 with A3). | ||
2660 | * **A2:** The first comparison value. | ||
2661 | * **A3:** The second comparison value. | ||
2662 | |||
2663 | (% class="box infomessage" %) | ||
2664 | ((( | ||
2665 | **✎Note:** A1,A2,A3 should be only used in unsigned integer or unsigned address. | ||
2666 | ))) | ||
2667 | |||
2668 | **Example** | ||
2669 | |||
2670 | {{code language="lua"}} | ||
2671 | DIM A1 as integer | ||
2672 | |||
2673 | @W_HDW106=10 'assign the value to (@W_HDW106), unsigned decimal word. | ||
2674 | |||
2675 | @W_HDW107=5 'assign the value to (?@W_HDW107),unsigned decimal word. | ||
2676 | |||
2677 | A1 = Max(@W_HDW106,@W_HDW107) | ||
2678 | |||
2679 | @W_HDW105 = A1 | ||
2680 | {{/code}} | ||
2681 | |||
2682 | **Result: **@W_HDW105 = 10 | ||
2683 | |||
2684 | == **Mid** == | ||
2685 | |||
2686 | **Function** | ||
2687 | |||
2688 | A1=mid(A2, start, length) | ||
2689 | |||
2690 | **Description** | ||
2691 | |||
2692 | Returns a string contain a specified characters length from a string. | ||
2693 | |||
2694 | **Parameters** | ||
2695 | |||
2696 | * **A1:** string contains the selected characters, it needs to be a string | ||
2697 | * **A2:** string to be selected, it needs to be a variable or address | ||
2698 | * **Start:** the start position of string, it needs to be a variable or address, it means that count begin with 0. | ||
2699 | * **Length:** the designated length of string, maximum character length 127 allowed | ||
2700 | |||
2701 | **Example** | ||
2702 | |||
2703 | {{code language="lua"}} | ||
2704 | DIM A1 as string | ||
2705 | |||
2706 | A1 = Mid("hellokitty",1,2) 'select the string of in " | ||
2707 | |||
2708 | @W_HDW106=A1 | ||
2709 | {{/code}} | ||
2710 | |||
2711 | **Result: **@W_HDW106 'display "el" on text input and output window | ||
2712 | |||
2713 | == **MIN** == | ||
2714 | |||
2715 | **Function** | ||
2716 | |||
2717 | A1=MIN(A2,A3) | ||
2718 | |||
2719 | **Description** | ||
2720 | |||
2721 | Compare the value of A2 and A3, assign the smaller value to A1. | ||
2722 | |||
2723 | **Parameters** | ||
2724 | |||
2725 | * **A1: **Return value (used to store the snaker value between A2 with A3). | ||
2726 | * **A2: **The first comparison value. | ||
2727 | * **A3: **The second comparison value. | ||
2728 | |||
2729 | **Example** | ||
2730 | |||
2731 | {{code language="lua"}} | ||
2732 | DIM A1 as integer | ||
2733 | |||
2734 | @W_HDW106=10 'assign the value to (@W_HDW106), unsigned decimal word. | ||
2735 | |||
2736 | @W_HDW107=5 'assign the value to (@W_HDW107), unsigned decimal word. | ||
2737 | |||
2738 | A1 = Min(@W_HDW106,@W_HDW107) | ||
2739 | |||
2740 | @W_HDW105 = A1 | ||
2741 | {{/code}} | ||
2742 | |||
2743 | **Result:** @W_HDW105 = 5 | ||
2744 | |||
2745 | **✎Note:** A1, A2,A3 only used in unsigned integer or unsigned address. | ||
2746 | |||
2747 | == **MSeconds** == | ||
2748 | |||
2749 | **Function** | ||
2750 | |||
2751 | A1=MSeconds( ) | ||
2752 | |||
2753 | **Description** | ||
2754 | |||
2755 | A1 is used to display the current milliseconds of system. | ||
2756 | |||
2757 | **Parameters** | ||
2758 | |||
2759 | * **A1: **used to store the current milliseconds of system. | ||
2760 | |||
2761 | **Example** | ||
2762 | |||
2763 | {{code language="lua"}} | ||
2764 | DIM A1 as integer | ||
2765 | |||
2766 | @W_HDW0= 10 'assign a value to (@W_HDW0), unsigned decimal word | ||
2767 | |||
2768 | A1=MSeconds() 'return the current milliseconds of system to A1 | ||
2769 | |||
2770 | @W_HDW0=A1 | ||
2771 | |||
2772 | @W_HDW1=A1>>16 'display milliseconds on screen, (HDW0) is an 32-bit unsigned decimal integer address | ||
2773 | {{/code}} | ||
2774 | |||
2775 | **Result:** @W_HDW0 will generate the time value of changing milliseconds unit. | ||
2776 | |||
2777 | (% class="box infomessage" %) | ||
2778 | ((( | ||
2779 | **✎Note:** | ||
2780 | |||
2781 | * A1 is 32-bit unsigned integer variable or unsigned integer address; | ||
2782 | * MSeconds() function rolls back over to zero once the maximum value has been reached (4294967295->0, 1,2,....4294967295->0, 1, 2,....4294967295->0, 1, 2); | ||
2783 | ))) | ||
2784 | |||
2785 | == **MyDeleteFile** == | ||
2786 | |||
2787 | **Function** | ||
2788 | |||
2789 | MyDeleteFile (A1,A2,A3,A4,A5) | ||
2790 | |||
2791 | **Description** | ||
2792 | |||
2793 | Delete the specified file | ||
2794 | |||
2795 | **Parameters** | ||
2796 | |||
2797 | A1: File location (value is an integer); | ||
2798 | |||
2799 | In HMI: | ||
2800 | |||
2801 | * =0: Recipe folder in HMI flash; | ||
2802 | * =1: Custom folder in UDisk (USB flash disk); | ||
2803 | * = 2: Custom folder in SD card. | ||
2804 | * =3: Custom folder in HMI flash; | ||
2805 | |||
2806 | In simulator: | ||
2807 | |||
2808 | * = 0: D:/Recipe/ | ||
2809 | * = 1: C:/WECON/CustomFileDir/ | ||
2810 | * = 2: C:/WECON/CustomFileDir/ | ||
2811 | * = 3: C:/WECON/CustomFileDir/ | ||
2812 | |||
2813 | **✎Note:** | ||
2814 | |||
2815 | A1 can be an address, variable or value. | ||
2816 | |||
2817 | A2: filename (value is string); | ||
2818 | |||
2819 | Input the name of the file want to delete. | ||
2820 | |||
2821 | **✎Note: ** | ||
2822 | |||
2823 | A2 can be an address , variable or a character string, and the length of the file name cannot exceed 32 characters. | ||
2824 | |||
2825 | A3: folder name (value is integer); | ||
2826 | |||
2827 | Input the folder where the file want to delete. | ||
2828 | |||
2829 | **✎Note: ** | ||
2830 | |||
2831 | A3 can be an address , variable or a character string, and the length of the folder name cannot exceed 32 characters. | ||
2832 | |||
2833 | A4: Delete function type (value is integer) | ||
2834 | |||
2835 | * = 0: Delete the specified file. | ||
2836 | * = 1: Delete all files. | ||
2837 | |||
2838 | **✎Note: ** | ||
2839 | |||
2840 | A4 can be an address , variable or value. | ||
2841 | |||
2842 | A5: Return value (value is an integer) | ||
2843 | |||
2844 | * = 0: parameter error | ||
2845 | * = 1: Delete successfully | ||
2846 | * = 2: Delete failed | ||
2847 | * = 3: Failed to open file | ||
2848 | |||
2849 | **✎Note:** A5 must be an address. | ||
2850 | |||
2851 | **Example** | ||
2852 | |||
2853 | (% class="box" %) | ||
2854 | ((( | ||
2855 | MyDeleteFile(@W_HDW1254,@W_HDW4200,@W_HDW4300,@W_HDW1250,"@W_HDW1252") | ||
2856 | |||
2857 | ‘According to the value of @W_HDW1250, delete the designated file @W_HDW4200 in the folder @W_HDW4300 or delete all files in the folder @W_HDW4300. | ||
2858 | ))) | ||
2859 | |||
2860 | == **NewNoAddr** == | ||
2861 | |||
2862 | **Function** | ||
2863 | |||
2864 | A1= NewNoAddr (A2, length) | ||
2865 | |||
2866 | **Description** | ||
2867 | |||
2868 | At the basic of source address A2, offset designated length, obtain a new address A1. | ||
2869 | |||
2870 | **Parameters** | ||
2871 | |||
2872 | * **A1: **address after offsetting, it must be String type variable. | ||
2873 | * **A2:** source address, it must be an address(e.g.:"@W_HDW2") | ||
2874 | * **Length: **offset length, it must be a constant or an integer variable. | ||
2875 | |||
2876 | **Example** | ||
2877 | |||
2878 | {{code language="lua"}} | ||
2879 | DIM A1 as string | ||
2880 | |||
2881 | A1=NewNoAddr("@W_HDW0",50) '(HDW0) offsets 50 words address (16 bit), and save the result to A1 | ||
2882 | |||
2883 | @W_HDW1=A1 '(HDW50) save in A1 | ||
2884 | {{/code}} | ||
2885 | |||
2886 | **Result: **(@W_HDW1) character input/display will show @W_HDW50 | ||
2887 | |||
2888 | |||
2889 | **Example** | ||
2890 | |||
2891 | {{code language="lua"}} | ||
2892 | DIM A1 as string | ||
2893 | |||
2894 | A1=NewNoAddr("@W_HDW0",50) 'HDW0 address is offset by 50 word address and stored in A1, i.e. A1 represents the offset address HDW50 | ||
2895 | |||
2896 | @W_HDW10=ReadAddr(A1) 'Read the value in address A1 (HDW50) and transfer it to HDW10 | ||
2897 | {{/code}} | ||
2898 | |||
2899 | **Input: **@W_HDW50= 123 | ||
2900 | |||
2901 | **Result: **@W_HDW10=123 | ||
2902 | |||
2903 | == **NewStatAddr** == | ||
2904 | |||
2905 | **Function** | ||
2906 | |||
2907 | A1= NewStatAddr (A2, length) | ||
2908 | |||
2909 | **Description** | ||
2910 | |||
2911 | At the basic of source address A2, offset the designated length, to obtain a new station A1. | ||
2912 | |||
2913 | **Parameters** | ||
2914 | |||
2915 | * **A1: **The address after offsetting, it needs to be variable. | ||
2916 | * **A2:** Source station address, it needs to be address (e.g.:"@W_1:10"). | ||
2917 | * **Length: **offset length | ||
2918 | |||
2919 | **Example** | ||
2920 | |||
2921 | {{code language="lua"}} | ||
2922 | DIM A1 as string | ||
2923 | |||
2924 | A1=NewStatAddr("@W_1:10",2) 'address 10 of station address 1 that offset 2 station addresses, then save the result to A1 | ||
2925 | |||
2926 | @W_HDW1=A1 'address 3:10 is saved in A1 | ||
2927 | {{/code}} | ||
2928 | |||
2929 | **Result: **@W_HDW1 character input/display will show @W_3:10 | ||
2930 | |||
2931 | == **NStringCompare** == | ||
2932 | |||
2933 | **Function** | ||
2934 | |||
2935 | A1= NStringCompare (A2, A3, length) | ||
2936 | |||
2937 | **Description** | ||
2938 | |||
2939 | Compare whether the designated length of two strings is the same, return 1 to A1 if yes, otherwise return 0. | ||
2940 | |||
2941 | **Parameters** | ||
2942 | |||
2943 | * **A1: **Returned value (compare the designated length of two strings, display 1 when equal, else 0). It could be an address or variable. | ||
2944 | * **A2: **the address of string to be compared, it needs to be address. | ||
2945 | * **A3: **source string, it needs to be variable or constant string. | ||
2946 | * **Length: **string length to be compared | ||
2947 | |||
2948 | **Example** | ||
2949 | |||
2950 | {{code language="lua"}} | ||
2951 | @W_HDW1= NStringCompare("@W_HDW0","87654",5) | ||
2952 | |||
2953 | if @W_HDW1=1 then | ||
2954 | |||
2955 | @B_HDX10.0=1 'result: HDX10.0 set ON 'when the two strings are the same. | ||
2956 | |||
2957 | endif | ||
2958 | |||
2959 | if @W_HDW1=0 then | ||
2960 | |||
2961 | @B_HDX10.0=0 'result:HDX10.0 set OFF 'when not equal. | ||
2962 | |||
2963 | Endif | ||
2964 | {{/code}} | ||
2965 | |||
2966 | == **Operator** == | ||
2967 | |||
2968 | (% class="table-bordered" %) | ||
2969 | |=(% scope="row" %)**Operation**|=**Symbol**|=**Example**|=**Return type** | ||
2970 | |=Addition|+|A1=A2+A3|Return type depending on the type of variable or address of the addition | ||
2971 | |=Subtraction|-|A1=A2-A3|Return type depending on the type of variable or address of the subtraction | ||
2972 | |=Multiplication|*|A1=A2*A3|Return type depending on the type of variable or address of the multiplication | ||
2973 | |=Division|/|A1=A2/A3|Return type depending on the type of variable or address of the division | ||
2974 | |=Remainder|Mod ~(%)|((( | ||
2975 | A1=A2 mod A3 | ||
2976 | |||
2977 | A1=A2%A3 | ||
2978 | )))|Returns the remainder of the division of two numbers. The type of the return value is an integer | ||
2979 | |=Logical OR|Or(~|)|((( | ||
2980 | A1=A2 or A3 | ||
2981 | |||
2982 | A1=A2|A3 | ||
2983 | )))|Returns the result of a logical OR. The type of the return value is an integer. | ||
2984 | |=Logic AND|And (&)|((( | ||
2985 | A1=A2 and A3 | ||
2986 | |||
2987 | A1=A2&A3 | ||
2988 | )))|Returns the result of a logical AND. The type of the return value is an integer. | ||
2989 | |=Logical XOR|Xor (^)|((( | ||
2990 | A1=A2 xor A3 | ||
2991 | |||
2992 | A1=A2^A3 | ||
2993 | )))|Returns the result of a logical XOR. The type of the return value is an integer. | ||
2994 | |=Logical reversal|Not (!)|((( | ||
2995 | A1=not A1 | ||
2996 | |||
2997 | A1=A2!A3 | ||
2998 | )))|Returns the result of a logical reversal. The type of the return value is an integer. | ||
2999 | |=Left shift|<<|A1=A2<<A3|Shift the value of A2 to the left by A3 digits and return the displacement result. The type of the return value is an integer. | ||
3000 | |=Right shift|>>|A1=A2>>A3|Shift the value of A2 to the right by A3 digits and return the displacement result. The type of the return value is an integer. | ||
3001 | |=Bit reversal|~~|A1=~~A1|Perform a bit reversal on a value. The type of the return value is an integer. | ||
3002 | |||
3003 | == **PI_GetTickCount** == | ||
3004 | |||
3005 | **Function** | ||
3006 | |||
3007 | PI_GetTickCount (A1, A2) | ||
3008 | |||
3009 | **Description** | ||
3010 | |||
3011 | Writethe startingtime tothe set address asa 32-bit integer. | ||
3012 | |||
3013 | **Parameters** | ||
3014 | |||
3015 | * **A1: **Source data could only be the HMI internal or external register starting with "@". | ||
3016 | * **A2: **=0: Unit of time for returning 0ms;(the value will become 0 after 49.7 days and so on) | ||
3017 | ** =1: Unit of time for returning 10 ms;(the value will become 0 after 497 days and so on) | ||
3018 | ** =2: Unit of time for returning 100 ms;(the value will become 0 after 4970 days and so on) | ||
3019 | ** =3: Unit of time for returning 1000ms;(the value will become 0 after 49700 days and so on) | ||
3020 | |||
3021 | (% class="box infomessage" %) | ||
3022 | ((( | ||
3023 | **✎Note: **If user restarts the hmi,all value will be 0. | ||
3024 | ))) | ||
3025 | |||
3026 | **Example** | ||
3027 | |||
3028 | (% class="box" %) | ||
3029 | ((( | ||
3030 | //PI_GetTickCount("@W_HDW100",0)'save the starting time in HDW100 address as a 32-bit integer.// | ||
3031 | ))) | ||
3032 | |||
3033 | **Result: **HDW100=123456(different returned data for each moment) | ||
3034 | |||
3035 | == **Power** == | ||
3036 | |||
3037 | **Function** | ||
3038 | |||
3039 | var = power (expr1, expr2) | ||
3040 | |||
3041 | **Description** | ||
3042 | |||
3043 | The value of [expr2] to the power of [expr1] will be assigned to Var. | ||
3044 | |||
3045 | **Parameters** | ||
3046 | |||
3047 | * **var:** returned value. | ||
3048 | * **expr 1:** base number. | ||
3049 | * **expr 2:** power number. | ||
3050 | |||
3051 | **Example** | ||
3052 | |||
3053 | {{code language="lua"}} | ||
3054 | Dim a as floating | ||
3055 | |||
3056 | a=power (2, 3) 'the value of 3 to the power of 2 is assigned to a. | ||
3057 | |||
3058 | Float2D("@W_HDW10",a) 'assign the float value of a to @W_HDW10 | ||
3059 | {{/code}} | ||
3060 | |||
3061 | **Result: **@W_HDW10=8 | ||
3062 | |||
3063 | == **PrintText** == | ||
3064 | |||
3065 | **Function** | ||
3066 | |||
3067 | PrintText(A) | ||
3068 | |||
3069 | **Description** | ||
3070 | |||
3071 | Print the content of A or locates in A. | ||
3072 | |||
3073 | **Parameters** | ||
3074 | |||
3075 | **A:** source data. A could be a variable or a string ( text information),not a register address. | ||
3076 | |||
3077 | **Example** | ||
3078 | |||
3079 | A is text information | ||
3080 | |||
3081 | //PrintText("HMI 8070")// | ||
3082 | |||
3083 | **Result: **Printer will print out “HMI 8070” | ||
3084 | |||
3085 | * A is variable | ||
3086 | |||
3087 | //Dim a as string// | ||
3088 | |||
3089 | //a= “HMI 8070”// | ||
3090 | |||
3091 | //PrintText(a)// | ||
3092 | |||
3093 | **Result:** Printer will print out “HMI 8070” | ||
3094 | |||
3095 | **✎Note:** | ||
3096 | |||
3097 | source data length range:1-128 characters. | ||
3098 | |||
3099 | == **RadToDeg** == | ||
3100 | |||
3101 | **Function** | ||
3102 | |||
3103 | Var= RadToDeg(expr) | ||
3104 | |||
3105 | **Description** | ||
3106 | |||
3107 | Convert radiant value to degree, then assigned to Var. | ||
3108 | |||
3109 | **Parameters** | ||
3110 | |||
3111 | * **Var:** return degree value. | ||
3112 | * **expr:** input radiant value. | ||
3113 | |||
3114 | **Example** | ||
3115 | |||
3116 | {{code language="lua"}} | ||
3117 | Dim a as floating | ||
3118 | |||
3119 | a = RadToDeg(pi) 'assignt the degree value of ? to a. | ||
3120 | |||
3121 | Float2D("@W_HDW4",a) 'assign the degree value to address "@W_HDW4". | ||
3122 | {{/code}} | ||
3123 | |||
3124 | **Result:** @W_HDW4=180 | ||
3125 | |||
3126 | == **RAND** == | ||
3127 | |||
3128 | **Function** | ||
3129 | |||
3130 | Var = rand(expr1) | ||
3131 | |||
3132 | **Description** | ||
3133 | |||
3134 | Generate a random number. | ||
3135 | |||
3136 | **Parameter** | ||
3137 | |||
3138 | * **Var:** generated random number. | ||
3139 | * **Expr1:** the base number. | ||
3140 | |||
3141 | **Example** | ||
3142 | |||
3143 | (% class="box" %) | ||
3144 | ((( | ||
3145 | //@W_HDW0=rand(@W_HDW0) 'Set the value of address@W_HDW0 as the base number to generate random number.// | ||
3146 | ))) | ||
3147 | |||
3148 | **Result:** @W_HDW0 random number. | ||
3149 | |||
3150 | == **ReadAddr** == | ||
3151 | |||
3152 | **Function** | ||
3153 | |||
3154 | Word = ReadAddr(A1) | ||
3155 | |||
3156 | **Description** | ||
3157 | |||
3158 | Assigned the read value from A1 to word. | ||
3159 | |||
3160 | **Parameter** | ||
3161 | |||
3162 | * **Word: **return value | ||
3163 | |||
3164 | **Example** | ||
3165 | |||
3166 | {{code language="lua"}} | ||
3167 | Dim word as integer | ||
3168 | |||
3169 | @W_HDW100=10 | ||
3170 | |||
3171 | word = ReadAddr("@W_HDW100") 'Read the value of address @W_HDW100 and assign to word. | ||
3172 | |||
3173 | @W_HDW200=word | ||
3174 | {{/code}} | ||
3175 | |||
3176 | **Result:** @W_HDW200=10 | ||
3177 | |||
3178 | == **ReadWordFormFile** == | ||
3179 | |||
3180 | **Function** | ||
3181 | |||
3182 | ReadWordFormFile (A1, A2, A3, A4, A5, A6) | ||
3183 | |||
3184 | **Description** | ||
3185 | |||
3186 | Read data of specified length from specified file | ||
3187 | |||
3188 | **Parameters** | ||
3189 | |||
3190 | A1: File location (value is an integer); | ||
3191 | |||
3192 | In HMI: | ||
3193 | |||
3194 | * =0: Recipe folder in HMI flash; | ||
3195 | * =1: Custom folder in UDisk (USB flash disk); | ||
3196 | * = 2: Custom folder in SD card. | ||
3197 | * =3: Custom folder in HMI flash; | ||
3198 | |||
3199 | In simulator: | ||
3200 | |||
3201 | * = 0: D:/Recipe/ | ||
3202 | * = 1: C:/WECON/CustomFileDir/ | ||
3203 | * = 2: C:/WECON/CustomFileDir/ | ||
3204 | * = 3: C:/WECON/CustomFileDir/ | ||
3205 | |||
3206 | **✎Note:** A1 can be an address, variable or value. | ||
3207 | |||
3208 | A2: File name (value is a string); | ||
3209 | |||
3210 | Input the file name want to write. | ||
3211 | |||
3212 | **✎Note: **A2 must be an address, and the length of the file name cannot exceed 32 characters. | ||
3213 | |||
3214 | A3: Data start address (value is a string); | ||
3215 | |||
3216 | Input the data want to write | ||
3217 | |||
3218 | **✎Note: **A3 must be the address. | ||
3219 | |||
3220 | A4: Data length (value is an integer) | ||
3221 | |||
3222 | Set the length of the data to be written (unit:word) | ||
3223 | |||
3224 | **✎Note: **A4 can be an address , variable or value. | ||
3225 | |||
3226 | A5: Return value (value is an integer) | ||
3227 | |||
3228 | ~= 1: Successfully read | ||
3229 | |||
3230 | ~= 2: Failed to open the folder | ||
3231 | |||
3232 | ~= 3: Read address error | ||
3233 | |||
3234 | ~= 4: File reading error | ||
3235 | |||
3236 | **✎Note: **A5 must be an address. | ||
3237 | |||
3238 | A6: Folder name (value is a string); | ||
3239 | |||
3240 | Input the folder where to be written the file. | ||
3241 | |||
3242 | **✎Note:** A6 can be an address or a variable or a character string, and the length of the folder name cannot exceed 32 characters | ||
3243 | |||
3244 | **Example** | ||
3245 | |||
3246 | (% class="box" %) | ||
3247 | ((( | ||
3248 | ReadWordFormFile(@W_HDW1254,"@W_HDW4200","@W_HDW2000",@W_HDW4000,"@W_HDW4100", @W_HDW4300)'Write the @W_HDW4000 words in the file @W_HDW4200 in the directory @W_HDW4300 into the address @W_HDW2000 specified location by @W_HDW1254 | ||
3249 | ))) | ||
3250 | |||
3251 | == **Right** == | ||
3252 | |||
3253 | **Function** | ||
3254 | |||
3255 | val = Right (string, length) | ||
3256 | |||
3257 | **Description** | ||
3258 | |||
3259 | Return a string of the specified length from the right side of parameter. | ||
3260 | |||
3261 | **Parameter** | ||
3262 | |||
3263 | * **string: **the operated string. | ||
3264 | * **length:** the designated number of byte required to return, count from the right side. | ||
3265 | |||
3266 | **Example** | ||
3267 | |||
3268 | //@W_HDW103= Right("Hello", 3) 'return "llo"// | ||
3269 | |||
3270 | **Result: **@W_HDW103="llo" | ||
3271 | |||
3272 | == **RTrim** == | ||
3273 | |||
3274 | **Function** | ||
3275 | |||
3276 | val = RTrim(str) | ||
3277 | |||
3278 | **Description** | ||
3279 | |||
3280 | Clear the empty part on the right side of string [str], then assign the empty part to val | ||
3281 | |||
3282 | **Parameter** | ||
3283 | |||
3284 | * **val: **returned value. | ||
3285 | * **str:** the string needs to be operated. | ||
3286 | |||
3287 | **Example** | ||
3288 | |||
3289 | (% class="box" %) | ||
3290 | ((( | ||
3291 | //@W_HDW0 = RTrim(" -Hell o- ") 'retrun" -Hell o-"// | ||
3292 | ))) | ||
3293 | |||
3294 | **Result:** @W_HDW0display " -Hell o-" | ||
3295 | |||
3296 | == **S2F** == | ||
3297 | |||
3298 | **Function** | ||
3299 | |||
3300 | S2F (A1,A2,s1) | ||
3301 | |||
3302 | **Description** | ||
3303 | |||
3304 | S2F is used to translate the string stored in A1 to floating and store the floating number in A2 according to the data format shown in A2. | ||
3305 | |||
3306 | **Parameters** | ||
3307 | |||
3308 | * **A1:** initial data address, used to store the string data, it should be the internal address of HMI or external address that started with “@”,like @W_HDW0 | ||
3309 | * **A2:** destination address, used to store the floating number data. It should be the internal address of HMI or external address that started with “@”,like @W_HDW0 | ||
3310 | * **S1:** display format of target data, for example m.nf, m means the length of string is m, n means the decimal places, f is the format used to output single precision number. (Since the floating point number is up to 7 digits, the decimal point in the string is also a bit, so it is recommended that the length should not exceed 8 bits) | ||
3311 | |||
3312 | **Return value:** none | ||
3313 | |||
3314 | **Example** | ||
3315 | |||
3316 | (% class="box" %) | ||
3317 | ((( | ||
3318 | The lengTh of string is 8 | ||
3319 | |||
3320 | //@W_HDW0="12345.67"//'Assign the string “12345.67" to HDW1 | ||
3321 | |||
3322 | //S2F("@W_HDW0","@W_HDW100","8.2f") 'read string "12345.67 "from HDW0and convert it into a floating point with 2 decimal places, store in the HDW100// | ||
3323 | ))) | ||
3324 | |||
3325 | **Result: **@W_HDW100 address displays “12345.67”. | ||
3326 | |||
3327 | (% class="box" %) | ||
3328 | ((( | ||
3329 | The length of string is less than 8 | ||
3330 | |||
3331 | //@W_HDW0="1234.5 67"‘assign the string“1234.567”to HDW1// | ||
3332 | |||
3333 | //S2F("@W_HDW0","@W_HDW100","6.2f") ' read string "1234 .5"from HDW0and convert it into a floating point with 2 decimal places, store in the HDW100 .// | ||
3334 | ))) | ||
3335 | |||
3336 | **Result: **the floating value of @W_HDW100 is 1234.50 | ||
3337 | |||
3338 | (% class="box" %) | ||
3339 | ((( | ||
3340 | The length of string is more than 8 | ||
3341 | |||
3342 | //@W_HDW0="12345.6789"’assign the string “12345.6789” to HDW1// | ||
3343 | |||
3344 | //S2F("@W_HDW0","@W_HDW100","8.2f") ' read string "12345 .67" from HDW0 and convert it into a floating point with 2 decimal places, store in the HDW100 .// | ||
3345 | ))) | ||
3346 | |||
3347 | **Result: **the floating value of @W_HDW100 is 12345.67 | ||
3348 | |||
3349 | == **SetB** == | ||
3350 | |||
3351 | **Function** | ||
3352 | |||
3353 | SetB(A1) | ||
3354 | |||
3355 | **Description** | ||
3356 | |||
3357 | Set the bit A1 ON. | ||
3358 | |||
3359 | **Parameters** | ||
3360 | |||
3361 | * **A1:**Bit address | ||
3362 | |||
3363 | **Example** | ||
3364 | |||
3365 | (% class="box" %) | ||
3366 | ((( | ||
3367 | //SetB(@B_HDX100.0) 'Set the address {@B_HDX100.0} ON// | ||
3368 | ))) | ||
3369 | |||
3370 | **Result: **@B_HDX100.0=1 | ||
3371 | |||
3372 | == **SetKeyMap** == | ||
3373 | |||
3374 | **Function** | ||
3375 | |||
3376 | SetKeyMap(A1,A2,A3) | ||
3377 | |||
3378 | **Description** | ||
3379 | |||
3380 | The key values of the keyboard are mapped so that multiple keyboard buttons perform the same function. | ||
3381 | |||
3382 | **Parameters** | ||
3383 | |||
3384 | * **A1:** The starting address of the source key;It needs to be an address format; | ||
3385 | * **A2: **The starting address of the mapped value; It needs to be an address format; | ||
3386 | * **A3: **Mapping length (continuous length of mapped address); It needs to be a value, the maximum mapping range: 108 key values; | ||
3387 | |||
3388 | **Example** | ||
3389 | |||
3390 | (% class="box" %) | ||
3391 | ((( | ||
3392 | //@W_HDW3000 = 3 ' The starting address of the source key// | ||
3393 | |||
3394 | //@W_HDW3001 = 5// | ||
3395 | |||
3396 | //@W_HDW3002 = 7// | ||
3397 | |||
3398 | //@W_HDW3003 = 9// | ||
3399 | |||
3400 | //@W_HDW3004 = 61// | ||
3401 | |||
3402 | //@W_HDW4100 = 103 'The starting address of the mapped value// | ||
3403 | |||
3404 | //@W_HDW4101 = 105// | ||
3405 | |||
3406 | //@W_HDW4102 = 106// | ||
3407 | |||
3408 | //@W_HDW4103 = 108// | ||
3409 | |||
3410 | //@W_HDW4104 = 28// | ||
3411 | |||
3412 | //SetKeyMap("@W_HDW3000","@W_HDW4100",5) ' Map the values of the HDW4000~~HDW4004 addresses to the HDW3000~~HDW3004 addresses.// | ||
3413 | ))) | ||
3414 | |||
3415 | **Result** | ||
3416 | |||
3417 | Map the value of the HDW4000~~HDW4004 address (mapped to 103 105 106 108 28) to the value of the HDW3000~~HDW3004 address (source key value 3 5 7 9 61) | ||
3418 | |||
3419 | Button 2 (key value 3) is mapped to the direction key (key value is 103), button 4 (key value 5) is mapped to the left arrow key (key value is 105), and so on. When using the keyboard, the function of input 2 could be performed on both the button 2 and the direction button. | ||
3420 | |||
3421 | == **SignedInt16** == | ||
3422 | |||
3423 | **Function** | ||
3424 | |||
3425 | val = SignedInt16(A1) | ||
3426 | |||
3427 | **Description** | ||
3428 | |||
3429 | Assign the value to {val} from address A1 which is signed integer. | ||
3430 | |||
3431 | **Parameters** | ||
3432 | |||
3433 | * **A1: **contain signed integer as "@W_HDW000002" | ||
3434 | * **Val: **returned value | ||
3435 | |||
3436 | **Example** | ||
3437 | |||
3438 | {{code language="lua"}} | ||
3439 | Dim a as integer 'Integer variable a | ||
3440 | |||
3441 | a = SignedInt16("@W_HDW0") 'read signed integer from HDW0 addresses and assign the value to a | ||
3442 | |||
3443 | @W_HDW2=a'assign the value a to HDW2 | ||
3444 | {{/code}} | ||
3445 | |||
3446 | **Input: **@W_HDW0=-2: | ||
3447 | |||
3448 | **Result:** @W_HDW2=-2. | ||
3449 | |||
3450 | == **SignedInt32** == | ||
3451 | |||
3452 | **Function** | ||
3453 | |||
3454 | val = SignedInt32 (A1) | ||
3455 | |||
3456 | **Description** | ||
3457 | |||
3458 | Assign the value to {val} from address A1 which is signed even integer. | ||
3459 | |||
3460 | **Parameters** | ||
3461 | |||
3462 | * **A1: **the address contains signed even integer | ||
3463 | * **Val:** Returned value | ||
3464 | |||
3465 | **Example** | ||
3466 | |||
3467 | {{code language="lua"}} | ||
3468 | Dim a as integer 'define {a} as a integer | ||
3469 | |||
3470 | a = SignedInt32("@W_HDW0") 'read signed even integer from HDW0, then assign this value to a. | ||
3471 | |||
3472 | @W_HDW2=a 'assign the value of a to HDW2 | ||
3473 | |||
3474 | @W_HDW3=a>>16 | ||
3475 | {{/code}} | ||
3476 | |||
3477 | **Input: **@W_HDW0=-2 | ||
3478 | |||
3479 | **Result:** | ||
3480 | |||
3481 | * @W_HDW2=-2 | ||
3482 | * @W_HDW13=-1 | ||
3483 | |||
3484 | == **Sin** == | ||
3485 | |||
3486 | **Function** | ||
3487 | |||
3488 | val = Sin(A1) | ||
3489 | |||
3490 | **Description** | ||
3491 | |||
3492 | Get the sine value of A1, and copy result to val. | ||
3493 | |||
3494 | **Parameters** | ||
3495 | |||
3496 | * **A1: **A1 needs to be an angle. | ||
3497 | * **Val: **Returned value. | ||
3498 | |||
3499 | **Example** | ||
3500 | |||
3501 | {{code language="lua"}} | ||
3502 | Dim a as floating 'floating variable a,b | ||
3503 | |||
3504 | a=sin(pi/6) 'return sinb to a | ||
3505 | |||
3506 | Float2D("@W_HDW13",a) 'assign the value of the floating variable a to address HDW13. | ||
3507 | {{/code}} | ||
3508 | |||
3509 | **Result:** @W_HDW13=0.5 | ||
3510 | |||
3511 | == **SleepA** == | ||
3512 | |||
3513 | **Function** | ||
3514 | |||
3515 | SleepA(T) | ||
3516 | |||
3517 | **Description** | ||
3518 | |||
3519 | Wait time T(ms). | ||
3520 | |||
3521 | **Parameters** | ||
3522 | |||
3523 | * **T:** wait time, the unit is [ms] | ||
3524 | |||
3525 | **Returned value:** none. | ||
3526 | |||
3527 | **Example** | ||
3528 | |||
3529 | (% class="box" %) | ||
3530 | ((( | ||
3531 | //SleepA(10) 'wait 10ms// | ||
3532 | ))) | ||
3533 | |||
3534 | **Result:** When the script runs to SleepA(10), it means the scripts would go running after waiting 10ms | ||
3535 | |||
3536 | == **Sqr** == | ||
3537 | |||
3538 | **Function** | ||
3539 | |||
3540 | val = Sqr(A1) | ||
3541 | |||
3542 | **Description** | ||
3543 | |||
3544 | Assign a square root value of A1 to val. | ||
3545 | |||
3546 | **Parameters** | ||
3547 | |||
3548 | * **A1: **the data need to be operated | ||
3549 | * **Val: **Returned value | ||
3550 | |||
3551 | (% class="box infomessage" %) | ||
3552 | ((( | ||
3553 | Note:The value must be floating. | ||
3554 | ))) | ||
3555 | |||
3556 | **Example** | ||
3557 | |||
3558 | (% class="box" %) | ||
3559 | ((( | ||
3560 | //@W_HDW0 = Sqr(4) 'calculate the square root of HDW0// | ||
3561 | ))) | ||
3562 | |||
3563 | **Result:** @W_HDW0=2 | ||
3564 | |||
3565 | == **StAndFtChange** == | ||
3566 | |||
3567 | **Function** | ||
3568 | |||
3569 | StAndFtChange(A1,A2,A3) | ||
3570 | |||
3571 | **Description** | ||
3572 | |||
3573 | Calculate the number of seconds from January 1, 1970 to the current time, and also be invertible. | ||
3574 | |||
3575 | **Parameters** | ||
3576 | |||
3577 | * **A1: **The start address of curren t time (Enter or output year, month, day, minute, and second); It needs to begin with address"@", and occupies 6 addresses; | ||
3578 | * **A2: **The number of seconds; It needs to begin with address “@", data format 32-bit unsigned. | ||
3579 | * **A3: **conversion method; | ||
3580 | ** A3=0, convert time to seconds; | ||
3581 | ** A3=1, convert seconds to time; | ||
3582 | |||
3583 | **Returned value: **none; | ||
3584 | |||
3585 | **Example** | ||
3586 | |||
3587 | Script 1 | ||
3588 | |||
3589 | (% class="box" %) | ||
3590 | ((( | ||
3591 | //StAndFtChange("@W_HDW10","@W_HDW20",0) // //‘use HDW10 as start address, and enter year, month, day, hour, minute, second. The script calculates the number of seconds from January 1, 1970 to the time of the entry, and stores the result in HDW20// | ||
3592 | ))) | ||
3593 | |||
3594 | **Input: **HDW10 = 2017,HDW11 = 12, HDW12 = 9 , HDW13 = 15, HDW14 = 15, HDW15 = 0 | ||
3595 | |||
3596 | **Output:** 1512832500 | ||
3597 | |||
3598 | Script 2 | ||
3599 | |||
3600 | (% class="box" %) | ||
3601 | ((( | ||
3602 | //StAndFtChange("@W_HDW30","@W_HDW20",1) ‘read number of seconds from HDW20, and the script calculates the date time, and stores the result start from HDW30// | ||
3603 | ))) | ||
3604 | |||
3605 | **Input:** 1512833760 | ||
3606 | |||
3607 | **Output:** HDW30 = 2017, HDW31 = 12, HDW32 = 9, HDW33 = 15, HDW34 = 36, HDW35 = 0 | ||
3608 | |||
3609 | == **Sub** == | ||
3610 | |||
3611 | **Function** | ||
3612 | |||
3613 | Sub name (arglist) | ||
3614 | |||
3615 | statements | ||
3616 | |||
3617 | End Sub | ||
3618 | |||
3619 | **Description** | ||
3620 | |||
3621 | Declare the name, parameters and codes of the Sub (sub function) | ||
3622 | |||
3623 | **Parameters** | ||
3624 | |||
3625 | * **Name: **naming rules refer to variable. | ||
3626 | * **Arglist: **variable list. | ||
3627 | * **Statements:** the code set of the sub function. | ||
3628 | |||
3629 | **Example** | ||
3630 | |||
3631 | {{code language="lua"}} | ||
3632 | sub samesub(a,b as integer) ' samesub and integer variable a,b | ||
3633 | |||
3634 | c=a+b | ||
3635 | |||
3636 | @W_HDW0=c | ||
3637 | |||
3638 | endsub | ||
3639 | |||
3640 | samesub(1,12) 'call function samesub | ||
3641 | {{/code}} | ||
3642 | |||
3643 | **Result:** @W_HDW0=13 | ||
3644 | |||
3645 | == **SWAP** == | ||
3646 | |||
3647 | **Function** | ||
3648 | |||
3649 | SWAP(A1,length) | ||
3650 | |||
3651 | **Description** | ||
3652 | |||
3653 | Swap the big-endian with the little-endian from address A1, swap length is adjustable. | ||
3654 | |||
3655 | **Parameters** | ||
3656 | |||
3657 | * **A1: **the swapped high endian, need to be an address as HDW_000002. | ||
3658 | * **Length: **swap length. | ||
3659 | |||
3660 | **Returned value:** None. | ||
3661 | |||
3662 | **Example** | ||
3663 | |||
3664 | {{code language="lua"}} | ||
3665 | @W_HDW103=0x1234 'assign value to HDW103 | ||
3666 | |||
3667 | @W_HDW104=0x2345 'assign value to HDW104 | ||
3668 | |||
3669 | @W_HDW105=0x2565 'assign value to HDW105 | ||
3670 | |||
3671 | @W_HDW106=0x2675 'assign value to HDW106 | ||
3672 | |||
3673 | SWAP(@W_HDW103,4) 'swap the high and low endian for the 4 adjacent addresses start with HDW103. | ||
3674 | {{/code}} | ||
3675 | |||
3676 | **Result:** | ||
3677 | |||
3678 | * @W_HDW103=0x3412 | ||
3679 | * @W_HDW104=0x4523 | ||
3680 | * @W_HDW105=0x6525 | ||
3681 | * @W_HDW106=0x7526 | ||
3682 | |||
3683 | == **Tan** == | ||
3684 | |||
3685 | **Function** | ||
3686 | |||
3687 | val = Tan(A1) | ||
3688 | |||
3689 | **Description** | ||
3690 | |||
3691 | Get the returned tagent value of A1, and then assign to val. | ||
3692 | |||
3693 | **Parameters** | ||
3694 | |||
3695 | * **A1: **A1 needs to be an angle. | ||
3696 | * **Val: **Returned value. | ||
3697 | |||
3698 | **Example** | ||
3699 | |||
3700 | {{code language="lua"}} | ||
3701 | Dim a as floating 'define a floating variable a | ||
3702 | |||
3703 | a=TAN(pi/3) 'calculate the tangent value of pi/3 and assign to a | ||
3704 | |||
3705 | Float2D("@W_HDW16",a) 'assign the value of a to HDW16 | ||
3706 | {{/code}} | ||
3707 | |||
3708 | **Result:** @W_HDW13=1.732 | ||
3709 | |||
3710 | == **Trim** == | ||
3711 | |||
3712 | **Function** | ||
3713 | |||
3714 | val = Trim(A1) | ||
3715 | |||
3716 | **Description** | ||
3717 | |||
3718 | Return A string in A1 without empty string next to it. | ||
3719 | |||
3720 | **Parameters** | ||
3721 | |||
3722 | * **A1: **The operated string | ||
3723 | * **val: **Returned value | ||
3724 | |||
3725 | **Example** | ||
3726 | |||
3727 | //{{code language="lua"}}@W_HDW1=Trim(" ab "){{/code}}// | ||
3728 | |||
3729 | **Result: **@W_HDW1="ab" | ||
3730 | |||
3731 | == **UCase** == | ||
3732 | |||
3733 | **Function** | ||
3734 | |||
3735 | val = UCase(A1) | ||
3736 | |||
3737 | **Description** | ||
3738 | |||
3739 | Capitalize the string data, and then assign the value to val. | ||
3740 | |||
3741 | **Parameters** | ||
3742 | |||
3743 | * **A1: **Operated string, address or variable. | ||
3744 | * **Val: **Returned value | ||
3745 | |||
3746 | **Example** | ||
3747 | |||
3748 | //{{code language="lua"}}@W_HDW1=ucase("abcd") 'Capitalize abcd then assign the value to HDW1{{/code}}// | ||
3749 | |||
3750 | **Result: **@W_HDW1="ABCD" | ||
3751 | |||
3752 | == **Variable** == | ||
3753 | |||
3754 | **Description** | ||
3755 | |||
3756 | A variable is any factor, trait, or condition that could exist in differing amounts or types. | ||
3757 | |||
3758 | **Define variable** | ||
3759 | |||
3760 | Use Dim to define variable in script. The variable could be string, floating, integer. | ||
3761 | |||
3762 | **Example:** | ||
3763 | |||
3764 | {{code language="lua"}} | ||
3765 | Dim a as floating ‘define variable {a} as a floating. | ||
3766 | |||
3767 | Dim b,c,d as integer‘define variable {b,c,d} as integer | ||
3768 | {{/code}} | ||
3769 | |||
3770 | **Naming rules** | ||
3771 | |||
3772 | The first letter needs to be English letter. | ||
3773 | |||
3774 | No symbols. | ||
3775 | |||
3776 | Maximum character length 15 allowed. | ||
3777 | |||
3778 | == **W2B** == | ||
3779 | |||
3780 | **Function** | ||
3781 | |||
3782 | W2B(A1, A2, A3) | ||
3783 | |||
3784 | **Description** | ||
3785 | |||
3786 | Replace the high endian of [A2]+1 with the high endian of A2. | ||
3787 | |||
3788 | **Parameters** | ||
3789 | |||
3790 | * **A1:** operated address. | ||
3791 | * **A2:** source address. | ||
3792 | * **A3: **the conversion length. | ||
3793 | |||
3794 | **Returned value:** none. | ||
3795 | |||
3796 | **Example** | ||
3797 | |||
3798 | {{code language="lua"}} | ||
3799 | @W_HDW0 = 4660 'assign 16bit value 1234 to HDW0. | ||
3800 | |||
3801 | @W_HDW1=0x5678 'assign 16bit value 5678 to HDW1. | ||
3802 | |||
3803 | @W_HDW2 = 0x2425 'assign 16bit value 2425 to HDW1. | ||
3804 | |||
3805 | @W_HDW3 = 0x3536 'assign 16bit value 3536 to HDW0. | ||
3806 | |||
3807 | @W_HDW4 = 0x1415 'assign 16bit value 1415 to HDW0. | ||
3808 | |||
3809 | W2B(@W_HDW20,@W_HDW0, @W_HDW10) | ||
3810 | |||
3811 | @W_HDW10=1 ‘save the high endian {34} of HDW0 to HDW20. | ||
3812 | {{/code}} | ||
3813 | |||
3814 | **Result:** @W_HDW20=0x34, @W_HDW21=0, @W_HDW22=0 | ||
3815 | |||
3816 | == **W2D** == | ||
3817 | |||
3818 | **Function** | ||
3819 | |||
3820 | W2D(A1, A2) | ||
3821 | |||
3822 | **Description** | ||
3823 | |||
3824 | Convert the unsigned Word to unsigned Dword and save the result in A1. | ||
3825 | |||
3826 | **Parameters** | ||
3827 | |||
3828 | * **A1: **operated address . | ||
3829 | * **A2:** source address. | ||
3830 | |||
3831 | Returned value. | ||
3832 | |||
3833 | **Example** | ||
3834 | |||
3835 | Unsigned decimal word | ||
3836 | |||
3837 | (% class="box" %) | ||
3838 | ((( | ||
3839 | //@W_HDW0 = 1234 'assign 1234 to HDW0.// | ||
3840 | |||
3841 | //W2D(@W_HDW2, @W_HDW0) 'convert unsigned word {1234} from HDW0 to Dword and save in HDW2// | ||
3842 | ))) | ||
3843 | |||
3844 | **Result:** @W_HDW0=12345, @W_HDW2=12345, @W_HDW3=0 | ||
3845 | |||
3846 | Signed decimal word | ||
3847 | |||
3848 | (% class="box" %) | ||
3849 | ((( | ||
3850 | //@W_HDW0 = -12345 'assign value to HDW0: convert {-12344} to unsigned decimal word is {53191}.// | ||
3851 | |||
3852 | //W2D(@W_HDW2, @W_HDW0) 'save unsigned Dword to HDW0// | ||
3853 | ))) | ||
3854 | |||
3855 | **Result: **@W_HDW0=-12345,@W_HDW2=53191,@W_HDW3=0 | ||
3856 | |||
3857 | == **W2F** == | ||
3858 | |||
3859 | **Function** | ||
3860 | |||
3861 | A1 = W2F (A2) | ||
3862 | |||
3863 | **Description** | ||
3864 | |||
3865 | Convert a 16bit integer to a 32bit floating, and then save to the next word of A1. | ||
3866 | |||
3867 | Parameters | ||
3868 | |||
3869 | * **A1:** operated address. | ||
3870 | * **A2:** source address. | ||
3871 | |||
3872 | **Returned value:** none. | ||
3873 | |||
3874 | **Example** | ||
3875 | |||
3876 | A1, A2 are addresses | ||
3877 | |||
3878 | (% class="box" %) | ||
3879 | ((( | ||
3880 | //@W_HDW0 = 1234 ' assign unsigned word {1234} HDW0 @W_HDW1=W 2F(@W_HDW0) ‘ Convert {1234} to a 32bit floating and then save to HDW1, HDW2.// | ||
3881 | ))) | ||
3882 | |||
3883 | **Result: **@W_HDW1=1234'32bit floating | ||
3884 | |||
3885 | {{code language="lua"}} | ||
3886 | A1 is an address,A2 is variable | ||
3887 | |||
3888 | dim a as integer | ||
3889 | |||
3890 | a=134 'define a integer 134 to a, | ||
3891 | |||
3892 | @W_HDW2=W2F (a) 'convert to 32bit floating save to HDW1, HDW2. | ||
3893 | {{/code}} | ||
3894 | |||
3895 | **Result: **@W_HDW1=134' 32bit floating | ||
3896 | |||
3897 | == **W2S** == | ||
3898 | |||
3899 | **Function** | ||
3900 | |||
3901 | W2S(A1,A2,S1) | ||
3902 | |||
3903 | **Description** | ||
3904 | |||
3905 | Convert integer word in address A1 text as S1 format, and then save to A2. | ||
3906 | |||
3907 | **Parameters** | ||
3908 | |||
3909 | * **A1:** operated address. | ||
3910 | * **A2:** source address. | ||
3911 | * **S1:** saving format. | ||
3912 | ** d format: Decimal format.d: Real data length.Md: Designated data length. 0md: Designated data length if the length is shorter than m adds 0 at the left. | ||
3913 | ** format: Unsigned octal format. Mo and 0mo is also applied. | ||
3914 | ** x format: unsigned Hex integer format ?Mx and 0mx is also applied. | ||
3915 | ** c format: ASCII format. | ||
3916 | |||
3917 | **Example** | ||
3918 | |||
3919 | Decimal format | ||
3920 | |||
3921 | {{code language="lua"}} | ||
3922 | @W_HDW1=1456'assign value {1456} to HDW1. | ||
3923 | |||
3924 | W2S("@W_HDW1", "@W_HDW10", "6d") ' convert{1456} to decimal text and save to HDW10. | ||
3925 | {{/code}} | ||
3926 | |||
3927 | **Result: **@W_HDW10 shown "1456" | ||
3928 | |||
3929 | 0md | ||
3930 | |||
3931 | {{code language="lua"}} | ||
3932 | @W_HDW1=1456 ' assign value {1456} to HDW1 | ||
3933 | |||
3934 | W2S("@W_HDW1", "@W_HDW10", "06d") ' convert{1456} to integer decimal text and add 2 {0} on the left of the data then save to HDW10. | ||
3935 | {{/code}} | ||
3936 | |||
3937 | **Result:** @W_HDW10 show text "001456" | ||
3938 | |||
3939 | == **WaitEthernetStart** == | ||
3940 | |||
3941 | **Function** | ||
3942 | |||
3943 | WaitEthernetStart (A1) | ||
3944 | |||
3945 | **Description** | ||
3946 | |||
3947 | Waiting for Ethernet to start, it will extend the HMI start up time (only added in PI i series, Ethernet start up is earlier than HMI in other PI series) | ||
3948 | |||
3949 | **Parameters** | ||
3950 | |||
3951 | * **A1: **Waiting timeout (1~~20s) | ||
3952 | ** If A1=0, the wait timeout is 10s; | ||
3953 | ** If A1>20, the wait timeout is 20s; | ||
3954 | |||
3955 | **Returned value:** None | ||
3956 | |||
3957 | **Example** | ||
3958 | |||
3959 | //WaitEthernetStart (15)// | ||
3960 | |||
3961 | ‘The maximum waiting time is 15 seconds. If Ethernet is not started within 15 seconds, HMI will start the system and no longer wait for ethernet. | ||
3962 | |||
3963 | == **WHILE ... WEND** == | ||
3964 | |||
3965 | **Function** | ||
3966 | |||
3967 | While condition | ||
3968 | |||
3969 | [statements] | ||
3970 | |||
3971 | Wend | ||
3972 | |||
3973 | **Description** | ||
3974 | |||
3975 | If the condition is true, then all the commands before Wend in the statement will be executed then recheck the condition, if the condition is false, the command after Wend will be executed. | ||
3976 | |||
3977 | **Parameters** | ||
3978 | |||
3979 | * **Condition: **Number or string, the result represents as True or False. | ||
3980 | |||
3981 | **Returned value:** None. | ||
3982 | |||
3983 | **Example** | ||
3984 | |||
3985 | {{code language="lua"}} | ||
3986 | while @W_HDW1>50 'the condition is the value of HDW1 bigger than 50. | ||
3987 | |||
3988 | @W_HDW1=@W_HDW1-1 'when the condition is true, execute subtract 1 from 1HDW. | ||
3989 | |||
3990 | wend | ||
3991 | |||
3992 | @W_HDW2=@W_HDW2+1 ' when the condition is false, execute add 1 from 1HDW. | ||
3993 | {{/code}} | ||
3994 | |||
3995 | **Result:** If HDW1=60, after executed; HDW1=50, if the condition is true. | ||
3996 | |||
3997 | == **WriteAddr** == | ||
3998 | |||
3999 | **Function** | ||
4000 | |||
4001 | WriteAddr(A1,A2) | ||
4002 | |||
4003 | **Description** | ||
4004 | |||
4005 | Assign the value from A2 to address A1. | ||
4006 | |||
4007 | **Parameters** | ||
4008 | |||
4009 | * **A1:** operated address | ||
4010 | * **A2:** source address | ||
4011 | |||
4012 | **Returned value:** None. | ||
4013 | |||
4014 | **Example** | ||
4015 | |||
4016 | {{code language="lua"}} | ||
4017 | dim f as integer ' integer f | ||
4018 | |||
4019 | f=13 ' assign the value 13 to f | ||
4020 | |||
4021 | WriteAddr("@W_HDW1",f) ' write the value to HDW1. | ||
4022 | |||
4023 | WriteAddr("@W_HDW10",@W_HDW2) ' write the value from HDW2 to HDW10. | ||
4024 | {{/code}} | ||
4025 | |||
4026 | **Result:** | ||
4027 | |||
4028 | * HDW1=13 | ||
4029 | * HDW10= HDW2'IF HDW2=1456,Then HDW10=1456;IF HDW2=-123,Then HDW10=-123 | ||
4030 | |||
4031 | == **WriteWordToFile** == | ||
4032 | |||
4033 | **Function** | ||
4034 | |||
4035 | WriteWordToFile (A1,A2,A3,A4,A5,A6) | ||
4036 | |||
4037 | **Description** | ||
4038 | |||
4039 | Write data of designated length to specified file | ||
4040 | |||
4041 | **Parameters** | ||
4042 | |||
4043 | A1: File location (value is an integer); | ||
4044 | |||
4045 | In HMI: | ||
4046 | |||
4047 | * =0: Recipe folder in HMI flash; | ||
4048 | * =1: Custom folder in UDisk (USB flash disk); | ||
4049 | * = 2: Custom folder in SD card. | ||
4050 | * =3: Custom folder in HMI flash; | ||
4051 | |||
4052 | In simulator: | ||
4053 | |||
4054 | * = 0: D:/Recipe/ | ||
4055 | * = 1: C:/WECON/CustomFileDir/ | ||
4056 | * = 2: C:/WECON/CustomFileDir/ | ||
4057 | * = 3: C:/WECON/CustomFileDir/ | ||
4058 | |||
4059 | **✎Note: **A1 can be an address, variable or value. | ||
4060 | |||
4061 | A2: File name (value is a string); | ||
4062 | |||
4063 | Input the file name want to write. | ||
4064 | |||
4065 | **✎Note: **A2 must be an address, and the length of the file name cannot exceed 32 characters. | ||
4066 | |||
4067 | A3: Data start address (value is a string); | ||
4068 | |||
4069 | Input the data want to write | ||
4070 | |||
4071 | **✎Note: **A3 must be the address. | ||
4072 | |||
4073 | A4: Data length (value is an integer) | ||
4074 | |||
4075 | Set the length of the data to be written (unit:word) | ||
4076 | |||
4077 | **✎Note: **A4 can be an address , variable or value. | ||
4078 | |||
4079 | A5: Return value (value is an integer) | ||
4080 | |||
4081 | * = 1: Successfully written | ||
4082 | * = 2: Failed to open the folder | ||
4083 | * = 3: Read address error | ||
4084 | * = 4: File writing error | ||
4085 | * = 5: The file already exists | ||
4086 | |||
4087 | **✎Note: **A5 must be an address. | ||
4088 | |||
4089 | A6: Folder name (value is a string); | ||
4090 | |||
4091 | Input the folder where to be written the file. | ||
4092 | |||
4093 | (% class="box infomessage" %) | ||
4094 | ((( | ||
4095 | **✎Note: **A6 can be an address or a variable or a character string, and the length of the folder name cannot exceed 32 characters | ||
4096 | ))) | ||
4097 | |||
4098 | **Example** | ||
4099 | |||
4100 | (% class="box" %) | ||
4101 | ((( | ||
4102 | WriteWordToFile(@W_HDW1254,"@W_HDW4200","@W_HDW1000",@W_HDW4000,"@W_HDW4100", @W_HDW4300)'Write the @W_HDW4000 words in the address @W_HDW1000 to the file @W_HDW4200 in directory @W_HDW4300 specified location by @W_HDW1254 | ||
4103 | ))) |