Fehler: Array Größe

ysh032

Level-1
Beiträge
38
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen:
Ich habe ein Array (Data_Ch1) in meinem Programm als Speicherpuffer für aus Klemmer übernommene Daten deklariert und mit Hilfe von CSV-Funktionsblöcke und File-Funktionsblöcke (Open=>Write=>Close) wird diese Array in einer CSV-Datei gespeichert.
\Code:
VAR_INPUT
Data_Ch1 : ARRAY [1..3999] OF ST_LogTimestampedValue;
End_VAR

TYPE ST_LogTimestampedValue :
STRUCT
nIdx:UDINT;
nDataCnt:UDINT;
nnTimestamp:T_DCTIME;
wValue:WORD; (*raw data*)
rValue:REAL;
END_STRUCT
END_TYPE

Wenn diese Array 3999 lange ist, kann das Programm ohne Problem laufen und die bestimmte CSV-Datei kann als auch richtig geschrieben werden. Aber wenn ich die Länge der Array (Data_Ch1) mehr als 3999 verändere, kann das Programm weiter ohne Problem laufen. trotzdem die bestimmte CSV-Datei nicht geschrieben werden kann. Wenn ich die CSV-datei eröffnen, entdecke ich, dass die Datei leer ist, nichts dazu geschrieben wird. Weiß jemand was ist die vieleichte Ursache?

Noch zu bemerken ist, ich habe die Parameter unter Projekt=>Optionen=>TwinCAT
Input: 2000KBytes
Output:2000KBytes
Memory:4000KBytes
Retain:4000KBytes
Data:20000KBytes verändert. Trotzdem weiß ich noch nicht, was stellen diese Parameter dar. Aber wenn ich diese Parameter in default wert (16;16;32;32;1024) sein lasse, entsteht die Fehler bei Übersetzung des Programms: Fehler 3801: Variable XXXXXX zu groß ist
 
Hallo,

wie groß ist denn die Variable?
Mach doch mal ein SIZEOF(Data_Ch1).

Mehrere Möglichkeiten:
a) "Data" ist nicht groß genug
b) "Timeout" des Schreibbausteins zu gering gewählt (Große Datenmenge = mehr Zeit)
c) Der Baustein läßt intern nicht mehr als "MAXSIZE" zu
d) Die Steuerung hat zu wenig Arbeitsspeicher

Gruß,
Mac203
 
Zuviel Werbung?
-> Hier kostenlos registrieren
nach SIZEOF (Data_Ch1[1..3999]) ist das Ergebnisse 1023744 Byte. Bei Schreiben mehr als diese Datemenge führt der Baustein ein bError mit ID: 1802 (Out of Menmory). Ich denke, es gibt MAXSIZE für zu schreibende Datenmenge in Baustein FB_Filewrite. Aber weiß man nicht wie groß ist es.
 
Es gibt eine globale Konstante für das File_Seek_End.
Aber diese liegt bei 4GB!!
Code:
FILE_SEEKEND                                :     DWORD    := 16#FFFFFFFE;
Ich denke, da solltest Du eine offzielle Support-Anfrage stellen. Auf diesem Weg wird das schwer....

Erweiterung:
Ich hab gerade noch mal in die LIB geschaut:
Ich denke nicht, dass es an einer internen Grenze ligt, da dort ein "normale" FW_AdsRdWrt verwendet wird.
Dieser ist allerdings auf den Router-Speicher angewiesen. Vielleicht reicht dieser nicht aus bzw. wird zu stark von anderen Systemteilen benutzt und muss erweitert werden?
 
Zuletzt bearbeitet:
Es gibt eine globale Konstante für das File_Seek_End.
Aber diese liegt bei 4GB!!
Code:
FILE_SEEKEND                                :     DWORD    := 16#FFFFFFFE;
Ich denke, da solltest Du eine offzielle Support-Anfrage stellen. Auf diesem Weg wird das schwer....

Erweiterung:
Ich hab gerade noch mal in die LIB geschaut:
Ich denke nicht, dass es an einer internen Grenze ligt, da dort ein "normale" FW_AdsRdWrt verwendet wird.
Dieser ist allerdings auf den Router-Speicher angewiesen. Vielleicht reicht dieser nicht aus bzw. wird zu stark von anderen Systemteilen benutzt und muss erweitert werden?
Von was hängt die Größe des Router-Speichers ab? ob jeder PC ein unterschiedlichen großen Router-Speicher hat.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Router-Speicher ist bei den CX und IPC Steuerung per Default auf 2048 KB eingestellt und kann im Rahmen des Arbeitsspeichers dynamisch erweitert werden.
Hierzu im SysMan in
Sysstem-Konfiguration-->Echtzeiteinstellungen

den gewünschten Wert eintragen.
 
Zurück
Oben