Code:
Mir schwebt für's Erste Folgendes vor:
Ich nehme ein EW.
Der prinzipielle Aufbau: (als Beispiel)
=> EW 0 (= Fehler-WORD für max. 15 Fehlerzustände)
geht, vom Prinzip. Damit legst Du Dich aber definitiv auf eine feste Struktur der Beschaltung der Eingangskarten fest.
Vorschlag: Die Fehlereingaenge werden auf Datenwoerter eines "Fehlerdatenbausteins" z.B. DB111 gelegt. Der (z.B.) DB112 ist genau so gross wie der DB111. Vorteil: Die Fehler werden so geordnet, dass ein Datenwort oder -byte einer Fehlerlampe (Motor 1 gestoert) entspricht. Eine zweite Fehlerlampe gibt die Art des Fehlers an, z.B. Bit 0 = Motorschutz.
Fehler = 1
Eingangsvariable Start = INT
Eingangsvariable Lenght = INT
Eingangsvariable koennen auch Zahlen sein...
Temporaere Variable temp = INT
U #RESET Dein Resettaster oder "Fehlerweiterschalt-Taster"
S M100.0 ....ist nur een Vorschlag...
L #Start
SLW 3
LAR1
L #Lenght
loop: T #temp
AUF DB 112
L DBW [AR1,P#0.0] oder L DBB [AR1,P#0.0]
AUF DB111
L DBW [AR1,P#0.0] oder L DBB [AR1,P#0.0]
== I
spb Nbit //kein Fehler -> next bit
> i
spb Fehl //naechster Fehler
//
Backup gleich machen, da Fehler "gegangen" ist
AUF DB112
T DBW [AR1,P#0.0]
spa Nbit //.. und naechster Patient....
Fehl: T AW 60 //sind Deine Fehler-Art-Lampen
L #temp
ITB //fuer Deine 7-Segmentanzeige
T AW 62
UN M100.0 //...unsere "Weiterschaltng"
BEB //kein Reset -> machen wir schluss
R M100.0
AUF DB 111
L DBW [AR1,P#0.0] oder L DBB [AR1,P#0.0]
AUF DB112
T DBW [AR1,P#0.0] oder T DBB [AR1,P#0.0]
Nbit: TAR1 //Loop vorbereiten
L P#2.0 oder L P#1.0
+D
LAR1
L #temp
LOOP loop //...und loopen
So, ich habe das mal so ohne zu testen mal hingeschrieben. Sind bestimmt jede Menge Fehler drinn. Aber der Sinn ist das Entscheidende. Prinzip: Jeder Fehler wird angezeigt mit 7-Segmentanzeige und 8 oder ... bis max. 16, oder was weiss ich mit wieviel LEDs. Die LED symbolisieren die Fehlerart. Die Siebensegmentanzeigen den Ort, Aggregat oder Maschinenteil.
mfg
Hubert
Falls Du mir mal das S5-Programm mailen willst:
HubertSchoenherr@mail.RU