|
Echange avec un boitier FT231X USB UART sur un port com |
Débuté par Arnaud PIERRON, 26 juil. 2017 11:23 - 22 réponses |
| |
| | | |
|
| |
Membre enregistré 15 messages |
|
Posté le 26 juillet 2017 - 11:23 |
Bonjour
J'ai un boitier FT231X USB UART que je branche en USB. il prend un port com Il permet de paramétrer une parabole J'utilise le logiciel Terminal (v1.9b) Je me connecte au boitier (vitesse 57600, data bits 8, parity none, stop bits 1 et handshaking none Lorsque, dans ce logiciel, je saisi 2 et entrée, il m'affiche le paramétrage des satellites.
Je souhaite faire la même chose sous WinDev Le problème c'est que je n'ai j'avais rien en retour Comme la communication avec ce genre de boitier ce n'est pas trop ma spécialité, j'aimerai un peu d'aide. Je vous donne deux exemple que j'ai fait (dans le premier je n'ai jamais l'évènement caractère reçu qui est déclenché, et dans le deuxième il n'y a jamais rien a réception (Je sais je ne ferme pas le port à la fin, mais comme je voulais être certain de fermer trop tot et que c'est juste des tests, je le ferme au debut pour l'instant)
Merci de votre aide
LeCom est un entier = 3
sFerme(LeCom) SI sOuvre(LeCom, 2000, 2000,sTimeoutDéfaut,Vrai) ALORS sEvénement(LeCom,sEveCaractèreReçu, SiRecu) sFixeParamètre(LeCom, 57600, 0, 8, 0) sEcrit(LeCom,"2") SINON Erreur("Erreur d'ouverture du port COM"+LeCom) FIN Sablier(Faux)
LeCom est un entier = 3 LeMessR est une chaîne = "" LaTailleMess est un entier
sFerme(LeCom) SI sOuvre(LeCom, 2000, 2000,sTimeoutDéfaut) ALORS sFixeParamètre(LeCom, 57600, 0, 8, 0) sEcrit(LeCom,"2") Temporisation(200) LaTailleMess = sDansFileEntrée(LeCom) SI LaTailleMess > 0 ALORS LeMessR = sLit(LeCom,LaTailleMess) FIN SINON Erreur("Erreur d'ouverture du port COM"+LeCom) FIN Info(LeMessR) |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 26 juillet 2017 - 14:29 |
Bonjour, Dans votre premier essais (avec sEvenement), vous nous donnez pas le code de la procédure : SiRecu |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 26 juillet 2017 - 15:18 |
Dans vos 2 essais vous envoyez "2" ce qui n'est pas l'équivalent de ce que vous envoyez avec Terminal : " je saisi 2 et entrée" Vous oubliez d'envoyer RC :
sEcrit(LeCom, "2" + Caract(0x0d) ) |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 15 messages |
|
Posté le 26 juillet 2017 - 20:09 |
Bonjour Oui je n'avais pas mis la procédure SiRecu car pour l'instant il n'y a qu'une commande info() Pour ce ui du retour chariot. j'avais essayé avec caract(13) et je viens d"essayer comme vous l'avez indiqué mais cela n'a rien changé. Mais je me suis aperçu de quelque chose. pour être certain d'avoir les bon paramétrages j'ai fait une boucle qui traite tous les cas possible (avec la vitesse à 57600) et parfois je recois quelques chose de lisible,toujours la même chose, mais jamais avec le même paramétrage. j'ai l'impression que c'est un message quand le boitier se met en veille (je j'avais avant tester sous terminal) Donc ca voudrai dire que mon programme reçois bien mais ceux sont les ordres que je donnes qui sont inefficaces |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 15 messages |
|
Posté le 26 juillet 2017 - 20:10 |
en tout cas merci a vous de m'aider, je vais continuer à faire des tests pour essayer de comprendre |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 15 messages |
|
Posté le 27 juillet 2017 - 08:33 |
Si cela peut aider je donne le paramétrage que j'utilise sous TerminalV1.9b:
Et voici ce que me repond Terminal1.9b:
BOOTING... DISH_STOP {0,0} t:0.2 n:0 WAIT(158) TUNER_POWER: DOWN LNB_STATE CHANGED FROM 0 TO S TUNER_POWER: ON TRY#1 GETTING TUNER ID=E0 (OK) TUNER INIT... M88DS3103 firmware upload................................................................ EEPROM TEST : OK CLOSE BUT: 1 STEP:0 {0,0} t:4.0 n:0 DISH_STOP {0,0} t:4.0 n:0 TUNER_POWER: DOWN Going HOME before anything else... BOOT : SUCCESS. STARTING ZENMATIC. DISH_STOP {0,0} t:4.5 n:0 STEP3: Going home now... DISH_STOP {0,0} t:0.0 n:0 DISH_LEFT {0,0} t:0.1 n:0 WAIT(221) STEP2: Dish left end, moving down now DISH_STOP {0,0} t:0.3 n:0 DISH_DOWN {0,0} t:0.3 n:0 WAIT(222) WAIT(53) WAIT(53) WAIT(53) WAIT(53) WAIT(53) WAIT(53) WAIT(53) WAIT(53) WAIT(53) WAIT(53) SPEED_V:0 < SPEED_STOPPED DISH_STOP {0,0} t:1.1 n:0 ORIGIN REACHED, AT_HOME=1 $SLEEP
Je voulais savoir s'il existe une commande pour tester la connexion avec le boitier j'ai essayé AT mais j'ai l'impression que le boitier ne tiens pas du tout compte des commandes que j'envoi il doit manquer quelque chose autour mais je ne vois pas quoi |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 15 messages |
|
Posté le 27 juillet 2017 - 08:57 |
Pour tester le paramétrage de la connexion, j'ai fait un programme qui test tous les cas possibles. en balançant une commande AT (mais je ne sais pas si c'est celle ci qu'il faut utiliser) Parfois, lors de cette boucle, je reçois la trame affichée au dessus. Mais incapable de dire, pour moi, si c'est la commande AT qui provoque la réception de cette trame ou si c'est la mise en veille de mon boitier qui envoie cette trame (le doute vient a cause du côté un peu aléatoire de la réception de cette trame) voici ce que j'ai fait pour tester les différents paramétrages:
SiOK est un booléen LeCom est un entier = 3 LeTab1 est un tableau d'entier = [57600] LeTab2 est un tableau d'entier = [0,1,2] LeTab3 est un tableau d'entier = [4,5,6,7,8]
LeTab4 est un tableau d'entier = [0,1,2] LeTab5 est un tableau d'entier = [0,1,2] LeTab6 est un tableau d'entier = [0,1,2] LeTab7 est un tableau de booléens = [Vrai,Faux] LaVal1 est un entier LaVal2 est un entier LaVal3 est un entier LaVal4 est un entier LaVal5 est un entier LaVal6 est un entier LaVal7 est un booléen LeNb1 est un entier = 0 LaRep1 est une chaîne = "" LeEnvoi2 est une chaîne = ChaîneVersUTF8("AT"+Caract(13)) LeNb2 est un entier = 0 LaRep2 est une chaîne = ""
LeCpt est un entier = 0
TableSupprimeTout(TABLE_Resultat) sFerme(LeCom) SI sOuvre(LeCom, 9000, 9000,sTimeoutDéfaut) ALORS Sablier(Vrai) POUR TOUT LaVal1 de LeTab1 POUR TOUT LaVal2 de LeTab2 POUR TOUT LaVal3 de LeTab3 POUR TOUT LaVal4 de LeTab4 POUR TOUT LaVal5 de LeTab5 POUR TOUT LaVal6 de LeTab6 POUR TOUT LaVal7 de LeTab7 SiOK = sFixeParamètre(LeCom,LaVal1,LaVal2,LaVal3,LaVal4,LaVal5,LaVal6,LaVal7) SI SiOK ALORS LeCpt++ LeNb1 = sDansFileEntrée(LeCom) LaRep1 = sLit(LeCom,LeNb1) Temporisation(20) sEcrit(LeCom,LeEnvoi2) Temporisation(20) LeNb2 = sDansFileEntrée(LeCom) LaRep2 = sLit(LeCom,LeNb2) Temporisation(20) TableAjouteLigne(TABLE_Resultat,LeCpt,LaVal1,LaVal2,LaVal3,LaVal4,LaVal5,LaVal6,LaVal7,"OK",LeNb1,LaRep1,LeNb2,LaRep2) TableTrie(TABLE_Resultat,"-TABLE_Resultat.COL_LeCpt") FIN FIN FIN FIN FIN FIN FIN FIN sFerme(LeCom) Sablier(Faux)
SINON Erreur("Erreur d'ouverture du port COM"+LeCom) FIN Sablier(Faux) |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 15 messages |
|
Posté le 27 juillet 2017 - 09:11 |
Voici ce que j'obtient, parfois en faisant tourner le programme ci-dessus (mais pas forcement avec le même paramétrage) de plus impossible pour moi de savoir si cette réponse arrive a cause de la commande AT envoyée ou bien si c'est une trame envoyée par mon boitier lorsqu'il se met en veille (Le fait que la trame soit reçue en plusieurs morceaux vient du fait que ma temporisation est trop courte)
|
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 27 juillet 2017 - 14:07 |
Bonjour, - La commande "AT" est sauf erreur de ma part, réservée au dialogue avec les modems (commandes HAYES) - Avez la documentation de votre boitier ?
Pour tester je ferais comme cela :
Une fenêtre avec 2 boutons "Open com" et "Close" et une zone d'affichage de texte SAI_DATA multi-ligne
Déclaration globale de cette fenêtre :
myBufferRx est une chaîne PortCom est un entier
Code du bouton "Open com"
myBufferRx = "" SAI_DATA = "" PortCom = 3 sFerme(PortCom)
IF NOT sOuvre(PortCom, 4096, 4096, sTimeoutDéfaut, Vrai) THEN Erreur("Erreur sOuvre") RETOUR END
IF NOT sFixeParamètre(PortCom, 57600, 0, 8, 0, Vrai, Vrai, Vrai) THEN Erreur("Erreur sFixeParamètre") sFerme(PortCom) RETOUR END
IF NOT sEvénement(PortCom,sEveCaractèreReçu, getRxChar) THEN Erreur("Erreur sEvénement") sFerme(PortCom) RETOUR END
Code de la procédure locale getRxChar
Procedure getRxChar() i est un entier DataLine est une chaîne = "" myBufferRx += sLit(PortCom,sDansFileEntrée(PortCom))
i = Position(myBufferRx,Caract(0x0d)) IF i > 0 THEN DataLine = myBufferRx[[1 A i]] myBufferRx = myBufferRx[[i+1 A]] SAI_DATA += DataLine END
Éteindre le boitier, lancer le test, cliquez sur le bouton "Open com" et allumez votre boitier : vous devriez avoir les messages du boot
pour envoyer des caractères ajoutez un bouton "Send"
sEcrit(PortCom, "données à envoyer"+Caract(0x0d))
Quant aux données à envoyer, sans la documentation c'est mission quasi impossible |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 15 messages |
|
Posté le 27 juillet 2017 - 15:04 |
Bonjour je vais tester cela des ce soir merci |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 15 messages |
|
Posté le 28 juillet 2017 - 19:33 |
Bonjour. non ca na rien donné. je dois rater quelque chose mais je ne vois pas encore quoi j'ai quelques exemple de commandes pour lister le paramétrage et aussi pour modifier des paramétres Sous terminal1.9b cela fonctionne tres bien quand je les saisie simplement dans la pavé inférieur de celui ci mais sous windev pour l'instant il ne veut rien savoir ce que j'essaye de faire en fait, c'est simplement reproduire la partie saisie de commande de termine1.9b, mais en vain pour l'instant je vais encore chercher de mon cotes; merci pour votre aide en tout cas |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 948 messages Popularité : +30 (92 votes) |
|
Posté le 29 juillet 2017 - 13:49 |
Coucou
Temporisation(200) c pas bon tu utilise Multitask()
et je croi que 0x0D 0x0A
j me suis exploser le poignet droit desoler pour la response courte
-- Charly CanDo. Forg en Nouvelle-Zélande - In üs we trust Nasi Goreng en Indonesie - #oulouou Char Kuey Tiao en Malaisie - #OKLM irc.freenode.net - ##pcsoft |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 29 juillet 2017 - 15:22 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 29 juillet 2017 - 16:51 |
Bonjour Une méthode simple et efficace pour tester votre programme (sauf la partie paramétrage) c'est de relier la pin n°2 du connecteur RS232 à la pin n°3 (c'est les mêmes pin que ce soit un connecteur Canon SubD 9 ou 25 broches) sans rien d'autre. Ainsi tout ce que vous enverrez devra s'afficher |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 15 messages |
|
Posté le 02 août 2017 - 07:41 |
bonjour, désolé j'étais absent quelque jours Je vais tester toutes vos suggestions et je vous tiendrai au courant Merci de votre aide en tout cas |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 15 messages |
|
Posté le 04 août 2017 - 20:56 |
Bonjour J'ai fait des tests selon vos remarques, faisant différents programmes Cela ne fonctionne pas Mais j'ai remarqué quelque chose Quand je me connecte au boitier avec le logiciel Terminal, apparait les messages de boot suivant
BOOTING... DISH_STOP {0,0} t:0.2 n:0 WAIT(158) TUNER_POWER: DOWN LNB_STATE CHANGED FROM 0 TO S TUNER_POWER: ON TRY#1 GETTING TUNER ID=E0 (OK) TUNER INIT... M88DS3103 firmware upload................................................................ EEPROM TEST : OK CLOSE BUT: 1 STEP:0 {0,0} t:4.0 n:0 DISH_STOP {0,0} t:4.0 n:0 TUNER_POWER: DOWN Going HOME before anything else... BOOT : SUCCESS. STARTING ZENMATIC. DISH_STOP {0,0} t:4.5 n:0 STEP3: Going home now... DISH_STOP {0,0} t:0.0 n:0 DISH_LEFT {0,0} t:0.1 n:0 WAIT(221) STEP2: Dish left end, moving down now DISH_STOP {0,0} t:0.3 n:0 DISH_DOWN {0,0} t:0.3 n:0 WAIT(222) WAIT(53) WAIT(53) WAIT(53) WAIT(53) WAIT(53) WAIT(53) WAIT(53) WAIT(53) WAIT(53) WAIT(53) SPEED_V:0 < SPEED_STOPPED DISH_STOP {0,0} t:1.1 n:0 ORIGIN REACHED, AT_HOME=1 $SLEEP
Pendant ce temps la toutes les led du boitier clignotent, comme si le boitier etait en train de s'activer et ensuite le boitier clignote comme s'il etait en attente
Hors moi quand je me connecte par windev, il me detecte bien le boitier sur le port com mais rien ne clignote sur le boitier Il n'y a aucun boot Est ce que le logiciel terminal n’enverrai pas une instruction de boot, par défaut? De plus, windev me détecte un branchement sur le port com meme si le boitier n'est pas sous tension. Je pense que mon problème vient de la, je me connecte simplement au port com mais le boitier ne s'active pas Si c'est le cas, je pense que ce n'est pas quelque chose de spécifique au boitier que j'ai, vu que Terminal le fait par defaut
Dans le test que j'ai indiqué plus haut (celui ou je fait une boucle en testant toutes les paramétrage en balancant la commande "AT") parfois je recevait le message de boot (comme sous terminal) et le boitier clignotait. le probleme c'est qu'il ne le faisait pas tout le temps et de facon aléatoire (pas toujours avec le même parametrage et jamais avec celui que j'utilise sous Terminal)
je sais je débute vraiment dans ce domaine, plus habitué à travailler sur des bases que sur des ports com |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 05 août 2017 - 13:33 |
Bonjour, - Avez-vous testé votre programme juste en bouclant la pin n°2 à la pin n°3 du connecteur RS232, sans connecter votre boitier satellite ?
Si votre connecteur est un Cannon Sub-d 9 broches comme sur l'image :
la pin n°2 est la réception (RX) de votre pc et la n°3 est la transmission (TX)
Faite juste un pont entre ces deux pins (ne connectez pas votre boitier satellite) et dans le code d'un bouton, envoyez du texte «sEcrit(PortCom, "ABCDE")"» Si votre programme est correcte vous devriez recevoir "ABCDE". Tant que cette étape ne fonctionne pas, pas la peine d'essayer de communiquez avec votre boitier satellite...
J'ai bossé durant de nombreuses années avec les liaisons asynchrones (rs232,rs422,rs485) et j'ai toujours utilisé cette méthode pour vérifier que mon programme envoyez et recevez bien (cela ne permet pas de vérifier le paramétrage du port)
Une fois que cela fonctionne : - retirez le pont - lancez votre programme - votre programme prêt connectez votre boitier satellite - mettez le sous tension
«Est ce que le logiciel terminal n’enverrai pas une instruction de boot, par défaut?» "Terminal" de Windows n'envoie rien de plus que ce que l'on lui demande d'envoyer et affiche tout ce qu'il reçoit.
«il me détecte bien le boitier sur le port com» Comment le savez-vous ? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 05 août 2017 - 14:58 |
hello, il y a aussi peut-être le signal série DTR à gérer. Arnaud sur ta copie d'écran on ne voit pas la partie transmit de terminal 1.9b A quel moment l'affichage de caractères venant de ton périphérique apparaît avec terminal 1.9B ? Au moment où tu fait un connect ou au moment où tu envois un 2 ?
-- Ami calmant, J.P |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 15 messages |
|
Posté le 08 août 2017 - 06:44 |
Bonjour J.P
le DTR n'est pas coché Sous Terminal, c'est lorsqu'on clique sur connect quele boot démarre, que les led clignotent et que les messages de boot apparaissent. la commande 2 permet de lister dles paramétrages de satellites, elle fonctionne bien aussi sous Terminal CI dessous l'écran après avoir cliqué sous connect.
|
| |
| |
| | | |
|
| | |
| |
Membre enregistré 15 messages |
|
Posté le 08 août 2017 - 06:54 |
Bonjour Philippe Le problème c'est que je ne passe pas par ce genre de cable mais par un cable USB Quant à savoir si le boitier est bien détecté par mon programme, disons que que mon programme détecte qu'il y a quelque chose sur le port Com3 quand je branche mon câble USB dessus. mais c'est vrai qu'il me le détécte même si le boitier n'est pas alimenter Après, je recois des messages parfois lorsque j'utilise ma boucle de test des differentes souvent une suite de lettres, parfois je recois un BOOT_START (ca c'est toujours avec les mêmes paramétrages) et, de temps en temps, les messages de boot comme sous Terminal et les leds se lancent (mais ca ca arrive aléatoirement parmis 4 ou 5 paramétrages precis) mais pour le paramétrage qui et identique à celui utilisé sous Terminal, la je ne recois jamais rien |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 15 messages |
|
Posté le 08 août 2017 - 06:56 |
Pardon Philippe et JP dans mes derniers messages, j'ai oublié la formulre de politesse message fait rapidement juste avant de partir
merci de votre aide en tout cas |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 08 août 2017 - 12:18 |
Bonjour je ne comprend pas votre architecture... D'après ce que j'avais compris, vous auriez : [PC]<----usb---->[boitier FT231X USB UART]<---cable RS232--->[boitier satellite] Le "boitier FT231X USB UART" ne servant qu'à vous fournir un port RS232C (par l'intermédiaire d'un driver Windows)
Si ce n'est pas le cas, pourriez-vous donner ce shéma ? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 15 messages |
|
Posté le 08 août 2017 - 20:32 |
Bonjour. j'ai juste le boitier qui se branche en USB sur le pc. c'est un boitier qui se branche sur une antenne satellite et qui permet le pointage de celle ci Le fabriquant (du boitier et des antennes) utilise des outils comme Terminal pour changer le paramétrage Mais justement il souhaite un logiciel qui permette de le faire de façon plus facile et le diffuser à ses clients. Mais dans ce projet, je bloque depuis plusieurs semaines sur l’échange avec ce boitier. L’échange avec ce genre de boitier c'est un domaine que je decouvre Mais tout le paramétrage est contenu dans le boitier, vu que j'y accède facilement avec Terminal |
| |
| |
| | | |
|
| | | | |
| | |
|