Wiki source code of 01 Lua Functions

Version 5.4 by Leo on 2022/06/16 17:20

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