Eigenes C++ Programm in Beckhoff-Steuerung importieren

Clueless

Level-2
Beiträge
17
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag,
um einen 3D-Lasersensor zu betreiben möchte ich gerne eine Beckhoff-Steuerung nutzen. Die Auswahl fiel auf Beckhoff, da die Schnittstelle kompatible ist und ich bereits ein C++ Programm besitze, welches den Sensor steuert. Da ich jedoch keinerlei Erfahrung mit Beckhoff-Steuerung habe (lediglich mit Siemenssteuerungen) stellt sich folgendes Problem dar. Und zwar soll das bestehende C++ Programm, inklusive aller inkludierten Bibliotheken, in ein TwinCAT-Projekt importiert werden.
Für dieses Vorhaben wurden bereits folgende Schritte unternommen:

  • Einen Computer neu aufgesetzt (Windows 10 Pro installiert)
  • Visual Studio Community 2019 installiert
  • TwinCAT3 XAE in Visual Studio durch den Installationsassistenten integriert
  • Den Computer in den Test-Modus versetzt
  • Ein OEM-Zertifikat erzeugt
  • Zu Testzwecken Beispielprogramm 11 aus dem Infosys eingebunden, kompiliert und ausgeführt
Der vorbereitete Computer soll als Beckhoff-Steuerung fungieren, sodass die Möglichkeit besteht das Projekt vollständig umzusetzen und zu testen, um anschließend die Projektdatei auf die Beckhoff-Steuerung zu übertragen.
Nun stellt sich mir die Frage, wie ich das fertige C++-Projekt (programmiert in VS Community 2019 auf einem anderen Computer), inklusiver aller inkludierten Bibliotheken und Drittanbieter-Bibliotheken in ein TwinCAT XAE Projekt einbinden kann, sodass ich dieses auf dem vorbereiteten Computer testen kann, um es später auf einer Beckhoff-Steuerung ausführen zu können?
Den Umweg über den vorbereiteten Computer habe ich gewählt, um die Lieferzeit zu überbrücken.
Über Hilfestellung in Form von Verweise auf Dokumentationen, Antworten o.ä wäre ich sehr dankbar.
Viele Grüße
Clueless
 
Dein vorhaben wird vermutlich schon an einem grundlegenden Problem scheitern.
Der Code wird im Kernel-Modus ausgeführt und unterliegt entsprechend vielen Einschränkungen, z.B. kannst Du die Win32-API nicht nutzen oder DLLs, schau mal hier nach.
Eine Beckhoff Steuerung gibt es übrigens nicht. Auch die CXe von Beckhoff sind Windows PCs auf denen dann TwinCAT läuft. Du kannst auf diesen allerdings auch noch andere Programme laufen lassen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo @oliver.tonn,
danke für deine schnelle Antwort. Dein Link hat mir auf jeden Fall einige nützliche Informationen gegeben, die ich vorher nicht kannte.
Mein C++-Projekt beinhaltet lediglich Header-Dateien, jedoch habe ich bislang keinen Überblick, was die Unterprogramme des Sensorherstellers aufrufen. (Ich habe mein Programm auf Basis eines Beispielprogramms des Sensorherstellers aufgebaut). Ich werde jetzt mal nachschauen, ob dll's aufgerufen werden.
Falls ich das Programm nicht "einfach" importieren kann, bleibt mir lediglich die Möglichkeit ein komplett neues Programm in der Beckhoff-Steuerung zu entwerfen ?
VG
 
Dein vorhaben wird vermutlich schon an einem grundlegenden Problem scheitern.
Der Code wird im Kernel-Modus ausgeführt und unterliegt entsprechend vielen Einschränkungen, z.B. kannst Du die Win32-API nicht nutzen oder DLLs, schau mal hier nach.
Eine Beckhoff Steuerung gibt es übrigens nicht. Auch die CXe von Beckhoff sind Windows PCs auf denen dann TwinCAT läuft. Du kannst auf diesen allerdings auch noch andere Programme laufen lassen.
Deinen letzten Satz hatte ich tatsächlich überlesen. Aber du hast vollkommen recht. Meine Programmierung in TwinCAT zu portieren ist an dieser Stelle nicht sinnvoll. Ich werde mein existierendes C++-Programm in eine exe-Datei konvertieren und diese auf der Steuerung ausführen.
Über die Art, wie ich die exe trigger und eventuelle Daten aus der exe erhalte, um diese für die Zukunft via TwinCAT zu visualisieren, muss ich mich nun weiter informieren.
 
Da würde ich dir dann empfehlen in dein *.exe-Programm einen schmalen ADS-Server mit zu implementieren (mit der .Net-Schnittstelle von ADS).
Aus der SPS (ist dann der Client) kannst du dann Werte setzen/lesen. Das ist ein relativ einfach zu realisierender Handshake Mechanismus.

Guga
 
Hallo @Guga
Ich wollte heute beginnen und den ADS Server einrichten. Das ganze würde ich zu Testzwecken erstmal in Beispielprogrammen durchführen wollen, um mit der ganzen Thematik besser vertraut zu werden.
Wenn ich nun jedoch ein neues C++-Projekt anlege und mir via "Nuget-Packete verwalten" das "Beckhoff.TwinCAT.Ads"-Pakete installieren möchte, erscheint folgende Fehlermeldung:
"Das Paket "Beckhoff.TwinCAT.Ads 6.0.194" konnte nicht installiert werden. Sie versuchen, dieses Paket in ein Projekt zu installieren, das sich auf "native,Version=v0.0" bezieht, das Paket enthält aber keine Assemblyverweise oder Inhaltsdateien, die mit diesem Framework kompatibel sind. Wenden Sie sich an den Paketersteller, um weitere Informationen zu erhalten."
Kennst du dich damit zufällig aus ?
Lg
Ps: Ich habe ein wenig weitergelesen. Die .Net-Schnittstelle scheint nur für C# Programme zu sein. Da ich in C++-programmiere funktioniert dies nicht. Gibt es noch andere Möglichkeiten ? Vielleicht die ADS Dll C++ ?
 
Zuletzt bearbeitet:
Die Fehlermeldung kommt wohl bei NuGet im Zusammenhang mit C++ UWL.

Workaround soweit ich es verstehe
- siehe link https://github.com/NuGet/Home/issues/5292
- die .Net-Komponente aus c:\TwinCAT\ADS\... (wenn TwinCAT installiert ist) nutzen.

Ob/wie man .Net und C++ mixen kann ist außerhalb meines Erfahrungsbereiches (managed und unmanaged code..). Die ADS DLL C++ gibt dir auf jeden Fall keine Möglichkeit um einen ADS Server zu implementieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, nochmals vielen Dank für die Antwort.
Ich habe noch ein wenig weitergeschaut und werde nun versuchen mit der ADS Dll C++ mit Hilfe der "AdsSyncWriteReq" und "AdsSyncReadReq" Daten, über den Beckhoff IPC, aus meinem C++-Programm auszulesen, oder Variablen einen Wert zuzuweisen. Gelingt mir das, so sollte das ganze innerhalb der Visualisierung auch möglich sein. Ein Workaround um Nuget-Packages in mein C++-Projekt einzubinden gefällt mir nicht wirklich gut. Ich werde nun erstmal weiter testen.
VG
 
Die C++-Dll ist ausschließlich für den Client. Damit kannst du auf z.B. die PLC schauen (der ein Server ist) aber nichts anderes.
 
Verstehe.
Somit könnte ich quasi nur Daten aus dem C++ Programm an die PLC übergeben, oder ggf Daten aus der PLC auslesen. Könnte aber nicht gezielt von der PLC Daten an das C++-Programm schreiben
 
Zurück
Oben