Changes for page 01 Lua Functions

Last modified by Theodore Xu on 2023/10/26 10:51

From version 5.4
edited by Leo
on 2022/06/16 17:20
Change comment: Update document after refactoring.
To version 5.14
edited by Stone Wu
on 2022/07/12 09:50
Change comment: (Autosaved)

Summary

Details

Page properties
Author
... ... @@ -1,1 +1,1 @@
1 -XWiki.Leo
1 +XWiki.Stone
Content
... ... @@ -1,70 +1,66 @@
1 -= **1 Interface Description** =
1 += **1 Interface description** =
2 2  
3 -== **1.1 Data type definition** ==
3 +== **Data type definition** ==
4 4  
5 -
6 6  |=**Type**|=**Description**
7 7  |=nil|Null
8 -|=boolean|Boolean, the value is true or false
9 -|=number|Integer or floating point, signed or unsigned
7 +|=boolean|Boolean (the value is true or false)
8 +|=number|Integer or floating point (signed or unsigned)
10 10  |=string|String
11 11  |=table|Table
12 12  |=function|Functions
13 13  
14 -== **1.2 Built-in function library clipping** ==
13 +== **Built-in function library clipping** ==
15 15  
16 16  Full features supported: coroutine/debug/ math/ package/ string/ table/ utf8
17 17  
18 -//,,Some features supported (available in []):** **os[clock/ date/ difftime/ time],,//
17 +//Some features supported (available in []):** **os[clock/ date/ difftime/ time]//
19 19  
20 -//,,Not supported: io/ file,,//
19 +//Not supported: io/ file//
21 21  
22 -== **1.3 Return value description** ==
21 +== **Return value description** ==
23 23  
24 24  The function return type multi means multiple return values (at least 2), usually:
25 25  
26 -//,,1st: nil;,,//
25 +//1st: nil//
27 27  
28 -//,,2nd: the error message;,,//
27 +//2nd: the error message//
29 29  
30 30  (((
31 -== **1.4 Function parameter description** ==
30 +== **Function parameter description** ==
32 32  )))
33 33  
34 -**Assume the function prototype:**
33 +Suppose a function prototype is defined:
35 35  
36 -|(((
37 -//student(string name, number age[, number class])//
35 +{{code language="LUA"}}
36 +student(string name, number age[, number class])
38 38  
39 -**Function:**
38 +Function:
40 40  
41 41  Register a student
42 42  
43 -**Parameters:**
42 +Parameters:
44 44  
45 -//name//: student name
44 +name: student name
46 46  
47 -//age//: student age
46 +age: student age
48 48  
49 -//[class=1]//: Student class
48 +[class=1]: Student class
50 50  
51 -**Return:**
50 +Return:
52 52  
53 53  Succeed: true
54 54  
55 55  Failed: multi
56 -)))
55 +{{/code}}
57 57  
58 -**Comment**
57 +**Explanation**
59 59  
60 -1.string name indicates that the first parameter name is a string
59 +1. string name indicates that the first parameter name is a string
60 +1. number age indicates that the second parameter age is numeric
61 +1. [, number class] indicates that the third parameter class is a numeric value, and it is optional. Specify the default class in class 1 in the parameter description.
62 +1. **Any parameter in the [] is considered to be an optional parameter, and may not be transmitted when called. The default value will be given in the parameter description.**
61 61  
62 -2.number age indicates that the second parameter age is numeric
63 -
64 -3. [, number class] indicates that the third parameter class is a numeric value, and it is optional. Specify the default class in class 1 in the parameter description.
65 -
66 -4. Any parameter in the brackets of [] is considered to be an optional parameter, and may not be transmitted when called. The default value will be given in the parameter description.
67 -
68 68  **Call example**
69 69  
70 70  |(((
... ... @@ -93,28 +93,23 @@
93 93  
94 94  **Comment**
95 95  
96 -1.From the print result, the second line of the first line is successfully called and returns true; the third line fails the call, the error message is translated as: the bar student has been registered, and there is indeed an error in the code.
92 +1. From the print result, the first line and the second line are successfully called and returns true; the third line fails the call, the error message is translated as: the bar student has been registered, and there is indeed an error in the code.
93 +1. The fourth line of code uses two variables to receive the return value. The call failed, the first variable stat is nil, and the second variable err stores the error message. Then print it out using print, which is the output of the third line. This example shows how to capture and view the error message.
97 97  
98 -2.The fourth line of code uses two variables to receive the return value. The call failed, the first variable stat is nil, and the second variable err stores the error message. Then print it out using print, which is the output of the third line. This example shows how to capture and view the error message.
95 +== **Modification of print function** ==
99 99  
100 -== **1.5 Modification of the Print Function** ==
97 +For the convenience of remote development, the print data is sent to the front end (web page) by means of network transmission, and the user can see the result of the debug output, because it consumes certain data and occupies the bandwidth of the server (or occupies server resources). So the following restrictions are made.
101 101  
102 -For the convenience of remote development, the print data is sent to the front end (web page) by means of network transmission, and the user can see the result of the debug output, because it consumes certain data and occupies the bandwidth of the server (or occupies server resources). So make the following restrictions:
99 +1. **Interval limit: **When debugging, transfer once every 2~~3 seconds;
100 +1. **Data limit: **The transfer data cannot be larger than 1.5KB in a single transmission, otherwise the extra part will be ignored;
101 +1. **Transmission limit: **The data transmission will be stopped automatically after the debugging windows is not closed normally. Only when it is in the debugging window and the switch is on, there is data transmission;
103 103  
104 -**1.Interval limit: **When debugging, transfer once every 2~~3 seconds;
105 -
106 -**2.Data limit: **The transfer data cannot be larger than 1.5KB, and the extra part will be ignored;
107 -
108 -**3.Transmission limit: **The data transmission will be stopped automatically after the debugging windows is not closed normally. Only when it is in the debugging window and the switch is on, there is data transmission;
109 -
110 110  Users should pay attention to avoid printing a lot of useless information, should minimize the debug output
111 111  
112 112  In addition, please refer to the front-end documentation for how to use view debugging.
113 113  
114 114  (((
115 -= **2 Address Operation** =
116 -
117 -
108 += **2 Address operation** =
118 118  )))
119 119  
120 120  |=16-bit data formal|=HLword|=32-bit data formal|=HLword|= 64-bit data formal|=HLword
... ... @@ -147,20 +147,17 @@
147 147  43218765
148 148  )))|10
149 149  
150 -* If HLword enters any other value, it will be treated as invalid.
141 + Table 2-1
151 151  
152 - Demo:  Reads a 32-bit floating-point number at position D0 of PLC
143 +(% class="box errormessage" %)
144 +(((
145 +**✎Note: **If HLword enters any other value, it will be treated as invalid.
146 +)))
153 153  
148 +== **addr_getshort(string addr[, number type, number hlword])** ==
154 154  
150 +**Function:** Read 16-bit signed decimal address
155 155  
156 -[[image:企业微信截图_20210506180640.png||height="301" width="600" class="img-thumbnail"]]
157 -
158 -== **2.1 addr_getshort(string addr[, number type, number hlword])** ==
159 -
160 -**Function:**
161 -
162 -Read 16-bit signed decimal address
163 -
164 164  **Parameters:**
165 165  
166 166  //addr//: address
... ... @@ -178,13 +178,11 @@
178 178  Failed: multi
179 179  
180 180  (((
181 -== **2.2 addr_setshort(string addr, number num[, number type, number hlword])** ==
169 +== **addr_setshort(string addr, number num[, number type, number hlword])** ==
182 182  )))
183 183  
184 -**Function:**
172 +**Function:** Write 16-bit signed decimal address
185 185  
186 -Write 16-bit signed decimal address
187 -
188 188  **Parameters:**
189 189  
190 190  //addr//: address
... ... @@ -202,13 +202,11 @@
202 202  Failed: multi
203 203  
204 204  (((
205 -== **2.3 addr_getword(string addr[, number type, number hlword])** ==
191 +== **addr_getword(string addr[, number type, number hlword])** ==
206 206  )))
207 207  
208 -**Function:**
194 +**Function:** Read 16-bit unsigned decimal address
209 209  
210 -Read 16-bit unsigned decimal address
211 -
212 212  **Parameters:**
213 213  
214 214  //addr//: address
... ... @@ -224,13 +224,11 @@
224 224  Failed: multi
225 225  
226 226  (((
227 -== **2.4 addr_setword(string addr, number num[, number type, number hlword])** ==
211 +== **addr_setword(string addr, number num[, number type, number hlword])** ==
228 228  )))
229 229  
230 -**Function:**
214 +**Function:**Write 16-bit unsigned decimal address
231 231  
232 -Write 16-bit unsigned decimal address
233 -
234 234  **Parameters:**
235 235  
236 236  //addr//: address
... ... @@ -248,13 +248,11 @@
248 248  Failed: multi
249 249  
250 250  (((
251 -== **2.5 addr_getint(string addr[, number type, number hlword])** ==
233 +== **addr_getint(string addr[, number type, number hlword])** ==
252 252  )))
253 253  
254 -**Function:**
236 +**Function:** Read 32-bit signed decimal address
255 255  
256 -Read 32-bit signed decimal address
257 -
258 258  **Parameters:**
259 259  
260 260  //addr//: address
... ... @@ -270,13 +270,11 @@
270 270  Failed: multi
271 271  
272 272  (((
273 -== **2.6 addr_setint(string addr, number num[, number type, number hlword])** ==
253 +== **addr_setint(string addr, number num[, number type, number hlword])** ==
274 274  )))
275 275  
276 -**Function:**
256 +**Function:** Write 32-bit signed decimal address
277 277  
278 -Write 32-bit signed decimal address
279 -
280 280  **Parameters:**
281 281  
282 282  //addr//: address
... ... @@ -294,13 +294,11 @@
294 294  Failed: multi
295 295  
296 296  (((
297 -== **2.7 addr_getdword(string addr[, number type, number hlword])** ==
275 +== **addr_getdword(string addr[, number type, number hlword])** ==
298 298  )))
299 299  
300 -**Function:**
278 +**Function:** Read 32-bit unsigned decimal address
301 301  
302 -Read 32-bit unsigned decimal address
303 -
304 304  **Parameters:**
305 305  
306 306  //addr//: address
... ... @@ -316,13 +316,11 @@
316 316  Failed: multi
317 317  
318 318  (((
319 -== **2.8 addr_setdword(string addr, number num[, number type, number hlword])** ==
295 +== **addr_setdword(string addr, number num[, number type, number hlword])** ==
320 320  )))
321 321  
322 -**Function:**
298 +**Function:** Write 32-bit unsigned decimal address
323 323  
324 -Write 32-bit unsigned decimal address
325 -
326 326  **Parameters:**
327 327  
328 328  //addr//: address
... ... @@ -340,13 +340,11 @@
340 340  Failed: multi
341 341  
342 342  (((
343 -== **2.9 addr_getbit(string addr[, number type])** ==
317 +== **addr_getbit(string addr[, number type])** ==
344 344  )))
345 345  
346 -**Function:**
320 +**Function:** Read a bit of the register address
347 347  
348 -Read a bit of the register address
349 -
350 350  **Parameters:**
351 351  
352 352  //addr//: address
... ... @@ -362,13 +362,11 @@
362 362  Failed: multi
363 363  
364 364  (((
365 -== **2.10 addr_setbit(string addr, number num[, number type])** ==
337 +== **addr_setbit(string addr, number num[, number type])** ==
366 366  )))
367 367  
368 -**Function:**
340 +**Function:** Write a bit of the register address
369 369  
370 -Write a bit of the register address
371 -
372 372  **Parameters:**
373 373  
374 374  //addr//: address
... ... @@ -386,13 +386,11 @@
386 386  Failed: multi
387 387  
388 388  (((
389 -== **2.11 addr_getfloat(string addr[, number type, number hlword])** ==
359 +== **addr_getfloat(string addr[, number type, number hlword])** ==
390 390  )))
391 391  
392 -**Function:**
362 +**Function:** Read 32-bit floating address
393 393  
394 -Read 32-bit floating address
395 -
396 396  **Parameters:**
397 397  
398 398  //addr//: address
... ... @@ -408,13 +408,11 @@
408 408  Failed: multi
409 409  
410 410  (((
411 -== **2.12 addr_setfloat(string addr, number num[, number type, number hlword])** ==
379 +== **addr_setfloat(string addr, number num[, number type, number hlword])** ==
412 412  )))
413 413  
414 -**Function:**
382 +**Function:** Write 32-bit floating address
415 415  
416 -Write 32-bit floating address
417 -
418 418  **Parameters:**
419 419  
420 420  //addr//: address
... ... @@ -432,13 +432,11 @@
432 432  Failed: multi
433 433  
434 434  (((
435 -== **2.13 addr_getdouble(string addr[, number type, number hlword])** ==
401 +== **addr_getdouble(string addr[, number type, number hlword])** ==
436 436  )))
437 437  
438 -**Function:**
404 +**Function:** Read 64-bit floating address
439 439  
440 -Read 64-bit floating address
441 -
442 442  **Parameters:**
443 443  
444 444  //addr//: address
... ... @@ -454,13 +454,11 @@
454 454  Failed: multi
455 455  
456 456  (((
457 -== **2.14 addr_setdouble(string addr, number num[, number type, number hlword])** ==
421 +== **addr_setdouble(string addr, number num[, number type, number hlword])** ==
458 458  )))
459 459  
460 -**Function:**
424 +**Function:** Write 64-bit floating address
461 461  
462 -Write 64-bit floating address
463 -
464 464  **Parameters:**
465 465  
466 466  addr: address
... ... @@ -478,13 +478,11 @@
478 478  Failed: multi
479 479  
480 480  (((
481 -== **2.15 addr_getstring(string addr, number length[, number type, number hlbyte])** ==
443 +== **addr_getstring(string addr, number length[, number type, number hlbyte])** ==
482 482  )))
483 483  
484 -**Function:**
446 +**Function:** Read the specified length string from address
485 485  
486 -Read the specified length string from address
487 -
488 488  **Parameters:**
489 489  
490 490  //addr//: address
... ... @@ -502,13 +502,11 @@
502 502  Failed: multi
503 503  
504 504  (((
505 -== **2.16 addr_setstring(string addr, string str[, number type, number hlbyte])** ==
465 +== **addr_setstring(string addr, string str[, number type, number hlbyte])** ==
506 506  )))
507 507  
508 -**Function:**
468 +**Function:** Write the specified length string to address
509 509  
510 -Write the specified length string to address
511 -
512 512  **Parameters:**
513 513  
514 514  //addr//: address
... ... @@ -526,13 +526,11 @@
526 526  Failed: multi
527 527  
528 528  (((
529 -== **2.17 addr_bmov(string dst, string src, number length)** ==
487 +== **addr_bmov(string dst, string src, number length)** ==
530 530  )))
531 531  
532 -**Function:**
490 +**Function:** Copy data from source address to destination address
533 533  
534 -Copy data from source address to destination address
535 -
536 536  **Parameters:**
537 537  
538 538  //dst//: destination address
... ... @@ -548,13 +548,11 @@
548 548  **Failed: multi**
549 549  
550 550  (((
551 -== **2.18 addr_fill(string addr, number num, number length)** ==
507 +== **addr_fill(string addr, number num, number length)** ==
552 552  )))
553 553  
554 -**Function:**
510 +**Function:** Write the same value to consecutive addresses
555 555  
556 -Write the same value to consecutive addresses
557 -
558 558  **Parameters:**
559 559  
560 560  //addr//: address
... ... @@ -570,13 +570,11 @@
570 570  Failed: multi
571 571  
572 572  (((
573 -== **2.19 addr_newnoaddr(string addr, number offset)** ==
527 +== **addr_newnoaddr(string addr, number offset)** ==
574 574  )))
575 575  
576 -**Function:**
530 +**Function:** Offset address value relative to //addr//
577 577  
578 -Offset address value relative to //addr//
579 -
580 580  **Parameters:**
581 581  
582 582  //addr//: address
... ... @@ -590,13 +590,11 @@
590 590  Failed: multi
591 591  
592 592  (((
593 -== **2.20 addr_newstataddr(string addr, number offset)** ==
545 +== **addr_newstataddr(string addr, number offset)** ==
594 594  )))
595 595  
596 -**Function:**
548 +**Function:** Offset station number relative to //addr //station number
597 597  
598 -Offset station number relative to //addr //station number
599 -
600 600  **Parameters:**
601 601  
602 602  //addr//: address
... ... @@ -609,12 +609,10 @@
609 609  
610 610  Failed: multi
611 611  
612 -== **2.21 addr_gethex64(string addr[, number type, number hlword])** ==
562 +== **addr_gethex64(string addr[, number type, number hlword])** ==
613 613  
614 -**Function:**
564 +**Function:** Read 64-bit hexadecimal numbers
615 615  
616 -Read 64-bit hexadecimal numbers
617 -
618 618  **Parameters:**
619 619  
620 620  //addr//: address
... ... @@ -629,12 +629,10 @@
629 629  
630 630  Failed: multi
631 631  
632 -== **2.22 addr_sethex64(string addr, number num[, number type, number hlword])** ==
580 +== **addr_sethex64(string addr, number num[, number type, number hlword])** ==
633 633  
634 -**Function:**
582 +**Function:** Write 64-bit hexadecimal addresses
635 635  
636 -Write 64-bit hexadecimal addresses
637 -
638 638  **Parameters:**
639 639  
640 640  //addr//: address
... ... @@ -655,11 +655,11 @@
655 655  
656 656  Operations on the serial port such as read, write, etc. must use ':' for full mode calls, ie operations on an open serial object.
657 657  
658 -**Serial port name and mode:**
604 +**Serial port name and mode**
659 659  
660 660  The serial port configured in the communication configuration window cannot be configured again using the script. RS232 and RS458 (or RS422) can be used simultaneously, but RS422 and RS485 are mutually exclusive.For example, when the communication port is configured with COM1-485, the script can only open COM1-232, but not COM1-485/422. Similarly, when the communication port is configured with COM2-485, the script can only open COM2-232, but not COM2-485.
661 661  
662 -Attempting to use a script to open a serial port in an unsupported mode will result in an error directly, as below
608 +Attempting to use a script to open a serial port in an unsupported mode will result in an error directly, as below.
663 663  
664 664  |(((
665 665  local setup = {
... ... @@ -681,13 +681,11 @@
681 681  1. When the data bit is 8, the maximum value of data transmission is 255 (0xFF), which supports the transmission of any character.
682 682  
683 683  (((
684 -== **3.1 serial.open(table setup)** ==
630 +== **serial.open(table setup)** ==
685 685  )))
686 686  
687 -**Function:**
633 +**Function:** Enable one serial port
688 688  
689 -Enable one serial port
690 -
691 691  **Parameters:**
692 692  
693 693  //Setup// is a Lua table; it needs to contain the following fields
... ... @@ -721,17 +721,13 @@
721 721  Failed: multi
722 722  
723 723  (((
724 -== **3.2 serial.close(serial obj)** ==
668 +== **serial.close(serial obj)** ==
725 725  )))
726 726  
727 -**Function:**
671 +**Function:** Disable the serial port
728 728  
729 -Disable the serial port
673 +**Parameters: **//Obj //is the object returned by serial.open
730 730  
731 -**Parameters:**
732 -
733 -//Obj //is the object returned by serial.open
734 -
735 735  **Return:**
736 736  
737 737  Succeed: true
... ... @@ -739,13 +739,11 @@
739 739  Failed: multi
740 740  
741 741  (((
742 -== **3.3 serial:read(number bytes[, number timeout])** ==
682 +== **serial:read(number bytes[, number timeout])** ==
743 743  )))
744 744  
745 -**Function:**
685 +**Function:** Read the specified byte length serial port data
746 746  
747 -Read the specified byte length serial port data
748 -
749 749  **Parameters:**
750 750  
751 751  //bytes//: number of bytes
... ... @@ -759,15 +759,13 @@
759 759  Failed: multi
760 760  
761 761  (((
762 -== **3.4 serial:write(string data)** ==
700 +== **serial:write(string data)** ==
763 763  )))
764 764  
765 -**Function:**
703 +**Function:** Write the specified byte length to serial port data
766 766  
767 -Write the specified byte length to serial port data
705 +**Parameters: **
768 768  
769 -**Parameters:**
770 -
771 771  //data//: serial port data
772 772  
773 773  **Return:**
... ... @@ -777,13 +777,11 @@
777 777  Failed: multi
778 778  
779 779  (((
780 -== **3.5 serial:flush([number flag])** ==
716 +== **serial:flush([number flag])** ==
781 781  )))
782 782  
783 -**Function:**
719 +**Function:** Clear the serial port buffer
784 784  
785 -Clear the serial port buffer
786 -
787 787  **Parameters:**
788 788  
789 789  //[flag=2]// clear option: 0: read, 1: write, 2: read-write
... ... @@ -795,17 +795,13 @@
795 795  Failed: multi
796 796  
797 797  (((
798 -== **3.6 serial:close()** ==
732 +== **serial:close()** ==
799 799  )))
800 800  
801 -**Function:**
735 +**Function:** Close the serial port object
802 802  
803 -Close the serial port object
737 +**Parameters:** None
804 804  
805 -**Parameters:**
806 -
807 -None
808 -
809 809  **Return:**
810 810  
811 811  Succeed: true
... ... @@ -822,12 +822,10 @@
822 822  
823 823  **QoS value:**
824 824  
825 -0: Only push messages once, messages may be lost or duplicated. It can be used for environmental sensor data, it doesn't matter if lose a record, because there will be a second push message soon. This method is mainly used for normal APP push, but if the user smart device is not connected when the message is pushed, the message will be discarded, and the smart device will not be received when it is networked again.
755 +* 0: Only push messages once, messages may be lost or duplicated. It can be used for environmental sensor data, it doesn't matter if lose a record, because there will be a second push message soon. This method is mainly used for normal APP push, but if the user smart device is not connected when the message is pushed, the message will be discarded, and the smart device will not be received when it is networked again.
756 +* 1: The message is delivered at least once, but the message may be delivered repeatedly.
757 +* 2: The message was delivered exactly once. This level can be used in a billing system. In a billing system, repeated or missing messages can lead to incorrect results. This highest quality message push service can also be used for instant messaging APP pushes, ensuring that users only receive messages once.
826 826  
827 -1: The message is delivered at least once, but the message may be delivered repeatedly.
828 -
829 -2: The message was delivered exactly once. This level can be used in a billing system. In a billing system, repeated or missing messages can lead to incorrect results. This highest quality message push service can also be used for instant messaging APP pushes, ensuring that users only receive messages once.
830 -
831 831  **Retain flag:**
832 832  
833 833  0: not reserved;
... ... @@ -835,13 +835,11 @@
835 835  1: reserved
836 836  
837 837  (((
838 -== **4.1 mqtt.create(string serverurl, string clientid)** ==
766 +== **mqtt.create(string serverurl, string clientid)** ==
839 839  )))
840 840  
841 -**Function:**
769 +**Function:** Create an MQTT object
842 842  
843 -Create an MQTT object
844 -
845 845  **Parameters:**
846 846  
847 847  //serverurl //Server url
... ... @@ -863,17 +863,13 @@
863 863  Failed: multi
864 864  
865 865  (((
866 -== **4.2 mqtt.close(mqtt obj)** ==
792 +== **mqtt.close(mqtt obj)** ==
867 867  )))
868 868  
869 -**Function:**
795 +**Function:** Close the specified MQTT object (if the connected server will be disconnected automatically)
870 870  
871 -Close the specified MQTT object (if the connected server will be disconnected automatically)
797 +**Parameters: **//Obj //ithe objeced returned by mqtt.create
872 872  
873 -**Parameters:**
874 -
875 -//Obj //is the objeced returned by mqtt.create
876 -
877 877  **Return:**
878 878  
879 879  Succeed: true
... ... @@ -881,32 +881,25 @@
881 881  Failed: multi
882 882  
883 883  (((
884 -== **4.3 mqtt:connect(table conn[, table lwt, table cart])** ==
806 +== **mqtt:connect(table conn[, table lwt, table cart])** ==
885 885  )))
886 886  
887 -**Function:**
809 +**Function:**Establish a connection to the server
888 888  
889 -Establish a connection to the server
890 -
891 891  **Parameters:**
892 892  
893 893  //conn //is a Lua table and needs to contain the following fields
894 894  
895 -//string conn.username//, user name
815 +* //string conn.username//, user name
816 +* //string conn.password//, password
817 +* //number [conn.netway=0]//, networking method, if set error number will use Ethernet method
818 +** 0: Ethernet
819 +** 1: WIFI
820 +** 2: 4G
821 +** 3: 2G
822 +* //number [conn.keepalive=60]//, keep connected heartbeat interval, in seconds
823 +* //number [conn.cleansession=1]//, empty the session as described below:
896 896  
897 -//string conn.password//, password
898 -
899 -//number [conn.netway=0]//, networking method, if set error number will use Ethernet method
900 -
901 -* 0: Ethernet
902 -* 1: WIFI
903 -* 2: 4G
904 -* 3: 2G
905 -
906 -//number [conn.keepalive=60]//, keep connected heartbeat interval, in seconds
907 -
908 -//number [conn.cleansession=1]//, empty the session as described below:
909 -
910 910  This function is used to control the behavior when connecting and disconnecting, and the client and server will retain the session information. This information is used to guarantee "at least once" and "accurately once" delivery, as well as the subject of the client subscription, the user can choose to keep or ignore the session message, set as follows:
911 911  
912 912  * 1 (Empty): If a session exists and is 1, the previous session messages on the client and server are emptied.
... ... @@ -914,14 +914,11 @@
914 914  
915 915  //lwt// (Last Will and Testament) is a Lua table and needs to contain the following fields
916 916  
917 -//string lwt.topic//, topic
832 +* //string lwt.topic//, topic
833 +* //string lwt.message//, message
834 +* //number [lwt.qos=0]//, qos value
835 +* //number [lwt.retain=0]//, retain flag
918 918  
919 -//string lwt.message//, message
920 -
921 -//number [lwt.qos=0]//, qos value
922 -
923 -//number [lwt.retain=0]//, retain flag
924 -
925 925  **Return:**
926 926  
927 927  Succeed: true
... ... @@ -929,17 +929,13 @@
929 929  Failed: multi
930 930  
931 931  (((
932 -== **4.4 mqtt:disconnect([number timeout])** ==
844 +== **mqtt:disconnect([number timeout])** ==
933 933  )))
934 934  
935 -**Function:**
847 +**Function:** Disconnect from the MQTT server
936 936  
937 -Disconnect from the MQTT server
849 +**Parameters: **//[timeout=10000] //Disconnect waiting timeout, in milliseconds
938 938  
939 -**Parameters:**
940 -
941 -//[timeout=10000] //Disconnect waiting timeout, in milliseconds
942 -
943 943  **Return:**
944 944  
945 945  Succeed: true
... ... @@ -947,17 +947,13 @@
947 947  Failed: multi
948 948  
949 949  (((
950 -== **4.5 mqtt:isconnected()** ==
858 +== **mqtt:isconnected()** ==
951 951  )))
952 952  
953 -**Function:**
861 +**Function:** Test whether or not a client is currently connected to the MQTT server
954 954  
955 -Test whether or not a client is currently connected to the MQTT server
863 +**Parameters:** None
956 956  
957 -**Parameters:**
958 -
959 -None
960 -
961 961  **Return:**
962 962  
963 963  Succeed: true ~-~-Connected
... ... @@ -965,13 +965,11 @@
965 965  Failed: false ~-~- Unconnected and other unknowns
966 966  
967 967  (((
968 -== **4.6 mqtt:subscribe(string topic, number qos)** ==
872 +== **mqtt:subscribe(string topic, number qos)** ==
969 969  )))
970 970  
971 -**Function:**
875 +**Function: **Subscribe to the topic (before the subscription, the user must first call the connect method to connect to the server)
972 972  
973 -Subscribe to the topic (before the subscription, the user must first call the connect method to connect to the server)
974 -
975 975  **Parameters:**
976 976  
977 977  //topic//, topic name
... ... @@ -985,13 +985,11 @@
985 985  Failed: multi
986 986  
987 987  (((
988 -== **4.7 mqtt:unsubscribe(string topic)** ==
890 +== **mqtt:unsubscribe(string topic)** ==
989 989  )))
990 990  
991 -**Function:**
893 +**Function:** Unsubscribe topic
992 992  
993 -Unsubscribe topic
994 -
995 995  **Parameters:**
996 996  
997 997  //topic//, topic name
... ... @@ -1003,13 +1003,11 @@
1003 1003  Failed: multi
1004 1004  
1005 1005  (((
1006 -== **4.8 mqtt:publish(string topic, string message, number qos, number retain[, number timeout])** ==
906 +== **mqtt:publish(string topic, string message, number qos, number retain[, number timeout])** ==
1007 1007  )))
1008 1008  
1009 -**Function:**
909 +**Function:** Publish message
1010 1010  
1011 -Publish message
1012 -
1013 1013  **Parameters:**
1014 1014  
1015 1015  //topic//, topic name
... ... @@ -1029,17 +1029,13 @@
1029 1029  Failed: multi
1030 1030  
1031 1031  (((
1032 -== **4.9 mqtt:close()** ==
930 +== **mqtt:close()** ==
1033 1033  )))
1034 1034  
1035 -**Function:**
933 +**Function:** Close the mqtt object (the connection to the server will be automatically disconnected)
1036 1036  
1037 -Close the mqtt object (the connection to the server will be automatically disconnected)
935 +**Parameters:** None
1038 1038  
1039 -**Parameters:**
1040 -
1041 -None
1042 -
1043 1043  **Return:**
1044 1044  
1045 1045  Succeed: true
... ... @@ -1047,13 +1047,11 @@
1047 1047  Failed: multi
1048 1048  
1049 1049  (((
1050 -== **4.10 mqtt:on(string method, function callback)** ==
944 +== **mqtt:on(string method, function callback)** ==
1051 1051  )))
1052 1052  
1053 -**Function:**
947 +**Function:** Register event callback function
1054 1054  
1055 -Register event callback function
1056 -
1057 1057  **Parameters:**
1058 1058  
1059 1059  //method//, It can be message/arrived/offline, these 3 types of events
... ... @@ -1066,20 +1066,17 @@
1066 1066  
1067 1067  Parameter:
1068 1068  
1069 -//Topic//, topic name
961 +* //Topic//, topic name
962 +* //Message//, content
1070 1070  
1071 -//Message//, content
964 +**2."arrived" is published by publish, this function will be called after the publication arrives**
1072 1072  
1073 -**2.**"arrived" is published by publish, this function will be called after the publication arrives
1074 -
1075 1075  //Callback// prototype~:// function ()//
1076 1076  
1077 -Parameter:
968 +Parameter: None
1078 1078  
1079 -None
970 +**3.This function will be called after the "offline" connection is lost**
1080 1080  
1081 -**3.**This function will be called after the "offline" connection is lost
1082 -
1083 1083  //Callback// prototype~:// function (string cause)//
1084 1084  
1085 1085  Parameter:
... ... @@ -1093,17 +1093,13 @@
1093 1093  Failed: multi
1094 1094  
1095 1095  (((
1096 -== **4.11 mqtt:setup_cfg()** ==
985 +== **mqtt:setup_cfg()** ==
1097 1097  )))
1098 1098  
1099 -**Function:**
988 +**Function:** Cloud mode interface, to obtain MQTT information configured by the cloud platform
1100 1100  
1101 -Cloud mode interface, to obtain MQTT information configured by the cloud platform
990 +**Parameters:** None
1102 1102  
1103 -**Parameters:**
1104 -
1105 -None
1106 -
1107 1107  **Return:**
1108 1108  
1109 1109  //serverurl, clientid, conn, lwt, cart //(5 returns, respectively, server address, client ID, connection table, last word table, certificate table)
... ... @@ -1121,39 +1121,27 @@
1121 1121  Lua only has a table data structure, so all arrays and key-value objects of json will be returned as a table.
1122 1122  
1123 1123  (((
1124 -== **5.1 json.encode( lua_object )** ==
1009 +== **json.encode( lua_object )** ==
1125 1125  )))
1126 1126  
1127 -**Function:**
1012 +**Function: **Convert lua data type to json string
1128 1128  
1129 -Convert lua data type to json string
1014 +**Parameters: **Lua data type (including boolean, number, string, table)
1130 1130  
1131 -**Parameters:**
1016 +**Return:** Json format string
1132 1132  
1133 -Lua data type (including boolean, number, string, table)
1134 -
1135 -**Return:**
1136 -
1137 -Json format string
1138 -
1139 1139  (((
1140 -== **5.2 json.decode(string json_string)** ==
1019 +== **json.decode(string json_string)** ==
1141 1141  )))
1142 1142  
1143 -**Function:**
1022 +**Function:** Convert json string to lua data type
1144 1144  
1145 -Convert json string to lua data type
1024 +**Parameters: **//json_string//, string of json data structure
1146 1146  
1147 -**Parameters:**
1026 +**Return: **Lua data type
1148 1148  
1149 -//json_string//, string of json data structure
1150 -
1151 -**Return:**
1152 -
1153 -Lua data type
1154 -
1155 1155  (((
1156 -== **5.3 json.null** ==
1029 +== **json.null** ==
1157 1157  )))
1158 1158  
1159 1159  **Function:**
... ... @@ -1160,32 +1160,24 @@
1160 1160  
1161 1161  This method is used when assembling json data, which is equivalent to null in json. If the user directly uses json.null() to return the address of the function, it must be valid with the use of encode.
1162 1162  
1163 -**Parameters:**
1036 +**Parameters:** None
1164 1164  
1165 -None
1038 +**Return: **None
1166 1166  
1167 -**Return:**
1168 -
1169 -None
1170 -
1171 1171  = **6 Cloud mode** =
1172 1172  
1173 1173  The cloud interface is only used in cloud mode, and V-NET mode is not available.
1174 1174  
1175 1175  (((
1176 -== **6.1 bns_get_alldata()** ==
1045 +== **bns_get_alldata()** ==
1177 1177  )))
1178 1178  
1179 -**Function:**
1048 +**Function:** Obtain all monitoring points (point table) data configured by the end user
1180 1180  
1181 -Obtain all monitoring points (point table) data configured by the end user
1050 +**✎Note: **Assuming there are timing scripts A and B with a period of 1 second, if this function is called in script A, the data will not be obtained if called in script B
1182 1182  
1183 -Note: Assuming there are timing scripts A and B with a period of 1 second, if this function is called in script A, the data will not be obtained if called in script B
1052 +**Parameters:** None
1184 1184  
1185 -**Parameters:**
1186 -
1187 -None
1188 -
1189 1189  **Return:**
1190 1190  
1191 1191  Succeed: table two-dimensional array, the structure is as follows
... ... @@ -1215,13 +1215,11 @@
1215 1215  Failed: //table// empty table
1216 1216  
1217 1217  (((
1218 -== **6.2 bns_get_config(string from)** ==
1083 +== **bns_get_config(string from)** ==
1219 1219  )))
1220 1220  
1221 -**Function:**
1086 +**Function:** Obtain custom configuration parameters with the specified from type
1222 1222  
1223 -Obtain custom configuration parameters with the specified from type
1224 -
1225 1225  **parameter:**
1226 1226  
1227 1227  from type, there are the following two categories, the string must be all lowercase
... ... @@ -1239,13 +1239,11 @@
1239 1239  Failed~:// table// empty table
1240 1240  
1241 1241  (((
1242 -== **6.3 bns_get_data(string name, string data)** ==
1105 +== **bns_get_data(string name, string data)** ==
1243 1243  )))
1244 1244  
1245 -**Function:**
1108 +**Function:**write data to the name of the monitoring point
1246 1246  
1247 -write data to the name of the monitoring point
1248 -
1249 1249  **parameter:**
1250 1250  
1251 1251  //name //The name of the monitoring point
... ... @@ -1259,7 +1259,7 @@
1259 1259  Failed: nil
1260 1260  
1261 1261  (((
1262 -== **6.4 bns_get_data(string name)** ==
1123 +== **bns_get_data(string name)** ==
1263 1263  )))
1264 1264  
1265 1265  **Function:**
... ... @@ -1277,17 +1277,13 @@
1277 1277  Failed: nil
1278 1278  
1279 1279  (((
1280 -== **6.5 bns_get_datadesc()** ==
1141 +== **bns_get_datadesc()** ==
1281 1281  )))
1282 1282  
1283 -**Function:**
1144 +**Function: **Obtain all configured communication ports and monitoring point information
1284 1284  
1285 -Obtain all configured communication ports and monitoring point information
1146 +**Parameters:** None
1286 1286  
1287 -**Parameters:**
1288 -
1289 -None
1290 -
1291 1291  **Return:**
1292 1292  
1293 1293  Succeed: table three-dimensional array, the structure is as follows
... ... @@ -1340,17 +1340,13 @@
1340 1340  Failed~:// table// empty table
1341 1341  
1342 1342  (((
1343 -== **6.6 bns_get_machineinfo()** ==
1200 +== **bns_get_machineinfo()** ==
1344 1344  )))
1345 1345  
1346 -**Function:**
1203 +**Function:** get machine information
1347 1347  
1348 -get machine information
1205 +**Parameters:** None
1349 1349  
1350 -**Parameters:**
1351 -
1352 -None
1353 -
1354 1354  **Return:**
1355 1355  
1356 1356  Succeed: 3 string type results (model, machine code, software version)
... ... @@ -1358,13 +1358,11 @@
1358 1358  Failed: nil
1359 1359  
1360 1360  (((
1361 -== **6.7 bns_get_groupdata(string name)** ==
1214 +== **bns_get_groupdata(string name)** ==
1362 1362  )))
1363 1363  
1364 -**Function:**
1217 +**Function:** Get all monitoring point data under the specified group name
1365 1365  
1366 -Get all monitoring point data under the specified group name
1367 -
1368 1368  **parameter:**
1369 1369  
1370 1370  //Name  // group name
... ... @@ -1376,17 +1376,13 @@
1376 1376  Failed: //table// empty table
1377 1377  
1378 1378  (((
1379 -== **6.8 bns_get_groupdesc()** ==
1230 +== **bns_get_groupdesc()** ==
1380 1380  )))
1381 1381  
1382 -**Function:**
1233 +**Function:** Get all group information
1383 1383  
1384 -Get all group information
1235 +**Parameters:** None
1385 1385  
1386 -**Parameters:**
1387 -
1388 -None
1389 -
1390 1390  **Return:**
1391 1391  
1392 1392  Succeed: //table// two-dimensional array, the structure is as follows
... ... @@ -1400,17 +1400,13 @@
1400 1400  Failed: //table  // empty table
1401 1401  
1402 1402  (((
1403 -== **6.9 bns_get_onecache(string msg)** ==
1250 +== **bns_get_onecache(string msg)** ==
1404 1404  )))
1405 1405  
1406 -**Function:**
1253 +**Function:** Save a message to the cache file, which can be stored after power failure. Store up to 2000 items, delete the old and save the new in a rolling manner when it is full.
1407 1407  
1408 -Save a message to the cache file, which can be stored after power failure. Store up to 2000 items, delete the old and save the new in a rolling manner when it is full.
1255 +**Parameters: **//msg// String
1409 1409  
1410 -**Parameters:**
1411 -
1412 -//msg// String
1413 -
1414 1414  **Return:**
1415 1415  
1416 1416  Succeed: true
... ... @@ -1418,17 +1418,13 @@
1418 1418  Failed: nil
1419 1419  
1420 1420  (((
1421 -== **6.10 bns_get_allcache()** ==
1264 +== **bns_get_allcache()** ==
1422 1422  )))
1423 1423  
1424 -**Function:**
1267 +**Function:** Get all the cached content (once the internal cache file will be emptied)
1425 1425  
1426 -Get all the cached content (once the internal cache file will be emptied)
1269 +**Parameters:** None
1427 1427  
1428 -**Parameters:**
1429 -
1430 -None
1431 -
1432 1432  **Return:**
1433 1433  
1434 1434  Succeed: //table// one-dimensional array
... ... @@ -1456,182 +1456,210 @@
1456 1456  Network communication includes Http request interface, this document does not provide interface description, please refer to the online document for how to use it.
1457 1457  
1458 1458  (((
1459 -== **7.1 http request** ==
1298 +== **http request** ==
1460 1460  )))
1461 1461  
1462 1462  [[http:~~/~~/w3.impa.br/~~~~diego/software/luasocket/http.html#request>>url:http://w3.impa.br/~~diego/software/luasocket/http.html#request]]
1463 1463  
1464 -(((
1465 -= **8 Internal register** =
1466 -)))
1303 +== **https request** ==
1467 1467  
1468 -The internal registers of the box are divided into bit addresses and word addresses, which can be accessed in two ways (taking HDW as an example):
1305 +Example
1469 1469  
1470 -**~1. **Access by word, prefix @W_HDW,
1307 +{{code language="LUA"}}
1308 +local json = require("json")
1471 1471  
1472 -For example: @W_HDW0 represents the first word of the system data area, @W_HDW1 represents the second word of the system data area.
1310 +local https = require("https")
1473 1473  
1474 -**2. **Access in bit mode, the prefix is @B_HDX, the number in front of "." indicates the number of the word, and the number behind is the bit number of the word.
1312 +functions https_demo.main()
1475 1475  
1476 -For example: @B_HDX1020.12, its meaning is to access the system data area in bit mode, the specific location is the 13th bit of the 1020th word.
1314 +local url = "https://XXXXXXXXXXXXXXXXXXXXXXXXXX"
1477 1477  
1478 -**✎Note: **
1316 +local body = {}
1479 1479  
1480 -**~1. **The address in @B_HDX is taken from the word in @W_HDW, so pay special attention when using the address.
1318 +body["XXXXXX"] = "XXXXX"
1481 1481  
1482 -For example, @B_HDX1020.12 is to access the 13th bit of the 1020th word. The value of this bit is the same as the word obtained by @W_HDW001020. The 13th bit of this word is actually the same bit as @B_HDX1020.12.
1320 +body["XXXXXXX"] = "XXXXXXXXXXX"
1483 1483  
1484 -**2.**The address of the bit address @B_HDX has a decimal point, while the word address is an integer.
1322 +local bodyJson = json.encode(body)
1485 1485  
1486 -(((
1487 -== **8.1 Data storage area(HDW/HDX)** ==
1488 -)))
1324 +local header = {}
1489 1489  
1490 -The system storage area (HDW) of the V-BOX is used to store temporary data:
1326 +header["content-type"] = "application/json"
1491 1491  
1492 -~1. Access by word, the number range is: "@W_HDW0"-"@W_HDW299999".
1328 +local result_table, code, headers, status = https.request(url,
1493 1493  
1494 -2. Access in bit mode, the number range is: "@B_HDX0.0"-"@B_HDX299999.15".
1330 +bodyJson)
1495 1495  
1496 -(((
1497 -== **8.2 Special data area (HSW/HSX)** ==
1498 -)))
1332 +if code == 200 then
1499 1499  
1500 -**✎Note: **
1334 +print("https suc")
1501 1501  
1502 -//HSW// is a system special register, so please refer to the system special register table during use. Do not use addresses that are not mentioned in the table, and use the addresses stated in the table with caution (example: restart ("@W_HSW0") Writing a value of 1 will cause V-BOX to restart).
1336 +return true
1503 1503  
1504 -//Without any conditions. Direct use ("@W_HSW0") will cause the V-BOX to restart continuously.// When using ("@W_HSW0") address, please add judgment conditions, such as: connection to MQTT fails, there is no network, the value of a PLC address meets the condition or counts to a certain value.
1338 +else
1505 1505  
1506 -1.The system data area (HSW) of the box is used for system special registers (system reserved). Use //addr_getword// to obtain the following register information:
1340 +print("https fail")
1507 1507  
1508 -(% class="table-bordered" %)
1509 -|address|function|Read and write status: read only, write only, read and write
1510 -|@W_HSW0|restart|read and write
1511 -|@W_HSW1|Box time: year|read and write
1512 -|@W_HSW2|Box time: month|read and write
1513 -|@W_HSW3|Box time: day|read and write
1514 -|@W_HSW4|Box time: hour|read and write
1515 -|@W_HSW5|Box time: minute|read and write
1516 -|@W_HSW6|Box time: second|read and write
1517 -|@W_HSW7|Box time: week|read and write
1518 -|@W_HSW8|Ethernet IP1|read only
1519 -|@W_HSW9|Ethernet IP2|read only
1520 -|@W_HSW10|Ethernet IP3|read only
1521 -|@W_HSW11|Ethernet IP4|read only
1522 -|@W_HSW12|Ethernet Mask 1|read only
1523 -|@W_HSW13|Ethernet Mask 2|read only
1524 -|@W_HSW14|Ethernet Mask 3|read only
1525 -|@W_HSW15|Ethernet Mask 4|read only
1526 -|@W_HSW16|Ethernet Gateway 1|read only
1527 -|@W_HSW17|Ethernet Gateway 2|read only
1528 -|@W_HSW18|Ethernet Gateway 3|read only
1529 -|@W_HSW19|Ethernet Gateway 4|read only
1530 -|@W_HSW21|Ethernet MAC1|read only
1531 -|@W_HSW22|Ethernet MAC2|read only
1532 -|@W_HSW23|Ethernet MAC3|read only
1533 -|@W_HSW24|Ethernet MAC4|read only
1534 -|@W_HSW25|Ethernet MAC3|read only
1535 -|@W_HSW26|Ethernet MAC4|read only
1536 -|@W_HSW128|WIFI IP1|read only
1537 -|@W_HSW129|WIFI IP2|read only
1538 -|@W_HSW130|WIFI IP3|read only
1539 -|@W_HSW131|WIFI IP4|read only
1540 -|@W_HSW132|WIFI Mask 1|read only
1541 -|@W_HSW133|WIFI Mask 2|read only
1542 -|@W_HSW134|WIFI Mask 3|read only
1543 -|@W_HSW135|WIFI Mask 4|read only
1544 -|@W_HSW136|WIFI Gateway 1|read only
1545 -|@W_HSW137|WIFI Gateway 2|read only
1546 -|@W_HSW138|WIFI Gateway 3|read only
1547 -|@W_HSW139|WIFI Gateway 4|read only
1548 -|@W_HSW140|WIFI MAC1|read only
1549 -|@W_HSW141|WIFI MAC2|read only
1550 -|@W_HSW142|WIFI MAC3|read only
1551 -|@W_HSW143|WIFI MAC4|read only
1552 -|@W_HSW144|WIFI MAC5|read only
1553 -|@W_HSW145|WIFI MAC6|read only
1554 -|@W_HSW146|WIFI Signal value|read only
1555 -|@W_HSW148|4G IP1|read only
1556 -|@W_HSW149|4G IP2|read only
1557 -|@W_HSW150|4G IP3|read only
1558 -|@W_HSW151|4G IP4|read only
1559 -|@W_HSW152|4G Mask 1|read only
1560 -|@W_HSW153|4G Mask 2|read only
1561 -|@W_HSW154|4G Mask 3|read only
1562 -|@W_HSW155|4G Mask 4|read only
1563 -|@W_HSW156|4G Gateway 1|read only
1564 -|@W_HSW157|4G Gateway 2|read only
1565 -|@W_HSW158|4G Gateway 3|read only
1566 -|@W_HSW159|4G Gateway 4|read only
1567 -|@W_HSW160|4G MAC1|read only
1568 -|@W_HSW161|4G MAC2|read only
1569 -|@W_HSW162|4G MAC3|read only
1570 -|@W_HSW163|4G MAC4|read only
1571 -|@W_HSW164|4G MAC5|read only
1572 -|@W_HSW165|4G MAC6|read only
1573 -|@W_HSW166|4G Signal value|read only
1342 +return nil
1574 1574  
1575 -2. Other
1344 +end
1576 1576  
1577 -2.1 Access password: addr_getstring("@W_HSW27", 16)
1346 +end
1347 +{{/code}}
1578 1578  
1579 -2.2 Machine code: addr_getstring("@W_HSW60", 64)
1349 +(((
1350 += **8 Internal register** =
1351 +)))
1580 1580  
1581 -2.3 Positioning method (@W_HSW167): (read only)
1353 +The internal registers of the box are divided into bit addresses and word addresses, which can be accessed in two ways (taking HDW as an example):
1582 1582  
1583 -~1. Latitude and longitude
1355 +**Access by word, prefix @W_HDW.**
1584 1584  
1585 -Longitude: addr_getdouble("@W_HSW168") (read only)
1357 +For example: @W_HDW0 represents the first word of the system data area, @W_HDW1 represents the second word of the system data area.
1586 1586  
1587 -Latitude: addr_getdouble("@W_HSW172") (read only)
1359 +**Access in bit mode, the prefix is @B_HDX, the number in front of "." indicates the number of the word, and the number behind is the bit number of the word.**
1588 1588  
1589 -2. Base station positioning
1361 +For example: @B_HDX1020.12, its meaning is to access the system data area in bit mode, the specific location is the 13th bit of the 1020th word.
1590 1590  
1591 -LAC: addr_getdword("@W_HSW168") (read only)
1363 +(% class="box infomessage" %)
1364 +(((
1365 +**✎Note: **
1592 1592  
1593 -CI: addr_getdword("@W_HSW172") (read only)
1367 +* The address in @B_HDX is taken from the word in @W_HDW, so pay special attention when using the address.
1368 +** For example, @B_HDX1020.12 is to access the 13th bit of the 1020th word. The value of this bit is the same as the word obtained by @W_HDW001020. The 13th bit of this word is actually the same bit as @B_HDX1020.12.
1369 +* The address of the bit address @B_HDX has a decimal point, while the word address is an integer.
1370 +)))
1594 1594  
1595 -2.4 Convert base station to latitude and longitude via API
1596 1596  
1597 -Longitude: addr_getdouble("@W_HSW187") (read only)
1598 1598  
1599 -Latitude: addr_getdouble("@W_HSW183") (read only)
1374 +(((
1375 +== **Data storage area(HDW/HDX)** ==
1376 +)))
1600 1600  
1601 -2.5 Operator information: addr_getdword("@W_HSW181") (read only)
1378 +The system storage area (HDW) of the V-BOX is used to store temporary data:
1602 1602  
1603 -2.6 Networking mode: addr_getword("@W_HSW177") (read only)
1380 +1. Access by word, the number range is: "@W_HDW0"-"@W_HDW299999".
1381 +1. Access in bit mode, the number range is: "@B_HDX0.0"-"@B_HDX299999.15".
1604 1604  
1605 -0: Ethernet, 1: WIFI, 2: 4G, 3: 2G
1383 +(((
1384 +== **8.2 Special data area (HSW/HSX)** ==
1606 1606  
1607 -2.7 Map fence flag: addr_getword("@W_HSW178") (read only)
1386 +(% class="box infomessage" %)
1387 +(((
1388 +**✎Note: **
1608 1608  
1609 -0: No map fence is drawn
1390 +* //HSW// is a system special register, so please refer to the system special register table during use. Do not use addresses that are not mentioned in the table, and use the addresses stated in the table with caution (example: restart ("@W_HSW0") Writing a value of 1 will cause V-BOX to restart).
1391 +* //Without any conditions. Direct use ("@W_HSW0") will cause the V-BOX to restart continuously.// When using ("@W_HSW0") address, please add judgment conditions, such as: connection to MQTT fails, there is no network, the value of a PLC address meets the condition or counts to a certain value.
1392 +)))
1393 +)))
1610 1610  
1611 -1: Draw a map fence and the box is in the fence
1395 +The system data area (HSW) of the box is used for system special registers (system reserved). Use //addr_getword// to obtain the following register information:
1612 1612  
1613 -2: Draw a map fence and the box is not in the fence
1397 +(% class="table-bordered" %)
1398 +|=(% style="width: 151px;" %)address|=(% style="width: 169px;" %)function|=(% style="width: 456px;" %)Read and write status: read only, write only, read and write
1399 +|(% style="width:151px" %)@W_HSW0|(% style="width:169px" %)restart|(% style="width:456px" %)read and write
1400 +|(% style="width:151px" %)@W_HSW1|(% style="width:169px" %)Box time: year|(% style="width:456px" %)read and write
1401 +|(% style="width:151px" %)@W_HSW2|(% style="width:169px" %)Box time: month|(% style="width:456px" %)read and write
1402 +|(% style="width:151px" %)@W_HSW3|(% style="width:169px" %)Box time: day|(% style="width:456px" %)read and write
1403 +|(% style="width:151px" %)@W_HSW4|(% style="width:169px" %)Box time: hour|(% style="width:456px" %)read and write
1404 +|(% style="width:151px" %)@W_HSW5|(% style="width:169px" %)Box time: minute|(% style="width:456px" %)read and write
1405 +|(% style="width:151px" %)@W_HSW6|(% style="width:169px" %)Box time: second|(% style="width:456px" %)read and write
1406 +|(% style="width:151px" %)@W_HSW7|(% style="width:169px" %)Box time: week|(% style="width:456px" %)read and write
1407 +|(% style="width:151px" %)@W_HSW8|(% style="width:169px" %)Ethernet IP1|(% style="width:456px" %)read only
1408 +|(% style="width:151px" %)@W_HSW9|(% style="width:169px" %)Ethernet IP2|(% style="width:456px" %)read only
1409 +|(% style="width:151px" %)@W_HSW10|(% style="width:169px" %)Ethernet IP3|(% style="width:456px" %)read only
1410 +|(% style="width:151px" %)@W_HSW11|(% style="width:169px" %)Ethernet IP4|(% style="width:456px" %)read only
1411 +|(% style="width:151px" %)@W_HSW12|(% style="width:169px" %)Ethernet Mask 1|(% style="width:456px" %)read only
1412 +|(% style="width:151px" %)@W_HSW13|(% style="width:169px" %)Ethernet Mask 2|(% style="width:456px" %)read only
1413 +|(% style="width:151px" %)@W_HSW14|(% style="width:169px" %)Ethernet Mask 3|(% style="width:456px" %)read only
1414 +|(% style="width:151px" %)@W_HSW15|(% style="width:169px" %)Ethernet Mask 4|(% style="width:456px" %)read only
1415 +|(% style="width:151px" %)@W_HSW16|(% style="width:169px" %)Ethernet Gateway 1|(% style="width:456px" %)read only
1416 +|(% style="width:151px" %)@W_HSW17|(% style="width:169px" %)Ethernet Gateway 2|(% style="width:456px" %)read only
1417 +|(% style="width:151px" %)@W_HSW18|(% style="width:169px" %)Ethernet Gateway 3|(% style="width:456px" %)read only
1418 +|(% style="width:151px" %)@W_HSW19|(% style="width:169px" %)Ethernet Gateway 4|(% style="width:456px" %)read only
1419 +|(% style="width:151px" %)@W_HSW21|(% style="width:169px" %)Ethernet MAC1|(% style="width:456px" %)read only
1420 +|(% style="width:151px" %)@W_HSW22|(% style="width:169px" %)Ethernet MAC2|(% style="width:456px" %)read only
1421 +|(% style="width:151px" %)@W_HSW23|(% style="width:169px" %)Ethernet MAC3|(% style="width:456px" %)read only
1422 +|(% style="width:151px" %)@W_HSW24|(% style="width:169px" %)Ethernet MAC4|(% style="width:456px" %)read only
1423 +|(% style="width:151px" %)@W_HSW25|(% style="width:169px" %)Ethernet MAC3|(% style="width:456px" %)read only
1424 +|(% style="width:151px" %)@W_HSW26|(% style="width:169px" %)Ethernet MAC4|(% style="width:456px" %)read only
1425 +|(% style="width:151px" %)@W_HSW128|(% style="width:169px" %)WIFI IP1|(% style="width:456px" %)read only
1426 +|(% style="width:151px" %)@W_HSW129|(% style="width:169px" %)WIFI IP2|(% style="width:456px" %)read only
1427 +|(% style="width:151px" %)@W_HSW130|(% style="width:169px" %)WIFI IP3|(% style="width:456px" %)read only
1428 +|(% style="width:151px" %)@W_HSW131|(% style="width:169px" %)WIFI IP4|(% style="width:456px" %)read only
1429 +|(% style="width:151px" %)@W_HSW132|(% style="width:169px" %)WIFI Mask 1|(% style="width:456px" %)read only
1430 +|(% style="width:151px" %)@W_HSW133|(% style="width:169px" %)WIFI Mask 2|(% style="width:456px" %)read only
1431 +|(% style="width:151px" %)@W_HSW134|(% style="width:169px" %)WIFI Mask 3|(% style="width:456px" %)read only
1432 +|(% style="width:151px" %)@W_HSW135|(% style="width:169px" %)WIFI Mask 4|(% style="width:456px" %)read only
1433 +|(% style="width:151px" %)@W_HSW136|(% style="width:169px" %)WIFI Gateway 1|(% style="width:456px" %)read only
1434 +|(% style="width:151px" %)@W_HSW137|(% style="width:169px" %)WIFI Gateway 2|(% style="width:456px" %)read only
1435 +|(% style="width:151px" %)@W_HSW138|(% style="width:169px" %)WIFI Gateway 3|(% style="width:456px" %)read only
1436 +|(% style="width:151px" %)@W_HSW139|(% style="width:169px" %)WIFI Gateway 4|(% style="width:456px" %)read only
1437 +|(% style="width:151px" %)@W_HSW140|(% style="width:169px" %)WIFI MAC1|(% style="width:456px" %)read only
1438 +|(% style="width:151px" %)@W_HSW141|(% style="width:169px" %)WIFI MAC2|(% style="width:456px" %)read only
1439 +|(% style="width:151px" %)@W_HSW142|(% style="width:169px" %)WIFI MAC3|(% style="width:456px" %)read only
1440 +|(% style="width:151px" %)@W_HSW143|(% style="width:169px" %)WIFI MAC4|(% style="width:456px" %)read only
1441 +|(% style="width:151px" %)@W_HSW144|(% style="width:169px" %)WIFI MAC5|(% style="width:456px" %)read only
1442 +|(% style="width:151px" %)@W_HSW145|(% style="width:169px" %)WIFI MAC6|(% style="width:456px" %)read only
1443 +|(% style="width:151px" %)@W_HSW146|(% style="width:169px" %)WIFI Signal value|(% style="width:456px" %)read only
1444 +|(% style="width:151px" %)@W_HSW148|(% style="width:169px" %)4G IP1|(% style="width:456px" %)read only
1445 +|(% style="width:151px" %)@W_HSW149|(% style="width:169px" %)4G IP2|(% style="width:456px" %)read only
1446 +|(% style="width:151px" %)@W_HSW150|(% style="width:169px" %)4G IP3|(% style="width:456px" %)read only
1447 +|(% style="width:151px" %)@W_HSW151|(% style="width:169px" %)4G IP4|(% style="width:456px" %)read only
1448 +|(% style="width:151px" %)@W_HSW152|(% style="width:169px" %)4G Mask 1|(% style="width:456px" %)read only
1449 +|(% style="width:151px" %)@W_HSW153|(% style="width:169px" %)4G Mask 2|(% style="width:456px" %)read only
1450 +|(% style="width:151px" %)@W_HSW154|(% style="width:169px" %)4G Mask 3|(% style="width:456px" %)read only
1451 +|(% style="width:151px" %)@W_HSW155|(% style="width:169px" %)4G Mask 4|(% style="width:456px" %)read only
1452 +|(% style="width:151px" %)@W_HSW156|(% style="width:169px" %)4G Gateway 1|(% style="width:456px" %)read only
1453 +|(% style="width:151px" %)@W_HSW157|(% style="width:169px" %)4G Gateway 2|(% style="width:456px" %)read only
1454 +|(% style="width:151px" %)@W_HSW158|(% style="width:169px" %)4G Gateway 3|(% style="width:456px" %)read only
1455 +|(% style="width:151px" %)@W_HSW159|(% style="width:169px" %)4G Gateway 4|(% style="width:456px" %)read only
1456 +|(% style="width:151px" %)@W_HSW160|(% style="width:169px" %)4G MAC1|(% style="width:456px" %)read only
1457 +|(% style="width:151px" %)@W_HSW161|(% style="width:169px" %)4G MAC2|(% style="width:456px" %)read only
1458 +|(% style="width:151px" %)@W_HSW162|(% style="width:169px" %)4G MAC3|(% style="width:456px" %)read only
1459 +|(% style="width:151px" %)@W_HSW163|(% style="width:169px" %)4G MAC4|(% style="width:456px" %)read only
1460 +|(% style="width:151px" %)@W_HSW164|(% style="width:169px" %)4G MAC5|(% style="width:456px" %)read only
1461 +|(% style="width:151px" %)@W_HSW165|(% style="width:169px" %)4G MAC6|(% style="width:456px" %)read only
1462 +|(% style="width:151px" %)@W_HSW166|(% style="width:169px" %)4G Signal value|(% style="width:456px" %)read only
1614 1614  
1615 -2.8 SIM card status addr_getword("@W_HSW179") (read only)
1464 +**Others**
1616 1616  
1617 -1: No card detected
1466 +* Access password: addr_getstring("@W_HSW27", 16)
1467 +* Machine code: addr_getstring("@W_HSW60", 64)
1468 +* Positioning method (@W_HSW167): (read only)
1469 +** Latitude and longitude
1470 +*** Longitude: addr_getdouble("@W_HSW168") (read only)
1471 +*** Latitude: addr_getdouble("@W_HSW172") (read only)
1472 +** Base station positioning
1473 +*** LAC: addr_getdword("@W_HSW168") (read only)
1474 +*** CI: addr_getdword("@W_HSW172") (read only)
1475 +* Convert base station to latitude and longitude via API
1476 +** Longitude: addr_getdouble("@W_HSW187") (read only)
1477 +** Latitude: addr_getdouble("@W_HSW183") (read only)
1478 +* Operator information: addr_getdword("@W_HSW181") (read only)
1479 +* Networking mode: addr_getword("@W_HSW177") (read only)
1480 +** 0: Ethernet
1481 +** 1: WIFI
1482 +** 2: 4G
1483 +** 3: 2G
1484 +* Map fence flag: addr_getword("@W_HSW178") (read only)
1485 +** 0: No map fence is drawn
1486 +** 1: Draw a map fence and the box is in the fence
1487 +** 2: Draw a map fence and the box is not in the fence
1488 +* SIM card status addr_getword("@W_HSW179") (read only)
1489 +** 1: No card detected
1490 +** 2: Card insertion detected
1491 +** 3: The card status is abnormal
1492 +* MQTT status addr_getword("@W_HSW180") (read only)
1493 +** 1: online, 2: offline
1494 +* IO interface, X is read only, Y is read and write (H series)
1495 +** addr_getbit(addr1), addr_setbit(addr2)
1496 +** addr1:"@B_Y0" "@B_Y1" "@B_X0" "@B_X1"
1497 +** addr2:"@B_Y0" "@B_Y1"
1498 +* Obtaining IMEI (read only)
1499 +*
1500 +* Obtaining ICCID (read only)
1618 1618  
1619 -2: Card insertion detected
1620 -
1621 -3: The card status is abnormal
1622 -
1623 -2.9 MQTT status addr_getword("@W_HSW180") (read only)
1624 -
1625 -1: online, 2: offline
1626 -
1627 -2.10 IO interface, X is read only, Y is read and write (H series)
1628 -
1629 -addr_getbit(addr1), addr_setbit(addr2)
1630 -
1631 -addr1:"@B_Y0" "@B_Y1" "@B_X0" "@B_X1"
1632 -
1633 -addr2:"@B_Y0" "@B_Y1"
1634 -
1635 1635  (((
1636 1636  = **9 General Functions** =
1637 1637  )))