Problème lecture données rs232

Résolu
archershiro - 30 mai 2013 à 10:35
 Utilisateur anonyme - 31 mai 2013 à 16:58
Bonjours à tous,

J'ai un problème qui me bloque depuis maintenant 1 semaine T_T
Actuellement en stage, je dois récupérer les données qu'envoie un radar, connecter par rs232, sur le PC. Les données envoyées sont sous cette forme:

0103FC07303130030203143201

Dans cette trame il y a la vitesse a laquelle passe les voiture (respectivement les bites 9,11 et 13).

En VBA je dois donc récupérer cette trame, isoler les bites 9,11 et 13 et mettre ceci dans un tableau excel qui enregistre toute les vitesses.

Voilà mon problème, j'utilisais à mon IUT la fonction MSComm (le l'ocx MSComm32) seulement, dans l'entreprise où je travail, les ordinateur n'ont pas ce fameux ocx, j'ai donc essayer de le mettre moi-même mais malheureusement sans succès.

En cherchant sur le net j'ai trouve une fonction (serialport) qui me parementerai peut-être de faire ce que je veux, seulement je n'est jamais utiliser cette procédure et les tutoriaux sur le net ne sont pas très claire.

J'ai quand même essayer de tenter quelque chose, voici mon code:
Private Sub UserForm_Click()
Imports System
Imports System.Threading
Imports System.ComponentModel
Imports System.IO.Ports
Imports System.IO
Imports System.IO.File

    Sub RS232_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles RS232.DataReceived
        Me.Invoke(New EventHandler(AddressOf Affiche_reception))
    End Sub

    Sub Affiche_reception()
        Dim donnee As String = RS232.ReadExisting
        msgrecu.Text &= donnee
    End Sub


End Sub


j'ai donc énormément d'erreurs, tout les sub me disent en erreur qu'il manque une fin d'instruction et les imports ne marche pas non plus.

J'espère que quelqu'un pourra m'aider car je en voit pas du tout comment faire

3 réponses

Utilisateur anonyme
31 mai 2013 à 16:58
Bonjours donc,

D'accord, je te fais la partie RS232 en VB.Net (ce code a été testé et fonctionne)

- Dans une nouvelle "Form" (Form1) tu mets ça:
Option Explicit On
Option Strict On
Public Class Form1
    Dim Rs As New System.IO.Ports.SerialPort 'Création d'un nouvel serailPort
    Dim DonnéeReçue(3) As String

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        If Rs.IsOpen Then Rs.Close() 'Fermeture du port à la fermeture de l'application
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Démarrage:
        AddHandler Rs.DataReceived, AddressOf Rs_DataReceived 'Associe l'événement à un gestionnaire d'événements

        'Réglages du port avec les valeurs les plus courantes):
        Rs.PortName = "COM5" 'Numéro du COM visible dans:
        'Gestionnaire de péripheriques => Ports (COM et LPT) => ...
        Rs.BaudRate = 9600
        Rs.StopBits = System.IO.Ports.StopBits.One
        Rs.Parity = System.IO.Ports.Parity.None
        Rs.DataBits = 8
        If Rs.IsOpen = False Then Rs.Open() 'Ouverture du port
    End Sub

    Private Sub Rs_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)
        RéceptionRS() 'Dès réception de quelque chose il appelle la sub RéceptionRS
    End Sub

    Private Sub RéceptionRS()
        System.Threading.Thread.Sleep(100) 'Une pause de 100 millisecondes, afin de lui laisser le temps de bien tout recevoir par le port
        TraitementDesDonnées(Rs.ReadExisting)
    End Sub

    Private Sub TraitementDesDonnées(ByVal Données As String)
        '0103FC07303130030203143201 
        If Données.Length = 26 Then 'Si la chaine recue contient 26 caracteres
            'Tu dis vouloir lire à l'emplacement 9,11 et 13 :
            DonnéeReçue(0) = Données.ToCharArray(8, 1)
            DonnéeReçue(1) = Données.ToCharArray(10, 1)
            DonnéeReçue(2) = Données.ToCharArray(12, 1)
            EnregistreDansExcel(Données, DonnéeReçue(0), DonnéeReçue(1), DonnéeReçue(2))
        End If
    End Sub
    Private Sub EnregistreDansExcel(ByVal ChaineEntière As String, ByVal Chr_1 As String, ByVal Chr_2 As String, ByVal Chr_3 As String)
        MessageBox.Show("Texte Reçu : " & ChaineEntière & Environment.NewLine & _
                        "Caractere n°  9 : """ & Chr_1 & """" & Environment.NewLine & _
                        "Caractere n° 11 : """ & Chr_2 & """" & Environment.NewLine & _
                        "Caractere n° 13 : """ & Chr_3 & """")
        'A toi maintenant de l'enregistrer dans excel ....
    End Sub
End Class



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
3
Utilisateur anonyme
30 mai 2013 à 17:40
Bonjour,

isoler les bites 9,11 et 13 et mettre ceci dans un tableau excel qui enregistre toute les vitesses

Tu veux dire comme SUR CETTE PAGE ???
Tu veux enregistrer leur vitesse?

Déjà:
1) Le code que tu présentes est une "abomination", un mélange de mauvais goût de VB.NET et VBA (ça ne risque pas de fonctionner!!!).
2) Tu n'as RIEN compris à ce bout de code, et pour cause.
3) Nous ne savons toujours pas dans quel langage précis tu veux développer ton application, du coup: impossible de te répondre


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
archershiro
31 mai 2013 à 08:47
Bonjours

Oui j'veux enregistrer la vitesse, pour pouvoir la mettre sur une feuille excel.

Le code que j'ai donnée je ne le comprend pas moi-même, n'ayant jamais utiliser la fonction serialport je ne sais pas comment faire un programme qui me permeterai d'isoler la vitesse contenu dans ma trame.

Le langage dans lequel je code est du VB.net
0
Rejoignez-nous