Rechercher : dans
Par :

[VB] Emission et réception du port série

Dernière réponse le 12 aoû 2009 à 15:59:24 Dolichotis, le 5 fév 2009 à 20:37:37 
 Signaler ce message aux modérateurs

Bonsoir,

J'essaie d'établir un code qui me permettrait de recevoir des données sur le port série. Mais le débogage bloque sur SerialPort1.ReadLine() quand le port reçoit des données.

Deuxièment quand je teste l'émission de données en écrivant sur le port1 (avec SerialPort1.WriteLine()), la réception ne marche pas (quand je récupère avec ReadLine())

J'ai deux questions : est-ce qu'il est possible d'envoyer et de récupérer les données sur un même port (d'un ordinateur) ?
Comment faire pour lire les données envoyées sur un port série ?

J'ai essayé plusieurs façons : avec serialPort, avec Mscomm, de nouveau avec serialPort...
Y a-t-il quelque chose qu'il faut rajouter ? (ou supprimer ?)

Voici une version avec serialPort...

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        'vérifier sur le port com est ouvert
        Try
            SerialPort1.Open()
        Catch ex As Exception
            MessageBox.Show("Impossible d'ouvrir le port ")
        End Try
    End Sub

    'quand le port 1 recoit des données
    Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        'si des données sont reçues dans le buffer d'entrée
        If SerialPort1.BytesToRead > 0 Then
            Do
                myRxData(SerialPort1.ReadByte)
                If SerialPort1.BytesToRead = 0 Then
                    Exit Do
                End If
            Loop
        End If
    End Sub

    Private Sub myRxData(ByVal mydata As Integer)
        Dim ascChar As String
    
        CheckForIllegalCrossThreadCalls = False

        'format des données du port 1
        ascChar = CChar(ChrW(mydata))
        TextBox1.Text &= ascChar
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'données écrites sur le port 1
        SerialPort1.Write(TextBox2.Text & vbCrLf)
    End Sub


Merci de votre aide !
Configuration: Windows Vista
Internet Explorer 7.0

Meilleures réponses pour « [VB] Emission et réception du port série » dans :
Port série et port parallèle VoirIntroduction aux ports d'entrée-sortie Les ports d'entrée-sortie sont des éléments matériels de l'ordinateur, permettant au système de communiquer avec des éléments extérieurs, c'est-à-dire d'échanger des données, d'où l'appellation d'interface...

1

peacock, le 7 fév 2009 à 08:30:04

Bonjour,

C'est vieux tout cela, ouverture du port // en H3BC H3BD
Il est possible d'envoyé des données sur un port série ou // à une condition de fabriquer un bouchon sur le port à contrôler. petit cablage à faire sur une DB9 série ou DB25 //.
Il vous faut un ACK accusé réception si non le données envoyées sont parties dans le vide.
Je recherche mes progs en espérant qu'ils existent encore.

Cordialement PEACOCK35
http://pagesperso-orange.fr/cortina.cafe/ghost/

Répondre à peacock

2

Dolichotis, le 9 fév 2009 à 13:18:48

Bonjour Peacock !

Comment fabrique-t-on un bouchon sur le port à contrôler ? Qu'est-ce que H3BC H3BD ?
Sinon c'est un port série DB9.

Merci de m'avoir répondu !

Répondre à Dolichotis

3

peacock, le 9 fév 2009 à 14:48:59

Bonjour,
J'ai fait des recherches sur mes disquettes.

Sous QBASIC on indiquait à l'époque l'adresse d'entrée du port ou les données étaient lues ou envoyées.
sur le port LPT1 (centronic DB25).
H3BC PORT d'entrée du LPT1
220H corespondait au port d'entrée de la carte sound sous DOS

Exemple d'un prog en qbasic pour vérifier une EPROM programmer par rapport d'un fichier source
1 REM----------------VEROM--------------
10 CLS
20 PRINT "NOM DU FICHIER DE REFERENCE ?"
30 INPUT F$
40 OPEN "i", #1, F$ + ".rom" OUVRIR LE FICHIER.ROM DE REFERENCE
50 PRINT "ATTENTION LE +5v DOIT ETRE COUPE"
60 OUT &H3BC, 64 tu peux voir l'instruction d'adressage du port LPT
70 PRINT "CONNECTER L'EPROM A LIRE, PUIS PRESSER ENTRER"
80 INPUT Z$
90 PRINT "APPLIQUER LE +5v ,PUIS PRESSER ENTER"
100 INPUT Z$
110 PRINT "-------------COMPARAISON EN COURS------------"
120 G = 0
130 d = 0
140 FOR F = 0 TO 7
150 OUT &H3BC, F
160 B = INP(&H3BD)
170 IF (B AND 64) = 64 THEN d = d + (2 ^ F)
180 NEXT F
190 OUT &H3BC, 32
200 INPUT #1, C
210 IF EOF(1) THEN 250
220 IF C <> d THEN PRINT G, d, "au lieu de", C.....................ERREUR DE LECTURE
230 G = G + 1
240 GOTO 130
250 PRINT "--------------- COUPER LE +5V -----------"
260 BEEP: END

Mode VB
propriété RThreshold du composant MSComm
En VB il faut que le composant MSComm sur VB soit coher
Voila plus simple pour un port série avec une vitesse de transfert de 9600 B
Bon ce prog n'est pas de moi mais il pourra t'aider
/debut code

Private Sub Form_Load()
Form1.Caption = "Mode auto"
With MSComm1
.CommPort = 1
.Handshaking = 0
.RThreshold = 1
.RTSEnable = True
.Settings = "9600,n,8,1"
.SThreshold = 1
.PortOpen = True
End With
Text1.Text = ""
End Sub

Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False 'on ferme le port quand l'appli quitte
End Sub

Private Sub MSComm1_OnComm()
Dim InBuff As String

Select Case MSComm1.CommEvent
' On effectue la gestion des erreurs (cf. le modèle ci-dessus)
' Ici, on gère en fait pas grand-chose, mais c'est pour illustrer la démarche ;)

'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)

'Chouette! on a reçu des données :)
Case comEvReceive
Dim tampon() As Byte
tampon = MSComm1.Input
Call Traitement(tampon) 'traitement données

Case comEvSend ' il y a des caractères à envoyer

Case comEvEOF 'on a reçu le caractère EOF
End Select
End Sub

Sub Traitement(tampon As String)

'cette procédure sert à traiter l'information reçue dans le tampon
Badge.SelStart = Len(Badge.Text)
Badge.SelText = tampon 'ici, on affiche le résultat dans un champ de texte
End Sub
/fin code

Répondre à peacock

4

 freedom, le 12 aoû 2009 à 15:59:24

Essai avec ceci :

Private Sub Reception_Trame(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles portComVirtuel.DataReceived

Dim strTmp As String = ""

Try
If portComVirtuel.ReadBufferSize > 0 Then

'Recupere les donnees
strTmp = portComVirtuel.ReadExisting

'Vide le buffer
portComVirtuel.DiscardInBuffer()

myRxData(strTmp)

End If
Catch ex As Exception
MsgBox("Erreur durant la réception" & vbCrLf & vbCrLf & ex.ToString)
End Try

End Sub

Répondre à freedom