查看“农田灌溉通讯文档”的源代码
←
农田灌溉通讯文档
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
== 描述 == 用于农田灌溉的系统通讯协议 == 说明 == === 规约 === 本文档所述的协议是用以东骏科技有限公司物联网服务平台和慢充设备的数据交互。 === 客服(技术)联系方式 === 杭州东骏科技有限公司 电话:0571-87017551 手机:13082852087 === 兼容性 === 仅适用于授权设备。 === 词汇表 === '''端口:'''充电时使用的接口,设备可以单独控制的电力输出结构。 '''端口编号:'''端口的程序代码,和设备编号共用用以表示端口在系统中的唯一值。端口编号必须以数字顺序编码,每台机器端口编号不得跳跃,不得重用。 '''响应类型:'''上报服务端的数据响应类型。分为即时响应上报和设备主动上报。 '''会话ID:''' 由服务端生成,用以区分不同的命令数据链。 === 网络通讯协议 === 本章节内容定义通讯模块和服务器之间的通讯协议。 === 通讯方式 === # 数据上报:string字符串 # 指令数据:定长报文 # 通讯网络协议:TCP === 关于粘包 === 由于服务器操作系统在处理TCP通讯时,将数据包转换成流传输给应用层,在数据频率高或者并发高的情况下很容易出现粘包,单片机受内存限制将不处理粘包,所以服务器在发送数据的时候需要注意的是尽量不要以特别高的频率向单片机发送数据,单片机如果接收到数据有粘包则只能处理前面一包的数据,后面的数据将会被丢弃,服务器可以通过重发机制避免粘包对业务产生影响,同时在很偶尔的情况下服务器发送数据可能出现分包(虽然现在大部分服务器发送慢充这样的数据不会出现分包),如果大量出现分包,请调整服务器网络参数设置,如果同一条数据被分包发送间隔大于2s将被单片机将在接收到后面的数据之前就认为前面的数据是非法的。同时因为服务器内存资源充足,建议服务器尽量对接收数据进行粘包处理。 == 协议结构 == === 命令结构 === 定义:服务器发送,通讯模块接收的数据报文。 {| class="wikitable" |- | 1 || 2 || 3 || 4 || 5 || 6 || 7 |} 1:开始标识(1byte) “_” 2:报文长度(3byte)(ASCII数字) 3:命令(3byte)(英文大写,第一字节A为保留字段) 4:会话ID(6byte)(每一字节0x00-0x3D之间数字+偏移量0x31,当然如果使用A-Za-z0-9就一定再这个范围之内了,也就满足要求了),每次不同的通讯的会话ID都需要不一样(服务器发起的通讯至少连续的20次通讯不一样,除了特殊说明以外,当然我们的建议还是让每次通讯的会话ID尽可能的不一样),通常设备会在获取到服务器指令执行以后需要回复结果的会返回相同的会话ID给服务器,服务端可以通过会话ID获得设备当前回应的数据是哪一个会话的。同一个会话ID设备会认为是同一次通讯的重复发送,如果设备已经处理了相关的指令,就会丢弃之后相同会话ID的指令。设备由于内存限制,比对的会话ID是之前10次通讯的会话ID,为了可靠期间服务端只要保证连续的20次服务器发起的通讯会话ID不一致就可以了确保设备不会触发丢弃操作而影响指令的执行。另外如果有些命令服务器为了使设备一定收到,但设备只需要执行一次的,这样的命令多次发送用同一会话ID发送就可以了 5:分隔符(1byte) “/” 6:参数(如果没有参数则没有该部分) 7:结束标识(2byte) (0x0D 0x0A) === 响应结构 === 定义:通讯模块发送,服务器接收的报文。 {| class="wikitable" |- | 1 || 2 || 3 || 4 || 5 || 6 || 7 |} 1:开始标识(1byte) “_” 2:响应类型(2byte) PG-ping,DV-设备号(IMEI),ID-SIM卡ICCID号,CM-客户端命令,RP-数据上报,RS-命令响应, RJ-Json数据上报 3:命令(3byte)(大写英文,回传服务器请求的命令,如果没有服务器请求则为AAA) 4:会话ID(6byte)(无服务器会话ID则返回”000000”,文档中指令的会话ID有特殊定义的,已定义为准) 5:内容长度(3byte)(ASCII数字)6的长度 6:内容(内容长度可以为空) 7:结束标识(2byte) (0x0D 0x0A) === 命令限制 === # ADV(设备号IMEI号) AID(SIM卡ICCID号) AXT(心跳) AAA(空指令) 为系统内置命令不能用于其他接口 # 业务级别的接口命令不得用 A 开头 == 修订记录 == === 2022年6月16日 === 1: 优化5.1.2接口, 响应码3对应的说明 2: 更新5.2.2接口, 启动响应同时返回本地可用电表地址 3: 新增5.7.2接口, 设备主动上报本地可用电表地址 4: 更改5.7.4接口, FDZ将不再用于平台下发地址, 改为与设备本地地址比对并返回比对结果 === 2022年6月24日 === 1: 新增5.12.11测试接口, TAF, 用于2.0设备远程调整液位ADC参数 === 2022年6月29日 === 1: 更改5.3.1接口, 刷卡相关字段在非刷卡时用0填充 === 2022年7月11日 === 1: 新增5.12.13和5.12.14接口, 手动开关日志便于远程调试ADC参数 === 2022年12月15日 === 1: 新增5.13接口, 用于充值机 2: 5.4.1完成上报增加用水量 === 2023年02月17日 === 1: 5.3.1增加总有功/总无功/总视在/频率/cosa五个参数 === 2023年02月17日 === 新增5.12.15 设置串口 == 业务协议 == === 查询设备状态 === ==== 设备状态查询请求 ==== {| class="wikitable" |- | '''发送方''' || 服务器 |- | '''说明''' || 查询主板端口目前的状态 |- | '''开始标志''' || 1byte,“_” |- | '''报文长度''' || 3byte,表示整个报文的总长度,ASCII数字表示 |- | '''命令''' || 3byte,STA |- | '''会话ID''' || 6byte,服务器生成 |- | '''分隔符''' || 1byte,“/” |- | '''参数''' || 空 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 响应设备状态 ==== {| class="wikitable" |- | '''发送方''' || 通信模块 |- | '''说明''' || 返回服务端查询内容 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RS |- | '''命令''' || 3byte,STA |- | '''会话ID''' || 6byte,服务器生成 |- | '''内容长度''' || 3byte,表示内容长度,ASCII数字表示 |- | '''内容''' || 端口号 : 状态(1-端口空闲,2-端口正在使用,3-端口未就绪,4-端口故障) (“/”端口分隔符) |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} === 启动充电 === ==== 下发充电 ==== {| class="wikitable" |- | '''发送方''' || 服务器 |- | '''说明''' || 支付完成后,启动设备,开始充电 |- | '''开始标志''' || 1byte,“_” |- | '''报文长度''' || 3byte,表示整个报文的总长度,ASCII数字表示 |- | '''命令''' || 3byte,WXC |- | '''会话ID''' || 6byte,服务器生成 |- | '''分隔符''' || 1byte,“/” |- | '''参数''' || 端口号(2byte) 订单号(23byte) 支付方式(1byte,1-支付宝,2-微信,3-刷卡) 支付时长限制(5byte, 十六进制字符串, 单位为秒, 00000代表没有时长限制) 支付金额(8byte,单位为分,刷卡无效支付金额为全0) 支付单价(8byte,单位0.0001元) 上次停止电表读数(8byte,0.01度) 电表地址(12byte) 刷卡卡号(10byte,支付宝微信为全0) 卡内余额(8byte,0.01元,支付宝微信无效卡内余额为全0) 卡类型(5byte,支付宝微信为全0) |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 充电响应 ==== {| class="wikitable" |- | '''发送方''' || 通信模块 |- | '''说明''' || 响应服务端启动情况 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RS |- | '''命令''' || 3byte,WXC |- | '''会话ID''' || 6byte,服务器生成 |- | '''内容长度''' || 3byte,表示内容长度,ASCII数字表示 |- | '''内容''' || 状态(1-成功,2-未就绪(或故障),3-端口已用)#/# 本次起始电表读数(0.01度)#/# 电表地址, 12Byte, 如果未就绪返回12位0 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} === 充电中途通知 === ==== 充电中途通知 ==== {| class="wikitable" |- | style="width:70px" | '''发送方''' || 通信模块 |- | '''说明''' || 设备充电完成后,上报服务端,充电过程中每5分钟上报一次,连续1小时没有上报服务端可以结束订单 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RP |- | '''命令''' || 3byte,UWC |- | '''会话ID''' || 6byte,A12003 |- | '''内容长度''' || 3byte,表示内容长度,ASCII数字表示 |- | '''内容''' || 充电端口#/# 订单号#/# 当前充电电量(0.01度)#/# 当前充电单价(0.0001元)#/# 当前电表读数(0.01度)#/# 当前充电金额(0.01元)#/# 当前充电功率(0.01W)#/# 卡号:刷卡的卡号,如果不是刷卡则为0 #/# 卡类型:刷卡的卡类型,如果不是刷卡则为0 #/# A相电压, 精度0.1V, 2200->220V #/# B相电压, 精度0.1V, 2200->220V #/# C相电压, 精度0.1V, 2200->220V #/# A相电流, 精度0.001A, 1234->1.234A #/# B相电流, 精度0.001A, 1234->1.234A #/# C相电流, 精度0.001A, 1234->1.234A #/# 总有功功率, 精度1W, 7000->7000W #/# 总无功功率, 精度1W, 7000->7000W #/# 总视在功率, 精度1W, 7000->7000W #/# 交流频率, 精度0.01Hz, 5000->50Hz #/# 总功率因数, 精度0.001, 500->0.5->cos60° |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} === 充电完成通知 === ==== 设备充电完成上报 ==== {| class="wikitable" |- | style="width:70px" | '''发送方''' || 通信模块 |- | '''说明''' || 设备充电完成后,上报服务端 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RP |- | '''命令''' || 3byte,UWD |- | '''会话ID''' || 6byte,A12001 |- | '''内容长度''' || 3byte,表示内容长度,ASCII数字表示 |- | '''内容''' || 充电端口#/# 订单号#/# 本次充电电量(0.01度)#/# 本次充电单价(0.0001元)#/# 本次充电金额(0.01元)#/# 本次停止电表读数(0.01度)#/# 停止原因(0-时间用完了,1-用户手动停止(30分钟未插电),2-金额用完了,3-电量用完了,4-因充电器功率过大,5-刷卡退费结束,6-充电站异常停止,7-端口远程停止,8-烟感异常停止)#/# 卡号:刷卡的卡号,如果不是刷卡订单则卡号为空(非刷卡为全0) #/# 卡类型:刷卡的卡类型,如果不是刷卡订单则卡类型为空或为零(非刷卡为全0)#/# 本次用水量: 单位立方米, 精度0.001 #/# |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 响应上报结果 ==== {| class="wikitable" |- | '''发送方''' || 服务器 |- | '''说明''' || 收到订单结束后响应设备已收到, 收到后设备不再重试 |- | '''开始标志''' || 1byte,“_” |- | '''报文长度''' || 3byte,表示整个报文的总长度,ASCII数字表示 |- | '''命令''' || 3byte,UWD |- | '''会话ID''' || 6byte,服务器生成 |- | '''分隔符''' || 1byte,“/” |- | '''参数''' || 收到的订单号, 23字节字符 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} === 刷卡上报 === ==== 刷卡上报卡号==== {| class="wikitable" |- | style="width:70px" | '''发送方''' || 通信模块 |- | '''说明''' || 设备充电完成后,上报服务端 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RP |- | '''命令''' || 3byte,NSK |- | '''会话ID''' || 6byte,A12002 |- | '''内容长度''' || 3byte,表示内容长度,ASCII数字表示 |- | '''内容''' || 端口:目前农业灌溉为1 #/# 卡号:刷卡的卡号,如果不是刷卡订单则卡号为空(可选字段) #/# 卡类型:刷卡的卡类型,如果不是刷卡订单则卡类型为空或为零(可选字段) |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 刷卡异常响应 ==== {| class="wikitable" |- | '''发送方''' || 服务端 |- | '''说明''' || 刷卡异常回应该指令,刷卡成功不需要下发该指令,直接下发启动 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RS |- | '''命令''' || 3byte,NSK |- | '''会话ID''' || 6byte,服务器生成 |- | '''内容长度''' || 3byte,表示内容长度,ASCII数字表示 |- | '''内容''' || 状态(1-卡非法,2-卡余额为0,3-卡已作废) |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} === 远程停止 === ==== 发送远程停止 ==== {| class="wikitable" |- | '''发送方''' || 服务端 |- | '''说明''' || 发送远程停止命令 |- | '''开始标志''' || 1byte,“_” |- | '''命令''' || 3byte,YTZ |- | '''会话ID''' || 6byte,服务器生成 |- | '''内容长度''' || 端口(2byte) 订单号(23byte) |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 远程停止响应 ==== {| class="wikitable" |- | style="width:70px" | '''发送方''' || 通信模块 |- | '''说明''' || 收到远程停止后上报 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RS |- | '''命令''' || 3byte,YTZ |- | '''会话ID''' || 6byte,服务器生成 |- | '''内容长度''' || 0-可以停止,1-端口非法不可停止,2-订单非法不可停止,3-设备异常不可停止 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} === 电表通讯地址下发 === ==== 电表通讯地址请求(新版不再使用) ==== {| class="wikitable" |- | '''发送方''' || 通信模块 |- | '''说明''' || 设备向服务端请求电表通讯地址 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RP |- | '''命令''' || 3byte,FDZ |- | '''会话ID''' || 6byte,A12005 |- | '''内容长度''' || 3byte,表示内容长度,ASCII数字表示 |- | '''内容''' || 0 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 主动上报电表通讯地址 ==== {| class="wikitable" |- | '''发送方''' || 通信模块 |- | '''说明''' || 设备上电后, 当询问到合法电表地址后主动上报平台 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RP |- | '''命令''' || 3byte,FDZ |- | '''会话ID''' || 6byte,A12012 |- | '''内容长度''' || 3byte,表示内容长度,ASCII数字表示 |- | '''内容''' || 电表地址, 12Byte |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 服务端下发电表通讯地址 ==== {| class="wikitable" |- | '''发送方''' || 服务器 |- | '''说明''' || 服务端下发电表通讯地址 |- | '''开始标志''' || 1byte,“_” |- | '''报文长度''' || 3byte,表示整个报文的总长度,ASCII数字表示 |- | '''命令''' || 3byte,FDZ |- | '''会话ID''' || 6byte,服务器生成 |- | '''分隔符''' || 1byte,“/” |- | '''参数''' || 电表通讯地址(12byte) |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 下发电表通讯地址响应 ==== {| class="wikitable" |- | style="width:70px" | '''发送方''' || 通信模块 |- | '''说明''' || 根据平台下发的电表地址, 比对当前实际地址, 并做出响应 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RS |- | '''命令''' || 3byte,FDZ |- | '''会话ID''' || 6byte,服务器生成 |- | '''内容长度''' || 处理结果, 1Byte S-成功, 表示平台设置的和设备本地使用的电表地址一致, 可以不做处理 F-失败, 表示平台下发的地址和设备不一致需要做更新, 也可能电表此时未就绪 <nowiki>#/#</nowiki> 设备当前电表地址, 12Byte, S/F时都会返回, 如果未就绪返回12位0 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} === 设备故障上报 === ==== 全量上报设备故障 ==== {| class="wikitable" |- | '''发送方''' || 通信模块 |- | '''说明''' || 设备定时主动上报设备当前发生的所有故障, 此接口无需响应 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RP |- | '''命令''' || 3byte,BGY |- | '''会话ID''' || 6byte,A12011 |- | '''内容长度''' || 3byte,表示内容长度,ASCII数字表示 |- | '''内容''' || 16bit故障码组装成的HEX字符串 一定为"0xHHHH"6个字节定长字符, 实际承载两字节数据, 高位不足补0, 按低位到高位解析, bit位为1表示发生了该故障, bit位为0表示无该故障, 多个不同故障会同时产生及恢复, 只要有一种产生就会定时上报(180秒一次), 全部恢复则不再上报 各bit位定义如下: bit0: 网络故障, 由于离线不会上报所以该故障bit收到只会是0 bit1: 电表故障, 电表无法读数或读数异常等 bit2: 开关电路故障, 例如继电器吸合异常, 电路不通等 bit3: 缺A相, A相电压过低或无 bit4: 缺B相, B相电压过低或无 bit5: 缺C相, C相电压过低或无 bit6: A相电流过高, 代表水泵老化或堵转 bit7: B相电流过高, 代表水泵老化或堵转 bit8: C相电流过高, 代表水泵老化或堵转 bit9: 三相电压不平衡故障 bit10: 三相电流不平衡故障 后续bit位待定 例如收到HEX字符串"0x0030"二进制为0000 0000 0011 0000表示同时出现了bit4/bit5故障为缺B/C相电压 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 上报设备特定故障 ==== {| class="wikitable" |- | '''发送方''' || 通信模块 |- | '''说明''' || 上报设备的某一个特定故障码 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RP |- | '''命令''' || 3byte,BGZ |- | '''会话ID''' || 6byte,A12004 |- | '''内容长度''' || 3byte,表示内容长度,ASCII数字表示 |- | '''内容''' || 故障码 1-网络故障(不会报) 2-电表故障 3-开关电路故障 4-缺A相 5-缺B相 6-缺C相 7-A相电流过高 8-B相电流过高 9-C相电流过高 10-三相电压不平衡 11-三相电流不平衡 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 特定故障响应 ==== {| class="wikitable" |- | '''发送方''' || 服务器 |- | '''说明''' || 服务端响应设备故障上报 |- | '''开始标志''' || 1byte,“_” |- | '''报文长度''' || 3byte,表示整个报文的总长度,ASCII数字表示 |- | '''命令''' || 3byte,BGZ |- | '''会话ID''' || 6byte,服务器生成 |- | '''分隔符''' || 1byte,“/” |- | '''参数''' || 0 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} === 设置运行参数 === ==== 请求运行参数 ==== {| class="wikitable" |- | '''发送方''' || 通信模块 |- | '''说明''' || 模块在上电后为了确保参数与后台一致主动请求同步, 后台收到后通过下方4.9.2-PSN接口下发此设备的最新参数 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RP |- | '''命令''' || 3byte,PSN |- | '''会话ID''' || 6byte,A12006 |- | '''内容长度''' || 3byte,表示内容长度,ASCII数字表示 |- | '''内容''' || 固定一个字节字符"1" |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 下发运行参数 ==== {| class="wikitable" |- | '''发送方''' || 服务器 |- | '''说明''' || 后台修改运行参数后下发给通信模块进行同步生效 |- | '''开始标志''' || 1byte,“_” |- | '''报文长度''' || 3byte,表示整个报文的总长度,ASCII数字表示 |- | '''命令''' || 3byte,PSN |- | '''会话ID''' || 6byte,服务器生成 |- | '''分隔符''' || 1byte,“/” |- | '''参数''' || 格式为: 超载功率,w,不定长,如果为0表示停用超载功能 分隔符# 超载判定时长,s,不定长 分隔符# 空载功率,w,不定长,如果为0表示停用所有的空载功能 分隔符# 上电空载判定时长,s,不定长 分隔符# 运行空载判定时长,s,不定长 分隔符# 是否由消费者承担电损, 0-否(默认, 运营商或电网承担), 1-是(消费者启动时自动扣除待机电损) 分隔符# 是否启用液位检测, 0-不启用, 1-启用, 默认启用 分隔符# 运行期异常阈值, 最大扣费(到达该费用会自动停止), 精度0.01元, 出厂默认10000->100元, 后台设置最小0.01最大100000.00 分隔符# 运行期异常阈值, 最大时长(到达该时长会自动停止), 精度秒, 出厂默认54000->15小时, 后台设置最小1最大100000 分隔符# 缺相电压即单相电压低于该值认为异常, 精度0.1V, 出厂默认1800->180V, 后台设置最小0.1最大100000.00 分隔符# 过流电流即单相电流超过该值认为异常, 精度0.1A, 出厂默认200->20A, 后台设置最小0.1最大100000.0 分隔符# 三相电压不平衡差值, 精度0.1V, 出厂默认200->20V, 后台设置最小0.1最大100000.0 分隔符# 三相电流不平衡差值, 精度0.1A, 出厂默认50->5A, 后台设置最小0.1最大100000.0 ('''此为设备及平台的默认设置''') 例如: 6000#120#10#600#300#0#1#10000#54000#1800#200#200#50 超载功率6000w,连续达到120s判定为超载 启动后功率不足10w,连续达到600s判定为空载未用电然后退款及关闭 正常功率使用过程中,功率不足10w,连续达到300s判定为空载未用电然后退款及关闭 不由用户承担待机电损 启动液位检测和上报 连续使用超100元时自动停止 连续使用超15小时后自动停止 某相电压低于180V时故障 某相电流高于20A时故障 某两相间电压差超过20V时故障 某两相间电流差超过5A时故障 '''注意:''' '''*参数及分隔符#不得缺失, 否则返回F''' '''*空载功率不能超过超载功率, 否则返回F''' '''*所有功率不得低于10w, 否则返回F, 功率推荐以10w为步进值''' '''*所有时间不得低于30s, 否则返回F''' '''*停用某项时该项的参数值都为0''' '''*空载的停启用对于上电和运行同时生效''' |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 下发运行参数响应 ==== {| class="wikitable" |- | '''发送方''' || 通信模块 |- | '''说明''' || 上报设备的故障码 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RS |- | '''命令''' || 3byte,PSN |- | '''会话ID''' || 6byte,服务器下发的会话ID |- | '''内容长度''' || 3byte,表示内容长度,ASCII数字表示, 本接口为001 |- | '''内容''' || 一个字节字符, "S"-成功, "F"-失败 成功表示设备已生效并储存, 后台可以正确保存修改结果 失败表示可能出现了数据/处理问题, 后台不能保存结果, 可以提示用户重试或联系管理员 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} === 气象站功能 === ==== 设置气象站地址 ==== {| class="wikitable" |- | '''发送方''' || 服务端 |- | '''说明''' || 默认气象站地址为01, 该地址用于模组通过地址码访问气象站, 如果地址码需要变更可通过此接口下发, 变更后平台需要使用新地址码来操作气象站, '''地址码不匹配会导致无法获取气象数据''' |- | '''开始标志''' || 1byte,“_” |- | '''命令''' || 3byte,QXA |- | '''会话ID''' || 6byte,服务器生成 |- | '''内容长度''' || 地址(2byte), HEX字符串代表一个字节, 范围01-FE, 绝对不能出现00和FF |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 设置气象站地址响应 ==== {| class="wikitable" |- | style="width:70px" | '''发送方''' || 通信模块 |- | '''说明''' || 响应气象站地址设置结果 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RS |- | '''命令''' || 3byte,QXA |- | '''会话ID''' || 6byte,服务器生成 |- | '''内容长度''' || 0-失败(维持旧地址访问),1-成功(此后需要用新地址访问) |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 查询当前气象站地址 ==== {| class="wikitable" |- | '''发送方''' || 服务端 |- | '''说明''' || 查询当前气象站配置的地址码, 平台应该和其保持一致 |- | '''开始标志''' || 1byte,“_” |- | '''命令''' || 3byte,QXB |- | '''会话ID''' || 6byte,服务器生成 |- | '''内容长度''' || 无 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 响应当前气象站地址 ==== {| class="wikitable" |- | style="width:70px" | '''发送方''' || 通信模块 |- | '''说明''' || 响应气象站当前的地址 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RS |- | '''命令''' || 3byte,QXB |- | '''会话ID''' || 6byte,服务器生成 |- | '''内容长度''' || 地址(2byte), HEX字符串代表一个字节, 范围01-FE |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 校准风向 ==== {| class="wikitable" |- | '''发送方''' || 服务端 |- | '''说明''' || 首次安装或移位后必须要校准零点, 风向标指向正北方稳定3s后平台下发该指令, 校准后推荐再次下发读取风向指令查看风向是否在0°左右, 正北误差不超过5° |- | '''开始标志''' || 1byte,“_” |- | '''命令''' || 3byte,QXC |- | '''会话ID''' || 6byte,服务器生成 |- | '''内容长度''' || 无 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 校准风向响应 ==== {| class="wikitable" |- | style="width:70px" | '''发送方''' || 通信模块 |- | '''说明''' || 校准指令下发后做出响应, 注意该响应不代表校准执行成功只表示说指令收到了, 后续最好再次下发读取风向指令查看风向是否在0°左右, 正北误差不超过5° |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RS |- | '''命令''' || 3byte,QXC |- | '''会话ID''' || 6byte,服务器生成 |- | '''内容长度''' || 0-失败,1-成功 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 上报全量气象数据 ==== {| class="wikitable" |- | style="width:70px" | '''发送方''' || 通信模块 |- | '''说明''' || 当气象站启用状态并且地址合法时, 定时获取气象数据, 整合后全量上报, 每5分钟上报一次 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RP |- | '''命令''' || 3byte,QXD |- | '''会话ID''' || 6byte,A12007 |- | '''内容长度''' || 温度#/#湿度#/#风向#/#瞬时风速#/#上电后最大风速#/#瞬时雨量#/#累计雨量#/#紫外线#/#光照度#/#大气压 温度: 分辨率0.1℃, 偏移+40℃, 例如360(/10)->36(-40)->-4.0℃ 湿度: 分辨率0.1%RH, 例如300(/10)->30.0%RH 风向: 分辨率1°, 正北向为0°, 例如90->东 瞬时风速: 分辨率0.1m/s, 当前16s内的平均风速, 例如10->1m/s 最大风速: 分辨率0.1m/s, 从上次上电开始的历史最大值(掉电清除), 例如20->2m/s 瞬时雨量(降雨强度): 分辨率0.1mm/min, 例如100->降雨量每分钟10毫米 累计雨量: 分辨率0.1mm/min, 一直累计到49999后清0, 推荐拿到第一次的值后作为基础值, 后续算差值并重新累计数据 紫外线: 分辨率1uw/cm² 光照度: 分辨率0.1lux, 例如3000->300lux 大气压: 分辨率1帕 '''为保证精度, 上述数值转化后尽量按小数处理''' |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 查询实时全量气象数据 ==== {| class="wikitable" |- | '''发送方''' || 服务端 |- | '''说明''' || 当需要立即获取最新的气象数据时, 可以下发即时查询 |- | '''开始标志''' || 1byte,“_” |- | '''命令''' || 3byte,QXE |- | '''会话ID''' || 6byte,服务器生成 |- | '''内容长度''' || 无 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 响应实时全量气象数据 ==== {| class="wikitable" |- | style="width:70px" | '''发送方''' || 通信模块 |- | '''说明''' || 响应实时全量气象数据 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RS |- | '''命令''' || 3byte,QXE |- | '''会话ID''' || 6byte,服务器生成 |- | '''内容长度''' || 温度#/#湿度#/#风向#/#瞬时风速#/#上电后最大风速#/#瞬时雨量#/#累计雨量#/#紫外线#/#光照度#/#大气压 温度: 分辨率0.1℃, 偏移+40℃, 例如360(/10)->36(-40)->-4.0℃ 湿度: 分辨率0.1%RH, 例如300(/10)->30.0%RH 风向: 分辨率1°, 正北向为0°, 例如90->东 瞬时风速: 分辨率0.1m/s, 当前16s内的平均风速, 例如10->1m/s 最大风速: 分辨率0.1m/s, 从上次上电开始的历史最大值(掉电清除), 例如20->2m/s 瞬时雨量(降雨强度): 分辨率0.1mm/min, 例如100->降雨量每分钟10毫米 累计雨量: 分辨率0.1mm/min, 一直累计到49999后清0, 推荐拿到第一次的值后作为基础值, 后续算差值并重新累计数据 紫外线: 分辨率1uw/cm² 光照度: 分辨率0.1lux, 例如3000->300lux 大气压: 分辨率1帕 '''为保证精度, 上述数值转化后尽量按小数处理''' |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} === 水位检测接口 === ==== 上报水位相关数据 ==== {| class="wikitable" |- | style="width:70px" | '''发送方''' || 通信模块 |- | '''说明''' || 上报水位检测相关数据, 当设备运行时每1分钟报一次, 当设备空闲时每1小时报一次 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RP |- | '''命令''' || 3byte,YWA |- | '''会话ID''' || 6byte,A12010 |- | '''内容长度''' || 运行时长#/#水深#/#水表读数 运行时长: 从付款启动时刻到当前检测上报时刻的间隔, 单位秒, 如果当前未启动则固定为0 水深: 分辨率1mm, 例如1000->1m 水表读数: 分辨率100m3, 例如100->1m3, 1度水 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} === 测试接口 === ==== 查运行参数 ==== {| class="wikitable" |- | '''发送方''' || 服务器 |- | '''说明''' || 后台询问当前设备的实时运行参数 |- | '''开始标志''' || 1byte,“_” |- | '''报文长度''' || 3byte,表示整个报文的总长度,ASCII数字表示 |- | '''命令''' || 3byte,TAA |- | '''会话ID''' || 6byte,服务器生成 |- | '''分隔符''' || 1byte,“/” |- | '''参数''' || 无 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 回复运行参数 ==== {| class="wikitable" |- | '''发送方''' || 通信模块 |- | '''说明''' || 回复当前的运行参数给后台 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RS |- | '''命令''' || 3byte,TAA |- | '''会话ID''' || 6byte,服务器下发的会话ID |- | '''内容长度''' || 3byte,表示内容长度,ASCII数字表示 |- | '''内容''' || 格式为: 超载功率,w,不定长,如果为0表示停用超载功能 分隔符# 超载判定时长,s,不定长 分隔符# 空载功率,w,不定长,如果为0表示停用所有的空载功能 分隔符# 上电空载判定时长,s,不定长 分隔符# 运行空载判定时长,s,不定长 具体参数说明参考上面的PSN |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 查电表信息 ==== {| class="wikitable" |- | '''发送方''' || 服务器 |- | '''说明''' || 后台询问当前设备的实时电表信息 |- | '''开始标志''' || 1byte,“_” |- | '''报文长度''' || 3byte,表示整个报文的总长度,ASCII数字表示 |- | '''命令''' || 3byte,TAB |- | '''会话ID''' || 6byte,服务器生成 |- | '''分隔符''' || 1byte,“/” |- | '''参数''' || 无 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 回复电表信息 ==== {| class="wikitable" |- | '''发送方''' || 通信模块 |- | '''说明''' || 回复当前的电表信息给后台 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RS |- | '''命令''' || 3byte,TAB |- | '''会话ID''' || 6byte,服务器下发的会话ID |- | '''内容长度''' || 3byte,表示内容长度,ASCII数字表示 |- | '''内容''' || 格式为: 电表地址HEX字符串 分隔符# 电量初始读数 分隔符# 电量实时读数 分隔符# 功率实时读数 分隔符# 故障码(新版:故障bit对应的int值, 旧版:-1-无故障, 0-有故障未上报, 1-有故障已上报) 分隔符# A相电压 分隔符# B相电压 分隔符# C相电压 分隔符# A相电流 分隔符# B相电流 分隔符# C相电流 分隔符# 已用电量 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 设置电表地址 ==== {| class="wikitable" |- | '''发送方''' || 服务器 |- | '''说明''' || 设置电表地址 |- | '''开始标志''' || 1byte,“_” |- | '''报文长度''' || 3byte,表示整个报文的总长度,ASCII数字表示 |- | '''命令''' || 3byte,TAC |- | '''会话ID''' || 6byte,服务器生成 |- | '''分隔符''' || 1byte,“/” |- | '''参数''' || 12个字节字符的电表地址, 如: 000018454836 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 回复设置电表地址 ==== {| class="wikitable" |- | '''发送方''' || 通信模块 |- | '''说明''' || 回复当前的电表信息给后台 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RS |- | '''命令''' || 3byte,TAC |- | '''会话ID''' || 6byte,服务器下发的会话ID |- | '''内容长度''' || 3byte,表示内容长度,ASCII数字表示 |- | '''内容''' || 处理结果, 1Byte S-成功, 表示平台设置的和设备本地使用的电表地址一致, 可以不做处理 F-失败, 表示平台下发的地址和设备不一致需要做更新, 也可能电表此时未就绪 <nowiki>#/#</nowiki> 设备当前电表地址, 12Byte, S/F时都会返回, 如果未就绪返回12位0 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 设置电表初始值 ==== {| class="wikitable" |- | '''发送方''' || 服务器 |- | '''说明''' || 设置电表初始值 |- | '''开始标志''' || 1byte,“_” |- | '''报文长度''' || 3byte,表示整个报文的总长度,ASCII数字表示 |- | '''命令''' || 3byte,TAD |- | '''会话ID''' || 6byte,服务器生成 |- | '''分隔符''' || 1byte,“/” |- | '''参数''' || 一个字符0固定表示更新初始值为当前最新的电量值 正常设置为电量值*100倍的整数, 如12345->123.45 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 回复设置电表初始值 ==== {| class="wikitable" |- | '''发送方''' || 通信模块 |- | '''说明''' || 回复当前的电表信息给后台 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RS |- | '''命令''' || 3byte,TAD |- | '''会话ID''' || 6byte,服务器下发的会话ID |- | '''内容长度''' || 3byte,表示内容长度,ASCII数字表示 |- | '''内容''' || S成功, F失败 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 查全量运行参数 ==== {| class="wikitable" |- | '''发送方''' || 服务器 |- | '''说明''' || 后台询问当前设备的实时运行参数 |- | '''开始标志''' || 1byte,“_” |- | '''报文长度''' || 3byte,表示整个报文的总长度,ASCII数字表示 |- | '''命令''' || 3byte,TAE |- | '''会话ID''' || 6byte,服务器生成 |- | '''分隔符''' || 1byte,“/” |- | '''参数''' || 无 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 回复全量运行参数 ==== {| class="wikitable" |- | '''发送方''' || 通信模块 |- | '''说明''' || 回复当前的运行参数给后台 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RS |- | '''命令''' || 3byte,TAE |- | '''会话ID''' || 6byte,服务器下发的会话ID |- | '''内容长度''' || 3byte,表示内容长度,ASCII数字表示 |- | '''内容''' || 具体参数及格式说明参考上面的PSN |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 设置液位ADC参数 ==== {| class="wikitable" |- | '''发送方''' || 服务器 |- | '''说明''' || 设置液位ADC参数 |- | '''开始标志''' || 1byte,“_” |- | '''报文长度''' || 3byte,表示整个报文的总长度,ASCII数字表示 |- | '''命令''' || 3byte,TAF |- | '''会话ID''' || 6byte,服务器生成 |- | '''分隔符''' || 1byte,“/” |- | '''参数''' || 最大量程, 单位mm, 整型, 如0-40米量程传感器传40000 分隔符# 电流模拟量最小值, 单位mA, 整型x10, 如4-20mA设备传40 分隔符# 电流模拟量最大值, 单位mA, 整型x10, 如4-20mA设备传200 分隔符# 输入误差偏移(一般为0), 单位mV, 整型可正可负x100, 首字符为符号"-"或"+", 如-123.45传"-12345", 99.12传"+9912" 分隔符# 输出误差偏移(优先选择), 单位mV, 整型可正可负x100, 首字符为符号"-"或"+", 如-123.45传"-12345", 99.12传"+9912" 分隔符# 待后续扩展... |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 响应液位ADC设置结果 ==== {| class="wikitable" |- | '''发送方''' || 通信模块 |- | '''说明''' || 响应液位ADC设置结果 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RS |- | '''命令''' || 3byte,TAF |- | '''会话ID''' || 6byte,服务器下发的会话ID |- | '''内容长度''' || 3byte,表示内容长度,ASCII数字表示 |- | '''内容''' || 成功S, 失败F |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 开启液位ADC日志 ==== {| class="wikitable" |- | '''发送方''' || 服务器 |- | '''说明''' || 开启液位ADC日志 |- | '''开始标志''' || 1byte,“_” |- | '''报文长度''' || 3byte,表示整个报文的总长度,ASCII数字表示 |- | '''命令''' || 3byte,TAG |- | '''会话ID''' || 6byte,服务器生成 |- | '''分隔符''' || 1byte,“/” |- | '''参数''' || 1-开启, 0-关闭, 注:断电后自动关闭 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 响应液位ADC日志操作结果 ==== {| class="wikitable" |- | '''发送方''' || 通信模块 |- | '''说明''' || 响应液位ADC日志操作结果 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RS |- | '''命令''' || 3byte,TAG |- | '''会话ID''' || 6byte,服务器下发的会话ID |- | '''内容长度''' || 3byte,表示内容长度,ASCII数字表示 |- | '''内容''' || 成功S, 失败F |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 设置串口 ==== {| class="wikitable" |- | '''发送方''' || 服务器 |- | '''说明''' || 设置串口 |- | '''开始标志''' || 1byte,“_” |- | '''报文长度''' || 3byte,表示整个报文的总长度,ASCII数字表示 |- | '''命令''' || 3byte,TAH |- | '''会话ID''' || 6byte,服务器生成 |- | '''分隔符''' || 1byte,“/” |- | '''参数''' || 波特率#校验位 波特率: 十进制数字, 如2400 9600 校验位: 一个字符, N-无校验(none), E-偶校验(even), O-奇校验(odd), 其他不支持 如: 9600#E, 设置波特率9600, 启用偶校验 如: 115200#N, 设置波特率115200, 不启用校验 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 响应串口设置结果 ==== {| class="wikitable" |- | '''发送方''' || 通信模块 |- | '''说明''' || 响应串口设置结果 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RS |- | '''命令''' || 3byte,TAH |- | '''会话ID''' || 6byte,服务器下发的会话ID |- | '''内容长度''' || 3byte,表示内容长度,ASCII数字表示 |- | '''内容''' || 成功S, 失败F |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} === 充值机接口 === ==== 请求密钥 ==== {| class="wikitable" |- | style="width:70px" | '''发送方''' || 通信模块 |- | '''说明''' || 启动后请求交易密钥 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RP |- | '''命令''' || 3byte,CAB |- | '''会话ID''' || 6byte,A12014 |- | '''内容长度''' || 内部加密串#类型 内部加密串: 内部约定 类型: 1-线上卡充值机, 其他待定 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 下发密钥 ==== {| class="wikitable" |- | '''发送方''' || 服务器 |- | '''说明''' || 后台下发指定设备的密钥, 可在后台修改密钥后随时下发 |- | '''开始标志''' || 1byte,“_” |- | '''报文长度''' || 3byte,表示整个报文的总长度,ASCII数字表示 |- | '''命令''' || 3byte,CAB |- | '''会话ID''' || 6byte,服务器生成 |- | '''分隔符''' || 1byte,“/” |- | '''参数''' || 失败返回单字节0 成功返回密钥, 密钥为16个字节的字符, 每个设备独立 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 上报充值 ==== {| class="wikitable" |- | style="width:70px" | '''发送方''' || 通信模块 |- | '''说明''' || 当所需充值的卡刷卡后, 上报卡信息 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RP |- | '''命令''' || 3byte,CAA |- | '''会话ID''' || 6byte,A12013 |- | '''内容长度''' || 卡号#类型#加密串 要充值的卡号, 10byte 类型: 1-线上卡, 2-待定, 现在只有线上卡 加密串: 用密钥串加密传输数据后的加密串 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 充值反馈 ==== {| class="wikitable" |- | '''发送方''' || 服务器 |- | '''说明''' || 后台反馈给充值机处理结果 |- | '''开始标志''' || 1byte,“_” |- | '''报文长度''' || 3byte,表示整个报文的总长度,ASCII数字表示 |- | '''命令''' || 3byte,CAA |- | '''会话ID''' || 6byte,服务器生成 |- | '''分隔符''' || 1byte,“/” |- | '''参数''' || 结果#卡号#本次已充金额#充值单流水号#金额类型 充值结果: 1-成功, 2-不存在, 3-停用, 4-挂失, 5-冻结, 6-权限非法(非同场地或其他权限问题), 7-系统异常 卡号: 十进制卡号, 10byte, 不足补0 本次已充金额: 精度0.01, 例如100->1块 充值单流水号: 平台生成的充值单流水号, 不超过23字节 金额类型: 0-虚拟金额, 1-实际金额 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 充值反馈响应 ==== {| class="wikitable" |- | style="width:70px" | '''发送方''' || 通信模块 |- | '''说明''' || 响应给平台设备已收到下发的充值结果 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RS |- | '''命令''' || 3byte,CAA |- | '''会话ID''' || 6byte,服务器下发的会话ID |- | '''内容长度''' || S-成功, F-失败 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 线上卡余额查询 ==== {| class="wikitable" |- | style="width:70px" | '''发送方''' || 通信模块 |- | '''说明''' || 刷卡查询余额, 用于线上卡 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RP |- | '''命令''' || 3byte,CAC |- | '''会话ID''' || 6byte,A12015 |- | '''内容长度''' || 卡号#类型#加密串 要查询的卡号, 10byte 类型: 1-线上卡, 2-待定, 现在只有线上卡 加密串: 用密钥串加密传输数据后的加密串 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} ==== 线上余额反馈 ==== {| class="wikitable" |- | '''发送方''' || 服务器 |- | '''说明''' || 后台反馈该线上卡对应的电子账户余额 |- | '''开始标志''' || 1byte,“_” |- | '''报文长度''' || 3byte,表示整个报文的总长度,ASCII数字表示 |- | '''命令''' || 3byte,CAC |- | '''会话ID''' || 6byte,服务器生成 |- | '''分隔符''' || 1byte,“/” |- | '''参数''' || 结果#余额 查询结果: 1-成功, 2-不存在, 3-停用, 4-挂失, 5-冻结, 6-权限非法(非同场地或其他权限问题), 7-系统异常 余额: 精度0.01, 例如100->1块 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |}
返回至
农田灌溉通讯文档
。
导航菜单
个人工具
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息