Grstion port série rs232 en visual studio 2010

Signaler
Messages postés
3
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
28 mai 2012
-
Messages postés
14824
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 octobre 2021
-
Bonjour,

J'ai une balance avec port série RS 232 dont j'aimerais récupérer les données avec visual studio 2010 et le contrôle SerialPort.
Est-il possible de scanner le port et de récupérer les données au fur et à mesure ? pour par exemple déclancher une action si le poids dépasse une certaine valeur. Actuellement j'arrive seulement à récupérer les données si j'appui sur la touche Print de la balance.

Ensuite les données récupérées se présentent sous ce format:
- ? ? ? ?0.252 ? kg ? ? ?
Comment récupérer uniquement le poids ?



J'utilise le code suivant:

'Serial Port Interfacing with VB.net 2010 Express Edition
'Copyright (C) 2010 Richard Myrick T. Arellaga
'
'This program is free software: you can redistribute it and/or modify
'it under the terms of the GNU General Public License as published by
'the Free Software Foundation, either version 3 of the License, or
'(at your option) any later version.
'
'This program is distributed in the hope that it will be useful,
'but WITHOUT ANY WARRANTY; without even the implied warranty of
'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
'GNU General Public License for more details.
'
' You should have received a copy of the GNU General Public License
' along with this program. If not, see <http://www.gnu.org/licenses/>.

Imports System
Imports System.ComponentModel
Imports System.Threading
Imports System.IO.Ports


Public Class FrmMain

Dim myPort As Array 'COM Ports detected on the system will be stored here
Delegate Sub SetTextCallback(ByVal [text] As String) 'Added to prevent threading errors during receiveing of data

Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'When our form loads, auto detect all serial ports in the system and populate the cmbPort Combo box.
myPort = IO.Ports.SerialPort.GetPortNames() 'Get all com ports available
CmbBaud.Items.Add(1200) 'Populate the cmbBaud Combo box to common baud rates used
CmbBaud.Items.Add(2400)
CmbBaud.Items.Add(4800)
CmbBaud.Items.Add(9600)

For i = 0 To UBound(myPort)
CmbPort.Items.Add(myPort(i))
Next
CmbPort.Text = CmbPort.Items.Item(0) 'Set cmbPort text to the first COM port detected
CmbBaud.Text = CmbBaud.Items.Item(0) 'Set cmbBaud text to the first Baud rate on the list

BtnDisconnect.Enabled = False 'Initially Disconnect Button is Disabled

End Sub

Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnConnect.Click
SerialPort1.PortName = CmbPort.Text 'Set SerialPort1 to the selected COM port at startup
SerialPort1.BaudRate = CmbBaud.Text 'Set Baud rate to the selected value on

'Other Serial Port Property
SerialPort1.Parity = IO.Ports.Parity.Odd
SerialPort1.StopBits = IO.Ports.StopBits.One
SerialPort1.DataBits = 8
SerialPort1.Open() 'Open our serial port

BtnConnect.Enabled = False 'Disable Connect button
BtnDisconnect.Enabled = True 'and Enable Disconnect button

End Sub

Private Sub btnDisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnDisconnect.Click
SerialPort1.Close() 'Close our Serial Port

BtnConnect.Enabled = True
BtnDisconnect.Enabled = False
End Sub

Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSend.Click
SerialPort1.Write(TxtTransmit.Text & vbCrLf) 'The text contained in the txtText will be sent to the serial port as ascii
'plus the carriage return (Enter Key) the carriage return can be ommitted if the other end does not need it
End Sub

Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
ReceivedText(SerialPort1.ReadExisting()) 'Automatically called every time a data is received at the serialPort
End Sub

Private Sub ReceivedText(ByVal [text] As String)
'compares the ID of the creating Thread to the ID of the calling Thread
If Me.RtbReceived.InvokeRequired Then
Dim x As New SetTextCallback(AddressOf ReceivedText)
Me.Invoke(x, New Object() {(text)})
Else
Me.RtbReceived.Text &= [text]
End If
End Sub

Private Sub cmbPort_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmbPort.SelectedIndexChanged
If SerialPort1.IsOpen = False Then
SerialPort1.PortName = CmbPort.Text 'pop a message box to user if he is changing ports
Else 'without disconnecting first.
MsgBox("Valid only if port is Closed", vbCritical)
End If
End Sub

Private Sub cmbBaud_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmbBaud.SelectedIndexChanged
If SerialPort1.IsOpen = False Then
SerialPort1.BaudRate = CmbBaud.Text 'pop a message box to user if he is changing baud rate
Else 'without disconnecting first.
MsgBox("Valid only if port is Closed", vbCritical)
End If
End Sub
End Class

Merci de votre aide.
Cordialement.

1 réponse

Messages postés
14824
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 octobre 2021
157
Bonjour,

Quand vous postez un code, merci de lire le point 2 de ma signature.

Sinon, quand tu mets à jour le texte, contrôle sa valeur.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---