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