le 07-29-2016 04:54 AM
Bonjour,
Merci pour ta réponse, Je t'explique..
Le but: Communiquer avec un banc qui date des années 1999.
Je n'ai aucun documents j'ai du tout comprendre et chercher seule.
Le code de base est en code entierement en C/C++ mais il est completement beuggé..
Du coup j'ai du lancer le code beuggé et espionner la trame (car des fois cela marche). J'ai donc récuperer une trame comme celle que je viens de t'envoyer avec les caractéristiques données (nbre cycle, etc..).
Cependant en appelant le constructeur du controleur j'ai pu avoir un semblant de VI ! Celui de la traduction RS232 (celui ou tu m'as dit que le code était brouillon ahah). Bref j'ai repris ce code (en faisant deux trois modifs quand meme moins lourdes que celui de base). et ca a marché j'ai retourvé les bonnes trames.
Le probleme ne vient donc pas de la mais du fait que j'envoie bien 4 trames au lieux d'une seule au controleur.
Et le choux blanc ... j'ai fait une machine d'états (celle que je t'ai envoyé, rien n'y fait..), j'ai fait une structure séquence déroulé rien n'y fait ...
Je n'ai plus trop d'idées...
En gros ce que j'ai pu analyser de la trame, c'est:
if (ParamLen == 2) {
ParamWrite[0] = 0x7;
/* rs485=0 pour essai*/
ParamWrite[1] = 0;
ParamWrite[2] = 0x2;
ParamWrite[3] = address & 0xff;
ParamWrite[4] = (address & (int)0xff00) / 0x100;
ParamWrite[5] = (int)(value & 0xffL);
ParamWrite[6] = (int)((value & 0xffffff00L) / 0x100L);
sumcheck = 0;
i = 0;
while (i <= 6) {
sumcheck += ParamWrite[i];
i++;
}
ParamWrite[7] = sumcheck & 0xff;
}
else {
ParamWrite[0] = 0x9;
/*RS485=0 pour essai*/
ParamWrite[1] = 0;
ParamWrite[2] = 0x2;
ParamWrite[3] = address & 0xff;
ParamWrite[4] = (address & (int)0xff00) / 0x100;
ParamWrite[5] = (int)(value & 0xffL);
ParamWrite[6] = (int)((value & 0xffffff00L) / 0x100L);
ParamWrite[7] = (int)((value & 0xff0000L) / 0x10000L);
ParamWrite[8] = (int)((value & 0xff000000L) / 0x1000000L);
sumcheck = 0;
i = 0;
while (i <= 😎 {
sumcheck += ParamWrite[i];
i++;
}
ParamWrite[9] = sumcheck & 0xff;
}
ce que j'ai essaye de traduire en LabVIEW...
le 07-29-2016 05:38 AM
Bon,
J'ai remis un peu d'ordre dans ton main, avec une remarque critique à prendre en compte (cf commentaire dans le code).
Sinon j'ai revu ta mise en forme de trame, et d'après le code C fourni, pour moi la traduction en labview correspond au code en pièce jointe, par contre, les trames exemples fournis ne respecte pas toute cette règle c'est bizarre.
07-29-2016 05:42 AM - modifié 07-29-2016 05:48 AM
Mouarf,je viens de trouver 😄
Par réflexion, je considérais ton sous vi comme une FGV, et donc boucle while en unitaire.
Or là tu as mis un critère de répétition de ta boucle, qui comme de pas hasard, renvoit la trame jusqu'à 4 fois en cas de non réponse de ton produit.
Ton problème vient de là, tu as un souci dans ta condition d'arrêt de la boucle.
Met une constate true directement sur le terminal d'arrêt de la boucle while, et tu auras bien le bon nombre de trame envoyé au produit.
FAit le test avec ce sous-vi.
le 07-29-2016 07:23 AM
Effectivement cela me parait être une bonne suggestion ! 😉
Je vais au banc tester cela dessuite et je te tiens au courant !
Si je reviens pas d'ici deux heures c'est qu'il m'a explosé dessus 😛
ahah
Mais merci !! je reviens
le 07-29-2016 09:49 AM
Bon le banc n'a pas explosé mais c'est pas gagné !
C'est bon j'ai une seule trame qui s'affiche à l'oscilloscope par contre il faut que je modifie le code car j'ai pas du tout les bonnes trames ! 😕
Je refais le code lundi et je te tiens au courant !
merci beaucoup et bon weekend 🙂
le 08-02-2016 09:24 AM
bonjour !
ALors voila !
J'ai modifier le code, avec te conseils et un peu de calculs savnts pour avoir les bonnes trames et .... *suspens*
Ca marche !! 🙂
Je mets le code en PJ pour ceux que ca interessent.
Et merci encore Michael pour ton aide ! 🙂
Bonne semaine 🙂
le 08-19-2016 03:30 AM
Cool.
Félicitation, bon courage pour la suite.