ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Forum AtoutFox : Re: port RS232   

Sujet

rss Flux RSS des derniers messages

Vous devez vous identifier pour pouvoir poser une question ou répondre.

dim. 24 novembre 2019, 19h12

GLS
France France

atoutfox.public.association

Re: port RS232

Bonjour,

Il suffit d'utiliser un des active x de Microsoft accessible et à utiliser directement dans un form VFP. (MSCOMM)
- Ajout objet VFP OLE , sélectionner Microsoft communication control version 6.0)
- un fois présent dans le formulaire VFP, il s'affiche sous forme d'un téléphone jaune posé sur un modem avec des voyants rouges et verts)
Dans cet objet OLE, depuis les propriétés suivantes sont à indiquer:.

ole.DTRenable = .F. && pas d'utilisation du DTR lors de communications sauf si le périphérique oblige son utilisation
ole.Commport = N° du port com RS232c à utiliser
ole.RTreshold = 1 && dès qu'un caractère est entré l'évènement This.OnComm() est déclenché
ole.InputMode = 0 && texte
ole.STreshold = 1 && émission dès le premier caractère écrit dans le port comm
ole.Settings = 9600,n,8,1 && vitesse de transmission prévu pour cette liaison RS232c

Utiliser l'évènement ole.OnComm() pour traiter les caractères entrants
Utiliser la propriété ole.OUPUT = 'la chaine de caractère à envoyer vers le périphérique'
Utiliser la propriété ole.InBufferCount > 0 && si le buffer de réception à au moins un caractère de réceptionné
Utiliser la propriété ole.input pour forcer la lecture de caractère, si l'on ne souhaite pas utiliser l'évènement ole.Oncomm() pour traiter la réception de caractères
Utiliser la propriété ole.CommEvent = 2 && pour tester si des caractères sont en cours de réceptions par l'UART du RS232C

Dans l'évènement OnComm()
L'évènement OnComm() de l'OLE pouvant se déclencher pendant une écriture dans le port RS232c par une méthode du formulaire, il faut penser à bloquer l'utilisation du port série en écriture tant qu'il est en réception

PROCEDURE OnComm
* ICI indiquer que le port RS232c est utilisé en lecture par exemple THISFORM.lReception = .T. mettre une propriété du formulaire à .T.
* Utiliser ole.input pour lire le port
IF m.THIS.CommEvent = 2 && Réception effective
  IF m.THIS.InBufferCount > 0 && au moins un caractère de lu
    cMaChaine = m.THIS.INPUT
    i = 0
    * Exemple de traitement de la chaine réceptionné avec un aquittement sur une fin de transmission
    DO WHILE LEN(m.cMaChaine) > 0 AND ASC(SUBSTR(m.cMaChaine, m.i, 1)) <> 0
      DO CASE
        CASE SUBSTR(m.cMaChaine, m.i, 1) = CHR(04) && traitement cas du caractère 04 reçu EOT fin de transmission
          THIS.OUPUT = CHR(06) && émission d'un caractère ACK
      ENDCASE
      i = m.i + 1
      DOEVENTS && libère les ressources machine pour d'autres applications
    ENDDO
  ENDIF
ENDIF
* ICI indiquer que le port est libre en émission THISFORM.lReception = .F.
ENDPROC


* Pour émettre il suffit d'utiliser ole.OUPUT = 'la chaine à écrire'
Cordialement
GLS

Permalink : http://www.atoutfox.org/nntp.asp?ID=0000019483
20 088 messages dans le forum • Liste complète des messages

Publicité

Les pubs en cours :


www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3