TIA 8bit Fehlereingänge als 256 Meldungstexte im HMI darstellen

stromi08

Level-1
Beiträge
11
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich möchte mit einer S7-1212C und einem KP300Basic folgendes realisieren.

Ich bekomme 256 Fehler einer alten Steuerung als 8 Bit auf I0.0 bis I0.7. Diese Wandle ich, und möchte sie dann am KP 300 als Meldung ausgeben. Immer der letzte Fehler soll angezeigt werden.
Wie kann ich denn am besten die gewandelte Dezimalzahl als Variable in HMI einbinden? Mir fehlt der Schritt nach dem Wandeln, damit ich einfach die 256 Texte im HMI definiere.
 
Hallo,

2 Möglichkeiten:


  1. Textliste mit 256 Einträgen
    die HMI Variable (Wert 0-256) mit einer Textliste anzeigen
  2. in SPS aus der Dezimal 256 Meldungen (Bitmeldungen) erzeugen, die Texte dann bei HMI-Meldungen eintragen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke Peter, aber ich hab schon mal ein Problem beim Wandeln. Ich brauche ja einen Wert, den ich auch nach dem Convert von 0-255 triggern kann. Also z.B. In IB0 als USint Convert to ?
Dann von da aus gleich mir den Texten, oder erst die Texte im HMI erstellen.
 
Zuletzt bearbeitet:
also ich fasse mal zusammen, was ich verstanden habe:

Du hast 1 Byte (8 Bit) mit einer Fehlerinformation (Fehler 0 - Fehler 255)
  • Steht diese Fehlernummer dauernd an oder schalten verschiedene Fehlernummern durch?
    Wenn die durchschalten, wie lange steht eine Nummer an, wenn zu schnell musst du die Nummern zwischenspeichern, wie oben geschrieben z.B. 256 Meldebits erzeugen
    Wenn immer nur ein Fehler aktiv ist, hast du immer nur 1 Nummer gleichzeitig, dann einfache Textliste, dort sind den Nummern 0-255 verschiedene Texte zugewiesen.

Oder hast du 1 Byte mit 8 Fehlermeldungen, je Bit eine?
  • dann kannst du 8 Bitmeldungen erzeugen

und warum willst du convertieren? Übertrage einfach EB1 zu deiner Fehlernummer
 
Ich bekomme 256 Fehler (eigentlich nur ca. 120) z. B. Bit 0 und 1 = Fehler Nr.3 usw. Kommt ein neuer Fehler oder Meldung, wird diese(r) Angezeigt bis zur nächsten. Es gibt kein Fehlerbit 0.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
dann einfach Textliste am Terminal

EB1 zu var_Fehlernr

Textliste Fehler erzeugen in Terminal
0 kein Fehler
1 Fehler_1
2 Fehler_2
3 Fehler_3
usw.

Symbolisches EA Feld an Terminal
Prozessvariable: var_Fehlernr
Modus Ausgabe
Inhalt Textliste Fehler
 
Wenn es als Textliste ausreicht, ist das natürlich das einfachste. Wenn jedoch richtige Bitmeldungen benötigt werden, dann würde ich mir ein ARRAY[0..255] of Bool anlegen und dann das genannte Byte in einer Schleife abfragen.

Code:
FOR n:=1 to 255 DO
    IF MY_BYTE = n THEN
       MY_ARRAY[n] := TRUE;
    END_IF;
END_FOR;

Damit hätte man das Störungsereignis schon einmal gespeichert. Das Quittieren bzw. das Rücksetzen macht man dann so, wie man es immer macht :ROFLMAO: .
Wenn man nur 120 Meldungen hat, kann man die Durchläufe natürlich entsprechend reduzieren. Etwas umständlicher wird es, wenn man die Bytes der Bitmeldungen vertauschen muss.

Man könnte an Stelle der FOR-Schleife auch einen Umlaufzähler verwenden, mit dem pro Zyklus nur eine Meldung verarbeitet wird.

Code:
n := n MOD 255
n := n + 1;
  IF MY_BYTE = n THEN
      MY_ARRAY[n] := TRUE;
  END_IF;
 
Ich komm nicht weiter.... Ich Convertiere mein IB0 nach MW100 (INT). Dann habe ich ja schon mal meine 0-255. Wo erstelle ich dann meine Texte? Als neue PLC-Variablentabelle? Oder gleich als HMI-Meldungen? Wie rufe ich die denn auf, oder was ist mein Trigger? Ich habe nur die 8Bit (I0.0 bis I0.7). Die sollen so wie sie anstehen, nur die 255 Texte am KP300 anzeigen. Der letzte soll immer stehen bleiben. Mehr nicht. (Verzeiht mir mein schlechtes "SPS"....:p)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das habe ich Die doch schon in Beitrag #6 geschrieben, hier nochmals mit dem MW100

in Terminal Textliste erzeugen

EB0 zu MW100 (var_Fehlernr)

Textliste Fehler erzeugen in Terminal
0 kein Fehler
1 Fehler_1
2 Fehler_2
3 Fehler_3
usw.

Symbolisches EA Feld an Terminal
Prozessvariable: MW100 (var_Fehlernr)
Modus Ausgabe
Inhalt Textliste Fehler


 
Code:
FOR n:=1 to 255 DO
    IF MY_BYTE = n THEN
       MY_ARRAY[n] := TRUE;
    END_IF;
END_FOR;
Warum dafür eine FOR-Schleife? Man könnte einfach so schreiben:
Code:
[COLOR="#008000"]// IF MY_BYTE > 0 AND MY_BYTE <= 255 THEN[/COLOR]
       MY_ARRAY[MY_BYTE] := TRUE;
[COLOR="#008000"]// END_IF;[/COLOR]
PS: Code in [CODE]-Tags wird immer im Font "Courier New" formatiert. [FONT]-Tags um die [CODE]-Tags sind unnötig, werden ignoriert bzw. bewirken nichts.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@stromi08

Was genau willst Du als Ergebnis haben? Nur den aktuell an IB0 anliegenden Störcode als Zahl oder symbolischen Text anzeigen, oder bis zu 256 im Text unterschiedliche Meldungen mit "Kommen" und "Gehen" triggern?

(1) eine einfache Ausgabe des Störungscodes d.h. des dezimalen Wertes des Bitmusters von IB0?
Dann nimm ein einfaches EA_Feld oder einen statischen Text mit eingebetteter Variable für den Wert des IB0 bzw. MW100
"Aktueller Störcode des Gerätes:" [ 12] <--- EA_Feld, Ausgabe dezimal, für Prozesswert MW100

(2) eine je Störungscode unterschiedliche Klartextanzeige des an IB0 anliegenden Störcodes?
Dann nimm ein symbolisches EA_Feld mit einer Textliste der Ausgabetexte, z.B.
"Aktueller Störcode des Gerätes:" [ 12: Motorschutz 12Q3] <--- symbolisches EA_Feld, siehe Beitrag #9

(3) bis zu 256 verschiedene Bitmeldungen triggern?
Dann mußt Du etwas aufwendiger programmieren und abhängig vom an IB0 anliegenden Wert (Störcode) 256 Trigger-Bits für bis zu 256 Meldungen setzen und rücksetzen. Und es kommt drauf an, wie sich die Meldungen bei Änderung des Störcodes an IB0 verhalten sollen.

Wenn alle 8 Eingänge I0.0-I0.7 = 0 sind (IB0 = 0), heißt das "aktuell keine Störung"?
Wenn sich das Bitmuster des IB0 ändert, was soll mit der Meldung des vorherigen Wertes passieren? Automatisch gehen oder erst gehen wenn das IB0 = 0 wird?

Beispiel:
* IB0 = 2 --> Meldung "Fehler 2" wird getriggert/angezeigt
* IB0 ändert sich zu 4 --> Meldung "Fehler 4" wird getriggert/angezeigt
? Meldung "Fehler 2" bleibt angezeigt und geht erst, wenn IB0 = 0 wird und/oder die Meldung quittiert wurde,
oder Meldung "Fehler 2" geht sofort - es soll immer nur höchstens eine Meldung angezeigt sein?

(4) Wenn nur der Wert des Störcodes ohne erklärenden Text als Meldung angezeigt werden soll, dann könnte man das auch als Analogmeldung mit eingebetteter Variable realisieren.

Harald
 
Warum dafür eine FOR-Schleife? Man könnte einfach so schreiben:
Code:
[COLOR=#008000]// IF MY_BYTE > 0 AND MY_BYTE <= 255 THEN[/COLOR]
       MY_ARRAY[MY_BYTE] := TRUE;
[COLOR=#008000]// END_IF;[/COLOR]
Stimmt natürlich. Verblüffend einfach, zumindest so weit erst einmal.
Es scheint aber so wie so nicht das zu sein, was gesucht wird.

Aber was stimmt mit meinem Code nicht? Bei mir wird er normal dargestellt. Stimmt nur die Ausrichtung nicht, oder läuft da was richtig schief?

 
Vielen Dank an alle, die sich um mein Problem bemühen. Ich komme mit Peters Anleitung gut zurecht. An IB0 bekomme ich von einer S5 (AB15) 256 Meldetexte. Die Wandle ich gleich im OB1 um:
Conv - Char IB0 to Int MW100 (var_Fehlernr). Somit habe ich meine 0-255 Meldungen. Funktioniert so weit. Danach im HMI meine Textliste (Name: Fehler, Auswahl: Wert/Bereich). Darunter die Einträge in die Textliste mit Wert 0-255 dahinter meine Meldungen. Weiterhin erstelle ich ein Bild mit symbolischem E/A Feld. Als Prozess Variable: var_Fehlernr (PLC-Variable: var_Fehlernr), Modus Ausgabe, Inhalt: Fehler.

Allerdings fehlt mir noch etwas - die Fehler werden nicht angezeigt.

Ich habe auch keine Fehler oder Meldungen bei der Übertragung. Die Kommunikation ist OK.

Ich möchte lediglich: Wenn am IB0 (MW100) eine Änderung auftritt (egal ob rauf oder runter 0-255), dass diese im Display als Fehler angezeigt wird. Ändert sich der Wert in IB0 soll der nächste Fehler angezeigt werden.

Fehlt mir noch ein Trigger, um das ganze anzustoßen?

Ach ja...... TIA 15.1 Basic, CPU 1212C, KP300Basic
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein dir fehlt kein Trigger. Kannst du vielleicht mal einen Screenshot von den Eigenschaften Punkt Allgemein von deinem symbolischen EA Feld am HMI machen? Hast du bei Textliste deine erstellte Textliste eingetragen?
 
füg auch mal ein ea-fald dort ein welches dir den prozesswert nicht symbolisch sondern dezimal anzeigt ein.
 
Zurück
Oben