好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

ONENET设备终端接入协议3_MODBUS.doc

6页
  • 卖家[上传人]:x****x
  • 文档编号:269436349
  • 上传时间:2022-03-22
  • 文档格式:DOC
  • 文档大小:92KB
  • / 6 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • MODBUS-TCP欢迎访问设备云门户网站注册用户,获取最新文档版本号修订日期修订内容说明V1.0新增V1.22015/8/5Dtu设备登录传输项目IDV1.32016/02/18增加接入流程例子V1.42016/07/06实现01,02,03,04功能码周期查询通过URL获取服务IP和PORT设备定时发送心跳包通过restfull api主动下发命令1 说明基于《modbus协议.pdf》实现01,02,03,04功能码周期查询适用于设备云定期主动发送modbus-tcp命令到设备查询寄存器值,设备回复寄存器值的情况2 名词解释项目ID:在平台注册账号后,添加新项目平台生成数字ID;Api-key:管理每个项目下资源,用于restful api鉴权3 设备接入1 访问设备云门户注册用户,可以查看〔项目ID和master_key;2 业务平台调用RESTFUL API 新增设备,并指定如下设备属性:设备属性名说明interval设备云主动查询设备的时间间隔,单位秒auth_info设备鉴权信息,格式如下:{"登录报文的phone字段":"登录报文的SVRPWD字段"}3 设备上电,发送登录报文〔52字节到设备云接入服务器进行鉴权,设备通过链接=6&v=1拉取服务器IP和PORT,其中格式如下:登录报文固定格式如下:〔其中绿色三项为必填报文字段固定长度说明type11字节设备类型字符串,以’\0’结尾,目前作为保留用途。

      name9字节设备名称字符串,以’\0’结尾,目前作为保留用途phone12字节设备通信卡号码,以’\0’结尾注册设备时作为auth_info属性子域json对象的key,用于鉴权svrpwd9字节服务器登录密码,以’\0’结尾注册设备时作为auth_info属性子域json对象的value,用于鉴权id11字节项目ID,以’\0’结尾,平台申请项目时分配的项目ID字符串4 设备登录成功后,服务器不会返回数据,如果登录失败,服务器会主动断开连接 4 数据流4.1 业务平台调用restfull api为设备新增数据流,数据流需要指定如下属性:数据流属性名说明cmd设备云为获取数据定期下发访问寄存器的命令,用十六进制标示如"83A245"表示三个字节的命令0x83A245formula可选配置对命令返回各个寄存器值的处理公式,多个公式用分号间隔例如: "*A2",表示对命令返回的前两个寄存器值的和再乘上第三个寄存器的值得到综合结果注意:公式不能写成这样 ,请去掉最外层的无效括号,否则公式会被认为不合法,不会生效4.2 01、02命令返回结果〔不支持formula属性{"起始地址":"线圈值1,线圈值2,…,线圈值n"}其中,每个线圈值对应设备返回数据的一个byte起始地址、线圈值都以10进制表示4.3 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个寄存器值例如:*A2 – /A5 + %A8 + A9fA10目前formula支持运算符如下:+ - * / % <>f 表示前后操作数作为uint16,然后合并组成float例如A0fA1union{uint32_t u32;float f32;} u_f;u_f.u32 = <<A0><<16>|A1;u_f.f32 即为f运算符运算结果4.4 04命令返回结果〔不支持formula属性{"地址1":"寄存器值1", "地址2":"寄存器值2", … ,"地址n":"寄存器值n"}其中,地址、寄存器值都以10进制表示4.5 注意事项数据流中定时下发的命令尽量保持不同5 保持设备当设备处于空闲的时候,为了保持与ONENET平台的连接不断开,需要定期发送心跳包〔推荐0x0000,以确保网络连接不断开其中时间间隔须小于5分钟,推荐1~3分钟6 通过restfull api下发命令到设备区别于数据流的定时下发命令到设备,resfull api通过使用请求的方式,主动下发命令到设备。

      其中,通过restfull api主动下发的命令,尽量与数据流中定时下发的命令保持不同方法POSTURL/cmds头部api-key:xxxx-ffff-zzzzz,必须master keyURL参数device_id = //接收该数据的MODBUS设备ID,必填内容{"cmd":"xxxxxxxx" //需要下发MODBUS设备的命令〔16进制字符串}成功返回{"errno": 0,"error":"succ","data":{//不超过64个字符字符串"cmd_uuid":"2302-312-FWs"}}查看命令发送状态方法GETURL/cmds/头部api-key:xxxx-ffff-zzzzz,必须master key成功返回{"errno": 0,"error":"succ","data":{//0:设备不|Device not online1:命令已创建| Command Created 2:命令已发往设备| Command Sent3:命令发往设备失败| Send Command Failed 4:设备正常响应| Command Response Received5:命令执行超时| Command Response Timeout6:设备响应消息过长 | Command Response Too Large"status":1"desc":"sending"}}获取终端执行命令后的响应内容。

      方法GETURL/cmds/< cmd_uuid >/resp头部api-key:xxxx-ffff-zzzzz, 必须master key bodyMODBUS设备响应数据<二进制>响应的状态码对应的错误信息如下400No api-key403Auth Failed404Not Found400Invalid Parameter220Command Created221Command Sent520Send Command Failed200Command Response Received432Command Response Timeout433Command Response Too Large7 接入例子--命令03读取保持寄存器〔以下截图来自《MODBUS协议.pdf》1. 利用restfull api创建设备User-Agent: Fiddlerapi-key: nCxNdCoX6eHGfergpyytu66TyuY= /*必须为MasterKey*/注意长度和空行,建议使用fiddler调试,会自动填充长度Content-Length: 155{ "title":"12345670",/*填写MODBUS设备卡号*/ "desc":"test modbus", "private":true, "protocol":"",/*填写协议,没有专门的Modbus协议*/ "auth_info":{"12345670":"12345670"},/*这里就是鉴权信息的卡号和密码,长度有限制,参考登录报文格式*/ "interval":20 /*命令的查询间隔*/}此api没有针对modbus相关配置出错处理返回,必须仔细填写各个字段。

      2. 为该设备创建数据流使用restfull api创建,请求数据如下:POST ://api.heclouds/devices/[your_devid]/datastreams /1.1User-Agent: Fiddlerapi-key: nCxNdCoX6eHGfergpyytu66TyuY= /*设备对应的key或masterkey*/注意长度和空行,建议使用fiddler调试,会自动填充长度Content-Length: 66{"id":"test_cmd","cmd":"1103006B00038776","interval":20}CMD字段解释如下:"1103006B00038776"对应的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] = "type"; unsigned char name[9] = "name"; unsigned char phone[12] = "12345670";//填写创建设备时的卡号 unsigned char pwd[9] = "12345670";//填写创建设备时的密码 unsigned char p_id[11] = "47434";//modbus设备所在项目的ID memset; memcpy; memcpy; memcpy; memcpy; memcpy;向登录服务器上传整个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。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.