Hallo, weiß einer wie der RBEI Busmaster Converter richtig funktioniert? Bei mir scheint er nicht zu funktionieren. Ich habe alles richtig installiert: RBEI Busmaster von Bosch V.1.7.2 und MinGW GCC Danach habe ich ein kleines CANoe Projekt versucht, ins RBEI Busmaster zu überführen. Bei dem Converter habe ich die CANoe .DBC File und die CAPL .CAN files eingesetzt und konvertiert zu: .dbc->.dbf .can->.cpp Wenn ich im RBEI BUSMASTER nun alle konvertierten files(.dbf und .cpp) richtig implementiere und dann aus den .cpp files versuche eine .dll file zu builden, dann erscheinen da Fehler... ---> Ein nennenswerter Fehler ist der, dass eine ...unions.h file nicht existiert. Wenn jemand auch diesen Fehler schon gelöst hat, dann wäre es sehr nett, wenn er mir die Lösung verrät. ---> Ein weiterer markanter Fehler ist der, dass der Capl2CPP Converter schon bei der Konvertierung der Capl .can files den Fehler ausgibt, dass er mit den CAPL Funktionen..... getvalue()//////putvalue() ... Probleme hat und diese nicht umkonvertieren kann. kennt da jemand eine Lösung? Sei es, z.B. diese Funktionen irgendwie in CAPL so umzuschreiben, dass der CAPL2CPP Converter damit zurechtkommt. Vielen Dank für die MÜHEN! PS: Bei konkreteren Anfragen nach bestimmten Codes werde ich diese zur Verfügung stellen.
Hallo, das Problem mit der unions.h Datei habe ich selber gelöst. Dieser Fehler erscheint dann nicht mehr -sollte man den MinGW-Compiler richtig installiert haben- wenn man die Datenbank über File->Associate aktiviert. Bei mir wurde dann der Fehler, dass eine unions.h Datei fehlt, ausgemerzt. Weiterhin besteht das Problem mit den Capl-Funktionen: getvalue & putvalue
Hi An Dre, musste mir erstmal einen Account hier besorgen :-) Die wichtigsten Event-Handler von CAPL referenzieren auf die Nachrichtennamen. Deswegen ist für die Konvertierung die Datenbank erforderlich. Die Konvertierung macht zwei Dinge. Sie erstellt aus der DBC-Datei eine DBF-Datei und auch eine C-Code Header Datei (...Union.h). Diese Datei enthält die Beschreibung der Signale in den jeweiligen Nachrichten, so dass sie im C-Code genutzt werden können. Bezüglich GetValue/PutValue. Das Problem ist, dass wir in der Node Simulation noch nicht sowas, wie ein Signal Interaction Layer haben. Deswegen gibt es die Funktionen noch nicht und deswegen enthält die Union-Datei auch nur Raw Values und nicht schon umgerechnete Physical Values. Die CAPL-Sprache ist in 1500 DIN A4 Seiten beschrieben. Ungefähr 300 davon sind alleine CAN + allgemeine Funktionen. Wir unterstützten vielleicht 50 Seiten davon. Aber mit jedem nicht funktionierenden CAPL-Skript, bauen wir den Support weiter aus. In BUSMASTER v1.6.7 oder .8 haben wir daher den Compiler von GCC 2.95.3 auf GCC 3 gewechselt, um auch die objektorientierten Aspekte abdecken zu können. Über Verbesserungen, insbesondere in Form von Source Code, freuen wir uns natürlich ;-) Viele Grüße, Tobias
Hallo, vielen großen Dank für die Mühe, die Anmeldung auf µC.net und für die deutschsprachige Antwort. Wenn ich das Problem nochmal kurz veranschaulichen darf: Ich wollte ein kleines Vector CANoe Beispiel, bei dem über zwei Panels (GUIs) auf dem einen ein Schalter aktiviert/deaktiviert wird und auf dem anderen ein Lämpchen aufleuchtet, ins RBEI BUSMASTER überführen. Über die händisch betätigten Panels (GUIs) werden Umgebungsvariablen gesetzt, sodass bei den beiden CANoe Knoten daraufhin entsprechende Messages/Botschaften untereinander ausgetauscht werden. Dabei hat sich nun die Konvertierung der CANoe Knoten in das für RBEI BUSMASTER taugliche .cpp komplizierter herausgestellt, als zunächst in meiner Euphorie über den Konverter angenommen. Ich habe bereits mittels RBEI BUSMASTER und Visual Basic und einer selbst erstellten GUI es geschafft, den Verbinden/Trennen Butten in RBEI BUSMASTER zu betätigen. ZIEL: Wenn ich es mittels einer selbsterstellten GUI (Graphical User Interface) in Visual schaffen würde, bestimmte Signale einer Botschaft zu setzen, diese in den RBEI BUSMASTER Knoten zu empfangen und an andere Knoten zu schicken, dann wäre ich für mein kleines Projekt schon sehr zufrieden. FRAGE: Wüsstest du eine Alternative zu meinem Problem, sodass ich mein kleines Projekt in RBEI BUSMASTER verwirklichen könnte. Vielleicht auch eine Alternative mit Verzicht auf die GUI, jedoch mit Interaction. Automatisierte Prozesse möchte ich zunächst vernachlässigen. STATUS: Leider bin ich noch ein Laie in C++ und bin dabei, dies zu erlernen. Dass Ihr noch keinen Interaction Layer habt, sagt mir zunächst nichts. Hört sich jedoch für mich negativ an:-( Und Raw Value und Physical Values sagen mir auch noch nichts :-( Ich hoffe ich finds noch demnächst heraus. Mein persönlicher kleiner Erfolg ist, dass ich es geschafft habe, die Warnmeldung: warning: malformed '#pragma pack(pop[, id])' - ignored [-Wpragmas] ... zu lösen. (Werde ich vielleicht demnächst noch hier irgendwann posten) FRAGE: Naja, wie dem auch sei. Bedeutet es, dass aufgrund des Fehlens eines Interaction Layers und der Raw und Physical Values in der ...Unions.h Header Datei, dass ich persönlich es nicht hinkriegen würde, dieses kleine Beispiel zu verwirklichen? Oder brauche ich nur der erstellten ...Unions.h Header Datei und in den beiden aus CAPL-Knoten erstellten CPP.files nur etwas händisch hinzuzufügen , um es zu verwirklichen? Über kleine Hinweise oder ein kleines Minimal-Beispiel wäre ich wirklich sehr dankbar, weil es ein größeren Projekt eventuell zum Laufen bringen würde. Andere Frage: Du bist jetzt aber nicht in Indien? Damit ich die Zeitumrechnung für das Warten auf mögliche Antworten nicht weiter berücksichtigen brauche. Viele Grüße, Andreas
... die letzte Frage hat sich von selbst beantwortet. Deine Antwort wurde um 04:18 Uhr nachts abgeschickt :-)
Hi Andreas, bin diesmal sogar noch etwas östlicher Unterwegs: Japan mit +8h Zeitdifferenz nach Deutschland. War also nicht 04:18, sondern schon 12:18 hier :-) Zu den Raw/Physical Values: Normalerweise steht in einer CAN-Datenbank drin, wie die Signale in den Nachrichten verteilt sind, und wie sie umgerechnet werden. Sprich, häufig werden Signale mit irgendeinem Offset + Faktor linear umgerechnet, um einerseits die begrenzten Platzverhältnisse in einer CAN-Nachricht optimal zu nutzen, und dennoch den benötigten Wertebereich zu schaffen. Was real übertragen wird, nennt sich Raw Value. Umgerechnet in z.B. SI-Einheiten, ergibt sich der Physical Value. physicalValue = (rawValue * factor) + offset bzw. rawValue = (physicalValue - offset) / factor Zum Signal Interaction Layer: In der Datenbank findet sich außerdem häufig das Sendeverhalten, z.B. wird eine Nachricht zyklisch ausgesendet, oder immer wenn die Signale neu gesetzt werden, oder nur wenn sich deren Werte geändert haben. Als das wird im Signal Interaction Layer normalerweise abstrahiert. Du tauschst oben Physical Values mittels GetValue/PutValue aus und unten wird die gesamte CAN-Nachrichtenkommunikation automatisch abgewickelt. Ja und eben das fehlt leider bisher noch. Insofern wird das wohl auch das Hauptproblem bei der Konvertierung sein und dir ein manuelles Coden nicht ersparen... Du kannst dennoch direkt auf der Nachrichtenebene arbeiten, sprich CAN-Nachrichten empfangen und senden. Du arbeitest dann halt mit Raw Values, musst also derzeit in deinem Programm die Umrechnung in Physical Values vornehmen. Wenn es ohne GUI auch geht, kannst du auch das Tx Message Fenster benutzen. Das hat den Vorteil, dass man recht simpel Aussendungen auf Timer oder Tasten legen kann und man die Signale dann mit Physical Values richtig einstellen kann. Da steckt ein rudimentäres Signal Interaction Layer quasi schon drin. Rudimentär, weil das Zeitverhalten nicht aus der Datenbank kommt. Was noch? Die Unions-Datei kann auch erzeugt werden, wenn du die Datenbank importierst (.h Datei wird erzeugt) und assozierst (wird als Header-Datei dann eingebunden). Mal sehen, ich habe irgendwo ein kleines Beispielsprogramm, wie man Nachrichten durch einen Gateway leitet und dabei eine Signalmanipulation vornimmt. Das ist der Signal Routing & Manipulation Use Case. Wenn ich es finde, poste ich es hier morgen noch. Viele Grüße aus Yokohama, Tobias
Wow, vielen Dank für die seeehr ausführlichen Erklärungen und Hinweise ;-) Leider ist es so, dass ich als Student mich erstmal eine Woche anderweitig beschäftigen muss (Klausurenphase:-/) und dementsprechend mich damit erstmal nicht weiter auseinander setzen kann bis zum nächsten Mittwoch. Danach werde ich mich wieder dem spannenden Thema und vor allem deinen Hinweisen widmen und hoffe, dass ich damit dann mehr anfangen kann. Bis dahin wäre es schön, wenn auch das von dir vorgeschlagene Minimal-Beispiel geuploaded ist. Ich bedanke mich nochmals und melde mich bestimmt bald wieder;) Viele Grüße und viel Spass in Yokohama, Andreas
Hi Andreas, ich bin wieder zurück aus Japan. Hier ist das versprochene Beispiel. Es schickt alle Nachrichten von einem Kanal zum anderen und manipuliert dabei gezielt ein Signal.
1 | void OnMsg_All(STCAN_MSG RxMsg) |
2 | { |
3 | /* Messages from channel 1 to channel 2 */ |
4 | if (RxMsg.m_ucChannel == 1) { |
5 | |
6 | /* Manipulate messages with id 0x100 */ |
7 | if (RxMsg.m_unMsgID == 0x100) { |
8 | /* Signal manipulation goes here ... */ |
9 | } |
10 | |
11 | /* Prepare to send it on channel 2 */ |
12 | RxMsg.m_ucChannel = 2; |
13 | } |
14 | |
15 | /* Message from channel 2 to channel 1 */ |
16 | else { |
17 | /* Prepare to send it on channel 1 */ |
18 | RxMsg.m_ucChannel = 1; |
19 | } |
20 | |
21 | /* Send message */ |
22 | SendMsg(RxMsg); |
23 | } |
Viel Erfolg bei deinen Klausuren! Viele Grüße, Tobias
Hallo Tobias, bin wieder am werkeln mit RBEI BUSMASTER. Ich glaube ich habe deine Tipps verstanden. Blos mein Problem war es nicht, Signale von einem Kanal auf ein anderes zu schicken und dabei bestimmte Signale zu manipulieren, sondern 1)ein Signal von Visual Basic aus zu Busmaster zu schicken und 2)ein Signal wieder von RBEI BUSMASTER zu Visual Basic zurück zu schicken. Prinzipfrage: In Visual Basic muss man, um eine Kommunikation zu Busmaster herzustellen, unter Projekt->Verweis->Com->CAN_MonitorApp eine Schnittstelle CAN_MonitorApp angeben. Wenn ich ein Signal aus einer Visual Basic Anwendung heraus mit... Dim gBUSMASTERApp As CAN_MonitorApp.Application gBUSMASTERApp = New CAN_MonitorApp.Application gBUSMASTERApp.Connect(1) ... im Busmaster gesetzt habe und anschließend dessen Wertänderung in der Visual Basic Anwendung (GUI) empfangen möchte, muss ich da im BUSMASTER nicht auch so eine Schnittstelle angeben? Ist es prinzipiell möglich Werte aus RBEI BUSMASTER in Visual Basic zu empfangen? Viele Grüße, Andreas
Hallo Andreas, sorry, dass meine Antwort etwas lange gedauert hat. Seit der letzten Version 1.7.3 veröffentlichen wir auch Examples-Codes. Das erste seiner Art zeigt, wie man mit aus einem C-Programm das COM-Interface für die Fernsteuerung nutzt. Evtl. kannst du das auf Visual Basic übertragen. Ohne jetzt im Detail drin zu stecken... Es gibt eine Callback-Funktion für empfangene CAN-Frames. Die sollte von Visual Basic aus nutzbar sein. Das herausholen der Signale aus den Frames müsste dann wieder im eigenen Code erfolgen, weil wir eben diese Schnittstelle noch nicht anbieten. Ansonsten bin ich leider relativ blank, was Visual Basic angeht. BUSMASTER ist mein erstes Windows-Projekt ;-) Viele Grüße, Tobias
Hallo Tobias, schön wieder von dir zu hören:) Ich arbeite zur Zeit mit Visual Studio C++ 2012 Express. Damit bin ich bisher wunderbar zurecht gekommen (bin da als Laie sehr stolz drauf). Vorallem gefällt mir bei dieser Version der WindowsForms Editor, womit ich Buttons etc. per drag and drop kinderleicht anordnen kann. Bisher habe ich es auch geschafft, alles mögliche an BUSMASTER zu senden. Nur fehlt mir eben noch die Möglichkeit mit Visual Studio 2012 Express C++/CLI, das Datenfeld einer Botschaft auszulesen. Das Example aus der Version 1.7.3 gefällt mir sehr gut und das Beispiel läuft relativ stabil und zufriedenstellend. -Gut finde ich an dem Beispiel, dass das Datenfeld ausgelesen wird. -Jedoch fehlt mir hier der Windows Forms Editor. -Das Beispiel ist auch leider in MFC geschrieben und leider besitzt nicht jedermann eine Visual Studio Version mit MFC. Du sprichst von einer "Callback-Funktion". Gibt es eine Möglichkeit mit Visual Studio 2012 C++/CLI Express so eine "Callback-Funktion" einzurichten? Könntest du eventuell ein Prinzip Beispiel mit Visual Studio 2012 C++/CLI Express einrichten, das einfach ein Button besitzt, wo man drauf klickt und das Datenfeld angezeigt wird auf einem Textfeld? Wäre damit sehr zufrieden und würde in meinem Projekt um einiges vorankommen. Ansonsten müsste ich mich in MFC einlesen:-( Denke mal, dass da die MFC Funktionen "CDialog" und "DoDataExchange" verantwortlich sind, dass das Datenfeld gelesen werden kann. Auch müsste ich mich in MFC einlernen, wie man Buttons etc. anordnet °finde ich noch etwas schwierig° Frage: -Wird in naher Zukunft vielleicht das Com Interface um eine Funktion/Befehl erweitert, womit man das Datenfeld "auslesen" kann? So wie es bisher die Busmaster "schreibenden" Funktionen/Befehle gibt, Viele Grüße, Andreas
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.