前 言 感谢您使用提供的 DTU 产品 本手册主要介绍众山 DTU HTTP 协议 适用型号 : 众山 2/3/4G 系列 DTU ZSDxx1x 版权声明 本手册版权属于, 任何人未经我公司书面同意复制将承担相应法律责任 版本信息 文档名称 : 版本 :1.01 修改日期 : 2018 年 07 月 13 日 相关文档 1 众山 DTU Modbus 协议手册 2 众山 DTU 脚本编程手册 3 ZSDxx1x 串口及远程控制协议 http://www.zstel.com 电话 :028-85583895 地址 : 成都市高新区天府三街 69 号 技术交流 QQ 群 :659719333 传真 :028-85210819 第 2 页
众山 DTU ZSDxx1x 系列 DTU, 可支持作为 HTTP 客户端进行数据传输, 与 HTTP 服务器进行双向通信 结合众山 DTU 的脚本功能, 可实现 DTU 自动采集仪表数据并直接上传到 HTTP 服务器, 为用户实现使用 WEB 方式采集仪表数据提供强有力的支持 不仅实现仪表数据直接进入 WEB 平台, 众山 DTU 支持的各种远程控制协议以及 Modbus 控制 DI/DO 的协议均能在 HTTP 协议上支持, 所以, 用户的 WEB 平台就可以很方便的实现 DTU 的参数配置 开关控制 DI 采集等功能 说明 : 使用 HTTP 协议时, 需要关闭物联云开关, 并将通信协议设置为 TCP Client HTTP 协议相关参数说明 : 1)HTTP 协议允许 : 设置为开启时,DTU 则使用 HTTP 协议与 WEB 进行数据通讯 2)HTTP 方法 : 可选择 POST 和 GET 两种, 默认为 POST HTTP 服务器端处理时也需要通过对应的 方 法来处理数据 POST 方法安全性好, 数据使用 KEY=VALUE 的格式在 HTTP 消息体中,GET 方法 使用 KEY=VALUE 的格式数据直接存在于 URL 中, 浏览器地址栏中可见 3) 长连接短连接 : 当选择短连接时,DTU 有数据发送时才进行 TCP 连接, 发送完成如果 HTTP 服务器 断开了连接,DTU 则等待下次有数据时再连接服务器 当选择长连接时,DTU 会永远保持与中心 的 连接, 不管是谁断开了连接,DTU 保持一直在线 4)HTTP 头输出 : 默认为关闭, 如果开启则会输出完整的 HTTP 头信息, 在正常使用时请保持关闭, 当需要调试 HTTP 服务器应答内容时, 可以开启此选项以便分析 5)HTTP URL 地址 : 处理 HTTP 请求的脚本程序的 URL 网址 如 : http://1.smset001.applinzi.com/httpdtu.php 6)HTTP HOST 主机地址 : HTTP 服务器的域名 /IP 和端口, 如 :1.smset001.applinzi.com:80 7)HTTP 其他头信息 : 默认为空, 如某些 HTTP 服务器需要发送特定的头信息时, 在这里添加, 有多 http://www.zstel.com 电话 :028-85583895 地址 : 成都市高新区天府三街 69 号 技术交流 QQ 群 :659719333 传真 :028-85210819 第 3 页
条信息时使用 \r\n 隔开, 注意, 最后一条信息不能有 \r\n 8)HTTP 发送数据 KEY: 默认为 data,dtu 使用 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 数据外, 还能得到设备编号信息 9) 主数据中心 IP 地址或域名 : 需要和 HTTP HOST 设置为一致的内容, 如 1.smset001.applinzi.com 10) 主数据中心侦听端口号 : 一般为 80 端口 DTU 发送数据采用 KEY=VALUE 的格式,KEY 为用户可任意配置,VALUE 为串口数据或 DTU 响 应命令的 HEX 字符表示, 比如 0x01 数据, 在 VALUE 中表示为 01, 字符 1 在 VALUE 中表示为 31 如 : 串口数据为 HEX 格式 : 01 03 00 01 00 02 43 21,KEY 默认为 data 的情况下, 则实际发送数据为 : data=0103000100024321 如 : 串口数据为字符串格式 : 1234567890ABCD, 则实际发送数据为 : data=3132333435363738393041424344 HTTP 服务器应答 DTU 数据时, 采用固定格式 <data> 数据 </data> 的格式, 并且数据类型为可见字符的 HEX 表示, 这样的目的是为了让 DTU 方便解析用户的有用数据,DTU 在接收到 HTTP 服务器应答数据时会解析 <data> 和 </data> 之间的内容, 并把可见的 HEX 字符还原成原始 HEX 数据作为 DTU 的控制命令或非自己命令时从串口输出数据到用户设备 如 :HTTP 响应 Modbus 指令 01 03 02 00 01 12 34 时, 实际数据为 :<data>01030200011234</data> 如 :HTTP 响应字符串数据 1234%abcd6789 时, 实际数为 :<data>31323334256162636436373839</data> 温控系统举例说明 ( 以 php 代码为例 ): 如 DTU 通过 485 挂接一个温度采集控制设备,DTU 可以通过脚本, 周期性采集上传温度采集控制设备 的 MODBUS 数据, 如报文内容为 0103020010B988, 则其中的 0010 为温度值 ( 对应 16 度 ); PHP 代码的处理逻辑为 : http://www.zstel.com 电话 :028-85583895 地址 : 成都市高新区天府三街 69 号 技术交流 QQ 群 :659719333 传真 :028-85210819 第 4 页
当温度 >20 度时, 向现场通过 16 号指令向地址为 0x0014 的寄存器写 1; 当温度低于 10 度时, 向现场通过 16 号指令向地址为 0x0014 的寄存器写 0; 当温度处于 10 度与 20 度之间时, 则不向现场写入指令 具体代码如下 ( 举例示意, 仅供参考 ): <?php $dtuid =$_POST['dtuid']; $data = $_POST['data']; // 获取 dtuid 变量 // 获取 data 变量 $tempdata=hexdec(substr($data,6,4)); // 取得两个字节的温度数据, 转换为十进制值 // 根据温度值进行应答控制 : if($tempdata>20) { $reply="0110001400010200016484";} // 写 1, 线圈启动 else if ($tempdata<10) { $reply="011000140001020000a544";}// 写 0, 线圈关闭?> else { $reply="";} // 不返回操作指令 echo "<data>".$reply."</data>"; http://www.zstel.com 电话 :028-85583895 地址 : 成都市高新区天府三街 69 号 技术交流 QQ 群 :659719333 传真 :028-85210819 第 5 页