L'esempio che segue mostra come implementare il blocco funzione FB_CsvWrite per scrivere i dati in un file CSV esistente. Per ulteriori informazioni, vedere anche la EcoStruxure Machine Expert - Guida di esempio per la gestione dei file CSV.
Il buffer fornito dall'applicazione contiene gli elementi da scrivere nel file CSV:
Indice array |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
---|---|---|---|---|---|---|---|
0 |
2017-02-24 |
09:30:10 |
OpMode |
Macchina - Modalità Auto |
– |
– |
– |
1 |
2017-02-24 |
09:35:27 |
Errore |
Modulo1 - ID errore 16#A123 |
– |
– |
– |
2 |
2017-02-24 |
09:35:27 |
Stato |
Macchina - Stop errore |
– |
– |
– |
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
Contenuto di example.csv dopo l'esecuzione del codice di esempio precedente. A condizione che il file non esistesse prima di:
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;;;