harryweb77
Messages postés6Date d'inscriptionvendredi 25 novembre 2011StatutMembreDernière intervention28 novembre 2011
-
28 nov. 2011 à 09:11
harryweb77
Messages postés6Date d'inscriptionvendredi 25 novembre 2011StatutMembreDernière intervention28 novembre 2011
-
28 nov. 2011 à 17:50
Bonjour,
Je suis complètement débutant. J'ai réussi à modifier un petit terminal série (RS232) que j'ai récupéré sur la toile en y ajoutant mes éléments.
Toutefois je suis ennuyé pour extraire des caractères d'une chaine. J'utilise ceci pour la "non extraction":
Private Sub ReceivedText(ByVal [text] As String)
'compares the ID of the creating Thread to the ID of the calling Thread
If Me.rtbReceived.InvokeRequired Then
Dim x As New SetTextCallback(AddressOf ReceivedText)
Me.Invoke(x, New Object() {(text)})
Else
Me.rtbReceived.Text &= [text]
End If
If text = "RDL*" Then
btnRFOFF.Enabled = True
btnSend.Enabled = True
btnRFON.Enabled = False
Me.txtAction.Text = "Couper la RF puis RF OFF"
End If
If text = "RDH*" Then
btnRFOFF.Enabled = False
btnRFON.Enabled = True
Me.txtAction.Text = "Mettre la RF puis RF ON"
End If
If text = "COK*" Then
Me.txtAction.Text = "Calibration Terminée"
btnRFOFF.Enabled = False
btnRFON.Enabled = False
End If
End Sub
Comme vous le voyez, j'ai réussi à faire réagir le programme si je reçois dans text RDL* ou RDH* ou encore COK*
Par contre je peux recevoir d'autres choses comme: ATT123456* et je désirerais afficher 123456 seulement. C'est à dire que je voudrais extraire cette valeur en chaine et peut-être aussi en valeur numérique.(ce pourrait être un plus si je désire ultérieurement effectuer des opérations)
Mes réceptions sur le port série se terminent toujours par "*" par contre la longueur de la valeur que je reçois (123456) peut être sur 3 à 6 caractères.
Ces données sont envoyées par un µControleur PIC que je programme en basic, mais je débute avec VB.net
Merci de votre aide, liens où pistes pour ma solution
Amicalement
A voir également:
Extraire données d'une chaine de caractères avant de l'afficher
Re:
Si tu programmes des µC, tu verras vb.net c'est rien à coté, c'est juste une habitude.
Merci pour melabs PICBASIC PRO je vais chercher un peu, moi j'avais un vieux truc (Basic11) qui était un peu limité.
Et je suis sous la pluie de Goyave
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 28 nov. 2011 à 09:41
Boinjour,
je pense que tu ne devrais rencontrer aucune difficulté à transposer pour VB.Net ce petit bout de code/exemple :
toto = "ATT123456*"
titi = StrReverse(Val(StrReverse(Left(toto, Len(toto) - 1))))
MsgBox titi
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
harryweb77
Messages postés6Date d'inscriptionvendredi 25 novembre 2011StatutMembreDernière intervention28 novembre 2011 28 nov. 2011 à 10:26
Bonjour ucfoutu
Merci pour ton exemple mais je dois peut-être déjà m'assurer que c'est bien "ATT" les 3 premiers bytes reçus, car il peut y avoir d'autres messages encore... du genre VLO123456*
Sur mon PIC j'écrirais un truc du genre:
IF bytesIn[0] = 65 and BytesIn[1] = 84 and BytesIn[2] = 84 THEN ' (ATT)
je prends les caractères suivants jusqu'à "*"
éventuellement je passe de l'ascii au numérique en retirant 48
et j'envoie sur mon afficheur.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 28 nov. 2011 à 11:09
Que les premiers caractères soient "ATT", "trucmachin" ou autres, mon code traitre toute chaine se terminant par un "*" (ou tout autre caractère, pourvu qu'il n'y en ait qu'un) !
Ainsi, il retirerait (par exemple) "879" de toute chaine commençant par ce que tu veux et se terminant par un caractère à ne pas prendre en compte !
Exemple, donc "gkgjhhlljkl879m" retournerait "879"
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Vous n’avez pas trouvé la réponse que vous recherchez ?
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 28 nov. 2011 à 11:12
Mais si tu veux dire qu'en plus cela doit commencer par "ATT" suivoi d'un chiffre, rien de plus simple ! ===>> une expression conditionnelle :
If ta_chaine like "ATT#" then
'le traitement montré
end if
Quiel est le problème ? Je n'en vois pas.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
harryweb77
Messages postés6Date d'inscriptionvendredi 25 novembre 2011StatutMembreDernière intervention28 novembre 2011 28 nov. 2011 à 12:18
Ok, j'essaye d'expliquer mieux...
Ton code me convient pour extraire la chaine 123456.
Maintenant comment mon programme peut se rendre compte que les 3 premiers caractères sont ATT ou autres ?
Car tu me donnes:
[i]If ta_chaine like "ATT#" then
'le traitement montré
end if /i
Ce qui suivra ATT, c'est une suite de chiffres selon une valeur au départ inconnue
Ce que je cherche à faire c'est:
1) Je vérifie si mes 3 premiers caractères sont bien ATT
2) Si oui je prélève les chiffres (avec ta formule et le -1 cela doit coller)
3) J'affiche ces chiffres
J'ai utilisé ton dernier exemple de code en l'inserant à la suite de ce qui marche déjà, chez moi, juste pour voir s'il discernait ATT,(avant d'extraire le reste) comme ceci:
[i] If text Like "ATT#" Then
Me.txtAction.Text = "reçu"
'le traitement montré
End If/i
Et j'ai envoyé ATT123456* ou ATT ou encore ATT# sans qu'il ne m'affiche "reçu". Aucune réaction en fait.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 28 nov. 2011 à 12:38
Ouais.
Je vois que tu as "tout compris"... et ... te laisse planté maintenant là (à d'autres d'essayer de t'éveiller)
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
harryweb77
Messages postés6Date d'inscriptionvendredi 25 novembre 2011StatutMembreDernière intervention28 novembre 2011 28 nov. 2011 à 13:44
Salut les gars,
@ShayW: Oui c'est théoriquement 3 caractères ascii (en majuscule) puis la valeur que mon pic envoie.
Je dis théoriquement car c'est une transmission série classique mais par RF et il peut y avoir des parasites... Alors on reçoit.. n'importe quoi... Alors j'envoie la trame 3 fois pour assurer un peu, puis je fais des accusés de RX.
@Acive: Je vais essayer une approche avec ton bout de code en l'adaptant... J'espère y arriver enfin. Le pic, pour cette application est un 18F14K22 avec lequel j'utilise l'USART hardware, mais la trans par RF (avec des modules bon marché OOK - AM) ne se laisse pas toujours faire ;-)
Sinon j'utilise un grand nombre de pics différents... jusqu'au 18F8520
avec PBP PRO 2.60
harryweb77
Messages postés6Date d'inscriptionvendredi 25 novembre 2011StatutMembreDernière intervention28 novembre 2011 28 nov. 2011 à 14:59
@Acive: Oui, il existe plusieurs compilateurs basic (mikro basic, Proton, Et melabs PICBASIC PRO (celui que j'utilise depuis 10 ans car il a un forum débordant d'astuces)) Mais j'avoue que programmer les µC n'a rien à voir avec vb.net, d'où mes errances... ).... Que je serais heureux sous la pluie de Deshaie
@ShayW: OK, merci pour cet exemple... Je bosse un peu sur tout ce qu'on m'a donné, tout en apprenant vb.net
Je vais bien y arriver, à tourner ça comme il faut pour mon application.
Sinon, je reviendrais en
Je me donne un peu de temps pour expérimenter.