--- a +++ b/trunk/SPITemperature.library.md @@ -0,0 +1,110 @@ +<?xml version="1.0" encoding="utf-8"?>--- + +~~~ST +FUNCTION_BLOCK SPITemperature EXTENDS spi +VAR_OUTPUT + dwRaw: DWORD; + rValue: REAL; +END_VAR +VAR + usiBitWidth: USINT; + rResolution: REAL; +END_VAR + +~~~ +~~~ST +SUPER^(); + +CASE _iState OF +0: + IF SUPER^.init() THEN + _iState := 1; + END_IF +1: + _iState := 10; +END_CASE + +~~~ +--- +~~~ST +METHOD AfterReadInputs: INT +VAR + aby: ARRAY [..] OF ; + usiChannel: USINT; +END_VAR + +~~~ +~~~ST +SUPER^.AfterReadInputs(); + +IF _iState = 10 THEN + + FOR usiChannel := 0 TO 0 DO + aby[0] := 1; + aby[1] := 0; + aby[2] := 0; + aby[3] := 0; + + 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 + +~~~ +--- +~~~ST +METHOD BeforeWriteOutputs: INT +VAR + i: USINT; +END_VAR + +~~~ +~~~ST +SUPER^.BeforeWriteOutputs(); + +~~~ +--- +~~~ST +METHOD Initialize: UDINT +VAR_INPUT + wModuleType: UINT; + dwInstance: UDINT; + pConnector: pointer; +END_VAR +VAR + pParam: pointer; + udiResult: UDINT; + pusiBitWidth: pointer; + prResolution: pointer; +END_VAR + +~~~ +~~~ST +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 + + + +~~~