TIA Referenzdaten in einer Variable schreiben

youfyouk

Level-1
Beiträge
33
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

ich schreibe in einer FC (SCL) die Zustände der Eingänge in eine DB (DB zur Kommunikation mit einer anderen CPU)

Code:
   DB2.DBX0.0 := Eingang_0.0
   DB2.DBX0.1 := Eingang_0.1
   DB2.DBX0.2 := Eingang_0.2

Nun möchte ich gerne wissen welcher Eingang gerade abgefragt wird. Das Ergebnis soll dann in einer Variable oder DB als String gespeichert werden.
D.h. der Zustand des jeweiligen Eingangs interessiert mich in dem Moment nicht, sondern welcher Eingang es ist.
Das Problem ist die Eingänge können sich von FC zu FC unterscheiden und auch anders sein.

Code:
   DB2.DBX0.0 := Eingang_4.0
   DB2.DBX0.1 := Eingang_5.1
   DB2.DBX0.2 := Eingang_4.7

Kann man evtl. über die Referenzdaten feststellen welcher Eingang gerade meine DBx beschreibt und diese in einer Variable schreiben?

Ich hoffe das Problem ist verständlich.

MfG
youfyouk
 
Was meinst Du mit "welcher Eingang gerade abgefragt wird"?
In Deinem oberen Programmstück werden direkt nacheinander 3 Bool-Werte (Eingänge???) in den DB2 geschrieben. (die Syntax des Zugriffs auf Eingang_... ist vermutlich nicht korrekt)
Das passiert in der SPS wahrscheinlich alle paar Millisekunden und dauert nur ein paar Nanosekunden.

Welcher Eingang davon soll als String gespeichert werden und wie soll der Stringtext genau aussehen?
Wozu soll das ganze gut sein?

In den Referenzdaten steht, auf welche Eingänge insgesamt im Programm direkt zugegriffen wird. Die Referenzdaten können aber nicht wissen, auf welchen Eingang das in der SPS abgearbeitete/laufende Programm zu irgendeinem bestimmten Zeitpunkt zugreift.

Harald
 
Die Symbolik existierT IMHO nor im Compiler. Zur Laufzeit weiß die SPS nix von den Symbolen. Wozu auch.
D.H. bei jedem Schreibzugriff auf fraglichen DB muss die Datenherkunft in z.B. einem weiteren DB nachgehalten werden.
Bedeutet im Code - jede Eingangsabfrage, die auf den DB kopiert wird benötigt eine zusätzliche Zeile für die Herkunft.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Compiler kann nicht so auf die Symbolnamen zugreifen, daß sie in eine Variable geschrieben werden könnten. Du müsstest selber einen Text gleich dem Symbolname in Deine Stringvariablen schreiben:
Code:
   DB2.DBX0.0 :=  Eingang_0.0 ;
   sMeineVar1 := 'Eingang_0.0' ;

   DB2.DBX0.1 :=  Eingang_0.1 ;
   sMeineVar2 := 'Eingang_0.1' ;

   DB2.DBX0.2 :=  Eingang_0.2 ;
   sMeineVar3 := 'Eingang_0.2' ;

Was für eine CPU programmierst Du?
Was für "Eingänge" meinst Du? Die Hardware-Eingänge der SPS oder die Input-Parameter eines FC?

Man kann (ziemlich aufwendig via POINTER) die Adresse eines FC-Aktualparameters als String in eine Stringvariable schreiben, aber nicht direkt den Symbolname.

Harald
 
"GetSymbolName" - Deshalb ja auch meine Nachfrage welche CPU und ob FC-Parameter. Meines Wissens kann man damit nur den Symbolname eines Eingangs-Aktualparameters ermitteln.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
...
Nun möchte ich gerne wissen welcher Eingang gerade abgefragt wird. Das Ergebnis soll dann in einer Variable oder DB als String gespeichert werden.
D.h. der Zustand des jeweiligen Eingangs interessiert mich in dem Moment nicht, sondern welcher Eingang es ist.
...
Die Eingänge werden doch zyklisch abgefragt(!?) - und es sind sicherlich etliche Eingänge - also wird der DB zugeschüttet mit nutzlosen(?) Informationen!?
Das kann es doch wohl nicht sein? Was soll wirklich getan werden? Soll gemeldet werden, wenn sich ein EingangsZustand von einer stark begrenzten Auswahl an Eingängen ändert?
Ich stelle mir vor, eine Liste der zu überwachenden Eingänge (z.B. in einem DB) zu haben und sie indirekt adressiert in einer Schleife zu überwachen. Dann sind ja Byte- und Bit-Nr durch die Liste vorgegeben und können in den Meldestring gepackt werden. Mit den symbolischen Namen hat das allerdings nichts zu tun, es sei denn, man hinterlegt sie auch in der Liste.
Gruss, Heinileini
 
Zurück
Oben