orj30754
Messages postés2Date d'inscriptionlundi 29 janvier 2007StatutMembreDernière intervention 8 novembre 2007
-
8 nov. 2007 à 12:05
cs_lim
Messages postés329Date d'inscriptionjeudi 20 novembre 2003StatutMembreDernière intervention10 mai 2014
-
12 mai 2008 à 09:19
Bonjour,
je dois créer un programme afin de récupérer et envoyer des données via un port série.
- Mon 1er soucis, est que je ne sais pas comment tester si mon programme fonctionne.
J'ai essayer de le faire dialoguer avec le logiciel Hyperterminal sur un autre PC mais impossible.
Ma 1ère question serait de savoir si quelqu'un saurait comment tester le dialogue entre mon programme et un autre ordinateur?
- Mon 2ème soucis viens du code de mon programme. Pendant l'exécution de celui ci j'ai un problème lors de l'ouverture du port. Le compilateur me dit : Access to the port 'COM1' is denied. Il marche la 1ère fois de la journée une fois que mon PC à démarrer. Le PC plante au moment d'envoyer ou recevoir des données et du coup je ne referme pas le port après utilisation et j'ai l'impression que ca vient de la.
Voici ma class pour la gestion des données et configuration du port, je m'y suis mis depuis peu, faites preuve d'indulgence ... :
Private MonPort AsNew PortSerie
Dim returnStr AsString = ""
PrivateSub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)HandlesMyBase.Load
LoginForm1.ShowDialog()
Me.Text = "Terminal VIZ 100"
Me.WindowState = FormWindowState.Maximized
Send_Num.Enabled = False
Num_serie_recup.Text = ""
EndSub
PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Button1.Click
Form2.ShowDialog()
EndSub
PrivateSub Send_Num_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Send_Num.Click
ProgressBar1.Value = 0
SendSerialData(Form2.N_Serie)
EndSub
PrivateSub Receive_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Receive.Click
ProgressBar1.Value = 0
ReceiveSerialData()
EndSub
PrivateSub ProgressBar1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles ProgressBar1.Click
ProgressBar1.Minimum = 0
ProgressBar1.Maximum = 200
EndSub
Sub SendSerialData(ByVal data AsString)
MonPort.configuration()
Using PortSerie As IO.Ports.SerialPort = My.Computer.Ports.OpenSerialPort("COM1")
MonPort.ouverture()
PortSerie.WriteLine(data)
ProgressBar1.Value += 100
PortSerie.Close()
ProgressBar1.Value += 100
MonPort.fermeture()
EndUsing
EndSub
Function ReceiveSerialData()AsString
MonPort.configuration()
Using PortSerie As IO.Ports.SerialPort = My.Computer.Ports.OpenSerialPort("COM1")
MonPort.ouverture()
If(SerialPort.IsOpen())Then
Do
MsgBox("Ouverture réussi", MsgBoxStyle.Information)
ProgressBar1.Value = 70
Dim Incoming AsString = PortSerie.ReadLine()
If Incoming IsNothingThen
ExitDo
Else
returnStr &= Incoming & vbCrLf
EndIf
ProgressBar1.Value = 120
Loop
EndIf
ProgressBar1.Value = 150
MonPort.fermeture()
EndUsing
Return returnStr
ProgressBar1.Value = 200
EndFunction
EndClass
#Region"Classe Port Série"
PublicClass PortSerie
Public NoPort AsString = "COM1"'Numero de port qui sera utilisé
Public Debit AsInteger = 9600'debit en bits/sec sur le port COM
Public NbBits AsInteger = 8'bits de donnée
Public BitStop AsString = IO.Ports.StopBits.One'bit de stop
Public Parite AsString = IO.Ports.Parity.None'parité
Function ouverture()AsBoolean
' verifie que le port est fermé avant de l'ouvrir
If(Not(Form1.SerialPort.IsOpen)Or(NoPort = "NULL"))Then
Form1.SerialPort.Open()
EndIf
ouverture = EtatPort()
EndFunction
Function fermeture()AsBoolean
' verifie que le port est ouvert avant de le fermer
If(Form1.SerialPort.IsOpen())Then
Form1.SerialPort.Close()
EndIf
fermeture = EtatPort()
EndFunction
Function EtatPort()AsBoolean
' test le port et retourn 0 ou 1
If(Form1.SerialPort.IsOpen())Then
EtatPort = True
Else
EtatPort = False
EndIf
EndFunction
cs_lim
Messages postés329Date d'inscriptionjeudi 20 novembre 2003StatutMembreDernière intervention10 mai 20147 8 nov. 2007 à 16:24
Salut
Voilà un petit programme qui envoi et reçoit des données depuis 1 port Com, à adapter pour ton besoin
Il te faut une form, 2 textbox et 1 bouton
Paramétrage et ouverture du port com au chargement de la fenêtre
Il faut laisser le port com ouvert si tu veux pourvoir avoir accès aux données qui reviennent.
Car ton cas tu le ferme après avoir envoyé des données donc tu ne pourras jamais recevoir le retour de ta demande
En espérant que çà te débloquera
'Chargement de ta fenêtre
Private
Sub Form1_Load(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles
MyBase.Load
'Permet l'utilisation de datareceive
Control.CheckForIllegalCrossThreadCalls =
False
'N° du port de com à utilisé
SerialPort1.PortName =
"COM1"
'Ferme le port si il est ouvert
If SerialPort1.IsOpen =
True
Then
SerialPort1.Close()
End
If
'Paramétrage du port
SerialPort1.BaudRate =
"9600"
SerialPort1.DataBits = 8
SerialPort1.Parity = IO.Ports.Parity.None
SerialPort1.StopBits = IO.Ports.StopBits.One
SerialPort1.Handshake = IO.Ports.Handshake.None
'Ouverture du port
SerialPort1.Open()
End
Sub
Private
Sub btnEnvoi_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles btnEnvoi.Click
'Envoi sur le port série le contenue de la textbox
SerialPort1.WriteLine(txtEnvoi.Text)
End
Sub
Private
Sub SerialPort1_DataReceived(
ByVal sender
As
Object,
ByVal e
As System.IO.Ports.SerialDataReceivedEventArgs)
Handles SerialPort1.DataReceived
'Quand il y a quelquechose dans le buffer de réception çà lit les données et les ajoutes à la textbox
txtReception.Text = txtReception.Text & SerialPort1.ReadExisting.ToString
cs_SEB73460
Messages postés271Date d'inscriptionvendredi 15 avril 2005StatutMembreDernière intervention29 novembre 2022 11 mai 2008 à 09:24
Bonjour Lim,
j'ai essayer le bout de code pour envoyer et recevoir sur le port com
Mais à la fin des caracteres recus dans le textbox j'ai un petit trait vertical en plus a la fin des caracteres ? "
As-tu une idee ?
Mes remerciements
A
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_lim
Messages postés329Date d'inscriptionjeudi 20 novembre 2003StatutMembreDernière intervention10 mai 20147 12 mai 2008 à 09:19
Salut SEB73460
Il est possible que ce soit le codage ASCII d'un caractère de fin de trame du style chr(3) ou autre.
Je ne vois que çà avec les infos que tu me donnes.