[r2]: / trunk / legacy / Libraries / OneWire_DS18B20.library.md  Maximize  Restore  History

Download this file

77 lines (70 with data), 1.5 kB

<?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 &lt;&gt; 0 THEN
    sPath := DataPath;
    hFile := SysFileOpen(sPath, ACCESS_MODE.AM_READ, ADR(result));
    IF hFile &lt;&gt; RTS_INVALID_HANDLE THEN
        fr(hFile := hFile);
        IF fr.GetLine(ADR(sData), SIZEOF(sData)) AND LEN(sData) &gt; 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 &gt; 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