Abfrage von CPU-Daten (spezifisch)
Dieses Beispiel zeigt den Zugriff auf CPU-Daten der IPC-Diagnose über den spezifischen Funktionsbaustein FB_MDP_CPU_Read.
Dieses Beispiel kann nicht für den Zugriff auf andere Module der IPC-Diagnose, z. B. Lüfterdaten, modifiziert werden.
Nachfolgend auf den Programmcode des Beispiels finden Sie die textuelle Beschreibung des Beispielprogramms.
Beispiel zum Zugriff über den spezifischen Funktionsbaustein FB_MDP_CPU_Read
Der spezifische Funktionsbaustein FB_MDP_CPU_Read ermöglicht einen einfachen Zugriff auf ausgewählte Daten des Moduls CPU in der Configuration Area der IPC-Diagnose.
Enumerationsdefinition
//** = simply adjust these lines if modifying code for own purposes
// central definition of state machine states
// (supports easy program modification)
{attribute 'qualified_only'}
TYPE E_State :
(
Idle,
ReadCPUDataInit, //** initiate reading CPU data
ReadCPUDataProcess //** process reading CPU data
);
END_TYPE
Variablendeklaration
PROGRAM MAIN
VAR
// internal use
sAmsNetId : STRING := ''; //** ADS Net ID (local = '')
eState : E_State; // Enum with index for state machine
bStart : BOOL := TRUE; // flag to trigger (re)start of statemachine
// FB instances
fbReadCPUData : FB_MDP_CPU_Read; // instance of FB for reading CPU data
// results of execution
bError : BOOL; // error flag (indicator: error occured)
nErrID : UDINT; // last error ID
stHeaderCpuMod : ST_MDP_ModuleHeader; // buffer for header data of CPU module
stCPUData : ST_MDP_CPU; // structure which will contain CPU data
END_VAR
Programmcode
// For an easy reuse of the following code for own purposes, parts of this sample program use
// "general" data names (and copy the results in specific variables after processing the code).
CASE eState OF
E_State.Idle:
IF bStart THEN
bStart := FALSE;
eState := E_State.ReadCPUDataInit; //** initiate first state
END_IF
E_State.ReadCPUDataInit: //** trigger FB: request CPU data
fbReadCPUData(
bExecute := TRUE, // Flag: trigger execution of FB
iModIdx := 0, //** Instance of desired module type (0 = first instance)
sAmsNetId := sAmsNetId); // AMS Net ID
eState := E_State.ReadCPUDataProcess; //** next state: process FB
E_State.ReadCPUDataProcess: //** process FB: request CPU data
fbReadCPUData(bExecute := FALSE); // Flag: Get execution state of FB
IF NOT fbReadCPUData.bBusy THEN // FB executed?
IF fbReadCPUData.bError THEN // Error?
bError := TRUE; // set error flag
nErrID := fbReadCPUData.nErrID; // store error id
eState := E_State.Idle; // finish state machine
ELSE // set parameters for next steps
bError := FALSE; // turn off error flag
stHeaderCpuMod := fbReadCPUData.stMDP_ModuleHeader; //** store CPU module header data
stCPUData := fbReadCPUData.stMDP_ModuleContent; //** store CPU data
eState := E_State.ReadCPUDataInit; //** read next set of CPU data
END_IF
END_IF
END_CASE
Beschreibung des Beispielprogramms
Der Funktionsbaustein FB_MDP_CPU_READ erfordert minimal zwei Parameter:
- Die AMS Net ID als Eingabeparameter für die Adresse des IPCs (lokal: ‘‘)
- Eine Struktur stMDP_ModuleContent, die nach dem Aufruf des Funktionsbausteins die Daten enthält.
Der Baustein liefert nicht die CPU-Temperatur, diese kann nur über das generische Beispielprogramm ausgelesen werden. Der Wert „CPU-Temperatur“ wird nicht von allen IPCs unterstützt.
Die Parameter und der Funktionsbaustein werden im Programm an diesen Stellen genutzt:
Die State Machine
Die Status der State Machine sind als Konstante ausgeführt, um eine einfache Anpassung des Programms zu ermöglichen. Damit muss der gewünschte „State“-Wert nur einmal zentral geändert werden. Die Status werden als Enumeratiosdeklaration im SPS-Projekt im Unterordner „DUTs“ als DUT unter dem Namen „E-State“ definiert.
Nachfolgend sind noch die verschiedenen Bereiche der State Machine und ihre Funktionen erläutert: