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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 19

Thema: Per SCL ein Bit in einen DBD schreiben

  1. #1
    Registriert seit
    05.09.2008
    Ort
    Bern
    Beiträge
    80
    Danke
    13
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    Ich möchte per SCL eine 0 oder 1 in ein DBD schreiben. am eingang gebe ich vor in Welches Bit geschrieben werden soll auch möchte ich vorgeben ob eine 1 oder 0 in den DB geschrieben werden soll.
    Mein Bisheriger Versuch sieht so aus, aber irgendwie will das nicht funktionieren.
    FUNCTION FC58 : VOID


    // Bausteinparameter
    VAR_INPUT
    // Eingangsparameter
    Punkt : INT;
    FreiBelegt :int;
    END_VAR

    VAR_IN_OUT
    // Durchgangsparameter
    END_VAR

    VAR_OUTPUT
    // Ausgangsparameter

    END_VAR

    VAR_TEMP
    // temporäre Variablen

    END_VAR

    // Anweisungsteil
    FreiBelegt:=DB200.DBX146.[Punkt];
    END_FUNCTION
    Zitieren Zitieren Per SCL ein Bit in einen DBD schreiben  

  2. #2
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    maskieren...
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  3. #3
    SEAL ist offline Benutzer
    Themenstarter
    Registriert seit
    05.09.2008
    Ort
    Bern
    Beiträge
    80
    Danke
    13
    Erhielt 0 Danke für 0 Beiträge

    Standard

    OK bin ziemlich neu was scl betrifft, wie meinst du das mit dem Maskieren? Meinst du evtl. das ich alles auschreibe "DBName.gliederung1.Gliederung1.Name"?

  4. #4
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Hallo SEAL,

    die Variable "Punkt" ist doch eine INT Variable.
    Somit würdest du ja auf die Bitadresse (DBX146.x) einen 16 Bit "Zeiger" laden.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  5. #5
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von Paule Beitrag anzeigen
    Hallo SEAL,

    die Variable "Punkt" ist doch eine INT Variable.
    Somit würdest du ja auf die Bitadresse (DBX146.x) einen 16 Bit "Zeiger" laden.
    wtf?

    anyway ... mit maskieren meint er: mit (doppel)-wordverknüpfungen (und, oder) das bit beeinflußen ... das hat wenig mit SCL zu tun, das ist digitaltechnik in seiner urerscheinung
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  6. #6
    SEAL ist offline Benutzer
    Themenstarter
    Registriert seit
    05.09.2008
    Ort
    Bern
    Beiträge
    80
    Danke
    13
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Der "Punkt:Integer" soll ja nur sagen auf welches bit vom dbw er zugreifen soll und der wird nicht höher als 15 ausfallen. Habe aus de r Variable "FreiBelegt :int" ein "FreiBelegt :dword" zu machen, da dies letztendlich ja der wert ist der in den datenbaustein geschrieben werdn soll.
    Hat aber auch nix gebracht.

  7. #7
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von vierlagig Beitrag anzeigen
    wtf?

    anyway ... mit maskieren meint er: mit (doppel)-wordverknüpfungen (und, oder) das bit beeinflußen ... das hat wenig mit SCL zu tun, das ist digitaltechnik in seiner urerscheinung
    Lass doch einfach das doofe Rumsülzen und schreib einfach wie es geht wenn schon alles besser weißt.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  8. #8
    Registriert seit
    19.03.2009
    Ort
    Stuttgart
    Beiträge
    37
    Danke
    7
    Erhielt 0 Danke für 0 Beiträge

    Standard

    // Bausteinparameter
    VAR_INPUT
    // Eingangsparameter
    Punkt: INT; // 16 Bit´s
    FreiBelegt :int; // 16 Bit´s
    END_VAR


    // Anweisungsteil
    FreiBelegt:=DB200.DBX146.[Punkt];
    END_FUNCTION

    Ich habe mit SCL noch nie etwas gemacht, aber du versuchst einen Integer Wert (16Bit) in einen Bit (DBX) zu schreiben!
    Du musst FreiBelegt als Bool deklarieren, oder eben so maskieren das du nur das erste Bit hast mit der Wertigkeit 1!

    In AWL
    L FreiBelegt
    L 16#1 oder 2#0000000000000001
    UW
    T FreiBelegt

    Und deine Variable Punkt müsstest du auf maximal 7 begrenzen das höchste Bit im DB wäre DBX146.7 denn DBX146.8 oder höher gibt es nicht!
    Das kannst du indem du bis auf die ersten drei Bits alle anderen ausmakierst

    L Punkt
    L 16#7 oder 2#0000000000000111
    UW
    T Punkt
    Geändert von schneemann86 (10.01.2012 um 20:53 Uhr)

  9. #9
    SEAL ist offline Benutzer
    Themenstarter
    Registriert seit
    05.09.2008
    Ort
    Bern
    Beiträge
    80
    Danke
    13
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke erst mal für die Antworten.
    Ich würde lieber die scl Variante bevorzugen da ich diese funktion öfters einsetzten muss.
    Ich habe in einem DB eine Variable vom typ word angelegt DB200.DB146 in dieser möchte ich nun die einzelnen Bits schreiben und mittels scl Baustein will ich das Bit anwählen können das in dem Word gesetzt werden soll.

  10. #10
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von SEAL Beitrag anzeigen
    Ich würde lieber die scl Variante bevorzugen da ich diese funktion öfters einsetzten muss.
    Ich habe in einem DB eine Variable vom typ word angelegt DB200.DB146 in dieser möchte ich nun die einzelnen Bits schreiben und mittels scl Baustein will ich das Bit anwählen können das in dem Word gesetzt werden soll.
    Probiere mal das Byte und das Bit zu übergeben:

    Code:
    VAR_INPUT
       i_Byte : INT;
       i_Bit  : INT;
    END_VAR
    
    VAR_TEMP
       FreiBelegt : BOOL;
    END_VAR
    
    FreiBelegt := DB200.DX[i_Byte, i_Bit];
    // i_Byte := 146
    // i_Bit := 0-7
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 15.07.2008, 16:38
  2. Werte in DBD schreiben
    Von nuss im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 19.09.2007, 16:01
  3. Antworten: 3
    Letzter Beitrag: 11.07.2007, 22:52
  4. Ein Bit im Doppelwort ändern (SCL)
    Von M-Arens im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 14.03.2007, 15:29
  5. Antworten: 10
    Letzter Beitrag: 04.08.2006, 19:28

Lesezeichen

Berechtigungen

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