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 :

Affichage List C#


Sujet :

C#

  1. #1
    Invité
    Invité(e)
    Par défaut Affichage List C#
    Bonjour , svp j'ai mon code qui doit m'afficher des registres modbus pour 6 ip

    Voila mon code :

    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using EasyModbus;
     
    namespace ConsoleApp7
    {
        class Program
        {
            static void Main(string[] args)
            {
                var ipadresses = new List<string>();
                int i = 1;
                ipadresses.Add("194.176.3.14");
                ipadresses.Add("194.176.3.10");
                ipadresses.Add("194.176.3.15");
                ipadresses.Add("194.176.3.19");
                ipadresses.Add("194.176.3.20");
                ipadresses.Add("194.176.3.24");
     
                List<List<int>> valeurs = new List<List<int>>();
                List<int> registrevaleurs = new List<int>();
                List<int> registrevaleurs1 = new List<int>();
                List<int> registrevaleurs2 = new List<int>();
     
                foreach (string ip in ipadresses)
                {
                    {
     
                        ModbusClient modbusClient = new ModbusClient(ip, 502);
                        modbusClient.Connect();
                        int[] readimputregistre = modbusClient.ReadInputRegisters(1, 10);
                        bool[] readCoils = modbusClient.ReadCoils(1, 5);
                        bool[] readDiscreteInputs = modbusClient.ReadDiscreteInputs(1, 9);
     
                        foreach (int y in readimputregistre)
                        {
                            registrevaleurs.Add(y);
                        }
     
                        valeurs.Add(registrevaleurs);
     
                        foreach (bool x in readCoils)
                        {
                            registrevaleurs1.Add(Convert.ToInt32(x));
                        }
                        valeurs.Add(registrevaleurs1);
     
                        foreach (bool z in readDiscreteInputs)
                        {
                            registrevaleurs2.Add(Convert.ToInt32(z));
                        }
                        valeurs.Add(registrevaleurs2);
                        modbusClient.Disconnect();
                    }
                    foreach (int x in registrevaleurs)
                    {
                        Console.WriteLine("ReadInputRegisters = "+ x);
                    }
                    i++;
     
                    foreach (int y in registrevaleurs1)
                    {
                        Console.WriteLine("ReadCoils = " + y);
                    }
                    foreach (int z in registrevaleurs2)
                    {
                        Console.WriteLine("ReadDiscreteInputs = " + z);
                    }
                }
     
     
                /* for (i = 1; i < registrevaleurs2.Count; i++)
                 {
                     Console.WriteLine("Value of imputregistre " + i + " est " + registrevaleurs2[i].ToString());
                     // Console.WriteLine("Value of HoldingRegisters" + j + " est " + readHoldingRegisters[j].ToString());
                 }*/
                /*  for (i = 1; i < registrevaleurs1.Count; i++)
                  {
                     // Console.WriteLine("ReadDiscreteInputs " + i + " est " + registrevaleurs[i].ToString());
                  }
     
                  for (i = 0; i < registrevaleurs1.Count; i++)
                  {
                      Console.WriteLine("imputregistre_wago " + i + " est " + registrevaleurs1[i].ToString());
                  }*/
                //int valeur = valeurs[5][1];
                //   Console.WriteLine("test "+ valeur);
     
                Console.Write("Press any key to continue . . . ");
                Console.ReadKey(true);
     
            }
        }
    }

    et ce qui m'affiche en haut de consule qui est bon et qui correspondant à ce que je veux

    Nom : Capture.JPG
Affichages : 457
Taille : 64,7 Ko

    mais juste en dessus il m'affiches d'autres registres que je sais pas d'ou il les a pris

    Nom : Capture2.JPG
Affichages : 422
Taille : 91,2 Ko


    Je sais que c'est un probléme d’accolades quelque part , y a quelqu'un qui peut m'aider à bien afficher mes registres pour chaque ip de la liste des ip

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Bonjour,

    En regardant ton code, j'ai remarqué plusieurs choses, mais tout d'abord, je crois qu'il faudrait que tu renommes certaines variables pour y voir plus clair :

    Si tu renommes :
    • registrevaleurs en registreInputValeurs
    • registrevaleurs1 en registreCoilValeurs
    • registrevaleurs2 en registreDiscreteValeurs


    Et :

    • x en myInputValue
    • y en myCoilValue
    • z en myDiscriteValue


    Tu devrais y voir beaucoup plus clair et repérer les endroits où potentiellement, selon ce que j'ai observé, tu as mélangés les variables ;-)

    A+ :-)
    K

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci pour votre réponse , le voila mon code aprés modification , j'ai pu avoir les registres que je veux pour chaque ip

    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using EasyModbus;
     
    namespace ConsoleApp7
    {
        class Program
        {
            static void Main(string[] args)
            {
                var ipadresses = new List<string>();
     
                ipadresses.Add("194.176.3.14");
                ipadresses.Add("194.176.3.10");
                ipadresses.Add("194.176.3.15");
                ipadresses.Add("194.176.3.19");
                ipadresses.Add("194.176.3.20");
                ipadresses.Add("194.176.3.24");
     
                List<List<int>> valeursregistres = new List<List<int>>();
                List<int> read_imputregistre = new List<int>();
                List<int> read_Coils = new List<int>();
     
     
                foreach (string ip in ipadresses)
                {
                        ModbusClient modbusClient = new ModbusClient(ip, 502);
                        modbusClient.Connect();
                        int[] readimputregistre = modbusClient.ReadInputRegisters(1, 10);
                        bool[] readCoils = modbusClient.ReadCoils(1, 5);
     
                        foreach (int y in readimputregistre)
                        {
                        read_imputregistre.Add(y);
                        Console.WriteLine("readimputregistre = " + y);
                        }
     
                    valeursregistres.Add(read_imputregistre);
     
                        foreach (bool x in readCoils)
                        {
                        read_Coils.Add(Convert.ToInt32(x));
                        Console.WriteLine("readCoils = " + x);
                        }
                    valeursregistres.Add(read_Coils);
                     modbusClient.Disconnect();
                }
     
                int valeur = valeursregistres[5][13];
              Console.WriteLine("test "+ valeur);
     
                Console.Write("Press any key to continue . . . ");
                Console.ReadKey(true);
     
            }
        }
    }
    une capture de ce que j'ai pu avoir pour l'affichage de l'ip 5 et 6 par exemple ,
    Nom : Capture.JPG
Affichages : 392
Taille : 84,4 Ko

    mon probléme c'est pour parcourir mes listes , quand je mets par exemple la 3 valeur de l'ip 6 je peux avoir ce que je veux


    Nom : Capture2.JPG
Affichages : 411
Taille : 85,9 KoNom : Capture3.JPG
Affichages : 409
Taille : 107,5 Ko


    mais que j'essaie la meme chose avec l'ip 5 par exemple il me donne n'importe quoi


    Nom : Capture4.JPG
Affichages : 386
Taille : 123,9 Ko

    vous avez des explications svp
    Dernière modification par rv26t ; 05/04/2019 à 20h50. Motif: Inutile de citer le message précédant, cela alourdit la lecture.

  4. #4
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Peut-être que l'erreur vient de l'index des tableaux : il commence à 0. Accéder à la valeur par [4][3] devrait permettre d'obtenir la bonne valeur, non ?
    K

  5. #5
    Invité
    Invité(e)
    Par défaut
    j'ai essayé mais me donne toujours la mème chose :/
    Nom : Capture.JPG
Affichages : 390
Taille : 132,6 Ko

    Citation Envoyé par KiLVaiDeN Voir le message
    Peut-être que l'erreur vient de l'index des tableaux : il commence à 0. Accéder à la valeur par [4][3] devrait permettre d'obtenir la bonne valeur, non ?
    le probléme se pose uniquement pour la liste des readimputregistre pour la liste des readcoils il marche parfaitement et me donne exactement la valeur demandé
    Dernière modification par rv26t ; 05/04/2019 à 20h52. Motif: Inutile de citer le message précédant, cela alourdit la lecture.+ fusion de messages consécutifs

  6. #6
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Ok il semble que le problème vienne de la logique, potentiellement aussi de la récupération des données ne utilisant la syntaxe des tableaux.

    Essayez d'utiliser la fonction "debug" de votre IDE, afin de voir ce qui est crée, et de comprendre pourquoi vous obtenez cette valeur. En tout cas, je peux être quasiment catégorique en affirmant qu'il s'agit d'une de ces deux choses : mauvaise méthode de récupération des données, peut-être s'intéresser aux méthodes spécifiques pour récupérer les éléments d'une List, ou problème de logique, les données ne sont pas insérées comme il faut et comme vous vous y attendez : quoiqu'il en soit, le mode debug devrait apporter des réponses :-)
    K

  7. #7
    Invité
    Invité(e)
    Par défaut Inutile de citer le message précédant, cela alourdit la lecture.
    aprés débogage je vois que dans ma liste valeursregistres il 12 tableaux

    Nom : Capture.JPG
Affichages : 344
Taille : 29,4 Ko

    chaque tableau contient les registres des 6 ip
    Nom : Capture2.JPG
Affichages : 362
Taille : 132,9 Ko

    donc pour les 6 ip il créer 12 tableau chaque tableau contient tout les registres que j'ai (80 registres)
    et du coup pour acceder au 3 éme registre de l'ip 4 je dois mettre

    Nom : Capture5.JPG
Affichages : 395
Taille : 201,6 Ko

    alors que mon idée était d'avoir accés au registre en mettant le numéro d'ip et le numéro de registre
    vous avez une idée sur ce que je dois changer ?
    NB: je suis automatisien et j'ai besoin de cette partie juste pour récuperer des registre en modbus
    Dernière modification par rv26t ; 05/04/2019 à 20h52.

  8. #8
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Pourquoi est tu si méchant

    Je te propose d'utiliser un objet.
    Voici sa définition :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class CDatas
    {
        public string Ip;
        public int[] InputRegisters;
        public bool[] Coils;
    }

    Et le code dans le Main :
    Code c# : 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
    List<CDatas> Odatas = new List<CDatas>();
     
    List<string> ipadresses = new List<string>();
    ipadresses.Add("194.176.3.14");
    ipadresses.Add("194.176.3.10");
    ipadresses.Add("194.176.3.15");
    ipadresses.Add("194.176.3.19");
    ipadresses.Add("194.176.3.20");
    ipadresses.Add("194.176.3.24");
     
    foreach (string ip in ipadresses)
    {
        CDatas Odata = new CDatas();
        Odata.Ip = ip;
     
        ModbusClient modbusClient = new ModbusClient(Odata.Ip, 502);
        modbusClient.Connect();
        Odata.InputRegisters = modbusClient.ReadInputRegisters(1, 10);
        Odata.Coils = modbusClient.ReadCoils(1, 5);
        modbusClient.Disconnect();
        Odatas.Add(Odata);
    }
     
    Console.WriteLine(Odatas[0].Ip);
    Console.WriteLine(Odatas[0].InputRegisters[2]);
    Console.WriteLine(Odatas[0].Coils[1]);
     
    Console.Write("Press any key to continue . . . ");
    Console.ReadKey(true);

    Ça me parait plus simple et plus lisible en utilisant la POO.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Merci bcp , t'es un ange

Discussions similaires

  1. Affichage liste d'image
    Par J0r_x dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 16/02/2007, 14h30
  2. affichage listes différents entre IE et FF aka THE Problem
    Par trotters213 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 31
    Dernier message: 25/09/2006, 11h21
  3. Problème fonction affichage listes déroulantes
    Par JLDR69 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/09/2006, 19h06
  4. [VB6] Bug d'affichage liste déroulante
    Par yttrium dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 30/05/2006, 08h45
  5. [xsl]affichage liste de 2 couleurs
    Par megane dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 28/06/2004, 09h30

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