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