[r13]: / trunk / SPI_Template.library.md  Maximize  Restore  History

Download this file

111 lines (92 with data), 1.9 kB


FUNCTION_BLOCK SPITemplate EXTENDS spi
VAR_OUTPUT
    dwRaw: DWORD;
    rValue: REAL;
END_VAR
VAR
    usiBitWidth: USINT;
    rResolution: REAL;
END_VAR
SUPER^();

CASE _iState OF
0:
    IF SUPER^.init() THEN
        _iState := 1;
    END_IF  
1:
    _iState := 10;
END_CASE

METHOD AfterReadInputs: INT
VAR
    aby: ARRAY [..] OF ;
    usiChannel: USINT;
END_VAR
SUPER^.AfterReadInputs();

IF _iState = 10 THEN

    FOR usiChannel := 0 TO 0 DO
        aby[0] := 1;
        aby[1] := 16#80 + SHL(usiChannel AND 7, 4);
        aby[2] := 0;
        aby[3] := 0;

        IF NOT transfer(pabyTxBuffer:=ADR(aby) , pabyRxBuffer:=ADR(aby) , udiLen:=3 , uiDelayus:=0) THEN
            _iState := 1000;
        END_IF

        CASE usiChannel OF
            0:      
                dwRaw := aby[3];
                dwRaw := SHL(dwRaw,8) OR aby[2];
                dwRaw := SHL(dwRaw,8) OR aby[1];
                dwRaw := SHL(dwRaw,8) OR aby[0];

                rValue := DWORD_TO_REAL(SHR(dwRaw, usiBitWidth));
                rValue := rValue * rResolution;
        END_CASE
    END_FOR     
END_IF

METHOD BeforeWriteOutputs: INT
VAR
    i: USINT;
END_VAR
SUPER^.BeforeWriteOutputs();

METHOD Initialize: UDINT
VAR_INPUT
    wModuleType: UINT;
    dwInstance: UDINT;
    pConnector: pointer;
END_VAR
VAR
    pParam: pointer;
    udiResult: UDINT;
    pusiBitWidth: pointer;
    prResolution: pointer;
END_VAR
SUPER^.Initialize(wModuleType, dwInstance, pConnector);
pParam := ConfigGetParameter(_pConnector, 1000);
IF pParam <> 0 THEN
    pusiBitWidth := IoStandard.ConfigGetParameterValuePointer(pParam, ADR(udiResult));
    usiBitWidth := pusiBitWidth^;
END_IF

pParam := ConfigGetParameter(_pConnector, 1001);
IF pParam <> 0 THEN
    prResolution := IoStandard.ConfigGetParameterValuePointer(pParam, ADR(udiResult));
    rResolution := prResolution^;
END_IF