Forum: PC Hard- und Software CAN-Nachricht über CANalyzer schicken


von Johannes (Gast)


Lesenswert?

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?

von Borislav B. (boris_b)


Lesenswert?

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?

von Johannes (Gast)


Lesenswert?

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

von Hannes H. (mui)


Lesenswert?

Das müsste mit dem Signalgeneratorblock gehen (IG).

von Johannes (Gast)


Lesenswert?

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.

von Borislav B. (boris_b)


Lesenswert?

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?

von Hannes H. (mui)


Lesenswert?

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 :-)

von Johannes (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Hannes H. (mui)


Lesenswert?

Dein Identifier sieht komisch aus. Müsste das nicht irgdwas mit 0xff... 
sein?

von Vielleicht_Lösung (Gast)


Lesenswert?

Hallo,

unter Konfiguration / Netzwerk-Hardware das Acknowledge eingeschaltet?

von Johannes (Gast)


Lesenswert?

es läuft. das x am ende des identifiers, bedeutet, dass es extended 
identifier ist.
ich musste echt erst über CANdb++ gehen.

von rosch92 (Gast)


Lesenswert?

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

von Wurx (Gast)


Lesenswert?

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
}

von rosch92 (Gast)


Lesenswert?

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 :)

von Borislav B. (boris_b)


Lesenswert?

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 :-)

von rosch92 (Gast)


Lesenswert?

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

von Borislav B. (boris_b)


Angehängte Dateien:

Lesenswert?

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).

von rosch92 (Gast)


Lesenswert?

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?

von Borislav B. (boris_b)


Lesenswert?

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.

von rosch92 (Gast)


Lesenswert?

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

von Borislav B. (boris_b)


Lesenswert?

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
Noch kein Account? Hier anmelden.