-> Hier kostenlos registrieren
Tach Zusammen,
ich versuche aktuell MQTT Topics mit einer Codesys-Steuerung zu empfangen, komme da aber nicht weiter.
Zur Bibliothek MQTT_Client_SL gibt es ein Beipielprojekt (in FUP) mit dem es soweit funktioniert. Nun soll das ganze aber in ST umgesetzt werden.
Da ich mich mit ST nicht wirkich auskenne, wird der Fehler bestimmt nicht am System oder der Bibliothek liegen, sondern daran wie der Baustein aufzurufen ist.
Das Programm sieht im ersten Schitt so aus:
Case 2 dient aktuell erstmal nur zu Testen.
Nun zum Problem:
Das verbinden mit dem MQTT-Broker funktioniert, also die Variable xConnectedToBroker wird TRUE. Der Subscribe-Baustein tut dann aber nicht was er soll. xBusy wird TRUE und bleibt dort, eMQTTError bleibt bei NO_ERROR und xSubscribeActive bleibt bei FALSE.
Woran kann es nun liegen, dass xSubscribeActive nicht TRUE wird, es gibt ja scheinbar auch keine andere Fehlermeldung?
Gruß
Markus
ich versuche aktuell MQTT Topics mit einer Codesys-Steuerung zu empfangen, komme da aber nicht weiter.
Zur Bibliothek MQTT_Client_SL gibt es ein Beipielprojekt (in FUP) mit dem es soweit funktioniert. Nun soll das ganze aber in ST umgesetzt werden.
Da ich mich mit ST nicht wirkich auskenne, wird der Fehler bestimmt nicht am System oder der Bibliothek liegen, sondern daran wie der Baustein aufzurufen ist.
Das Programm sieht im ersten Schitt so aus:
C-ähnlich:
CASE uiPRG OF
0:
IF mqttClient.xConnectedToBroker = FALSE THEN
mqttClient(sHostname:=sHostname, uiPort:=uiPort, eMQTTVersion:=eMQTTVersion, eCommunicationMode:=eCommunicationMode, sWebSocketUrl:=sHostname);
mqttClient.StartModel(TRUE);
ELSE
uiPRG := uiPRG + 1;
END_IF
1:
IF mqttClient.xConnectedToBroker = TRUE AND mqttSubscriber.xSubscribeActive = FALSE THEN
mqttSubscriber(mqttClient:=mqttClient, wsTopicFilter:=wsSubcribeTopicFilter, udiMaxPayloadSize:=SIZEOF(sSubscribeMessage), pbPayload:=ADR(sSubscribeMessage));
mqttSubscriber.StartModel(TRUE);
ELSE
uiPRG := uiPRG + 1;
END_IF
2:
IF mqttSubscriber.eMQTTError = MQTT.MQTT_ERROR.NO_ERROR AND mqttSubscriber.xSubscribeActive = TRUE AND mqttSubscriber.xError = FALSE AND mqttSubscriber.xBusy = FALSE AND mqttSubscriber.xReceived = TRUE THEN
uiPRG := uiPRG + 1;
END_IF
END_CASE
Case 2 dient aktuell erstmal nur zu Testen.
Nun zum Problem:
Das verbinden mit dem MQTT-Broker funktioniert, also die Variable xConnectedToBroker wird TRUE. Der Subscribe-Baustein tut dann aber nicht was er soll. xBusy wird TRUE und bleibt dort, eMQTTError bleibt bei NO_ERROR und xSubscribeActive bleibt bei FALSE.
Woran kann es nun liegen, dass xSubscribeActive nicht TRUE wird, es gibt ja scheinbar auch keine andere Fehlermeldung?
Gruß
Markus