J'essaie de communiquer avec ECUsim 2000 qui est simulateur d'ECU OBD-ll (link). Pourtant, les réponses que je reçois toujours de l'appareil sont quelque chose comme "??" ou "?" (quand j'exécute des programmes comme TouchScan ou OBD Auto Doctor, ils lisent correctement les données pour que l'appareil fonctionne correctement). J'envoie COMAND en C# viaincapable de communiquer avec obd-II
serialPort1.Write("010D\r")
et je suis signal de réception dans le cas DataReceived de SerialPort comme
message = "Data Received: " + serialPort1.ReadExisting();
this.Invoke(new EventHandler(displayText));
Je ne maintenant ce que je suis absent. Voici le code source complet
private void Form1_Load(object sender, EventArgs e)
{
serialPort1.PortName = "COM3";
serialPort1.BaudRate = 115200;
serialPort1.Parity = System.IO.Ports.Parity.None;
serialPort1.StopBits = System.IO.Ports.StopBits.One;
serialPort1.DataBits = 8;
serialPort1.Handshake = System.IO.Ports.Handshake.None;
serialPort1.Open();
}
private void button1_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
{
serialPort1.Write("010D\r");
}
}
private void displayText(object sender, EventArgs e)
{
textBox1.AppendText(message + "\n");
}
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
message = "Data Received: " + serialPort1.ReadExisting();
this.Invoke(new EventHandler(displayText));
}
paramètres de communication par défaut de ECUsim 2000 sont
Vitesse: 115200 Bits de données: 8 Parité: aucune Bits d'arrêt: 1
protocoleest certifiée ISO 15765 -4 et il y a deux commutateurs sur le périphérique qui sont l'attribut de protocole CAN ID 29/11 bit et CAN Baud Rate 500 kbps/250kbps. Peut-être, le problème est lié à ceux-ci tels qu'il n'y a pas de jeu de communication approprié.
Une autre question -> Existe-t-il un moyen de définir un protocole (comme ISO 15765-4) en communication série?
Le? Les caractères sont produits par Encoding.ASCII en essayant de convertir un non-sens en un vrai caractère ASCII et abandonnant l'espoir parce que les données contiennent des valeurs> 127. Aucun périphérique de port série n'utilise jamais son numéro de produit comme vitesse de transmission. –
Désolé, j'ai modifié le débit en bauds tel qu'il apparaît sur le code. Je pense que l'erreur est due à l'interprétation des données reçues – Splendor
CAN n'utilise pas ASCII, ce n'est pas un protocole de texte. Donc, n'utilisez pas les méthodes SerialPort qui retournent une chaîne, utilisez Read() à la place. –