CPU Status via SFC51 auslesen und im Programm verarbeiten

S7Sync

Level-1
Beiträge
76
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

ich möchte den CPU Status mit in ein HMI Projekt integrieren und die CPU LEDs entsprechend visualisieren. Dazu habe ich die SZL mit dem SFC51 ausgelesen, was auch soweit funktioniert.
Leider klappt es nur mit den "SF", "RUN", "STOP" und "BATF" LEDs.
Wie kann ich die restlichen LEDs abfragen, in Hinsicht auf die LED Kennung?
Kann man die Kennung oder die Datensatznummer im Header vorgeben?

Verwendet wird eine CPU315-2DP (alte Bauform)
Visualisierung WinCCflex 2008 als PC RT

Hier die AWL Quelle der Funktion für die o.g. LEDs (Programmcode ist von einem Siemens Beispiel abgewandelt)
----------------------------------------------------------------------------------------------------------
VAR_TEMP
szl_header : STRUCT
lengthdr : WORD ;
n_dr : WORD ;
END_STRUCT ;
END_VAR
BEGIN
NETWORK
TITLE =Auslesen von SZL-Teillisten über SFC 51
//1. Byte + 2. Byte
//-- LED Kennung --
//W#16#0001: SF (Sammelfehler)
//W#16#0002: INTF (interner Fehler)
//W#16#0003: EXTF (externer Fehler)
//W#16#0004: RUN
//W#16#0005: STOP
//W#16#0006: FRCE (Forcen)
//W#16#0007: CRST (Neustart)
//W#16#0008: BAF (Batteriefehler/Überlast, Kurzschluß von Batteriespannung am Bus)
//W#16#0009: USR (anwenderdefiniert)
//W#16#000A: USR1 (anwenderdefiniert)
//W#16#000B: BUS1F (Busfehler Schnittstelle 1)
//W#16#000C: BUS2F (Busfehler Schnittstelle 2)
//W#16#000D: REDF (Redundanzfehler)
//W#16#000E: MSTR (Master)
//W#16#000F: RACK0 (Baugruppenträger-Nr. 0)
//W#16#0010: RACK1 (Baugruppenträger-Nr. 1)
//W#16#0011: RACK2 (Baugruppenträger-Nr. 2)
//W#16#0012: IFM1F (Schnittstellenfehler Interface-Modul 1)
//W#16#0013: IFM2F (Schnittstellenfehler Interface-Modul 2)
//
//3. Byte
//-- LED_on --
//Zustand der LED:
//0: aus
//1: an
//
//4. Byte
//-- LED_blinkt --
//Blinkzustand der LED:
//0: blinkt nicht
//1: blinkt normal (2 Hz)
//2: blinkt langsam (0,5 Hz)
//

BLD 103;
CALL SFC 51 (
REQ := M 1.1,
SZL_ID := W#16#19,
INDEX := W#16#0,
RET_VAL := DB245.DBW 2,
BUSY := DB245.DBX 1.0,
SZL_HEADER := #szl_header,
DR := P#DB245.DBX20.0 BYTE 20);
NOP 0;
NETWORK
TITLE =
//Datensatzlänge und Datensatznummer ins entsprechende Word ablegen
//
//Status Bytes/Wörter anzeigen
L #szl_header.lengthdr; // Datensatzlänge
T DB245.DBW 10;
L #szl_header.n_dr; // Anzahl Datensätze
T DB245.DBW 12;

L DB245.DBW 20; // DS1 : Kennung LED : SF 0001 h
L DB245.DBB 22; // DS1 : An 1 / Aus 0
L DB245.DBB 23; // DS1 : Blinken der LED : ja/nein

L DB245.DBW 24; // DS2 : Kennung LED : RUN 0004 h
L DB245.DBB 26; // DS2 : An 1 / Aus 0
L DB245.DBB 27; // DS2 : Blinken der LED : ja/nein

L DB245.DBW 28; // DS3 : Kennung LED : STOP 0005 h
L DB245.DBB 30; // DS3 : An 1 / Aus 0
L DB245.DBB 31; // DS3 : Blinken der LED : ja/nein

L DB245.DBW 32; // DS4 : Kennung LED : XXX
L DB245.DBB 34; // DS4 : An 1 / Aus 0
L DB245.DBB 35; // DS4 : Blinken der LED : ja/nein

L DB245.DBW 36; // DS5 : Kennung LED : BATF 0008 h
L DB245.DBB 38; // DS5 : An 1 / Aus 0
L DB245.DBB 39; // DS5 : Blinken der LED : ja/nein


END_FUNCTION
 
Zuviel Werbung?
-> Hier kostenlos registrieren

Wobei der Thread genauso unvollständig wie fehlerhaft ist.
Wenn über die SZL der Status aller LEDs abgefragt wird, müssen in einer Schleife die LEDs einzeln über die IDs abgefragt werden, da die Reihenfolge der LEDs im Antwortdatensatz nicht festgelegt ist. Es ist also durchaus erlaubt, den Zustand der SF-LED ans Ende der Liste zu setzen.

Das Abfragen der RUN und STOP LED vom SPS-Programm aus - na das sollte einleuchtend sein wie viel das bringt.
 
Zurück
Oben