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

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

Thema: Statusbits auswerten?

  1. #1
    Registriert seit
    27.09.2008
    Beiträge
    201
    Danke
    21
    Erhielt 11 Danke für 10 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo allerseits.

    Ich setze an einem Wago 750-841 Controller analoge Eingangsklemmen 4-20 mA (750-455)ein.

    Zu diesen Klemmen heisst es in der DOKU:

    Prozessabbild
    Die analoge Eingangsklemme 750-455 liefert je Kanal 16 Bit Messwerte und
    8 Statusbits.
    Der digitalisierte Messwert wird in einem Datenwort (16 Bit) als
    Eingangsbyte 0 (low) und Eingangsbyte 1 (high) in das Prozessabbild des
    Kopplers / Controllers ¸bertragen.
    Dieser Wert ist mit einer Auflˆsung von 12 Bit auf Bit B3 ... B14 abgebildet.
    In den zwei niederwertigen Bits (B0 und B1) sind Statusinformationen
    enthalten, die im Fehlerfall ausgewertet werden kˆnnen. Dabei sind im Falle
    eines Leitungsbruchs, einer Messbereichsunter- oder -¸berschreitung Bit B0
    und B1 = 1 gesetzt.
    Bit B2 ist nicht definiert und wird nicht ausgewertet. In der Tabelle ist dieses
    deshalb mit ëXë dargestellt.



    Nun möchte ich Bit B0 und B1 auswerten um einen Fühlerbruch zu erkennen. Da das Signal ständig (wie bereits bei meinem Thema mit dem Glätten eines Signals) "pendelt" erscheinen ab und an beide Bits als TRUE.

    Hierdurch kommt es zu Fehlalarmen.

    Wie löse ich dieses Problem?

    Sollte ich hier ein TON mit 1 Minute statt nur 1 Sekunde hinterschalten, um Fehlalarme zu vermeiden? Oder gibt es einen eleganteren/besseren Weg?



    Folgendes habe ich bereits erstellt:

    Deklaration:
    FUNCTION_BLOCK S_Fehler
    VAR_IN_OUT
    IN: WORD; (* input value*)

    END_VAR
    VAR_OUTPUT
    Error_S: BOOL; (*Sensorstoerung*)
    END_VAR
    VAR
    Verz:TON;
    END_VAR


    Anweisungsteil:

    IF IN.00
    AND IN.01
    (*
    AND IN1.13
    AND IN1.12
    AND IN1.11
    AND IN1.10
    AND IN1.09
    AND IN1.08
    AND IN1.07
    AND IN1.06
    AND IN1.05
    AND IN1.04
    AND IN1.03
    AND IN1.02
    AND IN1.01
    AND IN1.00
    *)
    THEN

    Verz(IN:=TRUE,PT:=t#1s);

    Error_S :=Verz.Q;


    END_IF






    Vielen Dank schon mal jetzt.

    McNugget
    Geändert von McNugget (06.10.2008 um 15:27 Uhr)
    Zitieren Zitieren Statusbits auswerten?  

  2. #2
    Registriert seit
    04.10.2007
    Ort
    Delmenhorst
    Beiträge
    339
    Danke
    53
    Erhielt 43 Danke für 27 Beiträge

    Standard

    Korrigiert mich wenn ich mich täusche, aber der 841 wertet die statusbits nicht aus. ich fürchte das wird nichts! hatte so ein ähnliches problem auch schon mal und kam nicht an die statusbits ran.
    (siehe handbuch 750-841, S. 223 und S. 243)
    Zitieren Zitieren sieht nicht gut aus  

  3. #3
    McNugget ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.09.2008
    Beiträge
    201
    Danke
    21
    Erhielt 11 Danke für 10 Beiträge

    Standard

    Hallo Eliza,

    hmm... Ich weiss nicht, welche Infos Du auf diesen Seiten meinst.

    Im Handbuch auf Seite 259 wird lediglich davon gesprochen, dass es 4 mal 2 Bytes gibt. Dem steht doch nicht entgegen, dass ich einzelne Bits "von Hand" auswerten kann.. Oder??

    McNugget

  4. #4
    Registriert seit
    04.10.2007
    Ort
    Delmenhorst
    Beiträge
    339
    Danke
    53
    Erhielt 43 Danke für 27 Beiträge

    Standard

    Fehler vom Amt. Erst richtig lesen, dann schreiben.
    Ich dachte du wolltest die Status- bzw Steuerbits auswerten.
    Zitieren Zitieren Sorry!  

  5. #5
    McNugget ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.09.2008
    Beiträge
    201
    Danke
    21
    Erhielt 11 Danke für 10 Beiträge

    Standard

    Hmmm..

    Vielleicht habe ich das falsch ausgedrückt:

    Das möchte ich ja auch.

    Aber eben nicht die Statusbits vom Controller zur Klemme (interne Buskommunikation), sondern die Statusbits des Datenbytes.

    Gruss

    McNugget

  6. #6
    Registriert seit
    04.10.2007
    Ort
    Delmenhorst
    Beiträge
    339
    Danke
    53
    Erhielt 43 Danke für 27 Beiträge

    Standard

    also meiner meinung nach müsste das so gehen.
    eine minute kommt mir etwas lang vor.

  7. #7
    McNugget ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.09.2008
    Beiträge
    201
    Danke
    21
    Erhielt 11 Danke für 10 Beiträge

    Standard

    OK,
    aber eine Sekunde ist definitiv zu kurz.

    Die Frage ist ja, ob es normal ist, von AE-Klemmen so schwankende Werte zu erhalten. Im Feld sind Temperaturtransmitter mit geschirmten Leitungen (Schirm natürlich einseitig im Schaltschrnk aufgelegt) verbaut.

    Die Minute mehr oder weniger wäre für eine Alarmierung nicht "kriegsentscheidend".

    Gruss McNugget


    P.S.: @Eliza:Wo in Delmenhorst bist Du eigentlich am werkeln?
    Geändert von McNugget (07.10.2008 um 08:02 Uhr)

  8. #8
    Registriert seit
    13.01.2005
    Ort
    Allgäu
    Beiträge
    146
    Danke
    4
    Erhielt 23 Danke für 18 Beiträge

    Standard

    Hallo,

    im Strukturierten Text die Timer nicht in einer If Bedingung laufen lassen.
    Den Timer ausserhalb der if Bedingung schreiben oder

    Verz(IN:=(in00 And In01),PT:=t#1s);

    dann sollt 1s ausreichen

    Gruß
    Silke

  9. Folgender Benutzer sagt Danke zu M_o_t für den nützlichen Beitrag:

    McNugget (08.10.2008)

  10. #9
    McNugget ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.09.2008
    Beiträge
    201
    Danke
    21
    Erhielt 11 Danke für 10 Beiträge

    Standard

    @M_o_t: Danke, kannst Du mir erklären, warum? Ich bin im ST noch nicht besonders mit Basics beschlagen. Was ändert es, wenn ich den Timer aus der Schleife nehme?

    Wie würde die Anweisung dann aussehen?

    Wobei natürlich Deine Anweisung auch elegant ist. Wusste noch gar nicht, dass ich auch beim Belegen von bausteineingängen logische Verküfungen integrieren kann.

    Gruss

    McNugget

  11. #10
    Registriert seit
    06.07.2007
    Beiträge
    2.811
    Danke
    174
    Erhielt 274 Danke für 253 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wenn du deinen Timer aus der Schleife raus nimmst, kannst du dir die Schleife sparen. Gleichzeitig kannst du die Q-Zuweisung auch im Timer machen. Du hast dann einfach nur noch folgende Anweisung:
    Code:
    Verz(IN:= (IN.00 and IN.01), PT:= t#1s, Q=> Error_S);
    Allerdings musst du hierbei beachten, dass während der kompletten Sekunde die Eingänge IN.00 und IN.01 TRUE sein. Ansonsten fängt der Timer wieder bei 0 an zu zählen.

    Wenn die zwei Eingänge nur kurz TRUE sein sollen und der Timer trotzdem bis zu Sekunde zählen soll, dann probiers doch wie folgt:
    Code:
    VAR
    hilf: BOOL := FALSE;
    END_VAR
     
     
    if IN.00 and IN.01 then
         hilf := TRUE;
    END_IF
     
    if hilf then
         Verz(IN:= TRUE, PT:= t#1s, Q=> Error_S);
    END_IF
     
    if Verz.Q then
         Verz(IN:= FALSE, PT:= t#1s, Q=> Error_S);
         hilf := FALSE;
    END_IF
    A programmer is just a tool which converts caffeine into code.

Ähnliche Themen

  1. Tasterbefehle auswerten
    Von EAT3 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 19.05.2011, 22:07
  2. DB auswerten
    Von Rauchegger im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 27.10.2010, 22:45
  3. CPU Zeit auswerten
    Von HWPascal im Forum Programmierstrategien
    Antworten: 6
    Letzter Beitrag: 05.03.2009, 23:20
  4. Analogeingang auswerten
    Von mstraus0 im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 27.02.2009, 10:08
  5. Timer im ob 35 auswerten
    Von Ralf_Step im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 16.01.2009, 08:49

Lesezeichen

Berechtigungen

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