-> Hier kostenlos registrieren
Hallo, ich habe folgendes Problem:
Habe mir einen FC geschrieben, der einen binären Zustand auswertet (Meldung, Warnung, ...).
Damit ich dem FC nur 1 Bit übergeben muss (IN_OUT), greife ich auf diverse Hilfsmerker(Datenbits) indirekt zu, indem ich mir die Adresse des Formaloperanden auslese (Netzwerk 1, 1. Anweisung) und Offsets dazuaddiere.
Wenn ich nun dem FC als Parameter z.B.: M12.1 übergebe, verwendet er die M16.1, M20.1, M24.1, usw. als Hilfsmerker (vorausgesetzt im Netwerk 2 wird DBX durch M ersetzt) --> funktioniert.
Wenn ich aber ein Datenbit übergebe (z.B: DB201.DBX10.0), dann funktioniert das mit dem Auslesen der Adresse des Formaloperanden nicht mehr.
Ich weiß nicht warum.
Wäre dankbar, wenn mir jemand helfen könnte.
Habe mir einen FC geschrieben, der einen binären Zustand auswertet (Meldung, Warnung, ...).
Damit ich dem FC nur 1 Bit übergeben muss (IN_OUT), greife ich auf diverse Hilfsmerker(Datenbits) indirekt zu, indem ich mir die Adresse des Formaloperanden auslese (Netzwerk 1, 1. Anweisung) und Offsets dazuaddiere.
Code:
FUNCTION FC 21 : VOID
TITLE =Antrieb: Meldung
FAMILY : Antrieb
VERSION : 1.0
VAR_INPUT
Sign : BOOL ; //Feldsignal Fehler (1=Fehler)
Meldung_ist_Alarm : BOOL ; //Meldung ist Alarm (1=Antrieb wird abgeschaltet, 0=Nur Warnung)
END_VAR
VAR_IN_OUT
Meldung : BOOL ; //Meldung
Antrieb : UDT 11;
END_VAR
VAR_TEMP
adresse_Meldungen : DINT ;
adresse_Alarme : DINT ;
adresse_Warnungen : DINT ;
adresse_FLM : DINT ;
adresse_FL : DINT ;
adresse_Meld_gesp : DINT ;
END_VAR
BEGIN
NETWORK
TITLE =Adressen der Bits für die Alarmbehandlung ermitteln
//Folgende Adressen ergeben sich aus dem Aufbau des UDT11!!
//
//Die Beschaltung der Meldung von aussen muss ein Bit aus dem Bereich "Meldungen"
//sein --> UDT11, Offset 12!!
L P##Meldung; // Adresse der Meldung
T #adresse_Meldungen;
LAR1 ; // Dient nur zur Kontrolle, welche Adresse "übergeben" wird
L P#4.0;
+D ;
T #adresse_Alarme; // 4 Bytes dahinter: Alarme
L P#4.0;
+D ;
T #adresse_Warnungen; // 8 Bytes dahinter: Warnungen
L P#4.0;
+D ;
T #adresse_FLM; // 12 Bytes dahinter: Flankenmerker
L P#4.0;
+D ;
T #adresse_FL; // 16 Bytes dahinter: Flanken
L P#4.0;
+D ;
T #adresse_Meld_gesp; // 20 Bytes dahinter: Meldungen gespeichert
NETWORK
TITLE =Meldung aufbereiten
U #Sign;
= #Meldung; // Störmeldung
FP DBX [#adresse_FLM];
= DBX [#adresse_FL]; // Flanke Störmeldung gekommen
U #Meldung;
U #Meldung_ist_Alarm;
= DBX [#adresse_Alarme]; // Störmeldung schaltet Antrieb ab
U #Meldung;
UN #Meldung_ist_Alarm;
= DBX [#adresse_Warnungen]; // Störmeldung schaltet Antrieb NICHT ab
U #Antrieb.Schnittstelle.Quitt;
R DBX [#adresse_Meld_gesp];
U DBX [#adresse_FL];
U DBX [#adresse_Alarme];
S DBX [#adresse_Meld_gesp]; // gespeicherte Meldung
END_FUNCTION
Wenn ich aber ein Datenbit übergebe (z.B: DB201.DBX10.0), dann funktioniert das mit dem Auslesen der Adresse des Formaloperanden nicht mehr.
Ich weiß nicht warum.
Wäre dankbar, wenn mir jemand helfen könnte.