Siwarex U Fehlerauswertung

ukofumo

Level-2
Beiträge
93
Reaktionspunkte
8
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich kämpfe gerade für ein Projekt mit der Siwarex U

Die Siwarex (einkanalig) hängt direkt an der cpu (314), die Auswertung mache ich mit dem Beispielprog. aus dem Projektierungspaket.
Soweit sogut, funzt eigendlich auch bestens.
Nun möchte ich aber nicht alle Fehlerbits (DB9.DBX106.0 - DBX109.7) einzelnd auswerten und in der Visualisierung für jeden Fehler einen Text hinterlegen.
(mit den meisten Fehlern kann der Bediener sowiso nix anfangen)
Meine Überlegung geht nun dahin die Fehlerbits als Doppelword abzufragen (DB9.DBD106 <> 0 dann Fehler), in dem Fehlertext der Visu soll dann ein Fehlercode eingebunden werden (die genaue erläuterung szeht dann in der Bedienungsanleitung)
Und genau da stehe ich auf dem Schlauch.... :-?
Meine Vorstellung zum Fehlercode: wenn DBX106.0 dann Code:1; wenn DBX106.1 dann Code:2; wenn DBX106.2 dann Code:3 usw.
Ich könnte nun hingehen und für jedes der 32 Bit jeweils einen MoVE dranhängen.
Beispielsweise:
Code:
// erstes Bit:
U DB9.DBx 106.0
L 1
T #Fehlercode      // Integervariable
// zweites Bit
U DB9.DBx 106.1
L 2
T #Fehlercode
// drittes Bit
U DB9.DBx 106.2
L 3
T #Fehlercode
...
...
...
// letztes Bit
U DB9.DBx 109.7
L 32
T #Fehlercode

Das gabze erscheint mir aber ziemlich "umständlich"
gibts da einfacherer bzw. kürzere möglichkeiten?

Gruß ukofumo
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zu deinem Code:
Dein Besispielcode funktioniert nicht, da Lade- und Transferbefehle nicht VKE-Abhängig sind. Also muß nach dem UND ein Sprung erfolgen.

Code:
// erstes Bit:
L 1
U DB9.DBx 106.0
SPB TRAN
// zweites Bit
L 2
U DB9.DBx 106.1
SPB TRAN
// drittes Bit
L 3
U DB9.DBx 106.2
SPB TRAN
...
...
...
L 0
TRAN :T #Fehlercode
 
Oups , ja Ok (war wohl heute morgen etwas früh) :-?
Hast recht Ralle...

Also meine ursprüngliche Version schaute so aus:
Code:
      U     DB9.DBX  106.0
      SPBNB M001
      L     1
      SPB   M033
M001: U     DB9.DBX  106.1
      SPBNB M002
      L     2
      SPB   M033
M002: U     DB9.DBX  106.2
      SPBNB M003
      L     3
      SPB   M033

.....
.....
.....

M031: U     DB9.DBX  109.7
      SPBNB M032
      L     32
      SPB   M033

M032: L     0
M033: T     #Fehlercode

Die Version von Ralle ist da schon um einiges kürzer.
m.E. müsste es doch irgendwie mit Pointer und oder Loopschleife auch noch um einiges kürzer gehen... (kopfkratz)
 
Zuletzt bearbeitet:
Ich hab das ganze nun mal so gelöst:

Code:
      L     DB9.DBD  106
      L     #testbit
      UD    
      T     #speicher

      L     #speicher
      L     0
      <>D   
      SPBN  next
      L     #errorcode
      T     #Fehlercode

next: L     #errorcode
      L     32
      >I   
      SPB   exit

      L     #errorcode
      INC   1
      T     #errorcode
      L     #testbit
      SLD   1
      T     #testbit
      SPA   quit

exit: L     1
      T     #errorcode
      T     #testbit

quit: U     #reset
      SPBN  out
      L     0
      T     #Fehlercode
out:  NOP   0
Erläuterung dazu:
#testbit ist eine statische Doppelword-Variable die mit 1 vorbelegt ist (Bit 0 gesetzt)
Bei jedem Zyklus wird im #testbit das Bit jeweils um eine Stelle nach links geschoben,
#errorcode ist ebenfalls eine statische Variable (Integer) die ebenfalls mit 1 vorbelegt ist.
bei jedem Zyklus wird #errorcode um 1 aufaddiert.

Ist nun sowohl im DB9.DBD106 als auch im #testbit das gleiche bit gesetzt ist die Variable #speicher nicht mehr gleich null und es wird der wert von #errorcode an die Ausgangsvariable #Fehlercode übergeben.

Ist #errorcode größer 32 werden beide Zählvariablen wieder mit 1 vorbelegt und die chose beginnt von vorne

Der Resetbutton der Visu der auch die einzelnen Fehlerbits zurücksetzt, setzt zum schluss die Ausgangsvariable #Fehlercode wieder zu Null

Ich denke so könnte es gehen....

Gruß ukofumo
 
Zuletzt bearbeitet:
Zurück
Oben