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

C# Discussion :

Communication sur le port sériel


Sujet :

C#

  1. #1
    Membre régulier Avatar de TheCaribouX
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 255
    Points : 122
    Points
    122
    Par défaut Communication sur le port sériel


    Bonjour tout le monde,

    je me permets d'écrire dans la rubrique C# dans le sens où le projet que je vais développer sera dans ce language, cependant, la première question n'est que de très loin liée au language.

    Voila, mon programme devra communiquer avec un device sur un port seriel et j'aurais des questions quand à la sécurité de transfert des messages:

    - si je transmets un checksum à la fin de chaque message qui sera vérifié par celui qui récéptionne, est-ce suffisemment sur quand à l'intégrité des données où y'a t'il d'autres méthodes à mettre en place?

    - mon application étant composée d'une GUI, j'aurais également aimé savoir comment mettre en place au mieux une telle communication, pour ne pas freezer l'interface pendant les communication, les attentes de messages, etc. Etant un débutant en C# j'ai evidemment pensé à la solution du multithreading, mais j'ai également vu un article sur le net parlant de "backgroundWorker". Quelqu'un saurait-il m'éclairer la dessus?

    En passant, étant doné que c'est mon premier post, j'en profite pour remercier les admins de ce site, il m'a déjà énormément aidé sur de précédents projets

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2008
    Messages : 58
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par TheCaribouX Voir le message


    Bonjour tout le monde,

    je me permets d'écrire dans la rubrique C# dans le sens où le projet que je vais développer sera dans ce language, cependant, la première question n'est que de très loin liée au language.

    Voila, mon programme devra communiquer avec un device sur un port seriel et j'aurais des questions quand à la sécurité de transfert des messages:

    - si je transmets un checksum à la fin de chaque message qui sera vérifié par celui qui récéptionne, est-ce suffisemment sur quand à l'intégrité des données où y'a t'il d'autres méthodes à mettre en place?

    - mon application étant composée d'une GUI, j'aurais également aimé savoir comment mettre en place au mieux une telle communication, pour ne pas freezer l'interface pendant les communication, les attentes de messages, etc. Etant un débutant en C# j'ai evidemment pensé à la solution du multithreading, mais j'ai également vu un article sur le net parlant de "backgroundWorker". Quelqu'un saurait-il m'éclairer la dessus?

    En passant, étant doné que c'est mon premier post, j'en profite pour remercier les admins de ce site, il m'a déjà énormément aidé sur de précédents projets
    Le port série en question, c'est du bluetooth ? ou bien c'est un cable RS232 ?
    J'ai un peu de mal sur la nécessité de garantir l'intégrité sur un lien série, peux tu donner un peu plus d'explications sur le but de ton projet ?

    Je n'ai pas eu l'occasion d'utiliser le background worker, cependant pour éviter l'attente de réponse, tu peux tout simplement utilisé des threads (qui est à peu près la mm chose que le background worker). Attention, dans ce thread si tu dois raffraichir l'UI, il ne faut jamais appeler un controle directement de ce thread sinon tu risquerais d'avoir de drole de résultats. Il faut appeler le contrôle toujours depuis le thread dans lequel il a été instancié. Pour cela, tu disposes de méthode Invoke().

  3. #3
    Membre régulier Avatar de TheCaribouX
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 255
    Points : 122
    Points
    122
    Par défaut
    Merci de la réponse!
    Pour ce qui est de la partie communication, il s'agit de rs232, et le device en question est un device du genre pocket pc (en plus restreint niveau ffonctionnalité ) en relation à des applications médicales, c'est dans ce sens là où je ne peux pas vraiment me permettre d'avoir des informations corrompues, que ce soit dans un sens comme dans l'autre.

    Pour ce qui est de la méthode invoke, je vais aller m'informer avant de poser des questions bêtes

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2008
    Messages : 58
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par TheCaribouX Voir le message
    Merci de la réponse!
    Pour ce qui est de la partie communication, il s'agit de rs232, et le device en question est un device du genre pocket pc (en plus restreint niveau ffonctionnalité ) en relation à des applications médicales, c'est dans ce sens là où je ne peux pas vraiment me permettre d'avoir des informations corrompues, que ce soit dans un sens comme dans l'autre.

    Pour ce qui est de la méthode invoke, je vais aller m'informer avant de poser des questions bêtes
    Toi tu développes quel(s) application(s) ? Coté pocket + coté PC ou bien que coté PC ... car si ce n'est pas les 2 pour l'intégrité du pourra n'implémenter que ce que te permet le terminal.
    Pour info, sur RS232 tu as pas mal de possibilité pour faire de la vérification d'intégrité.
    Alors de mémoire tu as :
    La Vitesse de transfert en bauds
    La taille de donnée (8bit en général)
    Les bits de stop 1 / 1.5 / 2
    A partir de la ca concerne l'intégrité
    La parité : Paire / Impaire
    Controle RTS / CTS
    et il y en a un dernier ACK je crois mais je ne suis pas sur.
    1) Pour assurer ton transfert, 1er point, limiter la taille du cable (pas plus de 5m).
    2) Limité le débit à ce dont tu as besoin 19200 c'est souvent suffisant si tu ne fait que du transfert de donnée
    3) Tu peux augmenter le bits de stop, je crois que ca rend le signal plus résistant au perturbation
    4) Mettre une parité Paire ou impaire (je ne connais pas la différence), dans tous les cas ca fait un checksum.
    5) Pour le fun tu peux mettre le RTS / CTS mais faudrait quand mm zieuter le but effectif.

  5. #5
    Membre régulier Avatar de TheCaribouX
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 255
    Points : 122
    Points
    122
    Par défaut
    Je dois développer l'application coté PC, mais j'ai tout à fait la possibilité de redéfinir le protocole coté pocket (ca va être sous-traité).

    Je m'apercois grâce à ta réponse que j'ai fait une légère erreur de compréhension de l'ancien programme qui était chargé de faire ce que je vais faire (je vais ajouter des fonctionnalités...). Au niveau des messages transférés, il s'agissait à mes yeux d'un certains nombres de valeurs en hexa, mais d'après ce que tu me dis, il y'a dejà un controle au niveau du transfert des valeurs hexa separemment? (un byte -> 2 hexa, si je ne m'abuse?)

    Je n'ai pas trouvé d'informations quand à l'effet du bit de stop, es tu sûr qu'en mettre 2 à la place de un ajoute à la sécurité? (non pas que je te mette en doute - j'oserais pas...- mais si tu as une source... )

    Pour ce qui est de la taille du cable c'est tout bon, et le débit c'était aussi déjà fait. Concernant la parité, elle est pour le moment mise à "None", à ton avis je devrais le changer ou bien est ce que y'aurait une raison (de spécification du device -j'y connais pas grand chose en hardware) qui pourrait l'empecher?

    J'ai vu qu'en C# y'avait moyen de définir un certain Handshake en RTS, je vais me renseigner là dessus.

    De mon coté, lorsque je parlais de checksum, il s'avère que l'ancien prog faisait deux choses, la première, c'est à la fin de chaque message (array d'hexa disons), il ajoutait un checksum de la totalité du message, ce qui en soit me parait une bonne idée pour assurer l'intégrité du message total. Ensuite, lors de l'envoi de beaucoup de données (qui alors nécessite plusieurs messages), il envoyait un message supplémentaire avec un checksum plus complexe de la totalité des messages précédemment envoyés, et c'est poru ce point que je me demandais si c'est une démarche connue et approuvée ou alors, comme j'aurais tendance à le penser, une tentative d'en "rajouter une couche" pour pas grand chose (à ce moment la, pourquoi pas envoyer encore un "checksum du checksum des checksum...)

    Voilà navré de faire des messages de 15 kilomètres mais je préfère etre suffisemment explicite. Merci encore pour votre aide

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2008
    Messages : 58
    Points : 74
    Points
    74
    Par défaut
    Voici un petit lien sur la parité qui fait un "checksum" très léger ... ici

    Et effectivement, bien que je n'aurait pas conseiller de le faire (sauf cas particulier), il semble être coutume de rajouter un checksum. Il y a un petit PDF sympa ici

    Pour en revenir sur la parité, je pense qu'il est nécessaire dans ton cas de l'implémenter. Paire ou impaire peut importe.

    Pour le bit de stop, je t'avoue que je ne connais pas trop mais je pense que l'avantage de mettre 2 bit de stop fait que la detection de fin de trame est plus robuste. Après savoir dans quelles conditions c'est préférable ...

    Bon courage,

  7. #7
    Membre régulier Avatar de TheCaribouX
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 255
    Points : 122
    Points
    122
    Par défaut
    Sympa les liens, celui de theoelec m'a bien aidé à enfin comprendre cette histoire de parité (quoique l'exemple de parité paire me semble etre impaire et inversemment )

    Pour ce qui est de DTS, j'ai trouvé ce lien : http://www.taltech.com/TALtech_web/r.../intro-sc.html
    (des fois que quelqu'un tombe sur ce post et ait besoin d'un lien supplémentaire)
    et du coup je pense faire un handshake "maison" et pas hardware.

    Mon supérieur m'a dit comme toi que le checksum supplémentaire "c'est bien", alors bon, j'vais le rajouter, je suis pas à ça prêt

    Finalement je vais encore tâcher de trouver un document qui, disons, appuie le fait que les bit de stop supplémentaires augmente la sécurité, mais dans l'ensemble, t'as répondu à toutes mes questions, alors tout d'abord merci beaucoup! (t'as aidé la recherche médicale en quelque sorte ) et ensuite, bah jvais tacher de trouver comment mettre ce sujet en "répondu" pour pas polluer encore plus le forum C# avec des questions sur le port seriel

    merci!

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

Discussions similaires

  1. communication sur un port Serie (Rs232)
    Par elgaied dans le forum VB.NET
    Réponses: 2
    Dernier message: 03/04/2010, 14h03
  2. Réponses: 2
    Dernier message: 11/03/2010, 11h51
  3. Communication sur le port série
    Par pitikak dans le forum Composants VCL
    Réponses: 5
    Dernier message: 27/11/2008, 11h03
  4. Ecouter communication sur le port serie
    Par ludvo dans le forum C++
    Réponses: 5
    Dernier message: 21/11/2006, 17h17
  5. Communication sur le port parallèle
    Par zekicker dans le forum MFC
    Réponses: 1
    Dernier message: 11/12/2005, 13h39

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