source: trunk/XSUCLWF/Cxfel.cpp @ 25

Last change on this file since 25 was 25, checked in by marrucho, 11 years ago

version du 10/07 installée à xfel

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