# 功能介绍

### 功能块FB_IotMqttClient介绍

- 输入参数

参数名称 | 参数类型 | 描述说明
--- | --- | ---
sClientId | String | mqtt的客户端Id,必须是唯一标识，不填有程序自动分配
sHostName | String | mqtt的服务器的IP地址，默认为本机IP
nHostPort | UINT | mqtt服务器的端口，默认为1883
sTopicPrefix | String | 消息通道的前缀,订阅或者发布消息的时候需要添加这个前缀，可不填
nKeepAlive | UINT | 心跳报文发送时间，默认为60秒
sUserName | String | 设置连接mqtt服务器用户名。如果Broker需要提供用户名和密码连接。
sUserPassword | String | 设置连接mqtt服务器密码。如果Broker需要提供用户名和密码连接。
stWill | 结构体ST_IotMqttWill | mqtt遗嘱消息，如果mqtt客户端发生异常断开，服务端会向指定的topic发送消息
stTLS | 结构体ST_IotMqttTls | mqtts 连接的时候，需要设置一些证书和密钥文件的路径，必须保证路径存在
ipMessageQueue | 指针 | 消息队列的指针，订阅消息时需要指向消息队列

- 输出参数

参数名称 | 参数类型 | 描述说明
--- | --- | ---
bError | Bool | 是否报错，True为有错误，False为正常
hrErrorCode | UINT | 错误码
eConnectionState | UINT | mqtt的连接状态，枚举类型
bConnected | Bool | 是否建立连接，True为连接，False为没有连接

方法FB_IotMqttClient.Execute()介绍

Void Execute(BOOL bConnect)；

接口 | 类型 | 说明
--- | --- | ---
bConnect | BOOL | TRUE表示建立连接

方法FB_IotMqttClient.Publish()介绍

Bool Publish(String sTopic，POINTER TO UDINT pPayload,UDINT nPayloadSize,TcIotMqttQos eQoS,Bool bRetain，Bool bQueue)；

接口 | 类型 | 说明
--- | --- | ---
sTopic | String | 发布消息的主题
pPayload | PVOID | 指针指向发布消息内容
nPayloadSize | UDINT | 发布消息内容长度
eQoS | 枚举类型TcIotMqttQos | AtMostOnceDelivery := 0, //最多一次AtLeastOnceDelivery :=1, //至少一次ExactlyOnceDelivery := 2 //确切一次
bRetain | Bool | TRUE表示发布保留消息
bQueue | Bool | 保留勿用
返回值 | Bool | 发送是否成功，TRUE成功，FALSE不成功

方法FB_IotMqttClient.Subscribe()介绍

Bool Subscribe(String sTopic，TcIotMqttQos eQoS)；

接口 | 类型 | 说明
--- | --- | ---
sTopic | String | 订阅消息的主题
eQoS | 枚举类型TcIotMqttQos | AtMostOnceDelivery := 0, //最多一次AtLeastOnceDelivery :=1, //至少一次ExactlyOnceDelivery := 2 //确切一次
返回值 | Bool | 订阅是否成功，TRUE成功，FALSE不成功

方法FB_IotMqttClient.Unsubscribe()介绍

Bool Unsubscribe(String sTopic)；

接口 | 类型 | 说明
--- | --- | ---
sTopic | String | 取消订阅消息的主题
返回值 | Bool | 取消订阅是否成功，TRUE成功，FALSE不成功

方法FB_IotMqttMessageQueue.Dequeue()介绍

Bool Dequeue(POINTER TO FB_IotMqttMessage fbMessage)；

接口 | 类型 | 说明
--- | --- | ---
fbMessage | POINTER TO FB_IotMqttMessage | 指针，指向FB_IotMqttMessage 从当前的消息队列里面获取一条消息，并赋值给FB_IotMQttMessage消息的对象
返回值 | Bool | 获取消息是否成功，TRUE成功，FALSE不成功

方法FB_IotMqttMessageQueue.ResetQueue()介绍

Bool ResetQueue()；

接口 | 类型 | 说明
--- | --- | ---
返回值 | Bool | 清空当前消息队列里面的所有消息，TRUE成功，FALSE不成功

方法FB_IotMqttMessage.CompareTopic()介绍

Bool CompareTopic(String sTopic)；

接口 | 类型 | 说明
--- | --- | ---
sTopic | String | 比较输入的Topic
返回值 | Bool | 比较输入的Topic与当前消息的Topic 是否一致，TRUE为一致，FALSE不一致

方法FB_IotMqttMessage.GetTopic()介绍

Bool GetTopic(POINTER TO STRING pTopic，UINT nTopicSize)；

接口 | 类型 | 说明
--- | --- | ---
pTopic | POINTER TO STRING | 指针指向主题消息内容
nTopicSize | UINT | 主题消息长度
返回值 | Bool | 获取消息的Topic，TRUE获取成功，FALSE获取失败

方法FB_IotMqttMessage.GetPayload()介绍

Bool GetPayload(PVOID pPayload，UDINT nPayloadSize，BOOL bSetNullTermination)；

接口 | 类型 | 说明
--- | --- | ---
pPayload | PVOID | 指针指向负载消息内容
nPayloadSize | UDINT | 负载消息内容长度
bSetNullTermination | Bool | 消息是否以NULL字符结束（即‘\0’），TRUE为是，FALSE为否
返回值 | Bool | 获取消息的负载，也就是订阅收到的消息内容，TRUE获取成功，FALSE获取失败