Hallo, ich habe eine CAN-Kommunikation und möchte diese zunächst testen. Jetzt habe cih CANalyzer von Vector. Ist es dort irgendwie möglich, im laufenden Betrieb eine Nachricht zu erstellen? Also ich kann bisher direkt über CANalyzer und CAPL vorher definierte Nachrichten verschicken. Da ich die Zustände im laufenden Betrieb aber nicht vorhersagen kann, möchte ich gerne Nachrichten, bzw. die Daten der Nachrichten im laufenden betrieb bestimmen und verschicken. ist soetwas irgendwie möglich?
Johannes schrieb: > Da ich die Zustände im laufenden Betrieb aber nicht vorhersagen kann, > möchte ich gerne Nachrichten, bzw. die Daten der Nachrichten im > laufenden betrieb bestimmen und verschicken. > ist soetwas irgendwie möglich? Das klingt jetzt aber eher nach Restbussimulation als nach Analyse. Dafür ist soweit ich weiß CANoe gedacht, dass in der Hinsicht vieles zu bieten hat. Aber was hindert dich daran, in deinem CAPL Code dynamisch die zu sendenden Daten/Signale) festzulegen?
Boris P. schrieb: > Aber was hindert dich daran, in deinem CAPL Code dynamisch die zu > sendenden Daten/Signale) festzulegen? das ich nicht wusste, dass das geht und noch nicht weis, wie das geht
Ja, nur dass der Interaktive Generatorblock nur mit CANoe funktioniert (soweit ich das weiss) und ich leider nur CANalyzer habe. Zumindestens wird, wenn ich beim Senden auf 'jetzt' drücke, keine Nachricht rausgesendet. das habe ich getestet. Beim Suchen im Internet, wird dieser Block immer nur mit CANoe in verbindung gebracht. Aber so etwas wäre schon sehr schick.
Johannes schrieb: > Ja, nur dass der Interaktive Generatorblock nur mit CANoe funktioniert > (soweit ich das weiss) und ich leider nur CANalyzer habe. Der funktioniert auch im CANalyzer :-) (Du musst ihn natürlich in den Sendezweig des Messaufbaus stecken) Reicht dir denn ein manuelles Senden? Oder willst du programmatisch senden?
Ich habe selber nur eine Canalyzer Lizenz (allerdings gerade nicht installiert, daher kann ich's nicht im Detail nachvollziehen) und schon mit dem IG gearbeitet. Deswegen bin ich mir 100% sicher, dass das damit geht. Also jedenfalls das zyklische oder manuelle Senden von Daten mit variablem Inhalt auf unterschiedlichen IDs. Ob man damit durch eine empfangene Botschaft getriggert senden kann weiß ich nicht. Du musst in deinem Netzwerk den IG hinzufügen, dort eine vordefinierte .dbc. konfigurieren und kannst dann dort Botschaften hinzufügen und senden. So ungefähr jedenfalls :-)
Boris P. schrieb: > Du musst ihn natürlich in den Sendezweig des Messaufbaus stecken Das habe ich. Boris P. schrieb: > Reicht dir denn ein manuelles Senden? Oder willst du programmatisch > senden? Ich möchte ja manuell Senden. Programmatisch habe ich ja schon, aber nur mit vorher definierten daten. Bisher ist auf fast jeder Taste meiner Tastatur eine Nachricht mit bestimmten Daten hinterlegt. diese kommen auch an meinem Board an. Aber wenn ich jetzt einen Wert senden möchte/muss, den ich nciht berücksichtigt habe, muss ich die ganze messung abbrechen, den wert neu hinzufügen und neu messen. Dann ist ncoh nichtmals klar, dass dieser wert wieder benötigt wird. so habe ich die nachricht erstellt. wenn ich jetzt auf 'Sende' klicke, passiert nichts. Im CAN-Trace wird auch nichts angezeigt, dass eine Nachricht versendet wurde.
Dein Identifier sieht komisch aus. Müsste das nicht irgdwas mit 0xff... sein?
Hallo, unter Konfiguration / Netzwerk-Hardware das Acknowledge eingeschaltet?
es läuft. das x am ende des identifiers, bedeutet, dass es extended identifier ist. ich musste echt erst über CANdb++ gehen.
Ich hätte auch noch ne Frage zu CanOe, CAPL und CanDB. Ich würde gerne über einen Button einen "Startbefehl" an den IG übermitteln. Dieser schickt dann Datenpakete an meinen Microcontroller. Wie muss ich das im CAPL programmieren. Habe schon viel versucht aber nicht zum gewünschten Erfolg gekommen. Wenn es einfacher ist, dann ich auch im CAPL die zusendende Nachricht hinterlegen, das der IG nur noch "angeschuckt" werden muss. Hoffe hier kann mir jmd helfen
rosch92 schrieb: > Wenn es einfacher ist, dann ich auch im CAPL die zusendende Nachricht > hinterlegen, das der IG nur noch "angeschuckt" werden muss. Wozu dann überhaupt den IG? Kannst es ja gleich über CAPL machen ;-)
1 | variables
|
2 | {
|
3 | msTimer mTimer; |
4 | }
|
5 | |
6 | on start |
7 | {
|
8 | setTimerCyclic(mTimer, 250); |
9 | }
|
10 | |
11 | on timer mTimer |
12 | {
|
13 | message 100 msg; |
14 | msg.DLC = 1; |
15 | msg.BYTE(0) = 0xff; |
16 | output(msg); |
17 | }
|
Wurx schrieb: > rosch92 schrieb: >> Wenn es einfacher ist, dann ich auch im CAPL die zusendende Nachricht >> hinterlegen, das der IG nur noch "angeschuckt" werden muss. > > Wozu dann überhaupt den IG? Kannst es ja gleich über CAPL machen ;-) > variables Genau, ich will ja den IG los werden und das ganze über einen Button starten lassen :)
rosch92 schrieb: > Genau, ich will ja den IG los werden und das ganze über einen Button > starten lassen :) Dann mach einen Button, an den du eine Systemvariable "Bla" hängst. Im CAPL dann einen "on sysvar Bla"-Handler. Voila :-)
variables { msTimer mTimer; } on envVar Button1 { setTimerCyclic(mTimer, 250); } on timer mTimer { message 100 msg; msg.id = 0x1; msg.DLC = 1; msg.BYTE(0) = 0xff; output(msg); } Wo ist mein Fehler? Bei Statusänderung von Button1 soll eine CAN-Botschaft auf den Bus gelegt werden mit der ID 1 und 1x Datenbit FF. Leider sehe ich im Trace nichts
rosch92 schrieb: > Wo ist mein Fehler? Im Prinzip sieht das richtig aus. Der Fehler liegt also irgendwo im Detail. Ich hab dir mal ein Beispiel gemacht (für CANoe 9 und 10). Das läuft bei mir einwandfrei (getestet mit virtuellem CAN Kanal).
Borislav B. schrieb: > rosch92 schrieb: > Wo ist mein Fehler? > > Im Prinzip sieht das richtig aus. Der Fehler liegt also irgendwo im > Detail. > Ich hab dir mal ein Beispiel gemacht (für CANoe 9 und 10). > > Das läuft bei mir einwandfrei (getestet mit virtuellem CAN Kanal). Vielen Dank! Es funktioniert! Aber wie stell ich ein das die Nachricht nur 1x geschickt wird?
rosch92 schrieb: > Vielen Dank! Es funktioniert! > Aber wie stell ich ein das die Nachricht nur 1x geschickt wird? Dann lässt du den timer weg, und packst den Sende-Code direkt in den on sysvar Handler. Dann wird nur 1x gesendet, wenn sich die Systemvariable (durch den Button auf dem Panel) ändert. Zusätzlich solltest du noch prüfen, ob die Variable == 1 ist, und nur dann senden. Sonst gehen zwei Botschaften raus, eine beim runterdrücken und eine beim loslassen des Buttons.
Borislav B. schrieb: > Zusätzlich solltest du noch prüfen, ob die Variable == 1 ist, und nur > dann senden. Sonst gehen zwei Botschaften raus, eine beim runterdrücken > und eine beim loslassen des Buttons. Wie bekomme ich das hin? Direkt nach on envvar eine if-Abfrage auf die Variablen? Oder wo muss das ganze rein? on envvar Linkslauf { if(Linkslauf == 1){ message 100 msg; msg.id = 255; msg.DLC = 3; msg.BYTE(0) = 0xEE; output(msg); } } Gibt es beim CAPL den "=="-Vergleichoperator? Der wird bei mir rot unterschrichen
Im Prinzip schon richtig. Um den Wert der Variablen zu bekommen, musst du aber ein $ (glaube ich) davorsetzen: if($Linkslauf == 1){
Beitrag #6104270 wurde von einem Moderator gelöscht.
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.