vb.net code in c++ implementieren

Hallo zusammen,

ich hab leider noch keine zufriedenstellende Antwort zu meinem Problem gefunden.
Ich programmiere mit Visual Studio einen Arduino Uno.
Ich habe bereits in der Vergangenheit ein C++ Projekt erstellt, welches ich zwingend verwenden muss. Nun möchte ich aus diesem Programm heraus einen vb.net-Code ausführen.

Der Code den ich in mein C++ Projekt implementieren möchte, macht erstmal nicht anderes, als einen Winkel in CATIA V5 zu ändern:

Sub Main()

        '
        ' Makro1 Makro
        '

        'Language="VBSCRIPT"

        Dim OCATIA = GetObject(, "CATIA.Application")


        Dim productDocument1 = OCATIA.ActiveDocument

        Dim product1 = productDocument1.Product

        Dim constraints1 = product1.Connections("CATIAConstraints")

        Dim constraint1 = constraints1.Item("Winkel")

        Dim angle1 = constraint1.Dimension

        Do

            angle1.Value += 0.5

            product1.Update

        Loop Until angle1.Value >= 50

    End Sub

Da vom vb-Code auch eine ausführbare .exe-Datei vorhanden ist, wäre eine weitere Möglichkeit diese aus dem c++ Code aufzurufen sodass sie ausgeführt wird. Leider hab ich dazu auch keine Lösung gefunden, wie ich .exe-Dateien von einem Arduino aufrufen lasse.

Ich hoffe die Problemstellung ist einigermaßen klar geworden.

Du möchtest ein VB Programm auf einem Arduino ausführen?
Dann: Vergiss es!

Och,das geht schon, musst nur nach "BadUSB" suchen. Es geht natürlich noch deutlich besser - der Bundestrojaner kommt ja auch nicht e nullo in 5 Minuten auf den Rechner :wink:

combie:
Du möchtest ein VB Programm auf einem Arduino ausführen?
Dann: Vergiss es!

Gibt es denn die Möglichkeit, dass der Arduino eine vorhandene .exe-Datei auf dem Computer startet? Sie soll nur gestartet werden und auf dem Computer ausgeführt werden. Der Arduino soll lediglich das Signal geben, dass diese .exe-Datei ausgeführt werden soll.

Auch wenn's die nicht gefällt, siehe Antwort #2.

Man kann auch eine Dienst-Anwendung schreiben, die auf den USB lauscht.
Wird dort ein Arduino angesteckt, wird die serielle Schnittstelle gestartet und auf einen Befehl vom Arduino gewartet.
So wäre es auch problemlos möglich ein Programm über den Arduino zu starten.
Erfordert aber dass das Programm installiert ist und dauerhaft im Hintergrund läuft.

Sicherlich eine bessere Lösung als ein BadUSB-Gerät zu verwenden!

Aber, aber! Der O will doch explizit eine exe-Datei vom Arduino starten lassen und nicht ein Programm das dauernd läuft und wartet bis der Arduino ein Programm starten möche. Da muss man schon genau sein mit dem was man möchte, wie sollte man denn sonst seine (Schad)software ordentlich hinbekommen?

zwieblum:
Aber, aber! Der O will doch explizit eine exe-Datei vom Arduino starten lassen und nicht ein Programm das dauernd läuft und wartet bis der Arduino ein Programm starten möche. Da muss man schon genau sein mit dem was man möchte, wie sollte man denn sonst seine (Schad)software ordentlich hinbekommen?

Schadsoftware? :smiley:

Hm ... "Scherzartikel" ? 8)

zwieblum:
Hm ... "Scherzartikel" ? 8)

Keine Ahnung worauf du jetzt hinaus willst. Aber schön wie einem hier "geholfen" wird.

TriB:
Man kann auch eine Dienst-Anwendung schreiben, die auf den USB lauscht.
Wird dort ein Arduino angesteckt, wird die serielle Schnittstelle gestartet und auf einen Befehl vom Arduino gewartet.
So wäre es auch problemlos möglich ein Programm über den Arduino zu starten.
Erfordert aber dass das Programm installiert ist und dauerhaft im Hintergrund läuft.

Sicherlich eine bessere Lösung als ein BadUSB-Gerät zu verwenden!

Dass das Programm im Hintergrund läuft ist erstmal kein Problem. Ich muss zu Demonstrationszwecken bei einer erfassten Eingabe am Arduino (angeschlossene Gestensteuerung) in einem 3D Modell in CATIA V5 eine Bewegung erzeugen. Diese Bewegung kann ich vorher relativ einfach mit der Aufnahme von Makros (leider aber nur in VB) erstellen. Wenn ich jetzt eine bestimmte Geste durchführe, soll das Makro welches ich vorher in VB erstellt habe, bzw. ich habe auch eine Ausführbare .exe-Datei von diesem Makro auf dem Computer, ausgeführt werden.

Dann würde ich definitiv auf einen Dienst setzen.
Dort könntest Du dann auch je nach Geste andere Programme starten oder Skripte ausführen.

Dass Du aber VB Makros verwendest lässt mich vermuten, dass die nötigen Programmierkenntnisse noch nicht ausreichen.

TriB:
Dort könntest Du dann auch je nach Geste andere Programme starten oder Skripte ausführen.

Das ist genau das Ziel.

TriB:
Dass Du aber VB Makros verwendest lässt mich vermuten, dass die nötigen Programmierkenntnisse noch nicht ausreichen.

Leider unterstützt CATIA die Erstellung von Makros nur in VB. Außerdem reichen meine Kenntnisse tatsächlich nicht aus um in C++ die COM-Schnittstelle zu CATIA herzustellen. In VB war das relativ schnell gemacht.

Hast du zufällig irgendwo ein Bespiel oder Anleitung zur Erstellung eines solchen Dienstes?

Auf jeden Fall schon mal ein Dankeschön!

Du benötigst mehr als ein Beispiel um das zu erreichen :slight_smile:

Erstmal würde ich mich auf eine Sprache einschießen. Man kann Anwendungen, die ausführbar sind und mit der seriellen Schnittstelle kommunizieren können, mit zahlreichen Programmiersprachen entwickeln.

Für den Einstieg empfehle ich .Net. Persönlich finde ich C# schöner als VBA, aber wenn Du in VB schon fit bist, fällt es Dir vermutlich leichter.

Dann würde ich eine einfache Anwendung schreiben, die mit dem COM-Port kommuniziert.
Die MSDN hat für alles einen Codeschnipsel parat.
Klappt diese Kommunikation, kannst Du Deine Anwendung starten.
Process-Start(Info) ist da der Druide, den Du suchst. Damit kann man Anwendungen (parametrisiert) starten und sogar auf deren Rückgabewerte lauschen. Sofern vorhanden, natürlich. ProcessStart

Nun kommt zu guter Letzt die Entscheidung, ob Du bei einer normalen Anwendung bleibst, die in den Autostart eingetragen wird und im Hintergrund startet, oder Du einen Dienst programmierst.
Ersteres ist wohl zum einstieg einfacher, da der Dienst nicht auf die GUI zugreifen darf.
Aber bis dahin wirst Du schon ein paar Erfahrungen gemacht haben, die Dir sicherlich bei der Entscheidung helfen.

Mit einem Arduino Leonardo oder Arduino Micro (oder ProMicro) kann eine beliebige ausführbare Datei auf einem Rechner gestartet werden. Diese Mikrocontroller-Boards können sich nämlich als Tastatur "ausgeben" und somit all das machen, was man auch mit der normalen Tastatur an einem Rechner machen kann.
Beispiel: Unter Windows kann man mit Windows-Taste + R und Eingabe von Dateipfad und Dateiname eine Datei ausführen.
Vor einiger Zeit wurde in diesem Thread diese Methode ausführlich behandelt.

Das funktioniert aber nicht (Edit:) so einfach mit einem Arduino UNO, sondern nur mit Boards, die sich als Tastatur ausgeben können.

Das funktioniert aber nicht mit einem Arduino UNO, sondern nur mit Boards, die sich als Tastatur ausgeben können.

Das kann auch der UNO!

2 Möglichkeiten, es gibt.

  1. Der Atmega16U2 auf dem UNO kann das.
  2. Auch der ATMega328P kann per V-USB eine HID Tastatur werden.

OK, OK, ich gebs zu, ist nicht ganz so einfach.....
Aber "geht nicht", ist nicht.

Naja, V-USB hab ich früher viel und erfolgreich genutzt. Leider hab ich mit neuerer Hardware keine allzu guten Erfahrungen damit gemacht. Sehr häufig die Meldung "Hadware wurde nicht erkannt". Zuverlässig ist anders. Leider.
Scheint aber aber nicht nur mein Problem zu sein, auch bei Adafruit sieht man das ähnlich:

Deprecation Warning: The Trinket bit-bang USB technique it uses doesn't work as well as it did in 2014, many modern computers won't work well. So while we still carry the Trinket so that people can maintain some older projects, we no longer recommend it.

uxomm:
Mit einem Arduino Leonardo oder Arduino Micro (oder ProMicro) kann eine beliebige ausführbare Datei auf einem Rechner gestartet werden. Diese Mikrocontroller-Boards können sich nämlich als Tastatur "ausgeben" und somit all das machen, was man auch mit der normalen Tastatur an einem Rechner machen kann.
Beispiel: Unter Windows kann man mit Windows-Taste + R und Eingabe von Dateipfad und Dateiname eine Datei ausführen.
Vor einiger Zeit wurde in diesem Thread diese Methode ausführlich behandelt.

Das funktioniert aber nicht (Edit:) so einfach mit einem Arduino UNO, sondern nur mit Boards, die sich als Tastatur ausgeben können.

Hab zufällig noch einen Leonardo in der Schublade gehabt. Läuft jetzt über die simulierte Tastatureingabe des Leonardo! Ist zwar jetzt ein wenig zusammengebastelt, aber es tut was es soll :smiley: Viel Dank für eure Hilfe!