特殊指令:MQTT协议


MQTT协议指令可以用来建立MQTT客户端到MQTT服务器的连接,进行消息的订阅与发布。

Mqtt_Connect:连接到MQTT服务器

连接到MQTT服务器指令建立MQTT客户端到MQTT服务器的连接,并使用用户提供的连接参数登录到MQTT服务器。若开启了MQTT服务的网络连接方式不止一种(例如同时存在有线网络、WIFI网络、4G网络等),指令会依次尝试不同的连接方式,直到建立连接为止。

参数名称数据类型读写方向说明
EN能流输入当EN使能时,尝试建立到MQTT服务器的连接。当EN失能时,断开到MQTT服务器的连接并释放资源。
HostUrlSTRING输入MQTT服务器地址,一般由MQTT服务器供应商提供。
ClientIdSTRING输入客户端ID,一般由MQTT服务器供应商提供。
UserNameSTRING输入设备用户名,一般由MQTT服务器供应商提供。
PasswordSTRING输入设备密码,一般由MQTT服务器供应商提供。
PortUSINT输出目前在第几个TCP/IP网络适配器上尝试连接。
Status USINT 输出 当前的连接状态:
  • 0 : Unint:未初始化。
  • 1 : Unconnected:未连接。
  • 2 : HostLookup:主机域名解析中。
  • 3 : Connecting:连接主机中。
  • 4 : Connected:已经连接到主机并完成登录。
  • 5 : Closing:关闭连接中。
LastErrCode USINT 输出 最后的错误代码:
  • 0 : Accepted:无错误。
  • 1 : RefusedProtocolVersion:协议版本被服务器拒绝。
  • 2 : RefusedIdentifier:客户端ID被服务器拒绝。
  • 3 : RefusedServer:服务器拒绝登录。
  • 4 : RefusedUserNamePass:用户名密码不正确。
  • 5 : RefusedNotAuthorized:此操作未被授权。
  • 6 : Disconnected:到服务器的连接处于关闭中。
  • 7 : Timeout:操作等待超时。
  • 8 : Failed:操作失败。

Mqtt_Subscribe:订阅MQTT主题。

订阅MQTT主题指令向服务器发起消息订阅请求,并接收对应主题的消息数据。可以在程序中同时激活多个订阅主题指令,接收到的消息数据可自动通过主题进行派发。

参数名称数据类型读写方向说明
EN能流输入当EN使能时,向MQTT服务器发送订阅的请求,若订阅成功,将进入数据接收状态。当EN失能时,向MQTT服务器发送取消订阅请求。
TopicSTRING输入订阅的主题,需要在MQTT服务器的设备属性中创建。
PayloadUSINT输入接收数据开始的位置。
BufLengthUINT输入接收数据的最大长度(字节单位)。
Qos USINT 输入 消息传输类型:
  • 0 : QOS0:只发送1次,不需要接收确认。
  • 1 : QOS1:至少发送1次,需要接收确认。
  • 2 : QOS2:刚好1次,需要接收确认,且不会重复接收。
LengthUINT输出订阅成功后,接收到数据的长度。
Status USINT 输出 订阅状态:
  • 0 : Unconnected:未订阅任何主题。
  • 1 : Subscribing:向MQTT服务器发送订阅主题请求中。
  • 2 : Subscribed:订阅主题成功,接收数据中。
  • 3 : Unsubscribing:取消订阅主题中。
DoneBIT输出0:无新的数据;1:有新的数据放入Payload参数指定的接收区。
Error USINT 输出 失败的原因:
  • 0 : None:无错误。
  • 1 : QueueIsFull:队列已满,同时激活的订阅或发布指令过多。
  • 2 : Topic:主题参数错误。
  • 3 : Payload:数据参数错误。
  • 4 : Subscribe:订阅操作失败。
  • 5 : Unsubscribe:取消订阅操作失败。
  • 6 : Publish:发布操作失败。
  • 7 : Timeout:操作超时。
  • 8 : Failed:操作失败。

Mqtt_Publish:发布MQTT主题。

发布MQTT主题指令将数据发送到对应的主题上去,其他订阅此主题的设备,将通过MQTT服务器获得此数据。

参数名称数据类型读写方向说明
EN能流输入当EN使能时,向MQTT服务器发送数据。为了防止数据流量过载,一般不需要保持住EN,用定时器触发一个扫描周期即可。
TopicSTRING输入发布的主题,需要在MQTT服务器的设备属性中创建。
PayloadUSINT输入发送数据开始的位置。
LengthUINT输入发送数据的长度(字节单位)。
Qos USINT 输入 消息传输类型:
  • 0 : QOS0:只发送1次,不需要接收确认。
  • 1 : QOS1:至少发送1次,需要接收确认。
  • 2 : QOS2:刚好1次,需要接收确认,且不会重复接收。
RetainBIT输出0:数据在服务器上不需要保持;1:数据在服务器上需要保持。
DoneBIT输出0:数据发送未完成;1:数据发送完成。
Error USINT 输出 失败的原因:
  • 0 : None:无错误。
  • 1 : QueueIsFull:队列已满,同时激活的订阅或发布指令过多。
  • 2 : Topic:主题参数错误。
  • 3 : Payload:数据参数错误。
  • 4 : Subscribe:订阅操作失败。
  • 5 : Unsubscribe:取消订阅操作失败。
  • 6 : Publish:发布操作失败。
  • 7 : Timeout:操作超时。
  • 8 : Failed:操作失败。