【发布时间】:2019-06-04 09:19:26
【问题描述】:
我编写了一段代码来设置与https://infosys.beckhoff.com/english.php?content=../content/1033/tf6701_tc3_iot_communication_mqtt/54043198920281355.html&id= 非常相似的 MQTT 通信,并使用虚拟 PLC 对其进行了测试。它完美地工作。现在我尝试在 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 驱动程序?
【问题讨论】: