IOL_IdentificationAndDiagnosis
Funktionsbaustein zur Identifikation und Diagnose eines IO-Link Devices. Dieser Funktionsbaustein wird durch das Common IO-Link Profile implementiert. Der ApplicationSpecificTag, der FunctionTag und der LocationTag eines IO-Link Devices kann geschrieben werden. Die Funktionsklassen und ProfilIDs können ausgelesen werden, die ein Gerät besitzt. Zusätzlich gibt der Funktionsbaustein eine Diagnose über den Zustand eines Geräts und die Identifikation wie Vendor Name, Vendor ID, Device Name, Device ID.
Eingänge
Name | Typ | Beschreibung |
---|---|---|
Execute | BOOL | Ein Trigger bewirkt, dass die mit der Variable Function ausgewählte Funktion ausgeführt wird: |
MasterAoENetid | T_AmsNetid | AMS NETID des IO-Link Masters |
IolPort | IO-Link Port des IO-Link-Geräts | |
Func | Diese Variable wählt die Funktionalität aus, die durch einen Request ausgelöst werden soll: 0 = no_func Ein Request wird vernachlässigt, es wird keine Funktion ausgeführt 1 = rd_all Ein Request startet das Rücklesen der aktuellen Identifikations und Diagnoseparameterwerte aus dem Device. 2 = rd_diag Ein Request startet das Rücklesen der aktuellen Diagnoseparameterwerte durch Lesen von DeviceStatus und DetailedDeviceStatus aus dem Gerät. 3 = wr_ ident Ein Request bewirkt, dass ein zuvor angelegter Wert für ApplicationSpecificTagIn, LocationTagIn und FunctionTagIn in das Gerät geschrieben wird. | |
BackupEnable | BOOL | Diese Variable konfiguriert das Verhalten des FBs im Falle der angeforderten Funktion wr_ident. "true" = aktiviert Der Backup-Mechanismus wird durch den FB ausgelöst. "false" = deaktiviert Der Backup-Mechanismus wird nicht durch den FB ausgelöst. |
ApplicationSpecificIN | String(32) | Parameter des IO-Link-Geräts |
FunctionTagIN | String(32) | Parameter des IO-Link-Geräts |
LoactionTagIN | String(32) | Parameter des IO-Link-Geräts |
Ausgänge
Name | Typ | Beschreibung |
---|---|---|
Done | BOOL | Das Signal ist gesetzt, wenn der FB eine angeforderte Operation abgeschlossen hat. |
Busy | BOOL | Das Signal wird gesetzt, wenn der FB eine angeforderte Operation ausführt. |
Error | BOOL | Das Signal wird gesetzt, wenn bei der Ausführung eines angeforderten Vorgangs ein Fehler aufgetreten ist. |
AdsError | E_ADSErr | ADS-Fehlercode |
IoLError | IO-Link-Fehler | |
State | Der Wert stellt den aktuellen Status des FB-Betriebs und der ausgeführten Funktionen dar. Der Inhalt ist systemspezifisch und enthält die Statusinformationen. | |
ProfileIDList | ARRAY [0..31] of E_IolProfileIdentifier | Liste der vom Gerät unterstützten ProfileIDs |
FunctionClassIDList | ARRAY [0..31] of E_IolProfileIdentifier | Liste der vom Gerät unterstützten FunctionClassIDs |
IdentificationObjects | Strukturierte Liste der Identifikationsobjekte, für weitere Details. | |
DeviceOK | BOOL | Das Signal ist gesetzt, wenn keine weiteren Diagnoseinformationen verfügbar sind, es ist false, wenn weitere Informationen bei DeviceStatus und DetailedDeviceStatus verfügbar sind. |
DeviceStatus | Status des IO-Link-Geräts | |
DetailedDeviceStatus | ARRAY [0..63] von ST_DetailedDeviceStatusEntry |
Beispiel
Der folgende FB ist Teil des IoLink Beispielprojekts. Weitere Informationen finden Sie im Kapitel Beispiele.
FUNCTION_BLOCK FB_Sample_06_IdentificationAndDiagnosis
VAR_INPUT
sApplicationTagIn : STRING(32) := '';
sFunctionTagIn : STRING(32) := '';
sLocationTagIn : STRING(32) := '';
bExecute : BOOL;
END_VAR
VAR_OUTPUT
bBusy : BOOL := FALSE;
bDone : BOOL := FALSE;
bError : BOOL := FALSE;
sIolError : STRING;
sAdsError : STRING;
aProfileIDList : ARRAY [0..31] OF E_IolProfileIdentifier;
aFunctionClassIDList : ARRAY[0..31] OF E_IolProfileIdentifier;
stIDentObjects : ST_IolIdentificationObjects;
bDeviceOK : BOOL;
nDeviceStatus : E_IolDeviceStatus;
DetailedDeviceStatus : T_IolDetailedDeviceStatus;
END_VAR
VAR
bExecuteOld : BOOL;
nState : INT := 0;
IolDiagAndIdent : IOL_IdentificationAndDiagnosis;
END_VAR
////
// Execute/Busy State Machine
//
IF bExecute AND NOT bExecuteOld AND NOT bBusy THEN
bBusy := TRUE;
nState := 10; // START
ELSIF NOT bExecute THEN
bBusy := FALSE;
bError := FALSE;
bDone := FALSE;
sIolError:='';
sADSError:='';
END_IF
bExecuteOld := bExecute;
CASE nState OF
// IDLE
0:;
// START
10:
IolDiagAndIdent(Execute := FALSE);
IolDiagAndIdent.MasterAoeNetId := F_CreateAmsNetId(GVL_IO.sTerm2AmsNetId);
IolDiagAndIdent.IolPort := E_iolport.Port4;
IolDiagAndIdent.Funct := E_IolIad_Function.ReadAll;
IolDiagAndIdent.ApplicationSpecificTagIn := sApplicationTagIn;
IolDiagAndIdent.FunctionTagIn := sFunctionTagIn;
IolDiagAndIdent.LocationTagIn := sLocationTagIn;
IolDiagAndIdent.Execute := TRUE;
nState := 20; // WAIT FOR DONE
// WAIT FOR DONE
20:
IF NOT IOlDiagAndIdent.Busy AND NOT IOlDiagAndIdent.Error THEN
nState := 30; // DONE
END_IF
// DONE
30:
aProfileIDList := IolDiagAndIdent.ProfileIDList;
aFunctionClassIDList := IolDiagAndIdent.FunctionClassIDList;
stIDentObjects := IolDiagAndIdent.IdentificationObjects;
bDeviceOK := IolDiagAndIdent.DeviceOK;
nDeviceStatus := IolDiagAndIdent.DeviceStatus;
DetailedDeviceStatus := IolDiagAndIdent.DetailedDeviceStatus;
IolDiagAndIdent.Execute := FALSE;
nState := 0; // INIT
END_CASE
////
// call FBs
//
IolDiagAndIdent();
////
// Error Handling
//
IF NOT bError AND bBusy THEN
IF IolDiagAndIdent.Error THEN
nState := 0;
bBusy := FALSE;
bError := TRUE;
sIolError := F_IolGetIolErrorTxt(ioldiagandIdent.IolError);
sAdsError := F_IolGetadsErrorTxt(ioldiagandident.AdsError);
END_IF
END_IF
Voraussetzungen
Entwicklungsumgebung | Erforderliche SPS-Bibliothek |
---|---|
TwinCAT ab v3.1.4024.25 | Tc3_IoLink ab v3.3.4.0 |