rollierende Anzeige von Betriebszuständen auf OP3

mega_ohm

Level-2
Beiträge
884
Reaktionspunkte
93
Zuviel Werbung?
-> Hier kostenlos registrieren
Liebe Gemeinde,

ich möchte auf einem Display rollierend die Betriebszustände und Fehlermeldungen ausgeben. Dafür habe ich mir einen DB gebastelt.
z.B.:
db1.dbx0.0 => Motorschutz Lüfter x ausgelöst
db1.dbx0.1 => Motorschutz Lüfter y ausgelöst
db1.dbx0.2 => Pneumatik- Ausfall
db1.dbx0.3 => Fehler 4
...
db1.dbx1.0 => Automatik- Betrieb
db1.dbx1.1 => manueller Betrieb
...
db1.dbx?.? => Betriebszustandsmeldung x

Hat jemand eine Idee, wie man die Bits, die Signal= high sind, der Reihe nach anzeigen kann ?

mfg
 
Hallo mega_ohm,

Du könntest eine Textliste im OP anlegen, worin die Meldungen stehen.
Als nächstes eine Variable, die auf ein DBW in einem DB verweist.
Ein Ausgabefeld mit Darstellung Textsymbol.

In der SPS nimmst Du eine Schleife über alle Bits. Wenn ein Bit = 1 dann Bitnummer in die Variable fürs OP eintragen und Zeit ablaufen lassen, wie lang die Meldung anstehen soll.

Grüße
Gebs
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo mega_ohm,​



Du könntest eine Textliste im OP anlegen, worin die Meldungen stehen.​
Das hatte ich ich gemacht.​
Als nächstes eine Variable, die auf ein DBW in einem DB verweist.
Ein Ausgabefeld mit Darstellung Textsymbol.​
:confused:
Hast Du dazu bitte mal ein Beispiel ?
Wie sieht denn die Variable, die "auf ein DBW in einem DB verweist", aus ???
Nicht wie ein Pointer ( ? )... oder doch ?
Mir kommt die Beschreibung aus uralten C++ - Zeiten so komisch ( wie ein Zeiger auf ein Array ) vor.
In der SPS nimmst Du eine Schleife über alle Bits. Wenn ein Bit = 1 dann Bitnummer in die Variable fürs OP eintragen und Zeit ablaufen lassen, wie lang die Meldung anstehen soll.
:D Weil ich grad schonmal nach Beispielen frage... hast Du dafür auch noch eins ? ( für die Schleife )

Wie ich das dem OP3 alles begreifbar machen will... dafür habe ich schon fast einen Plan.
Aber ich würde gern mal lern-sehen, wie in Step7 eine Schleife "aussieht". Ich habe die immer so gebastelt, wie ich es aus ASM-,Pascal- Zeiten kenne... und da ich in Step7 noch nix gefunden habe, was "If- Then" oder "Do- While" entspricht... sehen bei mir die Schleifen eher aus, wie kurz nach der Erfindung von BASIC ( auf'm c64) :ROFLMAO:

mfg
 
Hallo mega_ohm,

für die Parametrierung am OP hab' ich ein paar Bitmaps erstellt.

Für die Schleife:
Code:
U T1 // Zeit für Meldung läuft
SPB ENDE 

//Prüfung der Bits
L DB1.DBW 0 // Fehlermeldungen
L 0
==I // Keine Meldung vorhanden
SPB OK
L MW 0 // Bit-Nummer der letzten Meldung
L DB1.DBW 0 // Fehlermeldung
SLW // schon bearbeitete Meldungen rausschieben
T MW 2 // Hier sind die unbearbeiteten Meldungen
Loop: NOP 0 // Beginn Schleife
L MW 0 // Bit-Nummer
+ 1 
T MW 0 // Um 1 erhöhen
L MW 2 // Fehlerwort
SRW 1 // rechtes Bit rausschieben
SPP Neu // ist geschobenes Bit = 1 dann Fehler ausgeben
T MW 2 // Fehlerwort
L MW 0
L 16
>I  // Alle Bit bearbeitet?
SPBN Loop // nein, dann nächstes Bit
L 0 // Bit-Nummer zurücksetzen  
T MW 0
Neu: L MW 0 // Fehler-Nummer übergeben
T DB1.DBW X // Datenwort, das in der Variable im OP angegeben ist.

ENDE: NOP 0

L MW 0  // Bit-Nummer
L 0
<>I
L S5T#5s  // Zeit die die Meldung anstehen soll
SV T1  // Timer starten
Ich hoffe es passt so, ich hab's nicht getestet.
Grüße
Gebs
 

Anhänge

Zuletzt bearbeitet:
Hallo mega_ohm,

für die Parametrierung am OP hab' ich ein paar Bitmaps erstellt.

Für die Schleife:
Code:
...
Ich hoffe es passt so, ich hab's nicht getestet.
Grüße
Gebs
Es hat gepaßt... ganz vielen Dank dafür.

Aber ich bin gierig :-)
Passen reicht mir nicht :ROFLMAO:

Ich habe mich jetzt doch entschlossen, mir mal die Pointer- "Geschichte" näher anzuschauen...

In DB2.DBD 0 werden alle "Meldungen" definiert...

Meine Idee ist: ( es sind nur erst mal so die Grundüberlegungen, was Konkretes habe ich noch nicht ! )
- den DB2.DBD0 zu lesen.... // da werden alle Meldungen hinein geschrieben
- mittels eines Schleifenzählers das entsprechende Bit ( über einen Pointer) für eine bestimmte Zeit zu erhalten[anzuzeigen], danach nächstes Bit dieses DB2 lesen...
Wenn alle Bits "durch" sind... wieder neu anfangen.

Mal sehen, ob / wie ich Das gelöst bekomme...

Deine Schleife etc. hat mich in meiner Idee weiter gebracht...

Mfg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab's mit Hilfe von #1 über Pointer gelöst... geht einwandfrei.

Trotzdem nochmal vielen Dank für Deine Mühe... ich bin erst, nachdem ich Dein Beispiel geprüft hatte, auf die Idee mit den Pointern gekommen.
Dein Bsp. zeigte einmal nacheinander die "Meldungen" an und war danach fertig. Ich möchte aber permanent die Meldungen rollierend anzeigen => letzte Meldung = fertig, wieder mit der 1. anstehenden Meldung beginnen.

mfg
 
Zuletzt bearbeitet:
Zurück
Oben