Wechselbetrieb von Objektorientiert entwickelten SPS Modelle

klementine

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag,

zuerst möchte ich mich herzlich für die viele gegenseitige Unterstützung der Community bedanken.

Ich habe ein Projekt streng nach OOP entwickelt. Wir können und dürfen die klassischen schrittkette und Ablauf nicht verwenden. Es wurden Modelle erstellt, Klassen gebaut und schließlich für jede der 12 Stationen in der Zelle eigene Objekte erstellt. Soweit alles gut und es funktioniert wunderbar. Nun suche ich eine Möglichkeit die Objekte:

1- Vollständig zu Simuliert: (Das Funktioniert schon)
Hier ist gemeint, den Objekten die Inputs NUR vom HMI vollständig vorzugaukeln.

2- In Echten Betrieb laufen lassen: (Das Funktioniert schon)
Die Objekten kommunizieren vollständig untereinander.

3- Teilweise zu Simuliert:
Hier ist gemeint, den Objekten die Inputs abwechselt vom HMI vorzugaukeln oder die Objekte untereinander kommunizieren zu lassen. Das Wechselt wird auch im normalen echten Betrieb verwendet. Der Betrieb darf aber nicht unterbrochen werden. Es darf auch nicht neue Referenziert werden.

Z.B: Ein Objeckt mit 17 Zustände arbeitet seine Zustände ein nach der andere durch je nachdem welche Transition da ist. Befindet sich das Objekt mal gerade im Zustand 9 und ihm die Input nun vom HMI vorgegaukelt wird, muss er dort weiter fahren (10-11-12-…) je nachdem welche Transition da ist. Wechseln wir wieder die Input auf die echten Kommunikation mit anderen Objekten, dann muss er auch hier weiter fahren (…-13-14-15…) je nachdem welche Transition da ist.

Das Wechselt wird verriegelt und mit Passwort nur für befugte personal. Die Punkte (1) und (2) sind erfolgreich realisiert. Aber der Punkt (3) bereitet noch Schwierigkeiten. Hier meine bisherige Ansätze:

a) Das Objekt einmal instanziieren. Die Daten vom Echten betrieb (Daten von andere Objekten) mit den simulierten Daten vom HMI verodern und das als Input an das Objekt anschließen.
Es funktioniert soweit gut, aber das Verhalten ist dann deterministisch. Es sind nicht nur Boolesche aber auch Felder und Komplexe Datentypen und deren Veroderung führt zu sehr sehr komische Verhalten und Ergebnisse.

b) Das Objekt zweimal instanziieren. das eine mit dem HMI und das andere mit den echten Daten verbinden. mit "EN" Enable wird das eine oder andere Objekt eingeschaltet. Beide schreiben ihre Ergebnisse auf demselben Output. Das lauft gut aber dafür muss ich die Modelle umbauen, dass der laufenden Zustand zw den Instanzen austauschbar ist. Im erstenlauf war alled OK. Aber im wechseln wird der zuletzt gelaufene Zustand in einem Instanz nochmal im neue enableten Instanz durchgefürht. Bei Timer und enty/ do/ Exit/ Aktivitäten führt das zu Fehler....

jetzt bitte ich Ihre Erfahrung und Empfehlungen für diese Problem

Gruß
Klementine

 
Ich verstehe die Probleme mit Variante "a" nicht ganz. Verodern allein wird wohl nicht reichen aber wenn man einen Simulationsmodus implementiert der zwischen Realinputs und SimInputs definiert umschaltet dann sollte das gehen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die Antwort,

Hier habe ich nochmal meine beiden Ansätze (a) und (b) graphisch dargestellt:

Ansatz (a)
a.PNG

Ansatz (b)
b.PNG


Die Implementierung der zwischenlogic für Sim & Real würde das Modell verändern, aber eine Versuch ist es wert.

MFG
Klementine
 
Ja das habe ich so verstanden. Ich verstehe aber trotzdem nicht was bei Lösung A Probleme machen soll.

Unbenannt.png

EDIT. Denn im Grunde ist Variante b nichts anderes als Variante a nur daß du das "ODER" (Als Logik zu verstehen, nicht als einzellnes Gatter) hinter den Instanzen hast. Wobei das Gate auch in Instanz A integriert sein könnte.
 
Zuletzt bearbeitet:
Du darfst nicht einfach ODER-Verknüpfen, sondern musst gezielt "Umschalten".
Also qausi eine "Entweder-Oder"-Verknüpfung :p

Code:
U InstanzX.SignalA
UN Simulation_Ein
O
U HMI.SignalA
U Simulation_Ein
= InstanzA.Freigabe

Gruß
Dieter
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi!

Verwende doch für den "SIM" Aufruf die selben Instanzdaten wie für den "real" Aufruf.
Die umschaltung mit "en" funktioniert dann genauso, nur dass der Ablauf nach der Simulation da weitergeht wo er vorher mit den realen eingangsdaten aufgehört hat.

Gruß,

Ottmar
 
Danke für Ihr Antwort. Sie haben mir die Augen geöffnet.

Das undeterministische Verhalten im Ansatz (a) Kommt dadurch, dass ich nicht nur boolesche aber auch viele komplexe Daten übertrage. Das Switchen zw. SimData und RealDate habe ich über „IF“ abgewickelt.

if HMIenable then
Input = SimData;
else
input = RealDate;
endif.

Und genau hier vermutet ich mein Problem: ich darf hier die Inputs nicht direkt aus der HMI überschreiben sondern die HMI Daten erst in einen globalen DB anlegen und dort an die Inputs verbinden…
Habe ich Recht und vermische ich wieder etwas? Dann kann ich wie folgt vorgehen:

SimData := globalVar.HMIdaten

if globalVar.HMIenable then
Input = SimData;
else
input = RealDate;
endif

Dazu kommt dass ich das ganze nicht wie bisjetzt in einem FB sondern für jedes Objekt seinen eigenen SimRealSwitcher-FB erstellen muss.
Kann ich anstatt in einem FB die SimRealSwitcher in einem FC erstellen? Ich brauche keinen Gedächtnis bei der Datenübertragung. Der SimRealSwitcher sollt nur entweder die Daten von <Sim> oder die von <Real> an die Inputs weitergeben.

MfG
Klementine
 
Was du bedenken musst ist das im moment des umschaltens von real auf sim nicht der aktuelle zustand in der sim steht.
das könnte zu unerwünschten nebenwirkungen führen

Code:
if HMIenable then
Input = SimData;
else
input = RealDate;
[COLOR=#ff0000]SimData = RealDate;
[/COLOR]endif.
wenn es nur ein umkopieren von daten ist kannst du ruhig eine fc nehmen
 
Zuletzt bearbeitet:
Zurück
Oben