TIA MQTT SUB/PUB TOPIC gleich ?

yourifi

Level-2
Beiträge
26
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Ist es in TIA Portal möglich, unterschiedliche MQTT Subscribe- und Publish-Topics zu verwenden? Wenn ich eine Nachricht auf einem Topic publiziere und danach auf einem anderen Topic subscriben möchte, wird das Subscribe-Topic automatisch mit dem Publish-Topic überschrieben. Gibt es eine Möglichkeit, diese Topics separat zu definieren, sodass sie nicht gleich sein müssen?
 
Ich verwende dazu jeweils für Sub und Pub eigene Case Anweisungen, die Funktionen Sub und Pub geben sich gegenseitig frei und sperren sich auch gegenseitig, so schaue ich abwechselnd immer auf ein Subscribe Topic und ein Publish Topic.

Du kannst für die Topics natürlich globale Variablen anlegen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich verwende dazu jeweils für Sub und Pub eigene Case Anweisungen, die Funktionen Sub und Pub geben sich gegenseitig frei und sperren sich auch gegenseitig, so schaue ich abwechselnd immer auf ein Subscribe Topic und ein Publish Topic.

Du kannst für die Topics natürlich globale Variablen anlegen
Hast du das Ein und Ausschalten von Sub und Pub topics mit einem Clock ?
Es wäre gut, wenn du mal ein Bsp hier schreibst.
Danke im Voraus
 
Bilden Freigabe Signal Publish:
Code:
#tempReady := #constBOOL;
#tempSerialized := #constBOOL;

IF (NOT #ioInterface.Out.Error)
    AND (#ioInterface.Out.Status = "MQTT_STATUS_CONNECTED")
    AND ((#iSubscribeControl.Ready OR #iSubscribeControl.Done))
    AND (NOT #iSubscribeControl.Start)
    AND (NOT #ioInterface.In.Subscribe)
    AND (NOT #ioInterface.In.Unsubscribe) THEN
    #tempReady := 1;
ELSE
    #tempReady := 0;
END_IF;

Beispiel Publish:
Code:
1: // Publish data axis x
        IF #tempDataAxisX <> #statDataAxisXOld THEN
            #ioInterface.InOut.MqttTopic := "MQTT_TOPIC_PUBLISH_AXIS_X";
            IF #ioPublishPrepare.Prepared.AxisX THEN
                #ioPublishControl.StepName := 'Publish message axis x';
                #statJsonSerializer.execute := 1;
                IF #tempSerialized AND #tempReady THEN
                    #ioInterface.In.Publish := 1;
                END_IF;
                
                IF #ioInterface.Out.Done THEN
                    #statDataAxisXOld := #tempDataAxisX;
                    #tempDataAxisX := #ioPublishPrepare.AxisEmpty;
                    #ioInterface.In.Publish := 0;
                    #statJsonSerializer.execute := 0;
                    #ioPublishControl.StepNumber := 2;
                END_IF;
            END_IF;
        ELSE
            #ioPublishControl.StepNumber := 2;
        END_IF;
        //===============================================================================
    2: // Wait for mqtt ready
        #ioPublishControl.StepName := 'Wait for mqtt ready';
        #ioInterface.InOut.MqttTopic := #constWSTRING;
        IF #tempReady AND #statDataCleared THEN
            #ioPublishControl.StepNumber := 3;
        END_IF;
        //===============================================================================
    3: // Publish data axis y
        IF #tempDataAxisY <> #statDataAxisYOld THEN
            #ioInterface.InOut.MqttTopic := "MQTT_TOPIC_PUBLISH_AXIS_Y";
            IF #ioPublishPrepare.Prepared.AxisY THEN
                #ioPublishControl.StepName := 'Publish message axis y';
                #statJsonSerializer.execute := 1;
                IF #tempSerialized AND #tempReady THEN
                    #ioInterface.In.Publish := 1;
                END_IF;
                
                IF #ioInterface.Out.Done THEN
                    #statDataAxisYOld := #tempDataAxisY;
                    #tempDataAxisY := #ioPublishPrepare.AxisEmpty;
                    #ioInterface.In.Publish := 0;
                    #statJsonSerializer.execute := 0;
                    #ioPublishControl.StepNumber := 4;
                END_IF;
            END_IF;
        ELSE
            #ioPublishControl.StepNumber := 4;
        END_IF;

Nach dem gleichen Aufbau funktioniert auch meine Subscribe Funktion.
So können beide Funktionen autark arbeiten, da sie sich gegenseitig blockieren und wieder freigeben. Wie ein Handshake.
 
Zurück
Oben