Online-Change
Ab TwinCAT 3.1. Build 4024.0 Die hier beschriebene Funktionalität ist ab TwinCAT 3.1. 4024.0 verfügbar. |
TwinCAT 3.1 unterstützt das Austauschen von C++ Modulen zur Laufzeit d. h. ohne Unterbrechung des Echtzeitprogramms.
Hierfür werden unterschiedliche Versionen eines TwinCAT Executable (TMX) auf dem Zielsystem vorgehalten, wie bereits hier beschrieben.
Für alle Modul-Instanzen aus einem TMX kann durch das Engineering eine Umschaltung zwischen den Versionen veranlasst werden.
Der Ablauf ist grob skizziert:
- Online-Change fähiges Modul in TMX
- 1. TwinCAT instanziiert das neue Modul. Das alte Modul wird weiterhin von der Task zyklisch aufgerufen.
- 2. TwinCAT ruft ITcOnlineChange::PrepareOnlineChange() des neuen Moduls auf.
Dieser Aufruf kann auf das alte Modul zugreifen und Daten übernehmen, die sich durch die zyklischen Aufrufe des Moduls nicht ändern - beispielsweise Parameterwerte. - 3. TwinCAT ruft ITcOnlineChange::PerformOnlineChange() des neuen Moduls auf.
Dieser Aufruf kann auf das alte Modul zugreifen und wiederum Daten übernehmen, die sich zuvor zyklisch verändert haben. Dieser Aufruf wird ausgeführt, wenn kein zyklischer Aufruf durch eine Task erfolgt. Das alte Modul wird nicht nochmal wieder durch die Task aufgerufen, sondern das neue Modul wird aufgerufen. Damit diese Umschaltung von einem Taskzyklus zum nächsten erfolgen kann, muss die Methode PerformOnlineChange() entsprechend wenig Rechenzeit in Anspruch nehmen. - 4. Nach Abschluss wird die Task das neue Modul zyklisch aufrufen.
Durch diesen Dialog im Engineering kann der Online-Change vorgenommen werden.
Bei dem Umgang mit dem Online-Change sind deswegen einige Aspekte zu beachten:
- Das Projekt muss eine Versionierung vorsehen.
- Die DataAreas werden für diese Module außerhalb des TcCOM Moduls gehalten und den Modulen bereitgestellt. Diese brauchen also die Daten sowie das Mapping der Symbole in den DataAreas nicht zu beachten.
- Die DataAreas des Modules dürfen sich nicht ändern.
- Referenzen auf interne Datenstrukturen dürfen nicht rausgereicht werden. Zugriffe müssen immer über Interfaces erfolgen, die per TcQueryInterface geholt werden, da diese Referenzen bei einem Online-Change aktualisiert werden.
Nach einem Neustart wird TwinCAT den Treiber in der initialen Version der Module starten.