-> Hier kostenlos registrieren
Hallo zusammen,
ich möchte einen Standartbaustein für Statistiken schreiben. Dazu hab ich einen Statistik_DB der folgendermaßen aufgebaut sein kann:
Die Anzahl der Aufnahmen kann variieren.
Nun habe ich einen Statistik FB welcher die Daten verwalten soll. Ich möchte dem Baustein als IN Parameter die Anzahl der Stationen als INT vorgeben und die oben genannte Struktur als ANY IN_OUT.
nun möchte ich die Daten des DB auf die lokale Variable "Statistik_Register_lokal" umkopieren, die Größe kann je nach übergebener Anzahl unterschiedlich sein, daher dachte ich das ist mit einer Schleife am besten zu lösen. Hier mein Ansatz:
Nun geht aber meine CPU in Stop wegen "Bereichslängenfehler beim Lesen".
Kann das allerdings nicht verstehen, die Schleife läuft falls 8 Stationen übergeben werden ja auch nur 8 mal durch.
Warum wird dann hier in einem nicht vorhanden Speicherbereich gelesen?
Wenn ich +AR2 auskommentiere gibt es keine Probleme. Dann wird der erste Datensatz des DBs auf die lokale Daten 8 mal kopiert.
Aber solbald ich +AR2 wieder aktiv schalte geht die CPU in Stop!
Grüße Pico
ich möchte einen Standartbaustein für Statistiken schreiben. Dazu hab ich einen Statistik_DB der folgendermaßen aufgebaut sein kann:
Code:
Statistik_Kamera : STRUCT
Anzahl_Aufnahme_1 : INT
Anzahl_Aufnahme_2 : INT
Anzahl_Aufnahme_3 : INT
Anzahl_Aufnahme_4 : INT
Anzahl_Aufnahme_5 : INT
Anzahl_Aufnahme_6 : INT
Anzahl_Aufnahme_7 : INT
Anzahl_Aufnahme_8 : INT
END_STRUCT
Die Anzahl der Aufnahmen kann variieren.
Nun habe ich einen Statistik FB welcher die Daten verwalten soll. Ich möchte dem Baustein als IN Parameter die Anzahl der Stationen als INT vorgeben und die oben genannte Struktur als ANY IN_OUT.
Code:
IN Parameter:
IN_INT_Anzahl Stationen : INT
IN OUT Parameter:
IN_OUT_ANY_Register : ANY
STAT Parameter:
Statistik_Register_lokal : Array [0..127] Of Int
nun möchte ich die Daten des DB auf die lokale Variable "Statistik_Register_lokal" umkopieren, die Größe kann je nach übergebener Anzahl unterschiedlich sein, daher dachte ich das ist mit einer Schleife am besten zu lösen. Hier mein Ansatz:
Code:
TAR2
T #T_DW_AR2_Sicherung // Sichern Adressregister
L DW#16#FFFFF // nicht relevante Bits ausblenden
UD
T #T_DW_Instanzanfang // Anfang der Instanzdaten merken
L P##IN_OUT_ANY_Register
+D
LAR2 // Zeiger AR2 auf DB setzen
L W [AR2,P#4.0] // und auslesen
T #T_INT_DB_Komponente // DB für Komponente aufschlagen
AUF DB [#T_INT_DB_Komponente]
L D [AR2,P#6.0] // Zeiger AR2 auf DW setzen
T #T_DW_Dat_Komponente
LAR2
LAR1 P##Statistik_Register // Zeiger AR1 auf T_Struktur setzen
L 0
T #ST_INT_CopySchleife
L #IN_INT_Anzahl_Stationen
N1: T #ST_INT_CopySchleife
L W [AR2,P#0.0] //Kopiere Daten
T W [AR1,P#0.0]
L P#2.0
+AR1
+AR2
L #ST_INT_CopySchleife
LOOP N1
LAR2 #T_DW_AR2_Sicherung // Rücksichern Adressregister AR2
Nun geht aber meine CPU in Stop wegen "Bereichslängenfehler beim Lesen".
Kann das allerdings nicht verstehen, die Schleife läuft falls 8 Stationen übergeben werden ja auch nur 8 mal durch.
Warum wird dann hier in einem nicht vorhanden Speicherbereich gelesen?
Wenn ich +AR2 auskommentiere gibt es keine Probleme. Dann wird der erste Datensatz des DBs auf die lokale Daten 8 mal kopiert.
Aber solbald ich +AR2 wieder aktiv schalte geht die CPU in Stop!
Grüße Pico