Communication RS232

lecobra20 Messages postés 4 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 3 décembre 2006 - 2 déc. 2006 à 15:25
 Utilisateur anonyme - 4 déc. 2006 à 11:10
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 !

9 réponses

Utilisateur anonyme
2 déc. 2006 à 18:12
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
0
lecobra20 Messages postés 4 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 3 décembre 2006
2 déc. 2006 à 19:10
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()

'PortPort.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"

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

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

'PariteParite.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"

'BitStopBitStop.ItemData(0) 1: BitStop.List(0) 1BitStop.ItemData(1) 1.5: BitStop.List(1) 1.5BitStop.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
0
maytetino Messages postés 11 Date d'inscription vendredi 14 janvier 2005 Statut Membre Dernière intervention 15 janvier 2007
3 déc. 2006 à 10:45
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
@+
0
maytetino Messages postés 11 Date d'inscription vendredi 14 janvier 2005 Statut Membre Dernière intervention 15 janvier 2007
3 déc. 2006 à 10:49
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
@+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
maytetino Messages postés 11 Date d'inscription vendredi 14 janvier 2005 Statut Membre Dernière intervention 15 janvier 2007
3 déc. 2006 à 10:56
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()

'PortPort.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"

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

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

'PariteParite.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"

'BitStopBitStop.ItemData(0) 1: BitStop.List(0) 1BitStop.ItemData(1) 1.5: BitStop.List(1) 1.5BitStop.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
@+
0
lecobra20 Messages postés 4 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 3 décembre 2006
3 déc. 2006 à 13:42
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
0
maytetino Messages postés 11 Date d'inscription vendredi 14 janvier 2005 Statut Membre Dernière intervention 15 janvier 2007
3 déc. 2006 à 14:52
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
0
lecobra20 Messages postés 4 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 3 décembre 2006
3 déc. 2006 à 19:42
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
0
Utilisateur anonyme
4 déc. 2006 à 11:10
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
0
Rejoignez-nous