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:

Abfrage von CPU-Daten (spezifisch) 1:

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:

Abfrage von CPU-Daten (spezifisch) 2:

Die State Machine

Abfrage von CPU-Daten (spezifisch) 3:

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:

Abfrage von CPU-Daten (spezifisch) 4: