Step 7 Indirekt auf Bit adressieren

dennisbz

Level-2
Beiträge
142
Reaktionspunkte
6
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,


ich steh gerade auf dem Schlauch...
Wie würdet ihr euch merken, ob eine Dezimalzahl (0 - 9999) bereits gelesen wurde?

Mein Ansatz: Ich habe in DB ein Array vom Typ Bool mit 9999 Bits.
Wenn eine Nummer geprüft werden soll, schaue ich dort, ob diese bereits geprüft wurde. Falls nein soll das getan werden und das entsprechende Bit im DB gesetzt werden.
Funktioniert in PLCSIM gut mit einem Array vom Typ INT, auf der 315-2 DP leider nicht, da der DB zu groß ist.

Mein Problem ist, wie komme ich auf die Bit Adresse? Muss ich das echt ausrechnen?


Danke voarb!
 
Mein Problem ist, wie komme ich auf die Bit Adresse? Muss ich das echt ausrechnen?
Nein, das musst Du nicht selbst echt ausrechnen. Dafür sollte die Kapazität der 315-2 DP noch ausreichen.
Code:
// iIdxDerDezimalzahl := 0..9999 ;
iByteNr := iIdxDerDezimalzahl / 8 + iByteNrDesErstenBytes ;
iBitNr  := iIdxDerDezimalzahl MOD 8 ;

// ... und der umgekehrte Weg ...
iIdxDerDezimalzahl := (iByteNr - iByteNrDesErstenBytes) * 8 + iBitNr ;

PS:
Geht es nicht mit Array Of Bool?
 
Danke für eure Nachrichten!
Gemeinsam habt ihr mich dann auf die Idee gebracht, das ganze in SCL zu machen. Paar Zeilen und funktioniert...
Ich weiß auch nicht warum ich in 5.x immer so ein Bogen um SCL mache(n musste), ist doch in diesem Fall wirklich viel schneller und auch nachvollziehbarer als mit Adressregistern rumzuhantieren...
 
Zurück
Oben