Comment envoyer un 0x00 ou caractere NULL sur port com

Signaler
Messages postés
4
Date d'inscription
mardi 11 octobre 2011
Statut
Membre
Dernière intervention
25 octobre 2011
-
Messages postés
4
Date d'inscription
mardi 11 octobre 2011
Statut
Membre
Dernière intervention
25 octobre 2011
-
Tout d'abord, merci à toi/vous de te pencher sur mon pb ou deja d'en prendre connaissance.
Je souhaite piloter un equipement electronique via port com. Pour cela j'utilise QT (souci d'apli multi plateforme et s'est aussi l'occasion de s'y mettre) j'ai tester differentes librairy dont qextserialport et qserialdevice Mon probleme : le protocole de communication est du modbus, cela implique que je dois envoyer different octet dont....0x00 et la ca se corse car toute ces lib utilisent le write ou writedata de Qiodevice qui envoy une chaine de char jusqu'a ce qu'il tombe sur le caractere de fin de chaine /o soit mon 0x00.
Apres plusieur recherche sur l'ami google et consor je m'en remet à vous car aussi bizard que cela puisse paraitre, je ne trouve aucune reponse à ma question: Comment lui faire comprendre que 0x00 n'est pas le caratere de fin de chaine, mais qu'il fait parti des data à transmettre???

4 réponses

Messages postés
305
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
18 janvier 2012

Déjà, au moins une des libs que tu cites est opensource (c'est un mot magique ça) donc absolument rien (sauf l'ignorance du C) ne peut t'empêcher de faire un fork de la fonction qui ignorera les 0x0 et se basera sur un argument "size".
Sendto(chararray);//originale
Sendto(chararray, size);//fork
//attention ! risque de buffer overflow !

Pour revenir aux libs, je crois que libserial est beaucoup plus bas niveau et possède des options très précises.
Les libs que tu utilisent ont l'air assez génériques et ça va très bien quand on fait la même chose que les autre...
Messages postés
4
Date d'inscription
mardi 11 octobre 2011
Statut
Membre
Dernière intervention
25 octobre 2011

Oui tout a fait il est possible de la modifier, cependant ces lib semblent tellement incontournable sur QT pour attaquer un port com que je pensai que l'erreur c'etais moi lol car difficile pour moi (electronicien) de penser que ces lib puissent se refuser de balancer le char ou meme plutot le unsigned char que l'on veut. Je vais tester libserial, sinon je ferai mon propre clone.
Je posterai la solution car je pense ne pas etre le seule à vouloir piloter des cartes electroniques.
Messages postés
305
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
18 janvier 2012

Oki mais je penses à autre chose en relisant le thread : Si tu veux envoyer 0x0, ne peux-tu pas tout simplement réinitialiser le port ? Car 0x0 équivaut bien à un port inerte (éteint) non?
Messages postés
4
Date d'inscription
mardi 11 octobre 2011
Statut
Membre
Dernière intervention
25 octobre 2011

Je ne suis pas certain que le 0x00 soit garanti lors de l'initialisation ou la phase d'init. On s'en aperçoit d'ailleurs lors du retournement de bus, si une phase de stabilisation n'est pas observé coté réception, un caractère aléatoire peut être reçu. D'ailleurs c'est souvent un 0xFF mais cela dépend le plus souvent des drivers (hard). Mais je suis plus alaise sur mes hards fait maison que sur un PC? Mais ça viendra.
Concernant libserial, j'y ai jeté un petit coup d'oeil mais elle est destinée à linux hors petite précision qui a son importance, je travaille sous Qt/win 7.