Hallo! Ist es möglich, mit C# bestimmte Signale im CANalyzer auf dem Grafik Fenster beim Start der Konfig-Datei (ebenfalls über C#) anzeigen zu lassen, ohne dass man sie manuell einfügt? Gruß
Gibt es denn gar keine Möglichkeit, bestimmte Botschaften bzw. Signale über C# anzusprechen? Man sagte mir, man kann über die Loggingblöcke (u.a. Stichwort LoggingFilter) steuern, welche Signale in ein signalorientiertes Format (MDF) geschrieben werden und diese dann extern oder mit CANalyzer wieder analysieren. Weiß aber nicht genau, was damit gemeint ist. Gruß
Du kannst mit C# so ziemlich alles machen, nicht immer nativ, dann aber mit C++ Code der über C# aufgerufen wird. Aber ich verstehe dein Problem einfach nicht. Formulier das einmal etwas genauer.
Alan G. schrieb: > Gibt es denn gar keine Möglichkeit, bestimmte Botschaften bzw. > Signale über C# anzusprechen? Man sagte mir, man kann über die > Loggingblöcke (u.a. Stichwort LoggingFilter) steuern, welche Signale in > ein signalorientiertes Format (MDF) geschrieben werden und diese dann > extern oder mit CANalyzer wieder analysieren. > > Weiß aber nicht genau, was damit gemeint ist. > > Gruß Was ist denn genau dein Problem? Du kannst über C# COM Komponenten ansprechen. Du musst halt die ID der Komponente kennen, diese in C# als Klasse nachbilden und das COMVisible Attribut drüber setzen. Wenn du jedoch unmanaged Code ansprechen willst musst du dich in die P/Invole Technik und Interop Layering Einlesen. Das normale Vorgehen wäre hierbei einen Managed C++ Layer zu basteln, der den nativen Code wrapped und in C# ansprechbar ist. Wenn du dein problem näher ausführst kann ich dir weiterhelfen, hab schon einige COM Komponenten über C# angesteuert.
Ich gehe davon aus, das du dich auf den CANalyzer von Vector Informatik beziehst. Du kannst beim Aufruf des COM die Konfiguration angeben, die du starten möchtest. Es gibt dazu eine Appliction Note von Vector.
Ing schrieb: > Was ist denn genau dein Problem? > Du kannst über C# COM Komponenten ansprechen. Du musst halt die ID der > Komponente kennen, diese in C# als Klasse nachbilden und das COMVisible > Attribut drüber setzen. Wenn du jedoch unmanaged Code ansprechen willst > musst du dich in die P/Invole Technik und Interop Layering Einlesen. Das > normale Vorgehen wäre hierbei einen Managed C++ Layer zu basteln, der > den nativen Code wrapped und in C# ansprechbar ist. Wenn du dein problem > näher ausführst kann ich dir weiterhelfen, hab schon einige COM > Komponenten über C# angesteuert. Danke für die Antwort! Da ich noch ein frischer Anfänger bin, was CANalyzer angeht, wusste ich erstmal nicht, dass mal das Grafik Fenster über die COM-Schnittstelle gar nicht ansprchen kann. Die Grundidee war, bestimmte Botschaften (aus welcher Quelle auch immer (DBC oder EXCEL)) automatisch (sprich über die COM-Schnittstelle) zu messen und den grafischen Verlauf der Signale darzustellen. Da ich jedoch das Grafik Fenster von außen gar nicht ansprechen kann, dachte ich mir, den Verlauf über Uniplot darzustellen.
Alan G. schrieb: > Ing schrieb: >> Was ist denn genau dein Problem? >> Du kannst über C# COM Komponenten ansprechen. Du musst halt die ID der >> Komponente kennen, diese in C# als Klasse nachbilden und das COMVisible >> Attribut drüber setzen. Wenn du jedoch unmanaged Code ansprechen willst >> musst du dich in die P/Invole Technik und Interop Layering Einlesen. Das >> normale Vorgehen wäre hierbei einen Managed C++ Layer zu basteln, der >> den nativen Code wrapped und in C# ansprechbar ist. Wenn du dein problem >> näher ausführst kann ich dir weiterhelfen, hab schon einige COM >> Komponenten über C# angesteuert. > > Danke für die Antwort! > Da ich noch ein frischer Anfänger bin, was CANalyzer angeht, wusste ich > erstmal nicht, dass mal das Grafik Fenster über die COM-Schnittstelle > gar nicht ansprchen kann. Die Grundidee war, bestimmte Botschaften (aus > welcher Quelle auch immer (DBC oder EXCEL)) automatisch (sprich über die > COM-Schnittstelle) zu messen und den grafischen Verlauf der Signale > darzustellen. Da ich jedoch das Grafik Fenster von außen gar nicht > ansprechen kann, dachte ich mir, den Verlauf über Uniplot darzustellen. Das Grafikfenster an sich ist doch keine COM Komponente oder? Ich vermute mal das es einen COM Server gibt denn du ansprechen kannst bzw. über welchen du auf die Signale zugreifen kannst. Was du dann brauchst wäre die IID von dem COM Server. Wenn du die rausgefunden hast kannst du in C# einen COM Klasse Wrapper bauen und damit direkt auf das API des Canalyzer COM Servers zugreifen. Wie du so einen Wrapper baust ist hier beschrieben: https://msdn.microsoft.com/en-us/library/aa645736(v=VS.71).aspx Falls du noch Fragen hast, immer her damit
Vector unterstützt C# TestModule etc und eben COM, ausserdem gibt es noch die XL Driver, die kannst Du in C# benutzen.
Danke für eure Antworten! Ich hätte mal eine andere Frage. Ich möchte eine Offline Messung am CANalyzer durchführen. Die soll ebenfalls über C# (COM-Schnittstelle) gehen. Eine Messung wurde an einem Steuergerät durchgeführt und ein ASC-File wurde erstell, in dem die Botschaften drin sind bzw. die IDs der Botschaften, Länge (in Bytes) usw. Jetzt möchte ich bestimmte IDs der Botschaften aus der ASC-Datei über C# einlesen und die Signale dieser Botschaften messen. Wie geht man am besten dabei vor? Mir ist nicht der Code an sich wichtig, da ich das Programmieren selbst hinbekomme, sondern die Schritte, wie ich dabei vorgehen soll. Gruß
Alan G. schrieb: > Danke für eure Antworten! > Ich hätte mal eine andere Frage. Ich möchte eine Offline Messung am > CANalyzer durchführen. Die soll ebenfalls über C# (COM-Schnittstelle) > gehen. Eine Messung wurde an einem Steuergerät durchgeführt und ein > ASC-File wurde erstell, in dem die Botschaften drin sind bzw. die IDs > der Botschaften, Länge (in Bytes) usw. > Jetzt möchte ich bestimmte IDs der Botschaften aus der ASC-Datei über C# > einlesen und die Signale dieser Botschaften messen. Wie geht man am > besten dabei vor? Mir ist nicht der Code an sich wichtig, da ich das > Programmieren selbst hinbekomme, sondern die Schritte, wie ich dabei > vorgehen soll. > > Gruß 1. Datei einlesen, z.B. mittels StreamReader 2. Mittels RegEx zunächst alle IDs herausfiltern (wird dir als Liste von strings zurückgegeben 3. Liste auf die IDs filtern die du haben möchtest (zB über LINQ) Hoffe das hilft die weiter
Ing schrieb: > Alan G. schrieb: >> Danke für eure Antworten! >> Ich hätte mal eine andere Frage. Ich möchte eine Offline Messung am >> CANalyzer durchführen. Die soll ebenfalls über C# (COM-Schnittstelle) >> gehen. Eine Messung wurde an einem Steuergerät durchgeführt und ein >> ASC-File wurde erstell, in dem die Botschaften drin sind bzw. die IDs >> der Botschaften, Länge (in Bytes) usw. >> Jetzt möchte ich bestimmte IDs der Botschaften aus der ASC-Datei über C# >> einlesen und die Signale dieser Botschaften messen. Wie geht man am >> besten dabei vor? Mir ist nicht der Code an sich wichtig, da ich das >> Programmieren selbst hinbekomme, sondern die Schritte, wie ich dabei >> vorgehen soll. >> >> Gruß > > 1. Datei einlesen, z.B. mittels StreamReader > 2. Mittels RegEx zunächst alle IDs herausfiltern (wird dir als Liste von > strings zurückgegeben > 3. Liste auf die IDs filtern die du haben möchtest (zB über LINQ) > > Hoffe das hilft die weiter Das hilft mir sehr! Danke dir! Meine nächste Frage wäre, wenn ich mir beispielsweise eine bestimmte Botschaft herausgesucht habe, wie kann ich genau diese eine Botschaft messen? Gruß
Alan G. schrieb: > Hoffe das hilft die weiter > > Das hilft mir sehr! Danke dir! > Meine nächste Frage wäre, wenn ich mir beispielsweise eine bestimmte > Botschaft herausgesucht habe, wie kann ich genau diese eine Botschaft > messen? > > Gruß Das kommt auf die API des CanAnalyzers an. Da ich die nicht kenne kann ich dir nicht sagen wie du die Signale messen kannst. Du kannst ja mal die COM Schnittstelle hier posten, sofern sie recht klein ist, evtl. Hilft uns das weiter
Alan G. schrieb: > Das hilft mir sehr! Danke dir! > Meine nächste Frage wäre, wenn ich mir beispielsweise eine bestimmte > Botschaft herausgesucht habe, wie kann ich genau diese eine Botschaft > messen? > > Gruß So, ich hab mir mal kurz die Mühe gemacht und ins API Manual vom Canalyzer geschaut (zu finden unter https://vector.com/portal/medien/cmc/application_notes/AN-AND-1-117_CANoe_CANalyzer_as_a_COM_Server.pdf#page2) Auf Seite 6, Abschnitt 2.3 Accessing Communication Data ist folgendes Codebsnippet zum Zugriff auf die Signale zu finden: The method GetSignal of object Bus can be used to assign the signal to the mCANalyzerEngineSpeed variable. Therefore, it is necessary to pass the channel number on which the signal is sent, the message name to which the signal belongs und the signal name itself as parameters. The Bus object itself is accessed with the mCANalyzerApp variable: CANalyzer.Bus CANalyzerBus = (CANalyzer.Bus)mCANalyzerApp.get_Bus("CAN"); mCANalyzerEngineSpeed = (CANalyzer.Signal)CANalyzerBus.GetSignal(1, "EngineData", "EngineSpeed"); Du musst also den Kanal mitgeben, die Nachricht und den Signalnamen. So erfolgt der Zugriff. Hoffe das hilft
> CANalyzer.Bus CANalyzerBus = > (CANalyzer.Bus)mCANalyzerApp.get_Bus("CAN"); mCANalyzerEngineSpeed = > (CANalyzer.Signal)CANalyzerBus.GetSignal(1, "EngineData", > "EngineSpeed"); > > Du musst also den Kanal mitgeben, die Nachricht und den Signalnamen. So > erfolgt der Zugriff. > > Hoffe das hilft Danke dir für deine Mühe! Das hatte ich mir auch angeschaut. Jedoch liefert mir die Funktion nur den Wert des Signals. Die Frage ist dabei, was dieser überhaupt aussaget? Gruß
Hallo, allerseits! Im CANalyzer gibt es die "benutzdefinierte" und "systemdefinierte" Systemvariablen. Wie man übern COM Server die "systemdefinierte" anlegt, ist mir bewusst. Was ist eigentlich mit den "benutzdefinierten"? Wie legt man sie an? Kann mir da vielleicht jemand helfen? Oder wenigstens sagen, ob es so möglich ist? Gruß
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.