plc_typ
Level-2
- Beiträge
- 215
- Reaktionspunkte
- 30
-> Hier kostenlos registrieren
Hallo zusammen,
hab mir momentan eine Anwendung bei der ich die Zustände
der CPU LEDs abfragen müsste. Hab selbst schon etwas
dazu geschieben, nur leider funktionierts in keinster weise.
Ist das erste mal das ich mit dem SFC51 arbeite, hab mir
mal so einiges durchgelesen und es dann mal so zusammengeschrieben
wie es für mich "plausibel" schien.
Hier mal mein FC
Schonmal Danke im vorraus
hab mir momentan eine Anwendung bei der ich die Zustände
der CPU LEDs abfragen müsste. Hab selbst schon etwas
dazu geschieben, nur leider funktionierts in keinster weise.
Ist das erste mal das ich mit dem SFC51 arbeite, hab mir
mal so einiges durchgelesen und es dann mal so zusammengeschrieben
wie es für mich "plausibel" schien.
Hier mal mein FC
Code:
FUNCTION "FC_DIAG" : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
BEAT_2HZ : BOOL ;
BEAT_0_5Hz : BOOL ;
ENABLE : BOOL ;
END_VAR
VAR_TEMP
DEAD : INT ;
BUSY : BOOL ;
INDEX : WORD ;
LED_ON : BOOL ;
LED_FLASHS_NOT : BOOL ;
LED_FLASHS_2Hz : BOOL ;
LED_FLASHS_0_5Hz : BOOL ;
ADRESSREGISTER : DWORD ;
END_VAR
BEGIN
NETWORK
TITLE =Adressregister widerherstellen
TAR1 #ADRESSREGISTER;
NETWORK
TITLE =Reset Sprungzähler
L "DB_DP_DIAGNOSE".SPL_BYTE;
L B#16#6;
==I ;
SPBN _SET;
L B#16#0;
T "DB_DP_DIAGNOSE".SPL_BYTE;
_SET: NOP 0;
NETWORK
TITLE =Sprungliste
L "DB_DP_DIAGNOSE".SPL_BYTE;
SPL _OUT;
SPA _SF;
SPA _RUN;
SPA _FRC;
SPA _STP;
SPA _BF1;
SPA _BF2;
_OUT: SPA _MVE;
_SF: L W#16#1;
T #INDEX;
+AR1 P#0.0;
SPA _MVE;
_RUN: L W#16#4;
T #INDEX;
+AR1 P#0.1;
SPA _MVE;
_FRC: L W#16#6;
T #INDEX;
+AR1 P#0.2;
SPA _MVE;
_STP: L W#16#5;
T #INDEX;
+AR1 P#0.3;
SPA _MVE;
_BF1: L W#16#B;
T #INDEX;
+AR1 P#0.4;
SPA _MVE;
_BF2: L W#16#C;
T #INDEX;
+AR1 P#0.5;
_MVE: NOP 0;
NETWORK
TITLE =Read DP
CALL "RDSYSST" (
REQ := TRUE,
SZL_ID := W#16#19,
INDEX := #INDEX,
RET_VAL := #DEAD,
BUSY := #BUSY,
SZL_HEADER := "DB_DP_DIAGNOSE".SZL_HEADER,
DR := P#DB1.DBX8.0 BYTE 4);
NETWORK
TITLE =SET Output
U #BUSY;
SPB NON;
L "DB_DP_DIAGNOSE".led_on;
L 1;
==I ;
= #LED_ON;
L "DB_DP_DIAGNOSE".ed_blink;
L 0;
==I ;
= #LED_FLASHS_NOT;
TAK ;
L 1;
==I ;
= #LED_FLASHS_2Hz;
TAK ;
L 2;
==I ;
= #LED_FLASHS_0_5Hz;
AUF "DB_DP_DIAGNOSE";
U #LED_ON;
U #LED_FLASHS_2Hz;
U #BEAT_2HZ;
O ;
U #LED_ON;
U #LED_FLASHS_0_5Hz;
U #BEAT_0_5Hz;
O ;
U #LED_ON;
U #LED_FLASHS_NOT;
= DBX [AR1,P#14.0];
NON: NOP 0;
NETWORK
TITLE =Sprungzähler
U #ENABLE;
UN #BUSY;
SPBN _CNT;
L "DB_DP_DIAGNOSE".SPL_BYTE;
INC 1;
T "DB_DP_DIAGNOSE".SPL_BYTE;
_CNT: NOP 0;
NETWORK
TITLE =Adressregister sichern
LAR1 #ADRESSREGISTER;
END_FUNCTION