begin process at 2012 02 16 09:30:55
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Windows

 > 

ActiveX / COM

 > 

Communication RS232


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

Communication RS232

samedi 2 décembre 2006 à 15:25:37 | Communication RS232

lecobra20

Bonjour !

Voilà je suis entrain de réaliser un programme me permettant de dialoguer via le port série RS223 d'un ordinateur.
Mais je suis confronté à quelques petits problèmes.

Voilà je voudrai pour me connecter au port série de l'ordinateur le sélection via un combox ainsi que les paramètres de connexion.
Mais le problème c'est que je n'arrive pas à passer le numéro du port en paramètre :
    Je m'explique pour se conncter au port j'utilise la syntax suivant
                                Comm.CommPort = 1
                                Comm.Settings = "9600,n,8,1"
J'aimerai remplacer cela par une sélection sur des combobox.

                Exemple : Comm.CommPort = PortNbr => PortNbr étant la sélection de mon port sur le combobox Port.Text

De plus je voudrais faire la même chose avec les paramètre de comm. Je précise j'utilse un bouton pour ouvrir le port.

Voilà merci de votre aide.

Ah encore une petite question :
Combien de caractère peut on envoyer dans une trame sur un bus RS232

Voilà merci encore !

samedi 2 décembre 2006 à 18:12:05 | Re : Communication RS232

acive


salut,
je ne suis pas sur de comprendre...

Comm.Settings = "9600,n,8," & Combo1.Text
 c'est ca?
A+
A.C.I.V.E SARL Automatismes Conception Informatique Vidéo Electronique
samedi 2 décembre 2006 à 19:10:21 | Re : Communication RS232

lecobra20

Le problème c'est lorsque je fait un nouveau choix par le combox il le prendpas en compte il garde la premiere valeur celle lors de l'ouverture du port.

J'ai bien essyé de mettre un timer mais il me renvoi une erreur comme quoile port est déjà ouvert voilà merci.

Voici mon code pour info :

'''''' Déclaration de variables ''''''
Public PortNbr As Integer

''''' Fonction pour gérer les différentes erreurs possible sur le port de comm ''''''
Private Sub Comm_OnComm()

    Select Case Comm.CommEvent
    
     'liste des erreurs possibles
        Case comEventBreak 'On a reçu un signal d'interruption (Break)
        Case comEventCDTO ' Timeout de la porteuse
        Case comEventCTSTO ' Timeout du signal CTS (Clear To Send)
        Case comEventDSRTO ' Timeout du signal de réception
        Case comEventFrame ' Erreur de trame
        Case comEventOverrun ' Des données ont été perdues
        Case comEventRxOver ' Tampon de réception saturé
        Case comEventRxParity ' Erreur de parité
        Case comEventTxFull ' Tampon d'envoi saturé
        Case comEventDCB ' Erreur de réception DCB (jamais vu)

    'liste des événements possibles qui sont, eux, normaux
        Case comEvCD 'Changement dans la broche CD (porteuse)
        Case comEvCTS 'Changement dans broche CTS
        Case comEvDSR 'Changement dans broche DSR (réception)
        Case comEvRing 'Changement dans broche RING (sonnerie)

    End Select
 
End Sub

'''''' Fonction qui gère l'envoi de la trame ''''''
Private Sub Envoyer_Click()
    On Error Resume Next
    Comm.Output = Text2.Text
End Sub

'''''' Fontion qui gère le bouton break ''''''
Private Sub Command4_Click()

    If Comm.PortOpen = True Then
    Select Case Comm.Break
        Case vbFalse
            Comm.Break = True
            Command4.BackColor = vbRed
        Case vbTrue
            Comm.Break = False
            Command4.BackColor = vbGreen
        End Select
    Else
        Comm.Break = False
        Command4.BackColor = vbGreen
    End If
End Sub

'''''' Fonction qui permet de fermer le port via le bouton fermer de l'application ''''''
Private Sub Fermeture_Click()
    Comm.PortOpen = False
End Sub

'''''' Fonction qui permet d'ouvrir le port via le bouton ouvrir de l'application ''''''
Private Sub Ouverture_Click()

    On Local Error GoTo Erreur
   
    Comm.PortOpen = True
'Gestion des erreurs
Erreur:
    If Err.Number = 8002 Then 'le port n'est pas ouvert
      MsgBox ("Port non accessible. Utilisé en un autre")
    End If
   
End Sub

'''''' Fonction du menu pour quitter l'application ''''''
Private Sub Quitter_Click()
End
End Sub
'''''' Fonction pour ouvrir la fenêtre de test de ports ''''''
Private Sub TestPort_Click()
    frmTestCom.Show
End Sub

'''''' Timer pour la gestion de l'information port "ouvert" ou "fermer" ''''''
Private Sub Timer1_Timer()
   
    'Si le port est ouvert
    If Comm.PortOpen = True Then
        Label1.Caption = "Ouvert"               '///On affiche port ouvert dans le label de l'application
        Ouverture.Enabled = False               '///On déactive le bouton ouverture du port
        Fermeture.Enabled = True                '///On active le bouton fermeture du port
       
    'Si le port est fermer
    Else
        Label1.Caption = "Fermé"                '///On affiche port fermer dans le label de l'application
        Ouverture.Enabled = True                '///On active le bouton ouverture du port
        Fermeture.Enabled = False               '///On désactive le bouton fermeture du port
       
    End If
   
    'Affiche dans le textbox le buffer de sorti et d'entrée
    Text3.Text = "OutBuffer : " & Comm.OutBufferCount & " | InputBuffer : " & Comm.InBufferCount
   
End Sub

'''''' Fonction pour l'initialisation des Combobox ''''''
Private Sub init_com_param()

'Port
Port.ItemData(0) = 1: Port.List(0) = "COM1"
Port.ItemData(1) = 2: Port.List(1) = "COM2"
Port.ItemData(2) = 3: Port.List(2) = "COM3"
Port.ItemData(3) = 4: Port.List(3) = "COM4"
Port.ItemData(4) = 5: Port.List(4) = "COM5"
Port.ItemData(5) = 6: Port.List(5) = "COM6"
Port.ItemData(6) = 7: Port.List(6) = "COM7"
Port.Text = "COM1"

'vitesse
Vitesse.ItemData(0) = 110: Vitesse.List(0) = 110
Vitesse.ItemData(1) = 300: Vitesse.List(1) = 300
Vitesse.ItemData(2) = 1200: Vitesse.List(2) = 1200
Vitesse.ItemData(3) = 2400: Vitesse.List(3) = 2400
Vitesse.ItemData(4) = 4800: Vitesse.List(4) = 4800
Vitesse.ItemData(5) = 9600: Vitesse.List(5) = 9600
Vitesse.ItemData(6) = 19200: Vitesse.List(6) = 19200
Vitesse.ItemData(7) = 38400: Vitesse.List(7) = 38400
Vitesse.ItemData(8) = 57600: Vitesse.List(8) = 57600
Vitesse.ItemData(9) = 115200: Vitesse.List(9) = 115200
Vitesse.ItemData(10) = 230400: Vitesse.List(10) = 230400
Vitesse.ItemData(11) = 460800: Vitesse.List(11) = 460800
Vitesse.ItemData(12) = 921600: Vitesse.List(12) = 921600
Vitesse.Text = "9600"

'taille
Taille.ItemData(0) = 5: Taille.List(0) = 5
Taille.ItemData(1) = 6: Taille.List(1) = 6
Taille.ItemData(2) = 7: Taille.List(2) = 7
Taille.ItemData(3) = 8: Taille.List(3) = 8
Taille.Text = "8"

'Parite
Parite.ItemData(0) = 1: Parite.List(0) = "n"
Parite.ItemData(1) = 2: Parite.List(1) = "e"
Parite.ItemData(2) = 3: Parite.List(2) = "o"
Parite.ItemData(3) = 4: Parite.List(3) = "m"
Parite.ItemData(4) = 5: Parite.List(4) = "s"
Parite.Text = "n"

'BitStop
BitStop.ItemData(0) = 1: BitStop.List(0) = 1
BitStop.ItemData(1) = 1.5: BitStop.List(1) = 1.5
BitStop.ItemData(2) = 2: BitStop.List(2) = 2
BitStop.Text = "1"


End Sub

'''''' fonction principale de l'application ''''''
Private Sub Form_Load()

'Appelle de fonction
Call init_com_param
Call Timer2_Timer
       
'configuration du port de communication
Comm.InputMode = comInputModeText
Comm.RThreshold = 1                           '///Permet de gérer l'événement CommEvent : réception
Comm.SThreshold = 1                           '///Permet de gérer l'événement CommEvent : envoi
Comm.CommPort = PortNbr                       '///Numéro du port à ouvrir
Comm.Settings = "9600,n,8,1"                  '///Paramètre du port pour la communication

Text1.Text = PortNbr
       
End Sub


Private Sub Timer2_Timer()

    If Port.Text = "COM1" Then
       PortNbr = 3
    End If
    If Port.Text = "COM2" Then
        PortNbr = 2
    End If
    If Port.Text = "COM3" Then
        PortNbr = 3
    End If
    If Port.Text = "COM4" Then
        PortNbr = 4
    End If
    If Port.Text = "COM5" Then
        PortNbr = 5
    End If
    If Port.Text = "COM6" Then
        PortNbr = 6
    End If
    If Port.Text = "COM7" Then
        PortNbr = 7
    End If
  
End Sub

'''''' Fontion qui permet de fermer les port quand on quitte l'application ''''''
Private Sub Form_Unload(Cancel As Integer)

    If Comm.PortOpen = True Then
        Comm.PortOpen = False
    End If

End Sub



dimanche 3 décembre 2006 à 10:45:40 | Re : Communication RS232

maytetino

Bonjour

j'ai déja rencontré le probléme, le moyen le plus simple ces de mettre la config du port dans un "text" caché.
Cest simple   :

MSComm1.PortOpen = False            'Fermer Port
MSComm1.Settings = Text1.Text       ' Changer la config     (text1.text="9600,n,8,1")
MSComm1.PortOpen = True             ' Ouvreture Pot

Sa marche a tout les coups simple rapide et efficace
@+
dimanche 3 décembre 2006 à 10:49:39 | Re : Communication RS232

maytetino


Bonjour
Voila le codes que j'utilise

If MSComm1.PortOpen = False Then
     Text1.Text = Combo1.Text + "," + Combo4.Text + "," + Combo2.Text + "," + Combo3.Text
     MSComm1.CommPort = Combo5.Text
     MSComm1.Settings = Text1.Text
     MSComm1.PortOpen = True
     txtLog = ""
     port = "open"
     AddLog ("Port Ouvert")
  Else
     MsgBox "Port Déja Ouvert"
End If
@+

dimanche 3 décembre 2006 à 10:56:48 | Re : Communication RS232

maytetino

Code Modifier
'''''' Déclaration de variables ''''''
Public PortNbr As Integer

''''' Fonction pour gérer les différentes erreurs possible sur le port de comm ''''''
Private Sub Comm_OnComm()

    Select Case Comm.CommEvent
    
     'liste des erreurs possibles
        Case comEventBreak 'On a reçu un signal d?interruption (Break)
        Case comEventCDTO ' Timeout de la porteuse
        Case comEventCTSTO ' Timeout du signal CTS (Clear To Send)
        Case comEventDSRTO ' Timeout du signal de réception
        Case comEventFrame ' Erreur de trame
        Case comEventOverrun ' Des données ont été perdues
        Case comEventRxOver ' Tampon de réception saturé
        Case comEventRxParity ' Erreur de parité
        Case comEventTxFull ' Tampon d?envoi saturé
        Case comEventDCB ' Erreur de réception DCB (jamais vu)

    'liste des événements possibles qui sont, eux, normaux
        Case comEvCD 'Changement dans la broche CD (porteuse)
        Case comEvCTS 'Changement dans broche CTS
        Case comEvDSR 'Changement dans broche DSR (réception)
        Case comEvRing 'Changement dans broche RING (sonnerie)

    End Select
 
End Sub

'''''' Fonction qui gère l'envoi de la trame ''''''
Private Sub Envoyer_Click()
    On Error Resume Next
    Comm.Output = Text2.Text
End Sub

'''''' Fontion qui gère le bouton break ''''''
Private Sub Command4_Click()

    If Comm.PortOpen = True Then
    Select Case Comm.Break
        Case vbFalse
            Comm.Break = True
            Command4.BackColor = vbRed
        Case vbTrue
            Comm.Break = False
            Command4.BackColor = vbGreen
        End Select
    Else
        Comm.Break = False
        Command4.BackColor = vbGreen
    End If
End Sub

'''''' Fonction qui permet de fermer le port via le bouton fermer de l'application ''''''
Private Sub Fermeture_Click()
    Comm.PortOpen = False
End Sub

'''''' Fonction qui permet d'ouvrir le port via le bouton ouvrir de l'application ''''''
Private Sub Ouverture_Click()

    On Local Error GoTo Erreur
   
    Comm.PortOpen = True
'Gestion des erreurs
Erreur:
    If Err.Number = 8002 Then 'le port n'est pas ouvert
      MsgBox ("Port non accessible. Utilisé en un autre")
    End If
   
End Sub

'''''' Fonction du menu pour quitter l'application ''''''
Private Sub Quitter_Click()
End
End Sub
'''''' Fonction pour ouvrir la fenêtre de test de ports ''''''
Private Sub TestPort_Click()
    frmTestCom.Show
End Sub

'''''' Timer pour la gestion de l'information port "ouvert" ou "fermer" ''''''
Private Sub Timer1_Timer()
   
    'Si le port est ouvert
    If Comm.PortOpen = True Then
        Label1.Caption = "Ouvert"               '///On affiche port ouvert dans le label de l'application
        Ouverture.Enabled = False               '///On déactive le bouton ouverture du port
        Fermeture.Enabled = True                '///On active le bouton fermeture du port
       
    'Si le port est fermer
    Else
        Label1.Caption = "Fermé"                '///On affiche port fermer dans le label de l'application
        Ouverture.Enabled = True                '///On active le bouton ouverture du port
        Fermeture.Enabled = False               '///On désactive le bouton fermeture du port
       
    End If
   
    'Affiche dans le textbox le buffer de sorti et d'entrée
    Text3.Text = "OutBuffer : " & Comm.OutBufferCount & " | InputBuffer : " & Comm.InBufferCount
   
End Sub

'''''' Fonction pour l'initialisation des Combobox ''''''
Private Sub init_com_param()

'Port
Port.ItemData(0) = 1: Port.List(0) = "COM1"
Port.ItemData(1) = 2: Port.List(1) = "COM2"
Port.ItemData(2) = 3: Port.List(2) = "COM3"
Port.ItemData(3) = 4: Port.List(3) = "COM4"
Port.ItemData(4) = 5: Port.List(4) = "COM5"
Port.ItemData(5) = 6: Port.List(5) = "COM6"
Port.ItemData(6) = 7: Port.List(6) = "COM7"
Port.Text = "COM1"

'vitesse
Vitesse.ItemData(0) = 110: Vitesse.List(0) = 110
Vitesse.ItemData(1) = 300: Vitesse.List(1) = 300
Vitesse.ItemData(2) = 1200: Vitesse.List(2) = 1200
Vitesse.ItemData(3) = 2400: Vitesse.List(3) = 2400
Vitesse.ItemData(4) = 4800: Vitesse.List(4) = 4800
Vitesse.ItemData(5) = 9600: Vitesse.List(5) = 9600
Vitesse.ItemData(6) = 19200: Vitesse.List(6) = 19200
Vitesse.ItemData(7) = 38400: Vitesse.List(7) = 38400
Vitesse.ItemData(8) = 57600: Vitesse.List(8) = 57600
Vitesse.ItemData(9) = 115200: Vitesse.List(9) = 115200
Vitesse.ItemData(10) = 230400: Vitesse.List(10) = 230400
Vitesse.ItemData(11) = 460800: Vitesse.List(11) = 460800
Vitesse.ItemData(12) = 921600: Vitesse.List(12) = 921600
Vitesse.Text = "9600"

'taille
Taille.ItemData(0) = 5: Taille.List(0) = 5
Taille.ItemData(1) = 6: Taille.List(1) = 6
Taille.ItemData(2) = 7: Taille.List(2) = 7
Taille.ItemData(3) = 8: Taille.List(3) = 8
Taille.Text = "8"

'Parite
Parite.ItemData(0) = 1: Parite.List(0) = "n"
Parite.ItemData(1) = 2: Parite.List(1) = "e"
Parite.ItemData(2) = 3: Parite.List(2) = "o"
Parite.ItemData(3) = 4: Parite.List(3) = "m"
Parite.ItemData(4) = 5: Parite.List(4) = "s"
Parite.Text = "n"

'BitStop
BitStop.ItemData(0) = 1: BitStop.List(0) = 1
BitStop.ItemData(1) = 1.5: BitStop.List(1) = 1.5
BitStop.ItemData(2) = 2: BitStop.List(2) = 2
BitStop.Text = "1"


End Sub

'''''' fonction principale de l'application ''''''
Private Sub Form_Load()

'Appelle de fonction
Call init_com_param
Call Timer2_Timer
       
'configuration du port de communication
comm.portOpen=False
Comm.InputMode = comInputModeText
Comm.RThreshold = 1                           '///Permet de gérer l'événement CommEvent : réception
Comm.SThreshold = 1                           '///Permet de gérer l'événement CommEvent : envoi
Comm.CommPort = text1.text                      '///Numéro du port à ouvrir
Comm.Settings = "9600,n,8,1"                  '///Paramètre du port pour la communication
'--------------------Text1.Text = PortNbr
comm.portOpen=True       

End Sub


Private Sub Timer2_Timer()

    If Port.Text = "COM1" Then
       PortNbr = 3
    End If
    If Port.Text = "COM2" Then
        PortNbr = 2
    End If
    If Port.Text = "COM3" Then
        PortNbr = 3
    End If
    If Port.Text = "COM4" Then
        PortNbr = 4
    End If
    If Port.Text = "COM5" Then
        PortNbr = 5
    End If
    If Port.Text = "COM6" Then
        PortNbr = 6
    End If
    If Port.Text = "COM7" Then
        PortNbr = 7
    End If
   Text1.text=PortNbr
End Sub

'''''' Fontion qui permet de fermer les port quand on quitte l'application ''''''
Private Sub Form_Unload(Cancel As Integer)

    If Comm.PortOpen = True Then
        Comm.PortOpen = False
    End If

End Sub

@+
dimanche 3 décembre 2006 à 13:42:02 | Re : Communication RS232

lecobra20

Merci de votre aide !

Mais celne fonctionne toujours pas le vrai problème c'est que lorsque l'on change le numéro du port dans le combobox celui-ci ne ce met pas à jour dans le form load. Le problème vient sur le timers je suppose. C'est pour cela que j'ai créé un timer avec une varialbe qui contient le numéro du port.
Cette variable elle change bien mais dans le for load aucun changement et comme je n'arrive pas à mettre un timer dans fore load cele ne fonctionne pas.

Auriez-vous une idée pour ce problème. Sinon mon code fonctionne juste ce problème que je n'arrive pas à résoudre ! L mise a jours du numéro de port en fonction du changement dans la combobox.

Merci d'avance
dimanche 3 décembre 2006 à 14:52:38 | Re : Communication RS232

maytetino

Bonjour

Moi j'ai utilisé un fichier text pour mémorisé la config du port, tré simple est efficase, je viens lire le fichier est je charge la conf a chaque ouvreture de la form.
@+

Private Sub lecture()
'-------------------------------------------------------------------
Open App.Path & "\system.ini" For Input As #5
       Input #5, fiche(1) ' port
        Input #5, fiche(2) ' vitesse
        Input #5, fiche(3) ' parité
        Input #5, fiche(4) 'bitsarret
        Input #5, fiche(5) 'bitstrame
        Input #5, fiche(6) 'timer
        Input #5, fiche(7) 'ret auto
        Input #5, fiche(8) ' fichier log
        Input #5, fiche(9) ' demarrage auto              
Close #5
End Sub

Private Sub sauvegarde()
Dim x
'-------------------------------------------------------------------
Open App.Path & "\system.ini" For Output As #5
For x = 1 To 9
       Print #5, fiche(x) ' port
 Next x
       Close #5
End Sub

dimanche 3 décembre 2006 à 19:42:13 | Re : Communication RS232

lecobra20

Bonjour !

Merci à vous tous pour vos réponses, j'ai enfin réglè le problème avec vos conseils.

j'aurai une dernière question ! Savez-vous la limite d'envoi sur un trame le nombre de caractère possible. Peut-on envoyer un fichier via le port et de combien de ko.
Quelle est le principe pour faire l'envoi d'un fichier via les port série.

Merci d'avance
lundi 4 décembre 2006 à 11:10:04 | Re : Communication RS232

acive

Je l'ai déjà fait fonctionner avec une ouverture et envoi du fichier en mode binaire, mais c'est assez lourd comme transaction..
j'ai trouvé un code sur vbfrance (sur ce site) cherche un peu tu trouveras..
A+

A.C.I.V.E SARL Automatismes Conception Informatique Vidéo Electronique


Cette discussion est classée dans : port, voil, sélection, communication, comm


Répondre à ce message

Sujets en rapport avec ce message

Communication via le port série [ par Bistou ] comment recevoir des informations émises par une télécommande via le port série? pourrais-je par la même occasion avoir un exemple d'aplication de log Impression sur le port Comm MsComm [ par MacFly ] Bonjour,j'aimerais savoir si c possible d'envoyer un fichier avec l'objet MsCOmm et pas une chaine de caractere ? Communication vers port seriel COM X [ par tecky ] J'ai écrit un prg pour lire des données d'un ancien INTEL8080 vers le port seriel COM1. Comment je doit faire pour transmettre des données vers le por Communication vers port seriel COM X [ par tecky ] J'ai écrit un prg pour lire des données d'un ancien INTEL8080 vers le port seriel COM1. Comment je doit faire pour transmettre des données vers le por Communication vers port seriel COM X [ par tecky ] J'ai écrit un prg pour lire des données d'un ancien INTEL8080 vers le port seriel COM1. Comment je doit faire pour transmettre des données vers le por communication port com [ par r1k ] Bonjour,j'ai un impédancemetre (genre de balance) qui se branche qur le port com du pc. Ce dernier envoie des informations (séparés par des virgules), communication port com [ par r1k ] Bonjour,j'ai un impédancemetre (genre de balance) qui se branche qur le port com du pc. Ce dernier envoie des informations (séparés par des virgules), VB communication avec port USB [ par bonj98 ] Bonjour,Je cherche une application avec laquelle je peux me connecter sur un port USB (év. avec choix du port USB).Merci beaucoupMeilleures salutation communication [ par pladgpm1 ] pouvez vous m'aider je veut envoi la valeur chr(0) dans mon port de communication mais elle apparait pas dans mes strings envoyer dans une serier &H32 Ms Comm [ par marcelin ] je travail sur une appli qui doit tourner avec un lecteur de badge à code barre brancher sur le port MS Comm.je vien de le recevoir aujourd'hui, mais


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 1,279 sec (4)

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