-> Hier kostenlos registrieren
Hallo Zusammen
Ich habe eine Frage zur Adressvergabe für Kommunikationsvariablen. Ich kommuniziere via Profinet mit einer Siemens und habe dazu je 32 DWORD vergeben welche ich auch so mit der Hardware verlinke:
Diese DWORD werden verschieden verwendet. Teilweise als einzelne Bits, oder aber auch als Zahlenwerte (zb DINT). Um die DWORDs aufzuschlüsseln habe ich eine STRUCT definiert, die dann etwa so aussieht und einfach auf dieselben absoluten Adressen geht:
Verwendet wird das Ganze dann so:
Das funktioniert soweit eigentlich ganz gut. Nur habe ich ein Problem bei vergleichen, auch wenn iWert1 = iWert2 ist, das Resultat ist immer FALSE:

wenn im Bild oben die Variablen test1 und test2 TRUE sind, müsste zwangweise test3 auch TRUE sein, ist es aber nicht. Wenn ich die Werte auf eine andere Variable kopiere, funktioniert der Vergleich dann.
Die Frage ist nun: was ist hier Best Practice? Es sollte ja nichts spezielles sein, dass ich zur Kommunikation Blöcke mit demselben Datentyp verwende (zb DWORDs) und diese dann in einzelne Datentypen aufsplitten muss.
Ich habe eine Frage zur Adressvergabe für Kommunikationsvariablen. Ich kommuniziere via Profinet mit einer Siemens und habe dazu je 32 DWORD vergeben welche ich auch so mit der Hardware verlinke:
Code:
Input AT %IB600: ARRAY[0..31] OF DWORD;
Output AT %QB600: ARRAY[0..31] OF DWORD;
Diese DWORD werden verschieden verwendet. Teilweise als einzelne Bits, oder aber auch als Zahlenwerte (zb DINT). Um die DWORDs aufzuschlüsseln habe ich eine STRUCT definiert, die dann etwa so aussieht und einfach auf dieselben absoluten Adressen geht:
Code:
TYPE strInput :
STRUCT
iLifeBit AT %IX600.0 : BOOL;
iLaeuft AT %IX600.1 : BOOL;
iBetriebsbereit AT %IX600.2 : BOOL;
.....
iWert1 AT %IB616 : DINT;
iWert2 AT %IB620 : DINT;
END_STRUCT
END_TYPE
Verwendet wird das Ganze dann so:
Code:
Input AT %IB600: ARRAY[0..31] OF DWORD;
Output AT %QB600: ARRAY[0..31] OF DWORD;
VonGeraet : strInput;
AnGeraet : strOutput;
Das funktioniert soweit eigentlich ganz gut. Nur habe ich ein Problem bei vergleichen, auch wenn iWert1 = iWert2 ist, das Resultat ist immer FALSE:

wenn im Bild oben die Variablen test1 und test2 TRUE sind, müsste zwangweise test3 auch TRUE sein, ist es aber nicht. Wenn ich die Werte auf eine andere Variable kopiere, funktioniert der Vergleich dann.
Die Frage ist nun: was ist hier Best Practice? Es sollte ja nichts spezielles sein, dass ich zur Kommunikation Blöcke mit demselben Datentyp verwende (zb DWORDs) und diese dann in einzelne Datentypen aufsplitten muss.