实验平台协议
<p>[TOC]</p>
<blockquote>
<blockquote>
<p>实验平台使用MQTT通讯</p>
</blockquote>
</blockquote>
<h2>topic定义:</h2>
<p>节点功能topic:</p>
<p>下行:<code>/xm/sh/request/mqtt/网关序列号/产品类型/节点ID/v2</code>
上行:<code>/xm/sh/response/mqtt/网关序列号/产品类型/节点ID/v2</code></p>
<p>网关功能topic:
上行:<code>/xm/sh/response/mqtt/网关序列号/2018/v2</code></p>
<h2>上下线消息</h2>
<pre><code class="language-json"># 上线消息
#/xm/sh/response/mqtt/123456789/2018/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "123456789",
"action": "online",
"params": {
},
"serviceid": "20180101"
}
]
}
}
# 下线消息 心跳30s,连续三次未收到心跳,将认为设备离线
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "123456789",
"action": "offline",
"params": {
},
"serviceid": "20180101"
}
]
}
}
</code></pre>
<h2>协议</h2>
<h3>一、产品类型:1021 (8继电器8IO)</h3>
<table>
<thead>
<tr>
<th>属性</th>
<th>名称</th>
<th>类型</th>
<th>读写</th>
</tr>
</thead>
<tbody>
<tr>
<td>11</td>
<td>继电器1状态</td>
<td>布尔值</td>
<td>可读写</td>
</tr>
<tr>
<td>12</td>
<td>继电器2状态</td>
<td>布尔值</td>
<td>可读写</td>
</tr>
<tr>
<td>13</td>
<td>继电器3状态</td>
<td>布尔值</td>
<td>可读写</td>
</tr>
<tr>
<td>14</td>
<td>继电器4状态</td>
<td>布尔值</td>
<td>可读写</td>
</tr>
<tr>
<td>15</td>
<td>继电器5状态</td>
<td>布尔值</td>
<td>可读写</td>
</tr>
<tr>
<td>16</td>
<td>继电器6状态</td>
<td>布尔值</td>
<td>可读写</td>
</tr>
<tr>
<td>17</td>
<td>继电器7状态</td>
<td>布尔值</td>
<td>可读写</td>
</tr>
<tr>
<td>18</td>
<td>继电器8状态</td>
<td>布尔值</td>
<td>可读写</td>
</tr>
<tr>
<td>21</td>
<td>IO1状态</td>
<td>布尔值</td>
<td>只读</td>
</tr>
<tr>
<td>22</td>
<td>IO2态</td>
<td>布尔值</td>
<td>只读</td>
</tr>
<tr>
<td>23</td>
<td>IO3态</td>
<td>布尔值</td>
<td>只读</td>
</tr>
<tr>
<td>24</td>
<td>IO4态</td>
<td>布尔值</td>
<td>只读</td>
</tr>
<tr>
<td>25</td>
<td>IO5态</td>
<td>布尔值</td>
<td>只读</td>
</tr>
<tr>
<td>26</td>
<td>IO6态</td>
<td>布尔值</td>
<td>只读</td>
</tr>
<tr>
<td>27</td>
<td>IO7态</td>
<td>布尔值</td>
<td>只读</td>
</tr>
<tr>
<td>28</td>
<td>IO8态</td>
<td>布尔值</td>
<td>只读</td>
</tr>
</tbody>
</table>
<p>控制指令:</p>
<h4>开关继电器</h4>
<pre><code class="language-json">#下行 /xm/sh/request/mqtt/123456789/1021/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "1234567890b", # 网关序列号(123456789)+节点ID(0b)
"action": "command", # command 执行写操作
"params": {
"11": false # 将继电器1关闭
}
}
]
}
}
# ---
# 上行 /xm/sh/response/mqtt/123456789/1021/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "1234567890b",
"action": "command",
"params": {
"11": false
},
"serviceid": "10210101"
}
]
}
}
</code></pre>
<h4>读取所有继电器状态</h4>
<pre><code class="language-json">#下行 /xm/sh/request/mqtt/123456789/1021/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "1234567890b", # 网关序列号(123456789)+节点ID(0b)
"action": "getStat", # getStat 读取继电器状态
"params": {
}
}
]
}
}
# ---
# 上行 /xm/sh/response/mqtt/123456789/1021/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "1234567890b",
"action": "getStat",
"params": {
"11": false,
"12": false,
...
"18":false
},
"serviceid": "10210101"
}
]
}
}</code></pre>
<h4>读取所有IO状态</h4>
<pre><code class="language-json">#下行 /xm/sh/request/mqtt/123456789/1021/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "1234567890b", # 网关序列号(123456789)+节点ID(0b)
"action": "getIo", # getIo 读取IO状态
"params": {
}
}
]
}
}
# ---
# 上行 /xm/sh/response/mqtt/123456789/1021/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "1234567890b",
"action": "getIo",
"params": {
"21": false,
"22": false,
...
"28":false
},
"serviceid": "10210101"
}
]
}
}</code></pre>
<h3>二、产品类型:1022(温湿度计)</h3>
<table>
<thead>
<tr>
<th>属性</th>
<th>名称</th>
<th>类型</th>
<th>读写</th>
</tr>
</thead>
<tbody>
<tr>
<td>11</td>
<td>温度</td>
<td>float</td>
<td>只读</td>
</tr>
<tr>
<td>12</td>
<td>湿度</td>
<td>float</td>
<td>只读</td>
</tr>
</tbody>
</table>
<h4>读取温湿度</h4>
<pre><code class="language-json">#下行 /xm/sh/request/mqtt/123456789/1022/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "1234567890a", # 网关序列号(123456789)+节点ID(0a)
"action": "getStat", # getStat 读取温湿度
"params": {
}
}
]
}
}
# ---
# 上行 /xm/sh/response/mqtt/123456789/1022/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "1234567890a",
"action": "getStat",
"params": {
"11": 36.5,
"12": 47.8
},
"serviceid": "10220101"
}
]
}
}</code></pre>
<h3>三、产品类型:1023 (压差)</h3>
<table>
<thead>
<tr>
<th>属性</th>
<th>名称</th>
<th>类型</th>
<th>读写</th>
</tr>
</thead>
<tbody>
<tr>
<td>11</td>
<td>压力1</td>
<td>int</td>
<td>只读</td>
</tr>
<tr>
<td>12</td>
<td>压力2</td>
<td>int</td>
<td>只读</td>
</tr>
</tbody>
</table>
<h4>读取压力</h4>
<pre><code class="language-json">#下行 /xm/sh/request/mqtt/123456789/1023/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "1234567890c", # 网关序列号(123456789)+节点ID(0c)
"action": "getStat", # getStat 读取压力
"params": {
}
}
]
}
}
# ---
# 上行 /xm/sh/response/mqtt/123456789/1023/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "1234567890c",
"action": "getStat",
"params": {
"11": 99,
"12": 1
},
"serviceid": "10230101"
}
]
}
}</code></pre>
<h3>四、产品类型:1024 (变频器)</h3>
<table>
<thead>
<tr>
<th>属性</th>
<th>名称</th>
<th>类型</th>
<th>读写</th>
</tr>
</thead>
<tbody>
<tr>
<td>11</td>
<td>控制字</td>
<td>布尔值</td>
<td>只写</td>
</tr>
<tr>
<td>12</td>
<td>转速方向百分比 (-100到100)</td>
<td>int</td>
<td>只写</td>
</tr>
<tr>
<td>13</td>
<td>转速 rpm</td>
<td>int</td>
<td>只读</td>
</tr>
<tr>
<td>14</td>
<td>频率 赫兹</td>
<td>float</td>
<td>只读</td>
</tr>
<tr>
<td>15</td>
<td>方向 1正向 0未知 -1反向</td>
<td>int</td>
<td>只读</td>
</tr>
<tr>
<td>15</td>
<td>方向 1正向 0未知 -1反向</td>
<td>int</td>
<td>只读</td>
</tr>
<tr>
<td>305</td>
<td>故障字1</td>
<td>List<int></td>
<td>只读</td>
</tr>
<tr>
<td>306</td>
<td>故障字2</td>
<td>List<int></td>
<td>只读</td>
</tr>
</tbody>
</table>
<p>故障字305包含的内容:</p>
<ul>
<li>0 过流</li>
<li>1 过压</li>
<li>2 传动过温</li>
<li>3 短路</li>
<li>4 ---</li>
<li>5 直流欠压</li>
<li>6 AI1 丢失</li>
<li>7 AI2 丢失</li>
<li>8 电机过温</li>
<li>9 控制盘丢失</li>
<li>10 ---</li>
<li>11 电机堵转</li>
<li>12 控制板过温</li>
<li>13 外部故障1</li>
<li>14 外部故障2</li>
<li>15 接地故障</li>
</ul>
<p>故障字306包含的内容:</p>
<ul>
<li>0 ---</li>
<li>1 传感器故障</li>
<li>2 OPEX连接故障</li>
<li>3 OPEX电源故障</li>
<li>4 电流测量故障</li>
<li>5 ---</li>
<li>6 ---</li>
<li>7 ---</li>
<li>8 ---</li>
<li>9 传动识别故障</li>
<li>10 配置文件出错</li>
<li>11 串口1故障</li>
<li>12 内置现场总线配置文件出错</li>
<li>13 强制跳闸</li>
<li>14 电机缺相</li>
<li>15 输出线接地故障</li>
</ul>
<p>要点:</p>
<p>a.变频器启动顺序:</p>
<ol>
<li>初始化控制字</li>
<li>延时100ms+</li>
<li>设置频率及方向</li>
<li>启动电机</li>
</ol>
<p>b.电机在不启动的状态下读取不到方向,频率,转速</p>
<h4>初始化控制字</h4>
<pre><code class="language-json">#下行 /xm/sh/request/mqtt/123456789/1024/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "12345678915", # 网关序列号(123456789)+节点ID(15)
"action": "init", # init 初始化控制字
"params": {
}
}
]
}
}
# ---
# 上行 /xm/sh/response/mqtt/123456789/1024/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "12345678915",
"action": "init",
"params": {
},
"serviceid": "10240101"
}
]
}
}</code></pre>
<h4>设置频率及方向:</h4>
<pre><code class="language-json">#下行 /xm/sh/request/mqtt/123456789/1024/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "12345678915", # 网关序列号(123456789)+节点ID(15)
"action": "command",
"params": {
"12":50
}
}
]
}
}
# ---
# 上行 /xm/sh/response/mqtt/123456789/1024/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "12345678915",
"action": "command",
"params": {
"12":50
},
"serviceid": "10240101"
}
]
}
}</code></pre>
<h4>启动电机:</h4>
<pre><code class="language-json">#下行 /xm/sh/request/mqtt/123456789/1024/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "12345678915", # 网关序列号(123456789)+节点ID(15)
"action": "command",
"params": {
"11":true
}
}
]
}
}
# ---
# 上行 /xm/sh/response/mqtt/123456789/1024/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "12345678915",
"action": "command",
"params": {
"11":true
},
"serviceid": "10240101"
}
]
}
}</code></pre>
<h4>关闭电机</h4>
<pre><code class="language-json">#下行 /xm/sh/request/mqtt/123456789/1024/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "12345678915", # 网关序列号(123456789)+节点ID(15)
"action": "command",
"params": {
"11":false
}
}
]
}
}
# ---
# 上行 /xm/sh/response/mqtt/123456789/1024/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "12345678915",
"action": "command",
"params": {
"11":false
},
"serviceid": "10240101"
}
]
}
}</code></pre>
<h4>读取状态</h4>
<pre><code class="language-json">#下行 /xm/sh/request/mqtt/123456789/1024/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "12345678915", # 网关序列号(123456789)+节点ID(15)
"action": "getStat",
"params": {
}
}
]
}
}
# ---
# 上行 /xm/sh/response/mqtt/123456789/1024/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "12345678915",
"action": "getStat",
"params": {
"13":175,
"14":2.5,
"15":1
},
"serviceid": "10240101"
}
]
}
}</code></pre>
<h4>读取故障字</h4>
<pre><code class="language-json">#下行 /xm/sh/request/mqtt/123456789/1024/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "12345678915", # 网关序列号(123456789)+节点ID(15)
"action": "getError",
"params": {
"12":50
}
}
]
}
}
# ---
# 上行 /xm/sh/response/mqtt/123456789/1024/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "12345678915",
"action": "getError",
"params": {
"305":[],
"306":[]
},
"serviceid": "10240101"
}
]
}
}</code></pre>
<h3>五、产品类型 1025(异味)</h3>
<table>
<thead>
<tr>
<th>属性</th>
<th>名称</th>
<th>类型</th>
<th>读写</th>
</tr>
</thead>
<tbody>
<tr>
<td>11</td>
<td>PM2.5(ug/m³)</td>
<td>int</td>
<td>只读</td>
</tr>
<tr>
<td>13</td>
<td>湿度(%)</td>
<td>float</td>
<td>只读</td>
</tr>
<tr>
<td>14</td>
<td>温度(℃)</td>
<td>float</td>
<td>只读</td>
</tr>
<tr>
<td>21</td>
<td>硫化氢(ppm)</td>
<td>float</td>
<td>只读</td>
</tr>
<tr>
<td>27</td>
<td>氨气(ppm)</td>
<td>float</td>
<td>只读</td>
</tr>
<tr>
<td>29</td>
<td>异味(ppm)</td>
<td>float</td>
<td>只读</td>
</tr>
</tbody>
</table>
<h4>读取状态</h4>
<pre><code class="language-json">#下行 /xm/sh/request/mqtt/123456789/1025/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "1234567890d", # 网关序列号(123456789)+节点ID(0d)
"action": "getStat",
"params": {
}
}
]
}
}
# ---
# 上行 /xm/sh/response/mqtt/123456789/1025/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "1234567890d",
"action": "getStat",
"params": {
"11": 25,
"12": 25,
"13": 28.3,
"14": 23,
"15": 0,
"16": 0,
"17": 0,
"18": 3.97,
"19": 8.066,
"20": 0,
"21": 0,
"22": 0,
"23": 0,
"24": 0,
"25": 0,
"26": 0,
"27": 0.396,
"28": 0,
"29": 0,
"30": 30
},
"serviceid": "10250101"
}
]
}
}
</code></pre>
<h3>六、产品类型 1026(物位)</h3>
<table>
<thead>
<tr>
<th>属性</th>
<th>名称</th>
<th>类型</th>
<th>读写</th>
</tr>
</thead>
<tbody>
<tr>
<td>11</td>
<td>激光(mm)</td>
<td>int</td>
<td>只读</td>
</tr>
<tr>
<td>12</td>
<td>超声波(mm)</td>
<td>int</td>
<td>只读</td>
</tr>
<tr>
<td>13</td>
<td>限位开关</td>
<td>布尔值</td>
<td>只读</td>
</tr>
</tbody>
</table>
<h4>读取状态</h4>
<pre><code class="language-json">#下行 /xm/sh/request/mqtt/123456789/1026/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "1234567890e", # 网关序列号(123456789)+节点ID(0e)
"action": "getStat",
"params": {
}
}
]
}
}
# ---
# 上行 /xm/sh/response/mqtt/123456789/1026/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "1234567890e",
"action": "getStat",
"params": {
"11": 750,
"12": 710,
"13": false
},
"serviceid": "10260101"
}
]
}
}
</code></pre>
<h3>七、产品类型:1027 (压力Kap)</h3>
<table>
<thead>
<tr>
<th>属性</th>
<th>名称</th>
<th>类型</th>
<th>读写</th>
</tr>
</thead>
<tbody>
<tr>
<td>11</td>
<td>压力</td>
<td>int</td>
<td>只读</td>
</tr>
</tbody>
</table>
<h4>读取压力</h4>
<pre><code class="language-json">#下行 /xm/sh/request/mqtt/123456789/1027/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "12345678914", # 网关序列号(123456789)+节点ID(14)
"action": "getStat", # getStat 读取压力
"params": {
}
}
]
}
}
# ---
# 上行 /xm/sh/response/mqtt/123456789/1027/节点ID/v2
{
"header": {
"timeStamp": ""
},
"payload": {
"devices": [
{
"devicesn": "12345678914",
"action": "getStat",
"params": {
"11": 99
},
"serviceid": "10270101"
}
]
}
}</code></pre>