FB_CMA_ReadCsvFile
Auslesen einer CSV Datei und sequenzielle Ausgabe der Daten in einen SPS Puffer (Array).
Mit dem TwinCAT 3 Scope können Daten aufgezeichnet, angezeigt und abgespeichert werden. Ein mögliches Speicherformat ist CSV. So können Signaldaten in einer CSV Datei abgelegt werden und später mit dem FB_CMA_ReadCsvFile erneut eingelesen werden. Die hiermit eingelesenen Signaldaten können als alternative Quelle von Eingangsdaten einer Instanz von FB_CMA_Source und somit der Condition Monitoring Analysekette übergeben werden.
Ein Beispiel zur Verwendung des Funktionsbausteins finden Sie hier: Schädigungsüberwachung.
Ein weiteres Beispiel finden Sie am Ende dieser Seite.
Ein- und Ausgänge
Eingangsparameter
VAR_INPUT
bExecute : BOOL := TRUE; // starts execution (on rising edge)
bAbort : BOOL; // aborts execution (after finishing current ADS communication)
sNetId : T_AmsNetId := ''; // TwinCAT system network address (could be kept empty for local host)
tAdsTimeout : TIME := T#1S; // ADS timeout (only 1 second as condition for a fast data transmission)
sFileName : T_MaxString := ''; // CSV source file path and name (located on the system with the specified Net Id)
sSeparator : STRING(2) := '$T'; // CSV field separator [e.g. tab '$T' or comma ',' or semicolon ';' or colon ':' or blank ' ']
nHeaderLines : UDINT := 0; // Number of lines in the CSV file which belongs to the header. Data start after header lines.
bColumn : BOOL := TRUE; // select whether the data is placed as column (e.g. TcScope CSV file) or as line
END_VAR
VAR_IN_OUT
aBuffer : ARRAY[*] OF LREAL; // buffer with individual length (do not switch the buffer during one execution)
END_VAR
bExecute
: Mit einer positiven Flanke am EingangbExecute
wird der Funktionsbaustein aufgerufen, sofern der Baustein nicht aktiv ist.bAbort
: Wird dieser Eingang gesetzt, so wird die Ausführung abgebrochen. Der Funktionsbaustein muss noch so lange aufgerufen werden, bis der AusgangbBusy=FALSE
ist, so dass eine intern bereits begonnene ADS Kommunikation beendet werden kann.sNetId
: Um die Operation auf dem lokalen Gerät durchzuführen, bedarf es keiner Angabe dieser Eingangsvariablen. Alternativ kann ein leerer String angegeben werden. Um die Anfrage an einen anderen Computer zu richten, kann hier dessen AMS Net Id (vom Typ T_AmsNetId) angegeben werden.tAdsTimeout
: Gibt eine maximale Zeitdauer für die Ausführung der internen ADS Kommunikation an.sFileName
: Gibt den Dateipfad der zu lesenden CSV Datei an.sSeparator
: Gibt den CSV Feld Separator an, der in der CSV Datei verwendet ist. Einzelne Werte werden hiermit voneinander separiert.nHeaderLines
: Gibt die Anzahl der Zeilen an, in denen sich nur Header Informationen befinden. Diese werden beim Auslesen übersprungen. Eine mit dem TwinCAT 3 Scope View abgespeicherte CSV Datei kann unterschiedlich umfangreiche Header Informationen beinhalten.bColumn
: Gibt an, ob die Daten sich hintereinander in einer Zeile befinden (bColumn=FALSE
) oder untereinander als Spalte im CSV vorliegen (bColumn=TRUE
). Letzteres ist bei CSV Dateien der Fall, die mit dem TwinCAT 3 Scope View abgespeichert wurden.aBuffer
: Gibt den Ausgangsdatenpuffer an, in welchen die gelesenen Werte geschrieben werden. Dabei muss es sich um ein SPS Array vom Typ LREAL handeln mit beliebiger Länge. Wird derFB_CMA_ReadCsvFile
als Alternative zum Hardware Sensorsignal verwendet, so entspricht die Länge typischerweise dem Oversamplingfaktor. Der angegebene Puffer muss über die Dauer der Operation beibehalten werden. Während der Operation wird der PufferaBuffer
mehrfach mit neuen Datensätzen gefüllt und dies über die AusgangsvariabebBufferFull
signalisiert.
Ausgangsparameter
VAR_OUTPUT
bBufferFull : BOOL; // signals that aBuffer is fully filled
nReadRecords : UDINT; // shows the number of records saved to aBuffer
bBusy : BOOL; // TRUE if execution is active
bError : BOOL; // TRUE if an error occurred
hrErrorCode : HRESULT; // '< 0' = error; '> 0' = info; '0' = no error/info
ipErrorMessage : I_TcMessage := fbErrorMessage; // shows detailed information about occurred errors,warnings and more
END_VAR
bBufferFull
: Der Ausgang istTRUE
, falls der PufferaBuffer
vollständig gefüllt wurde. Dies wird über die Dauer der Operation vielfach der Fall sein, so lange bis die CSV Datei vollständig ausgelesen wurde. Ist ein neuer Datensatz im PufferaBuffer
vorhanden, sollte dieser sofort weiterverarbeitet werden bevor der Funktionsbaustein erneut aufgerufen wird. Typischerweise liegen nach jedem Aufruf des Funktionsbausteins neue Daten im Puffer bereit. Dennoch sollte der AusgangbBufferFull
geprüft werden, um einen korrekten Daten-Stream sicherzustellen.nReadRecords
: Der Ausgang gibt an, wieviele Werte der gesamte gelesene Datensatz enthalten hat.bBusy
: Der Ausgang istTRUE
so lange der Funktionsbaustein aktiv ist. Der Ausgang wirdFALSE
, wenn die CSV Datei vollständig gelesen wurde oder ein Fehler auftrat.bError
: Der Ausgang istTRUE
, falls ein Fehler auftritt.hrErrorCode
: Falls ein Fehler auftritt, wird ein entsprechender Fehlercode vom TypHRESULT
ausgegeben. Mögliche Werte sind in der Liste der Fehlercodes erläutert.ipErrorMessage
: Beinhaltet nähere Informationen zum aktuellen Rückgabewert. Siehe hierzu den Abschnitt Fehlerbeschreibung und Information. Für diesen speziellen Schnittstellenzeiger ist intern sichergestellt, dass er immer gültig/zugewiesen ist.
Beispiel
Das Beispiel zeigt die Verwendung des FB_CMA_ReadCsvFile. Hierbei wird eine große Pufferlänge des bei aBuffer angegebenen Puffers angenommen, was die Auslagerung in eine separate Task begünstigt. Der Puffer wird über das Prozessabbild an die eigentliche SPS Task übergeben und steht dort als Prozessabbildeingang, analog zu einer Oversampling-Klemme, zur Verfügung.
Download des Sample: ReadCsvFile_Sample