<?xml version="1.0" encoding="utf-8"?>---
FUNCTION_BLOCK OneWire_DS18B20 EXTENDS OneWire
VAR_OUTPUT
rTemp: REAL;
stdTimeStamp: RTS_SYSTIMEDATE;
xSignalOk: BOOL;
END_VAR
super^();
METHOD AfterReadInputs: INT
Evaluate();
SUPER^.AfterReadInputs();
METHOD Evaluate:
VAR
fr: FileReader;
hFile: RTS_IEC_HANDLE;
result: RTS_IEC_RESULT;
udiRead: UDINT;
sPath: string;
sData: string;
i: INT;
END_VAR
IF _pMaster <> 0 THEN
sPath := DataPath;
hFile := SysFileOpen(sPath, ACCESS_MODE.AM_READ, ADR(result));
IF hFile <> RTS_INVALID_HANDLE THEN
fr(hFile := hFile);
IF fr.GetLine(ADR(sData), SIZEOF(sData)) AND LEN(sData) > 3 THEN
IF RIGHT(sData, 3) = 'YES' THEN
xSignalOk := TRUE;
ELSE
xSignalOk := FALSE;
END_IF
ELSE
xSignalOk := FALSE;
END_IF
IF xSignalOk THEN
IF fr.GetLine(ADR(sData), SIZEOF(sData)) THEN
i := FIND(sData, 't=');
IF i > 0 THEN
sData := RIGHT(sData, LEN(sData) - i - 1);
IF sData = '85000' THEN
xSignalOk := FALSE;
ELSE
rTemp := STRING_TO_REAL(sData) * 1E-3;
SysTimeRtcConvertUtcToDate(SysTimeRtcGet(result), stdTimeStamp);
END_IF
ELSE
xSignalOk := FALSE;
END_IF
END_IF
END_IF
ELSE
xSignalOk := FALSE;
END_IF
SysFileClose(hFile);
END_IF