yakowalx
Messages postés2Date d'inscriptionjeudi 4 février 2010StatutMembreDernière intervention 6 juin 2010
-
5 juin 2010 à 15:50
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
6 juin 2010 à 04:24
salut à tous, je suis entrain de faire une communication série avec une carte d'interface à base de PIC16F877, l'application d'une manière général, sert à la lecture d'une gamme de vitesses d'un moteur. j'ai appliqué un traitement, et il m'a donnée des valeurs exactes,mais le problème, ce qu'après un certain temps un message d'erreur m'apparait "ERREUR 28" et il m'indique que l'espace de pile est insuffisant.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Case comEvReceive ' Si on reçoit des données
Do
DoEvents
tampon = tampon & MSComm1.Input
Loop Until InStr(tampon, "ok" & vbclrf)
Timer3.Interval = 1
Timer3.Enabled = True
Call traitement
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
sub traitement()
Dim c As Single
Dim c1 As Single
k1 = k1 + 1
Debug.Print k1
tampon = Left$(Trim(tampon), 3)
Text5.Text = tampon
TEMPO(k1) = Button 'noter le temps de l'arrivé de l'octet,button 'est compteur qui s'incrément à dans sub_timer à chaque milliseconde
c = Val(tampon)
data(k1) = c 'remplissage d'un tableau par les données reçues
c1 = Val(Button)
''Remplissage d'une Msflexgrid
MSFG4.TextMatrix(k1, 0) = data(k1)
MSFG4.TextMatrix(k1, 1) = TEMPO(k1)
tampon=""
end sub
et merci d'avance,vraimment j'attend une réponse parce que j'arrive pas à manipuler cet erreur
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 5 juin 2010 à 19:07
Salut
Comme on peut le lire dans la doc de ce composant, tu peux régler (InBufferSize) la taille du buffer : Quel est ton réglage ?
De même, un réglage (InputLen) permet de définitir le nombre d'octets (caractères) lus à chaque instruction Input : Quel est ton réglage ?
Selon les réglages, certaines de tes instructions sont utiles ou pas.
Si le InputLen est à zéro (totalité du buffer donc), une boucle de lecture n'a pas d'intérêt.
Je vois que tu manipules des Timers : Ont-ils un lien avec le rythme des lectures ?
Si oui, ce n'est pas utile : Le MsComm déclenche lui même un évènement lorsque le buffer renferme autant ou plus de caractères que le réglage InputLen : Donc rien ne sert de le lire régulièrement.
Dans ta Sub 'traitement', une des premières instructions ne garde dans ta variable que les 3 premiers caractères : Tu as donc des risques de perdre des données.
TEMPO(k1) = Button
Très mauvaise idée de nommer une variable comme un mot réservé du langage : ça plantera un jour.
Si cette variable Button représente une date ou la valeur d'un Timer, appelle là proprement, ValeurTimer par exemple ou TopReception
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
yakowalx
Messages postés2Date d'inscriptionjeudi 4 février 2010StatutMembreDernière intervention 6 juin 2010 6 juin 2010 à 03:19
Merci monsieur, pour vos remarques, j'ai déja manipuler mon programme avec vos notices, ce qui est bien que l'erreur '28' disparait. j'ai eliminé la boucle (do doevents...loop).
mais,je constaté que l'arrivé de données ça se passe trés vite, de telle façon que la procédure de traitement ne s'achéve pas (cette procédure contient un taraçage en temps réel des données acquises et le stockage des ces données )
pour le réglage
- j'ai fixé inputlen à 4 parce j'ai des données 4 caractéres.
- pour le inbuffersize je laisse la valeur par défaut
- les paramétres de transmission "9600,n,8,1"
- pour le Timer j'ai déja l'utilisé pour lire le temps de l'arrivé de l'octet. pour faire le traçage de vitesses acquises en fonction de temps
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 6 juin 2010 à 04:24
"ça se passe trés vite"
Oui, à 9600 Bauds, les données vont vite, c'est clair.
L'erreur 28 peut survenir lorsque le programme 'empile' des tâches : tu relances une fonction alors que la précédente n'est toujours pas terminée. Au bout d'un moment, ça sature, oui.
On n'a pas ton application sous les yeux. On ne sait pas comment tu arrives dans les lignes que tu nous as collées.
Il ne faut pas boucler à l'intérieur de l'évènement de réception : pas de Do-Loop.
Si, dans les données que tu viens de recevoir, il n'y a pas de "ok", ce n'est pas grave : tu laisses les données dans ta variable "tampon" et tu ressorts de la Sub. L'évènement de réception se déclenchera à nouveau quand d'autres données arriveront : tu referas ton test à ce moment là.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)