Fehlerauswertung Analogeingang

eYe

Level-1
Beiträge
759
Reaktionspunkte
80
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

Habe eine Anlage mit mehreren 4-20mA und einigen PT100.
Diese Werte lese ich ein, wandel sie entsprechend des Messbereihcs um und überwache sie auf die entsprechenden Grenzwerte. (Ohne FC105)

Nun muss ich aber noch sicherstellen das auch bei z.B. Drahtbruch eine Fehlermeldung "Sensorfehler" kommt. Wie kann ich das am einfachsten/besten machen?

Selber überprüfen ob der ADC Wert außerhalb von 0 - 27648 liegt?

oder aber

Bietet Siemens für jeden Kanal ein eigenes Fehlerbit?

(Bei Schneider gibt es z.B. für einen Analogeingang "%IW.0.4.1" immer ein Kanalfehlerbit "%I.0.4.1.ERR", welches bei Messbereihchsunter- und überschreitung true wird.)


Danke, eYe
 
schau mal in die hw-config in den eigenschaften deiner ai-baugruppe.
dort gibt es einen diagnosealarm. mit F1 gibts nähere infos
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich hab das vor kurzem mit einem AI von einer ET200S gemacht. (4-20mA)

Wie Volker sagte in der Hardware Config den Haken "Diagnose" bei der AI setzen, danach kannst du im Programm diesen auf Drahtbuch überprüfen.


Einfach das entsprechende PEW auf gleich 32767 vergleichen, wenn der Vergleich TRUE ist, dann hast du einen Drahtbruch. Funktioniert prima.

Gruß

Da_Basco
 
Hallo,

bei 4...20mA Signalen sinkt das PEW unter 4mA unter 0.
Man kann sich einen Grenzwert in mA ausrechnen ab wann eine Meldung erfolgen soll.

Hier mal ein Beispiel (SCL inkl. Skalierung):

Code:
//Funktion zum Skalieren von 4...20mA Signalen
//inkl. Drahtbruchauswertung
FUNCTION FC205 : VOID

// Bausteinparameter
VAR_INPUT
   IN:INT;    //PEW 
   HI_LIM: REAL; //Obergrenze
   LO_LIM: REAL; //Untergrenze
   FAIL_VAL: REAL; //Fehlerstrom
END_VAR

VAR_OUTPUT
   OUT:REAL;  //skalierter Ausgang
   FAIL:BOOL; //Fehlerausgang 
END_VAR


VAR_TEMP
    // temporäre Variablen
    temp: REAL;
    
    
END_VAR
    
    //Skalierung
    //********************************************************
    temp :=((IN/27648.0)*(HI_LIM-LO_LIM))+LO_LIM;
     
    //Ergebnis zwischen LO_LIM und HI_LIM ??? 
    IF ((temp>LO_LIM) & (temp<HI_LIM))Then
    OUT:=temp;
    END_IF;
     
    //Sonst an LO_LIM bzw. HI_LIM binden 
    IF (temp<LO_LIM) THEN        
        OUT:=LO_LIM; 
    ELSIF (temp>HI_LIM)THEN
        OUT:=HI_LIM;
       
    END_IF;
    
 
 
    //Drahtbruchauswertung
    //********************************************************
    FAIL:=FALSE; //Drahtbruchauswertung n.o.k.
    IF ((FAIL_VAL<3.9)&(FAIL_VAL>0.0)) THEN
        temp:= -((4.0 - FAIL_VAL)/0.00058); //4mA - Fehlerstrom/0.00058
        //Fehlerausgabe  
        IF (temp < IN) THEN
        FAIL:=TRUE; //Drahtbruchauswertung o.k.
        END_IF;
    END_IF;

                       
 END_FUNCTION
oder AWL

Code:
FUNCTION FC 106 : VOID
TITLE =
VERSION : 0.1


VAR_INPUT
  IN : INT ;    
  HI_LIM : REAL ;    
  LO_LIM : REAL ;    
  FAIL_VAL : REAL ;    
END_VAR
VAR_OUTPUT
  OUT : REAL ;    
  FAIL : BOOL ;    
END_VAR
VAR_TEMP
  temp_1 : REAL ;    
END_VAR
BEGIN
NETWORK
TITLE =Scale
//PEW zwischen LO_LIM und HI_LIM skalieren
//Nach Unterschreitung von LO_LIM => an LO_LIM binden
//Nach Überschreitung von HI_LIM  => an HI_LIM binden
//Skalieren
      L     #IN; //PEW
      ITD   ; //nach 32 BIT
      DTR   ; //nach Real
      L     2.764800e+004; //durch Konstante teilen
      /R    ; 
      T     #temp_1; //speichern

      L     #HI_LIM; //HI_LIM - LO_LIM 
      L     #LO_LIM; 
      -R    ; 

      L     #temp_1; //mit Speicher Multiplizieren
      *R    ; 
      L     #LO_LIM; //mit LO_LIM Addieren
      +R    ; 
      T     #OUT; //Ergebnis
      L     #LO_LIM; 
      <R    ; //mit LO_LIM Vergleichen
      SPBN  M001; 
      L     #LO_LIM; //Ergebnis an LO_LIM binden
      T     #OUT; 
      L     #HI_LIM; 
      SPA   M002; 
M001: TAK   ; 
      L     #HI_LIM; 
      >R    ; //mit HI_LIM Vergeleichen
      SPBN  M002; 
      L     #HI_LIM; //Ergebnis an HI_LIM binden
      T     #OUT; 

M002: NOP   0; //Ergebnis größer LO_LIM

NETWORK
TITLE =Drahtbruch
//Info:
//Unter 4mA sinkt das PEW unter Wert=0
//1 Digit = 0,00058mA, d.h. 3,9995mA entspricht -1 am PEW
//
//
//Drahtbruchauswertung nur wenn Fehlerstrom (FAIL_VAL) zwischen 0...3,9mA
//FAIL_VAL < 3,9mA
      L     #FAIL_VAL; 
      L     3.900000e+000; 
      <R    ; 
      SPBN  ende; 

//FAIL_VAL > 0mA
      L     #FAIL_VAL; 
      L     0.000000e+000; 
      >R    ; 
      SPBN  ende; 

NETWORK
TITLE =Drahtbruchauswertung

      L     4.000000e+000; //Differenz ermitteln 
      L     #FAIL_VAL; 
      -R    ; 
      L     5.800000e-004; //Differenz/0,00058mA
      /R    ; 
      TRUNC ; //In Integer wandeln
      L     0; //Vorzeichen wechseln
      TAK   ; 
      -I    ; 
      L     #IN; //Ist PEW < grenze ?
      <I    ; 
      =     #FAIL; 
NETWORK
TITLE =Bausteinende

ende: NOP   0; 


END_FUNCTION
Du kannst bei beiden Beispielen an IN FAIL_VAL ein Real angeben.
Der Wert steht für die Drahtbrucherkennung in mA. Z.B. 3.6 -> sinkt der Messwert unter 3.6mA wird ein Fehler ausgewertet.

Die stromgenaue Auswertung funktioniert nur bis nur bis 1,185mA, da das PEW unter 1,185mA auf –32768 sinkt.

Die AWL Geschichte ist im Ergebnis natürlich kompakter.

Diagnosealarm wird nicht bei jeder analog Baugruppe angeboten.

Gruß
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich hätte mal eine Frage zur Einstellung des Drahtbruchs an einem AI (6ES7 331-7NF00-0AB0)
Unter Eigenschaften im Reiter Eingänge kann ich die Freigabe Diagnosealarm anwählen.
Und die Diagnose Eingang auf Sammeldiagnose und mit Drahtbruchprüfung.

Jetzt habe ich bei beiden ein Häkchen gesetzt.

Muss ich jetzt wie bei #3:
Einfach den Vergleich durchführen?

Oder wie bei #4:
Ist das was dort beschrieben worden ist ein fertiger FC? Da ich kein Call Aufruf erkennen kann.

Vielen Dank im voraus.
 
Sowohl in #3 wie auch in #4 wird mehr oder weniger dassselbe gemacht. Dazu ist die Freigabe Diagnosealarm nicht nötig.
Da vergleichst du einfach den messwerwert mit den plausiblen grenzen wie in den Baugruppendaten angegeben.

Wenn du aber den Diagnosealarm auswählst, wird in der CPU ein Diagnoseintrag gelistet. den du ebenfalls auswerten kannst. Das wird dann in OB82 gemacht. Dazu kannst du SFC 51 und 59 verwenden. Da sind dann wirklich ausführliche Diagnosemöglichkeiten. Ob die nötig sind oder einfach nur das Programm verkomplizieren ist absolut deine Entscheidung.
 
Danke für die Antwort.

Also, wenn ich das richtig verstanden habe, dann muss ich lediglich den Wert im
PEW vergleichen auf 32767.
Wenn das Ergebnis 1 ist, so hat dieser Kanal einen Drahtbruch?
So wie in #3.


 
Zurück
Oben