Abfrage Bool und Integer via FC mit Pointer

Waelder

Level-2
Beiträge
964
Reaktionspunkte
117
Zuviel Werbung?
-> 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....
Code:
FEHLER    ARRAY[1..32]            
    BOOL            
Zaehler    ARRAY[1..32]            
    INT
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

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
Danke vorab.
 

Anhänge

  • db2.dbx68.0.jpg
    db2.dbx68.0.jpg
    95,8 KB · Aufrufe: 20
  • db2.dbx3.7.jpg
    db2.dbx3.7.jpg
    96,2 KB · Aufrufe: 22
Zuviel Werbung?
-> Hier kostenlos registrieren
ja der adressiert falsch siehe den shot von "68.0" da stimmt definitiv was mit meiner berechnung/adressierung nicht nicht
ich bin ja auch nicht grad der superheld was pointers und anys angeht. Ich versuch mich noch....
Code:
Ereignis 2 von 10:  Ereignis-ID 16# 2522
Bereichslängenfehler beim Lesen 
Global -DB , Wortzugriff, Zugriffsadresse:   1092
Angeforderter OB: Programmierfehler-OB (OB 121)
Prioritätsklasse:  1
interner Fehler, kommendes Ereignis
19:04:42.066  06.01.1994
mein DB ist halt nur 612 Byte lang, das die CPU stehen bleibt ist klar...
Ich häng mal den DB als awl quelle ran
 

Anhänge

  • DB2.txt
    29,3 KB · Aufrufe: 10
Der Aufbau deines DB stimmt mit deinen Berechnungen nur bis zum DBX 3.7 zusammen zusammen.
Danach müsstest du anders umrechnen, da du dazwischen 32 INT Werte hast

Schau dir mal online den Wert an der bei 68.0 rauskommt(220Hex=544 dez) das multiplizierst du mit 2 und schon hast du deinen Schreibfehler.
Bau deinen DB so auf, dass du das so einfach berechnen kannst. Die Structur verierst du allerdings damit.
 
Zuletzt bearbeitet:
Zurück
Oben