Frage zu Programmcode!

bastler

Level-2
Beiträge
258
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Habe folgenden FC1 geschrieben:

Code:
U #mld_sig
S #HM_1
U(
U #ACK
S #HM_2
UN #HM_1
R #HM_2
U #HM2 
)
UN #mld_sig
R #HM_1
U #HM_1
= #mld_out

Der Baustein soll zur Störmeldebearbeitung eingesetzt werden. Liegt eine Störung (#mld_sig) an, wird sie zum Störmeldeausgang (#mld_out) geschickt, erst nachdem sie quittiert (#ack) und nachdem sie wieder weg ist, wird #mld_out gleich 0. Das funzt auch soweit. Im OB1 rufe ich diesen Baustein 2x auf

OB1
Code:
Netzwerk 1

Call FC1
ACK       := DB101.DBX0.0  //ACK-Taste
mld_sig  := M0.0    //Störmeldesignal
mld_out  := DB101.DBX0.1   //Störmeldeausgang

Netzwerk 2

Call FC1
ACK       := DB101.DBX0.0  //ACK-Taste
mld_sig  := M0.1    //Störmeldesignal
mld_out  := DB101.DBX0.2   //Störmeldeausgang

Das Problem ist, wenn ich M0.0 setze, wird nicht nur DB101.DBX0.1 gesetzt, sondern auch DB101.DBX0.2 und wenn ich nur M0.1 setze wird
nicht nur DB101.dbx0.2 gesetzt sondern auch DB101.DBX0.1.
Was mach ich denn da falsch?

MfG
bastler
 
Du solltest das in einem FB programmieren und HM_1 und HM_2 als STAT Variablen anlegen
Ansonsten werden die temporären Variablen durch andere Werte überschrieben
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Bastler,

Marlob hat schon alles gesagt, ich möchte nur ergänzen.

Temporäre Variablen zu setzen macht nicht viel sinn, da Du Dir beim nächsten Bausteinaufruf über den Zustand der Variable nicht sicher sein kannst.

Wenn Du "Temporäre Variablen" nutzt, dann musst Du immer sicherstellen dass sie bei jedem Bausteinaufruf (also in dem FC) einen definierten Zustand annehmen.
Sprich einen bestimmten Wert laden oder bei einer Bit Variabel den Zustand True oder False annehmen.
Du darfst auch niemals drüber springen, wenn Du das Ergebnis am Ende abfragen willst.

Immer dran denken, wenn die Variable das erste mal im FC aufgerufen wird, darfst dem Wert nicht trauen. ;)
Sondern Du musst die Variable das Erstemal beschreiben.
Daraus folgt: Es gibt bei einer "Temporären Variable" nie eine Abfrage vor einer Zuweisung.
 
Hallo

hab den Programmcode jetzt in einen FB gepackt und #HM_1 und #HM_2 als statische Variablen angelegt, aber das Resultat ist das gleiche wie oben beschrieben.

Gruß
bastler
 
Glückwunsch Rainer zum Sieg:-D,

ich hatte zwei Instanz-DB's erstellt, aber den einen nicht aufgerufen.
So funzt das jetzt. Danke.

MfG
bastler
 
Zurück
Oben