Hallo,
hier ein Beispiel, wie wir das gelöst haben (mittels SFC12).
// Trigger Anmelden bilden
U #ON_OFF_PN_Device //An-/Abmelden PN-Device
= #Anm_PN_Device //Anmelden PN-Device
// Trigger Abmelden bilden
UN #ON_OFF_PN_Device //An-/Abmelden PN-Device
= #Abm_PN_Device //Abmelden PN-Device
// Wandlung INT --> WORD (Parameter LADDR)
L #IN_STADR_HW //Startadresse (Hardware)
T #HW_ADR_PN_Device //Hardware-Adresse PN-Device
// PROFINET-Device Anmelden/Aktivieren
CALL "D_ACT_DP"
REQ :=#Anm_PN_Device //Anmelden PN-Device
MODE :=B#16#1 //1 = PROFINET-Device aktivieren
LADDR :=#HW_ADR_PN_Device //Hardware-Adresse PN-Device
RET_VAL:=#Dummy //Status Dummy = 0 i.O., <> 0 Error
BUSY :=#Busy //Status Busy = 1 Auftrag aktiv, 0 = Auftrag beendet
// Auswertung PROFINET-Device angemeldet
U #Anm_PN_Device //Anmelden PN-Device
U(
L #Dummy //Status Dummy = 0 i.O., <> 0 Error
L 0
==I
)
UN #Busy //Status Busy = 1 Auftrag aktiv, 0 = Auftrag beendet
S #OUT_STATUS_PN_DEVICE //Status PROFINET-Device
// PROFINET-Device Abmelden/Deaktivieren
CALL "D_ACT_DP"
REQ :=#Abm_PN_Device //Abmelden PN-Device
MODE :=B#16#2 //2 = PROFINET-Device deaktivieren
LADDR :=#HW_ADR_PN_Device//Hardware-Adresse PN-Device
RET_VAL:=#Dummy //Dummy
BUSY :=#Busy //Busy
// Auswertung PROFINET-Device abgemeldet
U #Abm_PN_Device //Abmelden PN-Device
U(
L #Dummy //Status Dummy = 0 i.O., <> 0 Error
L 0
==I
)
UN #Busy //Status Busy = 1 Auftrag aktiv, 0 = Auftrag beendet
R #OUT_STATUS_PN_DEVICE //Status PROFINET-Device
Und dazu noch die Beschreibung zum SFC12:
Beschreibung Parameter SFC12
============================
REQ =
Pegelgetriggerter Steuerparameter
REQ=1: Aktivieren bzw. Deaktivieren durchführen
MODE =
Auftragskennung. Mögliche Werte:
- 0: Auskunft einholen, ob die angesprochene Komponente aktiviert oder
deaktiviert ist
- 1: DP-Slave/PROFINET IO-Device aktivieren
- 2: DP-Slave/PROFINET IO-Device deaktivieren
- 3: DP-Slave/PROFINET IO-Device aktivieren und nach durchgeführtem Wechsel des
Aktivierungszustands OB86 aufrufen
- 4: DP-Slave/PROFINET IO-Device deaktivieren und nach durchgeführtem Wechsel
des Aktivierungszustands OB86 aufrufen
LADDR =
Beliebige logische Adresse des DP-Slaves/PROFINET IO-Devices
RET_VAL =
Tritt während der Bearbeitung der Funktion ein Fehler auf, enthält der
Rückgabewert einen Fehlercode.
BUSY =
Aktivkennung:
- BUSY=1: Der Auftrag ist noch aktiv.
- BUSY=0: Der Auftrag wurde beendet.
Beschreibung Fehlercode SFC12 (RET_VAL W#16#....)
===========================================
0000 =
Der Auftrag wurde fehlerfrei durchgeführt.
0001 =
DP-Slave/PROFINET IO-Device ist aktiviert (Dieser Fehlercode ist nur möglich
bei
Mode = 0).
0002 =
DP-Slave/PROFINET IO-Device ist deaktiviert (Dieser Fehlercode ist nur möglich
bei Mode = 0).
7000 =
Erstaufruf mit REQ=0. Der über LADDR festgelegte Auftrag ist nicht aktiv; BUSY
hat den Wert 0.
7001 =
Erstaufruf mit REQ=1. Der über LADDR festgelegte Auftrag wurde angestossen;
BUSY
hat den Wert 1.
7002 =
Zwischenaufruf (REQ irrelevant). Der aktivierte Auftrag ist noch in
Bearbeitung;
BUSY hat den Wert 1.
8090 =
- Sie haben keine Baugruppe mit der in LADDR angegebenen Adresse projektiert.
- Sie betreiben Ihre CPU als I-Slave und haben in LADDR eine Adresse dieses
I-Slaves angegeben.
8092 =
Der laufende Deaktivierungsvorgang eines DP-Slaves/PROFINET IO-Devices (MODE=2)
kann nicht durch seine Aktivierung (MODE=1) abgebrochen werden. Aktivieren sie
die Komponente zu einem späteren Zeitpunkt.
8093 =
Zu der in LADDR angegebenen Adresse gehört kein DP-Slave/PROFINET IO-Device (Es
liegt keine Projektierung vor.), oder der Parameter MODE ist nicht bekannt.
8094 =
Sie haben versucht, ein Gerät zu aktivieren, das ein möglicher Partner eines
Werkzeugwechselports ist. Zu diesem Zeitpunkt ist an diesem Werkzeugwechselport
aber bereits ein anderes Gerät aktiviert. Das aktivierte Gerät bleibt aktiviert.
80A1 =
Die angesprochene Komponente konnte nicht parametriert werden. (Dieser
Fehlercode ist nur möglich bei MODE=1.)
Hinweis: Diese Fehlerinformation liefert die SFC nur dann, wenn während der
Parametrierung des aktivierten Slaves/Devices diese Komponente wieder ausfällt.
Wenn nur die Parametrierung einer einzelnen Baugruppe nicht erfolgreich war,
liefert die SFC die Fehlerinformation W#16#0000.
80A2 =
Der angesprochene DP-Slave gibt keine Rückmeldung (diese Fehlerinformation gibt
es nicht bei PROFINET IO-Devices. Der Aktivierungsauftrag wird bei PROFINET
nicht zeitüberwacht).
80A3 =
Der betroffene DP-Master/PROFINET IO-Controller unterstützt diese Funktion
nicht.
80A4 =
Die CPU unterstützt diese Funktion bei externen DP-Mastern/PROFINET
IO-Controllern nicht.
80A6 =
Steckplatzfehler im DP-Slave/PROFINET IO-Device; es kann nicht auf alle
Nutzdaten zugegriffen werden (Dieser Fehlercode ist nur möglich bei MODE=1).
Hinweis: Diese Fehlerinformation liefert die SFC nur dann, wenn nach der
Parametrierung der aktivierten Komponente und vor dem Ende der SFC die
Komponente wieder ausfällt. Wenn nur eine einzelne Baugruppe nicht verfügbar
ist, liefert die SFC die Fehlerinformation W#16#0000.
80C1 =
Die SFC12 wurde gestartet und wird mit einer anderen logischen Adresse
fortgesetzt. (Dieser Fehlercode ist nur möglich bei MODE=1 und bei MODE=2.)
80C3 =
- Temporärer Ressourcenfehler: Die CPU bearbeitet momentan das mögliche Maximum
an Aktivierungs-/Deaktivierungsaufträgen. (Dieser Fehlercode ist nur möglich
bei MODE=1 und bei MODE=2.)
- Die CPU erhält gerade eine geänderte Konfiguration. Das Deaktivieren und
Aktivieren von DP-Slaves/PROFINET IO-Devices ist daher momentan nicht möglich.
80C5 =
DP: Vom Anwender noch nicht abgeholte aufträge werden durch Wiederanlauf
verworfen.
80C6 =
PROFINET: Vom Anwender noch nicht abgeholte aufträge werden durch Wiederanlauf
verworfen.
8xyy =
allgemeine Fehlerinformation, siehe Fehlerauswertung mit dem Ausgangsparameter
RET_VAL
Funktioniert tadellos ohne Makel. Viel Erfolg.
pretender2009