Texte auf externes Display ausgeben

drudge

Level-1
Beiträge
26
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo allerseits,

ich habe mal eine Frage zur Programmierung.

Und zwar möchte ich Fehlermeldungen auf ein Display von einer Funkfernbedienung anzeigen lassen.
Momentan ist es im Programm so, dass die Fehler im Merkerbereich 100 bis 120 definiert werden.

Das Display nutzt insgesamt 5 Ausgangsbytes zur Anzeige. Mit jedem AB habe ich einen Wertebereich von 0-255.
Somit kann ich jeweils pro AB 256 Fehlermeldungen am Display ausgeben.

Wie kann ich das nun am besten realisieren? Wenn zB. M100.0 „high“ ist, habe ich im MB100 die Wertigkeit 1, transferiert nach AB1 würde mir somit Meldetext Nr. 1 angezeigt werden.
Wenn nun aber M100.0 und M100.1 „high“ sind, bekomme ich die Wertigkeit 3 und diese bringt mir dann den Meldetext Nr. 3 zur Anzeige, statt wie gewünscht Nr. 1 und Nr. 2, die ich auch gerne durch Tastendrücke „durchtickern“ wollen würde, da ich nur 2 Zeilen pro Meldung nutzen möchte.

Meine Frage ist, hast jemand hier so was ähnliches schon mal programmiert? Evtl. ne Idee für mich, dass zu realisieren? Mit einer Maskierung vielleicht?
 

Anhänge

  • hbc-1.jpg
    hbc-1.jpg
    382,8 KB · Aufrufe: 46
  • hbc-2.jpg
    hbc-2.jpg
    115,8 KB · Aufrufe: 49
Hallo,

mit ner Schleife den Bereich abscannen, Bits zählen und fürs Scrollen Vergleich mit der gewünschten Anzahl und Ausgabe des "Index".

André
 
Zuviel Werbung?
-> Hier kostenlos registrieren
u m100.0
l 1
spb n1
u m100.1
l 2
spb n2

.
.
.

n1: T db:Fehlerwort

dh. bitweises durchsuchen und rausspringen wenn der erste Fehler gefunden wird. Geht natürlich auch als Schleife.

peter(R)
 
Mit dieser Lösung würde aber nur der erste Treffer ausgegeben. Der TE möchte auf Tastendruck o.ä. ggf. weitere Meldungen anzeigen.

Eine mögliche Lösung wäre mit jedem SPS-Zyklus bedingt 1 Bit weiterzuspringen. Ist das Bit aus, wird der Index erhöht. Ist das Bit an, bleibt der Index "eingefroren", bis eine Taste gedrückt wurde. Ggf. bietet es sich an, die Anzeige an eine Zeit zu koppeln und die Texte nacheinander anzuzeigen.
 
Hi.

Danke erst mal für eure Bemühungen.

Also mein erstes Problem ist ja, dass die Auswertung nicht bitweise sondern als INT Wert erfolgt.
Darum kann ja jedes AB immer nur einen Wert haben.

Somit müsste ich nun jedem Merker einen Wert zuordnen:

M100.0 high --> ABx = 0 (Anzeige Text Nr. 1)
M100.1 high --> ABx = 1 (Anzeige Text Nr. 2)
.
.
.
M120.0 high à ABx = 140 (Anzeige Text Nr. 141)
.
.
.

Usw.

Damit würde ich aber wie gesagt nur eine Meldung pro AB anzeigen können.

Ne Überlegung wäre, die Werte der verschiedenen Merker, zB. M102.0 high = Wert 14 usw. in einen Puffer zu schreiben und diese Werte mit einem Pointer anzeigen zu lassen. Bei einem Tastendruck springt er immer zum nächsten Merker, der einen Wert größer 0 hat, weiter.

Was haltet ihr von der Idee? Wäre das sehr aufwändig zu programmieren?
Bin grade dabei, mich etwas mit indirekter Adressierung zu beschäftigen. Habe das selbst bisher noch nie angewandt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ne Überlegung wäre, die Werte der verschiedenen Merker, zB. M102.0 high = Wert 14 usw. in einen Puffer zu schreiben und diese Werte mit einem Pointer anzeigen zu lassen. Bei einem Tastendruck springt er immer zum nächsten Merker, der einen Wert größer 0 hat, weiter.
Es gibt einen fertigen FIFO-Baustein, den Du als Grundlage für so etwas verwenden könntest. Dann kannst Du auch ohne Pointer arbeiten.
 
Da das ruhig alle wissen dürfen: ;)
Der betreffende Baustein mit dem Namen FIFO TABLE liegt in der Standard Library im Unterordner TI-S7 Converting Blocks.
 
Es gibt einen fertigen FIFO-Baustein, den Du als Grundlage für so etwas verwenden könntest. Dann kannst Du auch ohne Pointer arbeiten.

Normalerweise braucht er so etwas nicht.
Wenn er, wie André schon schrieb, die Bits durchzählt und an Hand der Zählung die Fehlernummern weiß, kann er einfach bei jedem True eines Bits in der Zählung "anhalten", den Text ausgeben und erst mit der Zählung fortfahren, wenn eine entprechende Taste am OP betätigt wird, da braucht es keinen FIFO. Der muß sonst auch immer aktualisiert werden, was einen gewissen Aufwand mit sich bringt.
Zum Durchzählen der Bits gibt es einige Ansätze hier im Forum, wäre mal unter "Bits zählen" zu suchen. Gut wäre es für ein einfaches Durchzählen der Bits, wenn die Fehlerbits auch die richtige Reihenfolge hätten, so dass beim Zählen auch das 76. Bit die Fehlernummer 76 hat, das kann man ja festlegen (Bytereihenfolge in DBD, 32 Bit, beachten). Gute Dienste leisten dabei Befehle wie rechts oder links Rollen, man kann auch die Schiebebefehle nutzen.

Hier gibt es sogar ein gutes Beispiel von Kai: http://www.sps-forum.de/showthread.php/14611-Bits-im-DB-42-z%E4hlen?highlight=Anzahl%20Bits

Da werden zwar Bits gezählt, aber das kann man entsprechend umschreiben. Mit dem Anhalten wird das dort etwas schwieriger, aber über einen Zeiger, der beim Wiedereinsprung, den Start der Suche vorgibt, kann man das durchaus lösen.
 
Zuletzt bearbeitet:
Vielen Dank.
Dann werde ich mal weiter die Forums-Suche quälen... ^^

Für weitere Tipps oder Anregungen bin ich sehr dankbar. :)
 
Hi!
was haltet ihr hiervon?
Hab es nicht getestet aber müßte gehen oder? Nur das Durchdrücken der Meldungen müßte man noch machen...
Code:
      L     P#100.0                     // Lade Fehlerpeicheranfangsandresse
      T     MD     0                    // Speicher in MD0

      L     0                           // Lade Wertigkeit INT für Fehlerspeicheranfangsadresse
      T     MW     4                    // Speicher Wertigkeit Fehler in MW4


ma_2: U     M [MD 0]                    // Liegt Fehhlermeldung an ??
      SPBN  ma_1

      L     MW     4                    // Lade Wertigkeit und Transferiere an Anzeige
      T     AB     1

ma_1: L     P#0.1
      L     MD     0                    // Adresse je Schleife +1 Bit
      +D    
      T     MD     0

      L     1                           // Wertikeit der Alrammeldung je Schleife +1 INT
      L     MW     4
      +I    
      T     MW     4


      L     MD     0
      L     P#120.7                     // Kontrolliere auf Fehlerendadresse und verlasse Schleife
      ==D   
      SPBN  ma_2
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab gerade selber nen Fehler entdeckt.
das ganze funktioniert nur solange nur eine Meldung ansteht ansonsten wird immer nur die Meldung mit der höchsten Wertigkeit Angezeigt. Man muß also zwingend nicht direkt aus AB1 schreiben sondern erst Speichern und wenn noch ne Meldung dazu kommt in den nächsten Speicher... Dann wäre das mit dem Durchklicken der Meldungen einfach...
 
So aber jetzt mit Speicherung der letzten 5 Fehler...

Code:
      L     P#100.0                     // Lade Fehlerpeicheranfangsandresse
      T     MD     0                    // Speicher in MD0

      L     0                           // Lade Wertigkeit INT für Fehlspeicheranfangsadresse
      T     MW     4                    // Speicher Wertigkeit Fehler in MW4


ma_2: U     M [MD 0]                    // Liegt Fehlermeldung an ??
      SPBN  ma_1

      L     MW    16                    // Fehlerspeicher 4 nach 5
      T     MW    18

      L     MW    14                    // Fehlerspeicher 3 nach 4
      T     MW    16

      L     MW    12                    // Fehlerspeicher 2 nach 3
      T     MW    14

      L     MW    10                 // Fehlerspeicher 1 nach 2
      T     MW    12

      L     MW     4                    // Lade Wertigkeit Letzter erkannter Fehler und Transferiere an Fehlerspeicher 1
      T     MW    10

ma_1: L     P#0.1
      L     MD     0                    // Adresse je Schleife +1 Bit
      +D    
      T     MD     0

      L     1                           // Wertikeit der Alarmmeldung je Schleife +1 INT
      L     MW     4
      +I    
      T     MW     4


      L     MD     0
      L     P#120.7                     // Kontrolliere auf Fehlerendadresse und verlasse Schleife
      ==D   
      SPBN  ma_2
 
Zuletzt bearbeitet:
Hey Maggi,

vielen Dank.
Ich schaue es mir am WE mal genauer an und werde es dann evtl. auch mal in der Praxis testen können.
Das Beispiel vom Kai schaue ich mir ebenfalls mal an.

Schönes WE euch allen.
 
Zurück
Oben