Serielle Kommunikation mit Cerea 300

  • Hallo zusammen,


    wie viele schon schmerzlich erfahren mussten gibt es bei der seriellen Kommunikation in Cerea 300 den @SDOSE String nicht mehr. Aktuell funktionieren nur Marc und @AUTO. Mit etwas Bastelei habe ich es allerdings geschafft auch andere Funktionen wieder zu implementieren und das angenehmer als es bei der 288er war.


    Cerea 300 besteht aus zwei wesentlichen Programmteilen. Zum einen die GUI in der ihr alle ständig mit dem Finger rumtippt und zum anderen die ECU die im Hintergrund die Berechnungen ausführt. Diese beiden Programme müssen natürlich miteinander kommunizieren. Und genau da habe ich angesetzt. Wenn man in der GUI auf irgendeinen Button drückt, teilt die das via TCP-Protokoll der ECU mit. Ich habe also ein Programm geschrieben, das so tut als wäre es eine GUI und der ECU Befehle schicken kann. Genauer gesagt empfängt mein Programm Befehle von einer seriellen Schnittstelle (also zum Beispiel von einem Arduino) und schickt diese dann via TCP weiter an die ECU. Mit dieser Methode kann jeder Tastendruck aus der GUI den man sich vorstellen kann simuliert werden.


    Nun muss man den Arduino dafür ja mit meiner Software verbinden und kann ihn somit nicht mehr an die serielle Schnittstelle von Cerea (also dem CT-Port) hängen. Dadurch bekommt der Arduino den @CEREA String auch nicht mehr geliefert, was für alle von euch die mit automatisch schaltenden Teilbreiten fahren ein Problem darstellt. Das Ganze lässt sich aber sehr einfach mit einem Portsplitter lösen. Den verbindet man mit dem COM-Port vom Arduino und lässt ihn zwei virtuelle COM-Ports erzeugen, mit denen sich dann meine Software und Cerea verbinden können. Wer auch noch die Ausgabe von @STATUSAM auf seinem Arduino braucht, kann den Port Splitter 3 virtuelle Ports erzeugen lassen und sich somit auch noch mit dem Clutch-Port von Cerea verbinden. Das folgende Bild ist eine schematische Darstellung des Projekts:



    Hier gibt’s eine kleine Anleitung, wie ihr das ganze umsetzen könnt:

    Als erstes ladet ihr euch die Programme com0com und hub4com runter. Mit com0com können virtuelle Comports erzeugt werden und mit hub4com können diese dann beliebig verschaltet werden.

    Com0com: https://sourceforge.net/projects/com0com/

    Hub4com: https://sourceforge.net/projec…om/files/hub4com/2.1.0.0/

    Nach der Installation von com0com startet ihr das Programm „Setup für com0com“ und legt drei virtuelle Com-Port Paare so an, wie auf dem Bild zu sehen.

    Den linken Port eines jeden Paares nennt ihr am besten genauso wie ich, also VCP1-3. Rechts muss der Hacken bei „use Ports class“ gesetzt werden. Wenn man danach auf Apply drückt wird automatisch ein COM Name vergeben und den lasst ihr am besten auch so. Der wird dann wahrscheinlich anders heißen als bei mir, aber das ist nicht schlimm. Es ist nur wichtig, dass die Namen im weiteren Verlauf gleich verwendet werden. Also wenn der rechte Port deines ersten Paares COM10 heißen sollte, dann trägst du im Verlauf diesen Namen überall da ein, wo bei mir COM5 steht.


    So im nächsten Schritt muss hub4com konfiguriert werden. Hier muss nichts installiert werden, allerdings sollte der entpackte Ordner „hub4com-2.1.0.0-386“ irgendwo hin kopiert werden, wo ihr ihn nicht ausversehen löscht. Also z.B. direkt nach C:\. In diesem Ordner befindet sich die Datei hub4com.exe. Neben dieser Datei muss eine Batch Datei angelegt werden, die folgenden Befehl enthält:


    hub4com --octs=off --baud=115200 --route=0:1 --route=0:2 --route=1:0 --route=2:0 --route=3:0 \\.\COM7 \\.\VCP1 \\.\VCP2 \\.\VCP3


    Achtung COM7 ist bei mir der Port, an dem der Arduino hängt. Bei euch wird der wahrscheinlich anders heißen. Also dementsprechend die Zahl anpassen. Eine Verknüpfung dieses Batch-Files könnt ihr in den Autostart Ordner packen, dann werden bei jedem Systemstart die COM-Ports entsprechend verknüpft. Der Autostart Ordner kann geöffnet werden, indem ins Ausführen Fenster (Win+R drücken für das Ausführen Fenster) der Befehl shell:startup eingegeben wird. Wichtig das Batch-File selbst muss in dem Ordner mit der Datei hub4com.exe liegen bleiben.


    So nächster Schritt ist die Installation von „Serial to TCP for Cerea 300“. Das Setup ist hier angehängt.

    Serial_to_TCP.zip

    Dieses Programm ist von mir und wandelt die seriellen Befehle vom Arduino ins TCP Protokoll zur Weiterleitung an die ECU um und umgekehrt. Nach der Installation könnt ihr von diesem Programm ebenfalls eine Verknüpfung in den Autostart Ordner packen. Wenn ihr das Tool zum ersten Mal startet, ist es wichtig den richtigen COM-Port und die korrekte Baudrate einzustellen. Bei mir ist das COM5. Bei euch entsprechend der Name des rechten COM-Ports im ersten Paar von com0com. Wenn der Hacken bei „reconnect at startup“ gesetzt ist, verbindet sich das Tool 5 Sekunden nach jedem Start automatisch mit dem eingestellten COM-Port. Bei der IP-Adresse muss 127.0.0.1 stehen und beim Port 9999.


    Jetzt könnt ihr Cerea starten. Bei CT muss der rechte Port des zweiten Com-Port Paares aus com0com eingestellt werden. Bei mir ist das COM6. Und bei „clutch“ entsprechend der rechte Port des dritten Paares (Bei mir COM3).


    Mit OK zurück und die ECU neustarten. Noch zwei Hinweise: Damit STATUSAM funktioniert muss in der Appconfig sichergestellt werden, dass sowohl „clutchbuttonon“ als auch „clutchbutton“ auf 1 gesetzt sind. Dazu bei geschlossenem Cerea die Datei appConfig.ini im Cerea Installationsverzeichnis bearbeiten. Außerdem funktioniert der CT Port nur, wenn Teilbreiten am Anbaugerät aktiviert sind. Das heißt jedes euerer Anbaugeräte muss mindestens zwei Teilbreiten besitzen. Jetzt hat halt der Grubber bei mir auch zwei Teilbreiten, stören tuts ja nicht.

    Wenn ihr alles richtig gemacht habt, sollte euer Arduino jetzt fröhlich blinken, wenn Cerea läuft. Wenn nicht, ist irgendwas schiefgelaufen.


    Jetzt zu den Befehlen. Alle Befehle sind für Taster ausgelegt. Bei Sachen wie Lenken und Markieren schaltet man ständig um zwischen an und aus. Marc und @AUTO nehmen nach wie vor den direkten Weg über den CT-Port von Cerea. Alle anderen Befhele werden über TCP an Cerea übergeben. Es muss als End-of-Line Sequenz immer \r\n angehängt werden. Also für markieren zum Beispiel:


    Serial.print(" Marc");

    Serial.print('\r');

    Serial.print('\n');


    Hier folgt eine Liste mit Befehlen, die ihr nutzen könnte:


    @AUTO – Lenken an/aus

    Marc – Markieren an/aus

    @APS – A-Punkt setzen

    @BPS – B-Punkt setzen

    @B+S – B+, also Spur rüber ziehen

    @ARS – Spur nach rechts verschieben

    @ALS – Spur nach links verschieben

    @TOP,0 – Umschalten auf AB-Gerade

    @TOP,1 – Umschalten auf AB-Kurve

    @CONTOUR,-1, - Neue Kontur am rechten Rand

    @CONTOUR,1, - Neue Kontur am linken Rand

    @PAUSECONTOUR – Kontur Aufnahme pausieren

    @TLC – links rum wenden

    @TRC – rechts rum wenden

    @ROM – Fahrtrichtung erkennen

    @BOOMCMD,-1,-1,-1 – Schaltet alle drei Teilbreiten auf Automatik. Die Anzahl der Zahlen muss der Anzahl der Teilbreiten entsprechen. 1 schaltet die jeweilige TB dauerhaft ein, 0 schaltet aus und -1 ist Automatik


    Es gibt noch viele weitere. Man kann die Lenkeinstellungen verändern oder auslesen welches Fahrzeug und Anbaugerät mit welchen Eigenschaften (Breite, Versatz, etc) ausgewählt ist und vieles mehr. Aber die wichtigsten Befehle habe ich aufgeschrieben.

    Bei Fragen könnt ihr mich über Telegram erreichen. Ich heiße Johannes Sailer und bin in den einschlägigen Cerea Gruppen vertreten. Bitte tüftelt erst selbst, bevor ihr mir schreibt, dass irgendwas nicht geht. Aber bei Bugs und Problemen könnt ihr mich gern kontaktieren.