timistgut
Level-1
- Beiträge
- 9
- Reaktionspunkte
- 2
-> Hier kostenlos registrieren
Hallo,
ich suche nun schon 2 Tage das Internet nach meiner Antwort ab, bisher aber kein richtiger Erfolg. Folgendes:
Ich soll einen FB programmieren, der eine Störmeldung als ANY Parameter bekommt. Z.B. P#DB1.DBX0.0 DWORD 3
Nun soll ich diesen Eingang überprüfen; wenn dieser an einer Stelle eine 1 hat, soll ich eine Meldeleuchte ansteuern können und wieder quittieren.
Soweit ich weiß, muss man die Schnittstelle in diesem Fall wie folgt ersetellen um auf den Speicherbereich zugreifen zu können:

Ich glaube diesen Pointer muss man dann noch initialisieren:
#Ptr_Any.S7Code := 16#10;
#Ptr_Any.DataType := 16#02;
#Ptr_Any.Length := 76;
#Ptr_Any.DBNumber := 1;
#Ptr_Any.MemoryArea := 16#84;
#Ptr_Any.ByteAddressMSB := 0;
(ist das überhaupt notwendig?)
Und nun will ich gerne, z.B. auf den Speicher DB1.DBX0.0 eine 1 setzten über die Beobachtungstabelle und demnach die Meldeleuchte ansteuern.
Wie kann ich nun den Speicher auslesen aus dem Pointer? Wenn ich den SCL Code beobachte, die 1 setzte, dann ändern sich die Werte nicht.
Ich hab schon versucht per BLKMOV die Variable in ein VARIANT zu schieben:
#Ret_Val := BLKMOV(SRCBLK := #Ptr_Any, DSTBLK => #Intern_Stör);
VariantGet(SRC:=#Intern_Stör,
DST=>#Intern_Val);
Aber wenn ich das versuche zu kompelieren, dann fehlt mir eine Initialisierung des #Intern_Stör (ist eine Temp Variable).
Im Grunde will ich einfach nur die Bits mit dem Wert 0 vergleichen und wenn dies nicht der Fall ist, die Meldeleuchte werfen.
Kann mir da wer weiterhelfen?
Gruß Tim
ich suche nun schon 2 Tage das Internet nach meiner Antwort ab, bisher aber kein richtiger Erfolg. Folgendes:
Ich soll einen FB programmieren, der eine Störmeldung als ANY Parameter bekommt. Z.B. P#DB1.DBX0.0 DWORD 3
Nun soll ich diesen Eingang überprüfen; wenn dieser an einer Stelle eine 1 hat, soll ich eine Meldeleuchte ansteuern können und wieder quittieren.
Soweit ich weiß, muss man die Schnittstelle in diesem Fall wie folgt ersetellen um auf den Speicherbereich zugreifen zu können:

Ich glaube diesen Pointer muss man dann noch initialisieren:
#Ptr_Any.S7Code := 16#10;
#Ptr_Any.DataType := 16#02;
#Ptr_Any.Length := 76;
#Ptr_Any.DBNumber := 1;
#Ptr_Any.MemoryArea := 16#84;
#Ptr_Any.ByteAddressMSB := 0;
(ist das überhaupt notwendig?)
Und nun will ich gerne, z.B. auf den Speicher DB1.DBX0.0 eine 1 setzten über die Beobachtungstabelle und demnach die Meldeleuchte ansteuern.
Wie kann ich nun den Speicher auslesen aus dem Pointer? Wenn ich den SCL Code beobachte, die 1 setzte, dann ändern sich die Werte nicht.
Ich hab schon versucht per BLKMOV die Variable in ein VARIANT zu schieben:
#Ret_Val := BLKMOV(SRCBLK := #Ptr_Any, DSTBLK => #Intern_Stör);
VariantGet(SRC:=#Intern_Stör,
DST=>#Intern_Val);
Aber wenn ich das versuche zu kompelieren, dann fehlt mir eine Initialisierung des #Intern_Stör (ist eine Temp Variable).
Im Grunde will ich einfach nur die Bits mit dem Wert 0 vergleichen und wenn dies nicht der Fall ist, die Meldeleuchte werfen.
Kann mir da wer weiterhelfen?
Gruß Tim