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

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

Thema: Alarmliste programmieren

  1. #1
    Registriert seit
    06.11.2005
    Ort
    daheim natürlich
    Beiträge
    119
    Danke
    11
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Servus,
    habe zur zeit ein projekt, bei dem ich in der visu die Alarmliste/Alarmanzeige (wie man es aus WinCCFlex kennt) selbst in der SPS programmieren muss. Die Anzeige in der Visu erfolgt über eine Tabelle (sprich in der SPS muss ein Array gefüllt werden).
    Ich habe die Liste bereits programmiert, Problem ist gelöst, dennoch würde es mich interessieren wie ihr das lösen würdet
    Das Programm habe ich in ST auf Codesys geschrieben, werde es natürlich auch posten.

    MfG,
    Flo
    Zitieren Zitieren Alarmliste programmieren  

  2. #2
    Flo ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.11.2005
    Ort
    daheim natürlich
    Beiträge
    119
    Danke
    11
    Erhielt 2 Danke für 2 Beiträge

    Standard

    also, die Fehlerliste die ich programmiert habe sieht folgendermaßen aus:
    Code:
    PROGRAM Alarmliste
    VAR
     i,j,k,l,m:INT;
     x_init: BOOL;
     FM:ARRAY[0..num_of_Fehler] OF FB_Fehler;
     Fehler_Hilfsarray:ARRAY[0..num_of_Fehler] OF INT;(*Platzierungsliste*)
     Fehlerliste:ARRAY[0..num_of_Fehler] OF sAlarmliste;
       (*TYPE sAlarmliste :
          STRUCT
           alarmzeit:STRING;
           fehlernummer:STRING;
           fehlertext:STRING[100];
          END_STRUCT
          END_TYPE
       *)
    END_VAR
     
    (*
    VAR_GLOBAL CONSTANT
     num_of_Fehler:INT:=512;
    END_VAR
    *)
    Code:
     IF NOT x_init THEN (* Initialisieren*)
    x_init:=TRUE;
    k:=0;
    END_IF
     
    FOR i:=0 TO num_of_Fehler DO   (* Durchlaufe Initialisiereungen der Fehlerbausteine *)
     IF FM[i].Fehler_Aktiv THEN
      Fehler_Hilfsarray[k]:=i;      (*Schreibe den aufgetretenen Fehler in eine Hilfsliste, um die Reihenfolge der Fehler zu platzieren*)
      k:=k+1;
     END_IF
    END_FOR
    j:=0;
    FOR i:=0 TO k-1 DO  (* Für alle Elemente in der Fehlerliste *)
     IF NOT FM[Fehler_Hilfsarray[i]].Fehler_Aktiv THEN   (*nicht mehr enabled oder aktiv*)
      Fehler_Hilfsarray[i]:=0;
      j:=j+1; (*Counter für gelöschte Einträge, um Liste wieder nach oben hin auf zu füllen*)
     ELSE
     IF j>0 THEN
     Fehler_Hilfsarray[i-j]:=Fehler_Hilfsarray[i]; (*verschieben der Elemente um j*)
     Fehler_Hilfsarray[i]:=0;
     END_IF
     END_IF
    END_FOR
    k:=k-j;  (* neuen index auf letztes Element berechnen*)
    l:=0;
    FOR i:=(k-1) TO 0 BY -1 DO (* Fehlerliste befüllen*)
     Fehlerliste[l].fehlertext:=FM[Fehler_Hilfsarray[i]].text;
     Fehlerliste[l].alarmzeit:=FM[Fehler_Hilfsarray[i]].string_DT;
     Fehlerliste[l].fehlernummer:=INT_TO_STRING(FM[Fehler_Hilfsarray[i]].Fehlernummer);
     l:=l+1;
    END_FOR
    FOR m:=l TO 200 DO (* restliche Einträge nullsetzen*)
     Fehlerliste[m].fehlertext:='';
     Fehlerliste[m].alarmzeit:='';
     Fehlerliste[m].fehlernummer:='';
    END_FOR
    das ist jetzt meines erachtens recht umfangreich, daher stellt sich mir die Frage ob es auch noch andere (kompaktere) Lösungsansätze dafür gibt.
    Verbesserungsvorschläge sind auch gerne erwünscht.
    mfG,
    Flo

  3. #3
    Registriert seit
    07.12.2009
    Beiträge
    27
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hey!
    Und wie füllst du deine Liste?
    Mfg

  4. #4
    Registriert seit
    19.05.2008
    Beiträge
    648
    Danke
    117
    Erhielt 136 Danke für 105 Beiträge

    Standard

    Hallo Flo,

    ich hatte das selbe Problem mit der Alarmanzeige, weil die TwinCAT Target VISU CE die Funktion leider nicht unterstützt.

    Sieh mal hier...
    http://www.sps-forum.de/showthread.p...5726&page=2#14
    Aber Vorsicht! Wenn du die Struktur zu groß wählst kommt die Steuerung mächtig in schwitzen

    Alternativ wollte ich mal dein Entwurf ausprobieren, aber der „FB_Fehler“ fehlt.
    Kannst du den FB, oder besser noch das Projekt hier reinstellen?

    Gruß
    Chräshe

  5. #5
    Registriert seit
    07.12.2009
    Beiträge
    27
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hey!
    Das gleiche Problem mit der PLC HMI CE hatte ich auch, ich frage ständig wann die Alarmtabelle unter CE integriert wird und jedesmal heißt es demnächste bzw. dann wenn CE 6.0 auf die Panels kommt.
    Ich wollte das Beispiel auch mal ausprobieren nur leider fehlt der FB_Fehler!
    Vielleicht könntest du den ja auch noch reinstellen?!
    Danke im Voraus

  6. #6
    Flo ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.11.2005
    Ort
    daheim natürlich
    Beiträge
    119
    Danke
    11
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Code:
    FUNCTION_BLOCK FB_Fehler
    VAR_INPUT
     Fehlernummer:INT;
     Enable:BOOL;
     In:BOOL;
     EV:TIME;
     AV:TIME;
     Reset:BOOL;
     Reaktion_Fehler:INT;
     Text:STRING(100);
    END_VAR
    VAR_OUTPUT
     Aktiv:BOOL;
     Reset_moeglich:BOOL;
     Fehler_Log:STRING(35);
    END_VAR
    VAR
     TON_In:TON;
     TOF_In:TOF;
     AV_In:BOOL;
     R_TRIG_Aktiv:R_TRIG;
     string_DT:STRING(25);
     Fehler_num:STRING(8);
     Fehler_Log_tmp:STRING(35);
    END_VAR
    Code:
    TON_In(IN:=In , PT:=EV );
    TOF_In(IN:=In , PT:=AV,Q=>AV_In );
    IF AV = t#0ms
    THEN
     AV_In:=FALSE;
    END_IF
    IF Reset
    THEN
     Aktiv:=FALSE;
    END_IF
     IF Enable AND (TON_In.Q OR (NOT In AND AV_In))
     THEN
      Aktiv:=TRUE;
     END_IF
    Reset_moeglich:= NOT TON_In.Q AND NOT TOF_In.Q AND aktiv;
    R_TRIG_Aktiv(CLK:= Aktiv );
    IF R_TRIG_Aktiv.Q
    THEN
    string_DT:=LEFT(systemTime, LEN(systemTime) -4);
    Fehler_num:=INT_TO_STRING(Fehlernummer);
    Fehler_Log_tmp:=CONCAT(string_DT,' FM:');
    Fehler_Log:=CONCAT(Fehler_Log_tmp,Fehler_num);
    END_IF
    (*Info!!*)
    Reaktion_Fehler;
    (*Eingang Input Bedeutung:
    0: Meldung, nur Anzeige;
    1: Störung Gesamtanlage; Stopp nach Takt;
    2: Störung Gesamtanlage; Sofortstopp;
    3: Störung Gesamtanlage; Einschaltsperre;*)
    Hier der FB_fehler.
    ich hatte das selbe Problem mit der Alarmanzeige, weil die TwinCAT Target VISU CE die Funktion leider nicht unterstützt.
    Genau deshalb ist der Code dafür entstanden
    Das Problem mit der Systemleistung hatte ich auch, allerdings lag das bei mir (in diesem Fall wars ein CX9010) nicht an den großen Strukturen, sondern vielmehr an den beiden VisuTasks.

    Edit: Die Variable "systemTime" ist Global, muss also zusätzlich angelegt werden:
    Code:
     systemTime   : STRING;
     fbGetSystemTime  : GETSYSTEMTIME;
     fileTime  : T_FILETIME;
    Code:
    fbGetSystemTime(timeLoDW=>fileTime.dwLowDateTime, timeHiDW=>fileTime.dwHighDateTime );
    systemTime :=SYSTEMTIME_TO_STRING( FILETIME_TO_SYSTEMTIME( fileTime ) );
    Geändert von Flo (11.01.2010 um 18:31 Uhr)

  7. #7
    Registriert seit
    07.12.2009
    Beiträge
    27
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Trotzdem verstehe ich jetzt noch nicht ganz wie du das Array gefüllt kriegst sprich deine einzelnen Alarme in das Array schreibst bzw. die einzelnen Alarme auflistest!
    Mfg

  8. #8
    Registriert seit
    19.05.2008
    Beiträge
    648
    Danke
    117
    Erhielt 136 Danke für 105 Beiträge

    Standard

    Hallo Flo,

    im 2. Anlauf hat es leider auch nicht geklappt, deine Pusselteile zusammenzusetzen.

    Code:
    FOR i:=0 TO num_of_Fehler DO    
    IF FM[i].Fehler_Aktiv THEN
    Fehler_Hilfsarray[k]:=i;      
    k:=k+1;
    END_IF
    END_FOR
    Jetzt schimpft der Compiler „Fehler_Aktiv“ ist keine Komponente von „FB_Fehler“...
    Da muss ich ihm recht geben – das ist so.

    Kann es sein dass die Codeschnipsel aus unterschiedlichen Versionsständen stammen?

    Gib mir ein Tipp – einen Versuch starte ich noch..
    aber langsam bin ich zu alt zum pusseln...

    Gruß
    Chräshe

  9. #9
    Registriert seit
    07.12.2009
    Beiträge
    27
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Ich denke man braucht nur das Fehler vor aktiv wegzunehmen dann müsste es gehen.
    Aber ich frage mich ob es noch einen Baustein gibt wo man seine Alarme eingibt?!

  10. #10
    Flo ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.11.2005
    Ort
    daheim natürlich
    Beiträge
    119
    Danke
    11
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ja stimmt, habe falscherweise den FB_Fehler aus nem älteren Projekt genommen.
    Wenn du das "Fehler_" weg machst müsste es funktionieren.

Ähnliche Themen

  1. Zeitstempel in WinCC Alarmliste
    Von IPC Bernhard im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 24.02.2011, 20:31
  2. Alarmliste ZenOn
    Von Rifel im Forum HMI
    Antworten: 2
    Letzter Beitrag: 21.02.2009, 19:32
  3. S5 95U programmieren !?
    Von Tom1971 im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 16.10.2007, 19:24
  4. CPU 312 programmieren
    Von Headman im Forum Simatic
    Antworten: 27
    Letzter Beitrag: 13.09.2007, 16:08
  5. Programmieren per LAN ?
    Von KartoffeL im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 25.07.2006, 05:22

Lesezeichen

Berechtigungen

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