Wiki source code of 08 Macro Script

Last modified by Jett on 2024/11/19 11:03

Show last authors
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 )))