如何在TwinCAT 3的同一个项目中创建两个分别收发MQTT的PLC项目
TwinCAT 3 单项目下创建双独立PLC实现MQTT收发操作步骤
- 打开TwinCAT 3 XAE开发环境,创建新的TwinCAT项目或打开目标现有项目。
- 右键解决方案资源管理器中的
PLC节点,选择「Add New Item」,在弹出窗口中选择Standard PLC Project,第一个PLC命名为MQTT_Publisher(发送端),确认添加。 - 重复上一步操作,再添加第二个独立PLC项目,命名为MQTT_Subscriber(接收端),完成后项目结构如下:

发送端PLC(MQTT_Publisher)配置
- 右键该PLC项目的
References节点,添加TwinCAT官方MQTT库Tc3_MQTT,若库未安装可先从Beckhoff官方库商店下载安装后再导入。 - 在PLC的程序组织单元(POU)中编写发送逻辑,核心代码参考:
// 定义变量 fbMqttClient : FB_TcMqttClient; sBrokerIp : STRING := '127.0.0.1'; // MQTT broker地址 nPort : INT := 1883; sTopic : STRING := 'tc3/test/pub'; sPayload : STRING := 'Hello from TwinCAT Publisher'; bSendTrigger : BOOL; // 业务逻辑 fbMqttClient.Connect(sServer := sBrokerIp, nPort := nPort); IF bSendTrigger AND fbMqttClient.IsConnected() THEN fbMqttClient.Publish(sTopic := sTopic, sPayload := sPayload); bSendTrigger := FALSE; END_IF
- 该PLC默认运行时端口为851,保持默认即可,无需修改。
接收端PLC(MQTT_Subscriber)配置
- 同样在该项目的
References中添加Tc3_MQTT库依赖。 - 编写订阅接收逻辑,核心代码参考:
// 定义变量 fbMqttClient : FB_TcMqttClient; sBrokerIp : STRING := '127.0.0.1'; nPort : INT := 1883; sSubscribeTopic : STRING := 'tc3/test/pub'; sReceivedPayload : STRING; fbMqttPublishMessage : FB_TcMqttPublishMessage; // 业务逻辑 fbMqttClient.Connect(sServer := sBrokerIp, nPort := nPort); IF fbMqttClient.IsConnected() THEN fbMqttClient.Subscribe(sTopic := sSubscribeTopic); // 读取接收消息 IF fbMqttClient.GetNextPublishMessage(fbMqttPublishMessage) THEN sReceivedPayload := fbMqttPublishMessage.GetPayload(); END_IF END_IF
- 将该PLC的运行时端口设置为852,避免与第一个PLC的端口冲突。
编译运行测试
- 分别右键两个PLC项目,点击
Activate Configuration,依次激活两个PLC的配置,激活时允许TwinCAT切换到运行模式。 - 提前启动MQTT broker服务(可使用本地Mosquitto服务,也可使用公共测试broker)。
- 分别登录两个PLC,触发发送端的
bSendTrigger变量,查看接收端的sReceivedPayload变量是否成功收到对应消息即可。
内容的提问来源于stack exchange,提问作者james_66
相关产品推荐
相关产品推荐

