[r10]: / trunk / spitemp / SPITemperature.library.md  Maximize  Restore  History

Download this file

111 lines (92 with data), 1.9 kB

<?xml version="1.0" encoding="utf-8"?>---

FUNCTION_BLOCK SPITemperature 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] := 16#FF;
        aby[1] := 16#FF;
        aby[2] := 16#FF;
        aby[3] := 16#FF;

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

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

                rValue := DWORD_TO_REAL(SHR(dwRaw, 31-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 &lt;&gt; 0 THEN
    pusiBitWidth := IoStandard.ConfigGetParameterValuePointer(pParam, ADR(udiResult));
    usiBitWidth := pusiBitWidth^;
END_IF

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