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 :

ProgressBar Transfert des données


Sujet :

C#

  1. #21
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 131
    Points : 46
    Points
    46
    Par défaut
    je te remercie beaucoup pour ton aide

    le dernier octet : Il y a 68468 octets dans la trame globale.
    je l'ai remplacer mais ça n'a rien changer.

    ce que j'ai reçu:
    Il y a 2 octets dans la trame globale
    Il y a 21 octets dans la trame globale
    Il y a 50 octets dans la trame globale
    Il y a 168 octets dans la trame globale
    Il y a 169 octets dans la trame globale
    Il y a 169 octets dans la trame globale
    Il y a 174 octets dans la trame globale
    Il y a 174 octets dans la trame globale
    Il y a 175 octets dans la trame globale
    Il y a 175 octets dans la trame globale
    Il y a 176 octets dans la trame globale
    Il y a 176 octets dans la trame globale
    Il y a 182 octets dans la trame globale
    Il y a 182 octets dans la trame globale .....

    le bout de code que j'ai mis ce n'est pas moi qui la fait, c'est un langage basic.
    oui, Il est exécuté sur l'automate pour répond à ta commande : serialPort2.Write("\u000D");

    j'ai configure le port série comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     serialPort2.BaudRate = 9600;
                serialPort2.Parity = Parity.Even;
                serialPort2.StopBits = StopBits.One;
                serialPort2.DataBits = 8;
                serialPort2.Handshake = Handshake.None;

  2. #22
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Points : 762
    Points
    762
    Par défaut
    C'est à dire tu l'as remplacé ?

    Tu as écris ça en n'oubliant pas de décommenter le MessageBox ? :
    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
     
    void p_DataReceived(object sender, SerialDataReceivedEventArgs e)//appellée à chaque fois que le correspondantr envoi un paquet de données (100octets selon toi)
    		{
     byte[] buffer = new byte[255]; // on crée un tampon de 255 caractères   
    			while (this.serialPort2.BytesToRead > 0)
                {
     
    				 int nb = this.serialPort2.Read(buffer, 0, buffer.Length);//on lit ce qu'il y a sur le port
     
    				 for (int i = 0; i < nb; i++)
    				 {
    					 this.m_Trame.Add(buffer[i]);//on sauve les octets dans la trame globale			 
    				 }
    			}
     
    			if(this.m_Trame.Count == 68468)
    			{
    				MessageBox.Show("Transfert terminé !");
    			}
                            Console.WriteLine("Il y a {0} octets dans la trame globale", this.m_Trame.Count);//Ça 'est nouveau
    		}
    D'une fois sur l'autre ou tu lui envoies ta commande la valeur du nombre d'octets dans la trame globale change t-elle ?

  3. #23
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 131
    Points : 46
    Points
    46
    Par défaut
    oui, j'ai fait comme le programme que tu mets la. j'ai garder la Console.WriteLine.
    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
     
      private void serialPort2_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
     
               this.serialPort2.Write("\u000D");// lance la tach envoiFil
     
               while (this.serialPort2.BytesToRead > 0)
               {
                   byte[] buffer = new byte[255]; // on crée un tampon de 255 caractères             
                   int nb = this.serialPort2.Read(buffer, 0, buffer.Length);//on lit ce qu'il y a sur le port
     
                   for (int i = 0; i < nb; i++)
                   {
                       this.m_Trame.Add(buffer[i]);//on sauve les octets dans la trame globale			 
                   }
               }
     
               if(this.m_Trame.Count == 68468)
               {
               MessageBox.Show("Transfert terminé !");
               }
               Console.WriteLine("Il y a {0} octets dans la trame globale", this.m_Trame.Count);//Ça 'est nouveau
    oui, la valeur du nombre d'octets dans la trame globale change. le dernier octet a changer aussi: Il y a 68820 octets dans la trame globale

    voila ce qu j'ai reçu après avoir utiliser le 2 programme :

    Il y a 101 octets dans la trame globale
    Il y a 101 octets dans la trame globale
    Il y a 102 octets dans la trame globale
    Il y a 103 octets dans la trame globale
    Il y a 104 octets dans la trame globale
    Il y a 104 octets dans la trame globale
    Il y a 105 octets dans la trame globale
    Il y a 105 octets dans la trame globale
    Il y a 106 octets dans la trame globale
    Il y a 106 octets dans la trame globale
    Il y a 107 octets dans la trame globale
    Il y a 107 octets dans la trame globale
    Il y a 108 octets dans la trame globale
    Il y a 108 octets dans la trame globale
    Il y a 109 octets dans la trame globale
    Il y a 109 octets dans la trame globale
    Il y a 115 octets dans la trame globale
    Il y a 115 octets dans la trame globale
    Il y a 116 octets dans la trame globale
    Il y a 116 octets dans la trame globale
    Il y a 117 octets dans la trame globale

  4. #24
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Points : 762
    Points
    762
    Par défaut
    Il ne faut pas que tu mettes la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.serialPort2.Write("\u000D");// lance la tach envoiFil
    Dans la fonction DataReceived !!! Sinon tu lui demandes de renvoyer sa trame à chaque fois que tu reçois un paquet.

    Je l'ai mis dans une fonction séparée.
    Fais un bouton et mets le derrière le clic. Regardes ce que ça fait.
    Et reposte ton code

  5. #25
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 131
    Points : 46
    Points
    46
    Par défaut
    ce qui concerne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     serialPort2.Write("\u000D");
    je dois le mettre dans un bouton et à l’intérieur de Evénement DataReceived car l’automate est programmer comme ça, si non je reçois rien des tous.

    voila tout le 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
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.IO.Ports;
    using System.IO;
    using System.Threading;
     
    namespace Communication_MCS
    {
        public partial class Mcs_pc : Form
        {
          // public string value = "";//string vide
            public string value = string.Empty;
     
           public  int longueur_bytes_read;
     
           public int i;
     
     
            public Mcs_pc()
            {
                InitializeComponent();
                this.Refresh();
            }
     
            private void Mcs_pc_Load(object sender, EventArgs e) 
            {
                string[] ports = SerialPort .GetPortNames();
               // string[] ports = System.IO.Ports.SerialPort.GetPortNames();
                for (int i = 0; i < ports.Length; i++)
                {
                    portBox2.Items.Add(ports[i]);
                }
            }
     
            private void button1_quitter_Click(object sender, EventArgs e)
            {
                Form1 Form1 = new Form1();
                Form1.Show();
                this.Hide();
                serialPort2.Close();  //fermer le SerialPort
            }
     
            private void Mcs_pc_Load_1(object sender, EventArgs e)
            {
                //on commence par lister les voies séries présentes
                String[] ports = SerialPort.GetPortNames();//l'événement Form_Load nous lire tous les ports série disponibles et nous assigner les valeurs à la liste déroulante.
                //string[] ports = System.IO.Ports.SerialPort.GetPortNames();
                for (int i = 0; i < ports.Length; i++) //on ajoute les ports au combo box
                {
                    portBox2.Items.Add(ports[i]);
                }
            }
     
            private void button1_connecter_Click(object sender, EventArgs e)
            {
                serialPort2.PortName = portBox2.SelectedItem.ToString();
                serialPort2.BaudRate = 9600;
                serialPort2.Parity = Parity.Even;
                serialPort2.StopBits = StopBits.One;
                serialPort2.DataBits = 8;
     
                serialPort2.Handshake = Handshake.None;
     
                serialPort2.PortName = portBox2.Text;
     
                serialPort2.DataReceived += new SerialDataReceivedEventHandler(serialPort2_DataReceived);
     
     
               //serialPort2.Encoding = Encoding.GetEncoding(28591);
     
     
                try
                {
                    serialPort2.Open();  //Ouvrez le SerialPort                
                    StatusLabel1.Text = "le port série : " + portBox2.Text + " Opened";//Mettre à jour le StatusStrip
                    MessageBox.Show("Opened");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Failed: " + ex.Message);
                }
     
                button1_connecter.Enabled = false;
                button1_deconnecter.Enabled = true;
                button_recevoir.Enabled = true;
                button1_ecrir.Enabled = true;
     
            }
     
            private void button1_deconnecter_Click(object sender, EventArgs e)
            {
                try
                {
                    serialPort2.Close();  //fermer le SerialPort
                    StatusLabel1.Text = "le port série : " + portBox2.Text + " Closed"; //Mettre à jour le StatusStrip
                    MessageBox.Show("Closed");
     
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Failed: " + ex.Message);
                }
     
                button1_connecter.Enabled = true; // activer le button connecter
                button1_deconnecter.Enabled = false;// desctiver le bitton deconnecter
            }
     
            List<byte> m_Trame = new List<byte>();//contiendra la trame retournée par l'automate du bout du fil après une demande de transfert
     
            private void button1_recevoir_Click(object sender, EventArgs e)
            {
                StatusLabel1.Text = "Appuyez sur 'F6' de la commande numérique puis patientez...";
                this.m_Trame.Clear();//nettoyage de la trame pour en recevoir une nouvelle
                this.serialPort2.Write("\u000D");// lance la tach envoiFil
                textBox1.SelectedText = string.Empty;
     
            }
     
            private void serialPort2_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
     
               this.serialPort2.Write("\u000D");// lance la tach envoiFil
     
               while (this.serialPort2.BytesToRead > 0)
               {
                   byte[] buffer = new byte[255]; // on crée un tampon de 255 caractères             
                   int nb = this.serialPort2.Read(buffer, 0, buffer.Length);//on lit ce qu'il y a sur le port
     
                   for (int i = 0; i < nb; i++)
                   {
                       this.m_Trame.Add(buffer[i]);//on sauve les octets dans la trame globale			 
                   }
               }
     
               if(this.m_Trame.Count == 68468)
               {
               MessageBox.Show("Transfert terminé !");
               }
               Console.WriteLine("Il y a {0} octets dans la trame globale", this.m_Trame.Count);//Ça 'est nouveau
     
     
                      /*
                      while(serialPort2.BytesToRead > 0)
                        {
                            char[] buffer = new char[250]; // on crée un char de 255 caractere            
     
                            longueur_bytes_read = serialPort2.Read(buffer, 0, buffer.Length);
                            //int longueur_bytes_read = serialPort2.Read(buffer, 0, buffer.Length); //lecture du buffer jusqu'a sa longeur buffer.Length               
                            //tes characteres sont contenus dans buffer.
                            //on remplit notre string value byte par byte par notre tableau de charactere buffer, le += fait que l'on écrase pas les données qui sont inserées, mais on les ajoutes.
     
                            for (i = 0; i < longueur_bytes_read; i++)
                            {
                                value += buffer[i];
     
                                StatusLabel1.Text = "Transfert en court... ";
                            }
                        }
                        if (longueur_bytes_read == 100 * 128876)
                        MessageBox.Show("terminé ");*/
     
            }
     
            private void button1_ecrir_Click(object sender, EventArgs e)
            {
                textBox1.AppendText(value.ToString() + "\r\n");
     
            }
     
     
            private void button_enregestrer_Click(object sender, EventArgs e)
            {
     
                SaveFileDialog SaveFileDialog1 = new SaveFileDialog();
                SaveFileDialog1.Filter = "Text Files (*.txt)|*.pcn";
                SaveFileDialog1.Title = "Save Received As";
                SaveFileDialog1.FilterIndex = 1;
                if (((SaveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                            && (SaveFileDialog1.FileName.Length > 0)))
                {
                    using (Stream s = File.Open(SaveFileDialog1.FileName, FileMode.Create))
                    using (StreamWriter sr = new StreamWriter(s))
                    {
                        sr.Write(textBox1.Text);
                        //sr.Write(value);
                    }
                }
            }
     
            private void timer1_Tick(object sender, EventArgs e)
            {
               // progressBar1.Maximum = value.Length;
               // progressBar1.Minimum = 0;
               // progressBar1.Value = 0;
     
               // progressBar1.Value = ((compteur * 100) / 100);
                StatusLabel1.Text = progressBar1.Value.ToString() + "%" + "Télechargement en court...";
     
                if (progressBar1.Value == 100)
                {
                    timer1.Stop();
                    StatusLabel1.Text = "Transfert Fini";
                }
            }    
     
        }

  6. #26
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Points : 762
    Points
    762
    Par défaut
    Ok... plutôt étrange... mais bon si c'est le protocole
    Et sinon si la trame n'est pas de longueur constante (voir ton post 182 octets et ton autre post 117 octets) je ne sais pas comment déterminer que c'est la fin.

    quelle est la valeur du dernier octet lors du dernier DataReceived ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Console.WriteLine("Valeur du dernier octet : {0} bits" + this.m_Trame[this.m_Trame.Count - 1]);
    A t-il toujours la même valeur ?

    Tu n'as pas un manuel sur ce que tu dois récupérer ?!!! tu comptes en faire quoi de ces données ?

  7. #27
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 131
    Points : 46
    Points
    46
    Par défaut
    Bonjour,

    voila un extrait des données que je récupère:
    123456789
    010691103
    321037403
    000000000
    000000000
    000000000
    000000000
    000000000
    487965325
    018886478

    j'ai teste ce 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
     
     private void serialPort2_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
     
               this.serialPort2.Write("\u000D");// lance la tach envoiFil
     
               while (this.serialPort2.BytesToRead > 0)
               {
                   byte[] buffer = new byte[255]; // on crée un tampon de 255 caractères             
                   int nb = this.serialPort2.Read(buffer, 0, buffer.Length);//on lit ce qu'il y a sur le port
     
                   for (int i = 0; i < nb; i++)
                   {
                       this.m_Trame.Add(buffer[i]);//on sauve les octets dans la trame globale			 
                   }
               }
     
               if(this.m_Trame.Count == 48)
               {
               MessageBox.Show("Transfert terminé !");
               }
               Console.WriteLine("Valeur du dernier octet : {0} bits" + this.m_Trame[this.m_Trame.Count - 1]);//Ça 'est nouveau
    }
    voila ce que j'obtient
    Valeur du dernier octet : {0} bits50
    Valeur du dernier octet : {0} bits57
    Valeur du dernier octet : {0} bits48
    Valeur du dernier octet : {0} bits48
    Valeur du dernier octet : {0} bits48
    Valeur du dernier octet : {0} bits48
    Valeur du dernier octet : {0} bits13
    Valeur du dernier octet : {0} bits13
    Valeur du dernier octet : {0} bits48
    Valeur du dernier octet : {0} bits48
    Valeur du dernier octet : {0} bits48
    Valeur du dernier octet : {0} bits48
    Valeur du dernier octet : {0} bits48
    .......
    et la dernier valeur c'est : Valeur du dernier octet : {0} bits48

  8. #28
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 131
    Points : 46
    Points
    46
    Par défaut
    Bonjour,

    voila un extrait des données que je récupère:
    123456789
    010691103
    321037403
    000000000
    000000000
    000000000
    000000000
    000000000
    487965325
    018886478

    j'ai teste ce 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
     
     private void serialPort2_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
     
               this.serialPort2.Write("\u000D");// lance la tach envoiFil
     
               while (this.serialPort2.BytesToRead > 0)
               {
                   byte[] buffer = new byte[255]; // on crée un tampon de 255 caractères             
                   int nb = this.serialPort2.Read(buffer, 0, buffer.Length);//on lit ce qu'il y a sur le port
     
                   for (int i = 0; i < nb; i++)
                   {
                       this.m_Trame.Add(buffer[i]);//on sauve les octets dans la trame globale			 
                   }
               }
     
               if(this.m_Trame.Count ==68468)
               {
               MessageBox.Show("Transfert terminé !");
               }
               Console.WriteLine("Valeur du dernier octet : {0} bits" + this.m_Trame[this.m_Trame.Count - 1]);//Ça 'est nouveau
    }
    voila ce que j'obtient
    Valeur du dernier octet : {0} bits50
    Valeur du dernier octet : {0} bits57
    Valeur du dernier octet : {0} bits48
    Valeur du dernier octet : {0} bits48
    Valeur du dernier octet : {0} bits48
    Valeur du dernier octet : {0} bits48
    Valeur du dernier octet : {0} bits13
    Valeur du dernier octet : {0} bits13
    Valeur du dernier octet : {0} bits48
    Valeur du dernier octet : {0} bits48
    Valeur du dernier octet : {0} bits48
    Valeur du dernier octet : {0} bits48
    Valeur du dernier octet : {0} bits48
    .......
    et la dernier valeur c'est : Valeur du dernier octet : {0} bits48

  9. #29
    Membre expérimenté

    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2009
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 553
    Points : 1 672
    Points
    1 672
    Par défaut
    Citation Envoyé par lead8209 Voir le message
    Tu n'as pas un manuel sur ce que tu dois récupérer ?!!! tu comptes en faire quoi de ces données ?
    @tintine: à ce stade, on ne peut pas t'aider davantage sans en connaître plus sur le matériel avec lequel tu communiques.

  10. #30
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 131
    Points : 46
    Points
    46
    Par défaut
    bonjour,

    je travail avec une commande d'axe MCS 32ex qui est une commande numérique spécialisée dans le contrôle de mouvement.

    elle est équipé d’un port de communication RS232 utilisé pour effectuer le téléchargement, de la configuration, des variables, des taches… entre le PC et la mcs.
    je fait un logiciel qui permet d'établirétablir une communication entre un PC et la commande d’axe MCS 32ex afin de pouvoir envoyer et recevoir des données via un port série et les écrire dans la mémoire de 128K.,

    je voudrais ajouter une boite de dialogue pour marquer la fin de la transmission pour l'utilisateur.

    elle est déjà programmer pour la réception et l'envoie des données.

    voila un extrais de données que j'envoie ou je réceptionne:
    123456789
    010691103
    321037403
    000000000
    000000000
    000000000
    000000000
    000000000
    487965325
    018886478
    .....

  11. #31
    Membre expérimenté

    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2009
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 553
    Points : 1 672
    Points
    1 672
    Par défaut
    Ok, et tu as un document qui explique ce que veulent dire ces données ? Datasheet, manuel utilisateur, ou autre ?
    Parce que le manuel utilisateur du fabriquant, celui qu'on peut télécharger sur son site web, ne semble pas donner cette information. Du coup je me demande comment tu peux savoir ce qu'il faut envoyer et ce que tu dois recevoir en retour...

    Et puis les logiciels fournis par le fabriquant, tu es sûr qu'ils ne font pas déjà ce dont tu as besoin ?

  12. #32
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 131
    Points : 46
    Points
    46
    Par défaut
    Oui, le logiciel fournier avec lui peut faire tous ça.

    Il est utiliser dans une industrie pour commander d'autre machines.
    ces données sont utiliser pour crée des étriers.

    On ma demander de crées un logiciel qui fait la communication pour envoyer ces données la. J'ai réussi à établir la communication, et ce que me tracasse de puis une semaine et de réussir à marque la fin de la transmission.

    ce logiciel est déjà fait avec DELPHI, mais ils veulent un autre avec un langage récent.

    Voila le bout de code qui est fait avec delphi pour la réception des données avec une prograssBar:
    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
     
    procedure TForm1.ComPort1RxFlag(Sender: TObject);
    begin
    if (tampon)<=128977 then   //128876
    begin
         while tampon<101*nboucles do
               tampon := comport1.inputcount;
         progressbar1.StepIt;
         statusbar1.simpletext:=formatfloat('##0',(tampon*100/101)/127800*100)+'% Transférés';
         comport1.writestr(chr(13));
         nboucles:=nboucles+1;
         tampon := comport1.inputcount;
    end
    else
    begin
         statusbar1.SimpleText:='Transfert Terminé';
    end;
    end;
    SI vous pouver

  13. #33
    Membre expérimenté

    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2009
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 553
    Points : 1 672
    Points
    1 672
    Par défaut
    What???? Tu as déjà le source en delphi de ce que tu veux obtenir en C#, et c'est seulement maintenant que tu le dis ????

  14. #34
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 131
    Points : 46
    Points
    46
    Par défaut
    je suis vraiment désolé

  15. #35
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Il faut distinguer 2 aspects:
    1. convertir le programme de delphi en C# sans progressbar,
    2. gérer la progressbar qui en .net demande une programation particulière pour se mettre à jour en cours de traitement.


    Je te suggère de faire le 1) d'abord et ensuite de poster un extrait de ton code, en indiquant l'endroit où doit être mise à jour la progressbar. On t'indiquera alors la(les) solution(s) pour traiter le point 2).
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  16. #36
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 131
    Points : 46
    Points
    46
    Par défaut
    Il faut distinguer 2 aspects:
    1.convertir le programme de delphi en C# sans progressbar,
    2.gérer la progressbar qui en .net demande une programation particulière pour se mettre à jour en cours de traitement.
    Le premier point j'ai réussi à le faire, si la réception des données.
    c'est le 2éme point que je me bloque.( la progressBar ou une boite de dialogue pour affichée la fin de la réception).

    Voila le code qui me permet de récupéré les données :
    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
     
     
    private void button1_recevoir_Click(object sender, EventArgs e)
            {
                StatusLabel1.Text = "Appuyez sur 'F6' de la commande numérique puis patientez...";
                this.m_Trame.Clear();//nettoyage de la trame pour en recevoir une nouvelle
                this.serialPort2.Write("\u000D");// lance la tach envoiFil
                textBox1.SelectedText = string.Empty;
     
            }
     
            private void serialPort2_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
     while(serialPort2.BytesToRead > 0)
                        {
     
     
                            char[] buffer = new char[250]; // on crée un char de 255 caractere            
     
                            longueur_bytes_read = serialPort2.Read(buffer, 0, buffer.Length);
                            //int longueur_bytes_read = serialPort2.Read(buffer, 0, buffer.Length); //lecture du buffer jusqu'a sa longeur buffer.Length               
                            //tes characteres sont contenus dans buffer.
                            //on remplit notre string value byte par byte par notre tableau de charactere buffer, le += fait que l'on écrase pas les données qui sont inserées, mais on les ajoutes.
     
                            for (i = 0; i < longueur_bytes_read; i++)
                            {
                                value += buffer[i];
     
                                StatusLabel1.Text = "Transfert en court... ";
                                //  backgroundWorker1.RunWorkerAsync();
                                // progressBar1.Value = compteur;
                                // StatusLabel1.Text = progressBar1.Value.ToString() + "%" + "Télechargement en court...";
                            }
                        }
     
     
                        if (longueur_bytes_read == 100 * 128876)
                        MessageBox.Show("terminé ");*/
     
            }
     
            private void button1_ecrir_Click(object sender, EventArgs e)
            {
                textBox1.AppendText(value.ToString() + "\r\n");
     
            }

  17. #37
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Le background worker est la solution usuelle à ce genre de problématique.

    Sinon, j'ai developpé une classe simple d'utilisation pour ce type de cas.

    Remplace la boucle for par ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SxProgress.Execute("Teléchargement en cours...",longueur_bytes_read,true,false,LoadOne,new object[]{ buffer, value })
     
    private bool LoadOne(int ItemIndex,object[] UserObjects)
    { 
      (string)UserObjects[1]+=  ((char[])UserObjects[0])[i];
      return true ; 
    }
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  18. #38
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 131
    Points : 46
    Points
    46
    Par défaut
    Bonjour à tous;

    je suis toujours bloque avec la progressBar, j'ai essayé ce code d'ou j'ai utiliser la règle des trois pour faire progressé ma progressBar
    progressBar.value=(progressBar.value+le taille maximal de mes données)/ données envoyé.

    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
     public string str;
      public int i=0;
      public string don;
     
       private void button_envoyer_Click(object sender, EventArgs e)
            {
                toolStripStatusLabel1.Text = "Appuyez sur 'F6' de la commande numérique puis patientez...";
     
                char[] B = { (char)'\u000A' };// lancer la tache recvfil
                serialPort1.Write(B, 0, 1);
            }
     
      private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                var progressBar1 = new ProgressBar();
     
                progressBar1.Maximum = str.Length;
     
     
                if (str.Length > 0)
                 {
                     int max = 50;
                    // string don;
     
     
                     if (i < str.Length - (str.Length % 50))
                     {
                         don = str.Substring(i, 50);
                         serialPort1.Write(don);
                         i += 50;
     
     
                     }
     
                     else
     
                     {
                         max = str.Length % 50;
                         don = str.Substring(i, max);
                         serialPort1.WriteLine(don);                     
     
                     }
                     progressBar1.Value = ((progressBar1.Value + str.Length) / (str.Length-50));
                     toolStripStatusLabel1.Text = progressBar1.Value.ToString() + "%" + "Télechargement en court...";
                 }
     
            }
    le souci que l’événement DataReceived, il s'exécute en boucle , et la valeur de ma progressBar elle se remet à 0 à chaque fois.

    Pouvez vous m'aide ??

  19. #39
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Il semble que j'ai oublié de mettre un lien vers sxprogress : http://www.developpez.net/forums/d15...utiliser-avis/
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

Discussions similaires

  1. [Débutant] ProgressBar avec transfert des données
    Par tintine dans le forum C#
    Réponses: 4
    Dernier message: 04/06/2015, 14h20
  2. transfert des donneés entre feuile
    Par hicham28 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 29/05/2007, 01h23
  3. transfert des données d'un fichier text vers un fichier excel sous VB
    Par insane_80 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 24/09/2006, 13h32
  4. Transfert des données en langue arabe vers Mysql
    Par naoufal01 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 04/09/2006, 13h55

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