# CodeSys/ Erfahrung mit Online Changes?



## _pi_ (10 Oktober 2008)

hallo zusammen,
ich habe früher viel mit CodeSys gearbeitet, die letzten Jahre aber nur mit S7. 
Mit CodeSys war es früher nicht oder nur sehr umständlich möglich, Programm-Änderungen im laufenden Betrieb zu machen. Wenn es möglich war, dann musste der zuletzt auf die Steuerung eingespielte Stand gesichert sein und man konnte eine Änderungs-Übertragung machen. Das hatte aber nicht funktioniert, wenn man z.b. im Büro auf einer Steuerung entwickelt und getestet hat und dann auf die Anlage gefahren ist und die Änderungen in der Anlagensteuerung einspielen wollte.
Außerdem gab es extreme Zykluszeitschwankungen, wenn man im RUN Online-Funktionen ausgeführt hat (Status, Programmänderungen übertragen).
Die letzten Jahre war ich in dieser Hinsicht von Simatic S7 recht verwöhnt, jetzt soll ich aber wieder ein Projekt mit CodeSys machen. Was ist da der aktuelle Stand. Wer hat Erfahrung damit?


----------



## Neals (10 Oktober 2008)

Also in TwinCAT ist es ein Online-Change ohne Probleme möglich.

Meines wissens wird das neue Prozessabbild in den Speicher geschrieben, wenn das komlette Programm übertragen wurde, wird im nächsten Zyklus das neue Programm abgearbeitet und das alte Abbild gelöscht.


----------



## drfunfrock (10 Oktober 2008)

Neals schrieb:


> Also in TwinCAT ist es ein Online-Change ohne Probleme möglich.
> 
> Meines wissens wird das neue Prozessabbild in den Speicher geschrieben, wenn das komlette Programm übertragen wurde, wird im nächsten Zyklus das neue Programm abgearbeitet und das alte Abbild gelöscht.



Das klappt nur, wenn die SPS noch nicht zu weit ausgelastet ist. Wir haben hier einen PC, mit 5 Bussystemen. Da geht nichts mehr, wiel der Kommunikationstask die niedrigste Priorität hat. Das Hochladen eines Programmes dauert etwa 2min. Da die Anlage aber demnächst abgebaut wird, gibt auch keine Investition.


----------



## _pi_ (10 Oktober 2008)

Neals schrieb:


> Also in TwinCAT ist es ein Online-Change ohne Probleme möglich.
> 
> Meines wissens wird das neue Prozessabbild in den Speicher geschrieben, wenn das komlette Programm übertragen wurde, wird im nächsten Zyklus das neue Programm abgearbeitet und das alte Abbild gelöscht.


 
nach dieser beschreibung würde dann das programm komplett übertragen werden und dann umgeschaltet werden (aber was passiert mit den dateninhalten der variablen usw. die müssen doch dann auch zu diesem zeitpunkt umkopiert werden??? 
außerdem bräuchte man immer den doppelten arbeitsspeicher?


----------



## drfunfrock (10 Oktober 2008)

_pi_ schrieb:


> nach dieser beschreibung würde dann das programm komplett übertragen werden und dann umgeschaltet werden (aber was passiert mit den dateninhalten der variablen usw. die müssen doch dann auch zu diesem zeitpunkt umkopiert werden???
> außerdem bräuchte man immer den doppelten arbeitsspeicher?



Das klappt. Ich mache das hier regelmässig mit PCs und diversen CXen. Was nicht geht, sind geänderte Konstanten. Jedenfalls benötigen einen Reboot.


----------



## _pi_ (10 Oktober 2008)

drfunfrock schrieb:


> Das klappt. Ich mache das hier regelmässig mit PCs und diversen CXen. Was nicht geht, sind geänderte Konstanten. Jedenfalls benötigen einen Reboot.


 
hast du da schon mal auf die zykluszeit geschaut? inwieweit schwankt die in diesem fall?


----------



## drfunfrock (10 Oktober 2008)

Bei mir geht das, bis auf die eine Anlage, ohne jegliche Schwankungen.


----------



## zotos (10 Oktober 2008)

Online Change läuft gut wenn die Entwicklungsumgebung weis was auf dem Zielsystem gerade läuft.



Werner29 schrieb:


> ...CoDeSys muss wissen, was auf der SPS läuft, dazu gibt es die .ci und .ri Dateien. (die liegen parallel zur Projektdatei).
> Wenn Du diese passend zu dem Projekt auf der SPS hast, dann kann man einen Online Change durchführen, wenn nicht dann nicht.
> ...


----------



## trinitaucher (10 Oktober 2008)

_pi_ schrieb:


> hast du da schon mal auf die zykluszeit geschaut? inwieweit schwankt die in diesem fall?


Bei TwinCAT "schwankt" die Zykluszeit nicht (jittert höchstens +/- 5µs im Extremfall). Dafür wird der Rechner stark belastet beim Online-Change bei großen Programmen (natürlich Abhängig von der Ausbaustufe des PCs), wobei es evtl. passieren kann, dass das Programm in der vorgegebenen Zykluszeit nicht fertig abgearbeitet wird. Dann wird es im nächsten Zyklus fortgesetztz, das Programm braucht also evtl. zwei Zyklen.


----------



## MarkusP (12 Oktober 2008)

drfunfrock schrieb:


> Was nicht geht, sind geänderte Konstanten. Jedenfalls benötigen einen Reboot.



Meinst Du VAR_CONSTANT? Ich glaube die kann man im Code ändern und zusätzlich ONLINE einfach ändern. Wenn ich mich täuschen sollte, Asche auf mein Haupt.

Generell fasziniert mich der ONLINE-CHANGE immer wieder. :TOOLwas der im Hintergrund alles tun muss) Der Online-Change erfolgt offenbar immer im Zklus mit der TASK mit der niedrigsten Priorität. Habe selbst einmal bitter bereut, dass ich einen Task VERY_SLOW mit 2 Sekunden TASK Zeit hatte. Aber prinzipiell geht es auch so.

Schönes WE


----------



## MarkusP (12 Oktober 2008)

*Ich weiß, dass ich nichts weiß....*



drfunfrock schrieb:


> Da geht nichts mehr, wiel der Kommunikationstask die niedrigste Priorität hat. Das Hochladen eines Programmes dauert etwa 2min. Da die Anlage aber demnächst abgebaut wird, gibt auch keine Investition.



Mein Support sagte mir einmal, dass der Kommunikationstask immer die höchste Priorität haben sollte, da prinzipiell alles über ADS läuft


----------



## MarkusP (12 Oktober 2008)

*Gefahr bei OPC etc.*

Auf eines muss besonders *geachtet* werden, ich spreche hier aus leidvoller Erfahrung. Wenn Datenstrukturen geändert wurden, und ein Online-Change durchgeführt wird, muss unbedingt darauf geachtet werden, dass z.B. andere zugreifende Geräte (Visualisierungen, OPC, Bediengeräte etc.) auf Variablen per ADS-Name zugreifen (und nicht per Adresse), sonst kann es ziemlichen Ärger geben. 
Außer Ihr arbeitet generell mit fixen Adressen bei den Variablen (was Ihr aber sicher wie auch ich nicht tut..)

Im Zweifelsfall Visu abstellen, Online-Change durchführen und Visu mit den neuen TPY Files starten. Ansonsten ist mit Datenverlust (verursacht durch außen) zu rechnen.


----------



## Neals (12 Oktober 2008)

MarkusP schrieb:


> z.B. andere zugreifende Geräte (Visualisierungen, OPC, Bediengeräte etc.) auf Variablen per ADS-Name zugreifen (und nicht per Adresse), sonst kann es ziemlichen Ärger geben.



Ich habe da auch ein Problem, das Visualisierungen beim Online-Change die Variablen nicht mehr finden. Wenn du jedoch auf die Variable per ADS-Name zugreifst, hieße es, du benutzt Handles, welche wiederrum auch nur Zeiger auf den Speicherplatz sind. Also bei mir hat das mit den Handles nicht funktioniert.


----------



## MarkusP (13 Oktober 2008)

Ich kenne das z.B. vom OPC-Server (Beckhoff) so. Der unterstützt diese Funktion, und wir greifen auf die Variablen ausschließlich über den Namen zu. Zu Deinem Problem: dass keine Variablen mehr gelesen werden können geht ja noch, aber wehe die Visu hat schreibenden Zugrif (und dann irgendwo)
Als Variablendatei verwenden wird die TPY, diese wird dann auch nach jedem Online-Change aktualisiert. Die Variablen müssten aber sowieso unabhängig per ADS die Variaben immer richtig bekommen. Der Zugriff per Name ist halt langsamer, dafür aber unproblematischer.

LG


----------



## drfunfrock (13 Oktober 2008)

MarkusP schrieb:


> Mein Support sagte mir einmal, dass der Kommunikationstask immer die höchste Priorität haben sollte, da prinzipiell alles über ADS läuft



Das macht er nicht. Bei mir wurde der automatisch auf 15 gesetzt, während die anderen Task mind. 11 haben. ADS soll eben nicht die Anlage stören, weil es nur eine untergeordnete Kommunikation ist.


----------



## drfunfrock (13 Oktober 2008)

MarkusP schrieb:


> Auf eines muss besonders *geachtet* werden, ich spreche hier aus leidvoller Erfahrung. Wenn Datenstrukturen geändert wurden, und ein Online-Change durchgeführt wird,
> 
> Im Zweifelsfall Visu abstellen, Online-Change durchführen und Visu mit den neuen TPY Files starten. Ansonsten ist mit Datenverlust (verursacht durch außen) zu rechnen.



Die HMI sollte sich eigentlich, nach einem Kommunikationsproblem neu ankoppeln. So mach ich das jedenfalls. Dafür habe ich in VB immer einen eigenen Thread.


----------



## _pi_ (13 Oktober 2008)

trinitaucher schrieb:


> Bei TwinCAT "schwankt" die Zykluszeit nicht (jittert höchstens +/- 5µs im Extremfall). Dafür wird der Rechner stark belastet beim Online-Change bei großen Programmen (natürlich Abhängig von der Ausbaustufe des PCs), wobei es evtl. passieren kann, dass das Programm in der vorgegebenen Zykluszeit nicht fertig abgearbeitet wird. Dann wird es im nächsten Zyklus fortgesetztz, das Programm braucht also evtl. zwei Zyklen.


 
das verstehe ich dann nicht...wenn das programm (ist das anwenderprogramm gemeint?) in der vorgegebenen Zykluszeit nicht fertig wird und einen Zyklus mehr braucht, dann hab ich doch ne Zykluszeitschwankung von 100% ?? mein Prozess braucht ja eine Reaktion in einer vorgegeben Zeit; das ist für mich die relevante Zykluszeit!


----------



## trinitaucher (13 Oktober 2008)

TwinCAT startet das Programm in festgelegten Abständen (Zyklen => Zykluszeit), beispielsweise jede 1ms.
Der Jitter bezieht sich auf diese Startzeit des (SPS-)Programms, also nur auf die interne Zeitbasis.

Wenn dein Programm natürlich nicht mit der gesetzten Zykluszeit auskommt, hat das nichts mit Jitter zu tun. Das Programm wird einfach im nächsten Zyklus fortgesetzt. Dann muss folglich die Zykluszeit hochgesetzt werden, um diese Schwankungen in der Programmausführung zu vermeiden.

Wenn dein PC also in beispielsweise 100µs Zykluszeit nicht klar kommt, muss man eben 150µs einstellen. Der Rechner ist dann schlichtweg nicht schnell genug


----------



## _pi_ (16 Oktober 2008)

trinitaucher schrieb:


> TwinCAT startet das Programm in festgelegten Abständen (Zyklen => Zykluszeit), beispielsweise jede 1ms.
> Der Jitter bezieht sich auf diese Startzeit des (SPS-)Programms, also nur auf die interne Zeitbasis.
> 
> Wenn dein Programm natürlich nicht mit der gesetzten Zykluszeit auskommt, hat das nichts mit Jitter zu tun. Das Programm wird einfach im nächsten Zyklus fortgesetzt. Dann muss folglich die Zykluszeit hochgesetzt werden, um diese Schwankungen in der Programmausführung zu vermeiden.
> ...


 
wenn ich das richtig verstanden habe, dann wird die Zykluszeit bei Step7 und Codesys unterschiedlich interpretiert.
Bei Codesys ist es also nur ein interner Basistakt. Wahrscheinlich dann für einen zeitgesteuerten Scheduler für die Tasks.
Dann muß ich meine Anfangsfrage umformulieren. Um wieviel verlängert sich die Programmausführung (evt. verteilt auf mehrere Zyklen), wenn Online-Funktionen und Online-Change ausgeführt wird?


----------



## trinitaucher (16 Oktober 2008)

_pi_ schrieb:


> wenn ich das richtig verstanden habe, dann wird die Zykluszeit bei Step7 und Codesys unterschiedlich interpretiert.
> Bei Codesys ist es also nur ein interner Basistakt. Wahrscheinlich dann für einen zeitgesteuerten Scheduler für die Tasks.


So ist es. Normalerweise arbeitet ne S7 die Task "so schnell wie möglich" ab. Aber man kann meines Wissens nach auch feste Zykluszeiten verwenden. Das ist z.B. für Reglerbausteine unerlässlich.
Bei TwinCAT wird generell taktzyklisch abgearbeitet. Wird das Programm in einem Zyklus nicht gertig, wird's im nächsten Zyklus fortgesetzt. Du verlierst also mindestens einen kompletten Zyklus.


_pi_ schrieb:


> Dann muß ich meine Anfangsfrage umformulieren. Um wieviel verlängert sich die Programmausführung (evt. verteilt auf mehrere Zyklen), wenn Online-Funktionen und Online-Change ausgeführt wird?


Das kann man nicht pauschal sagen. Auf jeden Fall n*Zykluszeit [n = 1,2,3...]


----------



## Thomas_v2.1 (16 Oktober 2008)

trinitaucher schrieb:


> So ist es. Normalerweise arbeitet ne S7 die Task "so schnell wie möglich" ab. Aber man kann meines Wissens nach auch feste Zykluszeiten verwenden. Das ist z.B. für Reglerbausteine unerlässlich.
> Bei TwinCAT wird generell taktzyklisch abgearbeitet. Wird das Programm in einem Zyklus nicht gertig, wird's im nächsten Zyklus fortgesetzt. Du verlierst also mindestens einen kompletten Zyklus.



Feste Zykluszeiten, genauer gesagt eine "Mindestzykluszeit" kann man nur bei den S7-400er einstellen. Das wäre dann quasi die gleiche Funktionalität wie bei TwinCat.
Bei allen anderen CPUs muss man dafür die Zeitinterrupts verwenden.

Ich habe auch schon Programme gesehen die bei Siemens vollständig in einem Zeitinterrupt liefen (OB35).
In zeitgenaue Interrupts würde ich aber nur kurzen Programmcode unterbringen. Auch wenn sich die Prioritäten einstellen lassen, muss man wenigstens ungefähr abschätzen können wie lange das Programm in den einzelnen Routinen zu tun hat.


----------



## stricky (28 Oktober 2008)

*Online/offline Vergleich*

tach,

arbeite eigentlich schon länger mit twincat, aber irgendwie vermisse ich den online vergleich ( wenn ich nach z.B. 4 Wochen wieder an eine ANlage komme ) !

gibts da eigentlich was und ich hab das noch nicht gefunden oder .... ?

gruß
stricky


----------



## trinitaucher (28 Oktober 2008)

Sofern das aktuelle Projekt als Datei vorliegt oder der Quellcode auf der Steuerung geladen ist, kannste leicht mit Projekt => Vergleichen alte und neue Projektstände gegenüberstellen.


----------



## stricky (29 Oktober 2008)

moin,

hab das gerade mal probiert ...

wenn der stand leich ist, kann man sich ja sofort einloggen - ist klar

aber wie checkst du denn ob online/offline auf einem z.B. gleich ist ( ok-sieht man ja beim einloggen ), aber wo stehen die unterschiede ?

zwei projekte offline vergleichen ist klar, aber mir ist offline/online wichtig


----------



## Fx64 (13 November 2008)

Hallo stricky,

Änderungen erkennst Du, an dem Symbol an den Objekten bzw. Bausteinen - diese erhalten einen kleinen blauen Pfeil. Die sind geändert und werden beim nächsten Online Change herunter geladen.

Viele Grüße


----------



## Cerberus (13 November 2008)

Solltest du irgendwelche Änderungen vornehmen, die einen Online Change nicht mehr möglich machen, so wird dies bim Compilieren auch als Warnung gemeldet.


----------



## stricky (13 November 2008)

ja das ist schon klar, aber wie sehe ich die unterschiede zwischen online/offline ?

gruß
christian


----------



## Fx64 (13 November 2008)

Du siehst nur das sich an Bausteinen etwas geändert hat, nicht aber direkt als Vergleich mit den Sourcen zwischen online/offline. 

Über einen Umweg ist das möglich, wenn auch umständlich. Über "SourceDownload" - so kann man die Sourcen aus der Steuerung hochladen und anschließend klassisch vergleichen.

Viele Grüße


----------



## stricky (13 November 2008)

ja ok,

das würde mir ja schon mal reichen ... hochladen auf z.b. cx klar, aber wie hol die sourcen da wieder runter ?


----------



## Fx64 (13 November 2008)

Beim Datei Öffnen Dialog..."Öffen aus der Steuerung" gibt es die Möglichkeit direkt die Sourcen von der SPS hochzuladen. 

Viele Grüße


----------

