TwinCAT与Mosquitto MQTT无法连接问题求助
TwinCAT FB_IotMqttClient 无法连接 Mosquitto 2.0.18 Broker 排查方案
问题背景
已部署 Mosquitto 2.0.18 broker,配置了listener 1883和allow_anonymous true;此前通过WS协议跨PC实现TwinCAT与broker的消息收发正常,但使用FB_IotMqttClient功能块无法建立连接,且无报错提示,操作已参照Beckhoff官方教程第13-15页执行。
基础配置校验
确认Mosquitto配置生效:
- 重启Mosquitto服务后,执行
mosquitto_sub -h <BrokerIP> -p 1883 -t "#"订阅所有主题,同时用mosquitto_pub -h <BrokerIP> -p 1883 -t "test" -m "hello"发送测试消息,验证broker的1883端口是否正常收发。若此步骤失效,优先排查防火墙拦截、端口占用问题。 - 查看Mosquitto日志(Windows默认路径:
C:\Program Files\Mosquitto\logs\mosquitto.log),搜索New connection条目,确认TwinCAT端IP是否发起过连接请求——若无相关记录,说明TwinCAT的连接请求未到达broker。
- 重启Mosquitto服务后,执行
TwinCAT侧网络与参数校验:
- 验证TwinCAT运行PC与broker的网络连通性:执行
ping <BrokerIP>,再用telnet <BrokerIP> 1883测试端口是否可达。 - 检查FB_IotMqttClient核心参数:
sBrokerAddress:格式需为tcp://<BrokerIP>:1883(使用TCP协议,而非WS),同一PC部署broker可填tcp://localhost:1883sClientId:需保证唯一,避免与其他MQTT客户端重复bConnect:需持续置为TRUE,功能块依赖此信号触发连接udiKeepAliveInterval:建议设为60秒,不要设为0
- 验证TwinCAT运行PC与broker的网络连通性:执行
功能块状态与日志排查
- 查看FB_IotMqttClient的
eState状态码:对照Beckhoff文档确认当前状态,若始终停留在CONNECTING,可能是协议版本不兼容。 - 启用TwinCAT IoT日志:在工程中依次打开
PLC->Properties->IoT->Logging,开启Debug级别日志,运行程序后查看日志文件,搜索MQTT连接相关细节,可能找到隐藏错误信息。
权限与兼容性检查
- Mosquitto 2.x权限补充配置:
Mosquitto 2.0+默认访问控制严格,即使开启allow_anonymous true,也需确保listener配置无IP限制。修改配置文件:
保存后重启Mosquitto服务。listener 1883 0.0.0.0 allow_anonymous true - MQTT协议版本匹配:检查FB_IotMqttClient的
eMqttVersion参数,设为MQTT_V3_1_1(Mosquitto 2.x默认支持),除非明确配置broker支持MQTTv5。
程序逻辑检查
- 确认FB_IotMqttClient的调用周期:需放在循环OB(如OB1)中每个周期调用,不能仅单次触发。
- 查看变量表细节:检查
bConnected、eError、sErrorInfo的实时值,sErrorInfo可能包含功能块未显性抛出的错误描述。
内容的提问来源于stack exchange,提问作者UpSiLoN Dog
相关产品推荐
相关产品推荐

