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

Ergebnis 1 bis 9 von 9

Thema: Word auf >= vergleichen nicht möglich. (Nur ==)

  1. #1
    Registriert seit
    10.11.2013
    Beiträge
    81
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich würde gern zwei WORD miteinander vergleichen auf GrößerGleich....

    Leider kann ich in FUP nur bei == und <> als Format WORD auswählen.

    Kann mir jemand erklären wieso ich nicht auf > oder >= vergleichen kann?

    Irgendwie sehe ich kein Grund warum es nicht geht. Jedes Word ist doch auch eine bestimmte Dezimalzahl. bei INT funktioniert es ja auch,.. und der Aufbau ist bis auf das Vorzeichenbit das selbe.

    Danke Gruß TT
    Zitieren Zitieren Word auf >= vergleichen nicht möglich. (Nur ==)  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.205
    Danke
    926
    Erhielt 3.293 Danke für 2.662 Beiträge

    Standard

    Ein WORD ist keine Dezimalzahl sondern einfach nur eine Ansammlung von 16 Bits. Deshalb kann man mit WORD nicht rechnen und auch nur vergleichen, ob kein oder irgendein Bit gesetzt ist.

    Willst du rechnen, dann benutze INT oder konvertiere/kopiere das WORD in eine INT-Variable.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #3
    Registriert seit
    10.11.2013
    Beiträge
    81
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Ein WORD ist keine Dezimalzahl sondern einfach nur eine Ansammlung von 16 Bits. Deshalb kann man mit WORD nicht rechnen und auch nur vergleichen, ob kein oder irgendein Bit gesetzt ist.

    Willst du rechnen, dann benutze INT oder konvertiere/kopiere das WORD in eine INT-Variable.

    Harald
    Danke Harald,

    ich mache/möchte folgendes:

    ich habe 16 Meldungen auf 16bit geführt. Das alles ist am Ende halt ein komplettes word.

    Jetzt würde ich gern ein einziges bit setzten, falls irgend eins oder mehrere dieser Bits in einem Zyklus von 0 zu 1 wird. Ich dachte ich vergleich einfach den Dezimalwert des word aber das geht ja nicht.

    Wenn ich allerdings in INT kopiere ist das letzte Bit doch fürs Vorzeichen und falls dieses Dazukommt wird mein Dezimalwert geringer? Oder bin ich jetzt komplett durcheinander,..

    GrußTT

  4. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.205
    Danke
    926
    Erhielt 3.293 Danke für 2.662 Beiträge

    Standard

    Siehst Du, wie Du selbst bemerkst, würde das größer/kleiner-Vergleichen bei Deiner Bitsammlung sowieso nicht funktionieren. Außerdem können im selben Zyklus Bits kommen und andere Bits gehen.

    Du mußt einfach nur Vergleichen, ob ein Bit dazugekommen ist, also im letzten Zyklus 0 war und jetzt 1 ist --> die klassische Flankenerkennung, allerdings gleich für 16 Bit auf einmal. Dafür gibt es WORD-Verknüpfungs-Operationen. Und sogar einen FAQ zur wordweisen Flankenauswertung.

    In AWL könnte Dein Code etwa so aussehen:
    Code:
    L Word_vorher
    INVI
    L Word_jetzt
    T Word_vorher
    UW
    U <>0
    = Bit_dazugekommen
    S Meldebit
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #5
    Registriert seit
    10.11.2013
    Beiträge
    81
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich hab mir das mal auf ein Zettel gemalt und muss mich bei dir bedanken!

    Für den Link und den Code. Sehr einfach wenn man es verstanden hat und funktionieren tut es auch noch. Es werden nur Positive Flanken erkannt... DANKE

  6. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.205
    Danke
    926
    Erhielt 3.293 Danke für 2.662 Beiträge

    Standard

    Zitat Zitat von TIA_TESTER Beitrag anzeigen
    und funktionieren tut es auch noch.
    Ja, geniale Lösungen sind meistens einfach

    Du hast aber auch noch genug damit zu tun, es in (TIA-)FUP zu übersetzen. Da mußt Du die Operationen umstellen, was aber einfach ist, da Du das Prinzip verstanden hast.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. #7
    Registriert seit
    10.11.2013
    Beiträge
    81
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo nochmal,

    hab jetzt nochmal ein wenig die Dualzahlen aufgearbeitet und komm Grundsätzlich klar denke ich. Was man alles vergisst was eigentlich 2/3 Klasse ist... unfassbar.

    Woher kommt dein
    Code:
    U <>0
    Das Ergebnis der WORD-UND-Verknüpfung ist in Akku1, ich hätte jetzt eine 0 geladen [(Akku1), vorheriges Ergebnis wandert in (Akku2)] -> und auf ungleich verglichen. :S

    Mag sein das es geht, meine Frage ist nur wie kommst du auf "U <>0" ? In der Liste der Funktionen ist es nicht dabei (wie sicher manch anderes). Nur mit Angabe einer Interpretierung der AKKUS-> I, D, R...

    Wenn ich in AWL eine Zahl lade. Kann ich einfach "L 3423423" schreiben, oder bedarf es eines Zusatzes für die richtige Interpretierung?

    Danke GrußTT
    Geändert von TIA_TESTER (30.06.2015 um 14:45 Uhr)

  8. #8
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.358
    Danke
    456
    Erhielt 695 Danke für 520 Beiträge

    Standard

    Siehe hierzu: TIA-Hilfe -> Index -> "Statuswort" -> Doppelklick drauf -> Dann "Grundlagen zum Statuswort"
    Zitat Zitat von Grundlagen zum Statuswort
    Beschreibung
    Das Statuswort fasst Statusbits zusammen, die die CPU zur Steuerung der binären Verknüpfungen verwendet und bei der digitalen Bearbeitung setzt.
    Sie können die Statusbits abfragen und gezielt beeinflussen.
    Das Statuswort ist ein Wort innerhalb des Betriebsystems der SPS das folgende Bits enthält:

    • OS (Überlauf speichernd)
    • OV (Überlauf)
    • A0 und A1 (Auskunft über das Ergebnis verschiedener Anweisungen)
    • BIE (Binärergebnis)
    • VKE (Verknüpfungsergebnis)


    In dem Fall geht es um die Bits A0/A1.
    Das Ergbnis der UW-Funktion (und anderer) beeinflusst diese automatisch.
    Ein Ergebnis "ungleich null" führt dazu dass die Bits A0/A1 entweder 1/0 oder 0/1 sind.
    Mit U <>0 wird die Ungleichheit dieser Bits geprüft und somit wird auch geprüft ob der vorherige Ergebnis von UW "ungleich 0" war.

    Es gibt noch weitere Befehle mit denen diese Statusbits abgefragt werden könnten. Siehe dazu den Artikel "Abfragen der Statusbits mit Bitverknüfungsanweisungen"
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  9. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.205
    Danke
    926
    Erhielt 3.293 Danke für 2.662 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von TIA_TESTER Beitrag anzeigen
    Woher kommt dein
    Code:
    U <>0
    Das Ergebnis der WORD-UND-Verknüpfung ist in Akku1, ich hätte jetzt eine 0 geladen [(Akku1), vorheriges Ergebnis wandert in (Akku2)] -> und auf ungleich verglichen. :S
    Das UW setzt schon die Status-Flags A0 und A1 entsprechend dem Ergebnis der Operation (quasi ein integrierter Vergleich auf 0), ein nachfolgender Vergleich auf 0 ist eigentlich unnötig, macht den Code aber manchmal besser verstehbar.

    Die Statusflags A0 und A1 kann man direkt abfragen in AWL/KOP/FUP mit U/UN/O/ON/X/XN <>0/==0/>=0/<=0/>0/<0
    Siehe AWL-Hilfe "Abfragen des Zustands der Bits im Statuswort" bzw. Stichwort "Ergebnisbit" bei KOP/FUP

    Ob und welche Statusflags eine Operation beeinflußt, findet man in der Online-Hilfe zur Operation (AWL/KOP/FUP). (Eine entsprechende Hilfe sollte es auch in TIA geben.)


    In classic-AWL muß man bei positiven DINT-Konstanten keinen Zusatz L#... schreiben - wenn die Zahl > 32767 ist, dann wird L# automatisch ergänzt. Bei FUP/KOP wird der erforderliche Datentyp meist aus der Operation erkannt. Bei positiven Zahlen ist es übrigens egal, ob man Konstanten als 8-, 16- oder 32-Bit-Wert in den AKKU lädt. Die nicht angegebenen Bits/Bytes werden beim L automatisch auf 0 gesetzt.

    Bei negativen Konstanten MUSS man L#... angeben, wenn der DINT-Wert auch in INT passen würde, weil -1 und L#-1 nicht das selbe ist. Ohne Angabe von L# würden die oberen 16 Bit im AKKU auf 0 gesetzt werden, bei DINT müssen die aber 1 sein.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. Step 7 Hardwareübertragung auf CPU416F nicht möglich
    Von spsträumerle im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 23.04.2015, 15:16
  2. TIA S7-1200 - Word in DB vergleichen
    Von Pico1184 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 05.06.2013, 10:59
  3. Word vergleichen
    Von RON_87 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 15.03.2013, 17:03
  4. Zugriff auf CP 343-1 nicht möglich
    Von JandeFun im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 24.06.2008, 09:56
  5. BYTE/WORD/DWORD vergleichen
    Von slma im Forum Simatic
    Antworten: 23
    Letzter Beitrag: 06.07.2007, 15:11

Lesezeichen

Berechtigungen

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