TIA Wertänderung erkennen

slot23

Level-2
Beiträge
89
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

ich hätte eine kurze Frage. Ich möchte eine Artikelnummer auf Änderung überwachen.
Die Artikelnummer bekomme ich als Merker Doppelwort in die SPS und möchte diese auf Änderung überprüfen.
Hat jemand eine Idee wie man so was am einfachsten löst?

Vielen Dank für eure Hilfe!

Gruß
 
nur mal so eben hingetippt

set
r wertänderung

l artnr_aktuell
l artnr_speicher
<>d spbn m001

set
s wertänderung
l artnr_aktuell
t artnr_speicher

m001:nop 0

wertänderung ist für einen zyklus high
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So in der art
Code:
Wertaenderung := FALSE;

IF gespeicherte_Artikelnummer <> Artikelnummer THEN
    Wertaenderung := TRUE;
    gespeicherte_Artikelnummer := Artikelnummer; // Artikelnummer speichern
END_IF;
 
So in der art
Code:
Wertaenderung := FALSE;

IF gespeicherte_Artikelnummer <> Artikelnummer THEN
    Wertaenderung := TRUE;
    gespeicherte_Artikelnummer := Artikelnummer; // Artikelnummer speichern
END_IF;

Verkürzt:
Code:
Wertaenderung := gespeicherte_Artikelnummer <> Artikelnummer;

gespeicherte_Artikelnummer := Artikelnummer;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ähnliches Anliegen und hab noch eine Frage dazu:

Wann schreibe ich den gespeicherten Wert?

Situation:
Mein HMI hat eine Datenbank in der Anlagenparameter eingegeben werden können (Max Durchfluss und Trockenwetterstellung Regelschieber).
Auf diese beiden Variablen möchte nun das Leitsystem auch schreiben. Das Leitsystem bekommt bisher den Wert der Variable einfach per Move in ihren DB geschrieben (Leitsystem-DB). Genau in diesen Adressbereich möchten sie jetzt auch eine Änderung eintragen können. Also müsste ich den Wert von dort wieder zurück schreiben in meinen Kommunikations-DB auf den das HMI schreibt (HMI-DB).
Ändert das Leitsystem jetzt den wert, wird dieser gleich wieder überschrieben mit der Variable vom HMI-DB.
Ich bräuchte also einen Weg, bei dem die Werte nur bei Wertänderung in den jeweiligen DB zum und vom Leitsystem übertragen werden (oder es hat jemand eine andere Lösung?). Leider kann ich hierfür keine weiteren Bits o.ä. verwenden, Vorgabe vom Leitsystem.
Konkrete Frage:
Wann schreibe ich nun den aktuell gültigen Wert als gespeicherten Wert mit dem ich dann vergleiche? Und wie mach ich das? Auch bei Neustart der CPU z.B. müsste ja ein Wert drin stehen.

Vielen Dank schon mal =)
 
Wann schreibe ich nun den aktuell gültigen Wert als gespeicherten Wert mit dem ich dann vergleiche?
Nein, nicht zuerst den aktuell gültigen Wert speichern und ihn dann mit etwas vergleichen, was gerade überschrieben wurde,
sondern zuerst vergleichen und dann speichern für den nächsten Vergleich im nächsten Zyklus.

PS:
Speichern kannst Du ...
- entweder in jedem Zyklus
- oder nur "bei Bedarf" (d.h., wenn sich der Wert geändert hat).
 
Also mal für mich als Gehirnmessi:
1. CPU Start, Standartwert wird in DB geladen
2. Schreiben des Startwertes vom HMI-DB auf den Leitsystem-DB
3. Änderung am Leisystem-DB durch Bediener
4. Durch dauerhaften Vergleich (zyklisch) wird Änderung zwischen HMI-DB und Leitsystem-DB erkannt
5. Wert von Leitsystem-DB in Wert HMI-DB schreiben.
soweit wäre das bei mir klar. Punkt 4. und 5. könnten auch Änderungen am HMI-DB sein, die ich dasnn in den Leitsystem-DB schreibe.
Aber, ich rauch ja einen 3. Wert mit dem ich vergleichen kann. Den müsste ich ja direkt nach dem Neustart (OB100) beschreiben und nach Wertänderung wieder.

OB100:
Code:
Vergleichswert := HMI.Wert;
//Steht beim Startup schon der Start-Wert im DB?

FB:
Code:
IF Vergleichswert <> HMI.Wert THEN
     Leitsystem.Wert := HMI.Wert;
     Vergleichswert := HMI.Wert;
ELSIF Vergleichswert <> Leitsystem.Wert THEN
     HMI.Wert := HMI.Wert;
     Vergleichswert := HMI.Wert;
END_IF;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn Du schon zwei DB-Werte hast (HMI und SCADA), dann werden die ja sowieso sicherlich auf einen internen Speicher "Nutzwert" schreiben. Anhand dieses Nutzwertes kannst Du dann ja erkennen, welcher von den beiden Werten sich geändert hat. Und den übernimmst Du. Um den (unwahrscheinlichen) Fall auszuschließen, daß beide Systeme gleichzeitig den Wert ändern (z.B. nach Netzwerkwiederkehr o.Ä.), kannst Du durch die Reihenfolge der IF-Abfragen die Priorität für ein System beeinflussen.

OB100:
Code:
Vergleichswert := HMI.Wert;
//Steht beim Startup schon der Start-Wert im DB?
Wenn der Wert remanent angelegt ist: ja.
Beachte, daß Du obiges nur 1x ausführen darfst!
FB:
Code:
IF Vergleichswert <> HMI.Wert THEN
     Leitsystem.Wert := HMI.Wert;
     Vergleichswert := HMI.Wert;
ELSIF Vergleichswert <> Leitsystem.Wert THEN
     HMI.Wert := HMI.Wert;  Leitsystem.Wert;
     Vergleichswert := HMI.Wert;  Leitsystem.Wert;
END_IF;
in obigem Code hat das HMI Priorität, wenn beiden gleichzeitig Wertänderungen haben.
 
Bei unseren Leitsystemen wird das so gelöst:

1. Feld momentaner Wert in der CPU (reines A Feld)
2. Feld zum eintragen neuer Werte (entweder EA oder nur E, dann noch ein Button für schreiben in CPU)

Somit erkennt der Bediener am Leitsystem immer was da vor Ort los ist und den letzten eingegebenen Wert

Meist wird das dann auch so an den Panels gelöst da die Bediener das so gewöhnt sind.
 
Zurück
Oben