Esempio FB_CsvWrite

Panoramica

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.

Buffer

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

––

Esempio di programma

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

Esempio di file CSV

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;;;