lbch1974
Messages postés7Date d'inscriptionmardi 9 septembre 2003StatutMembreDernière intervention26 janvier 2006
-
26 janv. 2006 à 11:02
perathoner
Messages postés90Date d'inscriptiondimanche 5 novembre 2000StatutMembreDernière intervention26 juillet 2006
-
26 janv. 2006 à 17:19
Salut
Merci d'avance pour vos aides. J'est réalisé un programme en visual basic 6.0 qui reçoit les données a travers le com1 et le com2 pour cela j'est travaillé avec la procédure d'évenement OnComm() du contrôle OnComm qui ce déclanche automatiquement des que le port série (Com1 ou Com2) reçoit des données. a l'intérieur de cette procédure j'est utilisé le syntaxe suivant :
Do
DoEvents
tampon_ptb220 = tampon_ptb220 & mscPTB220.Input
Loop Until InStr(tampon_ptb220, Chr$(13) & Chr$(10))
A l'execution du programme et aprés quelque minute il envoi le message d'erreur suivant "Erreur d'execution 28 espace de pile insuffisant"
et quand je fait le débogage il me signale que l'erreur et au niveau du syntaxe DoEvents . Sachant que lorsque je met DoEvents en commentaire le SE se plante.
Merci
perathoner
Messages postés90Date d'inscriptiondimanche 5 novembre 2000StatutMembreDernière intervention26 juillet 2006 26 janv. 2006 à 11:23
Hello.
Elle est de quel type ta variable tampon_ptb220 ???
Pourquoi ne met tu pas un tableau d'octets à la place ??? (ex : Dim toto() as Byte)
J'imagine que t'es données reçu sur des COM1 et COM2 ont un
protocole... ex protocole Modbus... donc t'es données sont
encapsulées... suivant une trame que toi tu décode par la suite..pour
que t'es données ais un sens. Donc en fonction de ton protocol tu
devrais faire n tableau d'octets ou d'autres chose !!! je ne connais
pas ton projet... à toi de voir..
lbch1974
Messages postés7Date d'inscriptionmardi 9 septembre 2003StatutMembreDernière intervention26 janvier 2006 26 janv. 2006 à 11:49
Merci
Mon variable tampon_ptb220 est de type string sachant qu' a l'execution du programme il ya récéption des données et le programme le traite et l'affiche dans un TextBox . Mais le message d'erreur se manifeste aprés quelque minute
Vous n’avez pas trouvé la réponse que vous recherchez ?
acecel
Messages postés140Date d'inscriptionjeudi 6 mai 2004StatutMembreDernière intervention14 octobre 2006 26 janv. 2006 à 12:06
Oui car la condition pour sortir de la boucle n'est jamais vérifiée, donc ta variable Tampon se remplit jusqu'à saturation.
De plus ta boucle fait appel sans cesse à la fonction .input de ta variable mscPTB220, et ce de manière asynchrone, c'est à dire qu'il n'attends pas que l'execution de cette fonction soit finie avant de continuer la procédure, et donc il l'appelle sans cesse, jusqu'à ce qu'il y ait trop d'appels dans la pile mémoire, et là ca plante.
perathoner
Messages postés90Date d'inscriptiondimanche 5 novembre 2000StatutMembreDernière intervention26 juillet 2006 26 janv. 2006 à 12:18
Re.
L'idée à mon sens, s'est qu'il faudrait que tu détermine une procédure
pour déterminer quand dois tu lire ton buffer de réception, et quand ne
dois tu pas lire.
ex : On part du principe que ton buufer de réception est vide.
Quand tu vois qu'il y a des données qui
viennent d'arriver, tu ne fais rien et tu attend qu'il n'y ai plus de
mouvement pour aller les lire.
Là tu regarde le nombre d'octets que tu
as reçu. En fonction de ce nombre tu dimmensionne un tableau d'octets.
Dans lequel tu stocke ta trame.
lbch1974
Messages postés7Date d'inscriptionmardi 9 septembre 2003StatutMembreDernière intervention26 janvier 2006 26 janv. 2006 à 12:30
Merci Monsieur perathoner mais je vous signale que la boucle ne s'execute pas à l'infini car sinom le prgramme ne va pas afficher la valeur suivante qui est différente de la valeur précédente.
econs
Messages postés4030Date d'inscriptionmardi 13 mai 2003StatutModérateurDernière intervention23 décembre 200823 26 janv. 2006 à 13:18
"Et pourtant elle tourne" ... à l'infini
DoEvents n'a jamais fait planter quoi que ce soit. Ton message d'erreur provient bien de la pile. acecel t'a mis sur la voie dans un précédent message.
Manu -------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
acecel
Messages postés140Date d'inscriptionjeudi 6 mai 2004StatutMembreDernière intervention14 octobre 2006 26 janv. 2006 à 13:42
Au lieu d'utiliser une boucle, essaye plutôt d'utiliser un timer, en définissant un intervalle qui s'accorde bien avec la vitesse de réception des données sur ton port COM.
Dès que le programme ne recoit plus de donnée, affiche la variable Tampon à l'ecran, et réinitialise là.
Car à mon avis, la boucle est "trop rapide" pour recupérer les informations sur le port COM, lui n'arrive plus à suivre, la pile mémoire se sature, et donc ca plante.
acecel
Messages postés140Date d'inscriptionjeudi 6 mai 2004StatutMembreDernière intervention14 octobre 2006 26 janv. 2006 à 15:34
Si tu t'est contenté de mettre On Error Resume Next, alors tu n'as pas corrigé l'erreur, la seule différence c'est qu'elle n'apparait plus
(Dans ce cas essaye d'utiliser une des solutions proposées ici pour vraimment corriger le problème)
Sinon alors je n'ai rien dit