FB_IolWrite

FB_IolWrite 1:

Funktionsbaustein zum Schreiben von IO-Link Parametern in einer nicht objektorientierten Lösung.

FB_IolWrite 2:Eingänge

Name

Typ

Beschreibung

bExecute

BOOL

Steigende Flanke zum Starten des Funktionsblocks

sNetid

T-AmsNetid

AMS NETID des IO-Link Masters

nlolPort

E_lolPort

IO-Link Port des IO-Link-Geräts

nIndex

WORD

Index des IO-Link-Geräteparameters

nSubindex

BYTE

Subindex des IO-Link-Geräteparameters

pSCRBuf

PVOID

Zeiger auf Quellpuffer

cbBufLen

UDINT

Größe der zu lesenden Datenbytes

tTimeout

TIME

Maximal zulässige Ausführungszeit

FB_IolWrite 3:Ausgänge

Name

Typ

Beschreibung

bBusy

BOOL

Busy-Flag des Funktionsblocks

bDone

BOOL

Done-Merker des Funktionsblocks

bError

BOOL

Fehlermerker des Funktionsblocks

hResult

HRESULT

Rückgabewert dieses Funktionsblocks

nADSError

E_AdsErr

ADS-Fehlercode

nIolError

E_IolError

IO-Link-Fehlercode

Beispiel

Der folgende FB ist Teil des IoLink Beispielprojekts. Weitere Informationen finden Sie im Kapitel Beispiele.

FUNCTION_BLOCK FB_Sample_02_IolWrite
VAR_INPUT
    bExecute                : BOOL := FALSE;
    sApplicationTag         : STRING(32) := '';
END_VAR
VAR_OUTPUT
    bBusy                   : BOOL := FALSE;
    bDone                   : BOOL := FALSE;
    bError                  : BOOL := FALSE;
    nAdsError               : E_AdsErr := E_AdsErr.NOERR;
    nIolError               : E_IolError := E_IolError.NoError;
    sErrorTxt               : STRING(255) := '';
END_VAR
VAR
    bExecuteOld             : BOOL;
    nState                  : INT := 0;
    fbIolWrite              : FB_IolWrite;
END_VAR
////
// Execute/Busy State Machine
//
IF bExecute AND NOT bExecuteOld AND NOT bBusy THEN
    bBusy := TRUE;
    nState := 10;    // WRITE
ELSIF NOT bExecute THEN
    bBusy := FALSE;
    bError := FALSE;
    bDone := FALSE;
    nAdsError := E_AdsErr.NOERR;
    nIolError := E_IolError.NoError;
    sErrorTxt := '';
END_IF
bExecuteOld := bExecute;

////
// FB State Machine
//
CASE nState OF
    
// IDLE
0:;

// WRITE
10:
    sApplicationTag := '';
    
    fbIolWrite(bExecute := FALSE);
    fbIolWrite.sNetId := F_CreateAmsNetId(GVL_IO.sTerm2AmsNetId);
    fbIolWrite.nIolPort := GVL_IO.nTerm2EPI1008;
    fbIolWrite.pSRCBuf := ADR(sApplicationTag);
    fbIolWrite.cbBufLen := INT_TO_UDINT(LEN(sApplicationTag));
    fbIolWrite.nIndex := 16#18;
    fbIolWrite.nSubindex := 0;
    fbIolWrite.bExecute := TRUE;
    
    nState := 20; // WAIT_FOR_DONE
    
// WAIT_FOR_DONE
20:
    IF fbIolWrite.bDone THEN
        bDone := TRUE;
        bBusy := FALSE;
        nState := 0; // IDLE
    END_IF
END_CASE

////
// call FBs
//
fbIolWrite();

////
// Error Handling
//
IF NOT bError AND bBusy THEN
    IF fbIolWrite.bError THEN
        nState := 0;
        bBusy := FALSE;
        bError := TRUE;
        nAdsError := fbIolWrite.nAdsError;
        nIolError := fbIolWrite.nIolError;
        sErrorTxt := F_IolGetErrorTxt(fbIolWrite.hresult);
    END_IF
END_IF

Voraussetzungen

Entwicklungsumgebung

Erforderliche SPS-Bibliothek

TwinCAT ab v3.1.4024.25

Tc3_IoLink ab v3.3.4.0