1) Was genau willst du steuern? Einen Ausgang in einer Analogausgangskarte, ein Byte oder Word in einem Profibus-Gerät oder in einem Frequenzumrichter? Was bedeutet dieses Byte oder Word? Wie ist die Ausgangsadresse PQB/PQW... in HW Konfig projektiert?
Meist ist es nicht egal, ob man auf ein Peripherie-Ausgangsbyte oder -word ausgibt. Da schreibt das Gerät oder Modul vor, ob das ein Byte- oder Wordzugriff sein muss. Rumprobieren ist eher kein gezieltes Programmieren.
2) In Peripherie-Ausgangs-Bytes/Words kann man nicht einzelne Bits manipulieren. Man muss das Bitmuster in einer Byte/Word-Variablen (Merker, DB, TEMP, STAT) zusammenbasteln und dann gesamt als Byte oder Word an das Peripherie-Ausgangs-Byte/Word ausgeben (z.B. MOVE).
3) Du schreibst, wenn I0.0 = TRUE ist, dann soll ein bestimmtes Bit gesetzt weden. Dieses Bit soll dann für alle Ewigkeit gesetzt bleiben? Oder wann soll es rückgesetzt werden?
4) Gundwissen Programmieren: Was in jeder Programmiersprache und auch in jeder SPS geht:
- Bits in Variablen setzen kann man durch OR-Verknüpfung mit einer Bitmaske
- Bits in Variablen rücksetzen kann man durch AND-Verknüpfung mit einer Bitmaske
- Bits in Variablen invertieren kann man durch XOR-Verknüpfung mit einer Bitmaske
- den Zustand von Bits in Variablen lesen kann man durch AND-Verknüpfung mit einer Bitmaske
Die Bitmaske darf ein oder mehrere Bits = 1 haben, je nachdem, ob man nur ein einzelnes Bit oder gleich mehrere Bits bearbeiten will. Die 1-Bits in der Bitmaske bestimmen, welche Bits in der Variable bearbeitet werden - die Bitmaske "maskiert" die Ziel-Bits.
Code:
#wBitMask := 1; //Bitmaske für Bit 0 (%X0)
#wMyVar := #wMyVar OR #wBitMask; //setzt Bit 0
#wMyVar := #wMyVar AND NOT (#wBitMask); //rücksetzt Bit 0
#wMyVar := #wMyVar XOR #wBitMask; //invertiert Bit 0
#xMyBool := (#wMyVar AND #wBitMask) <> 0; //Bit 0 lesen/kopieren