Wiki source code of 01 Lua Functions

Version 5.5 by Stone Wu on 2022/07/12 09:15

Hide last authors
Leo Wei 1.1 1 = **1 Interface Description** =
2
Stone Wu 5.5 3 == **Data type definition** ==
Leo Wei 1.1 4
Leo 2.3 5 |=**Type**|=**Description**
6 |=nil|Null
Stone Wu 5.5 7 |=boolean|Boolean (the value is true or false)
8 |=number|Integer or floating point (signed or unsigned)
Leo 2.3 9 |=string|String
10 |=table|Table
11 |=function|Functions
12
Stone Wu 5.5 13 == **Built-in function library clipping** ==
Leo Wei 1.1 14
15 Full features supported: coroutine/debug/ math/ package/ string/ table/ utf8
16
Stone Wu 5.5 17 //Some features supported (available in []):** **os[clock/ date/ difftime/ time]//
Leo Wei 1.1 18
Stone Wu 5.5 19 //Not supported: io/ file//
Leo Wei 1.1 20
Stone Wu 5.5 21 == **Return value description** ==
Leo Wei 1.1 22
23 The function return type multi means multiple return values (at least 2), usually:
24
Stone Wu 5.5 25 //1st: nil//
Leo Wei 1.1 26
Stone Wu 5.5 27 //2nd: the error message//
Leo Wei 1.1 28
29 (((
Stone Wu 5.5 30 == **Function parameter description** ==
Leo Wei 1.1 31 )))
32
Stone Wu 5.5 33 Suppose a function prototype is defined:
Leo Wei 1.1 34
Stone Wu 5.5 35 {{code language="LUA"}}
36 student(string name, number age[, number class])
Leo Wei 1.1 37
Stone Wu 5.5 38 Function:
Leo Wei 1.1 39
40 Register a student
41
Stone Wu 5.5 42 Parameters:
Leo Wei 1.1 43
Stone Wu 5.5 44 name: student name
Leo Wei 1.1 45
Stone Wu 5.5 46 age: student age
Leo Wei 1.1 47
Stone Wu 5.5 48 [class=1]: Student class
Leo Wei 1.1 49
Stone Wu 5.5 50 Return:
Leo Wei 1.1 51
52 Succeed: true
53
54 Failed: multi
Stone Wu 5.5 55 {{/code}}
Leo Wei 1.1 56
Stone Wu 5.5 57 **Explanation**
Leo Wei 1.1 58
Stone Wu 5.5 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.**
Leo Wei 1.1 63
64 **Call example**
65
66 |(((
67 //print(student("foo", 18)) //~-~- foo, 18 years old, assigned to class 1 by default
68
69 //print(student("bar", 19, 2))// ~-~-bar, 19 years old, assigned to class 2
70
71 //print(student("bar", 18)) //~-~-bar, 18 years old, assigned to class 1 by default
72
73 //local stat, err = student("bar", 18)// ~-~- Call again, use //err// to capture error messages
74
75 //print(stat, err)//
76 )))
77
78 **Output results**
79
80 |(((
81 //true//
82
83 //true//
84
85 //nil student bar registered//
86
87 //nil student bar registered//
88 )))
89
90 **Comment**
91
Stone Wu 5.5 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.
Leo Wei 1.1 94
Stone Wu 5.5 95 == **Modification of the Print Function** ==
Leo Wei 1.1 96
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 make the following restrictions:
98
99 **1.Interval limit: **When debugging, transfer once every 2~~3 seconds;
100
101 **2.Data limit: **The transfer data cannot be larger than 1.5KB, and the extra part will be ignored;
102
103 **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;
104
105 Users should pay attention to avoid printing a lot of useless information, should minimize the debug output
106
107 In addition, please refer to the front-end documentation for how to use view debugging.
108
109 (((
110 = **2 Address Operation** =
111
Leo 4.1 112
Leo Wei 1.1 113 )))
114
Leo 4.1 115 |=16-bit data formal|=HLword|=32-bit data formal|=HLword|= 64-bit data formal|=HLword
116 |12(Default)|0|1234(Default)|0|(((
117 12345678(Default)
Leo 3.2 118 )))|(((
Leo 4.1 119 0
Leo Wei 1.1 120 )))
Leo 4.1 121 |21|6|(((
122 3412(High and low word conversion)
123 )))|2|(((
124 34127856  (High and low word conversion)
125 )))|2
126 | | |2143|3|(((
127 21436587
128 )))|3
129 | | |4321|6|(((
130 87654321
131 )))|6
Leo 3.2 132 | | | | |(((
Leo 4.1 133 78563412
134 )))|7
Leo 3.2 135 | | | | |(((
Leo 4.1 136 56781234
137 )))|8
Leo 3.2 138 | | | | |(((
Leo 4.1 139 65872143
140 )))|9
Leo 3.2 141 | | | | |(((
Leo 4.1 142 43218765
143 )))|10
Leo Wei 1.1 144
145 * If HLword enters any other value, it will be treated as invalid.
146
147 Demo:  Reads a 32-bit floating-point number at position D0 of PLC
148
149
150
Leo 3.2 151 [[image:企业微信截图_20210506180640.png||height="301" width="600" class="img-thumbnail"]]
152
Leo Wei 1.1 153 == **2.1 addr_getshort(string addr[, number type, number hlword])** ==
154
155 **Function:**
156
157 Read 16-bit signed decimal address
158
159 **Parameters:**
160
161 //addr//: address
162
163 //num//: value
164
165 [type = 0] not read through  1: read through
166
167 [hlword = 0]  Don't convert,See Form 2.1
168
169 **Return:**
170
171 Succeed: Single word signed decimal value
172
173 Failed: multi
174
175 (((
176 == **2.2 addr_setshort(string addr, number num[, number type, number hlword])** ==
177 )))
178
179 **Function:**
180
181 Write 16-bit signed decimal address
182
183 **Parameters:**
184
185 //addr//: address
186
187 //num//: value
188
189 [type = 0]not read through  1: read through
190
191 [hlword = 0]  Don't convert,See Form 2.1
192
193 **Return:**
194
195 Succeed: true
196
197 Failed: multi
198
199 (((
200 == **2.3 addr_getword(string addr[, number type, number hlword])** ==
201 )))
202
203 **Function:**
204
Leo 3.2 205 Read 16-bit unsigned decimal address
Leo Wei 1.1 206
207 **Parameters:**
208
209 //addr//: address
210
211 [type = 0]not read through 1: read through
212
213 [hlword = 0]  Don't convert,See Form 2.1
214
215 **Return:**
216
217 Succeed: Single word unsigned decimal value
218
219 Failed: multi
220
221 (((
222 == **2.4 addr_setword(string addr, number num[, number type, number hlword])** ==
223 )))
224
225 **Function:**
226
227 Write 16-bit unsigned decimal address
228
229 **Parameters:**
230
231 //addr//: address
232
233 //num//: value
234
235 [type = 0]not read through 1: read through
236
237 [hlword = 0]  Don't convert,See Form 2.1
238
239 **Return:**
240
241 Succeed: true
242
243 Failed: multi
244
245 (((
246 == **2.5 addr_getint(string addr[, number type, number hlword])** ==
247 )))
248
249 **Function:**
250
251 Read 32-bit signed decimal address
252
253 **Parameters:**
254
255 //addr//: address
256
257 [type = 0]not read through 1: read through
258
259 [hlword = 0]  Don't convert,See Form 2.1
260
261 **Return:**
262
263 Succeed: Double word signed decimal value
264
265 Failed: multi
266
267 (((
268 == **2.6 addr_setint(string addr, number num[, number type, number hlword])** ==
269 )))
270
271 **Function:**
272
273 Write 32-bit signed decimal address
274
275 **Parameters:**
276
277 //addr//: address
278
279 //num//: value
280
281 [type = 0]not read through 1: read through
282
283 [hlword = 0]  Don't convert,See Form 2.1
284
285 **Return:**
286
287 Succeed: true
288
289 Failed: multi
290
291 (((
292 == **2.7 addr_getdword(string addr[, number type, number hlword])** ==
293 )))
294
295 **Function:**
296
Leo 3.2 297 Read 32-bit unsigned decimal address
Leo Wei 1.1 298
299 **Parameters:**
300
301 //addr//: address
302
303 [type = 0]not read through 1: read through
304
305 [hlword = 0]  Don't convert,See Form 2.1
306
307 **Return:**
308
309 Succeed: Double word unsigned decimal value
310
311 Failed: multi
312
313 (((
314 == **2.8 addr_setdword(string addr, number num[, number type, number hlword])** ==
315 )))
316
317 **Function:**
318
319 Write 32-bit unsigned decimal address
320
321 **Parameters:**
322
323 //addr//: address
324
325 //num//: value
326
327 [type = 0]not read through 1: read through
328
329 [hlword = 0]  Don't convert,See Form 2.1
330
331 **Return:**
332
333 Succeed: true
334
335 Failed: multi
336
337 (((
338 == **2.9 addr_getbit(string addr[, number type])** ==
339 )))
340
341 **Function:**
342
343 Read a bit of the register address
344
345 **Parameters:**
346
347 //addr//: address
348
349 [type = 0]not read through 1: read through
350
351 [hlword = 0]  Don't convert,See Form 2.1
352
353 **Return:**
354
355 Succeed: Bit address value
356
357 Failed: multi
358
359 (((
360 == **2.10 addr_setbit(string addr, number num[, number type])** ==
361 )))
362
363 **Function:**
364
365 Write a bit of the register address
366
367 **Parameters:**
368
369 //addr//: address
370
371 //num//: value
372
Leo 3.2 373 [type = 0]not read through 1: read through
Leo Wei 1.1 374
375 [hlword = 0]  Don't convert,See Form 2.1
376
377 **Return:**
378
379 Succeed: true
380
381 Failed: multi
382
383 (((
384 == **2.11 addr_getfloat(string addr[, number type, number hlword])** ==
385 )))
386
387 **Function:**
388
389 Read 32-bit floating address
390
391 **Parameters:**
392
393 //addr//: address
394
395 [type = 0]not read through 1: read through
396
397 [hlword = 0]  Don't convert,See Form 2.1
398
399 **Return:**
400
401 Succeed: 32-bit floating point value
402
403 Failed: multi
404
405 (((
406 == **2.12 addr_setfloat(string addr, number num[, number type, number hlword])** ==
407 )))
408
409 **Function:**
410
411 Write 32-bit floating address
412
413 **Parameters:**
414
415 //addr//: address
416
417 //num//: value
418
419 [type = 0]not read through 1: read through
420
421 [hlword = 0]  Don't convert,See Form 2.1
422
423 **Return:**
424
425 Succeed: true
426
427 Failed: multi
428
429 (((
430 == **2.13 addr_getdouble(string addr[, number type, number hlword])** ==
431 )))
432
433 **Function:**
434
435 Read 64-bit floating address
436
437 **Parameters:**
438
439 //addr//: address
440
441 [type = 0]not read through 1: read through
442
443 [hlword = 0]  Don't convert,See Form 2.1
444
445 **Return:**
446
447 Succeed: 64-bit floating point value
448
449 Failed: multi
450
451 (((
452 == **2.14 addr_setdouble(string addr, number num[, number type, number hlword])** ==
453 )))
454
455 **Function:**
456
457 Write 64-bit floating address
458
459 **Parameters:**
460
461 addr: address
462
463 num: value
464
465 [type = 0]not read through //1//: read through
466
467 [hlword = 0]  Don't convert,See Form 2.1
468
469 **Return:**
470
471 Succeed: true
472
473 Failed: multi
474
475 (((
476 == **2.15 addr_getstring(string addr, number length[, number type, number hlbyte])** ==
477 )))
478
479 **Function:**
480
481 Read the specified length string from address
482
483 **Parameters:**
484
485 //addr//: address
486
487 //length//: length
488
489 [type = 0]not read through 1: read through
490
491 [hlbyte = 0] Don't convert,3:High and low byte conversion, 4:GBK, 5:GBK And the first byte is the length
492
493 **Return:**
494
495 Succeed: specified length string
496
497 Failed: multi
498
499 (((
500 == **2.16 addr_setstring(string addr, string str[, number type, number hlbyte])** ==
501 )))
502
503 **Function:**
504
505 Write the specified length string to address
506
507 **Parameters:**
508
509 //addr//: address
510
511 //str//: string
512
513 [type = 0]not read through 1: read through
514
515 [hlbyte = 0] Don't convert,3:High and low byte conversion, 4:GBK, 5:GBK And the first byte is the length
516
517 **Return:**
518
519 Succeed: true
520
521 Failed: multi
522
523 (((
524 == **2.17 addr_bmov(string dst, string src, number length)** ==
525 )))
526
527 **Function:**
528
529 Copy data from source address to destination address
530
531 **Parameters:**
532
533 //dst//: destination address
534
535 //src//: source address
536
537 //length//: length
538
539 **Return:**
540
541 Succeed: true
542
543 **Failed: multi**
544
545 (((
546 == **2.18 addr_fill(string addr, number num, number length)** ==
547 )))
548
549 **Function:**
550
551 Write the same value to consecutive addresses
552
553 **Parameters:**
554
555 //addr//: address
556
557 //num//: value
558
559 //length//:continuous length
560
561 **Return:**
562
563 Succeed: true
564
565 Failed: multi
566
567 (((
568 == **2.19 addr_newnoaddr(string addr, number offset)** ==
569 )))
570
571 **Function:**
572
573 Offset address value relative to //addr//
574
575 **Parameters:**
576
577 //addr//: address
578
579 //offset//: offset value
580
581 **Return:**
582
583 Succeed: New address after offset
584
585 Failed: multi
586
587 (((
588 == **2.20 addr_newstataddr(string addr, number offset)** ==
589 )))
590
591 **Function:**
592
593 Offset station number relative to //addr //station number
594
595 **Parameters:**
596
597 //addr//: address
598
599 //offset//: offset value
600
601 **Return:**
602
603 Succeed: New station number after offset
604
605 Failed: multi
606
607 == **2.21 addr_gethex64(string addr[, number type, number hlword])** ==
608
609 **Function:**
610
611 Read 64-bit hexadecimal numbers
612
613 **Parameters:**
614
615 //addr//: address
616
617 [type = 0]not read through 1: read through
618
619 [hlword = 0]  Don't convert,See Form 2.1
620
621 **Return:**
622
623 Succeed: 64-bit floating-point values
624
625 Failed: multi
626
627 == **2.22 addr_sethex64(string addr, number num[, number type, number hlword])** ==
628
629 **Function:**
630
631 Write 64-bit hexadecimal addresses
632
633 **Parameters:**
634
635 //addr//: address
636
637 [type = 0]not write through 1: write through
638
639 [hlword = 0]  Don't convert,See Form 2.1
640
641 **Return:**
642
643 Succeed: true
644
645 Failed: multi
646
647 (((
648 = **3 Serial port operation** =
649 )))
650
651 Operations on the serial port such as read, write, etc. must use ':' for full mode calls, ie operations on an open serial object.
652
653 **Serial port name and mode:**
654
655 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.
656
657 Attempting to use a script to open a serial port in an unsupported mode will result in an error directly, as below
658
659 |(((
660 local setup = {
661
662 name = "COM2",
663
664 mode = 422, ~-~- COM2 does not support RS422
665
666 ...
667
668 }
669
670 serial.open(setup)
671 )))
672
673 **Data bit:**
674
675 1. When the data bit is 7, the maximum value of data transmission is 127 (0x7F), and non-ASCII characters will be truncated, resulting in data errors and garbled characters.
676 1. When the data bit is 8, the maximum value of data transmission is 255 (0xFF), which supports the transmission of any character.
677
678 (((
679 == **3.1 serial.open(table setup)** ==
680 )))
681
682 **Function:**
683
684 Enable one serial port
685
686 **Parameters:**
687
688 //Setup// is a Lua table; it needs to contain the following fields
689
690 //String setup.name//,// //serial port name, such as: COM1/COM2 (requires uppercase)
691
692 //number setup.mode//, mode: RS232/RS485/RS422
693
694 //number setup.baud_rate//, such as 115200
695
696 //number setup.stop_bit//, stop bit: 1 or 2
697
698 //number setup.data_len//, data bit: 7 or 8
699
700 //string setup.check_bit//, check bit: NONE/ODD/EVEN/SPACE
701
702 //number [setup.wait_timeout=300]//, waiting timeout
703
704 //number [setup.recv_timeout=50]//, receive wait timeout
705
706 //number [setup.flow_control=0]//, Flow control method, 0:XON/XOFF, 2:DSR/ER
707
708 Supported baud rate
709
710 1200/2400/4800/9600/14400/19200/38400/43000/57600/76800/115200/128000/230400/256000/460800/961000
711
712 **Return:**
713
714 Succeed: serial object
715
716 Failed: multi
717
718 (((
719 == **3.2 serial.close(serial obj)** ==
720 )))
721
722 **Function:**
723
724 Disable the serial port
725
726 **Parameters:**
727
728 //Obj //is the object returned by serial.open
729
730 **Return:**
731
732 Succeed: true
733
734 Failed: multi
735
736 (((
737 == **3.3 serial:read(number bytes[, number timeout])** ==
738 )))
739
740 **Function:**
741
742 Read the specified byte length serial port data
743
744 **Parameters:**
745
746 //bytes//: number of bytes
747
748 //[timeout=50]//: timeout for reading, in milliseconds
749
750 **Return:**
751
752 Succeed: true
753
754 Failed: multi
755
756 (((
757 == **3.4 serial:write(string data)** ==
758 )))
759
760 **Function:**
761
762 Write the specified byte length to serial port data
763
764 **Parameters:**
765
766 //data//: serial port data
767
768 **Return:**
769
770 Succeed: true
771
772 Failed: multi
773
774 (((
775 == **3.5 serial:flush([number flag])** ==
776 )))
777
778 **Function:**
779
780 Clear the serial port buffer
781
782 **Parameters:**
783
784 //[flag=2]// clear option: 0: read, 1: write, 2: read-write
785
786 **Return:**
787
788 Succeed: true
789
790 Failed: multi
791
792 (((
793 == **3.6 serial:close()** ==
794 )))
795
796 **Function:**
797
798 Close the serial port object
799
800 **Parameters:**
801
802 None
803
804 **Return:**
805
806 Succeed: true
807
808 Failed: multi
809
810 (((
811 = **4 MQTT operation** =
812 )))
813
814 Operations on MQTT such as connect, subscribe, etc. must use ':' for full mode calls, that is, operate on a created MQTT object.
815
816 Both MQTT subscriptions and publications are asynchronous implementations that require the user to implement a callback function.
817
818 **QoS value:**
819
820 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.
821
822 1: The message is delivered at least once, but the message may be delivered repeatedly.
823
824 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.
825
826 **Retain flag:**
827
828 0: not reserved;
829
830 1: reserved
831
832 (((
833 == **4.1 mqtt.create(string serverurl, string clientid)** ==
834 )))
835
836 **Function:**
837
838 Create an MQTT object
839
840 **Parameters:**
841
842 //serverurl //Server url
843
844 Format: "//protocol:~/~/host:port//"
845
846 //protocol//: tcp/ssl
847
848 //host//: Host name/IP
849
850 //port//: such as 1883
851
852 //clientid//: Client ID
853
854 **Return:**
855
856 Succeed: MQTT object
857
858 Failed: multi
859
860 (((
861 == **4.2 mqtt.close(mqtt obj)** ==
862 )))
863
864 **Function:**
865
866 Close the specified MQTT object (if the connected server will be disconnected automatically)
867
868 **Parameters:**
869
870 //Obj //is the objeced returned by mqtt.create
871
872 **Return:**
873
874 Succeed: true
875
876 Failed: multi
877
878 (((
879 == **4.3 mqtt:connect(table conn[, table lwt, table cart])** ==
880 )))
881
882 **Function:**
883
884 Establish a connection to the server
885
886 **Parameters:**
887
888 //conn //is a Lua table and needs to contain the following fields
889
890 //string conn.username//, user name
891
892 //string conn.password//, password
893
894 //number [conn.netway=0]//, networking method, if set error number will use Ethernet method
895
896 * 0: Ethernet
897 * 1: WIFI
898 * 2: 4G
899 * 3: 2G
900
901 //number [conn.keepalive=60]//, keep connected heartbeat interval, in seconds
902
903 //number [conn.cleansession=1]//, empty the session as described below:
904
905 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:
906
907 * 1 (Empty): If a session exists and is 1, the previous session messages on the client and server are emptied.
908 * 0 (reserved): Conversely, both the client and the server use the previous session. If the previous session does not exist, start a new session.
909
910 //lwt// (Last Will and Testament) is a Lua table and needs to contain the following fields
911
912 //string lwt.topic//, topic
913
914 //string lwt.message//, message
915
916 //number [lwt.qos=0]//, qos value
917
918 //number [lwt.retain=0]//, retain flag
919
920 **Return:**
921
922 Succeed: true
923
924 Failed: multi
925
926 (((
927 == **4.4 mqtt:disconnect([number timeout])** ==
928 )))
929
930 **Function:**
931
932 Disconnect from the MQTT server
933
934 **Parameters:**
935
936 //[timeout=10000] //Disconnect waiting timeout, in milliseconds
937
938 **Return:**
939
940 Succeed: true
941
942 Failed: multi
943
944 (((
945 == **4.5 mqtt:isconnected()** ==
946 )))
947
948 **Function:**
949
950 Test whether or not a client is currently connected to the MQTT server
951
952 **Parameters:**
953
954 None
955
956 **Return:**
957
958 Succeed: true ~-~-Connected
959
960 Failed: false ~-~- Unconnected and other unknowns
961
962 (((
963 == **4.6 mqtt:subscribe(string topic, number qos)** ==
964 )))
965
966 **Function:**
967
968 Subscribe to the topic (before the subscription, the user must first call the connect method to connect to the server)
969
970 **Parameters:**
971
972 //topic//, topic name
973
974 //qos//, quality of service
975
976 **Return:**
977
978 Succeed: true
979
980 Failed: multi
981
982 (((
983 == **4.7 mqtt:unsubscribe(string topic)** ==
984 )))
985
986 **Function:**
987
988 Unsubscribe topic
989
990 **Parameters:**
991
992 //topic//, topic name
993
994 **Return:**
995
996 Succeed: true
997
998 Failed: multi
999
1000 (((
1001 == **4.8 mqtt:publish(string topic, string message, number qos, number retain[, number timeout])** ==
1002 )))
1003
1004 **Function:**
1005
1006 Publish message
1007
1008 **Parameters:**
1009
1010 //topic//, topic name
1011
1012 //message//, message
1013
1014 //qos//, quality of service
1015
1016 //retain//, retain flag
1017
1018 //[timeout=1000]//, waiting for response timeout, in milliseconds (only valid when qos is greater than 0)
1019
1020 **Return:**
1021
1022 Succeed: true
1023
1024 Failed: multi
1025
1026 (((
1027 == **4.9 mqtt:close()** ==
1028 )))
1029
1030 **Function:**
1031
1032 Close the mqtt object (the connection to the server will be automatically disconnected)
1033
1034 **Parameters:**
1035
1036 None
1037
1038 **Return:**
1039
1040 Succeed: true
1041
1042 Failed: multi
1043
1044 (((
1045 == **4.10 mqtt:on(string method, function callback)** ==
1046 )))
1047
1048 **Function:**
1049
1050 Register event callback function
1051
1052 **Parameters:**
1053
1054 //method//, It can be message/arrived/offline, these 3 types of events
1055
1056 //callback//, It is a callback function that needs to pass in a function
1057
1058 **1.**"message" will call this function after receiving the message
1059
1060 //Callback// prototype~:// function (string topic, string message)//
1061
1062 Parameter:
1063
1064 //Topic//, topic name
1065
1066 //Message//, content
1067
1068 **2.**"arrived" is published by publish, this function will be called after the publication arrives
1069
1070 //Callback// prototype~:// function ()//
1071
1072 Parameter:
1073
1074 None
1075
1076 **3.**This function will be called after the "offline" connection is lost
1077
1078 //Callback// prototype~:// function (string cause)//
1079
1080 Parameter:
1081
1082 //cause//, reason for loss of connection
1083
1084 **Return:**
1085
1086 Succeed: true
1087
1088 Failed: multi
1089
1090 (((
1091 == **4.11 mqtt:setup_cfg()** ==
1092 )))
1093
1094 **Function:**
1095
1096 Cloud mode interface, to obtain MQTT information configured by the cloud platform
1097
1098 **Parameters:**
1099
1100 None
1101
1102 **Return:**
1103
1104 //serverurl, clientid, conn, lwt, cart //(5 returns, respectively, server address, client ID, connection table, last word table, certificate table)
1105
1106 //conn// is the first parameter of the mqtt:connect method, which is fixed to table. If not configured, the information in the table is an empty string
1107
1108 //LWT// Last Words configuration is not yet open for setting, //lw//t is fixed to nil
1109
1110 If ssl is not enabled, //cart// is nil, otherwise //cart// is table
1111
1112 (((
1113 = **5 JSON operation** =
1114 )))
1115
1116 Lua only has a table data structure, so all arrays and key-value objects of json will be returned as a table.
1117
1118 (((
1119 == **5.1 json.encode( lua_object )** ==
1120 )))
1121
1122 **Function:**
1123
1124 Convert lua data type to json string
1125
1126 **Parameters:**
1127
1128 Lua data type (including boolean, number, string, table)
1129
1130 **Return:**
1131
1132 Json format string
1133
1134 (((
1135 == **5.2 json.decode(string json_string)** ==
1136 )))
1137
1138 **Function:**
1139
1140 Convert json string to lua data type
1141
1142 **Parameters:**
1143
1144 //json_string//, string of json data structure
1145
1146 **Return:**
1147
1148 Lua data type
1149
1150 (((
1151 == **5.3 json.null** ==
1152 )))
1153
1154 **Function:**
1155
1156 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.
1157
1158 **Parameters:**
1159
1160 None
1161
1162 **Return:**
1163
1164 None
1165
1166 = **6 Cloud mode** =
1167
1168 The cloud interface is only used in cloud mode, and V-NET mode is not available.
1169
1170 (((
1171 == **6.1 bns_get_alldata()** ==
1172 )))
1173
1174 **Function:**
1175
1176 Obtain all monitoring points (point table) data configured by the end user
1177
1178 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
1179
1180 **Parameters:**
1181
1182 None
1183
1184 **Return:**
1185
1186 Succeed: table two-dimensional array, the structure is as follows
1187
1188 Each item is a monitoring point, which contains 5 attributes:
1189
1190 (1 ID, 2 status, 3 tag name, 4 value, 5 custom)
1191
1192 The status contains 3 enumerated values (0: offline, 1: online, 2: timeout)
1193
1194 If there is no custom configuration, return an empty table, otherwise, return with "field name/field content"
1195
1196 E.g:
1197
1198 {
1199
1200 [1]= {[1]=1234, [2]=1, [3]='temp', [4]='23.5', [5]={"fruit"="apple"}},
1201
1202 [2]= {[1]=1235, [2]=1, [3]='humi', [4]='67', [5]={"fruit"="pear"}},
1203
1204 ...
1205
1206 [n]= {[1]=xxxx, [2]=x, [3]='xxxx', [4]='xx.x', [5]={}},
1207
1208 }
1209
1210 Failed: //table// empty table
1211
1212 (((
1213 == **6.2 bns_get_config(string from)** ==
1214 )))
1215
1216 **Function:**
1217
1218 Obtain custom configuration parameters with the specified from type
1219
1220 **parameter:**
1221
1222 from type, there are the following two categories, the string must be all lowercase
1223
1224 'user': terminal parameters, that is, custom parameters configured by the user
1225
1226 'bind': binding parameters, which are custom parameters that need to be input
1227
1228 when the user binds V-BOX
1229
1230 **Return:**
1231
1232 Succeed: table field name/field content table in organization form
1233
1234 Failed~:// table// empty table
1235
1236 (((
1237 == **6.3 bns_get_data(string name, string data)** ==
1238 )))
1239
1240 **Function:**
1241
1242 write data to the name of the monitoring point
1243
1244 **parameter:**
1245
1246 //name //The name of the monitoring point
1247
1248 //data// the data to be written
1249
1250 **Return:**
1251
1252 Succede: //string  // value before the monitoring point is written
1253
1254 Failed: nil
1255
1256 (((
1257 == **6.4 bns_get_data(string name)** ==
1258 )))
1259
1260 **Function:**
1261
1262 Read the data of the monitoring point name
1263
1264 **parameter:**
1265
1266 //name  // The name of the monitoring point
1267
1268 **Return:**
1269
1270 Succeed: string, table 2 results: the value of the monitoring point, custom content
1271
1272 Failed: nil
1273
1274 (((
1275 == **6.5 bns_get_datadesc()** ==
1276 )))
1277
1278 **Function:**
1279
1280 Obtain all configured communication ports and monitoring point information
1281
1282 **Parameters:**
1283
1284 None
1285
1286 **Return:**
1287
1288 Succeed: table three-dimensional array, the structure is as follows
1289
1290 Each item is a communication port, which contains 3 attributes (1 monitoring point array, 2 ID, 3 name)
1291
1292 The monitoring point array contains 4 attributes (1 ID, 2 name, 3 read and write attributes, 4 types)
1293
1294 Read and write attributes (1: read only, 2: write only, 3: read and write)
1295
1296 Type (1: switch, 2: number, 3: string)
1297
1298 E.g:
1299 {
1300
1301 [1]={~-~-The first communication port
1302
1303 [1]={~-~-monitoring point array of the first communication port
1304
1305 [1]={[1]=11,[2]='data1',[3]=3,[4]=2},
1306
1307 [2]={[1]=12,[2]='data2',[3]=3,[4]=2},
1308
1309 ...
1310
1311 [n]={[1]=xx,[2]='datan',[3]=x,[4]=x},~-~-n monitoring points
1312
1313 },
1314
1315 [2]=14, ~-~-ID
1316
1317 [3]='Modbus TCP' ~-~-n monitoring points
1318
1319 },
1320
1321 [2]={~-~-The second communication port
1322
1323 [1]={},~-~-The monitoring point of the second communication port is not configured and is empty
1324
1325 [2]=15, ~-~-ID
1326
1327 [3]='WECON' ~-~-communication protocol name
1328
1329 },
1330
1331 ...n communication ports and so on
1332
1333 }
1334
1335 Failed~:// table// empty table
1336
1337 (((
1338 == **6.6 bns_get_machineinfo()** ==
1339 )))
1340
1341 **Function:**
1342
1343 get machine information
1344
1345 **Parameters:**
1346
1347 None
1348
1349 **Return:**
1350
1351 Succeed: 3 string type results (model, machine code, software version)
1352
1353 Failed: nil
1354
1355 (((
1356 == **6.7 bns_get_groupdata(string name)** ==
1357 )))
1358
1359 **Function:**
1360
1361 Get all monitoring point data under the specified group name
1362
1363 **parameter:**
1364
1365 //Name  // group name
1366
1367 **Return:**
1368
1369 Succeed: //table// two-dimensional array, the structure is consistent with section 6.1
1370
1371 Failed: //table// empty table
1372
1373 (((
1374 == **6.8 bns_get_groupdesc()** ==
1375 )))
1376
1377 **Function:**
1378
1379 Get all group information
1380
1381 **Parameters:**
1382
1383 None
1384
1385 **Return:**
1386
1387 Succeed: //table// two-dimensional array, the structure is as follows
1388
1389 Each item represents a group, which contains 3 attributes (1 collection type, 2 name, 3 cycles)
1390
1391 Acquisition type (0: change acquisition, 1: word trigger, 2: no trigger, 3: trigger by time and conditions, 4: reset after trigger, 5: not reset after trigger)
1392
1393 Some collection types do not have a period, the period is -1
1394
1395 Failed: //table  // empty table
1396
1397 (((
1398 == **6.9 bns_get_onecache(string msg)** ==
1399 )))
1400
1401 **Function:**
1402
1403 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.
1404
1405 **Parameters:**
1406
1407 //msg// String
1408
1409 **Return:**
1410
1411 Succeed: true
1412
1413 Failed: nil
1414
1415 (((
1416 == **6.10 bns_get_allcache()** ==
1417 )))
1418
1419 **Function:**
1420
1421 Get all the cached content (once the internal cache file will be emptied)
1422
1423 **Parameters:**
1424
1425 None
1426
1427 **Return:**
1428
1429 Succeed: //table// one-dimensional array
1430
1431 E.g:
1432
1433 {
1434
1435 [1]="This is the oldest message", - the first is the oldest message
1436
1437 [2]="This is a test",
1438
1439 ...
1440
1441 [n]="This is the latest message", - the last is the latest message
1442
1443 }
1444
1445 Failede: nil
1446
1447 (((
1448 = **7 HTTP operation** =
1449 )))
1450
1451 Network communication includes Http request interface, this document does not provide interface description, please refer to the online document for how to use it.
1452
1453 (((
1454 == **7.1 http request** ==
1455 )))
1456
1457 [[http:~~/~~/w3.impa.br/~~~~diego/software/luasocket/http.html#request>>url:http://w3.impa.br/~~diego/software/luasocket/http.html#request]]
1458
1459 (((
1460 = **8 Internal register** =
1461 )))
1462
1463 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):
1464
1465 **~1. **Access by word, prefix @W_HDW,
1466
1467 For example: @W_HDW0 represents the first word of the system data area, @W_HDW1 represents the second word of the system data area.
1468
1469 **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.
1470
1471 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.
1472
1473 **✎Note: **
1474
1475 **~1. **The address in @B_HDX is taken from the word in @W_HDW, so pay special attention when using the address.
1476
1477 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.
1478
1479 **2.**The address of the bit address @B_HDX has a decimal point, while the word address is an integer.
1480
1481 (((
1482 == **8.1 Data storage area(HDW/HDX)** ==
1483 )))
1484
1485 The system storage area (HDW) of the V-BOX is used to store temporary data:
1486
1487 ~1. Access by word, the number range is: "@W_HDW0"-"@W_HDW299999".
1488
1489 2. Access in bit mode, the number range is: "@B_HDX0.0"-"@B_HDX299999.15".
1490
1491 (((
1492 == **8.2 Special data area (HSW/HSX)** ==
1493 )))
1494
1495 **✎Note: **
1496
Leo 3.2 1497 //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).
Leo Wei 1.1 1498
1499 //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.
1500
1501 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:
1502
1503 (% class="table-bordered" %)
1504 |address|function|Read and write status: read only, write only, read and write
1505 |@W_HSW0|restart|read and write
1506 |@W_HSW1|Box time: year|read and write
1507 |@W_HSW2|Box time: month|read and write
1508 |@W_HSW3|Box time: day|read and write
1509 |@W_HSW4|Box time: hour|read and write
1510 |@W_HSW5|Box time: minute|read and write
1511 |@W_HSW6|Box time: second|read and write
1512 |@W_HSW7|Box time: week|read and write
1513 |@W_HSW8|Ethernet IP1|read only
1514 |@W_HSW9|Ethernet IP2|read only
1515 |@W_HSW10|Ethernet IP3|read only
1516 |@W_HSW11|Ethernet IP4|read only
1517 |@W_HSW12|Ethernet Mask 1|read only
1518 |@W_HSW13|Ethernet Mask 2|read only
1519 |@W_HSW14|Ethernet Mask 3|read only
1520 |@W_HSW15|Ethernet Mask 4|read only
1521 |@W_HSW16|Ethernet Gateway 1|read only
1522 |@W_HSW17|Ethernet Gateway 2|read only
1523 |@W_HSW18|Ethernet Gateway 3|read only
1524 |@W_HSW19|Ethernet Gateway 4|read only
1525 |@W_HSW21|Ethernet MAC1|read only
1526 |@W_HSW22|Ethernet MAC2|read only
1527 |@W_HSW23|Ethernet MAC3|read only
1528 |@W_HSW24|Ethernet MAC4|read only
1529 |@W_HSW25|Ethernet MAC3|read only
1530 |@W_HSW26|Ethernet MAC4|read only
1531 |@W_HSW128|WIFI IP1|read only
1532 |@W_HSW129|WIFI IP2|read only
1533 |@W_HSW130|WIFI IP3|read only
1534 |@W_HSW131|WIFI IP4|read only
1535 |@W_HSW132|WIFI Mask 1|read only
1536 |@W_HSW133|WIFI Mask 2|read only
1537 |@W_HSW134|WIFI Mask 3|read only
1538 |@W_HSW135|WIFI Mask 4|read only
1539 |@W_HSW136|WIFI Gateway 1|read only
1540 |@W_HSW137|WIFI Gateway 2|read only
1541 |@W_HSW138|WIFI Gateway 3|read only
1542 |@W_HSW139|WIFI Gateway 4|read only
1543 |@W_HSW140|WIFI MAC1|read only
1544 |@W_HSW141|WIFI MAC2|read only
1545 |@W_HSW142|WIFI MAC3|read only
1546 |@W_HSW143|WIFI MAC4|read only
1547 |@W_HSW144|WIFI MAC5|read only
1548 |@W_HSW145|WIFI MAC6|read only
1549 |@W_HSW146|WIFI Signal value|read only
1550 |@W_HSW148|4G IP1|read only
1551 |@W_HSW149|4G IP2|read only
1552 |@W_HSW150|4G IP3|read only
1553 |@W_HSW151|4G IP4|read only
1554 |@W_HSW152|4G Mask 1|read only
1555 |@W_HSW153|4G Mask 2|read only
1556 |@W_HSW154|4G Mask 3|read only
1557 |@W_HSW155|4G Mask 4|read only
1558 |@W_HSW156|4G Gateway 1|read only
1559 |@W_HSW157|4G Gateway 2|read only
1560 |@W_HSW158|4G Gateway 3|read only
1561 |@W_HSW159|4G Gateway 4|read only
1562 |@W_HSW160|4G MAC1|read only
1563 |@W_HSW161|4G MAC2|read only
1564 |@W_HSW162|4G MAC3|read only
1565 |@W_HSW163|4G MAC4|read only
1566 |@W_HSW164|4G MAC5|read only
1567 |@W_HSW165|4G MAC6|read only
1568 |@W_HSW166|4G Signal value|read only
1569
1570 2. Other
1571
1572 2.1 Access password: addr_getstring("@W_HSW27", 16)
1573
1574 2.2 Machine code: addr_getstring("@W_HSW60", 64)
1575
1576 2.3 Positioning method (@W_HSW167): (read only)
1577
1578 ~1. Latitude and longitude
1579
1580 Longitude: addr_getdouble("@W_HSW168") (read only)
1581
1582 Latitude: addr_getdouble("@W_HSW172") (read only)
1583
1584 2. Base station positioning
1585
1586 LAC: addr_getdword("@W_HSW168") (read only)
1587
1588 CI: addr_getdword("@W_HSW172") (read only)
1589
1590 2.4 Convert base station to latitude and longitude via API
1591
1592 Longitude: addr_getdouble("@W_HSW187") (read only)
1593
1594 Latitude: addr_getdouble("@W_HSW183") (read only)
1595
1596 2.5 Operator information: addr_getdword("@W_HSW181") (read only)
1597
1598 2.6 Networking mode: addr_getword("@W_HSW177") (read only)
1599
1600 0: Ethernet, 1: WIFI, 2: 4G, 3: 2G
1601
1602 2.7 Map fence flag: addr_getword("@W_HSW178") (read only)
1603
1604 0: No map fence is drawn
1605
1606 1: Draw a map fence and the box is in the fence
1607
1608 2: Draw a map fence and the box is not in the fence
1609
1610 2.8 SIM card status addr_getword("@W_HSW179") (read only)
1611
1612 1: No card detected
1613
1614 2: Card insertion detected
1615
1616 3: The card status is abnormal
1617
1618 2.9 MQTT status addr_getword("@W_HSW180") (read only)
1619
1620 1: online, 2: offline
1621
1622 2.10 IO interface, X is read only, Y is read and write (H series)
1623
1624 addr_getbit(addr1), addr_setbit(addr2)
1625
1626 addr1:"@B_Y0" "@B_Y1" "@B_X0" "@B_X1"
1627
1628 addr2:"@B_Y0" "@B_Y1"
1629
1630 (((
1631 = **9 General Functions** =
1632 )))
1633
1634 (((
1635 == **9.1 send_sms_ira(string number, string message)** ==
1636 )))
1637
1638 **Function:**
1639
1640 Use IRA character set to send English text messages
1641
1642 **Parameters:**
1643
1644 //number: //number (up to 32 characters, the excess will be discarded)
1645
1646 //message~:// SMS content (up to 160 English characters, including special symbols, the part exceeding 160 characters will be discarded, and no characters in other languages should appear in the content)
1647
1648 **Return:**
1649
1650 Succeed: SMS corresponding id, used to get whether the SMS was sent successfully
1651
1652 Failed: multi
1653
1654 (((
1655 == **9.2 send_sms_ucs2(string number, string message)** ==
1656 )))
1657
1658 **Function:**
1659
1660 Use UCS2 character set to send SMS in Chinese and other languages, such as Korean, Japanese, etc.
1661
1662 **Parameters:**
1663
1664 //number: //number (up to 32 characters, the excess will be discarded)
1665
1666 //message~:// SMS content (Only 70 Chinese characters at most, the part exceeding the length will be discarded)
1667
1668 **Return:**
1669
1670 Succeed: SMS corresponding id, used to get whether the SMS was sent successfully
1671
1672 Failed: multi
1673
1674 (((
1675 == **9.3 sms_get_state(number id)** ==
1676 )))
1677
1678 **Function:**
1679
1680 Get the status of the SMS
1681
1682 **parameter:**
1683
1684 //id~:// SMS corresponding id
1685
1686 **Return:**
1687
1688 Succeed: SMS status (1: not sent, 2: sent successfully, 3: failed to send)
1689
1690 Failed: multi
1691
1692 (((
1693 == **9.4 jwt_encode(table head, table payload, string aud, number iat, number exp, string key, int jwttype)** ==
1694 )))
1695
1696 **Function:**
1697
1698 Convert data to JWT format
1699
1700 **parameter:**
1701
1702 //aud: //project name
1703
1704 //iat: //The valid period start timestamp of the JWT data format
1705
1706 //exp~:// the expiration time stamp of the JWT data format
1707
1708 //head~:// head information table
1709
1710 key: key in JSON format
1711
1712 value: value in JSON format
1713
1714 type:value type, 0:string,1:integer,2:number,3:boolean
1715
1716 {
1717
1718 {key="test1",value="test1",type="0"}
1719
1720 }
1721
1722 payload: payload information table
1723
1724 The format is consistent with the header information table
1725
1726 {
1727
1728 {key="test",value="test",type="0"}
1729
1730 }
1731
1732 //jwttype: //encryption type
1733
1734 0:RS256 1:RS384 2:RS512
1735
1736 3: PS256 4: PS384 5: PS512
1737
1738 6:HS256 7:HS384 8:HS512
1739
1740 9:ES256 10:ES384 11:ES512
1741
1742 //key~:// the private key required for encryption
1743
1744 For example:
1745
1746 function jwt.main()
1747
1748 local PRIVATE_KEY = ~[~[~-~- Please enter the secret key~-~-]]
1749
1750 local JWTType=0
1751
1752 local payload = ~{~{key="test1",value="test1",type="0"},
1753
1754 {key="test",value="123122131",type="1"}}
1755
1756 local head = ~{~{ key="name",value="data",type="0"},
1757
1758 {key="test2",value="test2",type="0"}}
1759
1760 local aud = "project"
1761
1762 local iat = 123122131
1763
1764 local exp1 = 123122331
1765
1766 local en = jwt_encode(head,payload,aud,iat,exp1,PRIVATE_KEY,JWTType);
1767
1768 print(en)
1769
1770 End
1771
1772 (((
1773 == **9.5 convertohex(number type, number value)** ==
1774 )))
1775
1776 **Function:**
1777
1778 Convert data into hexadecimal data
1779
1780 **parameter:**
1781
1782 //type~:// incoming data type 0:word 1:dword 2:float
1783
1784 //value~:// the data to be converted
1785
1786 **Return:**
1787
1788 Succeed: the converted hexadecimal data
1789
1790 Failed: multi
1791
1792 (((
1793 == **9.6 set_network(table config)** ==
1794 )))
1795
1796 **Function:**
1797
1798 Set V-BOX network, take effect after restart
1799
1800 **parameter:**
1801
1802 //config~:// incoming network configuration table
1803
1804 1. connectMode: the way V-BOX connects to the server, 0: Ethernet, 1: WIFI, 2: 4G, 3: 2G, it is not allowed to be empty.
1805 1. ethernetEnable: Whether to enable Ethernet, 1: enable, 0: disable, and it is not allowed to be empty.
1806 1. ethernetLanIp: Set the LAN IP address. Only V-BOX with three network ports support this configuration, and other models of V-BOX do not support setting LAN IP. This item is allowed to be empty.
1807 1. ethernetIpMode: Whether to enable Ethernet static IP, 1: Enable static IP, 0: DHCP, not allowed to be empty.
1808 1. ethernetIp: The IP address needs to be configured when the Ethernet static IP is used, and it is not allowed to be empty.
1809 1. ethernetNetmask: The subnet mask needs to be configured when Ethernet static IP is used, and it is not allowed to be empty.
1810 1. ethernetGateway: The gateway can be configured when Ethernet static IP is used.
1811
1812 1. When using the Ethernet network, if the Gateway is empty, V-BOX will not connect to the server.
1813 1. If you only use Ethernet to directly connect to the PLC for communication, you do not need to configure a gateway.
1814
1815 1. ethernetFirstDns: You can configure the preferred DNS server when the Ethernet static IP is used, and it is allowed to be empty. If you use the Ethernet network and do not fill in the DNS server, V-BOX will not be connected to the server.
1816 1. ethernetSpareDns: Alternate DNS server can be configured when the Ethernet static IP is used, and it is allowed to be empty.
1817 1. wifiEnable: Whether to enable WIFI, 1: enable, 0: disable, it is not allowed to be empty. If it is a model that does not include WIFI, directly disable it.
1818 1. wifiName: WIFI name, if WIFI is enabled, it is not allowed to be empty.
1819 1. wifiPassword: WIFI password, it is allowed to be empty.
1820 1. wifiIpMode: Whether to enable WIFI static IP, 1: Enable static IP, 0: DHCP, not allowed to be empty.
1821 1. wifiIp: IP address needs to be configured when WIFI static IP is used, it is not allowed to be empty.
1822 1. wifiNetmask: The subnet mask needs to be configured when WIFI static IP is used, and it is not allowed to be empty.
1823 1. wifiGateway: The gateway can be configured when WIFI static IP is used, and it is not allowed to be empty.
1824 1. wifiFirstDns: You can configure the preferred DNS server when the WIFI static IP is used, and it is allowed to be empty. If you use the WIFI network and do not fill in the DNS server, V-BOX will not be connected to the server.
1825 1. wifiSpareDns: Alternate DNS server can be configured when the WIFI static IP is used, and it is allowed to be empty.
1826 1. mobileEnable: Whether to enable the mobile network, 1: enable, 0: disable, it is not allowed to be empty, if it does not include 4G models, directly disable it.
1827 1. mobileApnMode: Whether to manually configure the APN, 0: Use the default APN, 1: Manually configure the APN, it is not allowed to be empty.
1828 1. apnName: APN name, if you choose to manually configure APN, it is not allowed to be empty.
1829 1. apnPassword: APN username, it is allowed to be empty.
1830 1. apnUserName: APN number, it is allowed to be empty.
1831 1. apnNumber: APN number, it is allowed to be empty.
1832
1833 **Return:**
1834
1835 Succeed: true
1836
1837 Faied: multi
1838
1839 (((
Leo 3.2 1840 == **9.7 remote_com_start(string config)** ==
Leo Wei 1.1 1841 )))
1842
1843 **Function:**
1844
1845 start serial port pass-through
1846
1847 **Parameter:**
1848
1849 //config: //incoming serial port parameter configuration, JSON format
1850
1851 1. type:0, serial port pass-through
1852 1. port: serial port number marked on the V-BOX
1853 1. comtype:0-RS232, 1-RS485, 2-RS422
1854 1. baudrate: Baud Rate
1855 1. data_length: Data Bits
1856 1. stop_bit: Stop Bit
1857 1. check_bit: Check Bit
1858
1859 **Return:**
1860
1861 Succeed: true
1862
1863 Failed: multi
1864
1865 (((
1866 == **9.8 remote_com_stop()** ==
1867 )))
1868
1869 **Function:**
1870
1871 close serial port pass-through
1872
1873 **Return:**
1874
1875 Succeed: true
1876
1877 Failed: multi
1878
1879 (((
Leo 3.2 1880 == **9.9 remote_com_state()** ==
Leo Wei 1.1 1881 )))
1882
1883 **Function:**
1884
1885 query the serial port pass-through status and pass-through server domain name and port
1886
1887 **Return:**
1888
1889 Succeed:
1890
1891 1. number, current pass-through status: 0-none 1,2-starting pass-through 3-penetrating 4,5-finishing pass-through 6-pass-through error
1892 1. string, pass-through server domain name and port number, xxxx (domain name): xxx (port number)
1893
Leo 3.2 1894 Failed: multi