Bool Schleife in DB schreiben SCL

Limette

Level-2
Beiträge
282
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,


Ich würde gerne 10 Bool in einem DB auf "True" setzen. Also Byte 100.0 bis 101.2.
Die SCL Semantik macht mir arg zu schaffen.

Mein Ansatz^^:


Code:
FOR I := 0 TO 10 DO 
WORD_TO_BLOCK_DB(INT_TO_WORD(DB_Nummer)).DB[100 + I]  := TRUE;  
END_FOR
 
Hi,

das passt leider hinten und vorne nicht!

z.B. DB10.DBX100.0
Du machst aber vorne ? und nach dem "." DB[100+I] ? Das passt nicht zu der Adressierung!

Problem: Siemens addressiert byteweise, sprich Bit 0-7 und dann wieder beginnend mit 0
Du musst also bei erreichen von Bit 7 anschließen bei 0 wieder starten (quasi Deinen Zähler umrechen!)

Wie wäre es mit nem Schiebebefehl? Nimm ein Wort / Doppelwort
1. setzt Bit 0 auf True,
2. schiebe Dein Wort um eine Stelle,
3. wiederhole die Schleife bis 10

oder

falls das Wort bereit auf den letzten Bit's belegt ist, nutze einfach die "ODERWORT"-Verknüpfung
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@MCerv
ne, mich würde es schon interessieren wie es bitweise geht, einfach so ein "genulltes" Word drüberbügeln, würde mich jetzt nicht so glücklich machen..irgendwie muss es ja gehen. ich kanns nur nicht. :D
 
Hallo Limette,
um in SCL Bitweise zu Adressieren musst du ein Komma hinter deine Byteadresse setzen:

Code:
FOR I := 0 TO [COLOR=#ff0000]10[/COLOR] DO 
DB_NR.DX[I_WX_Adresse,I_X_Adresse]  := TRUE;
END_FOR
Wobei du dann das Byte auch mit hochzählen musst wenn dein Bit auf 7 ist.
Der DB wurde als Block_DB angegeben, danach DX für Bitweise adressierung, in die eckige Klammer die Byte und die Bitadresse durch komma getrennt.

Gruß, truga
 
Zuletzt bearbeitet:
Hallo Limette,
um in SCL Bitweise zu Adressieren musst du ein Komma hinter deine Byteadresse setzen:

Code:
FOR I := 0 TO [COLOR=#ff0000]10[/COLOR] DO 
DB_NR.DX[I_WX_Adresse,I_X_Adresse]  := TRUE;
END_FOR
Wobei du dann das Byte auch mit hochzählen musst wenn dein Bit auf 7 ist.
Der DB wurde als Block_DB angegeben, danach DX für Bitweise adressierung, in die eckige Klammer die Byte und die Bitadresse durch komma getrennt.

Gruß, truga

Danke, so gibts keine übersetzungsfehler mehr. Denn rest werde ich wohl hinbekommen.
 
...weiß es nimmer genau. aber so gings glaub bei mir flexibel :

Code:
WORD_TO_BLOCK_DB(INT_TO_WORD(DB_Nummer)).DX[100 + I, 0 + K]  := TRUE;

und zwei schleifen drumrum.
 
Beide haben recht.
Allerdings kann man die DB Nummer als Integer Wert übergeben und dann intern als Block_DB weiter verwenden.
Ist geschmacksache, mir persönlich gefällt es besser ohne ständige umwandlung ala word_to_block_db.

Gruß, truga
 
Zurück
Oben