# TwinCAT 3 und C++



## mimuel (25 November 2009)

Hallo,

ich komme soeben von der SPS-Messe und hab die Beckhoff-Ankündigung
für die C++ Programmierung gelesen und versucht mehr Informationen zu
bekommen. Es blieben einige Fragen offen:
- bei dem C++ handelt es sich um die unmanaged(native) Version?
- Visual Studio 2010 dient dann quasi nur als Entwicklungsumgebung,
  was spricht gegen Eclipse?
- Kann ich auch mit den QT-Libraries arbeiten?

Vielleicht könnt ihr Licht ins Dunkel bringen?

Danke


----------



## Cerberus (25 November 2009)

TwinCAT und C++?! Ist ja strange bzw. crazy. Aber durchaus sehr interessant.

Dazu hier auch die Presseinformation von Beckhoff.

Hast du von den Beckhoff-Leuten auf diese Fragen keine Antworten bekommen?

Mich würde noch interessieren, wann das TwinCAT 3 verfügbar sein soll.


----------



## bonatus (25 November 2009)

Ich war auch auf der Messe...



> Mich würde noch interessieren, wann das TwinCAT 3 verfügbar sein soll.



TwinCAT 3 soll wohl im 3. Quartal 2010 kommen. Auf der Hannover Messe soll dann richtig vorgestellt werden. In Nürnberg wurde es noch in der Programmierumgebung vorgstellt.

Das mit dem C++ hab ich auch nicht ganz verstanden...


----------



## mimuel (25 November 2009)

Das mit dem C++ hab ich auch nicht ganz verstanden... 

In Visual Studio 2010 gibt es zwei C++ Versionen:
1.) unmanaged C++ ist das klassische Microsoft C++ seit ca. 1980
2.) managed C++ läuft nur mit .NET Framework seit ca. 2000


----------



## mimuel (25 November 2009)

Das mit dem C++ hab ich auch nicht ganz verstanden... 

In Visual Studio 2010 gibt es zwei C++ Versionen:
1.) unmanaged C++ ist das klassische Microsoft C++ seit ca. 1980
2.) managed C++ läuft nur mit .NET Framework seit ca. 2000 


​


----------



## Neals (25 November 2009)

C/C++ unter TwinCAT geht schon lange!

Über die Ring3 IO lässt sich eine C++ Assembly in einer TwinCAT Task abarbeiten.

Ich denke dieses Feature wurde in TwinCAT 3 nun vollständig integriert und Benutzerfreundlicher umgesetzt. Eventuell gibt es ja ein Addon für das Visual Studio, welches Debuggen etc. ermöglicht.


----------



## Cerberus (25 November 2009)

Neals schrieb:


> C/C++ unter TwinCAT geht schon lange!
> 
> Über die Ring3 IO lässt sich eine C++ Assembly in einer TwinCAT Task abarbeiten.


 
Kannst du bitte mal erklären wie du das machst?! Wäre super interessant für mich.


----------



## Neals (25 November 2009)

http://infosys.beckhoff.com/index.php?content=content/1031/tcr3io/html/tcr3io_implement_tctimer.htm

Im InfoSys unter TwinCAT/R3IO ist alles nötige beschrieben. Es gibt ne C-Dll, welche verwendet wird, im SystemManager erstellt man ne Task, an die man sich üebr die C-Dll hängt und dann der C-Code in Echtzeit getriggert wird.


----------



## Majestic_1987 (25 November 2009)

Was soll das ganze, so wie du es verlinkt hast, dann bringen, ausser, dass es für einen nicht-C++-Crack total unverständlich wird?


----------



## mimuel (25 November 2009)

Majestic_1987 schrieb:


> Was soll das ganze, so wie du es verlinkt hast, dann bringen, ausser, dass es für einen nicht-C++-Crack total unverständlich wird?


 

Irgendwie werden meine Fragen total ignoriert?


----------



## Neals (25 November 2009)

Majestic_1987 schrieb:


> Was soll das ganze, so wie du es verlinkt hast, dann bringen, ausser, dass es für einen nicht-C++-Crack total unverständlich wird?



Wenn du wirklich Interesse daran gehabt und dich eventuell 10 Sekunden mit dem Link auseinandergesetzt hättest, währe dir eventuell aufgefallen, dass dort einiges mehr als nur der C-Code beschrieben wird. Sondern die komplette Umsetzung im TwinCAT System, Konfigurierung etc. Alles zu finden unter TwinCAT/R3IO wie bereits 3 Beiträge vorher und in meinem letzten Beitrag erzählt.


----------



## Neals (25 November 2009)

mimuel schrieb:


> Irgendwie werden meine Fragen total ignoriert?



War ja von mir der Ansatz, das die Implementierung von C++ im TwinCAT 3 eventuell auf diesem System basiert.


----------



## gfgfhf (25 November 2009)

mimuel schrieb:


> - Visual Studio 2010 dient dann quasi nur als Entwicklungsumgebung,
> was spricht gegen Eclipse?



Ich habe auf der Messe mit einem Beckhoff MA gesprochen. Es wird zwei TCAT 3 Versionen geben. Beide Versionen nutzten das Visual Studio Framework.
Die Version mit c++ Unterstützung setzt ein installiertes VS voraus, die andere nicht. Die Projekte der beiden Versionen sollen kompatibel sein.
Mit Eclipse sollte da also nichts machbar sein.


----------



## Majestic_1987 (25 November 2009)

Neals schrieb:


> Wenn du wirklich Interesse daran gehabt und dich eventuell 10 Sekunden mit dem Link auseinandergesetzt hättest, währe dir eventuell aufgefallen, dass dort einiges mehr als nur der C-Code beschrieben wird. Sondern die komplette Umsetzung im TwinCAT System, Konfigurierung etc. Alles zu finden unter TwinCAT/R3IO wie bereits 3 Beiträge vorher und in meinem letzten Beitrag erzählt.



Jaaa das ist mir schon klar, was  dort erklärt wird. Mit ist jedoch diese Variante einer C++ oder Delphi-Implementierung schleierhaft. Ich finde den Weg ziemlich aufwendig und vor allem halte ich eine (auf XP-Systemen) nicht zwingend deterministischen Zugriffszyklus für wenig Praxisnah. Ideal wäre, wenn die C++-Implementierung in TwinCat3 es ermöglichen würde, eine Anwendung direkt für die Ausführung auf einem Laufzeitsystem zu kompilieren, sodass diese nachher in Echtzeit funktioniert.

Dazu müssten dann allerdings passende Bib's existieren, die mir eine behandlung meiner I/O's in gewohnter Weise bieten. Denn wir können uns, denke ich, darauf verständigen, dass C++ nicht gerade für den Anwendungsfall der SPS-Programmierung designed wurde.

Mir stellt sich eben die Frage, weswegen ich meine SPS in C++ programmieren soll.
Wenn es um eine Visualisierung/Scada-Lösung geht, ist eine Anbindung über ADS sicherlich sinnvoll, aber für das normale Anwendungsprogramm?
Vielleicht möchtest du mich aufklären, ich lerne selber grade C++, weswegen es nie schaden kann, dort eine Verbindung zu finden.


----------



## MasterOhh (25 November 2009)

Ich frage mich auch gerade was ich mit C++ auf meiner Steuerung anfangen sollte. Wird es damit evtl. einfacher komplexe Regelungen umzusetzen? Unsere Informatik Spezis würden sich sicher freuen, aber die normalen Wald und Wiesen-automatisierer und Techniker würden eine in C++ geschriebene Steuerungsoftware für unsere Beckhoffkästen sicher nur kopfschüttelnd begaffen.


----------



## Neals (25 November 2009)

Warum ist C++ schlechter als eine andere Sprache der IEC 61131-3??
Am Ende ist beides Assembler, bzw. Maschinencode.

Bei der IEC-Programmierung sehe ich den Vorteil, das dem Programmierer viele Möglichkeiten nicht gegeben werden, wie dynamischer Speicher. Das Schützt den Code vor Fehlern und sichert die Echtzeit. Stattdessen gibt C++ einem viel mehr Möglichkeiten, für Speicherzugriffe etc. und wenn der Programmierer Erfahren ist, kann mit der Sprache wesentlich mehr umgesetzt werden, was eventuell sogar ein schnelleres Programm erzeugt.

Der Vorteil von Objektorientierung ist ja mit der neuen CoDeSys Version hinfällig. Aber generische Typen oder ähnliches wird es in der IEC trotzdem noch nicht geben.

Ich denke, am Ende bleibt die Sprache immernoch eine Geschmacksfrage und Frage der Aufgabe, die damit umgesetzt werden soll.


----------



## drfunfrock (27 November 2009)

Wie wäre es damit, die SPS an ein etwas komplexeres Datenbanksystem anzubinden? Denkbar ist hier die Einbindung in  eine Produktionssteuerung oder ein Qualitätssicherungssystem. Dazu muss man mit C++ nicht Realtime können, sondern nur die Daten austauschen können.


----------



## Majestic_1987 (27 November 2009)

Also wenn ich die Entwicklung eines DB-Interfaces durch einen C++-Programmierer rechne, der dafür sicher einige Stunden braucht, dann nehme ich für ne Datenbankanwendung doch eher den TC Database-Server ;-)


----------



## drfunfrock (27 November 2009)

Majestic_1987 schrieb:


> Also wenn ich die Entwicklung eines DB-Interfaces durch einen C++-Programmierer rechne, der dafür sicher einige Stunden braucht, dann nehme ich für ne Datenbankanwendung doch eher den TC Database-Server ;-)



Ich halte den nicht für alles geeignet.


----------



## zotos (27 November 2009)

C++ Erweiterung, Objektorientierte Programmierung, usw. 

Das Polarisiert wohl stark ein CoDeSys Entwickler hat hier mal im Forum zum Thema CoDeSys V3.x und Objektorientierte Programmierung folgendes geäußert:


Werner29 schrieb:


> ...
> Also man kann sagen, dass sich die CoDeSys V3 Nutzer in zwei Klassen aufteilen:
> - die die OO-Features exzessiv nutzen (und denen geht alles immer noch nicht weit genug)
> - die die OO-Features überhaupt nicht nutzen
> ...



Das wird wahrscheinlich auf C++ in TwinCAT auch zu treffen. Die einen Nutzen es nicht und die anderen für alles.

---

Wie sieht es denn mit der Kompatibilität von TwinCAT 3 und dem alten TwinCAT aus?
[edit]
Projekte sind von V2->V3 konvertierbar. Quelle 
[/edit]


----------



## RobiHerb (27 November 2009)

*Noch eine Meinung*



Neals schrieb:


> http://infosys.beckhoff.com/index.php?content=content/1031/tcr3io/html/tcr3io_implement_tctimer.htm
> 
> Im InfoSys unter TwinCAT/R3IO ist alles nötige beschrieben. Es gibt ne C-Dll, welche verwendet wird, im SystemManager erstellt man ne Task, an die man sich üebr die C-Dll hängt und dann der C-Code in Echtzeit getriggert wird.



Hier im Zitat wird pures C (nicht C++) auf Basis der WIN API vorgestellt.
C++ erzeugt im kompilierten Fall ein anderes Object Format. Die Schnittstellen, die der Linker zusammenfügt sind "dekoriert", sie enthalten weitere Typ Informationen. Wie Beckhoff/3S das für C++ gelöst haben ist mir schleierhaft, ausser dass man das ganze Programm mit extern "C" { ...} einfasst.

CoDeSys Entwicklung in Visual Studio von Microsoft eingebaut ist keine besondere Neuigkeit, man kann schon immer Externe Tools wie Plug Ins einfügen. Mit der .NET Basis von CoDeSys 3 ist das sogar besonders einfach, 3 S verkoppelt damit lediglich die Editor und Compiler Module und Hilfsapplikationen mit der Microsoft Entwicklungs Umgebung. Wo der Vorteil liegt, alles in Microsoft Umgebung zu betreiben ist mir unklar.

C++ für CoDeSys auf der SPS ist immer unmanaged, sonst müsste man die gesamte Common Runtime von Microsoft mit einbauen (Lizenzen $$$$$!) und auch die Echtzeitfähigkeit wäre futsch. Auch haben die Programme keinerlei Windows GUI Elemente zur Verfügung! Interessant ist das ganze aber auch aus einem anderen Gesichtspunkt, grosse Teile der CoDeSys Runtime sind selber in CoDeSys ST geschrieben! Geht 3S davon ab?

Eine Sache ist mir noch bei 3S aufgefallen aber niemand hat dazu was genaueres sagen können. Die Sprache ST wurde "aufgebohrt" auf Ansätze von Objekt Orientierung. Das vorgeführte Beispiel war allerdings nur die Vererbung eines simplen Interfaces am Beispiel mehrerer ähnlicher FBs. 

Hat dazu jemand etwas erfahren?


----------



## Majestic_1987 (28 November 2009)

Ich hab mit CodeSys 3 mal gespielt. Objektorientierung finde ich gerade für große Projekte eine sehr gute Sache, nicht für alles, aber für vieles, ist da sinnig. Aber ich bin weiterhin der Meinung, dass man mit ST sehr gut bedient ist und C++ zur programmierung der STEUERUNG nicht einsetzen muss.

Wüsste auch mal gerne, was die Maschinenrichtlinie zu C++-Programmen sagen würde ;-)


----------



## KGU (29 November 2009)

RobiHerb schrieb:


> ... 3 S verkoppelt damit lediglich die Editor und Compiler Module und Hilfsapplikationen mit der Microsoft Entwicklungs Umgebung. ...
> 
> ... Interessant ist das ganze aber auch aus einem anderen Gesichtspunkt, grosse Teile der CoDeSys Runtime sind selber in CoDeSys ST geschrieben! Geht 3S davon ab?...



Die Weiterentwicklung von TwinCAT geschieht durch Beckhoff nicht durch 3S. Beckhoff benutzt lediglich die Editoren und den IEC-Compiler von 3S. Ebenso hatte Beckhoff schon IMMER eine eigene Laufzeitumgebung!

Die Erweiterung um die Programmiersprachen C und C++ hat vielerlei Vorteile denke ich, da wären zum einen das Erstellen von komplexeren Reglern, die Anbindung an Matlab/Simulink wie sie auf der Messe gezeigt wurde usw.

Nicht zuletzt durch diese Erweiterung liegt die Verwendung von Microsoft Visual Studio als Framework auf der Hand, was noch eine Menge weitere Vorteile mit sich bringt.


----------



## Werner29 (30 November 2009)

RobiHerb schrieb:


> Eine Sache ist mir noch bei 3S aufgefallen aber niemand hat dazu was genaueres sagen können. Die Sprache ST wurde "aufgebohrt" auf Ansätze von Objekt Orientierung. Das vorgeführte Beispiel war allerdings nur die Vererbung eines simplen Interfaces am Beispiel mehrerer ähnlicher FBs.
> 
> Hat dazu jemand etwas erfahren?



Ich weiss nicht auf welches Beispiel du dich beziehst, aber ein Interface ist nun wirklich keine "simple" Sache.
CoDeSys unterstützt Interfaces tatsächlich im Sinne von Java oder C#, das heisst als eine abstrakte Basisklasse.
Zwar gibt es auch Vererbung auf ebene von FB's aber ich denke, Interfaces sind das weit mächtigere Konzept.
Ich kann dir nur raten, lad die Version mal runter und spiel damit rum, wenn du dich schon ein bisschen mit OO-Konzepten auskennst, dann wirst du dich sehr schnell zurechtfinden.


----------



## Neals (1 Dezember 2009)

TwinCAT 3 basiert komplett auf VisualStudio 2010


----------



## zotos (1 Dezember 2009)

Neals schrieb:


> TwinCAT 3 basiert komplett auf VisualStudio 2010


Danke für den Hinweis und danke für das nette Bild. 

Aber was soll ich mir nun darunter vorstellen? KOP/FUP/CFC/AS/AWL/ST/C++ alles in VisualStudio 2010 integriert?
Gibt es denn schon irgendwo mal ein paar Screenshots von dem TwinCAT3 zu sehen?


----------



## Neals (1 Dezember 2009)

zotos schrieb:


> Aber was soll ich mir nun darunter vorstellen? KOP/FUP/CFC/AS/AWL/ST/C++ alles in VisualStudio 2010 integriert?



So wie ich das Verstanden habe: Ja!
Und noch mehr, SystemManager ist auch integriert.


----------



## MasterOhh (1 Dezember 2009)

Heißt das, das man dann unbedingt dieses integrated TwinCat 3 braucht um weiterhin eigene Visualisierungen mit c++ etc. schreiben zu können?


----------



## Neals (1 Dezember 2009)

MasterOhh schrieb:


> Heißt das, das man dann unbedingt dieses integrated TwinCat 3 braucht um weiterhin eigene Visualisierungen mit c++ etc. schreiben zu können?



Nein!
Du kannst das normale TwinCAT 3 nehmen, damit deine PLC-Applikation entwickeln. Dann kannst dir nen NotePad oder was auch immer nehmen und mit Hilfe von den alten ADS-Libs immernoch ne Visu schreiben, die du über beliebigen Compiler jagst. Visual-Studio ist nicht notwendig, TwinCAT 3 basiert nur auf dem Framework vom VS2010. Und wenn man VS2010 + TC3 hat, lässt sich halt im VS die PLC programmieren, genauso wie die Visu in C++ oder C#.


----------



## AKNOT (21 April 2011)

Ich schreibe mal hier mit rein...
Wie steht es denn um TwinCAT 3, es sollte ja im Q3 2010 erscheinen, ich kann aber nirgends Informationen über eine Testversion zum Download oder ähnliches finden. Bin jetzt wieder eine Zeit lang raus aus der Thematik, habe jetzt aber wieder was damit zu tun und die neuste Version würde mich schon interessieren.

Also, gibt es schon was? Hab ich es übersehen? Oder dauert es noch?

Danke,
Gruß

AKNOT


----------



## tnt369 (21 April 2011)

never ending story:


> voraussichtliche Markteinführung
> im 4. Quartal 2011


(zitat von der beckhoff-homepage, stand 13.4.11)


----------



## Majestic_1987 (21 April 2011)

Die Info ist korrekt, erscheint vorraussichtlich zur SPS/IPC/Drives.
Es gibt eine Beta-Version für ausgewählte Kunden der Fa. Beckhoff. Da ist allerdings als "Normalsterblicher" kein rankommen. Es heisst also: Abwarten.


----------

