lecobra20
Messages postés4Date d'inscriptionlundi 23 janvier 2006StatutMembreDerniè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
lecobra20
Messages postés4Date d'inscriptionlundi 23 janvier 2006StatutMembreDerniè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()
'''''' 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
maytetino
Messages postés11Date d'inscriptionvendredi 14 janvier 2005StatutMembreDernière intervention15 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()
'''''' 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
lecobra20
Messages postés4Date d'inscriptionlundi 23 janvier 2006StatutMembreDerniè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.
maytetino
Messages postés11Date d'inscriptionvendredi 14 janvier 2005StatutMembreDernière intervention15 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
lecobra20
Messages postés4Date d'inscriptionlundi 23 janvier 2006StatutMembreDerniè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.
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+