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

Ergebnis 1 bis 8 von 8

Thema: Bool Schleife in DB schreiben SCL

  1. #1
    Registriert seit
    25.10.2010
    Beiträge
    239
    Danke
    107
    Erhielt 2 Danke für 2 Beiträge

    Standard


    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
    Zitieren Zitieren Bool Schleife in DB schreiben SCL  

  2. #2
    Registriert seit
    17.05.2010
    Ort
    Paderborn
    Beiträge
    824
    Danke
    84
    Erhielt 125 Danke für 94 Beiträge

    Standard

    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
    Grüße
    Michael

    1001101110110100... Das ist meine Welt

  3. #3
    Limette ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.10.2010
    Beiträge
    239
    Danke
    107
    Erhielt 2 Danke für 2 Beiträge

    Standard

    @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.

  4. #4
    Registriert seit
    02.02.2012
    Ort
    Main Spessart
    Beiträge
    45
    Danke
    1
    Erhielt 11 Danke für 11 Beiträge

    Standard

    Hallo Limette,
    um in SCL Bitweise zu Adressieren musst du ein Komma hinter deine Byteadresse setzen:

    Code:
    FOR I := 0 TO 10 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
    Geändert von truga (02.02.2012 um 16:47 Uhr)

  5. Folgender Benutzer sagt Danke zu truga für den nützlichen Beitrag:

    Limette (02.02.2012)

  6. #5
    Limette ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.10.2010
    Beiträge
    239
    Danke
    107
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Zitat Zitat von truga Beitrag anzeigen
    Hallo Limette,
    um in SCL Bitweise zu Adressieren musst du ein Komma hinter deine Byteadresse setzen:

    Code:
    FOR I := 0 TO 10 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.

  7. #6
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Zitat Zitat von Limette Beitrag anzeigen
    Danke, so gibts keine übersetzungsfehler mehr. Denn rest werde ich wohl hinbekommen.
    Nachteil des Codes von truga, du kannst keine DB-Nummer als Int übergeben, hast den Db somit fest symbolisch adressiert!
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  8. #7
    Limette ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.10.2010
    Beiträge
    239
    Danke
    107
    Erhielt 2 Danke für 2 Beiträge

    Standard

    ...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.

  9. #8
    Registriert seit
    02.02.2012
    Ort
    Main Spessart
    Beiträge
    45
    Danke
    1
    Erhielt 11 Danke für 11 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    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

Ähnliche Themen

  1. Byte to Bool in SCL
    Von paula23 im Forum Simatic
    Antworten: 22
    Letzter Beitrag: 04.05.2017, 11:46
  2. SCL - INT in DB schreiben
    Von hulla66 im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 04.12.2008, 21:16
  3. Antworten: 4
    Letzter Beitrag: 19.11.2008, 13:39
  4. SCL: OR in IF-Anweisung kürzer schreiben?
    Von Snape im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 21.10.2008, 12:17
  5. Schreiben in DB in SCL
    Von broesel im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 11.06.2007, 15:48

Lesezeichen

Berechtigungen

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