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

Windows Forms Discussion :

[Visual C#] Données reçues d'un port série


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 144
    Points : 45
    Points
    45
    Par défaut [Visual C#] Données reçues d'un port série
    Bonsoir à tous,
    Je dois programmer un genre de serveur qui reçoit des requêtes de plusieurs applications et doit communiquer avec des automates programmables par un port série (port COM).
    Je souhaiterais que la réponse reçue par le serveur soit remise à la bonne application, celle qui a fait la requête.
    Existe-t-il un moyen de savoir d'où venait la requête lorsqu'on lit des données provenant du port série avec la fonction SerialPort.Read ?
    Merci d'avance pour vos suggestions.

  2. #2
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Si c'est ton appli qui a écrit dans le port, tu peux le savoir mais pas de façon automatique en gérant cela depuis le client.
    Si c'est une autre, non c'est impossible, tu peux juste constater que des données sont là, de plus, la gestion des ouverture/fermeture risque d'être hasardeuse si tu partage le port entre plusieurs applis.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 144
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par _skip Voir le message
    Si c'est ton appli qui a écrit dans le port, tu peux le savoir mais pas de façon automatique en gérant cela depuis le client.
    Si c'est une autre, non c'est impossible, tu peux juste constater que des données sont là, de plus, la gestion des ouverture/fermeture risque d'être hasardeuse si tu partage le port entre plusieurs applis.
    C'est seulement le serveur qui communique avec le port série, les applications n'y ont pas accès directement.
    Comment puis-je savoir alors d'où ca vient ? Serait-il possible de lire un flag ou un int sur la réponse ?
    Merci d'avance.

  4. #4
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Non tu ne peux pas y faire grand chose.
    Il te suffit de gérer les requetes de tes applications de façon FIFO, c'est à dire écrire et directement ensuite attendre le résultat et le transmettre.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 144
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par _skip Voir le message
    Non tu ne peux pas y faire grand chose.
    Il te suffit de gérer les requetes de tes applications de façon FIFO, c'est à dire écrire et directement ensuite attendre le résultat et le transmettre.
    OK alors je vais devoir programmer un genre de mutex éventuellement avec un numéro de file d'attente comme au supermarché ?

  6. #6
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Il suffit juste de synchroniser l'accès au port... pas grand chose de plus.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 144
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par _skip Voir le message
    Il suffit juste de synchroniser l'accès au port... pas grand chose de plus.
    Tu synchroniserais avec quoi ? avec un mutex ?

  8. #8
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Ca depend tout comment tu as organisé ta classe.
    Si tu as une seule méthode publique qui accède au port soit directement, soit par des méthodes privées de ta classe, elle fera entonnoir si tu lui met simplement l'attribut MethodImpl sur Synchronized.

    Sinon tu peux gérer toi meme avec lock(), je pense pas que tu aies besoin de beaucoup plus car tu ne peux autoriser qu'un seul thread a la fois, donc pas vraiment de cuisine.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 144
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par _skip Voir le message
    Ca depend tout comment tu as organisé ta classe.
    Si tu as une seule méthode publique qui accède au port soit directement, soit par des méthodes privées de ta classe, elle fera entonnoir si tu lui met simplement l'attribut MethodImpl sur Synchronized.

    Sinon tu peux gérer toi meme avec lock(), je pense pas que tu aies besoin de beaucoup plus car tu ne peux autoriser qu'un seul thread a la fois, donc pas vraiment de cuisine.
    ok, merci pour tes suggestions, je vais essayer.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 144
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par _skip Voir le message
    Ca depend tout comment tu as organisé ta classe.
    Si tu as une seule méthode publique qui accède au port soit directement, soit par des méthodes privées de ta classe, elle fera entonnoir si tu lui met simplement l'attribut MethodImpl sur Synchronized.

    Sinon tu peux gérer toi meme avec lock(), je pense pas que tu aies besoin de beaucoup plus car tu ne peux autoriser qu'un seul thread a la fois, donc pas vraiment de cuisine.
    Salut.
    en fait j'ai programmé un mutex, mais de temps en temps des réponses sont interverties (ce n'est pas la bonne application qui recoit la réponse)
    Quelqu'un saurait-il s'il existe quelque chose qui ressemble à un mutex, mais avec une file d'attente préprogrammée ?
    (un peu comme au supermarché quand on prend un numéro avant de faire la queue)
    sinon je pourrai essayer de la programmer moi-même.
    merci d'avance.

  11. #11
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Ca depend tout de comment tu as implémenté

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 144
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par _skip Voir le message
    Ca depend tout de comment tu as implémenté
    en fait, j'ai une fonction qui recoit la requete, la met dans une Queue, et ensuite va attendre la réponse dans une autre Queue.
    Le problème c'est quand des requêtes arrivent quasi simultanément, alors de temps en temps les réponses sont interverties.
    J'ai programmé un mutex, mais le problème n'est pas résolu. C'est pourquoi j'ai pensé à des numéros de file d'attente.
    Merci d'avance pour vos suggestions.

  13. #13
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Tu dois absolument ne gérer qu'une seule file...
    Pourquoi tu ne crées pas une méthode qui écris et qui attend la réponse TOUT de suite de façon bloquante avec un Read + timeout?

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 46
    Points : 36
    Points
    36
    Par défaut
    plutot qu'un mutex, pourquoi pas un semaphore qui te permettrait d'avoir une liste d'attente?

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 144
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par _skip Voir le message
    Tu dois absolument ne gérer qu'une seule file...
    Pourquoi tu ne crées pas une méthode qui écris et qui attend la réponse TOUT de suite de façon bloquante avec un Read + timeout?
    Ca n'est pas possible, car la fonction qui recoit les données est appelée automatiquement et située dans un thread séparé

    Citation Envoyé par warenbe Voir le message
    plutot qu'un mutex, pourquoi pas un semaphore qui te permettrait d'avoir une liste d'attente?
    En fait ca ne me convient pas car je veux un ordre et d'après ce que je lis :
    "Il n'y a aucun ordre garanti d'entrée dans le sémaphore des threads bloqués, tel que premier entré premier sorti ou dernier entré premier sorti."

    En fait je crois que je vais essayer de faire avec un lock et une file d'attente que je vais programmer.

Discussions similaires

  1. affichage des données reçus sur le port série
    Par chitane87 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 14/06/2011, 07h10
  2. Affichage de données reçues sur un port série: problème de type
    Par mah00 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 28/04/2011, 00h42
  3. Gestion de données arrivant par le port série
    Par altivisio dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 16/02/2009, 21h15
  4. Réponses: 6
    Dernier message: 05/01/2009, 22h52
  5. codage des données à l'entrée du port série
    Par sanatou dans le forum Windows
    Réponses: 4
    Dernier message: 09/11/2006, 11h22

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