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 :

Probleme de voie Serie


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Ingenieur BE
    Inscrit en
    Novembre 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingenieur BE

    Informations forums :
    Inscription : Novembre 2008
    Messages : 21
    Par défaut Probleme de voie Serie
    bonjour, je viens de me mettre a .NET et je cherche pour le moment a faire synchroniser un appareil électronique avec mon programme ceci dans le but de faire un bootloader pour DSP texas. mon code est entièrement fonctionnel et ca fonctionne. Mais , parfois, et sur certaines machines, la synchronisation ne se fait pas, ou est anarchique. cela m'arrive même parfois sur ma machine . J'ai refais le même code en VB6 et cela fonctionne sans problème. Je remet donc en cause un soucis de gestion de ma voie série sur .NET. Si quelqu'un a des conseils a me donner, je suis preneur, peut-être un problème de configuration ?

    Merci a vous pour tous les conseils que vous pourriez me donner.

    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
    '================================================================================'
    	'================================================================================'
       		listbox1.Items.Add (" ")
      		listbox1.Items.Add ("Synchronisation ...")
      		listbox1.Items.Add (" ")
     
      		Select Case comboBox2.Text
    			Case "9600" : rs232.BaudRate = 9600
    			Case "19200" : rs232.BaudRate = 19200
    			Case "38400" : rs232.BaudRate = 38400
    		End Select
     
    		if cmbVITESSE.Text="12MHz" then
    			rs232.ReadTimeout = 20
    			rs232.WriteTimeout = 20
    		Else
    			rs232.ReadTimeout = 10
    			rs232.WriteTimeout = 10
    		End If
     
    		OVERFLOW = false
    		rs232.Open()
    		Handle = environment.TickCount
    		Do
    			rs232.Write("a")
    			application.DoEvents
    '			System.Threading.Thread.Sleep(20)		
    			If rs232.BytesToRead()>0 Then 
    				strCara = rs232.ReadByte
    			End If
    		Loop While strCara <> asc("a") And Handle + 5000 > environment.TickCount
     
    		rs232.Close()
    		if Handle + 5000 < environment.TickCount then goto ERREUR

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    tu as essayé de jouer sur les autres paramètres du SerialPort ? Handshake, Parity, StopBits, etc...

  3. #3
    Membre averti
    Profil pro
    Ingenieur BE
    Inscrit en
    Novembre 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingenieur BE

    Informations forums :
    Inscription : Novembre 2008
    Messages : 21
    Par défaut
    Pour la configuration du port j'en suis sur. c'est le même que j'ai appliqué pour VB6 ( 9600 bauds- 1 start - 1 stop - no parity)

    le seul paramètre sur lequel je peux influer sur la voie serie (du moins a mon sens) sont le ReadTimeout et le WriteTimeout mais cela n'a rien changé.

    j'avais pensé que le fait de laisser l'appli lire les messages WINDOWS plantait le systeme. Mais je comprend pas pourquoi, la voie serie se gere normalement tout seul. Et ce n'est pas comme si j'attendais un flot de donné, je n'attend qu'un seul caractère.

    J'ai pas essayer de sortir cette simple routine sur un thread dédié, mais bon si je doit parallélise a chaque fois que je dois écrire sur le port serie, c'est pas gagné.

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    le truc c'est que c'est codé à la vb6 ...

    il faut en effet déporter ca sur un thread (celà n'interdit pas de faire une classe qui va bien et de la reprendre à chaque fois, on ne réécrit pas à chaque fois ce qu'on a déjà écrit)

    doevents, c'est plus qu'interdit en vb6, donc ca doit l'etre aussi en vb.net

    et faire le write à chaque tour, c'est étrange ...

    pour les goto erreur, il vaut mieux utiliser des try catch


    et subtilité à tenter avant de modifier tout le code car il doit pouvoir fonctionner, meme s'il est pas écrit comme il faut : convertir tout ce que tu veux envoyer en tableau d'octet, sur certains capteurs j'avais eut des soucis en envoyant des string, un peu d'anarchie comme tu dis...
    il doit y avoir des fonctions dans le framework pour faire ca mais je les ai plus en tete
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre averti
    Profil pro
    Ingenieur BE
    Inscrit en
    Novembre 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingenieur BE

    Informations forums :
    Inscription : Novembre 2008
    Messages : 21
    Par défaut
    Pour le goto Erreur je defini simplement un time overflow

    Pour l'ecriture je fais une synchronisation de vitesse avec le DSP. j'envoi le caractere en continu jusqu'a ce qu'il me le renvoye correctement.

    Pour le DoEvents cela fait un petit moment que je code en VB6 et jamais je n'avais vu que c'était interdit. M'enfin je ne suis pas un as de la programmation. Et les threads avec VB6 c'est pas toujours la panacée.

    Je vais essayer de casser mon code pour inclure ça dans une thread le problème viens probablement de là. Bien que pour moi, a partir du moment ou la donnée est dans l'UART (en entrée ou en sortie) je ne voie pas vraiment pourquoi elle se perdrait, même si windob est sollicité par un processus un peu plus long que les autres.

    Par contre effectivement c'est codé a la VB6. Je n'ai pas encore saisi toutes les subtilités de .NET, peut-etre que ton conseil de passer en tableau d'octet est la solution. Je vais commencé par ca et on verra ensuite pour la thread

    Merci de tes conseils

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : Février 2006
    Messages : 565
    Par défaut
    Je vois que tu as bien pris en compte les paramétres du genre parité, stop, vitesse de communication, timeout mais qu'en est il des protocoles de communication (DTS/RDS, XON/XOFF, ...) ?

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    Citation Envoyé par Bartholivier Voir le message
    Pour le goto Erreur je defini simplement un time overflow
    les goto c'est plus utilisé ... (enfin ca ne gène en rien le fonctionnement, peut etre juste la lisibilité du code)

    Citation Envoyé par Bartholivier Voir le message
    Pour l'ecriture je fais une synchronisation de vitesse avec le DSP. j'envoi le caractere en continu jusqu'a ce qu'il me le renvoye correctement.
    étrange, moi j'attendrais quelques 10aines de ms avant de renvoyer, m'enfin ca dépend de ce que tu as de l'autre coté ...

    Citation Envoyé par Bartholivier Voir le message
    Pour le DoEvents cela fait un petit moment que je code en VB6 et jamais je n'avais vu que c'était interdit. M'enfin je ne suis pas un as de la programmation.
    le doevents est pratique mais très risqué, imaginons une boucle for avec un doevents, et un traitement qui utilise les variables boutons ou autre, l'utilisateur clic sur la croix => fermeture imédiate de l'appli car le bouton n'existe plus alors que le doevents vient de se finir et cherche à accéder au bouton

    Citation Envoyé par Bartholivier Voir le message
    Et les threads avec VB6 c'est pas toujours la panacée.
    je savais pas qu'on pouvait multithreader du vb6 ...
    enfin la le but de multithreader, c'est pas du tout pour que la com se passe bien, c'est pour pas figer l'interface utilisateur


    Citation Envoyé par Bartholivier Voir le message
    Par contre effectivement c'est codé a la VB6. Je n'ai pas encore saisi toutes les subtilités de .NET, peut-etre que ton conseil de passer en tableau d'octet est la solution. Je vais commencé par ca et on verra ensuite pour la thread
    Merci de tes conseils
    à tester en premier avant de casser tout comme je disais, ca se trouve c'est juste ca
    enfin si t'as déjà vérifié que la com se passe bien depuis ce pc avec un soft vb6 ou autre


    Citation Envoyé par ddaime Voir le message
    Bizarre ! Car toute communication entre 2 périphériques, même avec une liaison série, impose un protocole de communication. Pour la liaison série on utilise le mode XON/XOFF, DTS/RTS et quelques autres.
    moi j'ai rarement vu de matériel ou il fallait activé un controle de flux ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. probleme de liaison serie
    Par chirippa dans le forum LabVIEW
    Réponses: 0
    Dernier message: 07/08/2011, 14h04
  2. Probleme Communication Port Serie
    Par Rod-III-sh dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 26/10/2009, 15h07
  3. probleme de connection serie avec Tcomport
    Par lokmahze dans le forum C++Builder
    Réponses: 1
    Dernier message: 07/01/2008, 15h54
  4. probleme avec une carte pci port serie(netmos 9835)
    Par chiroke dans le forum Composants
    Réponses: 1
    Dernier message: 03/05/2006, 13h01
  5. [Port Serie]Probleme d'ecriture sur port serie
    Par GETah dans le forum Windows
    Réponses: 2
    Dernier message: 20/06/2005, 10h43

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