Ce sujet est résolu.
12 | |||||||
Auteur | Messages | ||||||
---|---|---|---|---|---|---|---|
Gamux | #16 Posté le 23/5/2012 à 18:15:59 | ||||||
Bonsoir Sicard, avant de lire un flux continu je pense qu'il vaudrait mieux, pour commencer, lire une donnée unique transmise par la balance. Non ? Si cela fonctionne alors tu pourras essayer d'adapter le code pour une lecture en continu. Je ne sais pas si le code ci-dessous fonctionne car je n'ai pas de balance, mais je pense que l'esprit est là. Teste le et fais nous ton rapport Public Sub Form_Open() Init_sport() End Public Sub Button2_Click() Try Sport.Close() Quit End Public Sub Init_sport() If Sport.Status = Net.Active Then Close Sport Sport.PortName = "/dev/ttyS0" Sport.Speed = "9600" Sport.Parity = 0 Sport.DataBits = 8 Sport.StopBits = 1 Sport.FlowControl = 0 Sport.Open() End Public Sub Button1_Click() Poids() Wait 0.05 SPort_Read() End Public Sub SPort_Read() Dim Poids As String Poids = Read #SPort, Lof(Sport) Try TextBox1.Text = Poids End Public Sub Poids() Print #Sport, "P"; Chr$(13); Chr$(10) End | |||||||
siscard06 | #17 Posté le 24/5/2012 à 15:20:10 | ||||||
Bonjour Gamux "Je ne sais pas si le code ci-dessous fonctionne" Désolé, ton code ne fonctionne pas. Bon le problème n'est pas là et tu as mal lu mon dernier post puisque j'ai maintenant quelque chose qui s'affiche dans la Textbox et qui provient bien de la balance, mais il me manque les 14 premiers caractères, ceux dont j'ai besoin. Or, dans le modèle ils y sont bien, mais c'est un TexArea lequel s'allonge à chaque nouvelle valeur. Est-ce qu'il ne faudrait pas utiliser ReadLine ou quelque chose comme ça ? Si quelqu'un à une idée, je suis preneur, merci Avant de se lancer dans la traversée du désert, faut d'abord apprendre à marcher, non ? Si tu veux rendre un homme heureux un jour, donnes lui à manger Si tu veux le rendre heureux toute sa vie, apprends lui à pêcher | |||||||
siscard06 | #18 Posté le 25/5/2012 à 17:40:08 | ||||||
Bonjour, C'est pas encore résolu, mais on avance. Si je remplace ma textbox par une Textarea en lui indiquant TextArea1.Text = TextArea1.Text & Poids, j'obtiens bien l'affichage complet des valeurs reçues au fur et à mesure que je modifie les objets sur la balance, COMME SUR LE MODELE; mais ça s'accumule, et je voudrai avoir seulement la dernière ligne. et si je mets TextArea1.Text = Poids, j'ai plus rien que ce N(et), la balance étant toujours réglée avec une tare. Si je remplace la Textarea ci-dessus par un TextLabel avec la valeur : TextLabe1 = "Poids = " & Poids: résultat pareil que pour Textbox mais j'ai eu le temps d'apercevoir ma variable Poids complète : 1.234 kg N, le temps d'un flash, mais il ne me reste que Poids = N... Donc ma donnée attendue arrive. Si je paramètre la balance pour un envoi continu, j'ai un affichage scintillant très désagréable même si j'augmente la vitesse à 19200 bds. Il faut donc trouver le moyen de stabiliser la valeur de la variable Poids jusqu'à l'arrivée d'une nouvelle valeur (+- grande) Quelqu'un pourrait-il me donner une idée en ce début de long WE ? Si tu veux rendre un homme heureux un jour, donnes lui à manger Si tu veux le rendre heureux toute sa vie, apprends lui à pêcher | |||||||
gambix | #19 Posté le 26/5/2012 à 00:06:40 | ||||||
Faire simple ! | tu stock la valeur dans une variable ... pardi...
Moins de texte dans une signature c'est agrandir son espace. | ||||||
gambix | #20 Posté le 26/5/2012 à 00:10:04 | ||||||
Faire simple ! |
la je teste aussi la présence de kg Moins de texte dans une signature c'est agrandir son espace. | ||||||
siscard06 | #21 Posté le 27/5/2012 à 17:28:52 | ||||||
Merci Gambix, Je pensai moi aussi à une astuce de ce genre, mais je ne savais pas trop comment m'y prendre. Bon j'essaie rigoureusement ta méthode, mais je tombe sur un hic : ENDIF Without IF dans Fmain class 18; et s'arrête Si j'efface la ligne 18, le programme s'éxécute, mais se bloque après l'affichage de la première valeur. Pour l'arrêter, il faut le forcer à quitter. Alors je ne comprends plus du tout ! Le code : ' Gambas class file Public Poids As String Public Mavar As String Public Sub Button2_Click() SPort.Open() TextBox1.Text = " Salut ! " 'c'est pas indispensable , mais c'est +sympa End Public Sub SPort_Read() Poids = Read #SPort, Lof(SPort) If Mavar <> Poids Then MaVar = Poids TextBox1.Text = Format(MaVar, "0.000 kg") Endif End Public Sub Button1_Click() TextBox1.Text = " Bye ... " 'c'est pas indispensable , mais c'est +sympa Wait 1 SPort.Close() FMain.Close() End Détail aussi qui me chagrine, la valeur affichée est arrondie à la dizaine de grammes inférieure : 0.470 kg au lieu de 0.478 kg En ce WE prolongé, j'espère que vous profitez tous bien de la campagne Moi qui y vit toute l'année, je n'ai pas besoin d'y aller. Si tu veux rendre un homme heureux un jour, donnes lui à manger Si tu veux le rendre heureux toute sa vie, apprends lui à pêcher | |||||||
gambix | #22 Posté le 27/5/2012 à 22:44:00 | ||||||
Faire simple ! |
si la longueur de la valeur change (parfois diférente de 5 car), tu doit parser la valeur genre:
ou
Moins de texte dans une signature c'est agrandir son espace. | ||||||
gambix | #23 Posté le 27/5/2012 à 22:45:01 | ||||||
Faire simple ! | Ha et j'habite en campagne aussi, mieux ... je suis la campagne Moins de texte dans une signature c'est agrandir son espace. | ||||||
siscard06 | #24 Posté le 28/5/2012 à 14:35:39 | ||||||
Super, sauf que la mienne est en train de devenir une ville ! Beuerk !, mais on lutte pour que le projet de PLU soit revu à la baisse côté béton (http://lesperdigones.over-blog.com/). Revenons à nos moutons. ou plutôt notre balance (qui d'ailleurs pourrait être n'importe quoi d'autre, Un GPS, une station météo...) - OK, j'avais déja essayé, je commence à comprendre les manipulations sur les chaines de caractères, mais c'est pas bon. - Si je remplace la TextBox par une TextArea, tout va bien si j'ajoute le contenu au TextArea précédent, comme dans l'exemple. si j'enlève le texte précédent, la ça ne marche plus - Si je mets un LabelBox au lieu d'un TextBox, c'est pareil. La notice de l'appareil dit : format de sortie = 9 caractères pour le poids dont polarité 1 (- si négatif en cas de pesée avec tare), poids 7, point décimal flottant 1; puis espace 1, unité (kg, gr, lb ou oz)3, stabilité 1, légende (Gross, Net, Tare) 1, CR (CHR$(13), LF (CHR$10). Le poids est envoyé aligné à droite sans zéro. On a une marque de fin de fichier par CR LF, mais pas de repère pour le début. La chaine peut donc faire au maximum 17 caractères, mais elle peut être moins longue; il faudrait donc plutôt partir de la droite pour extraire la valeur à afficher et peut être aussi la transformer en valeur numérique (pour calculer le prix à payer par le client par exemple), auquel cas on pourrait l'afficher dans un ValueBox, mais c'est pour l'étape suivante. Pour le moment, je voudrai juste afficher ce qui arrive de ce p... de SerialPort ! Y a un autre blème, c'est le endif, si je le mets pas, il plante à l'éxécution, si je le mets, il en veut pas et le débogage s'arrête la-dessus. Etonnant, non ? Avec Gambas, c'est facile, qu'il disait... Mais je suis têtu, on va y arriver Donc si quelqu'un veut bien apporter encore un peu de lumière... Merci Si tu veux rendre un homme heureux un jour, donnes lui à manger Si tu veux le rendre heureux toute sa vie, apprends lui à pêcher | |||||||
siscard06 | #25 Posté le 28/5/2012 à 18:26:51 | ||||||
Lorsque j'écris : Poids = Read #SPort, Lof(SPort), ma variable Poids prend la valeur de Read #.... et la garde jusqu'à ce que Read # lui en donne une autre, non ? Mais est-ce que SPort ne devient pas nul en attendant de recevoir une nouvelle valeur ? Et c'est bien ce qui se passe lorsque je paramètre un envoi en continu, mais le rythme des envois n'est pas assez rapide pour avoir un affichage qui semble fixe. Si je rajoute un wait 1 après TextBox1.Text = Poids, ça y est j'ai un affichage presque correct ,mais il se fait en 2 temps d'abord la moitié puis l'autre moitié par dessus comme si j'avais d'abord Text puis Box sans avoir jamais le mot TextBox en entier reste plus qu'à trouver comment transformer la chaine pour que ce soit comme je veux. Bon, demain je vais au marché, mais je n'ai pas encore besoin de la balance. Si tu veux rendre un homme heureux un jour, donnes lui à manger Si tu veux le rendre heureux toute sa vie, apprends lui à pêcher | |||||||
gambix | #26 Posté le 28/5/2012 à 22:46:46 | ||||||
Faire simple ! | pour ton endifabout:home c'est que tu doit mettre un retour a la ligne après le then !!! la structure if cond then work else work2 endif ou if cond then work dans mon cas il y a deux action donc je doit utiliser la première forme if cond then work1 work2 endif Moins de texte dans une signature c'est agrandir son espace. | ||||||
gambix | #27 Posté le 28/5/2012 à 22:47:17 | ||||||
Faire simple ! | gambas est simple ... ton problème serait le même avec tout les langages Moins de texte dans une signature c'est agrandir son espace. | ||||||
siscard06 | #28 Posté le 29/5/2012 à 05:52:16 | ||||||
Avec Gambas, c'est facile, qu'il disait... It was only a joke sur le ton si c'est ça la vie de chateau... Alors Gambas est très simple, fallait juste savoir, mais c'est pas écrit. Si il y a de la place quelque part, je veux bien faire des petits tuto vidéo ou capture d'écran, au fur et à mesure de mes progrès pour les plus nuls que moi parce que la doc n'est pas très explicite pour les néos. Longue vie à la crevette joyeuse. Si tu veux rendre un homme heureux un jour, donnes lui à manger Si tu veux le rendre heureux toute sa vie, apprends lui à pêcher | |||||||
siscard06 | #29 Posté le 5/6/2012 à 06:08:09 | ||||||
Bon, j'ai trouvé l'erreur Elle provient probablement de l'emetteur (la balance). Dans le texte à afficher, il y a un caractère non affichable (CHR$(0) qui veut dire "nul") en trop à la 9° position. Il suffit de faire une petite fonction genre Trim pour l'éliminer (Trim ne fonctionne que sur les extrémités): -Tester si code Ascii de 1° caractère > 32 si oui, l'insérer dans une nouvelle chaine sinon poubelle suivant jusqu'à 18 Ca devrait pas être trop dur, et je commence à bien connaitre la doc En cas de Pb, je fais un nouveau sujet sur l'élimination des indésirables En tous cas, grand merci à ceux qui m'ont aidé. Si tu veux rendre un homme heureux un jour, donnes lui à manger Si tu veux le rendre heureux toute sa vie, apprends lui à pêcher | |||||||
12 |