4G 模块HTTP连接Web Server 提交数据到PHP

4G 模块HTTP连接Web Server 提交数据到PHP

一、4G模块说明

       4G 模块内置CAT1 4G模块,支持中国移动、中国电信、中国联通4G网络,支持TCP、UDP、HTTP、MQTT等众多复杂网络协议和多Socket接口。

       有很多应用中心均采用Web方式来搭建,后台采用了JAVA,PHP等方式实现,这种情况下,需要采用HTTP协议通信。
       这就与4G模块通过TCP或者MQTT通信协议的方式不同,因为在HTTP协议方式下,4G模块只能以HTTP方式,主动上报数据到中心,4G模块作为HTTP客户端,而服务器端则无法主动下发采集指令给4G模块,只能在4G模块主动上报数据时,以HTTP应答方式下发指令。

     因此在模式下,4G DTU特别需要结合本地采集脚本的功能,来实现 DTU 自动采集仪表数据并直接上传到 HTTP 服务器。

    为用户方便实现 WEB 方式采集仪表数据, 实现仪表数据直接进入 WEB 平台,众山LTE-658系列4G 模块,实现了本地化脚本功能,支持HTTP协议方式,以及各种远程控制协议以及 Modbus 控制 DI/DO 的协议均能在 HTTP 协议上支持,所以用户的 WEB 平台可以很方便的实现参数配置、开关控制、modbus 传感器数据采集等功能。


 

串口接线:
        LTE-658提供两种串口,RS232和RS485,端口定义如下:

1)232是标准的DB9公头

外形如下:

G

1)串口波特率:1200-115200bps

2)其他通信参数:奇偶校验:N/E/O;启始位:1 位;数据位:8 位;停止位:1/2 位;

管脚说明:

管脚

1

2

3

4

5

6

7

8

9

定义

RXD

TXD

GND

2)485使用的2PIN的端子接口,左A右B(PVC面板上有标注)。

    注:①232和485使用同一UART,只能使用一个,不能同时使用,不然会产生数据冲突。

②可以在计算机-属性-设备管理器-端口查看DTU端口号,配置参数需要打开此端口。


二、参数配置说明

2.1 配置说明

2.1.1 先给DTU上电,POW灯常亮、SYS灯闪烁,说明设备工作正常,先等待10S,等4G模块启动。

2.1.2 下载4G DTU JSON通用配置软件,运行“ZSDevConfig1.1.6”

 

G

 2.1.3 第一次打开软件需要选择JSON配置文件,选择“JsonConfig-4G DTU CAT1 B1.json”。打开以后点击众山物联云参数可以进入配置界面,配置界面和参数区说明如下如下:

G

所有参数配置完以后点复位设备按钮
G

注:参数配置完以后需要复位设备,参数才会生效

相关参数配置

G

 云开关:关闭

  1. 网络通信协议:HTTP
  2. 主数据中心1IP地址和域名:(示例)1.smset001.applin.com:80
  3. 主数据中心1侦听端口号:80
  4. HTTP方法: GET或POST可选
  5. HTTPURL地址:HTTP服务器的URL地址
  6. HTTP发送KEY:默认为 dataDTU 使用 KEY=VALUE 的形式发送数据,不同的 DTU 配置不同的 KEY 值可以便于 HTTP 服务器区分不同的 DTU,比如可以把 KEY 设置成 ID 号, HTTP 就能知 道是哪个 DTU 发来了数据。可以在 HTTP KEY 处配置更多的信息,如:设置 HTTP KEY 为:dtuid=00000001&data 那么 DTU 请求的内容则为: /httpdtu.php?dtuid=00000001&data=串口报文,这时在 http 服务器端,除了获取到 data 数据外,还能得到设备编号信息。 

     
  7. 说明
  8. DTU发送数据采用KEY=VALUE的格式,KEY为用户可任意配置,VALUE为串口数据或DTU
    应命令的HEX字符表示,比如0x01数据,在VALUE中表示为”01”,字符’1’VALUE中表示为”31”
    如:串口数据为HEX格式:0103000100024321KEY默认为data的情况下,则实际发送数据为:
    data=0103000100024321
    如:串口数据为字符串格式:”1234567890ABCD”,则实际发送数据为:
    data=3132333435363738393041424344
    HTTP服务器应答DTU数据时,采用固定格式<data>数据</data>的格式,并且数据类型为可见字符
    HEX表示,这样的目的是为了让DTU方便解析用户的有用数据,DTU在接收到HTTP服务器应答数
    据时会解析<data></data>之间的内容,并把可见的HEX字符还原成原始HEX数据作为DTU的控制
    命令或非自己命令时从串口输出数据到用户设备。
    如:HTTP响应Modbus指令01030200011234时,实际数据为:<data>01030200011234</data>
    如:HTTP响应字符串数据”1234%abcd6789”时,实际数为:<data>31323334256162636436373839</data>

    温控系统举例说明(以 php 代码为例): 如 DTU 通过 485 挂接一个温度采集控制设备,DTU 可以通过脚本,周期性采集上传温度采集控制设备 的 MODBUS 数据,如报文内容为 0103020010B988,则其中的 0010 为温度值(对应 16 度);
    PHP 代码的处理为:

    G

     当温度>20 度时,向现场通过 16 号指令向地址为 0x0014 的寄存器写 1; 当温度低于 10 度时,向现场通过 16 号指令向地址为 0x0014 的寄存器写 0; 当温度处于 10 度与 20 度之间时,则不向现场写入指令。


     

    二、众山ZS脚本语法详解

    2.1脚本格式

    @cmd=value

    @:脚本头,每一条脚本指令都使用@开始。

    cmd:指令,为1或多个字符、数字组成的字符串,不区分大小写,下面详解每一条脚本指令的含义。

    value:指令动作,指定指令需要执行的值。

    2.2脚本指令详解

    2.2.1 @E命令回传指令

    指令

    名称

    格式

    含义

    默认值

    @E

    命令回传

    @E=1

    @E=0

    控制@C和@O定义的命令是否需要回传中心

    @E=1表示回传    @E=0表示不回传

    @E=0

    E: 命令回传,此脚本指令控制@C和@O脚本指令定义的采集命令是否需要回传给中心,value为1表示需要回传,value为0表示不回传。不使用此指令时默认为不回传。此指令为整个脚本全局生效指令,直到脚本结束。如果有些采集指令需要回传有些不需要回传只需要在相应的采集指令前加入此指令做相应的控制即可。

    示例:@E=1  回传采集命令

    @E=0  不回传采集命

    2.2.2 @C执行命令指令(HEX格式)

    指令

    名称

    格式

    含义

    @C

    执行命令

    @C=HEX

    @C=HEX+V1

    定义执行命令,等效于中心下发数据, 命令输入采用HEX格式

    C: 执行命令,@C定义的命令DTU首先会判断是不是AA55开始的控制自己的指令(参考控制协议手册),如是,则执行命令的功能,DTU响应的数据会进入发送队列,如不是,DTU则会输出命令到串口作为外接仪表的采集命令。当命令为Modbus指令时,可以在命令最后使用V1让DTU自动计算CRC校验并跟在命令的结尾,省去了用户需要自己计算校验的麻烦。此脚本指令定义的采集命令内容为可见的HEX字符。

    示例:Modbus采集指令:01  03  00  01  00  01  12  34

      脚本表示为:@C=0103000100011234@D=1

    采集外接传感器的Modbus指令并自动计算CRC校验:64 03 00 11 00 01

        脚本表示为:@C=640300110001V1@D=1

    命令执行或者下发后,DTU自己的响应命令或者仪表返回的数据,DTU放入发送队列,根据定义的发送控制适当的时候进行上传。

    注:因为传感器应答需要一定时间,所以@C指令后面必须加个@D延时等待传感器应答

    比如@C=010300000001V1@D=1

    2.2.3 @CS执行命令指令(字符格式)

    指令

    名称

    格式

    含义

    @CS

    执行命令

    @CS=STR

    定义执行命令,等效于中心下发数据,字符格式,功能同@C,不支持自动校验。字符内容不能出现‘@’和‘=’字符,其他字符都支持

    CS: 此指令功能和@C相同,@C命令输入的是HEX格式命令,@CS输入的命令采用文本格式,适合于用户仪表为字符通讯协议的应用,免去用户转换成HEX格式命令的麻烦。

    2.2.4 @D延时控制指令

    指令

    名称

    格式

    含义

    @D

    延时控制

    @D=X

    @D=XY

    在此处DTU会等待指令所定义的延时,然后再继续执行

    脚本。纯数字(X)单位默认为秒;也可以数字(X)+单位(Y)的形式,支持的单位有:

    ‘S’:秒

    ‘M’:分钟

    ‘H’:小时

    ‘m’:毫秒

    D:延时控制,此脚本指令用于控制延时,DTU开关仪表电源后等待仪表稳定的延时或者发送采集命令后等待应答的延时控制。value为数字,可以是小数(比如0.1,表示延时0.1秒),单位默认为秒;也可以为数字+单位,支持的单位有S(秒),M(分),H(时),m(毫秒)。

    示例:@D=1S (等待1秒)

    @D=0.5(等待0.5秒)

    @D=2M(等待2分钟)

    @D=100m(等待100ms)

    2.2.5 @W脚本执行期间接收中心下发指令

    指令

    名称

    格式

    含义

    @W

    中心下发指令延时控制

    @W=X

    @W=XY

    当脚本执行期间,同时需要接收服务器下发的指令,可以用@W指令延时。格式和@D=指令一样,支持的单位有:
    ‘S’:秒

    ‘M’:分钟

    ‘H’:小时

    ‘m’:毫秒

    当脚本执行期间,服务器下发指令,指令会被丢弃。如果想让DTU在脚本执行期间也可以响应服务器下发的指令,可以使用@W指令,在@W延时期间,DTU将服务器下发指令发送到串口,接收传感器返回的数据并上报到服务器。如果没有收到中心下发的指令,@W则不延时。指令格式和@D相同,支持的单位有:S(秒),M(分),H(时),m(毫秒)。

    注:@W指令必须用在@D指令之后

    示例:@C=010300000001V1@D=1@W=1@C=010300010001V1@D=1@W=1

    2.2.6 @A接收应答指令

    指令

    名称

    格式

    含义

    默认值

    @A

    接收应答

    @A=1

    @A=0

    在某些命令用户不需要关心仪表的返回值时可以使用@A=0关闭接收仪表响应,在需要接收的时候再用@A=1打开

    @A=1

    A: 接收应答,此脚本指令用于控制DTU是否接收仪表的应答,value为1表示接收应答,value为0表示不接收应答。不使用此指令时默认为接收应答。此指令为整个脚本全局生效指令,直到脚本结束,如果有些采集指令需要接收应答有些不需要接收应答只需在相应的采集命令前加入此指令做相应的控制即可。

    示例:@A=0  不接收后面仪表的应答数据

    小提示:在有些需要开关外接传感器电源的应用场合,此指令的灵活使用可以避免传感器开电期间串口数据的不稳定性,如传感器在开电期间可能会产生无用的数据或乱码输出给DTU,此时,用户可以在开电之前使用@A=0关闭DTU接收传感器数据,然后开电,等待传感器稳定,然后再@A=1打开接收,最后发送命令,这样可以过滤掉传感器上电期间串口不稳定性导致的多余数据。比如:@A=0@DO1=1@D=2S@A=1@C=xxxxxx@D=2S

    2.2.7 @S立即上报指令

    指令

    名称

    格式

    含义

    默认值

    @S

    立即上报

    @S=1

    在进行多次采集或者多仪表采集时,可以使用@S=1命令强制DTU进行一次当前接收数据的发送,如果不使用@S=1  DTU默认会脚本执行完毕才进行发送

    @S=0

    S: 立即上报,此脚本指令用于控制DTU立即上报仪表数据。value为1表示立即上报,默认情况下DTU执行完T指令控制的采集次数后上报(T默认为1,每次脚本执行结束都上报),用户在需要分开上报多个仪表数据时或者1个仪表的多条数据时,可以在发送采集命令后,DTU已经收到仪表应答时插入@S=1来立即上报之前的数据。

    示例:@S=1   立即上报

    2.2.8 @H数据标识指令(HEX格式)

    指令

    名称

    格式

    含义

    @H

    数据标识

    @H=HEX

    定义固定上传的数据,用于用户在不同的数据前使用@H指令插入固定的标识数据,DTU遇到@H指令时直接向

    发送缓冲区的当前位置插入@H后面定义的数据,数据输入格式为HEX格式

    H: 数据标识,此脚本指令用于在采集的仪表数据前加入用户自定义的数据标识或用户便于解析的特征数据等, 比如在进行多个仪表数据采集时加入分隔符便于区分不同的仪表数据,value为可见的HEX字符,比如123表示为313233。如需要多个标识数据需要在需要的位置使用@H插入。

    示例:@H=DD01    @H=DD02

    2.2.9 @STR数据标识指令(字符格式)

    指令

    名称

    格式

    含义

    @STR

    数据标识

    @STR=STR

    定义固定上传的数据,用于用户在不同的数据前使用@STR指令插入固定的标识数据,DTU遇到@STR指令时直接向发送缓冲区的当前位置插入@STR后面定义的数据,数据格式采用字符格式输入,字符内容不能出现‘@’和‘=’字符,其他字符都支持

    STR: 数据标识,此脚本指令用于在采集的仪表数据前加入用户自定义的数据标识或用户便于解析的特征数据等, 比如在进行多个仪表数据采集时加入分隔符便于区分不同的仪表数据,value为可见的文本字符。如需要多个标识数据需要在需要的位置使用@STR插入。

    示例:@STR=123   

    2.2.10 @DOx继电器开关控制指令

    指令

    名称

    格式

    含义

    @DO1

    @DO2

    DO开关控制

    DO状态上报

    @DO1=0

    @DO1=1

    此指令用户控制DTU的DO1~DO2继电器,或者上报DO1~DO2的状态

    DO:DO开关控制,此脚本指令用于控制DTU的DO1~DO2。value为1 表示开,value为0表示关。只有带有DI DO的DTU才具有此功能,并且不同的型号DO个数可能不一样,用户可以查看产品手册了解该型号支持的DO个数。@DO1=0表示让DTU断开DO1继电器,@DO1=1表示让DTU闭合DO1继电器,@DO1=?表示让DTU上报DO1继电器的状态,状态为1个字节,‘0’表示断开,‘1’表示闭合。此指令经常用于用户在采集仪表数据时给仪表上电和关电的动作。

    示例:@DO1=1  打开开关1

          @DO1=0  关闭开关1  

    2.2.11 @DIx状态上报指令

    指令

    名称

    格式

    含义

    @DI1

    @DI2

    DI状态上报

    @DI1=?

    此指令用于读取DI1~DI2口的状态

    DI:状态上报,value的值为:?。@DI1=? DTU会上报DI1的状态,状态为1个字节,‘0’表示低电平,‘1’表示高电平。

    示例:@DO1=?  获取DI1的状态

    2.2.12 @GPS 采集GPS定位指令

    指令

    名称

    格式

    含义

    @GPS

    @GPS

    GPS定位信息采集

    GPS定位信息采集

    @GPS=*

    采集DTU所有GPS定位信息,发送到服务器

    @GPS=UART_*

    采集DTU所有GPS定位信息,发送到串口

    @GPS=GGA

    采集标准的GGA信息,发送到服务器

    @GPS=UART_GGA

    采集标准的GGA信息,发送到串口

    @GPS=RMC

    采集标准的RMC信息,发送到服务器

    @GPS=UART_RMC

    采集标准的RMC信息,发送到串口

    @GPS=GSA

    采集标准的GSA信息,发送到服务器

    @GPS=UART_GSA

    采集标准的GSA信息,发送到串口

    @GPS=JW

    采集经纬度信息,发送到服务器

    @GPS=UART_JW

    采集经纬度信息,发送到串口

    @GPS=WJ

    采集纬经度信息,发送到服务器

    @GPS=UART_WJ

    采集纬经度信息,发送到串口

    @GPS=WJ

    采集纬经度信息,发送到服务器

    @GPS=UART_WJ

    采集纬经度信息,发送到串口

    @GPS=TL

    TLink平台专用脚本,格式为

    GPS,2236.70368,N,11350.37840,E,$

    注:此脚本只适用于GPS版本的4G DTU。

    示例:@GPS=GGA

    返回的报文格式为标准的GPGGA格式,解析如下:

    $GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*xx

    <1> UTC 时间,格式为hhmmss.sss;

    <2> 纬度,格式为ddmm.mmmm(第一位是零也将传送);

    <3> 纬度半球,N 或S(北纬或南纬)

    <4> 经度,格式为dddmm.mmmm(第一位零也将传送);

    <5> 经度半球,E 或W(东经或西经)

    <6> 定位质量指示,0=定位无效,1=定位有效;

    <7>使用卫星数量,从00到12(第一个零也将传送)

    <8>水平精确度,0.5到99.9

    <9>天线离海平面的高度,-9999.9到9999.9米M指单位米

    <10>大地水准面高度,-9999.9到9999.9米M指单位米

    <11>差分GPS数据期限(RTCMSC-104),最后设立RTCM传送的秒数量

    <12>差分参考基站标号,从0000到1023(首位0也将传送)。

    当DTU返回报文 $GNGGA,040201.000,3027.82284,N,10359.55214,E,1,07,1.4,451.1,M,0.0,M,,*7D 时,

    具体解析格式可以参考标准的GGA格式。

    2.2.13 @TS 获取NTP时间指令

    指令

    名称

    格式

    含义

    @TS

    NTP时间

    @TS=1

    @TS=2

    @TS=3

    @TS=4

    @TS=1表示往服务器发送HEX格式的时间戳

    @TS=2表示往服务器发送字符串格式的时间戳

    @TS=3表示往串口发送HEX格式的时间戳

    @TS=4表示往串口发送字符串格式的时间戳

    注:只有当DTU连上网以后才能使用NTP时间功能

    示例:@TS=1 往服务器发送HEX格式时间戳:2020032805100227

    @TS=4 往串口发送字符串格式时间戳:2020/03/28,05,10:05:30

    2.2.14 定时脚本

    指令

    名称

    格式

    含义

    支持所有@脚本指令

    定时脚本

    见示例

    当设备连接上网络后,通过获取时钟,可以在定时脚本参数中配置时间和对应的脚本命令,就能在设置的时间执行指定的脚本

    注 :G1.14及以上版本支持定时脚本功能

    在参数中配置的格式为:年/月/日,星期,时:分:秒,然后用#接需要执行的脚本,用 | 分割每个时间需要执行的脚本。

    示例:

    2020/03/30,01,12:00:00#@C=010300000001840A@D=1|2020/03/30,01,13:00:00#@C=0203000000018439

    表示2020/03/30 12点执行@C=010300000001840A指令,2020/03/30 13点执行@C=0203000000018439

    也可以用%d匹配任意数字,这样会使脚本更加灵活,例如:

    2020/03/30,01,12:%d%d:00#@C=010300000001840A@D=1

    表示2020/03/30 12点的每一分钟执行一次@C=010300000001840A

                       

点击阅读全文

上一篇 2023年 5月 28日 am10:39
下一篇 2023年 5月 28日 am10:40