source: tags/xsucLWF-1.1/Cxfel.cpp @ 38

Last change on this file since 38 was 37, checked in by marrucho, 10 years ago

version du 16 mai 2014 utilisée

File size: 102.6 KB
Line 
1#include "cxfel.h"
2
3
4#include "heure.h"
5
6#using <mscorlib.dll>
7#using <System.dll>
8#using <System.Windows.Forms.dll>
9#using <System.Drawing.dll>//pour les controles bouton
10
11using namespace System;
12using namespace System::ComponentModel;//contient des classes pour les composants et les contrôles
13using namespace System::Windows::Forms;//contient des classes dédiées à la génération des formulaires
14using namespace System::Drawing;//contient les classes Point et Size du bouton
15
16using namespace System::IO;//contient les classes pour les I/O
17
18using namespace System::Threading;
19
20//using MySql.Data;
21//using MySql::Data::MySqlClient;
22#using <System.Data.dll>
23#using <MySql.Data.dll>
24using namespace System::Data;
25using namespace MySql::Data::MySqlClient;
26
27#undef MessageBox
28
29modbus_t *ctx;//modbus
30
31
32public __gc class ThreadReadModbus 
33{
34public:
35        // The ThreadProc method is called when the thread starts.
36    static void ThreadProc()
37        {
38                uint8_t tab_rp_bits[MODBUS_SIZE_READ_COILS];
39                Console::WriteLine(S"ThreadProc: read coils...");
40                int rc = modbus_read_bits(ctx, MODBUS_BASEADR_COILS, MODBUS_SIZE_READ_COILS, tab_rp_bits);////JCM : adresse coils=MODBUS_BASEADR_COILS
41                if (rc != MODBUS_SIZE_READ_COILS)
42                        Console::WriteLine(S"ThreadProc: read coils failed...");
43                Thread::Sleep(500);
44
45                uint16_t tab_rp_registers_low[MODBUS_SIZE_READ_HOLDINGS_LOW];
46                Console::WriteLine(S"ThreadProc: read holdings...");
47                rc = modbus_read_registers(ctx, MODBUS_BASEADR_LOW_HOLDINGS,//JCM : adresse holding=MODBUS_BASEADR_LOW_HOLDINGS
48                        MODBUS_SIZE_READ_HOLDINGS_LOW, tab_rp_registers_low);
49                if (rc != MODBUS_SIZE_READ_HOLDINGS_LOW)
50                        Console::WriteLine(S"ThreadProc: read holdings failed...");
51                Thread::Sleep(500);
52 
53                uint16_t wordPermuted[2];
54                float real = modbus_get_float(tab_rp_registers_low+6);//dP : float32 Normal
55                *(wordPermuted+0)= tab_rp_registers_low[6+1];//dP : float32 Reverse
56                *(wordPermuted+1)= tab_rp_registers_low[6+0];//dP : float32 Reverse
57                float realReversed = modbus_get_float(wordPermuted+0);//dP : float32 Reverse
58
59                Console::WriteLine(S"ThreadProc: read float...");
60//              if (real != UT_REAL)
61//                      Console::WriteLine(S"ThreadProc: read float failed...");
62                printf("real(2006d) = normal=%f reverse=%f\n", 
63                        real,
64                        //word2float[0]+(word2float[1]<<16)
65                        //tab_rp_registers_low[6]+(tab_rp_registers_low[7]<<16));
66                        realReversed);
67                Thread::Sleep(500);
68
69                uint16_t tab_rp_registers_high[MODBUS_SIZE_READ_HOLDINGS_HIGH];
70                Console::WriteLine(S"ThreadProc: read holdings...");
71                rc = modbus_read_registers(ctx, MODBUS_BASEADR_HIGH_HOLDINGS,
72                        MODBUS_SIZE_READ_HOLDINGS_HIGH, tab_rp_registers_high);
73                if (rc != MODBUS_SIZE_READ_HOLDINGS_HIGH)
74                        Console::WriteLine(S"ThreadProc: read holdings failed...");
75                Thread::Sleep(500);
76
77                real = modbus_get_float(tab_rp_registers_high+36);//Pi_max
78                Console::WriteLine(S"ThreadProc: read float...");
79//              if (real != UT_REAL)
80//                      Console::WriteLine(S"ThreadProc: read float failed...");
81                printf("real(2118d) = %f\n", real);
82                Thread::Sleep(500);
83        }
84};
85
86
87CGroupBox::CGroupBox(String* gname, int posX, int posY)
88{
89        name=gname;
90        nbInstance++;
91
92        // Creation
93        gbox = new GroupBox();
94        gbox->Text = name;
95        gbox->Size = System::Drawing::Size(200, 200);//taille du groupbox en pixels
96        gbox->Location = Point(posX,posY);
97
98        // Num_P label tt seul
99        Label* labNumP= new Label();
100//      labNumP->Location = Point(posX+10,posY+5);
101        labNumP->Location = Point(70,35);
102        labNumP->Size = System::Drawing::Size(50,16);
103        labNumP->Text = "Num_P";//zone de texte initialisée
104        labNumP->Font = new System::Drawing::Font(S"Arial", 9, FontStyle::Bold);;
105        labNumP->TextAlign = ContentAlignment::MiddleRight;
106        valNumP= new TextBox();
107        valNumP->Location = Point(70,55);
108        valNumP->Size = System::Drawing::Size(60, 40);
109        valNumP->Text = "xx";//zone de texte initialisée vide
110        valNumP->Font = new System::Drawing::Font(S"Arial", 9, FontStyle::Bold);
111        valNumP->ForeColor = Color::Brown;
112        gbox->Controls->Add(labNumP);
113        gbox->Controls->Add(valNumP);
114        // Num_C1 label tt seul
115        Label* labNumC1= new Label();
116//      labNumC1->Location = Point(posX+5, posY+20);
117        labNumC1->Location = Point(20, 90);
118        labNumC1->Size = System::Drawing::Size(50,16);
119        labNumC1->Text = "1";//zone de texte initialisée
120        labNumC1->Font = new System::Drawing::Font(S"Arial", 9, FontStyle::Bold);;
121        labNumC1->TextAlign = ContentAlignment::MiddleRight;
122        valNumC1= new TextBox();
123        valNumC1->Location = Point(30,110);
124        valNumC1->Size = System::Drawing::Size(60, 40);
125        valNumC1->Text = "xx";//zone de texte initialisée vide
126        valNumC1->Font = new System::Drawing::Font(S"Arial", 9, FontStyle::Bold);;
127        valNumC1->ForeColor = Color::Brown;
128        gbox->Controls->Add(labNumC1);
129        gbox->Controls->Add(valNumC1);
130        // Num_C2 label tt seul
131        Label* labNumC2= new Label();
132//      labNumC2->Location = Point(posX+60, posY+20);
133        labNumC2->Location = Point(85, 90);
134        labNumC2->Size = System::Drawing::Size(50,16);
135        labNumC2->Text = "2";//zone de texte initialisée
136        labNumC2->Font = new System::Drawing::Font(S"Arial", 9, FontStyle::Bold);;
137        labNumC2->TextAlign = ContentAlignment::MiddleRight;
138        valNumC2= new TextBox();
139        valNumC2->Location = Point(105,110);
140        valNumC2->Size = System::Drawing::Size(60, 40);
141        valNumC2->Text = "xx";//zone de texte initialisée vide
142        valNumC2->Font = new System::Drawing::Font(S"Arial", 9, FontStyle::Bold);;
143        valNumC2->ForeColor = Color::Brown;
144        gbox->Controls->Add(labNumC2);
145        gbox->Controls->Add(valNumC2);
146        //bouton Appliquer
147        appliquerBtn = new Button();
148        appliquerBtn->Location = Point(65, 170);
149        appliquerBtn->Name = "Bouton Appliquer";
150        appliquerBtn->Text = "Appliquer";
151        appliquerBtn->Click += new EventHandler(this, &CGroupBox::AppliquerBtn_Clicked);
152        gbox->Controls->Add(appliquerBtn);
153
154/*
155        String* str;
156        str=String::Concat(labNumC1->Text);
157        Console::WriteLine(str);       
158        str=String::Concat(labNumC2->Text);
159        Console::WriteLine(str);       
160*/
161        //..............
162        //..............
163
164}
165
166Label* CGroupBox::GetLabelNumP()
167{
168        return labNumP;
169}
170
171Label* CGroupBox::GetLabelNumC1()
172{
173        return labNumC1;
174}
175
176Label* CGroupBox::GetLabelNumC2()
177{
178        return labNumC2;
179}
180
181GroupBox* CGroupBox::GetGroupBox()
182{
183        return gbox;
184}
185
186void CGroupBox::SetValNumP(String* value)
187{
188        valNumP->Text=value;
189}
190
191void CGroupBox::SetValNumC1(String* value)
192{
193        valNumC1->Text=value;
194}
195
196void CGroupBox::SetValNumC2(String* value)
197{
198        valNumC2->Text=value;
199}
200
201String* CGroupBox::GetValNumP() 
202{ 
203        return valNumP->Text; 
204}
205
206String* CGroupBox::GetValNumC1() 
207{ 
208        return valNumC1->Text; 
209}
210
211String* CGroupBox::GetValNumC2() 
212{ 
213        return valNumC2->Text; 
214}
215
216void CGroupBox::AppliquerBtn_Clicked(Object* pSender, EventArgs* pArgs)//gestionnaire d'evenements associés au bouton Appliquer
217    {
218                String* str;
219                //lecture fichier pour comparaison avec saisie
220                try
221                        {
222//                              FileStream* fs = new FileStream("..\\test1_4xsuc.txt",FileMode::Open);
223                                FileStream* fs = new FileStream("..\\couplers.txt",FileMode::Open);
224                                StreamReader* sr = new StreamReader(fs);
225                                int count=0;
226
227                        if(!String::Compare(name,"a"))
228                        {
229                                Console::WriteLine(S"appliquer a");
230                                for (;;)
231                                {
232                                        String* line = sr->ReadLine();
233//                                      if (count==0)
234                                        if (count==1)//commentaire en 1ere ligne du fichier généré par xfile
235                                                if(String::Compare(line,valNumP->Text))
236                                                {
237                                                        MessageBox::Show(S"a: NumP n'existe pas !!");
238                                                        sr->Close();
239                                                        break;
240                                                }
241//                                      if (count==1)
242                                        if (count==2)//commentaire en 1ere ligne du fichier généré par xfile
243                                                if(String::Compare(line,valNumC1->Text))
244                                                {
245                                                        MessageBox::Show(S"a: NumC1 n'existe pas !!");
246                                                        sr->Close();
247                                                        break;
248                                                }
249//                                      if (count==2)
250                                        if (count==3)//commentaire en 1ere ligne du fichier généré par xfile
251                                                if(String::Compare(line,valNumC2->Text))
252                                                {
253                                                        MessageBox::Show(S"a: NumC2 n'existe pas !!");
254                                                        sr->Close();
255                                                        break;
256                                                }
257                                        count++;
258                                        if (line==0)//fin du fichier
259                                        {
260                                                sr->Close();
261                                                uint16_t tab_rp_registers[2];
262                                                int rc;
263                                                int size;
264                                                Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write NumP NumC1 et NumC2...");
265                                                size=1;
266                                                tab_rp_registers[0] = Convert::ToInt16(valNumP->Text);
267                                                rc=modbus_write_registers(ctx, 2070,size, tab_rp_registers);//NumP
268                                                if (rc != size)
269                                                        Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding failed...");             
270        //                                      Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding...");
271                                                size=2;
272                                                tab_rp_registers[0] = Convert::ToInt16(valNumC1->Text);
273                                                tab_rp_registers[1] = Convert::ToInt16(valNumC2->Text);
274                                                rc=modbus_write_registers(ctx, 2050,size, tab_rp_registers);//NumC1 et NumC2
275                                                if (rc != size)
276                                                        Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding failed...");             
277                                                break;
278                                        }
279                                }
280                        }
281                        if(!String::Compare(name,"b"))
282                        {
283                                Console::WriteLine(S"appliquer b");     
284                                for (;;)
285                                {
286                                        String* line = sr->ReadLine();
287//                                      if (count==3)
288                                        if (count==4)//commentaire en 1ere ligne du fichier généré par xfile
289                                                if(String::Compare(line,valNumP->Text))
290                                                {
291                                                        MessageBox::Show(S"b: NumP n'existe pas !!");
292                                                        sr->Close();
293                                                        break;
294                                                }
295//                                      if (count==4)
296                                        if (count==5)//commentaire en 1ere ligne du fichier généré par xfile
297                                                if(String::Compare(line,valNumC1->Text))
298                                                {
299                                                        MessageBox::Show(S"b: NumC1 n'existe pas !!");
300                                                        sr->Close();
301                                                        break;
302                                                }
303//                                      if (count==5)
304                                        if (count==6)//commentaire en 1ere ligne du fichier généré par xfile
305                                                if(String::Compare(line,valNumC2->Text))
306                                                {
307                                                        MessageBox::Show(S"b: NumC2 n'existe pas !!");
308                                                        sr->Close();
309                                                        break;
310                                                }
311                                        count++;
312                                        if (line==0)//fin du fichier
313                                        {
314                                                sr->Close();
315                                                uint16_t tab_rp_registers[2];
316                                                int rc;
317                                                int size;
318                                                Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write NumP NumC1 et NumC2...");
319                                                size=1;
320                                                tab_rp_registers[0] = Convert::ToInt16(valNumP->Text);
321                                                rc=modbus_write_registers(ctx, 2071,size, tab_rp_registers);//NumP
322                                                if (rc != size)
323                                                        Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding failed...");             
324        //                                      Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding...");
325                                                size=2;
326                                                tab_rp_registers[0] = Convert::ToInt16(valNumC1->Text);
327                                                tab_rp_registers[1] = Convert::ToInt16(valNumC2->Text);
328                                                rc=modbus_write_registers(ctx, 2052,size, tab_rp_registers);//NumC1 et NumC2
329                                                if (rc != size)
330                                                        Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding failed...");             
331                                                break;
332                                        }
333                                }
334                        }
335                        if(!String::Compare(name,"c"))
336                        {
337                                Console::WriteLine(S"appliquer c");     
338                                for (;;)
339                                {
340                                        String* line = sr->ReadLine();
341//                                      if (count==6)
342                                        if (count==7)//commentaire en 1ere ligne du fichier généré par xfile
343                                                if(String::Compare(line,valNumP->Text))
344                                                {
345                                                        MessageBox::Show(S"c: NumP n'existe pas !!");
346                                                        sr->Close();
347                                                        break;
348                                                }
349//                                      if (count==7)
350                                        if (count==8)//commentaire en 1ere ligne du fichier généré par xfile
351                                                if(String::Compare(line,valNumC1->Text))
352                                                {
353                                                        MessageBox::Show(S"c: NumC1 n'existe pas !!");
354                                                        sr->Close();
355                                                        break;
356                                                }
357//                                      if (count==8)
358                                        if (count==9)//commentaire en 1ere ligne du fichier généré par xfile
359                                                if(String::Compare(line,valNumC2->Text))
360                                                {
361                                                        MessageBox::Show(S"c: NumC2 n'existe pas !!");
362                                                        sr->Close();
363                                                        break;
364                                                }
365                                        count++;
366                                        if (line==0)//fin du fichier
367                                        {
368                                                sr->Close();
369                                                uint16_t tab_rp_registers[2];
370                                                int rc;
371                                                int size;
372                                                Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write NumP NumC1 et NumC2...");
373                                                size=1;
374                                                tab_rp_registers[0] = Convert::ToInt16(valNumP->Text);
375                                                rc=modbus_write_registers(ctx, 2072,size, tab_rp_registers);//NumP
376                                                if (rc != size)
377                                                        Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding failed...");             
378        //                                      Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding...");
379                                                size=2;
380                                                tab_rp_registers[0] = Convert::ToInt16(valNumC1->Text);
381                                                tab_rp_registers[1] = Convert::ToInt16(valNumC2->Text);
382                                                rc=modbus_write_registers(ctx, 2054,size, tab_rp_registers);//NumC1 et NumC2
383                                                if (rc != size)
384                                                        Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding failed...");             
385                                                break;
386                                        }
387                                }
388                        }
389                        if(!String::Compare(name,"d"))
390                        {
391                                Console::WriteLine(S"appliquer d");     
392                                for (;;)
393                                {
394                                        String* line = sr->ReadLine();
395//                                      if (count==9)
396                                        if (count==10)//commentaire en 1ere ligne du fichier généré par xfile
397                                                if(String::Compare(line,valNumP->Text))
398                                                {
399                                                        MessageBox::Show(S"d: NumP n'existe pas !!");
400                                                        sr->Close();
401                                                        break;
402                                                }
403//                                      if (count==10)
404                                        if (count==11)//commentaire en 1ere ligne du fichier généré par xfile
405                                                if(String::Compare(line,valNumC1->Text))
406                                                {
407                                                        MessageBox::Show(S"d: NumC1 n'existe pas !!");
408                                                        sr->Close();
409                                                        break;
410                                                }
411//                                      if (count==11)
412                                        if (count==12)//commentaire en 1ere ligne du fichier généré par xfile
413                                                if(String::Compare(line,valNumC2->Text))
414                                                {
415                                                        MessageBox::Show(S"d: NumC2 n'existe pas !!");
416                                                        sr->Close();
417                                                        break;
418                                                }
419                                        count++;
420                                        if (line==0)//fin du fichier
421                                        {
422                                                sr->Close();
423                                                uint16_t tab_rp_registers[2];
424                                                int rc;
425                                                int size;
426                                                Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write NumP NumC1 et NumC2...");
427                                                size=1;
428                                                tab_rp_registers[0] = Convert::ToInt16(valNumP->Text);
429                                                rc=modbus_write_registers(ctx, 2073,size, tab_rp_registers);//NumP
430                                                if (rc != size)
431                                                        Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding failed...");             
432        //                                      Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding...");
433                                                size=2;
434                                                tab_rp_registers[0] = Convert::ToInt16(valNumC1->Text);
435                                                tab_rp_registers[1] = Convert::ToInt16(valNumC2->Text);
436                                                rc=modbus_write_registers(ctx, 2056,size, tab_rp_registers);//NumC1 et NumC2
437                                                if (rc != size)
438                                                        Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding failed...");             
439                                                break;
440                                        }
441                                }
442                        }
443                }
444                catch (System::Exception* pe)
445                        {
446                                Console::WriteLine(pe->ToString());
447                        }
448                int count=0;
449
450  }
451
452CDialogConfig::CDialogConfig()
453    {
454        // définit les paramètres du formulaire
455        Text = S"XSUC - ecriture serveur";
456        FormBorderStyle = FormBorderStyle::Fixed3D;//impossible de modifier la taille
457        Size = System::Drawing::Size(1000,800);
458
459        // Creation de controle
460        sortirBtn = new Button();
461       
462        // bouton OK
463        sortirBtn->Location = Point(900, 700);
464        sortirBtn->Name = "Bouton Sortir";
465        sortirBtn->Text = "sortir";
466        sortirBtn->DialogResult = DialogResult::OK;
467
468        // Ajoute les controles dans le formaulaire
469        Controls->Add(sortirBtn);
470
471                pal = new ArrayList();
472                int j=20;//depart affichage
473                for (indexGroupBox=0;indexGroupBox<NB_BANCS;indexGroupBox++)//creation des controles dans le formulaire
474                {
475                        pal->Add(new CGroupBox(gname[indexGroupBox],j,90));
476                        j+=250;
477                        CGroupBox* gboxPtr = (CGroupBox *) pal->get_Item(indexGroupBox);
478                        Controls->Add(gboxPtr->GetGroupBox());
479                        String* str;
480                        str=String::Concat(gboxPtr->GetGroupBox()->Text);
481                        Console::WriteLine(str);       
482/*                      str=String::Concat(gboxPtr->GetLabelNumP()->Text);
483                        Console::WriteLine(str);       
484                        str=String::Concat(gboxPtr->GetLabelNumC1()->Text);
485                        Console::WriteLine(str);       
486*/              }
487
488                //configure les 2 propriétés : AcceptButton contient la réf du bouton par défaut du formulaire..
489                //..on peut cliquer sur le bouton OK ou bien sur la touche Entrée du clavier..
490                //..referme aussi la boite car DialogResult renvoie OK
491        AcceptButton = sortirBtn;
492
493                //Tp_max
494                labTp_max = new Label();
495                valTp_max = new TextBox();
496                labN_cur = new Label();
497                valN_cur = new ComboBox();
498                btnAppliquer = new Button();
499                labTp_max->Location = Point(200,600);
500                labTp_max->Size = System::Drawing::Size(86,16);
501                labTp_max->Text = "Tp_max(min):";
502                labTp_max->TextAlign = ContentAlignment::MiddleRight;
503                labTp_max->Font = new System::Drawing::Font(S"Arial", 9, FontStyle::Bold);;
504                Controls->Add(labTp_max);
505                valTp_max->Location = Point(290,600);
506                valTp_max->Size = System::Drawing::Size(50,20);
507                valTp_max->Text = "";
508                valTp_max->Font = new System::Drawing::Font(S"Arial", 9, FontStyle::Bold);;
509                valTp_max->ForeColor = Color::Blue;
510                Controls->Add(valTp_max);
511                labN_cur->Location = Point(200,625);
512                labN_cur->Size = System::Drawing::Size(80,16);
513                labN_cur->Text = "N_cur:";
514                labN_cur->TextAlign = ContentAlignment::MiddleRight;
515                labN_cur->Font = new System::Drawing::Font(S"Arial", 9, FontStyle::Bold);;
516                Controls->Add(labN_cur);
517                valN_cur->DropDownWidth=121;
518                valN_cur->Location = Point(290,625);
519                valN_cur->Size = System::Drawing::Size(50,121);
520                valN_cur->Items->Add(S"1");
521                valN_cur->Items->Add(S"2");
522                valN_cur->Items->Add(S"3");
523                valN_cur->Items->Add(S"4");
524                valN_cur->Items->Add(S"5");
525                valN_cur->Items->Add(S"6");
526                valN_cur->Items->Add(S"7");
527                valN_cur->Font = new System::Drawing::Font(S"Arial", 9, FontStyle::Bold);;
528                valN_cur->ForeColor = Color::Blue;
529        valN_cur->SelectedIndex = 0;//affiche la 1ere chaine par defaut
530                Controls->Add(valN_cur);
531                btnAppliquer = new Button();
532                btnAppliquer->Location = Point(350, 600);
533                btnAppliquer->Name = "Bouton Appliquer";
534                btnAppliquer->Text = "Appliquer";
535                btnAppliquer->Click += new EventHandler(this, &CDialogConfig::BtnAppliquer_Clicked);
536                Controls->Add(btnAppliquer);
537
538       // Creation du GroupBox
539        gboxAuto = new GroupBox();
540        gboxAuto->Text = S"saisie auto";
541                gboxAuto->Size = System::Drawing::Size(200, 200);//taille du groupbox en pixels
542        gboxAuto->Location = Point(600, 400);
543        // Creation des boutons radio.
544        rbAutoBdd = new RadioButton();
545        rbAutoBdd->Text = S"Base de données";
546                rbAutoBdd->Size = System::Drawing::Size(80,50);
547                rbAutoBdd->Font = new System::Drawing::Font(S"Arial", 9, FontStyle::Bold);;
548        rbAutoBdd->Location = Point(10,35);
549                rbAutoBdd->Checked = true;//c'est la valeur par defaut
550        rbAutoFichier = new RadioButton();
551        rbAutoFichier->Text = S"Fichier";
552                rbAutoFichier->Size = System::Drawing::Size(80,50);
553                rbAutoFichier->Font = new System::Drawing::Font(S"Arial", 9, FontStyle::Bold);;
554        rbAutoFichier->Location = Point(10,75);
555                // creation du bouton Appliquer
556                BtnAppliquerAuto = new Button();
557                BtnAppliquerAuto->Location = Point(60, 140);
558                BtnAppliquerAuto->Name = "Bouton Appliquer";
559                BtnAppliquerAuto->Text = "Appliquer";
560                // ajout des controles dans le groupe
561        gboxAuto->Controls->Add(rbAutoBdd);
562        gboxAuto->Controls->Add(rbAutoFichier);
563        gboxAuto->Controls->Add(BtnAppliquerAuto);
564        // ajout du groupe dans le formulaire.
565        Controls->Add(gboxAuto);
566        // associe le gestionnaire au groupe d'options
567        rbAutoBdd->Click += new EventHandler(this, &CDialogConfig::Radio_Clicked);
568        rbAutoFichier->Click += new EventHandler(this, &CDialogConfig::Radio_Clicked);
569                BtnAppliquerAuto->Click += new EventHandler(this, &CDialogConfig::BtnAppliquerAuto_Clicked);
570
571                //N_cur
572                labN_cur4Reprise = new Label();
573                valN_cur4Reprise = new TextBox();
574                labN_cur4Reprise->Location = Point(200,500);
575                labN_cur4Reprise->Size = System::Drawing::Size(86,16);
576                labN_cur4Reprise->Text = "N_cur:";
577                labN_cur4Reprise->TextAlign = ContentAlignment::MiddleRight;
578                labN_cur4Reprise->Font = new System::Drawing::Font(S"Arial", 9, FontStyle::Bold);;
579                Controls->Add(labN_cur4Reprise);
580                valN_cur4Reprise->Location = Point(290,500);
581                valN_cur4Reprise->Size = System::Drawing::Size(50,20);
582                valN_cur4Reprise->Text = "";
583                valN_cur4Reprise->Font = new System::Drawing::Font(S"Arial", 9, FontStyle::Bold);;
584                valN_cur4Reprise->ForeColor = Color::Blue;
585                Controls->Add(valN_cur4Reprise);
586                btnN_curAppliquer = new Button();
587                btnN_curAppliquer->Location = Point(350, 500);
588                btnN_curAppliquer->Name = "Bouton Appliquer";
589                btnN_curAppliquer->Text = "Appliquer";
590                btnN_curAppliquer->Click += new EventHandler(this, &CDialogConfig::btnN_curAppliquer_Clicked);
591                Controls->Add(btnN_curAppliquer);
592
593                //gestionnnaire associé au bouton OK
594                sortirBtn->Click += new EventHandler(this, &CDialogConfig::SortirBtn_Clicked);
595        }
596
597CDialogConfig::CDialogConfig(uint16_t *tab_rp_registers_low,uint16_t *tab_rp_registers_high)
598    {
599        // définit les paramètres du formulaire
600        Text = S"XSUC - ecriture serveur";
601        FormBorderStyle = FormBorderStyle::Fixed3D;//impossible de modifier la taille
602        Size = System::Drawing::Size(1000,800);
603
604        // Creation de controle
605        sortirBtn = new Button();
606       
607        // bouton OK
608        sortirBtn->Location = Point(900, 700);
609        sortirBtn->Name = "Bouton Sortir";
610        sortirBtn->Text = "sortir";
611        sortirBtn->DialogResult = DialogResult::OK;
612
613        // Ajoute les controles dans le formaulaire
614        Controls->Add(sortirBtn);
615
616                pal = new ArrayList();
617                int j=20;//depart affichage
618                for (indexGroupBox=0;indexGroupBox<NB_BANCS;indexGroupBox++)//creation des controles dans le formulaire
619                {
620                        pal->Add(new CGroupBox(gname[indexGroupBox],j,90));
621                        j+=250;
622                        CGroupBox* gboxPtr = (CGroupBox *) pal->get_Item(indexGroupBox);
623                        Controls->Add(gboxPtr->GetGroupBox());
624                        String* str;
625                        str=String::Concat(gboxPtr->GetGroupBox()->Text);
626                        Console::WriteLine(str);       
627/*                      str=String::Concat(gboxPtr->GetLabelNumP()->Text);
628                        Console::WriteLine(str);       
629                        str=String::Concat(gboxPtr->GetLabelNumC1()->Text);
630                        Console::WriteLine(str);       
631*/              }
632
633                //configure les 2 propriétés : AcceptButton contient la réf du bouton par défaut du formulaire..
634                //..on peut cliquer sur le bouton OK ou bien sur la touche Entrée du clavier..
635                //..referme aussi la boite car DialogResult renvoie OK
636        AcceptButton = sortirBtn;
637
638                //gestionnnaire associé au bouton OK
639                sortirBtn->Click += new EventHandler(this, &CDialogConfig::SortirBtn_Clicked);
640        }
641
642void CDialogConfig::SortirBtn_Clicked(Object* pSender,EventArgs* pArgs)//gestionnaire d'evenement de la boite dialogue
643        {
644                //fermer le formulaire lorsqu'on clique sur le bouton
645                Close();
646        }
647
648void CDialogConfig::BtnAppliquer_Clicked(Object* pSender, EventArgs* pArgs)//gestionnaire d'evenement associé à la liste deroulante
649    {
650                int nCur=0;
651
652//              String* ps = String::Concat(S"index is ",__box(valN_cur->SelectedIndex)->ToString());
653//              MessageBox::Show(ps,S"index");
654        String* ps = __box(valN_cur->SelectedIndex)->ToString();
655                if(String::Compare(ps,"0")==0)
656                        nCur=1;
657                if(String::Compare(ps,"1")==0)
658                        nCur=2;
659                if(String::Compare(ps,"2")==0)
660                        nCur=3;
661                if(String::Compare(ps,"3")==0)
662                        nCur=4;
663                if(String::Compare(ps,"4")==0)
664                        nCur=5;
665                if(String::Compare(ps,"5")==0)
666                        nCur=6;
667                if(String::Compare(ps,"6")==0)
668                        nCur=7;
669                if (getTp_max()!=NULL)//case non vide uniquement
670                {
671                        int result = Convert::ToInt16(getTp_max());
672                        if ((result<60)||(result>840))//compris entre 1 heure et 14 heures
673                        {
674//                              MessageBox::Show(S"1 heure <= Tp_max <= 14 heures");
675                                MessageBox::Show(S"60 minutes <= Tp_max <= 840 minutes");
676                                return;
677                        }
678                        Console::WriteLine(S"ecriture Tp_max");
679                        uint16_t tab_rp_registers[1];
680                        int rc;
681                        int size;
682                        Console::WriteLine(S"CDialogConfig::BtnAppliquer_Clicked : write Tp_max...");
683                        size=1;
684                        tab_rp_registers[0] = result;
685                        rc=modbus_write_registers(ctx, 2106+(nCur-1),size, tab_rp_registers);//Tp_max
686                        if (rc != size)
687                                Console::WriteLine(S"CDialogConfig::BtnAppliquer_Clicked : write Tp_max failed...");
688                }
689    }
690
691void CDialogConfig::btnN_curAppliquer_Clicked(Object* pSender, EventArgs* pArgs)//gestionnaire d'evenement associé à la liste deroulante
692    {
693                int nCur;
694
695                if (getN_cur()!=NULL)//case non vide uniquement
696                {
697                        int result = Convert::ToInt16(getN_cur());
698                        if ((result<0)||(result>8))//compris entre 1 et 8
699                        {
700                                MessageBox::Show(S"0 <= N_cur <= 8");
701                                return;
702                        }
703                        Console::WriteLine(S"ecriture N_cur");
704                        uint16_t tab_rp_registers[1];
705                        int rc;
706                        int size;
707                        Console::WriteLine(S"CDialogConfig::BtnAppliquer_Clicked : write N_cur...");
708                        size=1;
709                        tab_rp_registers[0] = result;
710                        rc=modbus_write_registers(ctx, 2027, size, tab_rp_registers);//N_cur
711                        if (rc != size)
712                                Console::WriteLine(S"CDialogConfig::BtnAppliquer_Clicked : write N_cur failed...");
713                }
714    }
715
716String* CDialogConfig::getTp_max() 
717{ 
718        return valTp_max->Text; 
719}
720
721String* CDialogConfig::getN_cur() 
722{ 
723        return valN_cur4Reprise->Text; 
724}
725
726void CDialogConfig::BtnAppliquerAuto_Clicked(Object* pSender,EventArgs* pArgs)//gestionnaire d'evenement de la boite dialogue
727        {
728
729                /*\*/
730//....
731//....lire la bd OU le fichier selon le rb
732//....msgbox en cas d'erreur
733//....afficher ds les zones saisies
734//....ecrire sur le modbus ts les perametres
735
736
737                if (lectBddFic==true)//lecture bdd selectionnée
738                {
739/*
740structure table stand_with_couplers dans la base de données :
741+----------------+--------------------------------------+------+-----+---------+-------+
742| Field          | Type                                 | Null | Key | Default | Extra |
743+----------------+--------------------------------------+------+-----+---------+-------+
744| idStand        | char(1)                              | NO   |     |         |       |
745| idPair         | char(11)                             | YES  |     | NULL    |       |
746| idCoupler1     | char(13)                             | NO   |     |         |       |
747| idCoupler2     | char(13)                             | NO   |     |         |       |
748| idConditioning | int(11)                              | YES  |     | NULL    |       |
749| status         | enum('to-dryheat','to-conditioning') | YES  |     | NULL    |       |
750+----------------+--------------------------------------+------+-----+---------+-------+
751*/
752//              Console::WriteLine(S"CDialogConfig::BtnAppliquerAuto_Clicked : connexion bdd...");
753
754                        //lecture fichier qui contient le host et la base
755                        String* sHost;
756                        String* sName;
757                        try
758                                {
759                                        FileStream* fs = new FileStream("..\\condb.txt",FileMode::Open);
760                                        StreamReader* sr = new StreamReader(fs);
761                                        int count=0;
762                                        for (;;)
763                                        {
764                                                String* line = sr->ReadLine();
765                                                //commentaire sur les 3éres lignes du fichier
766                                                if (count==3)
767                                                        sHost=line;
768                                                if (count==4)
769                                                        sName=line;
770                                                count++;
771                                                if (line==0)//fin du fichier
772                                                {
773                                                        sr->Close();
774                                                        String* stra[] = {S"Host=",sHost,S" Name=",sName};
775                                                        String* str=String::Concat(stra);
776                                                        Console::WriteLine(str);
777                                                        break;
778                                                }
779                                        }
780                                }
781                        catch (System::Exception* pe)
782                                {
783                                        Console::WriteLine(pe->ToString());
784                                }
785
786//                      String* connStr = "server=lalsrv1.lal.in2p3.fr;User Id=xfel;Database=xfel_tst;port=3306;Password=pwd4xfel;";
787                        String* str[] = {S"server=",sHost,S";User Id=xfel;Database=",sName,S";port=3306;Password=pwd4xfel;"};
788                        String* connStr=String::Concat(str);
789                        MySqlConnection* conn = new MySqlConnection(connStr);
790                        try 
791                        {
792                                conn->Open();
793                        }
794                        catch (System::Exception* pe) 
795                        {
796                                MessageBox::Show(pe->ToString());
797//                      Console::WriteLine(pe->ToString());
798                        }
799
800//              String* sql = "select idstand,idpair, idcoupler1,idcoupler2 from stand_with_couplers where status='to-conditioning'";
801                        String* sql = "select idstand,idpair, idcoupler1,idcoupler2,status from stand_with_couplers where status='to-conditioning' order by idStand";
802                        MySqlCommand* cmd = new MySqlCommand(sql, conn);
803
804                        MySqlDataReader* myReader;
805                        myReader = cmd->ExecuteReader();
806                        try
807                        {
808                                uint16_t tabNumP[4]={0,0,0,0};
809                                uint16_t tabNumC1C2[8]={0,0,0,0,0,0,0,0};
810                                int rc;
811                                int size;
812
813                                while(myReader->Read())
814                                { 
815                                        String* str;
816                                        if(!String::Compare(myReader->GetString(0),"a"))//banc a
817                                        {
818                                                Console::WriteLine(myReader->GetString(1));
819                                                CGroupBox* gboxPtr = (CGroupBox*)pal->get_Item(0);
820                                                str = (myReader->GetString(1))->Remove(0,8);
821                                                gboxPtr->SetValNumP(str);
822                                                tabNumP[0] = Convert::ToInt16(str);
823                                                str = (myReader->GetString(2))->Remove(0,8);
824                                                gboxPtr->SetValNumC1(str);
825                                                tabNumC1C2[0] = Convert::ToInt16(str);
826                                                str = (myReader->GetString(3))->Remove(0,8);
827                                                gboxPtr->SetValNumC2(str);
828                                                tabNumC1C2[1] = Convert::ToInt16(str);
829                                        }
830                                        if(!String::Compare(myReader->GetString(0),"b"))//banc b
831                                        {
832                                                Console::WriteLine(myReader->GetString(1));
833                                                CGroupBox* gboxPtr = (CGroupBox*)pal->get_Item(1);
834                                                str = (myReader->GetString(1))->Remove(0,8);
835                                                gboxPtr->SetValNumP(str);
836                                                tabNumP[1] = Convert::ToInt16(str);
837                                                str = (myReader->GetString(2))->Remove(0,8);
838                                                gboxPtr->SetValNumC1(str);
839                                                tabNumC1C2[2] = Convert::ToInt16(str);
840                                                str = (myReader->GetString(3))->Remove(0,8);
841                                                gboxPtr->SetValNumC2(str);
842                                                tabNumC1C2[3] = Convert::ToInt16(str);
843                                        }
844                                        if(!String::Compare(myReader->GetString(0),"c"))//banc c
845                                        {
846                                                Console::WriteLine(myReader->GetString(1));
847                                                CGroupBox* gboxPtr = (CGroupBox*)pal->get_Item(2);
848                                                str = (myReader->GetString(1))->Remove(0,8);
849                                                gboxPtr->SetValNumP(str);
850                                                tabNumP[2] = Convert::ToInt16(str);
851                                                str = (myReader->GetString(2))->Remove(0,8);
852                                                gboxPtr->SetValNumC1(str);
853                                                tabNumC1C2[4] = Convert::ToInt16(str);
854                                                str = (myReader->GetString(3))->Remove(0,8);
855                                                gboxPtr->SetValNumC2(str);
856                                                tabNumC1C2[5] = Convert::ToInt16(str);
857                                        }
858                                        if(!String::Compare(myReader->GetString(0),"d"))//banc d
859                                        {
860                                                Console::WriteLine(myReader->GetString(1));
861                                                CGroupBox* gboxPtr = (CGroupBox*)pal->get_Item(3);
862                                                str = (myReader->GetString(1))->Remove(0,8);
863                                                gboxPtr->SetValNumP(str);
864                                                tabNumP[3] = Convert::ToInt16(str);
865                                                str = (myReader->GetString(2))->Remove(0,8);
866                                                gboxPtr->SetValNumC1(str);
867                                                tabNumC1C2[6] = Convert::ToInt16(str);
868                                                str = (myReader->GetString(3))->Remove(0,8);
869                                                gboxPtr->SetValNumC2(str);
870                                                tabNumC1C2[7] = Convert::ToInt16(str);
871                                        }
872                                }//while
873                                //fin du fichier : on ecrit sur le modbus
874                                Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write NumP NumC1 et NumC2...");
875                                size=4;
876                                rc=modbus_write_registers(ctx, 2070,size, tabNumP);//NumP
877                                if (rc != size)
878                                        Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding failed...");             
879                                size=8;
880                                rc=modbus_write_registers(ctx, 2050,size, tabNumC1C2);//NumC1 et NumC2
881                                if (rc != size)
882                                        Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding failed...");             
883                        }
884                        catch (System::Exception* pe)
885                        {
886                                Console::WriteLine(pe->ToString());
887                        }
888                        myReader->Close();
889                        conn->Close();
890                }//fin lectBddFic true
891                else//lecture fichier selectionnée
892                {
893/*
894format fichier couplers.txt (13 lignes) :
895#id conditionnement
896NumP banc a
897NumC1 banc a
898NumC2 banc a
899NumP banc b
900NumC1 banc b
901NumC2 banc b
902NumP banc c
903NumC1 banc c
904NumC2 banc c
905NumP banc d
906NumC1 banc d
907NumC2 banc d
908*/
909                        String* str;
910                        try
911                        {
912                                FileStream* fs = new FileStream("..\\couplers.txt",FileMode::Open);
913                                StreamReader* sr = new StreamReader(fs);
914                                int count=0;
915                                uint16_t tabNumP[4]={0,0,0,0};
916                                uint16_t tabNumC1C2[8]={0,0,0,0,0,0,0,0};
917                                int rc;
918                                int size;
919
920                                for (;;)
921                                {
922                                        String* line = sr->ReadLine();
923                                        CGroupBox* gboxPtr;
924                                        if (count)
925                                        {
926                                                switch (count)
927                                                {
928                                                        case 1 : case 2 : case 3 :
929                                                                {//banc a
930                                                                        Console::WriteLine(line);
931                                                                        CGroupBox* gboxPtr = (CGroupBox*)pal->get_Item(0);
932                                                                        if (count == 1)
933                                                                        {
934                                                                                gboxPtr->SetValNumP(line);
935                                                                                tabNumP[0] = Convert::ToInt16(line);
936                                                                        }
937                                                                        if (count == 2)
938                                                                        {
939                                                                                gboxPtr->SetValNumC1(line);
940                                                                                tabNumC1C2[0] = Convert::ToInt16(line);
941                                                                        }
942                                                                        if (count == 3)
943                                                                        {
944                                                                                gboxPtr->SetValNumC2(line);
945                                                                                tabNumC1C2[1] = Convert::ToInt16(line);
946                                                                        }
947                                                                }
948                                                                break;
949                                                        case 4 : case 5 : case 6 :
950                                                                {//banc b
951                                                                        Console::WriteLine(line);
952                                                                        CGroupBox* gboxPtr = (CGroupBox*)pal->get_Item(1);
953                                                                        if (count == 4)
954                                                                        {
955                                                                                gboxPtr->SetValNumP(line);
956                                                                                tabNumP[1] = Convert::ToInt16(line);
957                                                                        }
958                                                                        if (count == 5)
959                                                                        {
960                                                                                gboxPtr->SetValNumC1(line);
961                                                                                tabNumC1C2[2] = Convert::ToInt16(line);
962                                                                        }
963                                                                        if (count == 6)
964                                                                        {
965                                                                                gboxPtr->SetValNumC2(line);
966                                                                                tabNumC1C2[3] = Convert::ToInt16(line);
967                                                                        }
968                                                                }
969                                                                break;
970                                                        case 7 : case 8 : case 9 :
971                                                                {//banc c
972                                                                        Console::WriteLine(line);
973                                                                        gboxPtr = (CGroupBox*)pal->get_Item(2);
974                                                                        if (count == 7)
975                                                                        {
976                                                                                gboxPtr->SetValNumP(line);
977                                                                                tabNumP[2] = Convert::ToInt16(line);
978                                                                        }
979                                                                        if (count == 8)
980                                                                        {
981                                                                                gboxPtr->SetValNumC1(line);
982                                                                                tabNumC1C2[4] = Convert::ToInt16(line);
983                                                                        }
984                                                                        if (count == 9)
985                                                                        {
986                                                                                gboxPtr->SetValNumC2(line);
987                                                                                tabNumC1C2[5] = Convert::ToInt16(line);
988                                                                        }
989                                                                }
990                                                                break;
991                                                        case 10 : case 11 : case 12 :
992                                                                {//banc d
993                                                                        Console::WriteLine(line);
994                                                                        CGroupBox* gboxPtr = (CGroupBox*)pal->get_Item(3);
995                                                                        if (count == 10)
996                                                                        {
997                                                                                gboxPtr->SetValNumP(line);
998                                                                                tabNumP[3] = Convert::ToInt16(line);
999                                                                        }
1000                                                                        if (count == 11)
1001                                                                        {
1002                                                                                gboxPtr->SetValNumC1(line);
1003                                                                                tabNumC1C2[6] = Convert::ToInt16(line);
1004                                                                        }
1005                                                                        if (count == 12)
1006                                                                        {
1007                                                                                gboxPtr->SetValNumC2(line);
1008                                                                                tabNumC1C2[7] = Convert::ToInt16(line);
1009                                                                        }
1010                                                                }
1011                                                                break;
1012                                                }
1013                                        }
1014                                        count++;
1015                                        if (line==0)//fin du fichier : on ecrit sur le modbus
1016                                        {
1017                                                sr->Close();
1018                                                Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write NumP NumC1 et NumC2...");
1019                                                size=4;
1020                                                rc=modbus_write_registers(ctx, 2070,size, tabNumP);//NumP
1021                                                if (rc != size)
1022                                                        Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding failed...");             
1023                                                size=8;
1024                                                rc=modbus_write_registers(ctx, 2050,size, tabNumC1C2);//NumC1 et NumC2
1025                                                if (rc != size)
1026                                                        Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding failed...");             
1027                                                break;
1028                                        }
1029                                }
1030                        }
1031                        catch (System::Exception* pe)
1032                        {
1033                                Console::WriteLine(pe->ToString());
1034                        }
1035
1036                }//fin lectBddFic false
1037        }
1038
1039void CDialogConfig::Radio_Clicked(Object* pSender, EventArgs* pArgs)//remplit automatiquement la zone de texte
1040    {
1041                for(int index=0;index<NB_BANCS;index++)
1042                {//zones de texte initialisée vide
1043                        CGroupBox* gboxPtr = (CGroupBox*)pal->get_Item(index);
1044                        gboxPtr->SetValNumP("xx");
1045                        gboxPtr->SetValNumC1("xx");
1046                        gboxPtr->SetValNumC2("xx");
1047                }
1048
1049                if (pSender == rbAutoBdd)
1050                {
1051                        Console::WriteLine(S"CDialogConfig::Radio_Clicked : lecture bdd activée...");
1052                        lectBddFic=true;
1053                }
1054        else if (pSender == rbAutoFichier)
1055                {
1056                        Console::WriteLine(S"CDialogConfig::Radio_Clicked : lecture fichier activée...");
1057                        lectBddFic=false;
1058                }       
1059        }
1060
1061
1062CLabelTextBox::CLabelTextBox(String* labString, int posX, int posY, int sizeX, int sizeY, int sizeText)
1063{
1064        name=labString;
1065        labPosX=posX;
1066        labPosY=posY;
1067        labSizeX=sizeX;
1068        labSizeY=sizeY;
1069        nbInstance++;
1070
1071        lab= new Label();
1072        val= new TextBox();
1073       
1074        // dPLabel et dPBox : label et zone de saisie sont placés  l'un à côté de l'autre
1075        lab->Location = Point(labPosX, labPosY);
1076        lab->Size = System::Drawing::Size(labSizeX,labSizeY);
1077        lab->Text = name;//zone de texte initialisée
1078        lab->TextAlign = ContentAlignment::MiddleRight;
1079        val->Location = Point(labPosX+labSizeX, labPosY);
1080        val->Size = System::Drawing::Size(sizeText, 20);
1081        val->Text = "";//zone de texte initialisée vide
1082        val->Font = new System::Drawing::Font(S"Arial", 9, FontStyle::Bold);;
1083        val->ForeColor = Color::Brown;
1084}
1085
1086Label* CLabelTextBox::GetLabel()
1087{
1088        return lab;
1089}
1090
1091TextBox* CLabelTextBox::GetTextBox()
1092{
1093        return val;
1094}
1095
1096String* CLabelTextBox::GetName()
1097{
1098return name;
1099}
1100
1101void CLabelTextBox::SetVal(String* value)
1102{
1103        val->Text=value;
1104}
1105
1106String* CLabelTextBox::GetVal()
1107{
1108        return val->Text;
1109}
1110
1111void CLabelTextBox::SetColor(int value)
1112{
1113/*      if(value)
1114                val->BackColor=Color::Red;
1115        else
1116                val->BackColor=Color::White;
1117                */
1118        if(!value)
1119                val->BackColor=Color::White;
1120        if(value==1)
1121                val->BackColor=Color::Red;
1122        if(value==2)
1123                val->BackColor=Color::LemonChiffon;
1124}
1125
1126
1127MaDialogUser::MaDialogUser()
1128    {
1129        // définit les paramètres du formulaire
1130                Text = S"XSUC - lecture serveur";
1131 //       FormBorderStyle = FormBorderStyle::Fixed3D;//impossible de modifier la taille
1132                FormBorderStyle = FormBorderStyle::FixedDialog;
1133                MaximizeBox = false;
1134                MinimizeBox = false;
1135                this->ControlBox=false;
1136                Size = System::Drawing::Size(1250,800);
1137
1138        // Creation de controle
1139        OKBtn = new Button();
1140                EcritureBtn = new Button();
1141//        CancelBtn = new Button();
1142       
1143        // bouton OK
1144        OKBtn->Location = Point(900, 700);
1145        OKBtn->Name = "Bouton OK";
1146        OKBtn->Text = "OK";
1147        OKBtn->DialogResult = DialogResult::OK;
1148/*
1149        // bouton Cancel
1150        CancelBtn->Location = Point(192, 136);
1151        CancelBtn->Name = "Bouton Cancel";
1152        CancelBtn->Text = "Annuler";
1153        CancelBtn->DialogResult = DialogResult::Cancel;
1154*/
1155                // bouton Ecriture
1156        EcritureBtn->Location = Point(900, 600);
1157        EcritureBtn->Name = "Bouton Ecriture";
1158        EcritureBtn->Text = "Ecriture";
1159//              EcritureBtn->DialogResult = DialogResult::OK;//sinon fermera aussi la fenetre parente
1160
1161        // Ajoute les controles dans le formaulaire
1162        Controls->Add(OKBtn);
1163        Controls->Add(EcritureBtn);
1164
1165                pal = new ArrayList();
1166                for (indexTextBox=0;indexTextBox<20;indexTextBox++)//creation des controles dans le formulaire
1167                {
1168                        int posX=650, j=indexTextBox;
1169                        if (indexTextBox>=10)
1170                        {
1171                                posX=810;
1172                                j=indexTextBox-10;
1173                        }
1174                        pal->Add(new CLabelTextBox(nameLab_1[indexTextBox],posX,(25*j)+10,100,16,70));
1175                        CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
1176                        Controls->Add(cltbPtr->GetLabel());
1177                        Controls->Add(cltbPtr->GetTextBox());
1178                }
1179                for (;indexTextBox<26;indexTextBox++)//creation des controles dans le formulaire
1180                {
1181                        int posX=400, j=indexTextBox-20;
1182                        int sizeText=70;
1183                        if (indexTextBox==20)sizeText=20;
1184                        pal->Add(new CLabelTextBox(nameLab_1[indexTextBox],posX,(25*j)+10,100,16,sizeText));
1185                        CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
1186                        Controls->Add(cltbPtr->GetLabel());
1187                        Controls->Add(cltbPtr->GetTextBox());
1188                }
1189
1190                Setup_Group_Conditionning();
1191
1192                // Mode tt seul
1193                pal->Add(new CLabelTextBox("MODE",20,100,50,16,75));
1194                CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox++);
1195                Controls->Add(cltbPtr->GetLabel());
1196                Controls->Add(cltbPtr->GetTextBox());
1197
1198                //sauve l'index condionning
1199                indexTextBoxSave=indexTextBox;//04-07-2013 : nouveaux controles
1200                // Ln
1201                // Ln tt seul
1202                Label* ln= new Label();
1203                ln->Location = Point(950, 300);
1204                ln->Size = System::Drawing::Size(70,16);
1205                ln->Text = nameLab_5[1];//zone de texte initialisée
1206                ln->TextAlign = ContentAlignment::MiddleCenter;
1207                Controls->Add(ln);
1208                int j=0;
1209                for (;indexTextBox<(indexTextBoxSave+8);indexTextBox++)//creation des controles dans le formulaire
1210                {
1211                        int posX=850;int posY=300;
1212                        int sizeText=70;
1213                        pal->Add(new CLabelTextBox(nameLab_6[indexTextBox-indexTextBoxSave],posX,posY+(j+=20),100,16,sizeText));
1214                        CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
1215                        Controls->Add(cltbPtr->GetLabel());
1216                        Controls->Add(cltbPtr->GetTextBox());
1217//                      Console::WriteLine(indexTextBox);
1218//                      Console::WriteLine(posX);
1219//                      Console::WriteLine(posY);
1220                }
1221
1222                //sauve l'index condionning
1223                indexTextBoxSave=indexTextBox;//04-07-2013 : nouveaux controles
1224                //Tp_max
1225                //Tp_max tt seul
1226                Label* tp_max= new Label();
1227                tp_max->Location = Point(1050, 300);
1228                tp_max->Size = System::Drawing::Size(75,16);
1229                tp_max->Text = nameLab_5[2];//zone de texte initialisée
1230                tp_max->TextAlign = ContentAlignment::MiddleCenter;
1231                Controls->Add(tp_max);
1232                j=0;
1233                for (;indexTextBox<(indexTextBoxSave+7);indexTextBox++)//creation des controles dans le formulaire
1234                {
1235                        int posX=950;int posY=300;
1236                        int sizeText=70;
1237                        pal->Add(new CLabelTextBox(nameLab_6[indexTextBox-indexTextBoxSave],posX,posY+(j+=20),100,16,sizeText));
1238                        CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
1239                        Controls->Add(cltbPtr->GetLabel());
1240                        Controls->Add(cltbPtr->GetTextBox());
1241//                      Console::WriteLine(indexTextBox);
1242//                      Console::WriteLine(posX);
1243//                      Console::WriteLine(posY);
1244                }
1245
1246                //sauve l'index condionning
1247                indexTextBoxSave=indexTextBox;//04-07-2013 : nouveaux controles
1248                //Pi_max
1249                //Pi_max tt seul
1250                Label* pi_max= new Label();
1251                pi_max->Location = Point(1150, 300);
1252                pi_max->Size = System::Drawing::Size(70,16);
1253                pi_max->Text = nameLab_5[3];//zone de texte initialisée
1254                pi_max->TextAlign = ContentAlignment::MiddleCenter;
1255                Controls->Add(pi_max);
1256                j=0;
1257                for (;indexTextBox<(indexTextBoxSave+8);indexTextBox++)//creation des controles dans le formulaire
1258                {
1259                        int posX=1050;int posY=300;
1260                        int sizeText=70;
1261                        pal->Add(new CLabelTextBox(nameLab_6[indexTextBox-indexTextBoxSave],posX,posY+(j+=20),100,16,sizeText));
1262                        CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
1263                        Controls->Add(cltbPtr->GetLabel());
1264                        Controls->Add(cltbPtr->GetTextBox());
1265//                      Console::WriteLine(indexTextBox);
1266//                      Console::WriteLine(posX);
1267//                      Console::WriteLine(posY);
1268                }
1269
1270                // ERREUR tt seul
1271                //sauve l'index condionning
1272                indexTextBoxSave=indexTextBox;//04-07-2013 : nouveaux controles
1273                for (;indexTextBox<(indexTextBoxSave+1);indexTextBox++)//creation des controles dans le formulaire
1274                {
1275                        int sizeText=100;
1276                        pal->Add(new CLabelTextBox("Erreur",900,550,100,16,sizeText));
1277                        CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
1278                        Controls->Add(cltbPtr->GetLabel());
1279                        Controls->Add(cltbPtr->GetTextBox());
1280                }
1281
1282
1283                //configure les 2 propriétés : AcceptButton contient la réf du bouton par défaut du formulaire..
1284                //..on peut cliquer sur le bouton OK ou bien sur la touche Entrée du clavier..
1285                //..referme aussi la boite car DialogResult renvoie OK
1286        AcceptButton = OKBtn;
1287                //CancelButton contient la réf du bouton associée à la touche Echap du clavier
1288  //      CancelButton = CancelBtn;
1289
1290                //gestionnnaire associé aux boutons
1291                OKBtn->Click += new EventHandler(this, &MaDialogUser::OKMaDBtn_Clicked);
1292                EcritureBtn->Click += new EventHandler(this, &MaDialogUser::EcritureBtn_Clicked);
1293
1294                Setup_Group();
1295        }
1296
1297void MaDialogUser::EcritureBtn_Clicked(Object* pSender,EventArgs* pArgs)//gestionnaire d'evenement de la boite dialogue
1298        {
1299                //crée la boite de dialogue utilisateur
1300                CDialogConfig* box = new CDialogConfig();
1301                //affiche la boite de dialogue
1302                if (box->ShowDialog() == DialogResult::OK)
1303                {
1304                        //si la valeur OK est renvoyée, on affiche le nom
1305                        //MessageBox::Show(S"Ecriture");
1306                }
1307        }
1308
1309void MaDialogUser::OKMaDBtn_Clicked(Object* pSender,EventArgs* pArgs)//gestionnaire d'evenement de la boite dialogue
1310        {
1311                //arrete le lecture si activée et fermer le formulaire lorsqu'on clique sur le bouton
1312                if ((uThread!=NULL)&&(uThread->IsAlive))
1313                {
1314                        // Stop the thread. 
1315                        uThread->Suspend();
1316                        uThread=NULL;
1317                }
1318                Close();
1319        }
1320
1321float MaDialogUser::PermutToReversed(uint16_t* tab_rp_registers,int index)//permute float32 en float32 Reverse
1322        {
1323                        uint16_t wordPermuted[2];
1324
1325                        *(wordPermuted+0)= tab_rp_registers[index+1];
1326                        *(wordPermuted+1)= tab_rp_registers[index+0];
1327                        return (modbus_get_float(wordPermuted+0));//float32 Reverse
1328        }
1329
1330void MaDialogUser::ThreadProc()//gestionnaire d'evenement du thread de la boite dialogue
1331        {
1332                uint8_t tab_rp_bits[MODBUS_SIZE_READ_COILS];
1333                uint16_t tab_rp_registers_low[MODBUS_SIZE_READ_HOLDINGS_LOW];
1334                uint16_t tab_rp_registers_high[MODBUS_SIZE_READ_HOLDINGS_HIGH];
1335                int rc, adress, size;
1336                CLabelTextBox* cltbPtr;
1337
1338                for (;;)
1339                {
1340                        Thread::Sleep(500);
1341                        Console::WriteLine(S"ThreadProc: read coils...");
1342                        adress=MODBUS_BASEADR_COILS;//adresse coils=MODBUS_BASEADR_COILS
1343                        size=MODBUS_SIZE_READ_COILS;
1344                        rc = modbus_read_bits(ctx, adress, size, tab_rp_bits);////JCM : adresse coils=MODBUS_BASEADR_COILS
1345                        if (rc != size)
1346                                Console::WriteLine(S"ThreadProc: read coils failed...");
1347
1348                        Thread::Sleep(500);
1349                        Console::WriteLine(S"ThreadProc: read holdings...");
1350                        adress=MODBUS_BASEADR_LOW_HOLDINGS;//adresse holding=MODBUS_BASEADR_LOW_HOLDINGS
1351                        size=82;
1352                        rc = modbus_read_registers(ctx, adress, size, tab_rp_registers_low);
1353                        if (rc != size)
1354                                Console::WriteLine(S"ThreadProc: read holdings failed...");
1355
1356                        int indexArrayList=0;
1357                        //dtp : ui16
1358                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1359                        cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[4]));
1360                        //dt : ui16
1361                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1362                        cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[5]));   
1363                        //dP : float32
1364                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1365                        cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_low,6)));
1366                        //dPsecu : float32
1367                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1368                        cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_low,8)));
1369
1370                        //NBal : ui16
1371                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1372                        cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[42]));
1373                        cltbPtr->SetColor(2);
1374                        //P_cde : float32
1375                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1376                        cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_low,43)));
1377                        cltbPtr->SetColor(2);
1378                        //Pp : float32
1379                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1380                        cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_low,45)));
1381
1382                        //Nbal_max : ui16
1383                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1384                        cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[25]));
1385                        //Fr : ui16
1386                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1387                        cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[26]));
1388                        //N_cur : ui16
1389                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1390                        if (tab_rp_registers_low[27]==(NB_ETAPES-4))//N_cur s'arrete a 8
1391                                cltbPtr->SetVal("Balayage...");
1392                        else
1393                                cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[27]));
1394                        cltbPtr->SetColor(2);
1395
1396                        //SVd : ui16
1397                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1398                        cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[0]));
1399                        //SVfin : ui16
1400                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1401                        cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[1]));
1402                        //SV1 : ui16
1403                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1404                        cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[2]));
1405                        //SV2 : ui16
1406                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1407                        cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[3]));
1408
1409                        //V_cur : ui16
1410                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1411                        cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[37]));
1412                        cltbPtr->SetColor(2);
1413                        //Pic : float32
1414                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1415                        cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_low,38)));
1416                        //Timer : uint32
1417                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1418                        cltbPtr->SetVal(Convert::ToString((tab_rp_registers_low[40]<<16)+(tab_rp_registers_low[41])));
1419                        cltbPtr->SetColor(2);
1420
1421                        //SVil : ui16
1422                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1423                        cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[20]));
1424                        //Sleil : float32
1425                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1426                        cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_low,21)));
1427                        //STc : float32
1428                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1429                        cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_low,23)));
1430
1431                        //Eil : bool
1432                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1433                        cltbPtr->SetVal(Convert::ToString(tab_rp_bits[0]));
1434                        if(tab_rp_bits[0])//echec changer couleur
1435                                cltbPtr->SetColor(1);
1436                        else
1437                                cltbPtr->SetColor(2);
1438                        //Nil : ui16
1439                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1440                        cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[30]));
1441                        if(tab_rp_registers_low[30])//echec changer couleur
1442                                cltbPtr->SetColor(1);
1443                        else
1444                                cltbPtr->SetColor(2);
1445                        //Nil_stat : ui16
1446                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1447                        cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[31]));
1448                        cltbPtr->SetColor(2);
1449                        //P_last : float32
1450                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1451                        cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_low,32)));
1452                        cltbPtr->SetColor(2);
1453                        //N_last : ui16
1454                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1455                        cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[34]));
1456                        cltbPtr->SetColor(2);
1457                        //DPil : float32
1458                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1459                        cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_low,35)));
1460
1461                        //Num_C : tab ui16
1462                        for (int indexMbArray=50;(indexArrayList<34 && indexMbArray<58);indexMbArray++)
1463                        {
1464                                cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1465                                cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[indexMbArray]));
1466                                cltbPtr->SetColor(2);
1467                        }
1468
1469                        //Stat_C : tab bool
1470                        for (int indexMbArray=1;(indexArrayList<46 && indexMbArray<13);indexMbArray++)
1471                        {
1472                                cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1473                                cltbPtr->SetVal(Convert::ToString(tab_rp_bits[indexMbArray]));
1474/*                              if(!tab_rp_bits[indexMbArray])//echec changer couleur
1475                                        cltbPtr->SetColor(1);
1476                                else
1477                                        cltbPtr->SetColor(0);
1478*/                      }
1479
1480                        //Temp_cond : tab ui16
1481                        for (int indexMbArray=58;(indexArrayList<58 && indexMbArray<71);indexMbArray++)
1482                        {
1483                                cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1484                                cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[indexMbArray]));
1485                                cltbPtr->SetColor(2);
1486                        }
1487
1488                        //status : ui16
1489                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1490                        cltbPtr->SetColor(2);
1491                        if (tab_rp_registers_low[49] != 4)//on n'est pas ds le mode pulsing
1492                        {
1493                                cltbPtr->SetVal("ARRET");
1494                                btnStart->Enabled=false;//bouton start
1495                                btnStop->Enabled=false;//bouton stop
1496                                btnPause->Enabled=false;//bouton pause
1497                                btnReprise->Enabled=false;//bouton reprise
1498                        }
1499                        else
1500                        {//mode pulsing
1501/*
1502                                switch (tab_rp_registers_low[28]){//RetMAPR
1503                                        case 0://conditionnement arreté
1504                                                cltbPtr->SetVal("ARRET");
1505                                                btnStart->Enabled=true;//bouton start
1506                                                btnStop->Enabled=false;//bouton stop
1507                                                btnPause->Enabled=false;//bouton pause
1508                                                btnReprise->Enabled=false;//bouton reprise
1509                                        break;
1510                                        case 2: case 3://conditionnement démarré ou repris
1511                                                cltbPtr->SetVal("MARCHE");
1512                                                btnStart->Enabled=false;//bouton start
1513                                                btnStop->Enabled=true;//bouton stop
1514                                                btnPause->Enabled=true;//bouton pause
1515                                                btnReprise->Enabled=false;//bouton reprise
1516                                        break;
1517                                        case 1://conditionnement en pause
1518                                                cltbPtr->SetVal("PAUSE");
1519                                                btnStart->Enabled=false;//bouton start
1520                                                btnStop->Enabled=true;//bouton stop
1521                                                btnPause->Enabled=false;//bouton pause
1522                                                btnReprise->Enabled=true;//bouton reprise
1523                                        break;
1524                                }
1525                        if (tab_rp_registers_low[28] != tab_rp_registers_low[48])//message affiché
1526                        {
1527                                String* stra[] = {S"RetMAPR=",Convert::ToString(tab_rp_registers_low[28]),
1528                                        S" not equal to MAPR=",Convert::ToString(tab_rp_registers_low[48])};
1529                                String* str=String::Concat(stra);
1530                                Console::WriteLine(str);
1531                        }
1532*/
1533                                if ((tab_rp_registers_low[28] == 1)|| tab_rp_registers_low[29])
1534                                {//RetMAR conditionnement arreté ou defaut
1535                                        cltbPtr->SetVal("ARRET");
1536                                        btnStart->Enabled=false;//bouton start
1537                                        btnStop->Enabled=true;//bouton stop
1538                                        btnReprise->Enabled=false;//bouton reprise
1539                                }
1540                                switch (tab_rp_registers_low[28]){//RetMAR
1541                                        case 0://conditionnement arreté
1542                                                cltbPtr->SetVal("ARRET");
1543                                                btnStart->Enabled=true;//bouton start
1544                                                btnStop->Enabled=false;//bouton stop
1545                                                btnReprise->Enabled=true;//bouton reprise
1546                                        break;
1547                                        case 2: case 3://conditionnement démarré ou repris
1548                                                cltbPtr->SetVal("MARCHE");
1549                                                btnStart->Enabled=false;//bouton start
1550                                                btnStop->Enabled=true;//bouton stop
1551                                                btnReprise->Enabled=false;//bouton reprise
1552                                        break;
1553                                }
1554                                if (tab_rp_registers_low[28] != tab_rp_registers_low[48])//message affiché
1555                                {
1556                                        String* stra[] = {S"RetMAPR=",Convert::ToString(tab_rp_registers_low[28]),
1557                                                S" not equal to MAPR=",Convert::ToString(tab_rp_registers_low[48])};
1558                                        String* str=String::Concat(stra);
1559                                        Console::WriteLine(str);
1560                                }
1561                        }//fin mode pulsing
1562
1563                        //N_Seqcond : ui16
1564                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1565                        cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[47]));
1566                        cltbPtr->SetColor(2);
1567
1568                        Thread::Sleep(500);
1569                        Console::WriteLine(S"ThreadProc: read holdings...");
1570                        adress=MODBUS_BASEADR_HIGH_HOLDINGS;//adresse holding=MODBUS_BASEADR_HIGH_HOLDINGS
1571                        size=MODBUS_SIZE_READ_HOLDINGS_HIGH;
1572                        rc = modbus_read_registers(ctx, adress, size, tab_rp_registers_high);
1573                        if (rc != size)
1574                                Console::WriteLine(S"ThreadProc: read holdings failed...");
1575
1576                        //DateD HeureD : tab ui16
1577                        String* str;
1578                        String* strDD[] = {
1579                                Convert::ToString(tab_rp_registers_high[84]),
1580                                "-",
1581                                Convert::ToString(tab_rp_registers_high[85]),
1582                                "-",
1583                                Convert::ToString(tab_rp_registers_high[86])};
1584                        str=String::Concat(strDD);
1585                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1586                        cltbPtr->SetVal(str);
1587                        cltbPtr->SetColor(2);
1588                        String* strHD[] = {
1589                                Convert::ToString(tab_rp_registers_high[87]),
1590                                ":",
1591                                Convert::ToString(tab_rp_registers_high[88]),
1592                                ":",
1593                                Convert::ToString(tab_rp_registers_high[89])};
1594                        str=String::Concat(strHD);
1595                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1596                        cltbPtr->SetVal(str);
1597                        cltbPtr->SetColor(2);
1598
1599                        //DateF HeureF : tab ui16
1600                        String* strDF[] = {
1601                                Convert::ToString(tab_rp_registers_high[90]),
1602                                "-",
1603                                Convert::ToString(tab_rp_registers_high[91]),
1604                                "-",
1605                                Convert::ToString(tab_rp_registers_high[92])};
1606                        str=String::Concat(strDF);
1607                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1608                        cltbPtr->SetVal(str);
1609                        cltbPtr->SetColor(2);
1610                        String* strHF[] = {
1611                                Convert::ToString(tab_rp_registers_high[93]),
1612                                ":",
1613                                Convert::ToString(tab_rp_registers_high[94]),
1614                                ":",
1615                                Convert::ToString(tab_rp_registers_high[95])};
1616                        str=String::Concat(strHF);
1617                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1618                        cltbPtr->SetVal(str);
1619                        cltbPtr->SetColor(2);
1620
1621                        //Vides : tab ui16
1622                        for (int indexMbArray=98;indexMbArray<110;indexMbArray++)
1623                        {
1624                                cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1625                                cltbPtr->SetVal(Convert::ToString(tab_rp_registers_high[indexMbArray]));
1626                                cltbPtr->SetColor(2);
1627                        }
1628
1629                        //Prc : tab float32
1630                        for (int indexMbArray=68;indexMbArray<76;indexMbArray+=2)
1631                        {
1632                                cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1633                                cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_high,indexMbArray)));
1634                                cltbPtr->SetColor(2);
1635                        }
1636
1637                        //Pic : tab float32
1638                        for (int indexMbArray=60;indexMbArray<68;indexMbArray+=2)
1639                        {
1640                                cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1641                                cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_high,indexMbArray)));
1642                                cltbPtr->SetColor(2);
1643                        }
1644
1645                        //Pch : tab float32
1646                        for (int indexMbArray=76;indexMbArray<84;indexMbArray+=2)
1647                        {
1648                                cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1649                                cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_high,indexMbArray)));
1650                                cltbPtr->SetColor(2);
1651                        }
1652
1653                        //Ie_cur : tab float32
1654                        for (int indexMbArray=10;indexMbArray<18;indexMbArray+=2)
1655                        {
1656                                cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1657                                cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_low,indexMbArray)));
1658                                cltbPtr->SetColor(2);
1659                        }
1660
1661                        //Num_P : tab ui16
1662                        for (int indexMbArray=70;indexMbArray<74;indexMbArray++)
1663                        {
1664                                cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1665                                cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[indexMbArray]));
1666                                cltbPtr->SetColor(2);
1667                        }
1668
1669                        //Mode : ui16
1670                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1671                        switch (tab_rp_registers_low[49]){
1672                                case 0://station en mode init
1673                                        cltbPtr->SetVal("INIT");
1674                                        break;
1675                                case 1://station en mode off
1676                                        cltbPtr->SetVal("OFF");
1677                                        break;
1678                                case 2://station en mode heater
1679                                        cltbPtr->SetVal("HEATER");
1680                                        break;
1681                                case 3://station en mode standby
1682                                        cltbPtr->SetVal("STANDBY");
1683                                        break;
1684                                case 4://station en mode pulsing=conditionnement
1685                                        cltbPtr->SetVal("PULSING");
1686                                        break;
1687                                case 5://station en mode off
1688                                        cltbPtr->SetVal("STOP");
1689                                        break;
1690                        }
1691
1692                        //Ln : tab ui16
1693                        for (int indexMbArray=0;indexMbArray<8;indexMbArray++)
1694                        {
1695                                cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1696                                cltbPtr->SetVal(Convert::ToString(tab_rp_registers_high[indexMbArray]));
1697                        }
1698
1699                        //Tp_max : tab ui16
1700                        for (int indexMbArray=24;indexMbArray<31;indexMbArray++)
1701                        {
1702                                cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1703                                cltbPtr->SetVal(Convert::ToString(tab_rp_registers_high[indexMbArray]));
1704                        }
1705
1706                        //Pi_max : tab float32
1707                        for (int indexMbArray=36;indexMbArray<52;indexMbArray+=2)
1708                        {
1709                                cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1710                                cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_high,indexMbArray)));
1711                        }
1712
1713                        //Erreur : ui16
1714                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
1715                        switch (tab_rp_registers_low[29]){//Erreur
1716                                        case 1:
1717                                                cltbPtr->SetVal("IL_HARD");
1718                                                cltbPtr->SetColor(1);
1719                                        break;
1720                                        case 2:
1721                                                cltbPtr->SetVal("Timer_m_ko");
1722                                                cltbPtr->SetColor(1);
1723                                        break;
1724                                        case 3:
1725                                                cltbPtr->SetVal("Nil_sup_max");
1726                                                cltbPtr->SetColor(1);
1727                                        break;
1728                                        case 4:
1729                                                cltbPtr->SetVal("Pcde_sup_max");
1730                                                cltbPtr->SetColor(1);
1731                                        break;
1732                                        case 5:
1733                                                cltbPtr->SetVal("Def_Vcur_Sweep");
1734                                                cltbPtr->SetColor(1);
1735                                        break;
1736                                        case 6:
1737                                                cltbPtr->SetVal("Vcur_sup_SVfin");
1738                                                cltbPtr->SetColor(1);
1739                                        break;
1740                                        case 7:
1741                                                cltbPtr->SetVal("Pref_Coupleur");
1742                                                cltbPtr->SetColor(1);
1743                                        break;
1744                                        case 8:
1745                                                cltbPtr->SetVal("Temp_Coupleur");
1746                                                cltbPtr->SetColor(1);
1747                                        break;
1748                                        case 9:
1749                                                cltbPtr->SetVal("Arc Coupleur A1");
1750                                                cltbPtr->SetColor(1);
1751                                        break;
1752                                        case 10:
1753                                                cltbPtr->SetVal("Arc Coupleur A2");
1754                                                cltbPtr->SetColor(1);
1755                                        break;
1756                                        case 11:
1757                                                cltbPtr->SetVal("Arc Coupleur B1");
1758                                                cltbPtr->SetColor(1);
1759                                        break;
1760                                        case 12:
1761                                                cltbPtr->SetVal("Arc Coupleur B2");
1762                                                cltbPtr->SetColor(1);
1763                                        break;
1764                                        case 13:
1765                                                cltbPtr->SetVal("Arc Coupleur C1");
1766                                                cltbPtr->SetColor(1);
1767                                        break;
1768                                        case 14:
1769                                                cltbPtr->SetVal("Arc Coupleur C2");
1770                                                cltbPtr->SetColor(1);
1771                                        break;
1772                                        case 15:
1773                                                cltbPtr->SetVal("Arc Coupleur D1");
1774                                                cltbPtr->SetColor(1);
1775                                        break;
1776                                        case 16:
1777                                                cltbPtr->SetVal("Arc Coupleur D2");
1778                                                cltbPtr->SetColor(1);
1779                                        break;
1780                                        case 17:
1781                                                cltbPtr->SetVal("Arc Klystron");
1782                                                cltbPtr->SetColor(1);
1783                                        break;
1784                                        default:
1785                                                cltbPtr->SetVal("pas d'erreur");
1786                                                cltbPtr->SetColor(0);
1787                                        break;
1788                                }
1789                }
1790        }
1791
1792void MaDialogUser::Setup_Group ()//creation et configuration d'un groupe d'options
1793    {
1794        // Creation
1795        gbox = new GroupBox();
1796        gbox->Text = S"lecture";
1797                gbox->Size = System::Drawing::Size(200, 150);//taille du groupbox en pixels
1798        gbox->Location = Point(200, 90);
1799
1800        // Creation des boutons radio.
1801        rb1 = new RadioButton();
1802        rb1->Text = S"oui";
1803        rb1->Location = Point(10,25);
1804
1805        rb2 = new RadioButton();
1806        rb2->Text = S"non";
1807        rb2->Location = Point(10,55);
1808
1809                // ajout des controles dans le groupe
1810        gbox->Controls->Add(rb1);
1811        gbox->Controls->Add(rb2);
1812
1813        // ajout du groupe dans le formulaire.
1814        Controls->Add(gbox);
1815
1816        // associe le gestionnaire au groupe d'options
1817        rb1->Click += new EventHandler(this, &MaDialogUser::Radio_Clicked);
1818        rb2->Click += new EventHandler(this, &MaDialogUser::Radio_Clicked);
1819    }
1820
1821void MaDialogUser::Setup_Group_Conditionning()//creation et configuration d'un groupe d'options
1822    {
1823        // Creation
1824        GroupBox* gboxC = new GroupBox();
1825        gboxC->Text = S"CONDITIONNEMENT";
1826//              gboxC->Size = System::Drawing::Size(800, 450);//taille du groupbox en pixels
1827                gboxC->Size = System::Drawing::Size(810, 450);//taille du groupbox en pixels
1828 //     gboxC->Location = Point(40,300);
1829                gboxC->Location = Point(30,300);
1830
1831                Setup_Buttons_Conditionning();//configure les boutons du formulaire
1832
1833                // Num_C label tt seul
1834                Label* num_C= new Label();
1835                num_C->Location = Point(50, 390);
1836                num_C->Size = System::Drawing::Size(50,16);
1837                num_C->Text = "Num_C";//zone de texte initialisée
1838                num_C->TextAlign = ContentAlignment::MiddleRight;
1839                Controls->Add(num_C);
1840                int j=60;//depart affichage
1841/*              for (int i=0;i<NB_COUPLEURS;indexTextBox++,i++,j+=80)//creation des controles dans le formulaire
1842                {
1843                        int posX=70;
1844                        pal->Add(new CLabelTextBox(nameLab_2[i],posX+j,390,25,16,50));
1845                        CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
1846                        Controls->Add(cltbPtr->GetLabel());
1847                        Controls->Add(cltbPtr->GetTextBox());
1848                }
1849*/
1850                int posX;
1851                for (int i=0;i<NB_COUPLEURS;indexTextBox++,i++)//creation des controles dans le formulaire
1852                {
1853                        switch (i)
1854                        {
1855                                case 0:posX=120;break;
1856                                case 1:posX=190;break;
1857                                case 2:posX=300;break;
1858                                case 3:posX=370;break;
1859                                case 4:posX=480;break;
1860                                case 5:posX=550;break;
1861                                case 6:posX=660;break;
1862                                case 7:posX=730;break;
1863                        }
1864                        Console::WriteLine(posX);
1865                        pal->Add(new CLabelTextBox(nameLab_2[i],posX,390,25,16,50));
1866                        CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
1867                        Controls->Add(cltbPtr->GetLabel());
1868                        Controls->Add(cltbPtr->GetTextBox());
1869                }
1870
1871                // Stat_C label tt seul
1872                Label* stat_C= new Label();
1873                stat_C->Location = Point(50, 630);
1874                stat_C->Size = System::Drawing::Size(50,16);
1875                stat_C->Text = "Stat_C";//zone de texte initialisée
1876                stat_C->TextAlign = ContentAlignment::MiddleRight;
1877//4-07-13               Controls->Add(stat_C);
1878                j=20;//depart affichage
1879//              for (int i=0;indexTextBox<46;indexTextBox++,i++,j+=60)//creation des controles dans le formulaire
1880                for (int i=0;i<NB_ETAPES;indexTextBox++,i++,j+=60)//creation des controles dans le formulaire
1881                {
1882                        int posX=100;
1883                        pal->Add(new CLabelTextBox(Convert::ToString(i+1),posX+j,630,25,16,20));
1884                        CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
1885//4-07-13                       Controls->Add(cltbPtr->GetLabel());
1886//4-07-13                       Controls->Add(cltbPtr->GetTextBox());
1887                }
1888
1889                // Temp_cond label tt seul
1890                Label* temp_cond= new Label();
1891                temp_cond->Location = Point(50, 665);
1892                temp_cond->Size = System::Drawing::Size(65,32);
1893                temp_cond->Text = "Temp_cond       (min)";//zone de texte initialisée
1894                temp_cond->TextAlign = ContentAlignment::MiddleRight;
1895                Controls->Add(temp_cond);
1896                j=20;//depart affichage
1897                for (int i=0;i<NB_ETAPES;indexTextBox++,i++,j+=60)//creation des controles dans le formulaire
1898                {
1899                        int posX=90;
1900                        pal->Add(new CLabelTextBox(Convert::ToString(i+1),posX+j,670,25,16,40));
1901                        CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
1902                        if (i<8)//7 etapes et 1 balayage
1903                        {
1904                                Controls->Add(cltbPtr->GetLabel());
1905                                Controls->Add(cltbPtr->GetTextBox());
1906                        }
1907                }
1908
1909                // status, N_Seqcond, DateD et heureD , DateF et HeureF labels tt seul
1910                Label* status= new Label();
1911                status->Location = Point(370, 700);
1912                status->Size = System::Drawing::Size(65,16);
1913                status->Text = "status";//zone de texte initialisée
1914                status->TextAlign = ContentAlignment::MiddleRight;
1915                Controls->Add(status);
1916                Label* n_seqcond= new Label();
1917                n_seqcond->Location = Point(450, 700);
1918                n_seqcond->Size = System::Drawing::Size(65,16);
1919                n_seqcond->Text = "N_Seqcond";//zone de texte initialisée
1920                n_seqcond->TextAlign = ContentAlignment::MiddleRight;
1921                Controls->Add(n_seqcond);
1922                Label* dateD= new Label();
1923                dateD->Location = Point(510, 700);
1924                dateD->Size = System::Drawing::Size(65,16);
1925                dateD->Text = "DateD";//zone de texte initialisée
1926                dateD->TextAlign = ContentAlignment::MiddleRight;
1927                Controls->Add(dateD);
1928                Label* heureD= new Label();
1929                heureD->Location = Point(580, 700);
1930                heureD->Size = System::Drawing::Size(65,16);
1931                heureD->Text = "HeureD";//zone de texte initialisée
1932                heureD->TextAlign = ContentAlignment::MiddleRight;
1933                Controls->Add(heureD);
1934                Label* dateF= new Label();
1935                dateF->Location = Point(650, 700);
1936                dateF->Size = System::Drawing::Size(65,16);
1937                dateF->Text = "DateF";//zone de texte initialisée
1938                dateF->TextAlign = ContentAlignment::MiddleRight;
1939                Controls->Add(dateF);
1940                Label* heureF= new Label();
1941                heureF->Location = Point(720, 700);
1942                heureF->Size = System::Drawing::Size(65,16);
1943                heureF->Text = "HeureF";//zone de texte initialisée
1944                heureF->TextAlign = ContentAlignment::MiddleRight;
1945                Controls->Add(heureF);
1946                j=330;//depart affichage
1947//              for (int i=0;indexTextBox<62;indexTextBox++,i++,j+=100)//creation des controles dans le formulaire
1948                for (int i=0;i<6;indexTextBox++,i++,j+=70)//creation des controles dans le formulaire
1949                {
1950                        int posX=0;
1951                        pal->Add(new CLabelTextBox("",posX+j,720,55,16,70));
1952                        CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
1953                        Controls->Add(cltbPtr->GetTextBox());
1954                }
1955
1956                // Vides label tt seul
1957                Label* vides = new Label();
1958//              vides->Location = Point(50, 590);
1959                vides->Location = Point(35, 590);
1960//              vides->Size = System::Drawing::Size(60,32);
1961                vides->Size = System::Drawing::Size(70,40);
1962                vides->Text = "   Vides       (10-10mbar)";//zone de texte initialisée
1963                vides->TextAlign = ContentAlignment::MiddleRight;
1964                Controls->Add(vides);
1965                j=40;//depart affichage
1966                for (int i=0;i<(NB_BANCS*3);indexTextBox++,i++,j+=60)//creation des controles dans le formulaire
1967                {
1968                        int posX=70;
1969                        pal->Add(new CLabelTextBox(nameLab_4[i],posX+j,590,10,16,50));
1970                        CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
1971                        Controls->Add(cltbPtr->GetLabel());
1972                        Controls->Add(cltbPtr->GetTextBox());
1973                }
1974
1975                // Prc label tt seul
1976                Label* prc = new Label();
1977                prc->Location = Point(50, 430);
1978                prc->Size = System::Drawing::Size(50,32);
1979                prc->Text = "Prc   (kW)";//zone de texte initialisée
1980                prc->TextAlign = ContentAlignment::MiddleRight;
1981                Controls->Add(prc);
1982                j=100;//depart affichage
1983                for (int i=0;i<NB_BANCS;indexTextBox++,i++,j+=180)//creation des controles dans le formulaire
1984                {
1985                        int posX=70;
1986                        pal->Add(new CLabelTextBox(nameLab_3[i],posX+j,430,10,16,50));
1987                        CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
1988                        Controls->Add(cltbPtr->GetLabel());
1989                        Controls->Add(cltbPtr->GetTextBox());
1990                }
1991
1992                // Pic label tt seul
1993                Label* pic = new Label();
1994                pic->Location = Point(50, 470);
1995                pic->Size = System::Drawing::Size(50,32);
1996                pic->Text = "Pic   (kW)";//zone de texte initialisée
1997                pic->TextAlign = ContentAlignment::MiddleRight;
1998                Controls->Add(pic);
1999                j=100;//depart affichage
2000                for (int i=0;i<NB_BANCS;indexTextBox++,i++,j+=180)//creation des controles dans le formulaire
2001                {
2002                        int posX=70;
2003                        pal->Add(new CLabelTextBox(nameLab_3[i],posX+j,470,10,16,50));
2004                        CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
2005                        Controls->Add(cltbPtr->GetLabel());
2006                        Controls->Add(cltbPtr->GetTextBox());
2007                }
2008
2009                // Pch label tt seul
2010                Label* pch = new Label();
2011                pch->Location = Point(50, 510);
2012                pch->Size = System::Drawing::Size(50,32);
2013                pch->Text = "Pch   (kW)";//zone de texte initialisée
2014                pch->TextAlign = ContentAlignment::MiddleRight;
2015                Controls->Add(pch);
2016                j=100;//depart affichage
2017                for (int i=0;i<NB_BANCS;indexTextBox++,i++,j+=180)//creation des controles dans le formulaire
2018                {
2019                        int posX=70;
2020                        pal->Add(new CLabelTextBox(nameLab_3[i],posX+j,510,10,16,50));
2021                        CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
2022                        Controls->Add(cltbPtr->GetLabel());
2023                        Controls->Add(cltbPtr->GetTextBox());
2024                }
2025
2026                // Ie_cur label tt seul
2027                Label* ie_cur = new Label();
2028                ie_cur->Location = Point(50, 550);
2029                ie_cur->Size = System::Drawing::Size(50,32);
2030                ie_cur->Text = "Ie_cur   (V)";//zone de texte initialisée
2031                ie_cur->TextAlign = ContentAlignment::MiddleRight;
2032                Controls->Add(ie_cur);
2033                j=100;//depart affichage
2034                for (int i=0;i<NB_BANCS;indexTextBox++,i++,j+=180)//creation des controles dans le formulaire
2035                {
2036                        int posX=70;
2037                        pal->Add(new CLabelTextBox(nameLab_3[i],posX+j,550,10,16,50));
2038                        CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
2039                        Controls->Add(cltbPtr->GetLabel());
2040                        Controls->Add(cltbPtr->GetTextBox());
2041                }
2042
2043                // Num_P label tt seul
2044                Label* num_P = new Label();
2045                num_P->Location = Point(50, 350);
2046                num_P->Size = System::Drawing::Size(50,32);
2047                num_P->Text = "Num_P";//zone de texte initialisée
2048                num_P->TextAlign = ContentAlignment::MiddleRight;
2049                Controls->Add(num_P);
2050                j=100;//depart affichage
2051                for (int i=0;i<NB_BANCS;indexTextBox++,i++,j+=180)//creation des controles dans le formulaire
2052                {
2053                        int posX=70;
2054                        pal->Add(new CLabelTextBox(nameLab_3[i],posX+j,350,10,16,50));
2055                        CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
2056                        Controls->Add(cltbPtr->GetLabel());
2057                        Controls->Add(cltbPtr->GetTextBox());
2058                }
2059/*
2060                // crée un objet graphique
2061                Graphics* pg = this->CreateGraphics();
2062                //crée un objet pen
2063                Pen* pen1 = new Pen(Color::Red);
2064                //trace une ligne
2065                pg->DrawLine(pen1,20,20,100,100);
2066                //dispose l'objet Graphics
2067                pg->Dispose();
2068*/
2069        // ajout du groupe dans le formulaire.
2070        Controls->Add(gboxC);
2071
2072/*
2073        // associe le gestionnaire au groupe d'options
2074        rb1->Click += new EventHandler(this, &MaDialogUser::Radio_Clicked);
2075        rb2->Click += new EventHandler(this, &MaDialogUser::Radio_Clicked);
2076  */  }
2077
2078void MaDialogUser::Setup_Buttons_Conditionning()//creation et definition des boutons
2079    {
2080        // ajoute bouton START
2081        btnStart = new Button();
2082        btnStart->Text = S"MARCHE";//se sert de sa propriété Text pour definir son titre
2083        btnStart->Size = System::Drawing::Size(70, 20);//taille du bouton en pixels
2084                btnStart->Location = Point(70, 720);//emplacement
2085        btnStart->Click += new EventHandler(this, &MaDialogUser::BtnStart_Clicked);//creation d'un objet EventHandler en..
2086                                  //..lui transmettant un ptr sur le bouotn et l'adresse de la fonction en charge de..
2087                                  //..l'evenement
2088        Controls->Add(btnStart);//pour avertir le formulaire de la présence du bouton, on ajoute le bouton..
2089                                    //.. dans la collection des controles du formulaire
2090
2091        // idem bouton STOP
2092        btnStop = new Button();
2093        btnStop->Text = S"ARRET";
2094        btnStop->Size = System::Drawing::Size(70, 20);
2095        btnStop->Location = Point(150, 720);
2096        btnStop->Click += new EventHandler(this, &MaDialogUser::BtnStop_Clicked);
2097        Controls->Add(btnStop);
2098
2099       // idem bouton PAUSE
2100        btnPause = new Button();
2101        btnPause->Text = S"PAUSE";
2102        btnPause->Size = System::Drawing::Size(70, 20);
2103        btnPause->Location = Point(230, 720);
2104//        btnPause->Click += new EventHandler(this, &MaDialogUser::BtnPause_Clicked);
2105//        Controls->Add(btnPause);
2106
2107       // idem bouton REPRISE
2108        btnReprise = new Button();
2109        btnReprise->Text = S"REPRISE";
2110        btnReprise->Size = System::Drawing::Size(70, 20);
2111        btnReprise->Location = Point(310, 720);
2112        btnReprise->Click += new EventHandler(this, &MaDialogUser::BtnReprise_Clicked);
2113        Controls->Add(btnReprise);
2114    }
2115
2116void MaDialogUser::Radio_Clicked(Object* pSender, EventArgs* pArgs)//remplit automatiquement la zone de texte
2117    {
2118        if (pSender == rb1)
2119                {
2120                        Console::WriteLine(S"MaDialogUser::Radio_Clicked : lecture activée...");                       
2121                        Console::WriteLine(S"Main thread: Start a second thread.");
2122                        // Create the thread, passing a ThreadStart delegate that
2123                        // represents the ThreadReadModbus::ThreadProc method.
2124                        if (uThread==NULL)
2125                        {
2126                                uThread = new Thread(new ThreadStart(0, &MaDialogUser::ThreadProc));
2127                                // Start the thread. 
2128                                uThread->Start();
2129                        }
2130                }
2131        else if (pSender == rb2)
2132                {
2133                        Console::WriteLine(S"MaDialogUser::Radio_Clicked : lecture désactivée...");
2134                        if ((uThread!=NULL)&&(uThread->IsAlive))
2135                        {
2136                                // Stop the thread. 
2137                                uThread->Suspend();
2138                                uThread=NULL;
2139                        }
2140                }       
2141        }
2142
2143void MaDialogUser::BtnStart_Clicked(Object* pSender, EventArgs* pArgs)//gestionnaire d'evenements associés au bouton 1
2144    {
2145                //      MessageBox::Show(S"ça marche!", S"bouton START...");//MessageBox fait partie de l'espace de noms Forms
2146                //unique methode Show surchargée acceptant differents parametres
2147                CLabelTextBox* cltbPtr;
2148                for (int indexArrayList=0;(indexArrayList<MAX_NB_LABEL_TEXTBOX);indexArrayList++)//on cherche le LabelBox "MODE"
2149                {
2150                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList);
2151                        if(String::Compare(cltbPtr->GetName(),"MODE"))
2152                                break;//on y est
2153                        if(indexArrayList==(MAX_NB_LABEL_TEXTBOX-1))return;//il faut sortir si non trouvé
2154                }
2155                if(String::Compare(cltbPtr->GetVal(),"PULSING"))
2156                {
2157                        uint16_t tab_rp_registers[1] = { 0x2 };
2158                        Console::WriteLine(S"MaDialogUser::BtnStart_Clicked : write holding...");
2159                        int rc = modbus_write_registers(ctx, 2048,1 , tab_rp_registers);
2160                        if (rc != 1)
2161                                        Console::WriteLine(S"MaDialogUser::BtnStart_Clicked : write holding failed...");               
2162                }
2163    }
2164
2165void MaDialogUser::BtnStop_Clicked(Object* pSender, EventArgs* pArgs)//gestionnaire d'evenements associés au bouton 1
2166    {
2167//              MessageBox::Show(S"ça marche!", S"bouton STOP...");//MessageBox fait partie de l'espace de noms Forms
2168                //unique methode Show surchargée acceptant differents parametres
2169                CLabelTextBox* cltbPtr;
2170                for (int indexArrayList=0;(indexArrayList<MAX_NB_LABEL_TEXTBOX);indexArrayList++)//on cherche le LabelBox "MODE"
2171                {
2172                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList);
2173                        if(String::Compare(cltbPtr->GetName(),"MODE"))
2174                                break;//on y est
2175                        if(indexArrayList==(MAX_NB_LABEL_TEXTBOX-1))return;//il faut sortir si non trouvé
2176                }
2177                if(String::Compare(cltbPtr->GetVal(),"PULSING"))
2178                {
2179                        uint16_t tab_rp_registers[1] = { 0x0 };
2180                        Console::WriteLine(S"MaDialogUser::BtnStart_Clicked : write holding...");
2181                        int rc = modbus_write_registers(ctx, 2048,1 , tab_rp_registers);
2182                        if (rc != 1)
2183                                        Console::WriteLine(S"MaDialogUser::BtnStart_Clicked : write holding failed...");               
2184                }
2185    }
2186
2187void MaDialogUser::BtnPause_Clicked(Object* pSender, EventArgs* pArgs)//gestionnaire d'evenements associés au bouton 1
2188    {
2189//              MessageBox::Show(S"ça marche!", S"bouton PAUSE...");//MessageBox fait partie de l'espace de noms Forms
2190                //unique methode Show surchargée acceptant differents parametres
2191                CLabelTextBox* cltbPtr;
2192                for (int indexArrayList=0;(indexArrayList<MAX_NB_LABEL_TEXTBOX);indexArrayList++)//on cherche le LabelBox "MODE"
2193                {
2194                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList);
2195                        if(String::Compare(cltbPtr->GetName(),"MODE"))
2196                                break;//on y est
2197                        if(indexArrayList==(MAX_NB_LABEL_TEXTBOX-1))return;//il faut sortir si non trouvé
2198                }
2199                if(String::Compare(cltbPtr->GetVal(),"PULSING"))
2200                {
2201                        uint16_t tab_rp_registers[1] = { 0x1 };
2202                        Console::WriteLine(S"MaDialogUser::BtnStart_Clicked : write holding...");
2203                        int rc = modbus_write_registers(ctx, 2048,1 , tab_rp_registers);
2204                        if (rc != 1)
2205                                        Console::WriteLine(S"MaDialogUser::BtnStart_Clicked : write holding failed...");               
2206                }
2207    }
2208
2209void MaDialogUser::BtnReprise_Clicked(Object* pSender, EventArgs* pArgs)//gestionnaire d'evenements associés au bouton 1
2210    {
2211//              MessageBox::Show(S"ça marche!", S"bouton REPRISE...");//MessageBox fait partie de l'espace de noms Forms
2212                //unique methode Show surchargée acceptant differents parametres
2213                CLabelTextBox* cltbPtr;
2214                for (int indexArrayList=0;(indexArrayList<MAX_NB_LABEL_TEXTBOX);indexArrayList++)//on cherche le LabelBox "MODE"
2215                {
2216                        cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList);
2217                        if(String::Compare(cltbPtr->GetName(),"MODE"))
2218                                break;//on y est
2219                        if(indexArrayList==(MAX_NB_LABEL_TEXTBOX-1))return;//il faut sortir si non trouvé
2220                }
2221                if(String::Compare(cltbPtr->GetVal(),"PULSING"))
2222                {
2223                        uint16_t tab_rp_registers[1] = { 0x3 };
2224                        Console::WriteLine(S"MaDialogUser::BtnStart_Clicked : write holding...");
2225                        int rc = modbus_write_registers(ctx, 2048,1 , tab_rp_registers);
2226                        if (rc != 1)
2227                                        Console::WriteLine(S"MaDialogUser::BtnStart_Clicked : write holding failed...");               
2228                }
2229    }
2230
2231
2232void AboutBox::OKButton_Clicked(Object* pSender,EventArgs* pArgs)//gestionnaire d'evenement de la boite dialogue
2233{
2234        //se contente de fermer le formulaire lorsqu'on clique sur le bouton
2235        Close();
2236}
2237
2238AboutBox::AboutBox()//constructeur
2239    {
2240        // qqs propriétés
2241        Text = S"A propos cxfel";
2242        FormBorderStyle = FormBorderStyle::Fixed3D;//impossible de modifier la taille
2243        Size = System::Drawing::Size(300,150);
2244       
2245        // ajout de 2 labels au formulaire.
2246        Label* label1 = new Label();
2247        label1->Text = "Application client XFEL";
2248        label1->Size = System::Drawing::Size(label1->PreferredWidth,
2249                                             label1->PreferredHeight);
2250        label1->Location = Point(20, 30);
2251
2252        Label* label2 = new Label();
2253        label2->Text = "JC Marrucho, 2013";
2254        label2->Size = System::Drawing::Size(label1->PreferredWidth,
2255                                             label1->PreferredHeight);//sert à modifier auto la taille des labels..
2256                                                                                                                                        //..selon le texte
2257        label2->Location = Point(20, 30+label1->PreferredHeight+10);//sert à calculer la position du 2ème label
2258
2259        // Ajoute les controles dans le formulaire
2260        Controls->Add(label1);
2261        Controls->Add(label2);
2262
2263        // Ajout d'un bouton OK.
2264        OKButton = new Button();
2265        OKButton->Text = S"OK";
2266        OKButton->DialogResult = System::Windows::Forms::DialogResult::OK;//renvoi de la valeur OK..
2267                                                                                //.. plus besoin d'associer le gestionnaire à sa fonction.. voir plus bas
2268        OKButton->Size = System::Drawing::Size(40,25);
2269        OKButton->Location = Point(240,85);
2270
2271                //configure un gestionnaire : pas nécessaire si le formulaire renvoie une valeur.. voir + haut
2272                //OKButton->Click += new EventHandler(this,&AboutBox::OKButton_Clicked);
2273
2274        // Ajoute le bouton au formulaire.
2275        Controls->Add(OKButton);
2276        }
2277
2278       
2279MaDialog::MaDialog()
2280    {
2281        // définit les paramètres du formulaire
2282        Text = S"détails serveur";
2283        FormBorderStyle = FormBorderStyle::Fixed3D;//impossible de modifier la taille
2284        Size = System::Drawing::Size(280,200);
2285
2286        // Creation de tous les controles : TextBox pour io/port et ComboBox pour timeout
2287        ipLabel = new Label();
2288        ipBox = new TextBox();
2289        portLabel = new Label();
2290        portBox = new TextBox();
2291        timeoutLabel = new Label();
2292        timeoutCombo = new ComboBox();
2293        OKBtn = new Button();
2294        CancelBtn = new Button();
2295       
2296        // ipLabel et ipBox : label et zone de saisie sont placés  l'un à côté de l'autre
2297        ipLabel->Location = Point(16, 24);
2298        ipLabel->Size = System::Drawing::Size(48, 16);
2299        ipLabel->Text = "n°IP:";//zone de texte initialisée vide
2300        ipLabel->TextAlign = ContentAlignment::MiddleRight;
2301        ipBox->Location = Point(72, 24);
2302        ipBox->Size = System::Drawing::Size(152, 20);
2303        ipBox->Text = "";//zone de texte initialisée vide
2304
2305        // portLabel et portBox
2306        portLabel->Location = Point(16, 56);
2307        portLabel->Size = System::Drawing::Size(48, 16);
2308        portLabel->Text = "n°port:";//zone de texte initialisée vide
2309        portLabel->TextAlign = ContentAlignment::MiddleRight;
2310        portBox->Location = Point(72, 56);
2311        portBox->Size = System::Drawing::Size(152, 20);
2312        portBox->Text = "";//zone de texte initialisée
2313
2314        // timeoutLabel et timeoutCombo : : liste déroulante spécifiant le tiemout et son label
2315        timeoutLabel->Location = Point(16, 88);
2316        timeoutLabel->Size = System::Drawing::Size(48, 16);
2317        timeoutLabel->Text = "Timeout(ms):";
2318        timeoutLabel->TextAlign = ContentAlignment::MiddleRight;
2319        timeoutCombo->DropDownWidth = 121;
2320        timeoutCombo->Location = Point(72, 88);
2321        timeoutCombo->Size = System::Drawing::Size(121, 21);
2322                //5 items, pas de valeur par défaut
2323        timeoutCombo->Items->Add(S"500");
2324        timeoutCombo->Items->Add(S"1000");
2325        timeoutCombo->Items->Add(S"1500");
2326        timeoutCombo->Items->Add(S"2000");
2327        timeoutCombo->Items->Add(S"3000");
2328
2329        // bouton OK
2330        OKBtn->Location = Point(104, 136);
2331                OKBtn->Name = "Bouton OK";
2332        OKBtn->Text = "OK";
2333        OKBtn->DialogResult = DialogResult::OK;
2334
2335        // bouton Cancel
2336        CancelBtn->Location = Point(192, 136);
2337        CancelBtn->Name = "Bouton Annuler";
2338        CancelBtn->Text = "Annuler";
2339        CancelBtn->DialogResult = DialogResult::Cancel;
2340
2341        // Ajoute les controles dans le formaulaire
2342        Controls->Add(ipBox);
2343        Controls->Add(portBox);
2344        Controls->Add(ipLabel);
2345        Controls->Add(portLabel);
2346        Controls->Add(timeoutLabel);
2347        Controls->Add(timeoutCombo);
2348        Controls->Add(OKBtn);
2349        Controls->Add(CancelBtn);
2350
2351                //configure les 2 propriétés : AcceptButton contient la réf du bouton par défaut du formulaire..
2352                //..on peut cliquer sur le bouton OK ou bien sur la touche Entrée du clavier..
2353                //..referme aussi la boite car DialogResult renvoie OK
2354        AcceptButton = OKBtn;
2355                //CancelButton contient la réf du bouton associée à la touche Echap du clavier
2356        CancelButton = CancelBtn;
2357
2358                //gestionnnaire associé au bouton OK
2359                OKBtn->Click += new EventHandler(this, &MaDialog::OKMaDBtn_Clicked);
2360        }
2361
2362void MaDialog::OKMaDBtn_Clicked(Object* pSender,EventArgs* pArgs)//gestionnaire d'evenement de la boite dialogue
2363{
2364        //se contente de fermer le formulaire lorsqu'on clique sur le bouton
2365        Close();
2366}
2367
2368void MaDialog::setIp(String* theIp)
2369{
2370        ipBox->Text = theIp; 
2371}
2372   
2373String* MaDialog::getIp() 
2374{ 
2375        return ipBox->Text; 
2376}
2377
2378void MaDialog::setPort(String* thePort)
2379{ 
2380        portBox->Text = thePort;
2381}
2382
2383String* MaDialog::getPort()
2384{ 
2385        return portBox->Text;
2386}
2387
2388void MaDialog::setTimeout(int theTimeout)
2389{ 
2390        timeoutCombo->SelectedIndex = theTimeout;
2391}
2392
2393int MaDialog::getTimeout()
2394{ 
2395        return timeoutCombo->SelectedIndex;
2396}
2397
2398
2399CppForm::CppForm()//constructeur
2400    {
2401        // définit la légende du formulaire
2402                //la propriété Text est héritée de Control
2403        Text = S"XSUC";
2404
2405        // définit le style des bords
2406                //la propriété FormBorder est membre de Form
2407        FormBorderStyle = FormBorderStyle::Fixed3D;
2408
2409        // Set up controls on the form.
2410        Setup_Menu();
2411        Setup_Context_Menu();
2412        Setup_Buttons();//configure les boutons du formulaire
2413        Setup_Label();
2414//        Setup_Group();
2415//        Setup_Combo();
2416        Setup_Text();
2417
2418        // pour agrandir la zone de saisie, on rajoute des pixels, par defaut 300x300
2419 //       Size = System::Drawing::Size(450, 300);
2420        Size = System::Drawing::Size(650, 500);
2421
2422    }
2423
2424void CppForm::Btn1_Clicked(Object* pSender, EventArgs* pArgs)//gestionnaire d'evenements associés au bouton 1
2425    {
2426                MessageBox::Show(S"ça marche!", S"A FAIRE...");//MessageBox fait partie de l'espace de noms Forms
2427                //unique methode Show surchargée acceptant differents parametres
2428    }
2429
2430void CppForm::Btn2_Clicked(Object* pSender, EventArgs* pArgs)//gestionnaire d'evenements associés au bouton 2
2431    {
2432        MessageBox::Show(S"ça marche aussi!", S"A FAIRE...");//MessageBox fait partie de l'espace de noms Forms
2433                //unique methode Show surchargée acceptant differents parametres
2434    }
2435
2436void CppForm::Btn3_Clicked(Object* pSender, EventArgs* pArgs)//gestionnaire d'evenements associés au bouton 3
2437    {
2438        MessageBox::Show(S"connexion et lecture serveur", S"A FAIRE...");//MessageBox fait partie de l'espace de noms Forms
2439                //unique methode Show surchargée acceptant differents parametres
2440    }
2441
2442void CppForm::Btn4_Clicked(Object* pSender, EventArgs* pArgs)//gestionnaire d'evenements associés au bouton 4
2443    {
2444/*              uint16_t tab_rp_registers_low[MODBUS_SIZE_READ_HOLDINGS_LOW];
2445                uint16_t tab_rp_registers_high[MODBUS_SIZE_READ_HOLDINGS_HIGH];
2446                int rc, adress, size;
2447                Console::WriteLine(S"ThreadProc: read holdings...");
2448                adress=MODBUS_BASE_LOW_HOLDINGS;//adresse holding=MODBUS_BASE_LOW_HOLDINGS
2449                size=82;
2450                rc = modbus_read_registers(ctx, adress, size, tab_rp_registers_low);
2451                if (rc != size)
2452                Console::WriteLine(S"ThreadProc: read holdings failed...");
2453                Thread::Sleep(500);
2454                Console::WriteLine(S"ThreadProc: read holdings...");
2455                adress=MODBUS_BASEADR_HIGH_HOLDINGS;//adresse holding=MODBUS_BASEADR_HIGH_HOLDINGS
2456                size=MODBUS_SIZE_READ_HOLDINGS_HIGH;
2457                rc = modbus_read_registers(ctx, adress, size, tab_rp_registers_high);
2458                if (rc != size)
2459                        Console::WriteLine(S"ThreadProc: read holdings failed...");
2460*/
2461                //crée la boite de dialogue utilisateur
2462                CDialogConfig* box = new CDialogConfig();
2463                //affiche la boite de dialogue
2464                if (box->ShowDialog() == DialogResult::OK)
2465                {
2466                        //si la valeur OK est renvoyée, on affiche le nom
2467                        //MessageBox::Show(S"Ecriture");
2468                }
2469                //unique methode Show surchargée acceptant differents parametres
2470    }
2471
2472void CppForm::Combo1_SelChanged(Object* pSender, EventArgs* pArgs)//gestionnaire d'evenement associé à la liste deroulante
2473    {
2474        if (pSender == combo1)
2475        {
2476//            String* ps = String::Concat(S"New index is ",
2477//                                        __box(combo1->SelectedIndex)->ToString());
2478//            MessageBox::Show(ps, S"Index Change");
2479            String* ps = __box(combo1->SelectedIndex)->ToString();
2480                        if(String::Compare(ps,"1")==0)
2481                        {
2482                                Console::WriteLine(S"Main thread: Start a second thread.");
2483                                // Create the thread, passing a ThreadStart delegate that
2484                                // represents the ThreadReadModbus::ThreadProc method.
2485                                Thread *oThread = new Thread(new ThreadStart(0, &ThreadReadModbus::ThreadProc));
2486                                // Start the thread. 
2487                                oThread->Start();
2488                        }
2489        }
2490    }
2491
2492void CppForm::MenuItem_Clicked(Object* pSender, EventArgs* pArgs)//gestionnaire des elements de menu
2493    {
2494        if (pSender == item1)
2495        {
2496                        //affiche la boite de dialogue modale qui doit etre fermée avant de pouvoir revenir à l'application
2497//                      MessageBox::Show(S"ITEM  à propos", S"Menu");
2498                        AboutBox* box = new AboutBox();
2499                        box->ShowDialog();
2500        }
2501        else if (pSender == item2)
2502        {
2503            // Exit application.
2504            Application::Exit();
2505        }
2506                else if (pSender == item11)
2507                {
2508                        //crée la boite de dialogue
2509                        MaDialog* box = new MaDialog();
2510                        //données initiales
2511/*                      String* path = new String("c:\\temp\\condip.txt.txt");
2512                        if (!File::Exists(path))
2513                        {
2514                                Console::WriteLine("le fichier n'existe pas!");
2515                        }
2516*/
2517                        //lecture du n°IP dans le fichier condip
2518                        try
2519                        {
2520                                FileStream* fs = new FileStream("..\\condip.txt",FileMode::Open);
2521                                StreamReader* sr = new StreamReader(fs);
2522                                String* line = sr->ReadLine();
2523                                box->setIp(line);
2524                                sr->Close;
2525                                fs->Flush();
2526                                fs->Close();
2527                        }
2528                        catch (System::Exception* pe)
2529                        {
2530                                Console::WriteLine(pe->ToString());
2531                        }
2532//                      box->setIp(S"134.158.91.254");
2533                        box->setPort(S"502");
2534                        box->setTimeout(1);
2535
2536                        //affiche la boite de dialogue
2537                        if (box->ShowDialog() == DialogResult::OK)
2538            {
2539                //si la valeur OK est renvoyée, on affiche le nom
2540                MessageBox::Show(box->getIp(), S"IP du serveur");
2541            }
2542
2543                }
2544                else if (pSender == anotherItem)
2545                {
2546                        //crée la boite de dialogue utilisateur
2547                        MaDialogUser* box = new MaDialogUser();
2548                        //données initiales
2549        /*              box->setIp(S"134.158.91.254");
2550                        box->setPort(S"502");
2551                        box->setTimeout(1);
2552        */              //affiche la boite de dialogue
2553                        if (box->ShowDialog() == DialogResult::OK)
2554            {
2555                //si la valeur OK est renvoyée, on affiche le nom
2556//                MessageBox::Show(S"Lecture");
2557            }
2558                }
2559                else if (pSender == item1_1 || pSender == item1_2)
2560                {
2561//                      modbus_t *ctx;
2562                        if(pSender == item1_1)
2563                        {
2564//                              ctx = (modbus_t *) malloc(sizeof(modbus_t));
2565//                              Ex20cSquareRoot(4);
2566        //                      char* ptr = GetHeure(1);
2567        /*                      String* psone = String::Concat(S"il est ", GetHeure(1));
2568                                MessageBox::Show(psone, S"heure");
2569                                int* monInt = allou();
2570                                int taille=sizeof(monInt);
2571                                Console::WriteLine(taille);
2572                                libere(monInt);
2573*/
2574                                //lecture du n°IP dans le fichier condip
2575                                String* lineIp;
2576                                try
2577                                {
2578                                        FileStream* fs = new FileStream("..\\condip.txt",FileMode::Open);
2579                                        StreamReader* sr = new StreamReader(fs);
2580                                        lineIp = sr->ReadLine();
2581                                        sr->Close;
2582                                        fs->Flush();
2583                                        fs->Close();
2584                                }
2585                                catch (System::Exception* pe)
2586                                {
2587                                        Console::WriteLine(pe->ToString());
2588                                }
2589
2590                                Console::WriteLine(S"CppForm::MenuItem_Clicked : modbus_new_tcp...");
2591//                              ctx = modbus_new_tcp("134.158.91.254", 502);//JCM
2592                                char* chaineChar = static_cast<char *>(System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(lineIp).ToPointer());
2593                                ctx = modbus_new_tcp(chaineChar,502);//JCM
2594                                modbus_set_debug(ctx, 1);
2595//                              modbus_set_error_recovery(ctx,
2596//                                                 MODBUS_ERROR_RECOVERY_LINK |
2597//                                                 MODBUS_ERROR_RECOVERY_PROTOCOL);
2598                                modbus_set_slave(ctx,1);//JCM: avec le serveur python slave=1
2599                                if (modbus_connect(ctx) == -1) {
2600                                        Console::WriteLine(modbus_strerror(errno));
2601                                        modbus_free(ctx);
2602                                }
2603                        }
2604                        else
2605                        {
2606                                 modbus_free(ctx);
2607                        }
2608                }
2609                else if (pSender == fontDlgItem)
2610        {
2611            FontDialog* fd = new FontDialog();
2612            fd->Font = labelFont;
2613
2614            if (fd->ShowDialog() == DialogResult::OK)//la police du label est modifiée selon le choix d el'uitlisateur
2615            {
2616                MessageBox::Show(fd->Font->Name, S"la police était...");
2617                labelFont = fd->Font;
2618                theLabel->Font = labelFont;
2619            }
2620                }
2621        else
2622                        MessageBox::Show(S"AUTRE ITEM", S"Menu");
2623    }
2624
2625void CppForm::Radio_Clicked(Object* pSender, EventArgs* pArgs)//remplit automatiquement la zone de texte
2626    {
2627        if (pSender == rb1)
2628                {
2629                        text1->Text = "Read Coils choisi : \r\n\r\n"
2630                       "FC01";
2631                        uint8_t tab_rp_bits[1]; 
2632                        int rc = modbus_read_bits(ctx, MODBUS_BASEADR_COILS, 1, tab_rp_bits);////JCM : adresse coils=MODBUS_BASEADR_COILS
2633                        Console::WriteLine(S"CppForm::Radio_Clicked : read one coil...");
2634                        if (rc != 1)
2635                                Console::WriteLine(S"CppForm::Radio_Clicked : read one coil failed...");
2636                }
2637        else if (pSender == rb2)
2638                {
2639            text1->Text = "Write Coils choisi : \r\n\r\n"
2640                      "FC15";
2641                        uint8_t tab_value[77];//JCM
2642                        modbus_set_bits_from_bytes(tab_value, 0, 77, UT_BITS_TAB);
2643                        printf("tab[0]=%d,tab[1]=%d,tab[2]=%d\n", tab_value[0], tab_value[1], tab_value[2]);
2644                        int rc = modbus_write_bits(ctx, MODBUS_BASEADR_COILS,//JCM : adresse coils=MODBUS_BASEADR_COILS
2645                                77, tab_value);
2646                        if (rc != 77)
2647                                Console::WriteLine(S"CppForm::Radio_Clicked : write coil failed...");
2648                }
2649                else if (pSender == rb3)
2650                {
2651            text1->Text = "Read Holdings choisi : \r\n\r\n"
2652                      "FC03";
2653                        uint16_t tab_rp_registers[UT_REGISTERS_NB];
2654                        int rc = modbus_read_registers(ctx, MODBUS_BASEADR_LOW_HOLDINGS,//JCM : adresse holding=MODBUS_BASEADR_LOW_HOLDINGS
2655                               UT_REGISTERS_NB, tab_rp_registers);
2656                        Console::WriteLine(S"CppForm::Radio_Clicked : read holding...");
2657                        if (rc != UT_REGISTERS_NB)
2658                                Console::WriteLine(S"CppForm::Radio_Clicked : read holding failed...");
2659                }
2660                else if (pSender == rb4)
2661                {
2662                        text1->Text = "Write Holdings choisi :\r\n\r\n"
2663                       "FC16";
2664                        Random* myRnd = new Random();
2665                        float realToWrite, real = myRnd->NextDouble();
2666                        printf("random = %f\n", real<0.5 ? realToWrite=-1000*real:realToWrite=1000*real);
2667
2668                        uint16_t tab_rp_registers[48];
2669                        Console::WriteLine(S"CppForm::Radio_Clicked : write holding...");
2670                        modbus_set_float(realToWrite, tab_rp_registers);//Pi_min
2671                        int rc = modbus_write_registers(ctx, 2118,48 , tab_rp_registers);
2672                        if (rc != 48)
2673                                Console::WriteLine(S"CppForm::Radio_Clicked : write holding failed...");
2674                }
2675        }
2676
2677void CppForm::Setup_Buttons()//creation et definition du bouton
2678    {
2679        // ajoute un bouton
2680        btn1 = new Button();
2681        btn1->Text = S"OK";//se sert de sa propriété Text pour definir son titre
2682
2683        btn1->Size = System::Drawing::Size(70, 25);//taille du bouton en pixels
2684                btn1->Location = Point(230, 400);//emplacement
2685//              btn1->Font = new System::Drawing::Font(S"Verdana", 16, FontStyle::Bold);;//l'objet Font est sauvegardé dans l'objet LabelFont grâce au pointeur
2686//        btn1->ForeColor = Color::Brown;
2687
2688        btn1->Click += new EventHandler(this, &CppForm::Btn1_Clicked);//creation d'un objet EventHandler en..
2689                                  //..lui transmettant un ptr sur le bouotn et l'adresse de la fonction en charge de..
2690                                  //..l'evenement
2691
2692        Controls->Add(btn1);//pour avertir le formulaire de la présence du bouton, on ajoute le bouton..
2693                                    //.. dans la collection des controles du formulaire
2694
2695        // idem pour 2eme bouton
2696        btn2 = new Button();
2697        btn2->Text = S"Annuler";//..
2698
2699        btn2->Size = System::Drawing::Size(70, 25);//..
2700        btn2->Location = Point(310, 400);//..
2701        btn2->Click += new EventHandler(this, &CppForm::Btn2_Clicked);
2702        Controls->Add(btn2);//..
2703                                    //..
2704
2705                // idem pour 3eme bouton
2706        btn3 = new Button();
2707        btn3->Text = S"Connexion";//..
2708
2709        btn3->Size = System::Drawing::Size(120, 25);//..
2710                btn3->Location = Point(50, 220);//..
2711                btn3->Font = new System::Drawing::Font(S"Verdana", 12, FontStyle::Bold);;//l'objet Font est sauvegardé dans l'objet LabelFont grâce au pointeur
2712        btn3->ForeColor = Color::Brown;
2713
2714        btn3->Click += new EventHandler(this, &CppForm::Btn3_Clicked);
2715        Controls->Add(btn3);//..
2716                                    //..
2717                // idem pour 4eme bouton
2718        btn4 = new Button();
2719        btn4->Text = S"Ecriture";//..
2720
2721        btn4->Size = System::Drawing::Size(120, 25);//..
2722                btn4->Location = Point(475, 220);//..
2723                btn4->Font = new System::Drawing::Font(S"Verdana", 12, FontStyle::Bold);;//l'objet Font est sauvegardé dans l'objet LabelFont grâce au pointeur
2724        btn4->ForeColor = Color::Brown;
2725
2726        btn4->Click += new EventHandler(this, &CppForm::Btn4_Clicked);
2727        Controls->Add(btn4);//..
2728                                    //..
2729    }
2730
2731void CppForm::Setup_Combo ()//configuration de la liste deroulmnte
2732    {
2733        // creation
2734        combo1 = new ComboBox();
2735        combo1->DropDownStyle = ComboBoxStyle::DropDownList;
2736//        combo1->Location = Point(20,180);
2737        combo1->Location = Point(20,280);
2738   
2739        // pour ajuster la taille en fonction de la plus longue chaine
2740        // la valeur 20 correspond à la taille du bouton situé à droite du bouton d'édition
2741        Label* l1 = new Label();
2742        l1->Text = S"Automatique";
2743        combo1->Width = l1->PreferredWidth + 20;
2744       
2745        // ajout de qqs chaines et association avec tous les controles du formulaire
2746        combo1->Items->Add(S"Manuel");
2747        combo1->Items->Add(S"Automatique");
2748        combo1->Items->Add(S"...");
2749        combo1->SelectedIndex = 0;//affiche la 1ere chaine par defaut
2750
2751        // ajout du groupe dans le formulaire
2752        Controls->Add(combo1);
2753
2754        // associe le gestionnaire à liste deroulante.
2755        combo1->SelectedIndexChanged += new EventHandler(this, &CppForm::Combo1_SelChanged);
2756    }
2757
2758void CppForm::Setup_Context_Menu ()//menu contextuel
2759    {
2760        // Creation
2761        popupMenu = new System::Windows::Forms::ContextMenu();
2762
2763        // Creation des items.
2764        item_p1 = new MenuItem("UN");
2765        popupMenu->MenuItems->Add(item_p1);
2766        item_p2 = new MenuItem("DEUX");
2767        popupMenu->MenuItems->Add(item_p2);
2768        item_p3 = new MenuItem("TROIS");
2769        popupMenu->MenuItems->Add(item_p3);
2770
2771                //associe le menu contextuel au formulaire
2772        ContextMenu = popupMenu;
2773    }
2774
2775void CppForm::Setup_Group ()//creation et configuration d'un groupe d'options
2776    {
2777        // Creation
2778        gbox = new GroupBox();
2779        gbox->Text = S"Fonction Code";
2780                gbox->Size = System::Drawing::Size(200, 150);//taille du groupbox en pixels
2781        gbox->Location = Point(20, 90);
2782
2783        // Creation des boutons radio.
2784        rb1 = new RadioButton();
2785        rb1->Text = S"Read Coils";
2786        rb1->Location = Point(10,25);
2787
2788        rb2 = new RadioButton();
2789        rb2->Text = S"Write Coils";
2790        rb2->Location = Point(10,55);
2791
2792        rb3 = new RadioButton();
2793        rb3->Text = S"Read Holdings";
2794        rb3->Location = Point(10,85);
2795//        rb3->Checked = true;//c'est la valeur par defaut
2796
2797        rb4 = new RadioButton();
2798        rb4->Text = S"Write Holdings";
2799        rb4->Location = Point(10,115);
2800        rb4->Checked = true;//c'est la valeur par defaut
2801
2802                // ajout des controles dans le groupe
2803        gbox->Controls->Add(rb1);
2804        gbox->Controls->Add(rb2);
2805        gbox->Controls->Add(rb3);
2806        gbox->Controls->Add(rb4);
2807
2808        // ajout du groupe dans le formulaire.
2809        Controls->Add(gbox);
2810
2811        // associe le gestionnaire au groupe d'options
2812        rb1->Click += new EventHandler(this, &CppForm::Radio_Clicked);
2813        rb2->Click += new EventHandler(this, &CppForm::Radio_Clicked);
2814        rb3->Click += new EventHandler(this, &CppForm::Radio_Clicked);
2815        rb4->Click += new EventHandler(this, &CppForm::Radio_Clicked);
2816    }
2817
2818void CppForm::Setup_Label()//description textuelle dans le formulaire
2819    {
2820        theLabel = new Label();
2821        theLabel->AutoSize = true;
2822
2823        theLabel->Text = S"                    XFEL Supervision Client";//les espaces sont prévus pour inserer uen image
2824
2825        // definition de la police
2826 //       labelFont = new System::Drawing::Font(S"Verdana", 20, FontStyle::Italic);
2827        labelFont = new System::Drawing::Font(S"Arial", 20, FontStyle::Italic);
2828        theLabel->Font = labelFont;//l'objet Font est sauvegardé dans l'objet LabelFont grâce au pointeur
2829        theLabel->ForeColor = Color::Black;
2830
2831        // taille et emplacement
2832//        theLabel->Location = Point(300,20);
2833                theLabel->Location = Point(125,40);
2834        theLabel->Size = System::Drawing::Size(theLabel->PreferredWidth, 
2835                                               theLabel->PreferredHeight);
2836
2837        // ajout de l'image
2838 //       Bitmap* theImage = new Bitmap("SAVE.BMP");
2839        Bitmap* theImage = new Bitmap("..//image1.BMP");
2840        theLabel->Image = theImage;
2841        theLabel->ImageAlign = ContentAlignment::MiddleLeft;
2842
2843        // ajout du label dans la collection des controles du formulaire
2844        Controls->Add(theLabel);
2845    }
2846
2847void CppForm::Setup_Menu()//barre de menu
2848    {
2849        // Creation de la barre de menu principal
2850        menuBar = new MainMenu();
2851
2852        // Cree le menu fichier.
2853        fileMenu = new MenuItem("&Fichier");
2854        menuBar->MenuItems->Add(fileMenu);
2855
2856        // Cree les elements du menu et les affiche.
2857        item1 = new MenuItem("&A propos...");
2858                item11 = new MenuItem("&Choisir Serveur...");
2859                fontDlgItem = new MenuItem("&Choisir la police...");
2860        item2 = new MenuItem("S&ortie");
2861        fileMenu->MenuItems->Add(item1);
2862                fileMenu->MenuItems->Add(item11);
2863                fileMenu->MenuItems->Add(fontDlgItem);
2864        fileMenu->MenuItems->Add(item2);
2865
2866        // associe le gestionnaire ayx elements du menu.
2867        item1->Click += new EventHandler(this, &CppForm::MenuItem_Clicked);
2868        item11->Click += new EventHandler(this, &CppForm::MenuItem_Clicked);
2869                fontDlgItem->Click += new EventHandler(this, &CppForm::MenuItem_Clicked);
2870                item2->Click += new EventHandler(this, &CppForm::MenuItem_Clicked);
2871
2872        // ajoute le menu principal dans le formulaire
2873        Menu = menuBar;
2874
2875                //,menu déroulant ajouté à la barre de menu, puis 2 éléments
2876                actionMenu =new MenuItem("Action");
2877                menuBar->MenuItems->Add(actionMenu);
2878                subMenu1=new MenuItem("Faire");
2879                actionMenu->MenuItems->Add(subMenu1);
2880                //barre de séparation, le ptr n'est pas sauvegardé car le sépérateur ne peut être sélectionné
2881                actionMenu->MenuItems->Add(new MenuItem("-"));
2882                anotherItem=new MenuItem("lecture serveur");
2883                actionMenu->MenuItems->Add(anotherItem);
2884                //crée les 2 élements du menu et les ajoute
2885                item1_1 =new MenuItem("connexion serveur...");
2886                item1_2 = new MenuItem("deconnexion serveur...");
2887                subMenu1->MenuItems->Add(item1_1);
2888                subMenu1->MenuItems->Add(item1_2);
2889                //on pourrait aussi utiliser des propriétés pour afficher un syumbole..
2890                //..disant élémen tselectionné (Checked) et griser des éléments du menu (Enabled)
2891
2892        // associe le gestionnaire aux elements du menu.
2893        anotherItem->Click += new EventHandler(this, &CppForm::MenuItem_Clicked);
2894        item1_1->Click += new EventHandler(this, &CppForm::MenuItem_Clicked);
2895        item1_2->Click += new EventHandler(this, &CppForm::MenuItem_Clicked);
2896    }
2897
2898void CppForm::Setup_Text()//controle d'edition
2899    {
2900        text1 = new TextBox();
2901        text1->Location = Point(200,110);
2902        text1->Size = System::Drawing::Size(250,250);
2903        text1->Multiline = true;
2904
2905                text1->ReadOnly = true;
2906//              text1->Text = "Pour se connecter au Serveur : cliquer sur le bouton Connexion \r\n\r\n"
2907//                      "Pour configurer des paramètres : cliquer sur le bouton Ecriture \r\n\r\n";
2908                text1->Text = "Pour se connecter au Serveur : dans le menu 'Action', cliquer sur 'Faire' puis sur 'connexion serveur'.\r\n\r\n"
2909                        "on peut alors accéder aux paramètres : dans le menu 'Action', cliquer sur 'Faire' puis sur 'lecture serveur'\r\n\r\n"
2910                        "ou bien configurer des paramètres : cliquer sur le bouton Ecriture \r\n\r\n";
2911
2912
2913        Controls->Add(text1);
2914    }
Note: See TracBrowser for help on using the repository browser.