Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 1 von 1

Thema: Twincat 3: Property gibt nur Einzelschrittbetrieb korrekten wert zurück

  1. #1
    Registriert seit
    29.09.2005
    Beiträge
    128
    Danke
    8
    Erhielt 3 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich frage für eine Kommunikationsanwendung in Twincat 3 eine Property ab.
    Die Property "isLogMsg" eines Pufferobjekts mit x Einträgen sieht wie folgt aus:

    Code:
    VAR
        stWorkingMsg    :  UN_StMsgArrBytes;
        sMessageID        : STRING[4];
        iIndex            : INT;
    END_VAR
    
    stWorkingMsg := GetHead();
    //check the Message ID
    FOR iIndex := 1 TO 4 DO
        sMessageID[iIndex-1] := stWorkingMsg.structure.HeaderData.sDataID[iIndex];
    END_FOR
        IF sMessageID = 'LOGG' THEN    //True
            isLogMsg := TRUE;
        ELSE
            isLogMsg := FALSE;
        END_IF
    "getHead()" ist eine Methode des FB und gibt die Nachricht aus dem ersten Pufferplatz zurück.

    Wenn ich nun irgendwo

    Code:
    IF BufferFB.isLogMessage THEN
                  doStuff();
    END_IF
    mache, einen Breakpoint in die Zeile "doStuff()" setze, wird die Ausführung gestoppt, sobald die If-Abfrage zum ersten Mal durchgeführt wird. Das heist, es muss ein FALSE zurückgekommen sein.
    Schaue ich mir nun online den String im Speicher an, den die Property prüfen soll, so steht dort 'LOGG' drin, wie es sein soll.

    Wenn ich den Breakpoint vor die Abfrage selber setze und die Property durchtippe, bekomme ich wie erwartet ein TRUE zurück.

    Kann sich das jemand erklären?

    Vielen Dank im Voraus

    Gruß

    Jochen

    EDIT:

    Ich habe gerade etwas herumgespielt und mal spaßeshalber die lokalen Variablen der Property im FB-Kopf angelegt. Und siehe da, damit arbeitet die Property auch im zyklischen Betrieb so wie sie soll.
    Allein das Warum erschließt sich mir nicht. Diese Variablen werden doch nur lokal gebraucht und sollten dann doch dort funktionieren.... Wird ja nichts über mehrere Zyklen mitgeschleift.....

    EDIT2: Ich konnte das Problem auf den Stringvergleich einschränken. Wenn ich eine Stringvariable "sBuf: STRING(255)" im FB-Kopf anlege und dann meine Property umschreibe:

    Code:
    VAR
        stWorkingMsg    :  UN_StMsgArrBytes;
        sMessageID        : STRING[4];
        iIndex            : INT;
    END_VAR
    
    stWorkingMsg := GetHead();
    //check the Message ID
    FOR iIndex := 1 TO 4 DO
        sMessageID[iIndex-1] := stWorkingMsg.structure.HeaderData.sDataID[iIndex];
    END_FOR
    sBuf := sMessageID;
        IF sBuf = 'LOGG' THEN    //True
            isLogMsg := TRUE;
        ELSE
            isLogMsg := FALSE;
        END_IF
    sBuf:='';
    Dann funktioniert es.
    Interessant dabei ist, dass die Zuweisung an sich ja funktioniert, also muss in sMessageID ja definitiv das Richtige drin stehen....
    Geändert von Jochen (23.10.2015 um 11:02 Uhr)
    Zitieren Zitieren Twincat 3: Property gibt nur Einzelschrittbetrieb korrekten wert zurück  

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 25.08.2015, 15:18
  2. Step 7 Taktgeber, der aber nur Impulse gibt
    Von Freakowski im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 17.06.2014, 22:19
  3. FB58 gibt kein wert herraus
    Von hugo300785 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 08.03.2013, 07:39
  4. SPS gibt immer ERROR zurück
    Von RoadRunner0 im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 04.03.2005, 18:25
  5. BOOL Ausgang am FC gibt falschen Wert aus..
    Von Jochen Kühner im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 23.12.2004, 12:26

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •