2016-06-23 1 views
1

J'utilise un champ CAN Raspberry Pi et Arduino qui utilise un MCP2515 et un SPI pour demander un seul PID OBD II.MCP2515 OBD II PID multiple

Je peux demander et recevoir un seul PID de mon émulateur OBD (Freematique). Je sais qu'il est possible de demander plusieurs PID (jusqu'à 6 PID) dans une même requête.

Chaque fois que j'utilise d'autres types de messages, je reçois uniquement la première requête. Quelqu'un peut-il aider?

Voici le message pour PID unique qui fonctionne (C++):

msg.id = 0x7DF; //ID_QUERY 
msg.header.rtr = 0; 
msg.header.length = 0x08; 
msg.data[0] = 0x02; 
msg.data[1] = 0x01; 
msg.data[2] = PID; //Whatever PID I want! 

Message pour la demande multiple qui ne fonctionne pas:

msg.id = 0x7DF; //ID_QUERY 
msg.header.rtr = 0; 
msg.header.length = 0x08; 
msg.data[0] = 0x07; //! Also it is not working with 0x08 
msg.data[1] = 0x01; 
msg.data[2] = PID0; 
msg.data[3] = PID1; 
msg.data[4] = PID2; 
msg.data[5] = PID3; 
msg.data[6] = PID4; 
msg.data[7] = PID5; 

Répondre

0

Envoi de messages canbus par MCP2515 est un peu Litle délicat. Tout d'abord, l'émulateur OBD de Freematics ne prend en charge aucune requête PID multiple. Deuxièmement, la requête PID multiple doit être envoyée avec le format ISO 15765. Lorsque vous envoyez une requête multiple, l'ECU ne répondra qu'avec un message "First Frame" et attendra le message "Flow Control" de l'expéditeur. Après avoir reçu le contrôle de flux, ECU continuera à envoyer les réponses en fonction de votre paramètre de contrôle de flux.

Pour plus d'informations sur les messages CAN-Bus et comment "First Frame" "Single Frame" fonctionne, lisez les liens ci-dessous: googleBooks, ISO_15765-2, hackaday (dot) com

1

Notre émulateur Freematics OBD II ne prend pas en charge l'envoi de réponses multiples . Un de nos véhicules d'essai, une Toyota Corolla 2010 fait. Dans notre expérience, il est préférable d'envoyer une commande de test au démarrage pour voir si le périphérique avec lequel nous communiquons prend en charge plusieurs réponses ou non. Pour notre application, nous envoyons la commande 00 deux fois,

010000 

Si la réponse à ses plus de 25 caractères, nous savons que le périphérique prend en charge plusieurs commandes comme il a répondu aux deux 00 commandes. Si la réponse est inférieure à 25 caractères, nous savons que l'appareil n'a répondu qu'à la première commande 00 et par conséquent ne prend en charge qu'une seule commande à la fois. vérifier combien de réponses ont été reçues pourrait être fait de plusieurs façons, mais la longueur a bien fonctionné pour nous jusqu'à présent.

Selon votre cas d'utilisation, il suffira peut-être d'envoyer uniquement des commandes uniques. Mais si vous avez vraiment besoin de la vitesse accrue de plusieurs commandes, ajoutez une vérification au démarrage pour voir si le périphérique répond à plusieurs commandes et ensuite construire vos messages en fonction des résultats. N'oubliez pas de terminer vos messages avec le nombre attendu de lignes de réponse pour augmenter encore la vitesse. Voir ci-joint tirée de: http://elmelectronics.com/DSheets/ELM327DS.pdf

enter image description here

+0

Est-ce que Freematics OBD II ne supporte pas même le VIN? Cela signifie que je peux seulement obtenir les trois premiers caractères de VIN à travers l'appareil de Freematics? Ai-je raison? – Mogi

+0

Notre Freemaps OBD II soutient le vin. Nous le récupérons en envoyant la commande "0902" ... Qu'entendez-vous par "les 3 premiers caractères du vin"? ... quelles commandes envoyez-vous et quelles valeurs obtenez-vous en retour? –

+0

considère que j'envoie et reçois des données via un code C++ avec SPI et MCP2515. Donc ce que j'envoie est 7DF comme en-tête et 02 09 02 comme trois octets. (Nombre d'octets de données, SID et PID). C'est d'accord. Je reçois 8 octets avec en-tête 7E8 avec 8 octets de 10 14 49 02 01 57 50 4F.Le problème est quand j'envoie le contrôle de flux de 7DF 30 00 00 00 00 00 00 00 je n'obtiens plus de réponse de l'ECU pour les quatorze autres octets. – Mogi