FB_CTRL_LOG_MAT_FILE
Der Funktionsbaustein ermöglicht das Erstellen eines Log-Files im Matlab 5-Format (*.mat), in dem maximal 10 Größen aufgezeichnet werden können.
In der Datei werden zwei Variablen angelegt, ein double-Array und ein cell-Array. In dem double-Array werden die aufgezeichneten Größen zeilenweise aufgezeichnet. In dem cell-Array werden die Bezeichnungen der einzelnen Zeilen abgelegt. Der Benutzer kann den Namen des double-Arrays in der Parameterstruktur des Funktionsbausteins angeben. Der Name des cell-Arrays wird aus dem Namen des double-Arrays gebildet, indem "_Info" an den Namen der Variablen angehängt wird.
In die Spalten des Daten-Arrays werden die Eingangsdaten in zeitlich äquidistanten Abständen geschrieben. In der ersten Spalte kann der Timestamp des jeweiligen Eintrags in s abgelegt werden. Mit dem Parameter tLogCycleTime
wird der zeitliche Abstand der Eintragungen festgelegt. Wenn zum Beispiel „tLogCycleTime := T\#2s“ gewählt wird, wird alle 2s ein Eintrag in die Datei geschrieben.
Wenn der Mode auf Bevor die Log-Datei ausgewertet werden kann, muss sie unbedingt durch ein Umschalten in den |
Der Baustein ermöglicht es, mit und ohne einem externen Buffer zu arbeiten.
Betrieb ohne externen Buffer: | Wenn das Loggen einer Zeile gestartet ist, wird der Ausgang bBusy TRUE. Der nächste Datensatz wird erst dann geloggt, wenn der Ausgang bBusy wieder FALSE ist. Der Füllstand des internen Buffers wird am Ausgang |
Betrieb mit externem Buffer: | Der Benutzer muss einen Buffer des Typs |
Wenn eine Bufferadresse und eine Buffergröße ungleich Null parametriert werden, wird der externe Buffer genutzt. Ohne einen externen Buffer wird ein interner Buffer mit einer Größe von 1500 Byte verwendet. |
VAR_INPUT
VAR_INPUT
fLogData : T_CTRL_LOGGER_DATA;
eMode : E_CTRL_MODE;
END_VAR
VAR_GLOBAL CONSTANT
nCTRL_LOGGER_DATA_ARRAY_SIZE :UINT := 10;
END_VARTYPE
T_CTRL_LOGGER_DATA :ARRAY [1..nCTRL_LOGGER_DATA_ARRAY_SIZE]
OF FLOAT;
END_TYPE
Name | Typ | Beschreibung |
---|---|---|
fLogData | T_CTRL_ | Array mit den Werten, die in das Log-File geschrieben werden. |
eMode | E_CTRL_MODE | Eingang, der die Betriebsart des Bausteins festlegt. |
VAR_OUTPUT
VAR_OUTPUT
eState : E_CTRL_STATE;
bFileOpen : BOOL
bFileClosed : BOOL
fBufferUsage : FLOAT
nLoggedColumns : DINT;
bBusy : BOOL
eErrorId : E_CTRL_ERRORCODES;
bError : BOOL;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
eState | E_CTRL_STATE | State des Funktionsbausteins |
bFileOpen | BOOL | Ein TRUE an diesem Ausgang signalisiert, dass die Datei erfolgreich geöffnet wurde. |
bFileClosed | BOOL | Ein TRUE an diesem Ausgang signalisiert, dass die Datei erfolgreich geschlossen wurde. |
fBufferUsage | FLOAT | Aktueller Füllstand des externen Buffers in Prozent |
nLogged | DINT | Anzahl der in die Datei geschriebenen Spalten |
bBusy | BOOL | Ein TRUE an diesem Ausgang signalisiert, dass das Loggen einer Zeile aktiv ist. |
eErrorId | E_CTRL_ERRORCODES | Liefert bei einem gesetzten |
bError | BOOL | Wird TRUE, sobald ein Fehler eintritt. |
VAR_OUTPUT
VAR_IN_OUT
stParams : ST_CTRL_LOG_MAT_FILE_PARAMS;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
stParams | ST_CTRL_LOG_MAT_FILE_ | Parameterstruktur des Log-Bausteins |
stParams
besteht aus den folgenden Elementen:
TYPE ST_CTRL_LOG_MAT_FILE_PARAMS:
STRUCT
tLogCycleTime : TIME := T#0ms;
tTaskCycleTime : TIME := T#0ms;
sFileName : STRING;
nNumberOfRows : INT(1..10);
sMatrixName : STRING;
arRowDescription : ARRAY [1..10] OF STRING(25);
bWriteTimeStamps : BOOL := TRUE;
bWriteRowDescription : BOOL := TRUE;
pLogBuffer_ADR : POINTER TO
ST_CTRL_MULTIPLE_PWM_OUT_DATA;
nLogBuffer_SIZEOF : UDINT;
END_STRUCT
END_TYPE
Name | Typ | Beschreibung |
---|---|---|
tLogCycleTime | TIME | Zykluszeit, mit der Einträge in das Log-File geschrieben werden. Diese muss größer oder gleich der TaskCycleTime sein. |
tTaskCycleTime | TIME | Zykluszeit, mit der der Funktionsbaustein aufgerufen wird. Diese entspricht der Task-Zykluszeit der aufrufenden Task, wenn der Baustein in jedem Zyklus aufgerufen wird. |
sFileName | STRING | Name und Pfad des Log-Files, z.B.: d:\Logfile.mat |
nNumberOfRows | INT | Anzahl der Spalten, die in die Datei geschrieben werden (maximal 10). |
sMatrixName | STRING | Name des Daten-Arrays |
arRow | ARRAY | Array aus Strings, die die Zeilenüberschriften enthalten. |
bWriteTime | BOOL | Wenn dieser Parameter auf TRUE gesetzt ist, wird in die erste Zeile des Daten-Arrays der Zeitstempel der Messung geschrieben. |
bWriteRow | BOOL | Wenn dieser Parameter auf TRUE gesetzt ist, wird ein cell-Array angelegt, in das die Beschreibungen der Zeilen geschrieben werden. |
pLogBuffer_ADR | POINTER TO ST_CTRL_ | Adresse des externen |
nLogBuffer_ | UDINT | Größe des |
Hinweis | |
Fehler bei Dateihandling Der Parametersatz darf nur dann geändert werden, wenn die Datei geschlossen ist (bFileClosed = TRUE). Anderenfalls kann es zu Fehlern bei dem Dateihandling kommen. |
Beispiel
PROGRAM PRG_LOG_MAT_FILE_TEST_BUFFERED
VAR
eMode : E_CTRL_MODE;
stParams : ST_CTRL_LOG_MAT_FILE_PARAMS;
LoggerData : T_CTRL_LOGGER_DATA;
eErrorId : E_CTRL_ERRORCODES;
bError : BOOL;
fbCtrlLogMatFile : FB_CTRL_LOG_MAT_FILE;
LogBuffer : ARRAY[0..2000] OF BYTE;
bInit : BOOL := TRUE;
fIn : LREAL;
fOut : LREAL;
fMaxBufferUsage : LREAL;
END_VAR
IF bInit THEN
stCtrl_GLOBAL_CycleTimeInterpretation.bInterpretCycleTimeAsTicks := FALSE;
stCtrl_GLOBAL_CycleTimeInterpretation.fBaseTime := 0;
stParams.tLogCycleTime := T#2ms;
stParams.tTaskCycleTime := T#2ms;
stParams.nNumberOfRows := 3;
stParams.sFileName := 'D:\test.mat';
stParams.sMatrixName := 'TwinCAT_ControllerToolbox_Log';
stParams.arRowDescription[1] := 'Input';
stParams.arRowDescription[2] := 'Output 1';
stParams.arRowDescription[3] := 'Output 2';
stParams.bWriteRowDescription := TRUE;
stParams.bWriteTimeStamps := TRUE;
eMode := eCTRL_MODE_ACTIVE;
bInit := FALSE;
END_IF
stParams.nLogBuffer_SIZEOF := SIZEOF( LogBuffer );
stParams.pLogBuffer_ADR := ADR( LogBuffer );
fIn := fIn + 0.01;
fOut := SIN(fIn);
LoggerData[1]:= fIn;
LoggerData[2]:= fOut;
LoggerData[3]:= fOut * 2;
IF fbCtrlLogMatFile.nLoggedColumns >= 25 THEN
eMode := eCTRL_MODE_Passive;
END_IF
fbCtrlLogMatFile( fLogData := LoggerData,
eMode := eMode,
stParams :=stParams,
eErrorId => eErrorId,
bError => bError);
fMaxBufferUsage := MAX(fbCtrlLogMatFile.fBufferUsage, fMaxBufferUsage);