Sample program 5 (write filter coefficients)
Download TwinCAT 3 project: program link
Program description
Transmission of exemplary filter coefficients via CoE access into the terminal.
|  | General settings 
 | 
Variable declaration sample program 5
PROGRAM MAIN// Variable declaration example program 5VAR CONSTANTNumOfFilterCoeff                 :BYTE:=40;END_VARVAR// Function block of library "Tc2_EtherCAT" for CoE Object access:fb_coe_write                     :FB_EcCoESdoWrite;userNetId                        :T_AmsNetId := '???';userSlaveAddr                    :UINT := ???;// Writing PLC state for coefficients transfer (Set to 0 for start)wState                           :BYTE:=255;index                            :BYTE:=1; // Start index for coefficients transferwCoEIndexUserFilterCoeffizents   :WORD:=16#8001;aFilterCoeffs:ARRAY[0..NumOfFilterCoeff] OF LREAL :=   [   // Example filter coefficients FIR band pass: 3600..3900 Hz   // Usage: "User defined FIR Filter" (32)      0.03663651655662163,      0.04299467480848277,      -0.007880289104928245,      0.0664029021294729,      -0.0729038234874446,      -0.00005849791174519834,      0.05628409460964408,      -0.0525134329294473,      0.026329003448584205,      0.00027114381194760643,      -0.03677629552114248,      0.06743018479714939,      -0.0560894442193289,      0.0009722394088121363,      0.05676876756757213,      -0.07775650809213645,      0.05330627422911416,      0.0009941073749156226,      -0.055674804078696793,      0.07874009379691002,      -0.055674804078696793,      0.0009941073749156226,      0.05330627422911416,      -0.07775650809213645,      0.05676876756757213,      0.0009722394088121363,      -0.0560894442193289,      0.06743018479714939,      -0.03677629552114248,      0.00027114381194760643,      0.026329003448584205,      -0.0525134329294473,      0.05628409460964408,      -0.00005849791174519834,      -0.0729038234874446,      0.0664029021294729,      -0.007880289104928245,      0.04299467480848277,      0.03663651655662163,      0   ];nValue :DINT; // Temporary variableEND_VARExecution part:
// Example program 5:// writes filter coefficients of// "User defined FIR Filter" (32)// incl. example coefficients for band pass// Note: writing possible, if CoE Object// PAI Settings Ch.1 (0x8000:16) has value 32 or 33 set, only!// (32 = User defined FIR Filter / 33 = User defined IIR Filter)// ===============================================================CASE wState OF   0:      fb_coe_write(bExecute := FALSE);// Prepare CoE access      wState := wState + 1;// Go to next state   1:      //nValue := REAL_TO_DINT(DINT_TO_REAL(aFilterCoeffs[index]) *16384);      nValue := LREAL_TO_DINT(aFilterCoeffs[index] * 1073741824); // Bit-shift factor: 2^30      // Write filter coefficients (max. 40 entries)      fb_coe_write(         sNetId:= userNetId,         nSlaveAddr:= userSlaveAddr,         nSubIndex:= index,         nIndex:= wCoEIndexUserFilterCoeffizents,         pSrcBuf:= ADR(nValue),         cbBufLen:= SIZEOF(nValue),         bExecute:= TRUE,         tTimeout:= T#1S      );      wState := wState + 1; // Go to next state   2:      // Execute writing to CoE      fb_coe_write();      IF fb_coe_write.bError THEN         wState := 100; // Error case      ELSE         IF NOT fb_coe_write.bBusy THEN         index := index + 1;            IF index <= (NumOfFilterCoeff) THEN               fb_coe_write(bExecute := FALSE);// Prepare the next CoE access               wState := 1;// Write next value            ELSE               wState := 255;// Done            END_IF         END_IF      END_IF   100:      ; // Error handling   255:      ; // Go on..END_CASE