IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Affichage sur le retour sur un serialport [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2006
    Messages : 108
    Par défaut Affichage sur le retour sur un serialport
    Bonjour,

    Je viens vers vous pour avoir des avis et / ou explications par rapport à mon soucis.

    Explications:

    Je fais un programme avec un Serialport, conf, émission et retour sont opérationnel avec le système avec lequel il doit dialoguer.

    La problème est au niveau de la réception des informations.

    Exemple :

    - Émission d'une valeur au format "A & ValeurNumérique (ex : A12.4)
    - Prise en compte par le système en écoute.
    - Réception de la Valeur A12.4.

    Vous me direz, "C'est normal!!" Oui mais le format d'attendu est de cette forme :

    A12.4
    Atten : 12.40 (xx)
    Done

    J'ai bien un retour, mais si je souhaite avoir le message en totalité il faut que je revalide mon émission, ou le message est entier si je rentre une nouvelle valeur.

    J'obtiens l'affichage correct si je défile le programme en mode pas à pas.

    J'ai essayé avant la lecture du paramètre:
    La valeur 50 est le mini que j'ai essayé, j'ai essayé jusqu'à 500, mais aucun changement.

    Questions :

    - Qu'elle serait la raison de cette "non" lecture en totalité?
    - Existe t il un moyen d'avoir la trame entière comme obtenue lors du mode pas à pas?
    - Pourquoi le mode pas à pas me permet d'avoir la trame totalité? Car pour ce point il n'y a que le paramètre temps qui joue ( d'ou l'essai du sleep).

    Merci d'avance.

    Cordialement.

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Juillet 2012
    Messages : 8
    Par défaut
    je sais pas si ça va t'aider mais j'ai fait ça:

    PC:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    Imports System.IO
    Imports System.IO.Ports
    Imports System.Threading
     
    Public Class Form1
     
        Dim NewTemp As String
        Dim etat As Integer = 0
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Timer1.Start()
            Try
                With SerialPort1
                    .PortName = "COM3"
                    .BaudRate = 9600
                    .Parity = IO.Ports.Parity.None
                    .DataBits = 8
                    .StopBits = IO.Ports.StopBits.One
                    .Handshake = IO.Ports.Handshake.None
                    .Encoding = System.Text.Encoding.ASCII
                End With
                SerialPort1.Open()
     
     
     
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
     
     
        End Sub
     
        Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
            NewTemp = SerialPort1.ReadLine
     
        End Sub
     
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            SerialPort1.Write(etat)
            Label1.Text = NewTemp
     
            If NewTemp = 1 Then
                OvalShape1.FillColor = Color.White
     
            ElseIf NewTemp = 0 Then
                OvalShape1.FillColor = Color.Silver
     
            Else : MsgBox("erreur de transmition")
     
            End If
     
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            etat = 1
        End Sub
     
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            etat = 0
        End Sub
    End Class
    µcontroleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    int etat = 0;
     
    void setup() {                
      pinMode(13, OUTPUT);
      Serial.begin(9600);  
    }
     
    void loop() {
    etat = Serial.read()-'0'
     
        if (etat == 1)
          {digitalWrite(13, HIGH);  // set the LED on
           Serial.println(etat); }   
     
        else if (etat == 0)
          {digitalWrite(13, LOW);   // set the LED off
           Serial.println(etat); }     
    }

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2006
    Messages : 108
    Par défaut Suite #1
    Merci de ta réponse, cela ma apporté des informations et un début de solution mais mon problème reste présent.

    Encore merci.

    Cordialement.

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Juillet 2012
    Messages : 8
    Par défaut
    La non prise en compte de tout ton texte, peut être dû au faite que tu à une trop grosse pile de données qui attend de passer dans le port serial.
    Le récepteur doit "aller" moins vite que l' émetteur.

  5. #5
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 18
    Par défaut Affichage sur le retour sur un serialport
    pourquoi ne pas ajouter un caractère particulier (par le système distant) à la fin de ton message de retour, par exemple #

    ensuite tu utilise quelques chose de ce genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            SerialPort1.ReadTimeout = 1000
            Try
                reponse = SerialPort1.ReadTo("#")      ' # est lu mais ne fait pas partie de reponse
                If reponse.EndsWith("Done") = True Then
                    msgBox( "OK")
                    ' Ton traitement ici
                Else
                    MsgBox("mauvaise réponse")
                End If
            Catch ex As TimeoutException
                  MsgBox("Le système éloigné ne répond")
            End Try
    Bon courage,

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2006
    Messages : 108
    Par défaut Suite #2 et fin
    Bonjour,

    J'ai enfin réussi, grâce ne parti au code de konobee.

    Vous allez me dire Plagia, que nenni.

    Je m'explique :
    Dans le code konobee utilise un Timer pour "actualiser" et mettre à jour les données.

    Je me suis inspiré de cela pour me permettre de boucler le read de mon port afin d'avoir la trame que je souhaité.

    Détails :
    1 : Je définit le timer qui contient la lecture du port.
    2 : Je contrôle que mes données sont non nul.
    3 : Je fais une recherche de chaine de caractères grace à la fonction InStr.
    4 : J'affiche mes données.

    Voilà en gros ma solution qui fonction.

    Je remercie donc Konobee pour ce pti coup de pouce.

    Un merci également à aoumnad pour sa proposition, mais hélas vue après.

    J'essayerai de voir cela optimise mon code ou pas.

    En tous merci pour votre aide.

    Ps: Je mettrai le code ultérieurement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment éviter les retours sur l'affichage standard
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 22/09/2010, 22h47
  2. Réponses: 6
    Dernier message: 15/11/2007, 12h31
  3. Réponses: 3
    Dernier message: 16/02/2007, 12h35
  4. Pbs d'affichage d'une image sur un panel
    Par ysr1 dans le forum C++Builder
    Réponses: 2
    Dernier message: 23/09/2004, 09h55
  5. pb d'affichage d'info stoké sur Bd
    Par krown dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/05/2003, 09h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo