Jump to content

Modul mit EV-Steuerung "kopierbar" entwerfen, ohne Code-Dopplung


Eggu

Empfohlene Beiträge

Hallo,

ich möchte anhand eines Beispiels (Bahnübergang) einen besonderen Aspekt der EV-Steuerung/Programmierung darstellen und diskutieren.

Wenn ich ein Modul (Teil-Modell/Anlage mit EV-Code) kopiere   (Ctrl-C, Ctrl-V) wird zwar das eigentliche Modell dupliziert, nicht aber der EV-Code (was hier auch erwünscht ist).
Ob die beiden Kopien dann korrekt (insb. unabhängig voneinander) arbeiten, hängt von der Art des Codes ab. Benutze ich z.B. nur Gleiskontakte mit Schlagworten als Trigger, sollte es funktionieren.
Referenzieren mehrere Trigger eine gemeinsame Variable, definiert man diese üblicherweise direkt in der EV-Steuerung als Modulvariable. (z.B. einen gemeinsamen Lok-Zähler, um zu triggern, wann die Schranke geschlossen/geöffnet werden muss). Diese Variable wird aber nicht gedoppelt beim kopieren, aber das bräuchte ich hier.

Möchte ich nun erreichen, dass mehrere Kopien korrekt mit dem gleichen gemeinsamen Code arbeiten, muss ich die entsprechenden Variablen und Referenzen auch automatisch mit kopieren (und anpassen). Das erreiche ich, indem ich diese Größen nicht im Modul definiere, sondern alle als Objekt-Variablen (also an ein vorhandenes Objekt oder Dummy-Objekt "hänge"). Allerdings ist der Zugriff  dann umständlicher, z.B. von einem Kontakt (Auslöser) indirekt (über eine Objekt-Variable) auf das gemeinsame (Dummy-) Objekt verweisen, dort dann die gewünschte Variable angeben oder weiter verweisen auf ein gemeinsames weiteres Objekt oder Liste (z.B. auf eine Liste der Schranken, die bedient werden sollen). In der EV-Steuerung ist das dann das Konstrukt Variable(erweitert)...Variable(erweitert).
Wenn ich das so mache, ist eine Kopie sofort funktionsfähig, ohne weitere Anpassungen, weil beim Kopieren automatisch die Variablen und Objekt-Referenzen angepasst werden. 

In meinem Beispiel habe ich das mal umgesetzt  und beschrieben, das funktioniert auch mit den Verzögerungen, allerdings nicht mit expliziten Timern, diese kann ich nicht an ein Objekt "hängen", sondern nur auf Modulebene definieren.

Die Methode ist angelehnt an objekt-orientierte Programmierung, nur dass ich hier keine Klassen vorab definieren kann, sondern gleich eine (kopierbare) Instanz.

Geht es auch einfacher ?

Modul Bahnübergang:

F3646E03-DDF4-435E-8EF5-AB192A7DB659

Hinweis:
"Bearbeiten - Einfügen-aus - Anlage" funktioniert anders, da wird ein (externes) Modul inkl. EV-Code eingefügt, füge ich es mehrmals ein, wird auch der EV-Code mehrfach eingefügt.
Ist der EV-Code wie oben beschrieben entworfen, müsste ich die Kopien löschen, sonst werden z.B. Zähler mehrfach bedient.

Gruß
Eggu

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 26 Minuten schrieb Eggu:

Wenn ich ein Modul (Teil-Modell/Anlage mit EV-Code) kopiere   (Ctrl-C, Ctrl-V) wird zwar das eigentliche Modell dupliziert, nicht aber der EV-Code

Hallo Eggu,

wenn du hingegen die Anlage auf diesen Teilbereich reduzierst und als kleine Anlage abspeicherst,
wird beim Import dieser kleinen Anlage in eine andere ...

614751904_einfgenausAnlage.jpg.39fc3ed7f5fb4a728f0ae78eb7596f2f.jpg

... auch die zugehörige EV mit importiert und in einem Unterordner der EV abgelegt.

1667476210_importierteEV.thumb.jpg.7ceba3de07679c9312c840ce13770b03.jpg
So bleiben auch Referenzen etc. erhalten.

Viele Grüße
Götz

Bearbeitet von Goetz
Bilder eingefügt
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Götz,

ja, das stimmt.

Das hatte ich am Ende unter "Hinweis" ja auch beschrieben.

Bei der "herkömmlichen" Programmierung könnte ich so die Teilanlage mehrfach einfügen und hierdurch quasi Kopien erzeugen,
und jede Kopie hätte auch ihren eigenen Code, das würde meist funktionieren.

Ich hatte ja nach eine Lsg. gesucht, wo alle Modell-Kopien mit dem gleichen gemeinsamen Code arbeiten.

weitere Anmerkung: Das "Reduzieren" geht doch nur, wenn ich alle Teile, die nicht zu meinem Teilbereich gehören, weglösche.
Komfortabler wäre die Option, direkt einen markierten Teilbereich abspeichern zu können (wie bei Katalog - 3dModelle - Neu-aus-Selektion, aber hierbei wird ja kein EV-Code gespeichert).

Gruß
Eggu

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen.

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...