Var_in_out

RobiHerb

Level-2
Beiträge
679
Reaktionspunkte
113
Zuviel Werbung?
-> Hier kostenlos registrieren
Frage zu CoDeSys 2.3:

Kann es sein, dass CoDeSys Probleme hat, wenn bei Aufruf einer Function eine oder mehrere BOOL Variablen als VAR_IN_OUT deklariert werden?

Ist es möglich, sowohl VAR_IN_OUT als auch VAR_INPUT gleichzeitig zu verwenden?
 
Was für ein Problem zeigt sich denn bei Deiner Anwendung?

Ich kann mich (dunkeö) daran erinnern das ich mal ein Problem hatte das sich in Verbindung mit Bool-Variablen ergeben hatte. Aber mit "Projekt alles bereinigen" war die Welt wieder in Ordnung.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hatte etwa folgenden Aufbau:

VAR_IN_OUT
theData: DataStruct; (* eine komplexe Struct einer StateEngine *)
bFlag0: BOOL;
bFlag1: BOOL;
END_VAR

Im Prinzip werden die IN_OUT ja als Zeiger / Referenzen übergeben, das ist anscheinend in meiner Implementation mit der Ausrichtung auf Bits nicht
möglich.

Im Debugger im Single Step waren die bFlag0 und bFlag1 nicht initialisiert bei Eintritt in die Funktion. bFlag0 := ???, bFlag1 := ??? wurde angezeigt, beim nächsten Step dann Feierabend.

Mein Workaround:
VAR_IN_OUT
theData: DataStruct; (* eine komplexe Struct einer StateEngine *)
wFlags: WORD; (* Bit0 entspricht bFlag0; Bit1 bFlag1 *)
END_VAR
 
Wenn du an einen VAR_IN_OUT vom Typ Bool ein Bit übergibst, dann sollte eine Fehlermeldung kommen. Denn es geht tatsächlich nicht.
BIT's belegen ein Bit,
BOOL jedoch ein Byte im Speicher (das ist wesentlich schneller auf einem normalen Prozessor). Normalerweise kann man beide gleichwertig verwenden, weil CoDeSys den einen Typ implizit in den anderen umwandelt. Bei VAR_IN_OUT funktioniert das jedoch nicht.
 
Zurück
Oben