如何解决 PLC 上缺少物联网驱动程序的问题

How to solve problems with missing IoT drivers on PLC

我编写了一段代码来设置与 https://infosys.beckhoff.com/english.php?content=../content/1033/tf6701_tc3_iot_communication_mqtt/54043198920281355.html&id= 非常相似的 MQTT 通信,并使用虚拟 PLC 对其进行了测试。它工作得很好。现在我正在尝试 运行 Beckhoff PLC(CX5010)上的相同代码。在此 PLC 运行s windows 上嵌入了 CE 6.0。

我遇到的第一个问题是,当我激活配置并在 运行 模式下重新启动 TwinCAT 时,它仍然处于配置模式。我在我的主程序中取消注释我的 MQTT 程序,然后它在激活配置后以 运行 模式启动。当 MQTT 程序被注释时,我在主程序中只有一个计数器(测试 PLC 是否 运行ning)。

所以我接下来尝试的是在 运行 模式下重新启动 PLC,同时对 MQTT 程序进行注释。当 PLC 在 运行 模式下重新启动时,我在 main 中取消注释 MQTT 程序并通过下载登录我收到错误“'TcSysSrv' (10000): Error starting TCIOTDRIVERSW32.dll server.Win32 Error (0x0000007e)。”。我的MQTT程序代码如下所示。

PROGRAM PrgMqtt
VAR
    fbMqttClient    : FB_IotMqttClient; // MQTT client
    bSetParameter   : BOOL := TRUE; // set parameters once at start up
    bConnect        : BOOL := TRUE; // if TRUE it will trigger MQTT client cyclically
END_VAR

// set parameters once when connecting to the mqtt broker
IF bSetParameter THEN
    bSetParameter               := FALSE;
    fbMqttClient.sHostName      := '172.16.1.51';
    fbMqttClient.nHostPort      := 1883;
    fbMqttClient.sTopicPrefix   := ''; 
    fbMqttClient.ipMessageQueue := fbMessageQueue;
END_IF

// MQTT client must be triggered cyclically
fbMqttClient.Execute(bConnect);

最奇怪的是代码居然在登录后运行s(没有连接到MQTT broker,但还是运行s)。我现在很困惑。如何更新 IoT 驱动程序?

我通过更新 Windows embedded 和 TwinCAT 3 解决了这个问题。