Wiki source code of 01 Lua Functions

Version 5.7 by Stone Wu on 2022/07/12 09:20

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