SPS-Programm dynamisch laden

twincatter

Level-1
Beiträge
137
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo SPSler,

wir planen derzeit einen Prüfautomaten (mit TC3 und übergeordnetem C#-Programm).
Der Prüfautomat soll unterschiedlichste Produkte prüfen können.
Der Automat stellt hierfür unterschiedlichste Funktionen bereit (z.B. Achsen, Kommunikation mit Prüflingen, Messequipment, IOs,...)

Es geht im Folgenden darum, wie unterschiedlichste produktspezifisch Prüfabläufe programmiert werden können (welche die vom Automaten zur Verfügung stehenden Komponenten benutzen sollen)
Es geht nicht nur um die Ausführung der Prüfabläufe mit unterschiedlichen Parametern, sondern tatsächlich um komplett unterschiedliche Abläufe.
Neben vieler anderer Möglichkeiten haben wir folgende Idee:

Die Grundfunktionen der Automaten werden in einer eigenen SPS-Runtime programmiert und bleibt 'immer gleich'.

Eine zusätzlichen SPS-Runtime soll zur Ausführung der produktspezifischen Prüfabläufe verwendet werden.

Dies hätte ggf. den Vorteil, dass bei Produktwechsel automatisiert das entsprechende SPS-Programm in die zusätzliche Runtime geladen werden könnte.

Mich würde interessieren ob euch Anwendungen bekannt sind die dynamisch SPS-Programme laden und was Ihr von diesem Ansatz haltet.

Freundliche Grüße
Michael
 
Ich habe für ABB mal automatisierte Softwaretests für die AC500 erstellt. Da die SPS-Programme so gestaltet werden mussten, dass sie in die kleinste SPS Variante passen, mussten Projekte nachgeladen und gestartet werden. Ich hatte ein C# Programm geschrieben, dass den Status der SPS abfragte und gesteuert wurde das Ganze über AutoIt wo ich auch eine GUI mit erstellt habe.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Oliver,
kann ich das so verstehen, dass die Projekte in der Entwicklungsumgebung je nach Bedarf nachgeladen/zusammengebaut wurden und dann 'auf einen Schlag' in die SPS geladen wurden?

Oder wurden die SPS-Programme zusätzlich bei laufender SPS geladen (ich dachte dass dies nicht möglich ist)?

Grüße
Michael
 
Die Programme waren komplett fertig und wurden automatisiert über die Entwicklungsumgebung geladen, dabei wurde die SPS gestoppt und nach dem Laden wieder gestartet. Die Programme liefen autonom, das C#-Programm hat lediglich in regelmäßigen Abständen eine Anfrage an die SPS gesendet, ob es neue Log-Einträge gab, wobei, um die Datenmenge in der SPS klein zu halten, lediglich IDs übertragen wurden und der Klartext vom C#-Programm dann aus einer XML-Datei geholt wurde. Die ganze Steuerung der Entwicklungsumgebung erfolgte über Komandozeile und AutoIt, wobei AutoIt auch alle Meldungsfenster ausgewertet und darauf reagiert hat.
 
Ob ich nun zusaetzliche SPSe definiere oder Bausteine in einer SPS ist doch eigentlich unerheblich. Es ist für mich somit eher eine Frage nach "Nachvollziehung" bei Änderungen.

Zusaetzliche SPSen bedeuten eigentlich automatisch auch Datenaustausch zwischen diesen -> Mapping -> XAE arbeiten -> Konfiguration neu aktivieren.
Und auch Codeänderung in einer SPS (also Bausteine ein/auskommentieren) bedeuten das du mit dem XAE ranmusst.

Der pragmatische einfache Weg wäre meines Erachtens alles in eine SPS zu stopfen und in der Main entsprechende Sub-Funktionen per POU aufrufen. Gegebenenfalls diese über bedingtes compilieren (Varianten) ein- und ausschalten.
Speicherplatz = RAM ist ja heuzutage eher weniger der limitierede Faktor.

Ich kenne das mit den verschiedenen SPSen eigentlich eher im Bereich das ich Funktionen "vervielfachen" will (habe da mal ein Projekt mit 20 SPSen gesehen). Ach ja.. mehr als 49 SPSen gehen glaube ich in TC3 nicht wegen der Port#

Aber jeder wie er mag.

Guga
 
Ist denn die Komplexität der zu variierenden Programme überschaubar, wenn die einzelnen Funktionen ohnehin als Standard verfügbar sind und sind diese Funktionen mit vertretbarem Aufwand parametrierbar?
Für eine recht simple Anwendung (prüfen von FloppyDiskLaufwerken mit einem Z80-System, Kopf positionieren, Kopf laden, Kopf auswählen, Spur schreiben, Spur lesen, Sektor schreiben, Sektor lesen) habe ich mal einen Interpreter in Assembler gestrickt für eine eigens geschaffene Sprache, die dem sog. G-Code ähnelte. Das Programm stand dann in einem String, der aus verschiedenen Vorlagen kopiert, aber auch editiert (individuell angepasst) werden konnte.
D.h., das zu variierende 'Programm' war letztlich nichts anderes ein DatenString. Der Interpreter und die von ihm benutzten Funktionen mussten nicht geändert werden.
Je nach Anwendung könnte ich mir so etwas auch auf einer SPS vorstellen.

Gruss, Heinileini
 
...


Mich würde interessieren ob euch Anwendungen bekannt sind die dynamisch SPS-Programme laden und was Ihr von diesem Ansatz haltet.


Freundliche Grüße
Michael


Was bedeutet für dich dynamisch? Darunter verstehe ich eigentlich zur Laufzeit, ohne das das Gesamtsystem gestoppt wird. Man kann in TwinCAT Module nachladen und aufstarten. Ist die Frage ob das erforderlich ist und nicht mit Kanonen auf Spatzen schießen.


Du hast geschrieben, dass du 2 SPSen verwenden willst, eine die das Handling mit den IOs, die Statemachine etc enthält und eine die das Ausführungsprogramm enthält. Wenn Du das so machst, denn kannst Du die 2. SPS sogar per Online-Change tauschen. Jetzt kommt es auf die Details an, wie die erste SPS das Ausführungsprogramm aufruft. Wenn es über einen Methodenaufruf geht, von einer SPS in die andere, musst du halt sicher stellen, dass die Interface-Pointer etc. aus der 1. SPS aktualisiert werden, denn die bekommt von der Änderung in der 2. SPS nix mit. Dann musst du dort den Auruf der 2. SPS vorher stoppen (z.b. über ein Bit). Der Online-Change kann aber aus der C#-Applikation heraus automatisiert werden. Wenn Du TwinCAT sogar stoppen kannst, dann ist das noch einfacher und unproblematischer. Dann brauchst Du ja nur mit der 2. SPS neu aufstarten, solange die Interfaces etc. gleich sind. Das wäre dann aber nicht dynamisch sondern nur automatisiert... Machbar ist das alles, kommt nur an wie aufwendig es sein soll und muss...
 
Guten Morgen allerseits,


Was bedeutet für dich dynamisch? Darunter verstehe ich eigentlich zur Laufzeit, ohne das das Gesamtsystem gestoppt wird.

Ja, das sehe ich genauso. Hierfür suche ich eine Lösung.


Man kann in TwinCAT Module nachladen und aufstarten.

Wie funktioniert das? Meinst Du einen Online-Change?

Vielen Dank,
Michael
 
Zuviel Werbung?
-> Hier kostenlos registrieren
...Hierfür suche ich eine Lösung.

Wie funktioniert das? Meinst Du einen Online-Change?


Um es so einfach wie möglich zuhalten, würde ich es wirklich mit den 2 SPSen machen, wobei eine den Prüfaublauf enthält, denn du einfach per Online-Change tauschst. Das ganze z.B. automatisiert aus der C# Applikation heraus.
Wie würdest Du den Aufruf denn haben wollen? Als Methoden-Auruf aus einer SPS in die andere? Oder einfach per irgend einem Handshake per Mapping?
 
Zurück
Oben