Waelder
Level-2
- Beiträge
- 964
- Reaktionspunkte
- 117
-> Hier kostenlos registrieren
Hallo leute ich habe einen DB mit einer Struktur, er ist wie folgt aufgebaut :
DB2
struct1
32 x Bool (fehler 1-32)
32 x Integer (zähler 1-32)
struct2
32 x Bool (fehler 1-32)
32 x Integer (zähler 1-32)
struct3
32 x Bool (fehler 1-32)
32 x Integer (zähler 1-32)
usw....
das 8x immer die gleichen Abstände
ich möchte nun via FC anhand der Startadresse zb db2.dbx0.0 den entsprechenden Integer anspringen also
db2.dbx0.0 = db2.db4
db2.dbx0.1 = db2.db6
db2.dbx0.7 = db2.db18
usw.
das klappt bei meinem FC bis db2.dbx3.7 das ergibt dann db2.db66
gebe ich aber als Startadresse db2.dbx68.0 dann stimmt zwar intern die Adressierung zu db2.dbx68.0 aber mein Integer bereich auf 1092... CPU = Stop
da habe ich wohl einen Bock im Programm wie bringe ich das wohl auf die Reihe.. anbei mein auszug des aufrufs im FC incl screenshot bei db2.dbx0.7 = db2.db18 und db2.dbx68.0
Danke vorab.
DB2
struct1
32 x Bool (fehler 1-32)
32 x Integer (zähler 1-32)
struct2
32 x Bool (fehler 1-32)
32 x Integer (zähler 1-32)
struct3
32 x Bool (fehler 1-32)
32 x Integer (zähler 1-32)
usw....
Code:
FEHLER ARRAY[1..32]
BOOL
Zaehler ARRAY[1..32]
INT
ich möchte nun via FC anhand der Startadresse zb db2.dbx0.0 den entsprechenden Integer anspringen also
db2.dbx0.0 = db2.db4
db2.dbx0.1 = db2.db6
db2.dbx0.7 = db2.db18
usw.
das klappt bei meinem FC bis db2.dbx3.7 das ergibt dann db2.db66
gebe ich aber als Startadresse db2.dbx68.0 dann stimmt zwar intern die Adressierung zu db2.dbx68.0 aber mein Integer bereich auf 1092... CPU = Stop
da habe ich wohl einen Bock im Programm wie bringe ich das wohl auf die Reihe.. anbei mein auszug des aufrufs im FC incl screenshot bei db2.dbx0.7 = db2.db18 und db2.dbx68.0
Code:
//Erzeuge Adressbereiche
L P##ERR
LAR1
L W [AR1,P#0.0]
T #DB_NR
L D [AR1,P#2.0]
L DW#16#FFFFFF
UD
T #ADDR
T #ADDR_COUNT
//Lese Fehlerbit
AUF DB [#DB_NR]
U DBX [#ADDR]
= #ERR_TMP
//Lese Counter
L #ADDR_COUNT
L L#2
*D
L #DIFF //ist 4
+D
SLD 3
T #ADDR
L DBW [#ADDR]
T #ERR_COUNT