ONENET设备终端接入协议3-MODBUS
更新时间:2023-03-11 09:25:01 阅读量: 教育文库 文档下载
MODBUS-TCP
欢迎访问设备云门户网站http://open.iot.10086.cn/注册用户,获取最新文档。 版本号 V1.0 V1.2 V1.3 修订日期 2014.10.30 2015/8/5 2016/02/18 新增 Dtu设备登录传输项目ID 增加接入流程例子 实现01,02,03,04功能码周期查询 通过URL获取服务IP和PORT 设备定时发送心跳包 通过restfull api主动下发在线命令 修订内容 说明 V1.4 2016/07/06 1 说明
基于《modbus协议.pdf》实现01,02,03,04功能码周期查询。
适用于设备云定期主动发送modbus-tcp命令到设备查询寄存器值,设备回复寄存器值的情况。
2 名词解释
项目ID:在平台注册账号后,添加新项目平台生成数字ID; Api-key:管理每个项目下资源,用于restful api鉴权。
3 设备接入
1 2
访问设备云门户注册用户,可以查看(项目ID)和master_key(api-key);
业务平台调用RESTFUL API新增设备,并指定如下设备属性: 设备属性名 interval auth_info 说明 设备云主动查询设备的时间间隔,单位秒 设备鉴权信息,格式如下: {“登录报文的phone字段”:”登录报文的SVRPWD字段”} 3
设备上电,发送登录报文(52字节)到设备云接入服务器进行鉴权,设备通过链接http://api.heclouds.com/s?t=6&v=1拉取服务器IP和PORT,其中格式如下:
登录报文固定格式如下:(其中绿色三项为必填) 报文字段 type name phone svrpwd id 4
设备登录成功后,服务器不会返回数据,如果登录失败,服务器会主动断开连接。
固定长度 11字节 9字节 12字节 9字节 11字节 说明 设备类型字符串,以’\\0’结尾,目前作为保留用途。 设备名称字符串,以’\\0’结尾,目前作为保留用途。 设备通信卡号码,以’\\0’结尾。注册设备时作为auth_info属性子域json对象的key,用于鉴权。 服务器登录密码,以’\\0’结尾。注册设备时作为auth_info属性子域json对象的value,用于鉴权。 项目ID,以’\\0’结尾,平台申请项目时分配的项目ID字符串。 4 数据流
4.1 业务平台调用restfull api为设备新增数据流,数据流需要指定如下属性: 说明 设备云为获取数据定期下发访问寄存器的命令,用十六进制标示。如“83A245”表示三个字节的命令0x83A245。 可选配置。对命令返回各个寄存器值的处理公式,多个公式用分号间隔。例如: \表示对命令返回的前两个寄存器值的和再乘上第三个寄存器的值得到综合结果。 注意:公式不能写成这样 (A0*A1),请去掉最外层的无效括号,否则公式会被认为不合法,不会生效 数据流属性名 cmd formula 4.2
4.3
01、02命令返回结果(不支持formula属性) {“起始地址”:”线圈值1,线圈值2,…,线圈值n”} 其中,每个线圈值对应设备返回数据的一个byte 起始地址、线圈值都以10进制表示 03命令返回结果(支持formula属性)
4.3.1 未设置formula属性
{“地址1”:”寄存器值1”, ”地址2”:”寄存器值2”, … ,”地址n”:”寄存器值n”} 其中,地址、寄存器值都以10进制表示 4.3.2 已设置formula属性
{“1”:”formula计算结果1”, “2”: “formula计算结果2”, … , “n”:”formula计算结果n”}
其中,计算结果为double类型值
formula属性可以有多个计算公式组合在一起,通过”;”隔开。 1、2、…、n,分别表示第1、2、…、n个计算公式 A0、A1、…、An, 分别表示第1、2、…、n个寄存器值 例如:(A0+A1)*A2 – (A3-A4)/A5 + (A6+A7)¨ + A9fA10 目前formula支持运算符如下:
+ - * / % ()
f表示前后操作数作为uint16,然后合并组成float
例如A0fA1
4.4
4.5
union {
uint32_t u32; float f32; } u_f;
u_f.u32 = (((uint32_t)(uint16_t)A0)<<16)|(uint16_t)A1; u_f.f32 即为f运算符运算结果
04命令返回结果(不支持formula属性)
{“地址1”:”寄存器值1”, ”地址2”:”寄存器值2”, ? ,”地址n”:”寄存器值n”}
其中,地址、寄存器值都以10进制表示 注意事项
数据流中定时下发的命令尽量保持不同
5 保持设备在线
当设备处于空闲的时候,为了保持与ONENET平台的连接不断开,需要定期发送心跳包(推荐0x0000),以确保网络连接不断开。其中时间间隔须小于5分钟,推荐1~3分钟。
6 通过restfull api下发在线命令到设备
区别于数据流的定时下发命令到设备,resfull api通过使用HTTP请求的方式,主动下发命令到设备。
其中,通过restfull api主动下发的命令,尽量与数据流中定时下发的命令保持不同。
HTTP方法 URL HTTP头部 URL参数 HTTP内容 POST http://api.heclouds.com/cmds api-key:xxxx-ffff-zzzzz,必须master key device_id = //接收该数据的MODBUS设备ID,必填。 { \:”xxxxxxxx” //需要下发MODBUS设备的命令(16进制字符串) } 成功返回 { \\\succ”, \//不超过64个字符字符串 \\2302-312-FWs” } } 查看命令发送状态 GET HTTP方法 URL HTTP头部 成功返回 http://api.heclouds.com/cmds/
1.利用restfull api创建设备
POST http://api.heclouds.com/devices HTTP/1.1 User-Agent: Fiddler
api-key: nCxNdCoX6eHGfergpyytu66TyuY= /*必须为MasterKey*/ Host: api.heclouds.com Content-Length: 155 注意长度和空行,建议使用fiddler 调试,会自动填充长度 {
\填写MODBUS设备卡号*/ \ \
\填写HTTP协议,没有专门的Modbus协议*/
\这里就是鉴权信息的卡号和密码,长度有限制,参考登录报文格式*/
\命令的查询间隔*/ } 此api没有针对modbus相关配置出错处理返回,必须仔细填写各个字段。 2.为该设备创建数据流
使用restfull api创建,请求数据如下:
POST http://api.heclouds.com/devices/[your_devid]/datastreams HTTP/1.1 User-Agent: Fiddler
api-key: nCxNdCoX6eHGfergpyytu66TyuY= /*设备对应的key或masterkey*/ Host: api.heclouds.com 注意长度和空行,建议使用fiddlerContent-Length: 66
调试,会自动填充长度 {
\
\
\}
CMD字段解释如下:\对应的MODBUS RTU命令如下图所示: {0x11,0x03,0x0,0x6B,0x0,0x3,0x87,0x76},其中0x87和0x76存储的是CRC16结果0x8776,从Slave Address 0x11开始计算到最后一个寄存器地址(此处为0x3)。
3.上传登录报文
如前述登录报文格式,例子如下:
unsigned char req[52];
unsigned char type[11] = \ unsigned char name[9] = \ unsigned char phone[12] = \填写创建设备时的卡号 unsigned char pwd[9] = \填写创建设备时的密码
unsigned char p_id[11] = \设备所在项目的ID memset(req, 0, 52); memcpy(req, type, 11); memcpy(req + 11, name, 9); memcpy(req + 11 + 9, phone, 12); memcpy(req + 11 + 9 + 12, pwd, 9); memcpy(req + 11 + 9 + 12 + 9, p_id, 11);
向登录服务器上传整个req即可,登录成功无返回,否则服务器断开连接。
Raw数据如下:
0x74 0x79 0x70 0x65 0x0 0x0 0x0 0x0 0x0 0x0 0x00x6e 0x61 0x6d 0x65 0x0 0x0 0x0 0x0 0x0 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x30 0x0 0x0 0x0 0x0 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x30 0x0 0x33 0x39 0x34 0x38 0x34 0x0 0x0 0x0 0x0 0x0 0x0
四个颜色标注的数据依次对应登录报文的各字段。
4.与服务器端建立TCP连接后,并成功登录,设备云会定期发送查询命令,设备一分钟内无回复,服务器会断开连接。
设备端收到的命令RAW数据如下: 0x11 0x3 0x0 0x6b 0x0 0x3 0x87 0x76
和增加数据流时配置的数据一模一样,如\。
5.设备端回复查询命令的结果
按照如下截图中RTU格式回复16进制数据:
0x11 0x3 0x6 0x2 0x2b 0x0 0x0 0x0 0x64 0xc8 0xba ,采用CRC16校验,不需要转字符串。
6.查看上传结果
1.在平台的web端显示,进入对应项目和设备的页面查看,情况如下:
2.利用restfull api查询结果,这里使用Fiddler工具发送查询设备数据点的命令。
核对下数据,是不是我们上传的。
上传数据:0x11 0x3 0x6 0x2 0x2b 0x0 0x0 0x0 0x64 0xc8 0xba , 0x22b=555,0x00=0,0x64=100,上传正确。
附测试用Restfull api:
POST http://api.heclouds.com/devices HTTP/1.1 User-Agent: Fiddler api-key: yours
Host: api.heclouds.com Content-Length: 155 {
\ \ \ \
\ \}
POST http://api.heclouds.com/devices/yours/datastreams HTTP/1.1 User-Agent: Fiddler api-key: yours
Host: api.heclouds.com Content-Length: 66 {
\
\\}
GET http://api.heclouds.com/devices/yours/datastreams/test_cmd HTTP/1.1 User-Agent: Fiddler api-key: yours
Host: api.heclouds.com Content-Length: 0
正在阅读:
42种国家重点保护的野生动植物药材品种02-29
小学常见的病句类型、分析及练习并附答案03-06
关于上班时间调整通知书模板01-07
8.练习题--统计学(第五版)-袁卫编著-第8章时间序列分析与预测资04-15
WINDOW7操作系统环境下证书访问被拒绝解决方法03-21
第一次工地会议纪要01-26
新泰莲花山旅游度假区总体规划04-07
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 接入
- 终端
- 协议
- ONENET
- MODBUS
- 设备
- 2016高考地理-考前三个月冲刺-专题14-环境保护练习
- 二手房租售系统论文
- 名将王耀武 读书摘录
- 数据中心建设方案(简版)
- 《单片机原理及应用》期末复习题1
- 河北省国库集中支付电子化管理试点纪实(下)
- “十二五”省级扶持贫困村名单
- 论企业专利预警机制的作用
- 医学文献检索课题报告
- 高等数学公式(highmathforum)
- 华数奥赛教材五年级练习题
- 关于上报《滨海医院开业筹备倒计时计划表》的通知 - 图文
- 小学英语课堂教学中培养学生口语能力策略的研究开题报告
- 9第九章 有压管流和孔口、管嘴出流 - 图文
- 政务服务事项管理平台V1.0操作手册 - 图文
- 江苏科技大学南校区学工人员值班安排表
- midas钢管混凝土拱桥计算
- 云南采风报告 - 图文
- 机械行业关键知识-15 万向轴、联轴器制造
- “两个普遍”专题培训资料(内页)