Übertragen des Spurpolynoms: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
(Überarbeitung von "Programmierung" und Beschreibung der Implementierung hinzugefügt)
 
Zeile 1: Zeile 1:
<!-- Kopieren Sie diesen Header in Ihren Artikel, damit er aufgelistet wird.  -->
<!-- Kopieren Sie diesen Header in Ihren Artikel, damit er aufgelistet wird.  -->
'''Autor:''' [[Benutzer:Luca_Di-Lillo | Luca Di Lillo]] <br/>
'''Autor:''' [[Benutzer:Luca_Di-Lillo | Luca Di Lillo]], <br/>
[[Benutzer:Tim-Jannik_Schonlau|Tim Schonlau]], [[Benutzer:Changlai_Bao|Changlai Bao]] editiert in WS2022/23 <br/>
'''Betreuer:''' [[Benutzer:Ulrich_Schneider| Prof. Schneider]]<br/>
'''Betreuer:''' [[Benutzer:Ulrich_Schneider| Prof. Schneider]]<br/>


Zeile 11: Zeile 12:
[[Datei:Send polynom.png|rechts|mini|300px|Abb. 1: Sendevorgang des Spurpolynoms]]
[[Datei:Send polynom.png|rechts|mini|300px|Abb. 1: Sendevorgang des Spurpolynoms]]
== Programmierung ==
== Programmierung ==
Die Programmierung erfolgte in C++ mit Visual Studio 2019 Professional. Die Funktion ist Bestandteil der Library [https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Software/OSE_Draufsicht_Spurpolynom_RS232/Kommunikation/RS232Comm.cpp RS232Comm.cpp]. <br/>
 
Als Eingangsvariablen erhält die Funktion die Koeffizienten a,b und c des Spurpolynoms. Um der Empfangsseite das Senden von Daten anzukündigen wird dann ein Startbyte gesendet. Damit der Empfänger entsprechend reagieren kann, wird das Programm kurz pausiert. <br/>
Die Programmierung erfolgt in C++ mit Visual Studio 2019. Die Funktion ''"RS232_SendDataBigEndianFirst(&OSE_msg_d);"'' ist Bestandteil der Library [https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Software/OSE_Draufsicht_Spurpolynom_RS232/Kommunikation/RS232Comm.cpp RS232Comm.cpp] <br/>
Im nächsten Schritt wird der erste Koeffizient des Polynoms gesendet. Jeder Koeffizient entspricht dem Datentyp float der vier Byte groß ist. Über die RS232 Schnittstelle kann jedoch immer nur ein Byte gesendet werden. Daher wird mit einem Zeiger auf jedes Byte des Koeffizienten nacheinander zugegriffen und gesendet. Wichtig an dieser Stelle ist, dass der Rechner mit der C++ Anwendung nach der Little-Enzian Byteordnung arbeitet und die dSpace Karte nach der Big-Endian Byteordnung. Daher wird beim Senden die Byteordnung geändert und zuerst das höhenwertige Byte (MSB) gesendet. Nachdem alle vier Bytes versendet wurden, wird der nächste Koeffizient des Polynoms gesendet. <br/>
und übergibt den 149 Byte lange Übergabeparameter ''msg'' an die dSpace-Karte. In dieser sind die Koeffizienten a, b und c des Spurpolynoms enthalten. Um der Empfangsseite das Senden von Daten anzukündigen wird dann ein Startbyte gesendet. Damit der Empfänger entsprechend reagieren kann, wird das Programm kurz pausiert. Der Handshake ist im aktuellen Stand (Oktober 2022) noch nicht implementiert bzw. funktionsfähig. <br/>
Die Koeffizienten des Polynoms werden im Datentyp ''float'', die vier Byte groß sind, versendet. Über die RS232 Schnittstelle kann jedoch immer nur ein Byte gesendet werden. Daher wird mit einem Zeiger auf jedes Byte des jeweiligen Koeffizienten nacheinander zugegriffen und gesendet. Wichtig an dieser Stelle ist, dass der Rechner in einer C++/x86 Anwendung nach der Intel Little-Endian ''Byterorder'' arbeitet und die dSpace Karte nach der Big-Endian Byte-Reihenfolge. Daher wird beim Senden die Byte-Reihenfolge geändert und zuerst das ''most significant bit'' (MSB) gesendet. Nachdem alle vier Bytes eines Koeffizienten versendet wurden, wird der nächste Koeffizient des Polynoms gesendet. <br/>
Um dem Empfänger das Ende der Übertragung anzuzeigen wird ein Endbyte gesendet. <br/>
Um dem Empfänger das Ende der Übertragung anzuzeigen wird ein Endbyte gesendet. <br/>
Wichtige Anmerkung: Der Comport wird in dem Header [https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Software/OSE_Draufsicht_Spurpolynom_RS232/Kommunikation/all_needed.h all_needed.h] in Zeile 80 eingestellt.
Wichtige Anmerkung: Der Comport wird in dem Header [https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Software/OSE_Draufsicht_Spurpolynom_RS232/Kommunikation/all_needed.h all_needed.h] in Zeile 80 definiert.
* Comport 1 bei Laborrechner zu dSpace Karte im Rechner
* Comport 1 bei Laborrechner zu dSpace Karte im Rechner
* Comport 2 bei Fahrzeug zu dSpace Karte auf dem Fahrzeug
* Comport 2 bei Fahrzeug zu dSpace Karte auf dem Fahrzeug
=== Beschreibung der Implementierung in C++ von ''RS232Comm.cpp'' ===
Mit einer For-Schleife wird durch den Übergabeparameter ''msg'' durchlaufen. Ein ''Switch-Case'' Kontrollstruktur wählt dabei das zu sendende Byte aus, die mit der Variable ''counterParameter_u8'' implementiert ist. <br/>
Bei jedem Schleifendurchlauf wird mit der Funktion ''RS232_SendByte(comPort,bytePointer)'' aus der eingebundenen Bibliothek ''rs232.h'' das Byte aus ''msg'' versendet. <br/>
Wenn keine Breakpoints beim Debuggen gesetzt werden, kommt ''msg'' nicht korrekt in Control Desk an. Dies ist der nächste Schritt ToDo.
Anscheinend werden die Koeffizienten von den anderen zu übermittelnden Datensätzen (wie ''Spurzuordnung'' oder ''Abstand Stopplinie'') überschrieben.


== Komponententest ==
== Komponententest ==

Aktuelle Version vom 24. Oktober 2022, 14:08 Uhr

Autor: Luca Di Lillo,
Tim Schonlau, Changlai Bao editiert in WS2022/23
Betreuer: Prof. Schneider

Einleitung

Dieser Artikel beschreibt den Sendevorgang des ermittelten Spurpolynoms aus der C++ Anwendung, über RS232 an die dSpace DS1104 Hardware. Wichtig ist dass hier nur die Koeffizienten des Polynoms gesendet werden, andere Daten, wie Stopplinien werden aktuell nicht erkannt und somit auch nicht gesendet. Diese Funktion muss in Zukunft implementiert werden. Der Umgang mit den Daten auf der Empfangsseite wird im Artikel Fahrzeugkommunikation via RS232 beschrieben.

Softwareentwurf

Die Funktion zum Senden des Spurpolynoms wurde vor der Programmierung in Form eines PAP erstellt.

Abb. 1: Sendevorgang des Spurpolynoms

Programmierung

Die Programmierung erfolgt in C++ mit Visual Studio 2019. Die Funktion "RS232_SendDataBigEndianFirst(&OSE_msg_d);" ist Bestandteil der Library RS232Comm.cpp
und übergibt den 149 Byte lange Übergabeparameter msg an die dSpace-Karte. In dieser sind die Koeffizienten a, b und c des Spurpolynoms enthalten. Um der Empfangsseite das Senden von Daten anzukündigen wird dann ein Startbyte gesendet. Damit der Empfänger entsprechend reagieren kann, wird das Programm kurz pausiert. Der Handshake ist im aktuellen Stand (Oktober 2022) noch nicht implementiert bzw. funktionsfähig.
Die Koeffizienten des Polynoms werden im Datentyp float, die vier Byte groß sind, versendet. Über die RS232 Schnittstelle kann jedoch immer nur ein Byte gesendet werden. Daher wird mit einem Zeiger auf jedes Byte des jeweiligen Koeffizienten nacheinander zugegriffen und gesendet. Wichtig an dieser Stelle ist, dass der Rechner in einer C++/x86 Anwendung nach der Intel Little-Endian Byterorder arbeitet und die dSpace Karte nach der Big-Endian Byte-Reihenfolge. Daher wird beim Senden die Byte-Reihenfolge geändert und zuerst das most significant bit (MSB) gesendet. Nachdem alle vier Bytes eines Koeffizienten versendet wurden, wird der nächste Koeffizient des Polynoms gesendet.
Um dem Empfänger das Ende der Übertragung anzuzeigen wird ein Endbyte gesendet.
Wichtige Anmerkung: Der Comport wird in dem Header all_needed.h in Zeile 80 definiert.

  • Comport 1 bei Laborrechner zu dSpace Karte im Rechner
  • Comport 2 bei Fahrzeug zu dSpace Karte auf dem Fahrzeug

Beschreibung der Implementierung in C++ von RS232Comm.cpp

Mit einer For-Schleife wird durch den Übergabeparameter msg durchlaufen. Ein Switch-Case Kontrollstruktur wählt dabei das zu sendende Byte aus, die mit der Variable counterParameter_u8 implementiert ist.
Bei jedem Schleifendurchlauf wird mit der Funktion RS232_SendByte(comPort,bytePointer) aus der eingebundenen Bibliothek rs232.h das Byte aus msg versendet.

Wenn keine Breakpoints beim Debuggen gesetzt werden, kommt msg nicht korrekt in Control Desk an. Dies ist der nächste Schritt ToDo. Anscheinend werden die Koeffizienten von den anderen zu übermittelnden Datensätzen (wie Spurzuordnung oder Abstand Stopplinie) überschrieben.

Komponententest

Da es sich bei dieser Entwicklung um die einer einzelnen Komponente handelt, schließt der Komponententest mit dem Testbericht die Entwicklung ab.
Der Komponententest erfolgt zusammen mit dem Programm auf der dSpace Karte, dass die gesendeten Daten empfangen soll.

Testfall Testfallbeschreibung Eingänge a,b und c Erwartetes Ergebnis beim Empfänger Testergebnis Testperson Datum
1 Ein allgemeines Spurpolynom wird gesendet, Verhalten des Statusbit wird überprüft. zufällige Koeffizienten, ermittelt aus der Spur. Empfang von Daten: Statusbit wechselt auf 0. OK Yanick Christian Tchenko 03.01.2020
2 Ein allgemeines Spurpolynom wird gesendet, Empfang der richtigen Daten wird überprüft. -3.824300e-6, -0.06431, 63.064310 -3.824300e-6, -0.06431, 63.064310 OK Yanick Christian Tchenko 03.01.2020
3 Startbyte wird als gesamtes Polynom gesendet. 2.86331e9, 2.86331e9, 2.86331e9 (entspricht Startbyte als float) 2.86331e9, 2.86331e9, 2.86331e9 OK Yanick Christian Tchenko 03.01.2020
4 Stoppbyte wird als gesamtes Polynom gesendet. 1.79662e8, 1.79662e8, 1.79662e8 (entspricht Stoppbyte als float) 1.79662e8, 1.79662e8, 1.79662e8 OK Yanick Christian Tchenko 03.01.2020
5 Senden von Null. 0, 0, 0 0, 0, 0 OK Yanick Christian Tchenko 03.01.2020

Zusammenfassung

Das Übertragen des Spurpolynoms wurde gemäß des Softwareentwurfs durchgeführt und zusammen mit der Software auf der dSpace Karte getestet. Werden im weiteren Verlauf noch weitere Funktionen der Objekt- und Spurerkennung implementiert, muss eine anderen Funktion der Library RS232Comm.cpp verwendet werden. Diese Funktion sendet lediglich das Spurpolynom das für eine einfach Fahrt auf der Rundstrecke nötig ist.

Link zum Quelltext und zum Komponententest in SVN

RS232Comm.cpp
Komponententest RS232


Zurück zum Hauptartikel:
OSE - Objekt - und Spurerkennung