You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:15:03