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

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

Thema: byte/word zu bool konvertieren ?

  1. #1
    Registriert seit
    08.04.2016
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Servus zusammen,

    ich komme von der Mikrocontrollerprogrammierung (Assembler + C). Habe angefangen mit einer Wago 750-880 erste Schritte zu üben. ST kommt mir dabei am ehesten bekannt vor. Dazu folgende Frage:
    Ich möchte in einem 8 fach DO-Ausgangsmodul die einzelnen Bits (z.B. als xO02..xO09 deklariert) als byte ansprechen, um z.B. einen Zählerwert dort auszugeben. Ich mach das im Moment so:

    Deklaration
    cnt : CTUD;

    PLC_PRG
    xO02 := cnt.CV.0;
    xO03 := cnt.CV.1;
    xO04 := cnt.CV.2;
    ...
    xO09 := cnt.CV.7;

    Gibt es da eine elegantere Möglichkeit ?

    Besten Dank.
    Thomas
    Zitieren Zitieren byte/word zu bool konvertieren ?  

  2. #2
    Registriert seit
    16.03.2014
    Beiträge
    359
    Danke
    74
    Erhielt 45 Danke für 38 Beiträge

    Standard

    Hi
    Einfach den Ausgang als Byte definieren ...
    Dann kannst du deinen Wunsch umsetzen.
    BAusgang1-8 at QBadresse: Byte
    Nun geht's :
    Bausgang1-8 := dezimalwert;
    Viel Erfolg
    Shrimps

  3. #3
    Registriert seit
    06.04.2016
    Ort
    Schweiz
    Beiträge
    69
    Danke
    12
    Erhielt 13 Danke für 9 Beiträge

    Standard

    Persönlich kenne ich die WAGO SPS nicht, falls diese aber eine MEMCPY Funktion oder ähnlich in der Library hat, kannst du dein Byte einfach auf den Ausgang kopieren (siehe Array berreiche kopieren )

  4. #4
    Registriert seit
    22.12.2007
    Beiträge
    17
    Danke
    1
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Memcopy und Pointer auf Ein/Ausgänge können ziemlich seltsames verahalten der Ein/Ausgänge verursachen. Ein und Ausgänge müssen immer per direkter Zuweisung angesprochen werden. Dabei ist es Egal ob die irgendwo mit AT %xx deklariert oder innerhalb der Konfiguration angelegt werden. Nur so kann der Compiler die Eingänge und Ausgänge synchron zur Task aktualisieren

  5. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.169
    Danke
    922
    Erhielt 3.287 Danke für 2.656 Beiträge

    Standard

    Außerdem kommt da auch noch das Problem, wie 8 aufeinanderfolgende Ausgangsadressen intern adressiert werden. Es ist nicht gesagt, daß die wirklich zusammen in einem Byte liegen und ob MEMCPY dieses Byte "trifft".

    Zitat Zitat von thomas59 Beitrag anzeigen
    xO02 := cnt.CV.0;
    xO03 := cnt.CV.1;
    xO04 := cnt.CV.2;
    ...
    xO09 := cnt.CV.7;

    Gibt es da eine elegantere Möglichkeit ?
    Das ist bereits die elegante und saubere Lösung. (meine Meinung)

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #6
    thomas59 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.04.2016
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Vielen herzlichen Dank für die Antworten. Noch frohes Schaffen und viel Spaß.
    Thomas

  7. #7
    Registriert seit
    10.03.2014
    Ort
    Rhein-Neckar-Kreis
    Beiträge
    66
    Danke
    4
    Erhielt 10 Danke für 10 Beiträge

    Standard

    Deklariere:
    pointer_to_Ausgangskarte: Pointer to Byte;
    bAussgang : Byte;

    Quelltext:
    pointer_to_Ausgangskarte :=BITADR(xDO_Freigabe_Rosenberg);
    bAussgang := pointer_to_Ausgangskarte^;

    Sollte so funktionieren. Die Bits der Ausgangskarte liegen übrigens definitiv alle direkt hintereinander im Speicher. Mit %QX usw. kannst du direkt auf jedes Bit zugreifen.


  8. #8
    thomas59 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.04.2016
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke vielmals für den Tip. Funktioniert das auch, wenn die Bits nicht auf einer Byteadresse beginnen ?
    Ansonsten kommt mir das immer mehr wie "Pascal" vor...

    Danke
    Thomas

  9. #9
    Registriert seit
    10.03.2014
    Ort
    Rhein-Neckar-Kreis
    Beiträge
    66
    Danke
    4
    Erhielt 10 Danke für 10 Beiträge

    Standard

    Ja das sollte immer Funktionieren. Da du ja über den Pointer die Adresse des ERSTEN Bits angibst an dem deine Ausgangsvariablen beginnen. Da die Variablen immer hintereinander im Speicher liegen sollte das genauso Funktionieren. Das Byte das du selbst erzeugst bildet dann die letzten 4 Bit des einen und die ersten 4 Bit des anderen Bytes ab.


  10. #10
    thomas59 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.04.2016
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Herzlichen Dank - ich werde es ausprobieren.
    Thomas

Ähnliche Themen

  1. BYTE in WORD (High Byte, Low Byte)
    Von TimeOUT im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 18.03.2016, 13:48
  2. DWORD zu BOOL Array konvertieren in CODESYS ST
    Von vo13 im Forum CODESYS und IEC61131
    Antworten: 9
    Letzter Beitrag: 23.11.2015, 13:17
  3. Antworten: 10
    Letzter Beitrag: 01.08.2014, 06:17
  4. BOOL to WORD
    Von giro im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 10.07.2011, 16:49
  5. Antworten: 4
    Letzter Beitrag: 08.07.2008, 08:52

Lesezeichen

Berechtigungen

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