FB_AsciiWriter - Allgemeine Informationen
Typ |
Funktionsbaustein |
Verfügbar ab |
V1.0.3.0 |
Übernommen aus |
- |
Implementiert |
- |
Versionen: |
Aktuelle Version |
Schreiben beliebiger Datenstrukturen in eine Textdatei.
HINWEIS: Der Funktionsbaustein FB_AsciiWriter funktioniert nur dann korrekt, wenn die verwendeten Datenstrukturen mit Pack_Mode = 1 gespeichert werden.
Der Funktionsbaustein schreibt die in i_pbyStructInfo angegebene Anzahl von Variablen des in i_iCount angegebenen Typs aus dem Speicher an der Adresse i_dwBufferAdr in eine Datei.
Der Schreibvorgang startet bei einer positiven Flanke an i_xExecute und hält bei Erkennung eines Fehlers oder nach erfolgreichem Schreiben aller Daten an. Während des Schreibvorgangs darf kein Parameter (außer i_xExecute) geändert werden. Zudem darf auf den Speicherbereich, auf den i_dwBufferAdr zeigt, nicht schreibend zugegriffen werden.
Die erzeugte Datei ist mit einem beliebigen Editor lesbar.
Eingang |
Datentyp |
Beschreibung |
---|---|---|
i_xExecute |
BOOL |
FALSE -> TRUE: Baustein wird aktiviert. Der Schreibvorgang beginnt. |
i_sFileName |
STRING[80] |
Name der Textdatei, in die die Variablen geschrieben werden sollen. |
i_iCount |
INT |
Maximale Anzahl der Datensätze, die geschrieben werden sollen. |
i_dwBufferAdr |
DWORD |
Adresse des Arrays, aus dem die Daten ausgelesen werden. Es muss entsprechend viel Speicher reserviert sein. a: ARRAY [0..i_iCount-1] OF Struct BufferAdr:=adr(a); |
i_pbyStructInfo |
POINTER TO BYTE |
Startadresse des Strings mit der Beschreibung eines Datensatzes in der Struktur. Die Standardtypen der einzelnen Variablen sind durch Komma voneinander getrennt. z.B. 'BOOL,DWORD,USINT' |
i_pbyStructNames |
POINTER TO BYTE |
Beschreibung der einzelnen Elemente des ARRAYs. Die Variablennamen der einzelnen Variablen sind durch Komma voneinander getrennt. Die Namen der einzelnen StructVariables werden durch Tabulatoren getrennt in die erste Zeile geschrieben. Die Variable muss leer sein, wenn die erste Zeile nicht mit dem Variablennamen geschrieben werden soll. Jede weitere Zeile steht für einen Struct, dessen Variablenwerte im entsprechenden Format dargestellt und durch Tabulatoren voneinander getrennt sind. Die Zeilenenden sind jeweils durch CRLF markiert. |
i_etMode |
Wird der Modus ET_WriteMode.Create ausgewählt, dann wird die Datei neu erzeugt. Ist bereits eine Datei mit gleichem Namen vorhanden, wird sie überschrieben. Wird der Modus ET_WriteMode.Append ausgewählt, dann werden die neuen Daten an die bereits bestehende Datei angehängt. |
Ausgang |
Datentyp |
Beschreibung |
---|---|---|
q_xBusy |
BOOL |
TRUE: Der Schreibvorgang ist aktiv. |
q_xDone |
BOOL |
TRUE: Der Schreibvorgang ist abgeschlossen. |
q_etDiag |
Allgemeingültige, bibliotheksunabhängige Aussage zur Diagnose. Ein Wert ungleich ET_Diag.Ok entspricht einer Diagnosemeldung. |
|
q_etDiagExt |
POU-spezifischer, diagnosebezogener Ausgang. q_etDiag = ET_Diag.Ok -> Statusmeldung q_etDiag <> ET_Diag.Ok -> Diagnosemeldung |
|
q_sMsg |
STRING[80] |
Ereignisabhängige Meldung mit detaillierten Informationen zum Diagnosezustand. |
q_udiUsedMemory |
UDINT |
Anzahl der aus dem Arbeitsspeicher ausgelesenen Bytes. |
q_udiUsedDiskSpace |
UDINT |
Anzahl der in die Datei geschriebenen Bytes. |
{attribute 'pack_mode' := '1'}
TYPE ST_MyType :
STRUCT
sName : STRING[30];
sStreet : STRING[20];
lrValue : LREAL;
END_STRUCT
END_TYPE
VAR
fbAsciiWriter : FB_AsciiWriter;
aMyType : ARRAY[0..99] OF ST_MyType;
sStructTypes : STRING := 'STRING[30], STRING[20], LREAL';
sStructNames : STRING := 'Name, Street, Value';
END_VAR
fbAsciiWriter(i_xExecute := TRUE,
i_sFileName := 'Data',
i_iCount := 100,
i_dwBufferAdr := ADR(aMyType),
i_pbyStructInfo := ADR(sStructTypes),
i_pbyStructNames := ADR(sStructNames),
i_etMode := ET_WriteMode.Create);
q_etDiag |
q_etDiagExt |
Enumerationswert |
Beschreibung |
---|---|---|---|
OK |
128 |
Version |
|
OK |
180 |
Warten auf Ausführung. |
|
FileHandlingInvalid |
112 |
Die Datei kann nicht geöffnet werden. |
|
FileHandlingInvalid |
105 |
Es sind zu viele Dateien geöffnet. |
|
InputParameterInvalid |
40 |
StructInfo ist ungültig. |
|
InputParameterInvalid |
111 |
Mode ist nicht bestimmbar. |
|
UnexpectedProgramBehavior |
1 |
Es ist ein unbeabsichtigter Fehler während der Ausführung aufgetreten. |
Enumerationsname: |
CanNotOpenFile |
Enumerationswert: |
112 |
Beschreibung: |
Die Datei kann nicht geöffnet werden. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Die Datei i_sFileName konnte nicht geöffnet werden. |
Prüfen Sie, ob die Datei namens i_sFileName auf dem Datenträger gespeichert ist. Überprüfen Sie den Datenträger auf Defekte. |
Enumerationsname: |
Executing |
Enumerationswert: |
128 |
Beschreibung: |
Version |
Die Daten werden geschrieben.
Enumerationsname: |
StructInfoInvalid |
Enumerationswert: |
40 |
Beschreibung: |
StructInfo ist ungültig. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
An der Speicheraddresse, auf die der Eingang i_pbyStructInfo zeigt, liegen keine gültigen Strukturdaten. |
Daten der Zeichenfolge Mauszeiger. Adresse Eingang i_pbyStructInfo. |
Enumerationsname: |
TooManyFilesOpen |
Enumerationswert: |
105 |
Beschreibung: |
Es sind zu viele Dateien geöffnet. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Es sind zu viele Dateien geöffnet. |
Schließen Sie mit SystemInterface.FC_CloseFile nicht mehr benötigte Dateien. |
Enumerationsname: |
UnexpectedFeedback |
Enumerationswert: |
1 |
Beschreibung: |
Es ist ein unbeabsichtigter Fehler während der Ausführung aufgetreten. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Es ist ein Fehler in der internen Abarbeitung aufgetreten. |
Es ist ein Fehler in der internen Abarbeitung aufgetreten. |
Enumerationsname: |
UnknownMode |
Enumerationswert: |
111 |
Beschreibung: |
Mode ist nicht bestimmbar. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Am Eingang i_etMode wurde ein ungültiger Wert angelegt. |
Der Eingang i_etMode muss mit einem Element der Enumeration ET_WriteMode belegt werden. |
Enumerationsname: |
WaitForExecute |
Enumerationswert: |
180 |
Beschreibung: |
Warten auf Ausführung. |
Der Funktionsbaustein ist funktionsbereit. Auf eine positive Flanke von i_xExecute hin werden die Daten geschrieben.