查看“单片机型自动销售设备通讯协议”的源代码
←
单片机型自动销售设备通讯协议
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
== 描述 == === 规约 === 本文档所述的协议是用于东骏科技有限公司物联网服务平台和单片机型自动销售设备的数据交互。 === 客服(技术)联系方式 === 杭州东骏科技有限公司 电话:0571-87017551 手机:18657108036 === 兼容性 === 仅适用于授权设备。 === 缩略语 === * PDU(Protocol Data Unit) 协议数据单元 * ADU(Application Data Unit) 应用数据单元 * IOTCU(IOT Control Unit) 物联网控制单元 * IOT(internet of things) 物联网 * MB(Main Board) 本文特指售货机主板 * IPC(Industrial Personal Computer) 本文特指安卓工控机 * Server 本文特指东骏波塞冬物联网平台 == 通讯协议 == === 约束 === Server和IOTCU之间的通讯应该遵循东骏科技物联协议。东骏科技物联协议的相关约束在本文档将不再重复描述。Server、IOTCU、MB之间通过ASCII协议通讯。为了尽可能保证数据在2g网络的时效性,所有设备通过IOTCU通讯每一帧数据的最大数据长度为964字节,两次数据发送间隔不得小于100ms。MB向IOTCU发送数据前都需要判断联网标识。如果IOTCU不在线则应该等待IOTCU在线后再向IOTCU发送数据。 === IOTCU与MB之间的通讯协议 === IOTCU和MB之间通讯采用RS232串口通讯,波特率为19200,8数据位,1停止位,无校验位。通讯报文采用ASCII协议通讯,内容主体使用JSON报文格式。通讯报文最大长度不得超过964字节,JSON数据字段最大长度不得超过950字节。 协议单元如下所示: {| class="wikitable" |- ! 开始字段 !! 会话字段 !! 命令字段 !! 数据字段 !! 校验字段 !! 结束标识 |- | 2byte || 6byte || 3byte || 不定长 || 1byte || 2byte |- | 0x23 0x2A || 见会话规则 || 通讯命令 || JSON数据 || 简单加和 || 0x0D 0x0A |- |} === Server与IOTCU之间通讯的协议 === Server与IOTCU之间通讯采用移动网络,协议同2.2 IOTCU与MB之间的通讯协议 === 校验方法 === 报文中校验统一使用简单校验和使用以下算法。 <nowiki> char checkSum(char *str){ const char *p = str; char check = 0x30; int checkSum = 0; while(*p != 0){ checkSum += (int)(*p); p++; } if(checkSum < 0){ checkSum = 0 - checkSum; } check = (char)checkSum; check = check % 0x30 + 0x30; return check; } </nowiki> == 系统及网络接口 == === 获取设备号 === ==== 请求设备号 ==== {| class="wikitable" |- | '''发送方''' || 服务器 |- | '''说明''' || 在设备连接服务端成功后,服务端立即发送指令请求该设备的设备号 现在约定设备的GSM模块的IMEI号作为唯一设备号 |- | '''开始标志''' || 1byte,“_” |- | '''报文长度''' || 3byte,表示整个报文的总长度,ASCII数字表示 |- | '''命令''' || 3byte,ADV |- | '''会话ID''' || 6byte,000000 |- | '''分隔符''' || 1byte,“/” |- | '''参数''' || IMEI |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} '''示例:''' _ 020 ADV 000000 / IMEI 0x0D 0x0A ==== 设备号响应 ==== {| class="wikitable" |- | '''发送方''' || 通信模块 |- | '''说明''' || 设备收到设备号请求时,返回设备号 现在约定设备的GSM模块的IMEI号作为唯一设备号 设备号返回后才能开始真正的业务级别通讯 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,DV |- | '''命令''' || 3byte,ADV |- | '''会话ID''' || 6byte,000000 |- | '''内容长度''' || 3byte,表示内容长度,ASCII数字表示 |- | '''内容''' || 2byte ID类型:IM 2byte 编码长度:IMEI号长度,一般为15 (一般15byte)设备号:GSM模块IMEI号 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} '''示例:''' IMEI号: 987654321012345 _ DV ADV 000000 019 IM 15 987654321012345 0x0D 0x0A === 心跳Ping === ==== 发送心跳Ping ==== {| class="wikitable" |- | style="width:70px" | '''发送方''' || 通信模块 |- | '''说明''' || 设备连接成功后,轮询发送心跳包,保持长连接。 综合考虑运营商GPRS的超时、路由映射缓存超时、流量节省等因素, 心跳间隔建议在60秒 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,PG |- | '''命令''' || 3byte,AXT |- | '''会话ID''' || 6byte,000000 |- | '''内容长度''' || 3byte,001 |- | '''内容''' || 信号值:0-31(,分割) 误码率:0-7(#/#分割) 上次心跳响应时间:整数值(可能为负,10ms为单位,上次心跳发出时间到上次接收到服务器心跳返回的时间,可以初略估计出网络的传输和服务器的响应速度,#/#分割) 网络制式:GPRS、HSPA、WCDMA、LTE、CDMA等 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} '''示例:''' _ PG AXT 000000 016 31 , 0 #/# 74 #/# GPRS 0x0D 0x0A '''信号值显示建议:''' 以下以5格信号显示为例:信号值0-5显示0格,信号值6-12显示为1格,信号值13-16显示为2格,信号值17-20显示为3格,信号值21-25显示为4格,信号值26-31显示为5格。同时如果误码率≥5,则信号格数在原来基础上减去1,如果计算的信号格数为负数则显示为零格。 通常信号值为15以下(包括15)的建议通过信号放大或者调整天线匹配等手段使模块获得更好的信号,在这种信号情况下会出现掉线率高,数据延时高等情况,对通讯和业务会造成影响。 '''关于天线:''' 天线是将传输线中的电磁能转化成自由空间的电磁波,或将空间电磁波转化成传输线中的电磁能的专用设备。在无线通信系统中,天线是收发信机与外界传播介质之间的接口。同一个天线既可以辐射又可以接收无线电波:发射时,把高频电流转换为电磁波;接收时把电磁波转换为高频电流。 天线是一种变换器,它把传输线上传播的导行波,变换成在无界媒介(通常是自由空间)中传播的电磁波,由于天线具有可逆性,在接收时,天线进行相反的变换;天线是发射和接收电磁波的一个重要装置,没有天线也就没有无线电通信。因此天线的好坏以及天线的安装环境直接影响通讯的质量甚至是是否可以通讯。当你发现你同一个地方2G信号是覆盖的,但是设备的信号很差时,请务必确认天线是否匹配2G网络,天线的安装环境是否良好。天线周围不应该有金属屏蔽或者对信号有反射和吸收的介质,天线周围也不应该有高频信号源或者电力线路,天线安装应该有一定的高度,并查看天线频率、增益、驻波比系数、功率,灵敏度等参数是否符合你的要求,如果你认为设备没有达到预期的信号效果,请咨询专业的天线厂家。 ==== 响应心跳Ping ==== {| class="wikitable" |- | '''发送方''' || 服务器 |- | '''说明''' || 服务端回复心跳 |- | '''开始标志''' || 1byte,“_” |- | '''报文长度''' || 3byte,表示整个报文的总长度,ASCII数字表示 |- | '''命令''' || 3byte,AXT |- | '''会话ID''' || 6byte,000000 |- | '''分隔符''' || 1byte,“/” |- | '''参数''' || P |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} '''示例:''' _ 017 AXT 000000 / P 0x0D 0x0A === 获取ICCID以及软硬件版本号 === ==== 请求ICCID以及软硬件版本号 ==== {| class="wikitable" |- | '''发送方''' || 服务器 |- | '''说明''' || 在设备返回设备号后,服务端发送指令获取SIM卡的ICCID |- | '''开始标志''' || 1byte,“_” |- | '''报文长度''' || 3byte,表示整个报文的总长度,ASCII数字表示 |- | '''命令''' || 3byte,AID |- | '''会话ID''' || 6byte,000000 |- | '''分隔符''' || 1byte,“/” |- | '''参数''' || |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} '''示例:''' _ 016 AID 000000 / 0x0D 0x0A ==== ICCID以及软硬件版本号响应 ==== {| class="wikitable" |- | '''发送方''' || 通信模块 |- | '''说明''' || 设备收到ICCID请求时,返回ICCID |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,ID |- | '''命令''' || 3byte,AID |- | '''会话ID''' || 6byte,000000 |- | '''内容长度''' || 3byte,表示内容长度,ASCII数字表示 |- | '''内容''' || ICCID号(#/#分割) 软件版本号(#/#) 硬件版本号 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} '''示例:''' ICCID号 : 898602B3131650175846 _ ID AID 000000 045 898602B3131650175846 #/# mc-2.3.0 #/# DJ-BSD-8202 0x0D 0x0A === 远程重启 === ==== 设置远程重启 ==== {| class="wikitable" |- | '''发送方''' || 服务器 |- | '''说明''' || 设置设备重启 |- | '''开始标志''' || 1byte,“_” |- | '''报文长度''' || 3byte,表示整个报文的总长度,ASCII数字表示 |- | '''命令''' || 3byte,ABT |- | '''会话ID''' || 6byte,000000 |- | '''分隔符''' || 1byte,“/” |- | '''参数''' || |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} '''示例:''' _ 016 ABT 000000 / 0x0D 0x0A === 请求设备类型 === ==== 请求设备类型 ==== {| class="wikitable" |- | '''发送方''' || 服务器 |- | '''说明''' || 请求设备的类型编号,服务端约定 |- | '''开始标志''' || 1byte,“_” |- | '''报文长度''' || 3byte,表示整个报文的总长度,ASCII数字表示 |- | '''命令''' || 3byte,ASY |- | '''会话ID''' || 6byte,000000 |- | '''分隔符''' || 1byte,“/” |- | '''参数''' || |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} '''示例:''' _ 016 ASY 000000 / 0x0D 0x0A ==== 响应设备类型 ==== {| class="wikitable" |- | '''发送方''' || 通信模块 |- | '''说明''' || 响应设备的类型编号 |- | '''开始标志''' || 1byte,“_” |- | '''响应类型''' || 2byte,RP |- | '''命令''' || 3byte,ASY |- | '''会话ID''' || 6byte,A00003 |- | '''内容长度''' || 3byte,表示内容长度,ASCII数字表示 |- | '''内容''' || 设备类型 |- | '''结束标志''' || 2byte,\r\n(0x0D 0x0A) |} '''示例:''' _ RP ASY A00003 001 1 0x0D 0x0A == 心跳和握手流程 == 设备通讯模块连接上服务器后会首先发送一次心跳,此时服务器就可以和模块通讯了,一般来说首先进行身份鉴别,通过获取IMEI和ICCID指令,获取设备的IMEI和ICCID号校验设备的身份信息。心跳是由模块发起,当发起心跳以后服务端必须在5秒钟之内回复心跳,建立连接以后模块会每个一定的时间发送心跳给服务器用来保持长连接和通讯确认。 == 业务接口 == === 设备状态 === ==== 设备温度上报【已废弃】 ==== 设备定时上报上中下三个温度传感器的当前温度。服务器进行温度解析,如 果超过临界值,发送短信预警。上报间隔不小于1分钟。 * 协议定义: {| class="wikitable" |- | 发送方 || MB |- | 接收方 || Server |- | 说明 || 设备通过该接口上报温度 |- | 命令(3byte) || WAA |- | 会话ID(6byte) || A60007 |- | 参数 || JSON数据:{”up”:温度,”middle”:温度,”down”:温度} |- | 参数说明 || 温度:整数,温度值在-55-125 之间,上传时以10倍的原始值上传(默认只有一位小数),即收到10即为1度,-32768代表找不到传感器。 |} ==== 设备故障上报 ==== 设备有故障需要通知运营人员时,通过此接口上报。 * 协议定义: {| class="wikitable" |- | 发送方 || MB |- | 接收方 || Server |- | 说明 || 设备通过该接口上报故障信息 |- | 命令(3byte) || WAB |- | 会话ID(6byte) || A60008 |- | 参数 || JSON数据:{”type”:故障类型,”level”:故障严重程度,”param”:故障参数} |- | 参数说明 || 故障类型:整数枚举:0-升降机故障,1-掉货故障,2-未取货故障。<br> 故障严重程度:整数:0-10之间整数,数值越大代表故越越严重,故障未定义程度时上报0。<br> 故障参数:JSON对象:没有参数时,上报空对象{}。 |} ==== 设备请求参数信息 ==== 设备启动时从平台获取参数信息。 * 协议定义: {| class="wikitable" |- | 发送方 || MB |- | 接收方 || Server |- | 说明 || 设备向服务器主动请求设备参数信息 |- | 命令(3byte) || JSL |- | 会话ID(6byte) || A60040 |- | 参数 || 0 |- | 参数说明 || |} ==== 设备参数信息下发 ==== 平台下发设备请求的设备参数信息。 * 协议定义 {| class="wikitable" |- | 发送方 || Server |- | 接收方 || MB |- | 说明 || 服务器将当前的设备参数信息下发给设备。 |- | 开始标识(1byte) || _ |- | 报文长度(3byte) || 不定长 |- | 命令(3byte) || BST |- | 会话ID(6byte) || 服务器生成 |- | 分隔符(1byte) || / |- | 参数 || JSON格式:{"startTemperture": 温控起始温度,"endTemperture": 温控结束温度,"useRelay": 是否启用继电器,"useRaster": 是否启用光栅} |- | 参数说明 || 温控起始温度:int类型<br> 温控结束温度:int类型<br> 是否启用继电器:boolean类型,true:是,false:否<br> 是否启用光栅:boolean类型,true:是,false:否 |- | 结束标号(2byte) || \r\n(0x0D 0x0A) |} ==== 设备参数设置响应 ==== 平台下发参数信息给设备后,设备给服务器成功或失败的响应。 * 协议定义: {| class="wikitable" |- | 发送方 || MB |- | 接收方 || Server |- | 开始标识(1byte) || _ |- | 说明 || 同步响应。 |- | 命令 || BST |- | 会话ID(6byte) || 服务器下发的会话ID |- | 内容长度 || 不定长 |- | 参数 || 响应结果 |- | 参数说明 || 响应结果:S-成功,F-失败。 |- | 结束标识(2byte) || \r\n(0x0D 0x0A) |} ==== 设备设置参数同步上报 ==== 设备上设置相关的参数信息上报到平台。 * 协议定义: {| class="wikitable" |- | 发送方 || MB |- | 接收方 || Server |- | 说明 || 设备自身后台改变设置参数时,上报服务器。 |- | 开始标识 || _ |- | 命令(3byte) || BST |- | 会话ID(6byte) || A60011 |- | 参数长度 || 不定长 |- | 参数 || json格式,每次传递所有设置项 JSON格式:{"startTemperture": 温控起始温度,"endTemperture": 温控结束温度,"useRelay": 是否启用继电器,"useRaster": 是否启用光栅} |- | 参数说明 || 温控起始温度:int类型<br> 温控结束温度:int类型<br> 是否启用继电器:boolean类型,true:是,false:否<br> 是否启用光栅:boolean类型,true:是,false:否 |- | 结束标识(2byte) || \r\n(0x0D 0x0A) |} ==== 查询设备当前温度 ==== 平台下发设备查询当前温度指令。 * 协议定义 {| class="wikitable" |- | 发送方 || Server |- | 接收方 || MB |- | 说明 || 平台下发设备查询当前温度指令,设备收到后上报服务器当前指令。 |- | 开始标识(1byte) || _ |- | 报文长度(3byte) || 不定长 |- | 命令(3byte) || SAS |- | 会话ID(6byte) || 服务器生成 |- | 分隔符(1byte) || / |- | 参数 || JSON格式:{} |- | 参数说明 || |- | 结束标号(2byte) || \r\n(0x0D 0x0A) |} ==== 设备温度上报 ==== 设备定时上报制冷温度、除霜温度、加热温度三个温度传感器的当前温度。服务器进行温度解析,如果超过临界值,发送预警。上报间隔不小于10分钟。 * 协议定义: {| class="wikitable" |- | 发送方 || MB |- | 接收方 || Server |- | 说明 || 设备自身后台改变设置参数时,上报服务器。 |- | 开始标识 || _ |- | 命令(3byte) || SAS |- | 会话ID(6byte) || A60028 |- | 参数长度 || 不定长 |- | 参数 || JSON格式:{"cool":温度,"defrost":温度,"heat":温度,"cMin":温度,"cMax":温度,"dMin":温度,"dMax":温度,"hMin":温度,"hMax":温度,"fVer":厂商版本,"sVer":系统版本} |- | 参数说明 || 温度:整数,米泉类型温度范围为1-80,返回99表示未连接温控探头。<br> cool:制冷温度;<br> defrost:除霜温度;<br> heat:加热温度;<br> cMin:制冷温度设置下限;<br> cMax:制冷温度设置上限;<br> dMin:除霜温度设置下限;<br> dMax:除霜温度设置上限;<br> hMin:加热温度设置下限;<br> hMax:加热温度设置上限;<br> 厂商版本:温控厂家自带版本; 系统版本:系统约定版本 1-米泉温度元器件。 |- | 结束标识(2byte) || \r\n(0x0D 0x0A) |} ==== 温控信息下发 ==== 平台下发设置设备对应的温控信息时间。 * 协议定义 {| class="wikitable" |- | 发送方 || Server |- | 接收方 || MB |- | 说明 || 平台下发设备停启用制冷器件指令,设备必须马上响应。 |- | 开始标识(1byte) || _ |- | 报文长度(3byte) || 不定长 |- | 命令(3byte) || SAT |- | 会话ID(6byte) || 服务器生成 |- | 分隔符(1byte) || / |- | 参数 || JSON格式:{“type”:类型,“sTime”:启用时间,“eTime”:停用时间,“cMin”:温度,“cMax”:温度,“dMin”:温度,“dMax”:温度,“hMin”:温度,“hMax”:温度} |- | 参数说明 || type:0 - 关闭温控,设备不再上报温度信息;1 - 启用停启用时间,设备需要上报温度;2-温控元件一直工作,设备需要上报温度。当type=2时,启用和停用时间不下发,表示可以一直工作。<br> 启动时间:温控元器件启用时间。<br> 停用时间:温控元器件停用时间。 cMin:制冷温度启动器件最小值<br> cMax:制冷温度启动器件最大值<br> dMin:除霜温度启动器件最小值<br> dMix:除霜温度启动器件最大值<br> hMin:加热温度启动器件最小值<br> hMax:加热温度启动器件最大值<br> 温度:整数,平台设置下发。 |- | 结束标号(2byte) || \r\n(0x0D 0x0A) |} ==== 平台温控信息下发响应 ==== 平台下发温控信息后,设备给服务器成功或失败的响应。 * 协议定义: {| class="wikitable" |- | 发送方 || MB |- | 接收方 || Server |- | 开始标识(1byte) || _ |- | 说明 || 同步响应。 |- | 命令 || SAT |- | 会话ID(6byte) || 服务器下发的会话ID |- | 内容长度 || 不定长 |- | 参数 || 响应结果 |- | 参数说明 || 响应结果:S-成功,F-失败。 |- | 结束标识(2byte) || \r\n(0x0D 0x0A) |} ==== 设备请求平台设置的温控信息上报 ==== 设备每次启动时,向平台获取对应的制冷工作温度、除霜工作温度、加热工作温度和温控器件的工作时间。 * 协议定义: {| class="wikitable" |- | 发送方 || MB |- | 接收方 || Server |- | 说明 || 设备每次启动时,向平台获取对应的制冷工作温度、除霜工作温度、加热工作温度和温控器件的工作时间。 |- | 开始标识 || _ |- | 命令(3byte) || UAQ |- | 会话ID(6byte) || A60041 |- | 参数长度 || 不定长 |- | 参数 || String格式:1 |- | 参数说明 || 1-固定值,无意义 |- | 结束标识(2byte) || \r\n(0x0D 0x0A) |} ==== 设备查询电机及电磁锁运行ADC值范围设定 ==== 设备查询服务端电机及电磁锁运行ADC值范围设定。 * 协议定义: {| class="wikitable" |- | 发送方 || MB |- | 接收方 || Server |- | 说明 || 设备查询服务端电机及电磁锁运行ADC值范围设定。 |- | 开始标识(1byte) || _ |- | 命令 || DCX |- | 会话ID(6byte) || A60029 |- | 内容长度 || 不定长 |- | 参数 || 0 |- | 参数说明 || 固定参数 |- | 结束标识(2byte) || \r\n(0x0D 0x0A) |} ==== 服务端响应电机及电磁锁运行ADC值范围设定查询 ==== 服务端响应设备电机及电磁锁运行ADC值范围设定的查询。 * 协议定义 {| class="wikitable" |- | 发送方 || Server |- | 接收方 || MB |- | 说明 || 平台响应设备电机及电磁锁运行ADC值范围设定查询。 |- | 开始标识(1byte) || _ |- | 报文长度(3byte) || 不定长 |- | 命令(3byte) || DCX |- | 会话ID(6byte) || 服务器生成 |- | 分隔符(1byte) || / |- | 参数 ||1200#/#15#/#6000#/#100#/#50#/#2000 |- | 参数说明 || 电机堵转ADC值:当ADC值大于此值则判定为电机堵转,若为0则为默认值1200 #/#<br> 电机掉线ADC值:当ADC值小于此值则判定为电机掉线,若为0则为默认值15 #/#<br> 电机超时时间:从设备收到出货指令开始计时,当超过设定时间时则判定为电机超时,单位毫秒。若为0则为默认值6000 #/#<br> 电磁锁运行ADC值:当ADC值大于此值时才判定电磁锁运行正常,若为0则为默认值100 #/#<br> 电磁锁掉线ADC值:当ADC值小于此值时则判定为电磁锁掉线,若为0则为默认值50 #/#<br> 电磁锁超时时间:从设备收到出货指令开始计时,当ADC值小于运行值,大于掉线值,超过设定时间则判定为电机运行超时,单位毫秒。若为0则为默认值2000<br> 参数要求如下:<br> 1、电机堵转ADC值设置范围为:1-5000,整数;<br> 2、电机掉线ADC值设置范围:1-200,整数,小于电机堵转值;<br> 3、电机超时时间设置范围:1-30000,填写1000的倍数;<br> 4、电磁锁运行判定ADC值范围:1-5000,整数;<br> 5、电磁锁掉线判定ADC值范围:1-200,整数,小于电磁锁运行判定ADC值;<br> 6、电磁锁超时时间设置范围:1-10000,填写1000的倍数;<br> |- | 结束标号(2byte) || \r\n(0x0D 0x0A) |} ==== 电机及电磁锁运行ADC值范围设定 ==== 平台下发设置设备电机及电磁锁运行ADC值范围设定。 * 协议定义 {| class="wikitable" |- | 发送方 || Server |- | 接收方 || MB |- | 说明 || 平台下发设置设备电机及电磁锁运行ADC值范围设定。 |- | 开始标识(1byte) || _ |- | 报文长度(3byte) || 不定长 |- | 命令(3byte) || DSZ |- | 会话ID(6byte) || 服务器生成 |- | 分隔符(1byte) || / |- | 参数 || 1200#/#15#/#6000#/#100#/#50#/#2000 |- | 参数说明 || 电机堵转ADC值:当ADC值大于此值则判定为电机堵转,若为0则为默认值1200 #/# 电机掉线ADC值:当ADC值小于此值则判定为电机掉线,若为0则为默认值15 #/#<br> 电机超时时间:从设备收到出货指令开始计时,当超过设定时间时则判定为电机超时,单位毫秒。若为0则为默认值6000 #/#<br> 电磁锁运行ADC值:当ADC值大于此值时才判定电磁锁运行正常,若为0则为默认值100 #/#<br> 电磁锁掉线ADC值:当ADC值小于此值时则判定为电磁锁掉线,若为0则为默认值50 #/#<br> 电磁锁超时时间:从设备收到出货指令开始计时,当ADC值小于运行值,大于掉线值,超过设定时间则判定为电机运行超时,单位毫秒。若为0则为默认值2000<br> 参数要求如下:<br> 1、电机堵转ADC值设置范围为:1-5000,整数;<br> 2、电机掉线ADC值设置范围:1-200,整数,小于电机堵转值;<br> 3、电机超时时间设置范围:1-30000,填写1000的倍数;<br> 4、电磁锁运行判定ADC值范围:1-5000,整数;<br> 5、电磁锁掉线判定ADC值范围:1-200,整数,小于电磁锁运行判定ADC值;<br> 6、电磁锁超时时间设置范围:1-10000,填写1000的倍数;<br> |- | 结束标号(2byte) || \r\n(0x0D 0x0A) |} ==== 电机及电磁锁运行ADC值范围设定响应 ==== 平台下发电机及电磁锁运行ADC值范围设定的响应。 * 协议定义: {| class="wikitable" |- | 发送方 || MB |- | 接收方 || Server |- | 开始标识(1byte) || _ |- | 说明 || 同步响应。 |- | 命令 || DSZ |- | 会话ID(6byte) || 服务器下发的会话ID |- | 内容长度 || 不定长 |- | 参数 || 响应结果 |- | 参数说明 || 响应结果:S-成功,F-失败。 |- | 结束标识(2byte) || \r\n(0x0D 0x0A) |} ==== 电机及电磁锁运行ADC值范围设定查询 ==== 平台查询设备电机及电磁锁运行ADC值范围设定。 * 协议定义 {| class="wikitable" |- | 发送方 || Server |- | 接收方 || MB |- | 说明 || 平台查询设备电机及电磁锁运行ADC值范围设定。 |- | 开始标识(1byte) || _ |- | 报文长度(3byte) || 不定长 |- | 命令(3byte) || CSZ |- | 会话ID(6byte) || 服务器生成 |- | 分隔符(1byte) || / |- | 参数 || 0 |- | 参数说明 || 固定值 |- | 结束标号(2byte) || \r\n(0x0D 0x0A) |} ==== 电机及电磁锁运行ADC值范围设定查询响应 ==== 平台查询电机及电磁锁运行ADC值范围设定的响应。 * 协议定义: {| class="wikitable" |- | 发送方 || MB |- | 接收方 || Server |- | 开始标识(1byte) || _ |- | 说明 || 同步响应。 |- | 命令 || CSZ |- | 会话ID(6byte) || 服务器下发的会话ID |- | 内容长度 || 不定长 |- | 参数 || 1200#/#15#/#6000#/#100#/#50#/#2000 |- | 参数说明 || 电机堵转ADC值:当ADC值大于此值则判定为电机堵转 #/# 电机掉线ADC值:当ADC值小于此值则判定为电机掉线 #/#<br> 电机超时时间:从设备收到出货指令开始计时,当超过设定时间时则判定为电机超时,单位毫秒。 #/#<br> 电磁锁运行ADC值:当ADC值大于此值时才判定电磁锁运行正常 #/#<br> 电磁锁掉线ADC值:当ADC值小于此值时则判定为电磁锁掉线 #/#<br> 电磁锁超时时间:从设备收到出货指令开始计时,当ADC值小于运行值,大于掉线值,超过设定时间则判定为电机运行超时,单位毫秒。 |- | 结束标识(2byte) || \r\n(0x0D 0x0A) |} === 货道管理 === ==== 设备一键补满 ==== 设备上一键补满按钮,请求平台对设备下的货道进行一键补满操作。 * 协议定义: {| class="wikitable" |- | 发送方|| MB |- | 接收方 || Server |- | 说明 || 适用于设备一键补货场景。 |- | 开始标识 || _ |- | 指令类型 || RP |- | 命令 || URS |- | 会话ID || A61002 |- | 内容长度 || 001 |- | 参数设置 || 1 |- | 结束标识(2byte)|| \r\n(0x0D 0x0A) |} ==== 设备一键补满应答 ==== 服务器对设备一键补满操作的应答。 * 协议定义: {| class="wikitable" |- | 发送方|| Server |- | 接收方 || MB |- | 说明 || 一键补满响应成功或失败。 |- | 开始标识(1byte) || _ |- | 报文长度(3byte) || 不定长 |- | 命令(3byte) || KAC |- | 会话ID(6byte) || 服务器生成 |- | 分隔符(1byte) || / |- | 参数 || 成功标识 |- | 参数说明 || 成功标识:0-成功;1-失败。 |- | 结束标识 || \r\n(0x0D 0x0A) |} ==== 更新货道信息 ==== 服务器更新设备货道库存和状态等,一般用来服务端补货或者服务端修改货道状态。 * 协议定义: {| class="wikitable sortable" |- | 发送方 || Server |- | 接收方 || MB |- | 说明 || 服务器更新MB货道状态库存信息 |- | 命令(3byte) || BAC |- | 会话ID(6byte) || 服务器生成 |- | 参数 || JSON对象:{“ch”: “货道号”,“status”:货道状态,“qty”:库存数,“bar”:”条码” } |- | 参数说明 || 货道号:字符串,货道的编号。<br> 货道状态:整数枚举,0-正常,1-货空,2-未启用,3-不存在(如果货道状态为不存在则MB应该删除该货道信息),4-故障,如果无此字段则不更新货道状态。<br> 库存数:整数,服务端下发更新的库存数,如果无此字段则不更新MB库存数。<br> 条码:字符串,商品的标准条码,无此字段则MB需要删除该商品,相当于此货道无商品维护。 |} ==== 更新货道信息应答 ==== 客户机准确存储服务器下发的货道信息数据或处理出错时返回该指令。 * 协议定义: {| class="wikitable" |- | 发送方 || MB |- | 接收方 || Server |- | 说明 || 服务器更新货道状态和库存信息返回 |- | 命令(3byte) || BAC |- | 会话ID(6byte) || 应答的请求中的会话ID |- | 参数 || JSON对象:{“ch”:”货道号”,“status”:更新成功与否,“reason”:错误原因} |- | 参数说明 || 货道号:字符串,货道的编号。<br> 更新成功与否:枚举值,0-更新成功,1-更新失败。<br> 错误原因:正数枚举,0-正常,1-库存不合规则,2-货道不存在。 |} ==== 更改货道商品价格 ==== 运营人员通过服务器修改商品价格或者其他原因需要下发价格,服务端通过该命令下发价格。 * 协议定义: {| class="wikitable" |- | 发送方 || Server |- | 接收方 || MB |- | 说明 || 服务器更新商品价格 |- | 命令(3byte) || BAD |- | 会话ID(6byte) || 服务器生成 |- | 参数 || JSON对象:{“ch”: “货道号”,“bar”:”商品条码” ,“price”:商品售价} |- | 参数说明 || 货道号:字符串,货道的编号<br> 条码:当前货道的商品条码,MB更新前需要校验存储的商品条码和数据中的商品条码是否一致,如果不一致应该放弃修改并报告服务器。<br> 商品售价:整数,商品的当时售价,以分为单位,即1元商品为100。 |} ==== 更改货道商品价格应答 ==== 客户机准确存储服务器下发的商品价格或处理出错时返回该指令。 * 协议定义: {| class="wikitable" |- | 发送方 || MB |- | 接收方 || Server |- | 说明 || 服务器更新货道商品价格应答 |- | 命令(3byte) || BAD |- | 会话ID(6byte) || 服务器请求下发的会话 |- | 参数 || JSON对象:{“ch”:“货道号”,“status”:”更新成功与否”} |- | 参数说明 || 货道号:字符串,货道的编号<br> 更新成功与否:枚举值,0-成功,1-商品条码不对应失败,2-没有对应的货道,3-其它原因失败。 |} ==== 设备开柜门 ==== 用于采用电子锁的设备开门接口。 * 协议定义: {| class="wikitable" |- | 发送方 || Server |- | 接收方 || MB |- | 说明 || 设备开关门。 |- | 命令(3byte) || FAC |- | 会话ID(6byte) || 示例 |- | 参数 || JSON格式:{“door”:开关门} |- | 参数说明 || 开关门:整数,1-开门,0-关门。(关门预留,目前只有开门) |} ==== 开关门应答 ==== 开关门请求接口应答 * 协议定义: {| class="wikitable" |- | 发送方|| MB |- | 接收方 || Server |- | 说明 || 开关门应答 |- | 命令(3byte) || FAC |- | 会话ID(6byte) || 服务器请求找那个的会话 |- | 参数 || JSON格式:{“status”:结果} |- | 参数说明 || 结果:整数,0-成功,1-动作器件失效(比如开关门电磁铁或电机线脱落或堵转等),2-动作未成功(比如开关门限位开关出现错误信号),3-不支持功能。 |} ==== 东骏格子机打开格子门 ==== 格子机可用于补货时开柜门。 * 协议定义: {| class="wikitable" |- | 发送方 || Server |- | 接收方 || MB |- | 说明 || 一次驱动所有出货机构。 |- | 命令(3byte) || SAR |- | 会话ID(6byte) || 服务器生成 |- | 参数 || JSON格式:{“index”:柜机号,“chs”:货道是否需要开门标识} |- | 参数说明 || 柜机号:整数,1-10,若有多个柜机时,可进行扩展,需要平台同步支持。目前只支持1。 货道是否需要开门标识:1货道代表第一位,2货道代表第二位,依次类推。 0表示不需要开门,1表示需要开门。 |} 实例:如果货道从1-20,其中18货道不可用 _058SARVqhnQf/{"index":"1","chs":"11111111111111111011"}/r/n ==== 东骏格子机打开格子门应答 ==== 驱动出货机构测试请求接口应答 * 协议定义: {| class="wikitable" |- | 发送方|| MB |- | 接收方 || Server |- | 说明 || 驱动出货机构测试应答 |- | 命令(3byte) || SAR |- | 会话ID(6byte) || 服务器下发的会话 |- | 参数 || JSON格式:{“status”:结果} |- | 参数说明 || 结果:整数,0-成功(设备收到指令,且解析成功即可),1-指令解析失败, 2-动作器件失效(比如开关门电磁铁或电机线脱落或堵转等),3-不支持功能。 |} ==== 东骏驱动板驱动出货机构测试 ==== 用于测试出货机构是否正常。 * 协议定义: {| class="wikitable" |- | 发送方 || Server |- | 接收方 || MB |- | 说明 || 一次驱动所有出货机构。 |- | 命令(3byte) || SAQ |- | 会话ID(6byte) || 服务器生成 |- | 参数 ||JSON格式:{“index”:柜机号,“chs”:货道是否需要开门标识} |- | 参数说明 || 柜机号:整数,1-10,若有多个柜机时,可进行扩展,需要平台同步支持。目前只支持1。<br> 货道是否需要开门标识:1货道代表第一位,2货道代表第二位,依次类推。 0表示不需要开门,1表示需要开门。 |} ==== 东骏驱动板驱动出货机构测试应答 ==== 驱动出货机构测试请求接口应答 * 协议定义: {| class="wikitable" |- | 发送方|| MB |- | 接收方 || Server |- | 说明 || 驱动出货机构测试应答 |- | 命令(3byte) || SAQ |- | 会话ID(6byte) || 服务器下发的会话 |- | 参数 || JSON格式:{“status”:结果} |- | 参数说明 || 结果:整数,0-成功(设备收到指令,且解析成功即可),1-指令解析失败, 2-动作器件失效(比如开关门电磁铁或电机线脱落或堵转等),3-不支持功能。 |} 示例: 处理成功 平台下发会话123456 <br> _ RS SAQ 123456 012 {"status":1} \r \n === 商品销售 === ==== 单品下单 ==== 用户通过客户机下单,客户机上报服务器并由服务器生成订单。 * 协议定义: {| class="wikitable" |- | 发送方|| MB |- | 接收方 || Server |- | 说明 || 单片下单 |- | 命令(3byte) || DAB |- | 会话ID(6byte) || A60001 |- | 参数 || JSON格式:{“ch”:“货道号”,“bar”:”条码”,“qty”:购买数量,“price”:销售价格,“payMethod”:支付方式} |- | 参数说明 || 货道号:字符串,货道的编号。<br> 条码:字符串,下单商品的条码。<br> 购买数量:整数,商品购买的数量。<br> 销售价格:整数,用户所看到的商品价格,以分为单位。<br> 支付方式:整数枚举,0-线上支付(因为微信支付宝二维码需要同时显示,所以线上支付方式统一为0)。 |} ==== 单品下单反馈二维码 ==== 设备上报单品下单请求后,如果能正常获取支付宝和微信的付款链接,则会将该链接下发给设备,由设备生成对应的二维码。两者必须同时正确才会下发。 * 协议定义: {| class="wikitable" |- | 发送方|| Server |- | 接收方|| MB |- | 说明 || 服务器向设备下发支付宝和微信的支付二维码 |- | 命令(3byte) || BBF |- | 命令ID(6byte) || 服务端生成 |- | 参数 || JSON格式:{“bill”:”订单号”,“aliqr”:”支付宝二维码字符串”,“weixinqr”:微信二维码字符串} |- | 参数说明|| 订单号:字符串,本次关联的订单的编号。<br> 支付宝二维码字符串:从支付宝获取的支付二维码字符串。<br> 微信二维码字符串:从微信获取的支付二维码字符串。 |} ==== 单品优惠码下单 ==== 用户通过客户机输入优惠码下单,客户机上报服务器请求。 {| class="wikitable" |- | 发送方|| MB |- | 接收方 || Server |- | 说明 || 单片下单 |- | 命令(3byte) || DAP |- | 会话ID(6byte) || A60012 |- | 参数 || JSON格式:{“ch”:“货道号”,“bar”:”条码”,“qty”:购买数量,“price”:销售价格,“payMethod”:支付方式,”dstCode”:优惠码} |- | 参数说明 || 货道号:字符串,货道的编号。<br> 条码:字符串,下单商品的条码。<br> 购买数量:整数,商品购买的数量。<br> 销售价格:整数,用户所看到的商品价格,以分为单位。<br> 支付方式:整数枚举,0-线上支付(因为微信支付宝二维码需要同时显示,所以线上支付方式统一为0) 优惠码:字符串,客户自己输入的优惠码,不能超过13位。由平台预先定义。 |} ==== 单品优惠码下单反馈二维码 ==== 用户通过单品优惠码下单请求上报后,平台向设备反馈信息。该接口如果支付宝失败,微信成功,则仍会将微信对应的付款链接字符串下发,反之亦然。如果都成功,则会一起将付款链接字符串下发设备,由设备统一生成付款二维码。 * 协议定义: {| class="wikitable" |- | 发送方|| Server |- | 接收方|| MB |- | 说明 || 服务器向设备下发优惠后的二维码字段信息 |- | 命令(3byte) || BBQ |- | 会话ID(6byte) || 服务器生成 |- | 参数 || JSON格式:{“bill”:”订单号”,”ch”:”货道号”,”bar”:”商品条码”,”qty”,”数量”,”errorCode”:”错误码”,“aliqr”:”支付宝二维码字符串”,“weixinqr”:微信二维码字符串} |- | 参数说明 || 订单号:字符串,本次关联的订单的编号。<br> 货道号:字符串,货道号。<br> 商品条码:字符串,商品条码。<br> 数量:购买量。<br> 错误码:0-处理成功;1-获取二维码失败;2-优惠码错误;3-其他。 |} ==== 单片出货通知 ==== 用户在线支付订单,服务器确认后下发出货通知,设备出货。 * 协议定义: {| class="wikitable" |- | 发送方|| Server |- | 接收方 || MB |- | 说明 || 单片出货通知设备 |- | 命令(3byte)|| DAD |- | 会话ID(6byte) || 服务器生成 |- | 参数 || JSON格式:{“bill”:”订单号”,“bar”:”条码”,“qty”:出货数量,“ch”:”货道号”} |- | 参数说明 || 货道号:字符串,货道的编号。<br> 订单号:字符串,本次下货关联的订单的编号。<br> 条码:字符串,订单购买的商品条码。<br> 购买数量:字符串,商品订单的商品数量<br> |} _ 120 DAD WuXKOp / {"deviceNo":"862015034847876","bill":"20190520224601074017719","bar":"1111111111113","qty":1,"ch":"001"} \r\n ==== 设备反馈单品出货结果(线上支付) ==== 服务器通知出货以后设备出货,完成后上报出货结果。 * 协议定义: {| class="wikitable" |- | 发送方|| MB |- | 接收方 || Server |- | 说明 || 设备反馈单片出货结果 |- | 命令(3byte) || DAF |- | 会话ID(6byte) || A60005 |- | 参数 || JSON格式:{“bill”:订单号,“ch”:货道号,“qty”:成功出货的数量,“result”:出货结果} |- | 参数说明 || 货道号:字符串,货道的编号。<br> 订单号:出货所关联的货道。<br> 成功出货的数量:整数,成功出货的商品数量。<br> 出货结果:整数枚举,0-出货成功,1-部分出货成功,2-货道空失败,3-出货电机故障,4-出货电机堵转,5-出货电机掉线,6-货道不存在,7-限位异常(到位开关问题),8-升降电机故障,9-出货通道堵塞,10-从机通讯失败(串口通讯异常),11-其他失败,12-查询出货状态异常,13-出货响应上报超时,14-出货失败,光幕未检测到出货,15-出货成功,带光幕,16-部分出货成功,带光幕,17-出货成功,光幕启动失败,18-部分出货成功,光幕启动失败,19-查询驱动板状态异常(驱动板非空闲) |} ==== 出货结果上报响应 ==== {| class="wikitable" |- | 发送方 || 服务器 |- | 说明 || 服务器收到出货结果上报后回应设备, 如果没收到回应设备需要重新尝试上报出货结果 |- | 开始标识(1byte) || _ |- | 报文长度(3byte) || 不定长 |- | 命令(3byte) || ICX |- | 会话ID(6byte) || 服务器生成 |- | 分隔符(1byte) || / |- | 参数 || 格式:<br> 订单号#/#反馈结果<br> 说明<br> <nowiki>#/#</nowiki>为分隔符<br> 订单号: 系统生成订单的唯一标识<br> 反馈结果:S - 成功 或者 F - 失败 |- | 结束标识(2byte) || \r\n (0x0D 0x0A) |} 示例<br> 订单号: 12345678901234567890123<br> 反馈结果: 成功<br> _ 043 ICX 123456 / 12345678901234567890123#/#S \r\n ==== 线下独立单品订单上报 ==== 上报线下的独立订单,不是通过系统交易的订单,这种订单在上报之前都没有经过系统也就是没有了订单号,上报之后系统生成一条交易订单,生成订单号。用于独立系统的纸硬币器订单处理。 * 协议定义: {| class="wikitable" |- | 发送方|| MB |- | 接收方 || Server |- | 说明 || 线下独立单片订单上报,适用于不过平台独立生成订单的纸硬币器订单。 |- | 命令(3byte) || BBC |- | 会话ID(6byte) || A60003 |- | 参数 || JSON格式:{“ch”:货道号,“bar”:条码,“qty”:成功出货的数量,“payMethod”:支付方式,“pay”:支付金额,“payResult”:支付结果,“result”:出货结果} |- | 参数说明 || 货道号:字符串,货道的编号。<br> 条码:字符串,订单购买的商品条码。<br> 成功出货的数量:整数,成功出货的商品数量。<br> 支付方式:整数,0-微信,1-支付宝,2-钱包支付,3-银联闪付,4-现金,5-RFID充值卡,6-会员卡。<br> 支付金额:整数,支付的现金,以分为单位。<br> 支付结果:整数,0-成功,1-失败,2-未确认。<br> 出货结果:整数枚举,0-出货成功,1-部分出货成功,2-货道空失败,3-货道故障失败,4-货道不存在,5-支付未成功,6-其他失败。 |}
返回至
单片机型自动销售设备通讯协议
。
导航菜单
个人工具
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息