# LGF_MeasureCpuLoad (FB / 1.1.1)

Übersicht

Autor: Simatic Systems Support

## Kurzbeschreibung

Messung und Berechnung der SPS-CPU-Last für verschiedene OB-Typen

### Baustein Schnittstelle

| LGF_MeasureCpuLoad (FB) |
--- | --- | ---
Bool |  |  | enable |  | valid |  |  | Bool
Bool |  |  | reset |  | busy |  |  | Bool
Real |  |  | loadCascade |  | error |  |  | Bool
LGF_typeMeasureCpuLoad_Configuration |  |  | configuration |  | status |  |  | Word
|  |  |  |  | averagingActive |  |  | Bool
|  |  |  |  | loadCascadeActive |  |  | Bool
|  |  |  |  | cycleTimeMin |  |  | LTime
|  |  |  |  | cycleTimeActual |  |  | LTime
|  |  |  |  | cycleTimeMax |  |  | LTime
|  |  |  |  | cycleTimeMaxConfigured |  |  | LTime
|  |  |  |  | runtime |  |  | LReal
|  |  |  |  | cpuLoad |  |  | Real
|  |  |  |  | comLoad |  |  | Real
|  |  |  |  | comLoadConfigured |  |  | Real
|  |  |  |  | limitWarning |  |  | Bool
|  |  |  |  | limitAlarm |  |  | Bool
|  |  |  |  | resultsCyclic |  |  | Array[0..#LAST_CYCLIC_BLOCK_INDEX] of LGF_typeMeasureCpuLoad_ResultBlock
|  |  |  |  | results |  |  | Array[0..#LAST_BLOCK_INDEX] of LGF_typeMeasureCpuLoad_ResultBlock
|  |  |  |  | diagnostics |  |  | LGF_typeDiagnostics

### Input Parameter

Bezeichner | Datentyp | Default Wert | Beschreibung
--- | --- | --- | ---
enable | Bool | FALSE | TRUE: Freigabe der Funktionalität des FB
reset | Bool | FALSE | Steigende Flanke: Rücksetzen aller internen Werte und auch der SPS-CPU-Timing-Statistik
loadCascade | Real | 0.0 | Prozentualer Lastwert aus einem anderen `LGF_MeasureCpuLoad` [%] (Connect `cpuLoad` aus Vorgängerinstanzaufruf)
configuration | LGF_typeMeasureCpuLoad_Configuration | --- | Dieser UDT gehört zum Modul `LGF_MeasureCpuLoad` und listet alle möglichen Parameter zur Konfiguration des Verhaltens auf.

### Output Parameter

Bezeichner | Datentyp | Beschreibung
--- | --- | ---
valid | Bool | TRUE: Gültiger Satz von Ausgangswerten am FB vorhanden
busy | Bool | TRUE: FB ist noch nicht beendet, neue Ausgangswerte können erwartet werden
error | Bool | TRUE: Bei der Ausführung des FBs ist ein Fehler aufgetreten
status | Word | 16#0000 - 16#7FFF: Status des FB, 16#8000 - 16#FFFF: Fehlererkennung
averagingActive | Bool | TRUE: Mittelwertbildung der Istwerte aktiv
loadCascadeActive | Bool | TRUE: Lastberechnungskaskade aktiv
cycleTimeMin | LTime | Minimale Zykluszeit [ms]
cycleTimeActual | LTime | Aktuelle Zykluszeit [ms]
cycleTimeMax | LTime | Maximale Zykluszeit [ms]
cycleTimeMaxConfigured | LTime | Konfigurierte maximale Zykluszeit [ms] (in der Hardware-Konfiguration der SPS)
runtime | LReal | Aktuelle Zykluszeit inkl. unterbechungen [ms]
cpuLoad | Real | Aktuelle SPS-CPU-Auslastung [%]
comLoad | Real | Aktuelle Kommunikationslast [%]
comLoadConfigured | Real | Konfigurierte Kommunikationsauslastung [%]
limitWarning | Bool | Last über dem konfigurierten Schwellenwert 'configuration.limitWarning'
limitAlarm | Bool | Laden von mehr als dem konfigurierten Schwellenwert 'configuration.limitAlarm'
resultsCyclic | Array[0..#LAST_CYCLIC_BLOCK_INDEX] of LGF_typeMeasureCpuLoad_ResultBlock | Ergebnisse des zyklischen OB-Auslesens
results | Array[0..#LAST_BLOCK_INDEX] of LGF_typeMeasureCpuLoad_ResultBlock | Ergebnisse von NICHT-zyklischen OB-Auslesungen
diagnostics | LGF_typeDiagnostics | Diagnosestruktur zur Speicherung und Übertragung von Diagnoseinformationen von Blöcken über die Schnittstelle.

### Status & Error Meldungen

Code / Wert | Bezeichner / Beschreibung
--- | ---
16#7000 | STATUS_NO_CALL Kein Auftrag wird gerade bearbeitet
16#7001 | STATUS_FIRST_CALL Erster Aufruf nach Eingang eines neuen Auftrags (steigende Flanke 'Freigabe')
16#7002 | STATUS_SUBSEQUENT_CALL Folgeaufruf bei aktiver Bearbeitung ohne weitere Angaben
16#8600 | ERR_UNDEFINED_STATE Fehler: Aufgrund eines undefinierten Zustands im Zustandsautomaten
16#8601 | ERROR_RTINFO_CONFIGURED_MAX_CYCLETIME Fehler: RT INFO Lesen konfigurierte MAX-Zykluszeit Information
16#8602 | ERROR_RTINFO_CONFIGURED_COM_LOAD Fehler: RT INFO Lesen konfigurierte COM Load Information
16#8610 | ERROR_RTINFO_ACTUAL_CYCLETIME Fehler: RT INFO Lesen aktuelle Zykluszeit Information
16#8611 | ERROR_RTINFO_ACTUAL_MIN_CYCLETIME Fehler: RT INFO Lesen MIN-Zykluszeit Information
16#8612 | ERROR_RTINFO_ACTUAL_MAX_CYCLETIME Fehler: RT INFO Lesen MAX Zykluszeit Information
16#8620 | ERROR_RTINFO_ACTUAL_COM_LOAD Fehler: RT INFO Lesen aktuelle COM-Load-Informationen
16#8630 | ERROR_RTINFO_RESET_STATISTICS Fehler: RT INFO Statistische Informationen setzen
16#9000 | ERROR_RTINFO_RUNTIME_OB_CYCLIC Fehler: Lesen der RT INFO Zykluszeit Information OB + Index des OB im Array
16#9100 | ERROR_RTINFO_RUNTIME_OB Fehler: Lesen RT INFO Zykluszeit Information OB + Index des OB im Array

## Benutzer definierte Datentypen

### LGF_typeMeasureCpuLoad_Configuration (UDT / V1.0.0)

Dieser UDT gehört zum Modul `LGF_MeasureCpuLoad` und listet alle möglichen Parameter zur Konfiguration des Verhaltens auf.

Bezeichner | Datentyp | Default Wert | Beschreibung
--- | --- | --- | ---
cfcRun | Bool | FALSE | CFC-Lauf (OB-Nr. wird nach 10xx verschoben)
averagingValues | USInt | 0 | Mittelwertbildung der Messwerte durch Bildung des arithmetischen Mittelwerts
comLoadSim | UInt | 0 | Com-Load-Simulation [%] WENN > 0.0 Wert wird für die Berechnung verwendet WENN <= 0.0 tatsächlichen Com-Load-Wert verwenden, der von der SPS gelesen wird
limitWarning | Real | 70.0 | Warngungs Grenzwert [%]
limitAlarm | Real | 100.0 | Alarm Grenzwert [%]
organizationBlocksCyclic | Array[0..10] of LGF_typeMeasureCpuLoad_ConfigurationBlock | --- | Zyklische Blöcke zur Messung
organizationBlocks | Array[0..30] of LGF_typeMeasureCpuLoad_ConfigurationBlock | --- | NICHT zyklische Blöcke zur Messung

### LGF_typeMeasureCpuLoad_ConfigurationBlock (UDT / V1.0.0)

Konfiguration für den zu messenden Block

Bezeichner | Datentyp | Default Wert | Beschreibung
--- | --- | --- | ---
enableMeasurement | Bool | FALSE | Messung freigeben
obNumber | Int | 0 | Organisation's-Baustein Nummer des zu messenden Bausteins
initialLoad | Real | 0.0 | Anfangslast [%], wird nur verwendet, wenn die Mittelwertbildung eingeschaltet ist

### LGF_typeMeasureCpuLoad_ResultBlock (UDT / V1.0.0)

Ergebnisse für Block gemessen

Bezeichner | Datentyp | Default Wert | Beschreibung
--- | --- | --- | ---
obNumber | Int | 0 | Organisation Blocknummer
runtime | LTime | --- | Laufzeit des Organisationsblocks [ms]
cycleLoad | Real | 0.0 | Auslastung des Blocks berechnet über die Zykluszeit [%]
maxCycleLoad | Real | 0.0 | Auslastung des Blocks berechnet über die MAX-Zykluszeit [%]
error | Bool | FALSE | TRUE: Beim Lesen der Blockstatistik ist ein Fehler aufgetreten
status | Word | 16#0000 | 16#0000 - 16#7FFF: Status des `RT_INFO`, 16#8000 - 16#FFFF: Fehlererkennung

### LGF_typeDiagnostics (UDT / V1.0.1)

Diagnosestruktur zur Speicherung und Übertragung von Diagnoseinformationen von Blöcken über die Schnittstelle.

Bezeichner | Datentyp | Default Wert | Beschreibung
--- | --- | --- | ---
status | Word | 16#0000 | Status des Bausteins oder Fehleridentifikation beim Auftreten des Fehlers
subfunctionStatus | Word | 16#0000 | Status oder Rückgabewert von aufgerufenen FB's, FC's und Systembausteinen
stateNumber | DInt | 0 | Zustand in der Zustandsmaschine des Blocks, in dem der Fehler aufgetreten ist

## Funktionsbeschreibung

Mit dieser Funktion können die verschiedenen Laufzeiten von Organisationsbausteinen (OB) ausgelesen und anhand der Ergebnisse die SPS-CPU-Auslastung berechnet werden.

Die zu berücksichtigenden OBs werden in der Konfiguration angegeben und aktiviert, wobei zu beachten ist, dass zyklische und azyklische OBs in getrennten Strukturen konfiguriert werden müssen.

Es ist weiter möglich

- Messwerte zu mitteln/glätten
- Grenzwerte für eine Warnung und einen Alarm festzulegen
- Vorgabe der Kommunikationslast als simulierter Wert
- OB-Nummern für CFC automatisch zu erhöhen

## Änderungshistorie

Version & Datum | Änderungsbeschreibung
--- | ---
| 1.0.0 | SAG BG
| 19.05.2024 | First Release
| 1.1.0 | SAG BG
| 06.05.2024 | Add Output with overall runtime incl. interrupts
| 1.1.1 | Siemens System Support
| 03.09.2025 | Bugfixed error in loop