我编写了一段代码来设置 MQTT 通信,非常类似于https://infosys.beckhoff.com/english.php?content=../content/1033/tf6701_tc3_iot_communication_mqtt/54043198920281355.html&id=并使用虚拟可编程逻辑控制器。它完美地工作。现在我试图在 Beckhoff PLC(CX5010)上运行相同的代码。在这个 PLC 上运行 windows 嵌入式 CE 6.0。
我遇到的第一个问题是,当我激活配置并在运行模式下重新启动 TwinCAT 时,它仍然处于配置模式。我在我的主程序中取消了我的 MQTT 程序的注释,然后它在激活配置后确实以运行模式启动。当评论 MQTT 程序时,我在主程序中只有一个计数器(用于测试 PLC 是否正在运行)。
因此,我尝试的下一件事是在运行模式下重新启动 PLC,同时注释 MQTT 程序。当 PLC 在运行模式下重新启动时,我在 main 中取消注释 MQTT 程序并通过下载登录我收到错误“'TcSysSrv' (10000): Error started 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);
最奇怪的是,代码在登录后实际上运行(它没有连接到 MQTT 代理,但它仍然运行)。我现在很困惑。如何更新 IoT 驱动程序?