The following example shows how to implement the FB_CsvWrite function block to write data to an existing CSV file. For further information, also refer to the EcoStruxure Machine Expert CSV File Handling Example Guide.
The buffer provided by the application contains the elements to be written to the CSV file:
Array Index |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
---|---|---|---|---|---|---|---|
0 |
2017-02-24 |
09:30:10 |
OpMode |
Machine - AutoMode |
– |
– |
– |
1 |
2017-02-24 |
09:35:27 |
Error |
Module1 - ErrorID 16#A123 |
– |
– |
– |
2 |
2017-02-24 |
09:35:27 |
State |
Machine - ErrorStop |
– |
– |
– |
3 |
– |
– |
– |
– |
– |
– |
– |
4 |
– |
– |
– |
– |
– |
– |
– |
5 |
– |
– |
– |
– |
– |
– |
– |
6 |
– |
– |
– |
– |
– |
– |
– |
7 |
– |
– |
– |
–– |
– |
– |
– |
PROGRAM SR_Example
VAR
fbWrite : FFU . FB_CsvWrite ;
xCmdWrite : BOOL ;
xCmdErrReset : BOOL ;
asCsvHeader : ARRAY [ 0 .. 0 , 0 .. c_uiNumOfColumns - 1 ] OF STRING ( c_uiLengthOfValue ) := [
'Date' , 'Event' , 'Event-type' , 'Event' , '' , '' , '' ] ;
asCsvTable : ARRAY [ 0 .. c_uiNumOfRows - 1 , 0 .. c_uiNumOfColumns - 1 ] OF STRING (
c_uiLengthOfValue ) ;
stCsvTable : FFU . ST_CsvTable ;
udiNumOfRowsToWrite : UDINT ;
xInitDone : BOOL ;
xCreateFileWithHeader : BOOL ;
iState : INT ;
END_VAR
VAR CONSTANT
c_uiNumOfRows : UINT := 8 ;
c_uiNumOfColumns : UINT := 7 ;
c_uiLengthOfValue : UINT := 80 ;
END_VAR
IF NOT xInitDone THEN
xInitDone := TRUE ;
SysMem . SysMemSet ( ADR ( asCsvTable ) , 0 , SIZEOF ( asCsvTable ) ) ;
asCsvTable [ 0 , 0 ] := '2017-02-24' ;
asCsvTable [ 0 , 1 ] := '09:30:10' ;
asCsvTable [ 0 , 2 ] := 'OpMode' ;
asCsvTable [ 0 , 3 ] := 'Machine - AutoMode' ;
asCsvTable [ 1 , 0 ] := '2017-02-24' ;
asCsvTable [ 1 , 1 ] := '09:35:27' ;
asCsvTable [ 1 , 2 ] := 'Error' ;
asCsvTable [ 1 , 3 ] := 'Module1 - ErrorID 16#A123' ;
asCsvTable [ 2 , 0 ] := '2017-02-24' ;
asCsvTable [ 2 , 1 ] := '09:35:27' ;
asCsvTable [ 2 , 2 ] := 'State' ;
asCsvTable [ 2 , 3 ] := 'Machine - ErrorStop' ;
udiNumOfRowsToWrite := 3 ;
END_IF
CASE iState OF
0 : // wait for write command
IF xCmdWrite THEN
iState := 10 ;
xCmdWrite := FALSE ;
END_IF
10 : // prepare the write process and reset the function block
IF xCreateFileWithHeader THEN
fbWrite . i_stTableWriteValues . pbyTable := ADR ( asCsvHeader ) ;
fbWrite . i_stTableWriteValues . uiNumOfRows := 1 ;
fbWrite . i_stTableWriteValues . uiNumOfColumns := c_uiNumOfColumns ;
fbWrite . i_stTableWriteValues . udiSizeOfTable := SIZEOF ( asCsvHeader ) ;
fbWrite . i_stWriteParameter . sDelimiter := ';' ;
fbWrite . i_stWriteParameter . etModeFileOpen := FFU . ET_ModeFileOpen . Create ;
fbWrite . i_stWriteParameter . udiNumOfRow := 1 ;
fbWrite . i_stWriteParameter . udiNumOfColumn := c_uiNumOfColumns ;
ELSE
fbWrite . i_stTableWriteValues . pbyTable := ADR ( asCsvTable ) ;
fbWrite . i_stTableWriteValues . uiNumOfRows := c_uiNumOfRows ;
fbWrite . i_stTableWriteValues . uiNumOfColumns := c_uiNumOfColumns ;
fbWrite . i_stTableWriteValues . udiSizeOfTable := SIZEOF ( asCsvTable ) ;
fbWrite . i_stWriteParameter . sDelimiter := ';' ;
fbWrite . i_stWriteParameter . etModeFileOpen := FFU . ET_ModeFileOpen . Append ;
fbWrite . i_stWriteParameter . udiNumOfRow := udiNumOfRowsToWrite ;
fbWrite . i_stWriteParameter . udiNumOfColumn := c_uiNumOfColumns ;
END_IF
fbWrite ( i_xExecute := FALSE ) ;
iState := 20 ;
20 : // wait until the execution of the function block is completed
fbWrite (
i_xExecute := TRUE ,
i_sFilePath := './myfiles/Example.csv' ) ;
IF fbWrite . q_xError THEN
iState := - 1 ;
ELSIF fbWrite . q_xDone THEN
IF xCreateFileWithHeader THEN
xCreateFileWithHeader := FALSE ;
iState := 10 ;
ELSE
iState := 0 ;
END_IF
END_IF
- 1 : // error handling
IF fbWrite . q_etResult = FFU . ET_Result . FileNotExists THEN
xCreateFileWithHeader := TRUE ;
iState := 10 ;
ELSIF xCmdErrReset THEN
xCmdErrReset := FALSE ;
iState := 0 ;
END_IF
END_CASE
Content of example.csv after executing the example code above. Provided that the file did not exist before:
Date;Time;Even-type;Event;;;
2017-02-24;09:30:10;OpMode;Machine - AutoMode;;;
2017-02-24;09:35:27;Error;Module1 - ErrorID 16#A123;;;
2017-02-24;09:35:27;State;Machine - ErrorStop;;;