begin process at 2010 07 29 20:59:34
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Foxpro

 > 

Divers

 > 

Débutant(e)

 > 

Communication en série dans VFP


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Communication en série dans VFP

mercredi 4 novembre 2009 à 14:32:16 | Communication en série dans VFP

tony241265

Bonjour à tous,

dans une form j'ai ajouter un ole mscomm pour la communication en série. j'ai fais des procédures qui permettent de gérer la communication ouverture et fermeture du port, les paramètres (vitesse, bit de parité, ....)
je dois écrire un programme qui permet de communiquer avec une caisse enregistreuse à travers le port série. la communication se passe bien sauf pour enregistrer les données du buffer de mscomm.
dans une fonction je fais :
return mscomm.input
si je met set step on et je pointe le curseur sur mscomm.input j'ai bien la chaine souhaité
et si j'appuie sur F8 la fonction me renvoie bien la chaine, mais si j'enlève le set step on , la fonction me renvoie toujours une chaine vide ????
mscomm est configurée avec :
handshaking = 1, inputlen = 0, rthreshold = 0
le settings (vitesse, ...) est bien configuré car je lis bien les données renvoyés mais je n'arrive pas à les sauvegarder.

Merci
mercredi 4 novembre 2009 à 16:27:35 | Re : Communication en série dans VFP

MichelAtoutFox

Membre Club
Bonjour,

as-tu essayé:

Local lcRet as String
m.lcRet = mscomm.input
return m.lcRet
mercredi 4 novembre 2009 à 19:39:42 | Re : Communication en série dans VFP

tony241265

Bonjour Michel,

merci de ton aide, j'ai écris le code que tu as proposé mais toujours la variable est vide.
voici le code qui permet d'envoyer un message :
envoie_port (procédure dans la form)
lparameters mscomm, mes as string
Local lcRet as String
m.lcRet = ''
mscomm.output = mes
if mscomm.inbuffercount > 0
m.lcRet = mscomm.input
endif
return m.lcRet

voici l'appel de cette fonction
lcr = thisform.envoie_port(thisform.mscomm1,'instruction' + CHR(13))

lcr est toujours vide, comme j'avais écris dans le post précédent je vois bien le nom de l'article de la caisse dans mscomm.input si je met un point d'arrêt.

Merci
jeudi 5 novembre 2009 à 14:09:24 | Re : Communication en série dans VFP

MichelAtoutFox

Membre Club

  • As-tu vraiment besoin de passer l'objet mscomm comme paramètre à ta méthode ?
    Si je comprends bien, cette méthode est sur le même form que l'objet mscomm. Tu peux donc passer uniquement la chaine comme paramètre:
    m.lcr = thisform.envoie_port('instruction' + CHR(13))

    et dans ta méthode, tu supprimes le besoin de 1er paramètre.

  • quand tu débogues en pas à pas en mettant un point d'arret au début de ta procédure, est-ce que m.lcRet prend bien la valeur souhaitée?
jeudi 5 novembre 2009 à 20:40:39 | Re : Communication en série dans VFP

tony241265

oui la méthode est sur le même form, oui m.lcret prend bien la valeur souhaitée, je ne sais pas ce qui cloche pourquoi si je fais un pas à pas j'ai bel et bien la valeur renvoyé c'est vraiment bizarre c'est comme si l'information se volatilise. je suis toujours bloqué.
vendredi 6 novembre 2009 à 10:19:02 | Re : Communication en série dans VFP

MichelAtoutFox

Membre Club
as-tu essayé en simplifiant l'écriture (ne pas passer l'objet OLE en paramètre et modifer le code de la méthode) comme je te le suggérais?

si cette suggestion ne fonctionne pas mieux, il faudrait essayer en passant la valeur de retour en paramètre par référence (donc en ajoutant @lcr dans l'appel de la méthode)
dimanche 8 novembre 2009 à 04:14:52 | Re : Communication en série dans VFP

tony241265

après plusieurs essaies et recherche j'ai trouvé 2 solutions :
1)
m.lcRet = ''
mscomm.output = mes
inkey(0.01)
if mscomm.inbuffercount > 0
m.lcRet = mscomm.input
endif
return m.lcRet
dans la première je dois faire une temporisation (même si je ne suis pas convaincue) et tester si je trouve des information dans le buffer, si je ne fais pas de temporisation mscomm.inbuffercount est toujours =0

si je dois ramener 800 lignes des articles je pense que ça mettra plus de temps avec le temporisation que la deuxième solution

2)j'ai mis mscomm.inputlen = 1
m.lcRet = ''
m.lcchar = ''
_second1 = datetime()
do while .t.
m.lcchar = mscomm.input
m.lcRet = m.lcRet + x
if m.lcchar = chr(13) or datetime() - _second1 > thisform.timeout
exit
endif
enddo
return m.lcRet

la caisse revoie le caractère 'O' suivie du retour chariot puis envoie l'information suivie du RC(retour chariot)c'est à dire
'O' + RC
INFO + RC
dans cette procédure j'ai mis un timeout au cas ou il y a un problème de communication

laquelle est la meilleure???

dans les deux cas j'ai toujours un blocage pendant la lecture des articles c'est à dire si je clique sur un bouton.. etc rien ne se passe jusqu'à la fin de lecture des articles






Cette discussion est classée dans : fonction, chaine, mscomm, série, communication


Répondre à ce message

Sujets en rapport avec ce message

créer une dll a partir de vfp6.0 [ par aumeric ] Bonjour Je voudrais faire une dll qui contient une fonctionexfunction donneheure()return time()Dans mon programme je voudrais appeler cette fonction FONCTION GENERIQUE QUI RETOURNE UN TABLEAU [ par johnmary ] Bonsoir à tous,J'ai créé une fonction dans un module intitulé iofonctions.prg.FUNCTION FolderListe()PARAMETERS DrivePathDIMENSION ThePaths(1024)Inc=1 Formulaire [ par Domatreal ] Salut J'aimerais savoir comment on peut creer (a l'aide d'un programme) un formulaire en fonction de la structure d'une table quelconque.En d'autres t Tester si une table est ouverte par une autre application [ par FLYeRNeT ] Bonjour, Je cherche une fonction ou un moyen qui me permettrait de savoir si une table fox (dbf) est ouverte par une autre application. J'ai trouvé Creation de fonction [ par ducker88 ] Bonjour,Je debute en foxpro et j'aimerai savoir comment creer une fonction recevant des argument et utilisable dans tous le programme?Je suppose qu'il Erreur dans une fonction :( [ par ducker88 ] Bonjour,Voila j'ai creer une fonction transfert.prg qui à pour but de copier les donnée d'une table vers une autre. Je passe en parametre le nom de ce Supprimer alias [ par ducker88 ] Bonjour, J'aimerai savoir comment supprimer un alias dans une fonction.J'ai une fonction qui a chaque fois qu'elle est appelé crée des alias. Le probl Ajout champ dans table [ par ducker88 ] Bonjour a tous,Voila j'aimerai créer une fonction qui permettrai d'ajouter un champ à une table.Cette fonction dois avoir comme parametre le nom de la ouvrir fichier a l'aide de la fonction RUN [ par ducker88 ] Bonjour a tous, Je souhaiterai ouvrir n'importe quel fichier à partir de mon programme ecrit en foxpro.j'ai essayé RUN c:\test.xlsCela marche met une Fonction pour Base de données déjà ouverte [ par belleisa ] Bonjour,je voudrais savoir s'il existe une fonction dans foxpro 8.0 qui permet de déterminer si une databases est déjà ouverte par un autre utilisateu


Nos sponsors


Sondage...

CalendriCode

Juillet 2010
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,187 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales