diff --git a/Notice avancée pour les signaux complexes GL.pdf b/Notice avancée pour les signaux complexes GL.pdf index 1b8d914..d8e71e6 100644 Binary files a/Notice avancée pour les signaux complexes GL.pdf and b/Notice avancée pour les signaux complexes GL.pdf differ diff --git a/Notice d'utilisation des signaux_complexes_GL_V8.33.pdf b/Notice d'utilisation des signaux_complexes_GL_V8.33.pdf index de06820..f9b51ca 100644 Binary files a/Notice d'utilisation des signaux_complexes_GL_V8.33.pdf and b/Notice d'utilisation des signaux_complexes_GL_V8.33.pdf differ diff --git a/Signaux_complexes_GL.map b/Signaux_complexes_GL.map index efe5f62..761d473 100644 --- a/Signaux_complexes_GL.map +++ b/Signaux_complexes_GL.map @@ -1,8 +1,8 @@ Start Length Name Class - 0001:00000000 0016EC88H .text CODE - 0002:00000000 00002C4CH .data DATA - 0002:00002C4C 00C39AC1H .bss BSS + 0001:00000000 0016EE98H .text CODE + 0002:00000000 00002C50H .data DATA + 0002:00002C50 00C39ABDH .bss BSS Detailed map of segments @@ -84,21 +84,21 @@ Detailed map of segments 0001:0009C7B4 0000924C C=CODE S=.text G=(none) M=Grids ACBP=A9 0001:000A5A00 00001748 C=CODE S=.text G=(none) M=UnitPilote ACBP=A9 0001:000A7148 000004D0 C=CODE S=.text G=(none) M=Importation ACBP=A9 - 0001:000A7618 000102A4 C=CODE S=.text G=(none) M=UnitAnalyseSegCDM ACBP=A9 - 0001:000B78BC 000026F4 C=CODE S=.text G=(none) M=UnitConfigTCO ACBP=A9 - 0001:000B9FB0 00000C40 C=CODE S=.text G=(none) M=Unit_Pilote_aig ACBP=A9 - 0001:000BABF0 00003A0C C=CODE S=.text G=(none) M=UnitConfigCellTCO ACBP=A9 - 0001:000BE5FC 00030CCC C=CODE S=.text G=(none) M=UnitTCO ACBP=A9 - 0001:000EF2C8 00002C18 C=CODE S=.text G=(none) M=UnitSR ACBP=A9 - 0001:000F1EE0 00002404 C=CODE S=.text G=(none) M=UnitCDF ACBP=A9 - 0001:000F42E4 00001613 C=CODE S=.text G=(none) M=verif_version ACBP=A9 - 0001:000F58F8 000011D0 C=CODE S=.text G=(none) M=UnitPareFeu ACBP=A9 - 0001:000F6AC8 00038090 C=CODE S=.text G=(none) M=UnitConfig ACBP=A9 - 0001:0012EB58 000029E0 C=CODE S=.text G=(none) M=UnitDebug ACBP=A9 - 0001:00131538 00000C00 C=CODE S=.text G=(none) M=UnitSimule ACBP=A9 - 0001:00132138 000023CC C=CODE S=.text G=(none) M=Unitplace ACBP=A9 - 0001:00134504 0003A2F4 C=CODE S=.text G=(none) M=UnitPrinc ACBP=A9 - 0001:0016E7F8 0000048D C=CODE S=.text G=(none) M=Signaux_complexes_GL ACBP=A9 + 0001:000A7618 000102AC C=CODE S=.text G=(none) M=UnitAnalyseSegCDM ACBP=A9 + 0001:000B78C4 000026F4 C=CODE S=.text G=(none) M=UnitConfigTCO ACBP=A9 + 0001:000B9FB8 00000C40 C=CODE S=.text G=(none) M=Unit_Pilote_aig ACBP=A9 + 0001:000BABF8 00003A0C C=CODE S=.text G=(none) M=UnitConfigCellTCO ACBP=A9 + 0001:000BE604 00030CCC C=CODE S=.text G=(none) M=UnitTCO ACBP=A9 + 0001:000EF2D0 00002C18 C=CODE S=.text G=(none) M=UnitSR ACBP=A9 + 0001:000F1EE8 00002404 C=CODE S=.text G=(none) M=UnitCDF ACBP=A9 + 0001:000F42EC 00038270 C=CODE S=.text G=(none) M=UnitConfig ACBP=A9 + 0001:0012C55C 00001613 C=CODE S=.text G=(none) M=verif_version ACBP=A9 + 0001:0012DB70 000011D0 C=CODE S=.text G=(none) M=UnitPareFeu ACBP=A9 + 0001:0012ED40 000029E0 C=CODE S=.text G=(none) M=UnitDebug ACBP=A9 + 0001:00131720 00000C00 C=CODE S=.text G=(none) M=UnitSimule ACBP=A9 + 0001:00132320 000023CC C=CODE S=.text G=(none) M=Unitplace ACBP=A9 + 0001:001346EC 0003A31C C=CODE S=.text G=(none) M=UnitPrinc ACBP=A9 + 0001:0016EA08 0000048D C=CODE S=.text G=(none) M=Signaux_complexes_GL ACBP=A9 0002:00000000 000000CC C=DATA S=.data G=DGROUP M=System ACBP=A9 0002:000000CC 00000020 C=DATA S=.data G=DGROUP M=SysInit ACBP=A9 0002:000000EC 00000254 C=DATA S=.data G=DGROUP M=SysUtils ACBP=A9 @@ -215,13 +215,13 @@ Detailed map of segments 0002:00026760 004186C8 C=BSS S=.bss G=DGROUP M=UnitTCO ACBP=A9 0002:0043EE28 00000010 C=BSS S=.bss G=DGROUP M=UnitSR ACBP=A9 0002:0043EE38 00000014 C=BSS S=.bss G=DGROUP M=UnitCDF ACBP=A9 - 0002:0043EE4C 00000018 C=BSS S=.bss G=DGROUP M=verif_version ACBP=A9 - 0002:0043EE64 00000004 C=BSS S=.bss G=DGROUP M=UnitPareFeu ACBP=A9 - 0002:0043EE68 000004FC C=BSS S=.bss G=DGROUP M=UnitConfig ACBP=A9 + 0002:0043EE4C 000004FC C=BSS S=.bss G=DGROUP M=UnitConfig ACBP=A9 + 0002:0043F348 00000018 C=BSS S=.bss G=DGROUP M=verif_version ACBP=A9 + 0002:0043F360 00000004 C=BSS S=.bss G=DGROUP M=UnitPareFeu ACBP=A9 0002:0043F364 0000002C C=BSS S=.bss G=DGROUP M=UnitDebug ACBP=A9 0002:0043F390 0000000C C=BSS S=.bss G=DGROUP M=UnitSimule ACBP=A9 0002:0043F39C 00000008 C=BSS S=.bss G=DGROUP M=Unitplace ACBP=A9 - 0002:0043F3A4 007FD71C C=BSS S=.bss G=DGROUP M=UnitPrinc ACBP=A9 + 0002:0043F3A4 007FD718 C=BSS S=.bss G=DGROUP M=UnitPrinc ACBP=A9 Bound resource files @@ -237,8 +237,8 @@ UnitConfigCellTCO.dfm UnitTCO.dfm UnitSR.dfm UnitCDF.dfm -verif_version.dfm UnitConfig.dfm +verif_version.dfm UnitDebug.dfm UnitSimule.dfm Unitplace.dfm @@ -247,4 +247,4 @@ Signaux_complexes_GL.res Signaux_complexes_GL.drf -Program entry point at 0001:0016EB08 +Program entry point at 0001:0016ED18 diff --git a/UnitAnalyseSegCDM.pas b/UnitAnalyseSegCDM.pas index 2e4f16a..a59bffe 100644 --- a/UnitAnalyseSegCDM.pas +++ b/UnitAnalyseSegCDM.pas @@ -3363,6 +3363,7 @@ begin for i:=1 to NbreBranches do compile_branche(Branche[i],i); + trier_detecteurs; Affiche('Importation terminée',clWhite); Affiche('Vérification de la cohérence :',clWhite); if verif_coherence then Affiche('Configuration cohérente',clLime); diff --git a/UnitCDF.pas b/UnitCDF.pas index cd0e1c5..87f98b8 100644 --- a/UnitCDF.pas +++ b/UnitCDF.pas @@ -105,9 +105,9 @@ begin Val(FormConfig.EditAdrSig.text,Adresse,erreur); index:=index_Signal(Adresse); LabelTitre.caption:='Adresse du signal: '+intToSTR(adresse); - erreur:=feux[index].decodeur; - feux[0]:=feux[index]; - //Asp:=feux[index].aspect; + erreur:=Signaux[index].decodeur; + Signaux[0]:=Signaux[index]; + //Asp:=Signaux[index].aspect; if erreur=5 then begin caption:='Configuration du décodeur Digikeijs'; @@ -149,27 +149,27 @@ begin end; ImageDigi.Transparent:=true; - Edit1.Text:=intToSTR(Feux[index].SR[1].sortie1); // carré - Edit2.Text:=intToSTR(Feux[index].SR[2].sortie1); // sémaphore - Edit3.Text:=intToSTR(Feux[index].SR[3].sortie1); // sémaphore cli - Edit4.Text:=intToSTR(Feux[index].SR[4].sortie1); - Edit5.Text:=intToSTR(Feux[index].SR[5].sortie1); - Edit6.Text:=intToSTR(Feux[index].SR[6].sortie1); - Edit7.Text:=intToSTR(Feux[index].SR[7].sortie1); - Edit8.Text:=intToSTR(Feux[index].SR[8].sortie1); - Edit9.Text:=intToSTR(Feux[index].SR[9].sortie1); - Edit10.Text:=intToSTR(Feux[index].SR[10].sortie1); - Edit11.Text:=intToSTR(Feux[index].SR[11].sortie1); - Edit12.Text:=intToSTR(Feux[index].SR[12].sortie1); - Edit13.Text:=intToSTR(Feux[index].SR[13].sortie1); - Edit14.Text:=intToSTR(Feux[index].SR[14].sortie1); - Edit15.Text:=intToSTR(Feux[index].SR[15].sortie1); - Edit16.Text:=intToSTR(Feux[index].SR[16].sortie1); - Edit17.Text:=intToSTR(Feux[index].SR[17].sortie1); - Edit18.Text:=intToSTR(Feux[index].SR[18].sortie1); - Edit19.Text:=intToSTR(Feux[index].SR[19].sortie1); + Edit1.Text:=intToSTR(Signaux[index].SR[1].sortie1); // carré + Edit2.Text:=intToSTR(Signaux[index].SR[2].sortie1); // sémaphore + Edit3.Text:=intToSTR(Signaux[index].SR[3].sortie1); // sémaphore cli + Edit4.Text:=intToSTR(Signaux[index].SR[4].sortie1); + Edit5.Text:=intToSTR(Signaux[index].SR[5].sortie1); + Edit6.Text:=intToSTR(Signaux[index].SR[6].sortie1); + Edit7.Text:=intToSTR(Signaux[index].SR[7].sortie1); + Edit8.Text:=intToSTR(Signaux[index].SR[8].sortie1); + Edit9.Text:=intToSTR(Signaux[index].SR[9].sortie1); + Edit10.Text:=intToSTR(Signaux[index].SR[10].sortie1); + Edit11.Text:=intToSTR(Signaux[index].SR[11].sortie1); + Edit12.Text:=intToSTR(Signaux[index].SR[12].sortie1); + Edit13.Text:=intToSTR(Signaux[index].SR[13].sortie1); + Edit14.Text:=intToSTR(Signaux[index].SR[14].sortie1); + Edit15.Text:=intToSTR(Signaux[index].SR[15].sortie1); + Edit16.Text:=intToSTR(Signaux[index].SR[16].sortie1); + Edit17.Text:=intToSTR(Signaux[index].SR[17].sortie1); + Edit18.Text:=intToSTR(Signaux[index].SR[18].sortie1); + Edit19.Text:=intToSTR(Signaux[index].SR[19].sortie1); - editNadresses.text:=intToSTR(feux[index].NA); + editNadresses.text:=intToSTR(Signaux[index].NA); end; procedure dessine_feu_CDF; @@ -179,12 +179,12 @@ begin i:=0; //ImagePilote.Picture.Bitmap:=FormPilote.ImagePilote.picture.bitmap; - EtatFeuPilote:=feux[i].EtatSignal; - AncienEtat:=feux[i].AncienEtat; + EtatFeuPilote:=Signaux[i].EtatSignal; + AncienEtat:=Signaux[i].AncienEtat; dessineCDF:=true; // demande dessin CDF pour les clignotements Vcanvas:=FormCDF.ImageDigi.picture.bitmap.Canvas; - case feux[i].aspect of + case Signaux[i].aspect of // feux de signalisation 2 : dessine_signal2(Vcanvas,0,0,1,1,EtatFeupilote,1); 3 : dessine_signal3(Vcanvas,0,0,1,1,EtatFeupilote,AncienEtat,1); @@ -215,7 +215,7 @@ var erreur : integer; begin if index<>0 then begin - val(Edit1.Text,Feux[index].SR[1].sortie1,erreur); + val(Edit1.Text,Signaux[index].SR[1].sortie1,erreur); Maj_DB; if label1.Caption=etats[1] then Maj_Etat_Signal(0,carre); dessine_feu_CDF; @@ -227,7 +227,7 @@ var erreur : integer; begin if index<>0 then begin - val(Edit2.Text,Feux[index].SR[2].sortie1,erreur); + val(Edit2.Text,Signaux[index].SR[2].sortie1,erreur); Maj_DB; if label2.Caption=etats[2] then Maj_Etat_Signal(0,semaphore); dessine_feu_CDF; @@ -239,7 +239,7 @@ var erreur : integer; begin if index<>0 then begin - val(Edit3.Text,Feux[index].SR[3].sortie1,erreur); + val(Edit3.Text,Signaux[index].SR[3].sortie1,erreur); Maj_DB; if label3.Caption=etats[3] then Maj_Etat_Signal(0,semaphore_cli); dessine_feu_CDF; @@ -251,7 +251,7 @@ var erreur : integer; begin if index<>0 then begin - val(Edit4.Text,Feux[index].SR[4].sortie1,erreur); + val(Edit4.Text,Signaux[index].SR[4].sortie1,erreur); Maj_DB; if label4.Caption=etats[4] then Maj_Etat_Signal(0,vert); dessine_feu_CDF; @@ -263,7 +263,7 @@ var erreur : integer; begin if index<>0 then begin - val(Edit5.Text,Feux[index].SR[5].sortie1,erreur); + val(Edit5.Text,Signaux[index].SR[5].sortie1,erreur); Maj_DB; if label5.Caption=etats[5] then Maj_Etat_Signal(0,vert_cli); dessine_feu_CDF; @@ -275,7 +275,7 @@ var erreur : integer; begin if index<>0 then begin - val(Edit6.Text,Feux[index].SR[6].sortie1,erreur); + val(Edit6.Text,Signaux[index].SR[6].sortie1,erreur); Maj_DB; if label6.Caption=etats[6] then Maj_Etat_Signal(0,violet); dessine_feu_CDF; @@ -287,7 +287,7 @@ var erreur : integer; begin if index<>0 then begin - val(Edit7.Text,Feux[index].SR[7].sortie1,erreur); + val(Edit7.Text,Signaux[index].SR[7].sortie1,erreur); Maj_DB; if label7.Caption=etats[7] then Maj_Etat_Signal(0,blanc); dessine_feu_CDF; @@ -299,7 +299,7 @@ var erreur : integer; begin if index<>0 then begin - val(Edit8.Text,Feux[index].SR[8].sortie1,erreur); + val(Edit8.Text,Signaux[index].SR[8].sortie1,erreur); Maj_DB; if label8.Caption=etats[8] then Maj_Etat_Signal(0,blanc_cli); dessine_feu_CDF; @@ -311,7 +311,7 @@ var erreur : integer; begin if index<>0 then begin - val(Edit9.Text,Feux[index].SR[9].sortie1,erreur); + val(Edit9.Text,Signaux[index].SR[9].sortie1,erreur); Maj_DB; if label9.Caption=etats[9] then begin Maj_Etat_Signal(0,semaphore);Maj_Etat_Signal(0,jaune);end; dessine_feu_CDF; @@ -323,7 +323,7 @@ var erreur : integer; begin if index<>0 then begin - val(Edit10.Text,Feux[index].SR[10].sortie1,erreur); + val(Edit10.Text,Signaux[index].SR[10].sortie1,erreur); Maj_DB; if label10.Caption=etats[10] then begin @@ -339,7 +339,7 @@ var erreur : integer; begin if index<>0 then begin - val(Edit11.Text,Feux[index].SR[11].sortie1,erreur); + val(Edit11.Text,Signaux[index].SR[11].sortie1,erreur); Maj_DB; if label11.Caption=etats[11] then begin Maj_Etat_Signal(0,semaphore);Maj_Etat_Signal(0,ral_30);end; dessine_feu_CDF; @@ -351,7 +351,7 @@ var erreur : integer; begin if index<>0 then begin - val(Edit12.Text,Feux[index].SR[12].sortie1,erreur); + val(Edit12.Text,Signaux[index].SR[12].sortie1,erreur); Maj_DB; if label12.Caption=etats[12] then begin Maj_Etat_Signal(0,semaphore);Maj_Etat_Signal(0,ral_60);end; dessine_feu_CDF; @@ -363,7 +363,7 @@ var erreur : integer; begin if index<>0 then begin - val(Edit13.Text,Feux[index].SR[13].sortie1,erreur); + val(Edit13.Text,Signaux[index].SR[13].sortie1,erreur); Maj_DB; if label13.Caption=etats[13] then begin Maj_Etat_Signal(0,ral_60);Maj_Etat_Signal(0,jaune_cli);end; dessine_feu_CDF; @@ -375,7 +375,7 @@ var erreur : integer; begin if index<>0 then begin - val(Edit14.Text,Feux[index].SR[14].sortie1,erreur); + val(Edit14.Text,Signaux[index].SR[14].sortie1,erreur); Maj_DB; if label14.Caption=etats[14] then begin Maj_Etat_Signal(0,semaphore);Maj_Etat_Signal(0,rappel_30);end; dessine_feu_CDF; @@ -387,7 +387,7 @@ var erreur : integer; begin if index<>0 then begin - val(Edit15.Text,Feux[index].SR[15].sortie1,erreur); + val(Edit15.Text,Signaux[index].SR[15].sortie1,erreur); Maj_DB; if label15.Caption=etats[15] then begin Maj_Etat_Signal(0,semaphore);Maj_Etat_Signal(0,rappel_60);end; dessine_feu_CDF; @@ -399,7 +399,7 @@ var erreur : integer; begin if index<>0 then begin - val(Edit16.Text,Feux[index].SR[16].sortie1,erreur); + val(Edit16.Text,Signaux[index].SR[16].sortie1,erreur); Maj_DB; if label16.Caption=etats[16] then begin Maj_Etat_Signal(0,rappel_30); Maj_Etat_Signal(0,jaune);end; dessine_feu_CDF; @@ -411,7 +411,7 @@ var erreur : integer; begin if index<>0 then begin - val(Edit17.Text,Feux[index].SR[17].sortie1,erreur); + val(Edit17.Text,Signaux[index].SR[17].sortie1,erreur); Maj_DB; if label17.Caption=etats[17] then begin Maj_Etat_Signal(0,rappel_30); Maj_Etat_Signal(0,jaune_cli);end; dessine_feu_CDF; @@ -423,7 +423,7 @@ var erreur : integer; begin if index<>0 then begin - val(Edit18.Text,Feux[index].SR[18].sortie1,erreur); + val(Edit18.Text,Signaux[index].SR[18].sortie1,erreur); Maj_DB; if label18.Caption=etats[18] then begin Maj_Etat_Signal(0,rappel_60); Maj_Etat_Signal(0,jaune);end; dessine_feu_CDF; @@ -435,7 +435,7 @@ var erreur : integer; begin if index<>0 then begin - val(Edit19.Text,Feux[index].SR[19].sortie1,erreur); + val(Edit19.Text,Signaux[index].SR[19].sortie1,erreur); Maj_DB; if label19.Caption=etats[19] then begin Maj_Etat_Signal(0,rappel_60); Maj_Etat_Signal(0,jaune_cli);end; dessine_feu_CDF; @@ -450,7 +450,7 @@ begin val(EditNAdresses.Text,i,erreur); if (i>0) and (i<6) then begin - Feux[index].Na:=i; + Signaux[index].Na:=i; Maj_DB; end; end; diff --git a/UnitConfig.dfm b/UnitConfig.dfm index 2a75587..af8102f 100644 --- a/UnitConfig.dfm +++ b/UnitConfig.dfm @@ -1,6 +1,6 @@ object FormConfig: TFormConfig - Left = 215 - Top = 91 + Left = 503 + Top = 109 Hint = 'Modifie la configuration selon les s'#233'lections choisies' BorderStyle = bsDialog Caption = 'Configuration g'#233'n'#233'rale' @@ -668,7 +668,7 @@ object FormConfig: TFormConfig Top = 8 Width = 633 Height = 497 - ActivePage = TabSheetSig + ActivePage = TabSheetCDM Font.Charset = DEFAULT_CHARSET Font.Color = clBlack Font.Height = -11 @@ -746,7 +746,7 @@ object FormConfig: TFormConfig Top = 56 Width = 249 Height = 17 - Caption = 'V'#233'rifications de nouvelle version au d'#233'marrage' + Caption = 'V'#233'rification de nouvelle version au d'#233'marrage' TabOrder = 0 end object CheckInfoVersion: TCheckBox @@ -833,7 +833,7 @@ object FormConfig: TFormConfig Height = 169 Caption = 'Au d'#233'marrage de CDM Rail : serveur' TabOrder = 2 - object RadioButton4: TRadioButton + object RadioButtonSS: TRadioButton Left = 8 Top = 16 Width = 185 @@ -841,7 +841,7 @@ object FormConfig: TFormConfig Caption = 'Ne pas d'#233'marrer de serveur' TabOrder = 0 end - object RadioButton5: TRadioButton + object RadioButtonXN: TRadioButton Left = 8 Top = 32 Width = 225 @@ -849,7 +849,7 @@ object FormConfig: TFormConfig Caption = 'XpressNet (lenz.roco)' TabOrder = 1 end - object RadioButton6: TRadioButton + object RadioButtonP50: TRadioButton Left = 8 Top = 48 Width = 217 @@ -857,7 +857,7 @@ object FormConfig: TFormConfig Caption = 'P50X intellibox' TabOrder = 2 end - object RadioButton7: TRadioButton + object RadioButtonSP: TRadioButton Left = 8 Top = 64 Width = 249 @@ -865,44 +865,44 @@ object FormConfig: TFormConfig Caption = 'Sprog' TabOrder = 3 end - object RadioButton8: TRadioButton + object RadioButtonFIS: TRadioButton Left = 8 Top = 80 - Width = 113 + Width = 177 Height = 17 - Caption = 'HSI88/HSI88-USB' + Caption = 'FIS88/HSI88/HSI88-USB' TabOrder = 4 end - object RadioButton9: TRadioButton - Left = 8 - Top = 96 - Width = 193 - Height = 17 - Caption = 'ECOS ESU' - TabOrder = 5 - end - object RadioButton10: TRadioButton + object RadioButtonECOS: TRadioButton Left = 8 Top = 128 Width = 233 Height = 17 - Caption = 'FIS88 FeedBack (S88/S88N)' - TabOrder = 6 + Caption = 'Ecos ESU' + TabOrder = 5 end - object RadioButton11: TRadioButton + object RadioButtonRS: TRadioButton Left = 8 - Top = 112 + Top = 96 Width = 209 Height = 17 Caption = 'RS2PC (Rs FeedBack interface)' - TabOrder = 7 + TabOrder = 6 end - object RadioButton12: TRadioButton + object RadioButtonDCCpl: TRadioButton Left = 8 Top = 144 Width = 209 Height = 17 Caption = 'DCC++' + TabOrder = 7 + end + object RadioButtonDCCpp: TRadioButton + Left = 8 + Top = 112 + Width = 161 + Height = 17 + Caption = 'DCCpp' TabOrder = 8 end end @@ -910,7 +910,7 @@ object FormConfig: TFormConfig Left = 312 Top = 184 Width = 297 - Height = 65 + Height = 81 Caption = 'Au d'#233'marrage de CDM Rail : interface LENZ / XpressNet' TabOrder = 3 object RadioButton13: TRadioButton @@ -961,6 +961,14 @@ object FormConfig: TFormConfig Caption = 'Genli' TabOrder = 5 end + object CheckBoxZ21: TCheckBox + Left = 8 + Top = 56 + Width = 97 + Height = 17 + Caption = 'Z21' + TabOrder = 6 + end end object GroupBox8: TGroupBox Left = 16 @@ -1024,7 +1032,7 @@ object FormConfig: TFormConfig end object GroupBox15: TGroupBox Left = 312 - Top = 256 + Top = 280 Width = 297 Height = 161 Caption = 'Divers' @@ -1072,7 +1080,6 @@ object FormConfig: TFormConfig ParentShowHint = False ShowHint = False TabOrder = 0 - Text = 'EditNbDetDist' end object EditFonte: TEdit Left = 240 @@ -1094,7 +1101,6 @@ object FormConfig: TFormConfig ParentShowHint = False ShowHint = True TabOrder = 2 - Text = 'EditNbCantons' end object EditDebug: TEdit Left = 240 @@ -1201,7 +1207,6 @@ object FormConfig: TFormConfig Height = 21 TabStop = False TabOrder = 0 - Text = 'EditcomUSB' end object EditTempoOctetUSB: TEdit Left = 232 @@ -1210,7 +1215,6 @@ object FormConfig: TFormConfig Height = 21 TabStop = False TabOrder = 1 - Text = 'EditTempoOctetUSB' end object EditTempoReponse: TEdit Left = 232 @@ -1219,7 +1223,6 @@ object FormConfig: TFormConfig Height = 21 TabStop = False TabOrder = 2 - Text = 'EditTempoReponse' end end object GroupBox4: TGroupBox @@ -1274,7 +1277,6 @@ object FormConfig: TFormConfig Height = 21 TabStop = False TabOrder = 0 - Text = 'EditIPLenz' end object EditportLenz: TEdit Left = 176 @@ -1283,7 +1285,6 @@ object FormConfig: TFormConfig Height = 21 TabStop = False TabOrder = 1 - Text = 'EditportLenz' end end object Memo1: TMemo @@ -1388,7 +1389,6 @@ object FormConfig: TFormConfig ParentShowHint = False ShowHint = True TabOrder = 1 - Text = 'EditTempoAig' end object CheckPosAig: TCheckBox Left = 16 @@ -2366,7 +2366,7 @@ object FormConfig: TFormConfig Width = 137 Height = 21 Style = csDropDownList - ItemHeight = 13 + ItemHeight = 0 TabOrder = 1 OnChange = ComboBoxDecChange end @@ -2473,7 +2473,7 @@ object FormConfig: TFormConfig Width = 137 Height = 21 Style = csDropDownList - ItemHeight = 13 + ItemHeight = 0 TabOrder = 2 OnChange = ComboBoxAspChange end @@ -2936,11 +2936,11 @@ object FormConfig: TFormConfig Caption = #224 end object LabelTrain: TLabel - Left = 16 + Left = 8 Top = 126 - Width = 49 + Width = 60 Height = 13 - Caption = 'Train D'#233'cl' + Caption = 'Train(s) D'#233'cl' end object EditAct: TEdit Left = 72 @@ -2966,7 +2966,7 @@ object FormConfig: TFormConfig object EditTrainDecl: TEdit Left = 72 Top = 124 - Width = 129 + Width = 153 Height = 21 Hint = 'Train(s) d'#233'clencheur(s) s'#233'par'#233's par des virgules pour lequel la ' + @@ -3237,8 +3237,8 @@ object FormConfig: TFormConfig end end object GroupBoxPNA: TGroupBox - Left = 168 - Top = 152 + Left = 72 + Top = 104 Width = 169 Height = 121 Caption = 'Actionneurs PN simples' diff --git a/UnitConfig.pas b/UnitConfig.pas index d5bf4e9..6959c65 100644 --- a/UnitConfig.pas +++ b/UnitConfig.pas @@ -27,15 +27,14 @@ type CheckLanceCDM: TCheckBox; CheckAvecTCO: TCheckBox; GroupBox6: TGroupBox; - RadioButton4: TRadioButton; - RadioButton5: TRadioButton; - RadioButton6: TRadioButton; - RadioButton7: TRadioButton; - RadioButton8: TRadioButton; - RadioButton9: TRadioButton; - RadioButton10: TRadioButton; - RadioButton11: TRadioButton; - RadioButton12: TRadioButton; + RadioButtonSS: TRadioButton; + RadioButtonXN: TRadioButton; + RadioButtonP50: TRadioButton; + RadioButtonSP: TRadioButton; + RadioButtonFIS: TRadioButton; + RadioButtonECOS: TRadioButton; + RadioButtonRS: TRadioButton; + RadioButtonDCCpl: TRadioButton; GroupBox7: TGroupBox; RadioButton13: TRadioButton; RadioButton14: TRadioButton; @@ -351,6 +350,8 @@ type Label28: TLabel; EditPortServeur: TEdit; ButtonPFCDM: TButton; + CheckBoxZ21: TCheckBox; + RadioButtonDCCpp: TRadioButton; procedure ButtonAppliquerEtFermerClick(Sender: TObject); procedure FormActivate(Sender: TObject); procedure FormCreate(Sender: TObject); @@ -557,6 +558,7 @@ nb_det_dist_ch='nb_det_dist'; IpV4_PC_ch='IpV4_PC'; ServicesCDM_ch='ServicesCDM'; retro_ch='retro'; +Z21_ch='Z21'; Init_aig_ch='Init_Aig'; LAY_ch='Lay'; Maxcom_ch='MaxCom'; @@ -671,8 +673,10 @@ function compile_branche(s : string;i : integer) : boolean; function encode_sig_feux(i : integer): string; procedure valide_branches; procedure trier_aig; +procedure trier_detecteurs; function decodeDCC(s : string) : string; function encode_aig(index : integer): string; +function Ipok(s : string) : boolean; implementation @@ -717,12 +721,12 @@ procedure Maj_Hint_Signal(indexFeu : integer); var s : string; begin // ne pas supprimer le @= qui sert de marqueur pour identifier le feu - s:='Index='+IntToSTR(IndexFeu)+' @='+inttostr(feux[IndexFeu].Adresse)+' Décodeur='+decodeur[feux[IndexFeu].Decodeur]+ - ' Adresse détecteur associé='+intToSTR(feux[IndexFeu].Adr_det1)+ - ' Adresse élement suivant='+intToSTR(feux[IndexFeu].Adr_el_suiv1); - if feux[IndexFeu].Btype_suiv1=aig then s:=s+' (aig)'; + s:='Index='+IntToSTR(IndexFeu)+' @='+inttostr(Signaux[IndexFeu].Adresse)+' Décodeur='+decodeur[Signaux[IndexFeu].Decodeur]+ + ' Adresse détecteur associé='+intToSTR(Signaux[IndexFeu].Adr_det1)+ + ' Adresse élement suivant='+intToSTR(Signaux[IndexFeu].Adr_el_suiv1); + if Signaux[IndexFeu].Btype_suiv1=aig then s:=s+' (aig)'; - feux[indexFeu].Img.Hint:=s; + Signaux[indexFeu].Img.Hint:=s; end; // demande les services Com-IP à CDM @@ -838,10 +842,10 @@ begin begin i:=pos('.',s); if i=0 then begin IpOK:=false;exit;end; - val(copy(s,1,i-1),octet,erreur);if (erreur<>0) or (octet>255) then begin IpOK:=false;exit;end; + val(copy(s,1,i-1),octet,erreur);if (erreur<>0) or (octet<0) or (octet>255) then begin IpOK:=false;exit;end; delete(s,1,i); end; - val(s,octet,erreur);if (erreur<>0) or (octet>255) then begin IpOK:=false;exit;end; + val(s,octet,erreur);if (octet<0) or (octet>255) then begin IpOK:=false;exit;end; ipOK:=true; end; @@ -1056,62 +1060,62 @@ begin TypeElAIg_to_char:=s; end; -// transforme le signal du tableau feux[] en texte +// transforme le signal du tableau Signaux[] en texte function encode_sig_feux(i : integer): string; var s : string; adresse,aspect,j,k,NfeuxDir,CondCarre,CondFeuBlanc,nc : integer; begin // adresse - adresse:=feux[i].adresse; + adresse:=Signaux[i].adresse; if affevt then Affiche('Encode_sig_feux('+IntToSTR(i)+') : adresse='+IntToSTR(adresse),clyellow); if adresse=0 then begin encode_sig_feux:='';exit;end; s:=IntToSTR(adresse)+','; // forme - D=directionnel ajouter 10 - aspect:=feux[i].aspect; + aspect:=Signaux[i].aspect; if (aspect<10) or (aspect>=20) then s:=s+IntToSTR(aspect)+',' else s:=s+'D'+intToSTR(aspect-10)+','; // bouton feu blanc, n'existe pas pour un feu directionnel (aspect>10) - if (aspect<10) or (aspect>=20) then begin if feux[i].feublanc then s:=s+'1,' else s:=s+'0,';end; + if (aspect<10) or (aspect>=20) then begin if Signaux[i].feublanc then s:=s+'1,' else s:=s+'0,';end; // décodeur - s:=s+IntToSTR(feux[i].decodeur)+','; + s:=s+IntToSTR(Signaux[i].decodeur)+','; // detecteur et élement suivant (4 maxi) // signal non directionnel if (aspect<10) or (aspect>=20) then begin - s:=s+'('+IntToSTR(feux[i].Adr_det1)+','+TypeEl_To_char(feux[i].Btype_suiv1)+IntToSTR(feux[i].Adr_el_suiv1); - j:=feux[i].Adr_det2; - if j<>0 then s:=s+','+IntToSTR(feux[i].Adr_det2)+','+TypeEl_To_char(feux[i].Btype_suiv2)+IntToSTR(feux[i].Adr_el_suiv2); - j:=feux[i].Adr_det3; - if j<>0 then s:=s+','+IntToSTR(feux[i].Adr_det3)+','+TypeEl_To_char(feux[i].Btype_suiv3)+IntToSTR(feux[i].Adr_el_suiv3); - j:=feux[i].Adr_det4; - if j<>0 then s:=s+','+IntToSTR(feux[i].Adr_det4)+','+TypeEl_To_char(feux[i].Btype_suiv4)+IntToSTR(feux[i].Adr_el_suiv4); + s:=s+'('+IntToSTR(Signaux[i].Adr_det1)+','+TypeEl_To_char(Signaux[i].Btype_suiv1)+IntToSTR(Signaux[i].Adr_el_suiv1); + j:=Signaux[i].Adr_det2; + if j<>0 then s:=s+','+IntToSTR(Signaux[i].Adr_det2)+','+TypeEl_To_char(Signaux[i].Btype_suiv2)+IntToSTR(Signaux[i].Adr_el_suiv2); + j:=Signaux[i].Adr_det3; + if j<>0 then s:=s+','+IntToSTR(Signaux[i].Adr_det3)+','+TypeEl_To_char(Signaux[i].Btype_suiv3)+IntToSTR(Signaux[i].Adr_el_suiv3); + j:=Signaux[i].Adr_det4; + if j<>0 then s:=s+','+IntToSTR(Signaux[i].Adr_det4)+','+TypeEl_To_char(Signaux[i].Btype_suiv4)+IntToSTR(Signaux[i].Adr_el_suiv4); s:=s+'),'; //verrouillage au carré - if feux[i].verrouCarre then s:=s+'1' else s:=s+'0'; + if Signaux[i].verrouCarre then s:=s+'1' else s:=s+'0'; // feu vert cli - if feux[i].checkFV then s:=s+',FVC1' else s:=s+',FVC0'; + if Signaux[i].checkFV then s:=s+',FVC1' else s:=s+',FVC0'; // feu rouge cli - if feux[i].checkFR then s:=s+',FRC1' else s:=s+',FRC0'; + if Signaux[i].checkFR then s:=s+',FRC1' else s:=s+',FRC0'; // si unisemaf, paramètre supplémentaire - if (feux[i].decodeur=6) then s:=s+',U'+intToSTR(feux[i].unisemaf); + if (Signaux[i].decodeur=6) then s:=s+',U'+intToSTR(Signaux[i].unisemaf); // conditions supplémentaires pour le carré for nc:=1 to 6 do begin - CondCarre:=Length(feux[i].condcarre[nc]); // nombre de conditions (nombre de parenthèses ex 3 pour (A21S,A6D)(A30S,A20D)(A1D,A2S,A3D) + CondCarre:=Length(Signaux[i].condcarre[nc]); // nombre de conditions (nombre de parenthèses ex 3 pour (A21S,A6D)(A30S,A20D)(A1D,A2S,A3D) dec(condcarre); if condCarre>0 then begin s:=s+',('; for k:=1 to condcarre do begin - s:=s+'A'+IntToSTR(feux[i].condcarre[nc][k].Adresse)+feux[i].condcarre[nc][k].PosAig; + s:=s+'A'+IntToSTR(Signaux[i].condcarre[nc][k].Adresse)+Signaux[i].condcarre[nc][k].PosAig; if k0 then begin s:=s+',CFB('; for k:=1 to CondFeuBlanc do begin - s:=s+'A'+IntToSTR(feux[i].CondFeuBlanc[nc][k].Adresse)+feux[i].CondFeuBlanc[nc][k].PosAig; + s:=s+'A'+IntToSTR(Signaux[i].CondFeuBlanc[nc][k].Adresse)+Signaux[i].CondFeuBlanc[nc][k].PosAig; if k1 then begin @@ -1236,10 +1241,10 @@ begin Affiche('Erreur 672 ligne '+chaine_signal+' 6 feux maximum pour un panneau directionnel',clred); exit; end; - feux[i].aspect:=l+10;Delete(s,1,j); + Signaux[i].aspect:=l+10;Delete(s,1,j); // décodeur val(s,adr,erreur); - Feux[i].decodeur:=adr; + Signaux[i].decodeur:=adr; if (adr>NbDecodeur-1) then Affiche('Erreur 673 ligne '+chaine_signal+' : erreur décodeur inconnu',clred); j:=pos(',',s);Delete(s,1,j); // liste des aiguillages @@ -1254,9 +1259,9 @@ begin val(s,adr,erreur); // adresse c:=#0; if erreur<>0 then c:=s[erreur]; // type - setlength(feux[i].AigDirection[k],j+1); // augmenter le tableau dynamique - feux[i].AigDirection[k][j].PosAig:=c; - feux[i].AigDirection[k][j].Adresse:=adr; + setlength(Signaux[i].AigDirection[k],j+1); // augmenter le tableau dynamique + Signaux[i].AigDirection[k][j].PosAig:=c; + Signaux[i].AigDirection[k][j].Adresse:=adr; delete(s,1,erreur); // supprime jusque S //Affiche(s,clLime); if s[1]=',' then delete(s,1,1); @@ -1281,17 +1286,17 @@ begin Affiche('Erreur 676: configuration aspect ('+intToSTR(asp)+') signal incorrect à la ligne '+chaine_signal,clRed); asp:=2; end; - feux[i].aspect:=asp;Delete(s,1,j); + Signaux[i].aspect:=asp;Delete(s,1,j); j:=pos(',',s); - if j>1 then begin Feux[i].FeuBlanc:=(copy(s,1,j-1))='1';delete(s,1,j);end; + if j>1 then begin Signaux[i].FeuBlanc:=(copy(s,1,j-1))='1';delete(s,1,j);end; j:=pos(',',s); - val(s,Feux[i].decodeur,erreur); + val(s,Signaux[i].decodeur,erreur); - if (Feux[i].decodeur>NbDecodeurdeBase+NbreDecPers-1) then Affiche('Erreur 677 Ligne '+chaine_signal+' : erreur décodeur inconnu: '+intToSTR(Feux[i].decodeur),clred); + if (Signaux[i].decodeur>NbDecodeurdeBase+NbreDecPers-1) then Affiche('Erreur 677 Ligne '+chaine_signal+' : erreur décodeur inconnu: '+intToSTR(Signaux[i].decodeur),clred); if j<>0 then delete(s,1,j); - feux[i].Adr_el_suiv1:=0;feux[i].Adr_el_suiv2:=0;feux[i].Adr_el_suiv3:=0;feux[i].Adr_el_suiv4:=0; - feux[i].Btype_Suiv1:=rien;feux[i].Btype_Suiv2:=rien;feux[i].Btype_Suiv3:=rien;feux[i].Btype_Suiv4:=rien; - feux[i].Adr_det1:=0;feux[i].Adr_det2:=0;feux[i].Adr_det3:=0;feux[i].Adr_det4:=0; + Signaux[i].Adr_el_suiv1:=0;Signaux[i].Adr_el_suiv2:=0;Signaux[i].Adr_el_suiv3:=0;Signaux[i].Adr_el_suiv4:=0; + Signaux[i].Btype_Suiv1:=rien;Signaux[i].Btype_Suiv2:=rien;Signaux[i].Btype_Suiv3:=rien;Signaux[i].Btype_Suiv4:=rien; + Signaux[i].Adr_det1:=0;Signaux[i].Adr_det2:=0;Signaux[i].Adr_det3:=0;Signaux[i].Adr_det4:=0; // éléments optionnels des voies supplémentaires if j<>0 then begin @@ -1315,25 +1320,25 @@ begin end; end; inc(j); - if (j=1) then feux[i].Adr_det1:=adr; - if (j=2) then feux[i].Adr_det2:=adr; - if (j=3) then feux[i].Adr_det3:=adr; - if (j=4) then feux[i].Adr_det4:=adr; + if (j=1) then Signaux[i].Adr_det1:=adr; + if (j=2) then Signaux[i].Adr_det2:=adr; + if (j=3) then Signaux[i].Adr_det3:=adr; + if (j=4) then Signaux[i].Adr_det4:=adr; //type de l'élément suivant (1=détecteur 2=aig ou TJD ou TJS 4=tri if s[1]='A' then begin - if (j=1) then feux[i].Btype_Suiv1:=aig; - if (j=2) then feux[i].Btype_Suiv2:=aig; - if (j=3) then feux[i].Btype_Suiv3:=aig; - if (j=4) then feux[i].Btype_Suiv4:=aig; + if (j=1) then Signaux[i].Btype_Suiv1:=aig; + if (j=2) then Signaux[i].Btype_Suiv2:=aig; + if (j=3) then Signaux[i].Btype_Suiv3:=aig; + if (j=4) then Signaux[i].Btype_Suiv4:=aig; delete(s,1,1); end else begin // détecteur - if (j=1) then feux[i].Btype_Suiv1:=det; - if (j=2) then feux[i].Btype_Suiv2:=det; - if (j=3) then feux[i].Btype_Suiv3:=det; - if (j=4) then feux[i].Btype_Suiv4:=det; + if (j=1) then Signaux[i].Btype_Suiv1:=det; + if (j=2) then Signaux[i].Btype_Suiv2:=det; + if (j=3) then Signaux[i].Btype_Suiv3:=det; + if (j=4) then Signaux[i].Btype_Suiv4:=det; end; Val(s,adr,erreur); if Adr>NbMaxDet then @@ -1341,10 +1346,10 @@ begin Affiche('Erreur 677B : ligne '+chaine_signal+' : adresse élément trop grand: '+intToSTR(adr),clred); Adr:=NbMaxDet; end; - if (j=1) then feux[i].Adr_el_suiv1:=Adr; - if (j=2) then feux[i].Adr_el_suiv2:=Adr; - if (j=3) then feux[i].Adr_el_suiv3:=Adr; - if (j=4) then feux[i].Adr_el_suiv4:=Adr; + if (j=1) then Signaux[i].Adr_el_suiv1:=Adr; + if (j=2) then Signaux[i].Adr_el_suiv2:=Adr; + if (j=3) then Signaux[i].Adr_el_suiv3:=Adr; + if (j=4) then Signaux[i].Adr_el_suiv4:=Adr; delete(s,1,erreur-1); if s[1]=',' then delete(s,1,1); fini:=s[1]=')'; @@ -1361,19 +1366,19 @@ begin delete(s,1,k); //Affiche('s='+s,clyellow); if length(s)=0 then begin Affiche('Erreur 679: fichier de configuration ligne erronnée : '+chaine_signal,clred); closefile(fichier);exit;end; - feux[i].VerrouCarre:=s[1]='1'; + Signaux[i].VerrouCarre:=s[1]='1'; delete(s,1,1); if length(s)>0 then if s[1]=',' then delete(s,1,1); if copy(s,1,3)='FVC' then begin delete(s,1,3); - if length(s)>0 then begin feux[i].checkFV:=s[1]='1';delete(s,1,1);end; + if length(s)>0 then begin Signaux[i].checkFV:=s[1]='1';delete(s,1,1);end; end; if length(s)>0 then if s[1]=',' then delete(s,1,1); if copy(s,1,3)='FRC' then begin delete(s,1,3); - if length(s)>0 then begin feux[i].checkFR:=s[1]='1';delete(s,1,1);end; + if length(s)>0 then begin Signaux[i].checkFR:=s[1]='1';delete(s,1,1);end; end; if length(s)>0 then if s[1]=',' then delete(s,1,1); if length(s)>0 then @@ -1387,7 +1392,7 @@ begin begin j:=5;affiche('Paramètre NA incorrect dans ligne '+chaine_signal,clred) end; - feux[i].na:=j; + Signaux[i].na:=j; end; end; @@ -1403,7 +1408,7 @@ begin begin j:=0;affiche('Paramètre VCV incorrect dans ligne '+chaine_signal,clred) end; - feux[i].verscontrevoie:=j=1; + Signaux[i].verscontrevoie:=j=1; end; end; if length(s)>0 then if s[1]=',' then delete(s,1,1); @@ -1418,23 +1423,23 @@ begin begin j:=0;affiche('Paramètre CV incorrect dans ligne '+chaine_signal,clred) end; - feux[i].contrevoie:=j=1; + Signaux[i].contrevoie:=j=1; end; end; if length(s)>0 then if s[1]='U' then delete(s,1,1); // si décodeur UniSemaf (6) champ supplémentaire U - if (Feux[i].decodeur=6) then + if (Signaux[i].decodeur=6) then begin Val(s,k,erreur); delete(s,1,erreur); if k=0 then begin - if Feux[i].decodeur=6 then begin Affiche('Erreur 680 Ligne '+chaine_signal+' Manque définition décodeur UniSemaf signal '+intToSTR(adresse),clred);end; + if Signaux[i].decodeur=6 then begin Affiche('Erreur 680 Ligne '+chaine_signal+' Manque définition décodeur UniSemaf signal '+intToSTR(adresse),clred);end; end else begin - Feux[i].UniSemaf:=k; - if Feux[i].decodeur=6 then + Signaux[i].UniSemaf:=k; + if Signaux[i].decodeur=6 then begin erreur:=verif_UniSemaf(adresse,k); if erreur=1 then begin Affiche('Erreur 681 Ligne '+chaine_signal+' Erreur code Unisemaf',clred);end; @@ -1460,16 +1465,16 @@ begin bd:=0; repeat inc(bd); - setlength(feux[i].condCarre[l],bd+1); // une condition en plus + setlength(Signaux[i].condCarre[l],bd+1); // une condition en plus k:=pos(',',sa); if k<>0 then chaine:=copy(sa,1,k-1) else chaine:=sa; if chaine[1]='A' then begin delete(chaine,1,1); val(chaine,adresse,erreur); - feux[i].condCarre[l][bd].Adresse:=adresse; - if erreur<>0 then feux[i].condCarre[l][bd].PosAig:=chaine[erreur] else - Affiche('Erreur 683 Définition du signal '+IntToSTR(feux[i].adresse)+': Manque D ou S dans les conditions de carré des aiguillages',clred); + Signaux[i].condCarre[l][bd].Adresse:=adresse; + if erreur<>0 then Signaux[i].condCarre[l][bd].PosAig:=chaine[erreur] else + Affiche('Erreur 683 Définition du signal '+IntToSTR(Signaux[i].adresse)+': Manque D ou S dans les conditions de carré des aiguillages',clred); end; k:=pos(',',sa);if k<>0 then delete(sa,1,k); until k=0; @@ -1493,7 +1498,7 @@ begin bd:=0; repeat inc(bd); - setlength(feux[i].condFeuBlanc[l],bd+1); // une condition en plus + setlength(Signaux[i].condFeuBlanc[l],bd+1); // une condition en plus k:=pos(',',sa); if k<>0 then chaine:=copy(sa,1,k-1) // premier champ () else // le reste @@ -1502,9 +1507,9 @@ begin begin delete(chaine,1,1); val(chaine,adresse,erreur); - feux[i].condFeuBlanc[l][bd].Adresse:=adresse; - if erreur<>0 then feux[i].condFeuBlanc[l][bd].PosAig:=chaine[erreur] else - Affiche('Erreur 683 Définition du signal '+IntToSTR(feux[i].adresse)+': Manque D ou S dans les conditions de feu blanc des aiguillages',clred); + Signaux[i].condFeuBlanc[l][bd].Adresse:=adresse; + if erreur<>0 then Signaux[i].condFeuBlanc[l][bd].PosAig:=chaine[erreur] else + Affiche('Erreur 683 Définition du signal '+IntToSTR(Signaux[i].adresse)+': Manque D ou S dans les conditions de feu blanc des aiguillages',clred); end; k:=pos(',',sa);if k<>0 then delete(sa,1,k); until k=0; @@ -1523,12 +1528,12 @@ begin k:=pos(',',s); val(s,j,erreur); delete(s,1,k); - feux[i].SR[l].sortie1:=j; + Signaux[i].SR[l].sortie1:=j; k:=pos(',',s); val(s,j,erreur); delete(s,1,k); - feux[i].SR[l].sortie0:=j; + Signaux[i].SR[l].sortie0:=j; end; end; @@ -1541,7 +1546,7 @@ begin k:=pos(',',s); val(s,j,erreur); delete(s,1,k); - feux[i].SR[l].sortie1:=j; + Signaux[i].SR[l].sortie1:=j; end; j:=pos('NA',s); if j<>1 then affiche('Manque paramètre NA dans ligne '+chaine_signal,clred) @@ -1553,7 +1558,7 @@ begin begin j:=5;affiche('Paramètre NA incorrect dans ligne '+chaine_signal,clred) end; - feux[i].na:=j; + Signaux[i].na:=j; end; end; end; @@ -1795,6 +1800,10 @@ begin // Serveur de rétrosignalisation Lenz de CDM writeln(fichierN,retro_ch+'=',intToSTR(ServeurRetroCDM)); + // Z21 + if Z21 then s:='1' else s:='0'; + writeln(fichierN,Z21_ch+'='+s); + // Raz Signaux if Raz_Acc_signaux then s:='1' else s:='0'; writeln(fichierN,Raz_signaux_ch+'='+s); @@ -1886,13 +1895,13 @@ begin writeln(fichierN,'/------------'); writeln(fichierN,section_sig_ch); // feux - for i:=1 to NbreFeux do + for i:=1 to NbreSignaux do begin s:=encode_sig_feux(i); // transformer le tableau feux en ligne //Affiche(s,clLime); if s='' then Affiche('Erreur 700 - Encodage du feu index='+IntToSTR(i),clRed); - feux[i].modifie:=false; // sauvegarde en cours, on démarque + Signaux[i].modifie:=false; // sauvegarde en cours, on démarque writeln(fichierN,s); end; writeln(fichierN,'0'); @@ -1964,6 +1973,24 @@ begin closefile(fichierN); end; +// trier les détecteurs +procedure trier_detecteurs; +var i,j,temp : integer; +begin + for i:=1 to NDetecteurs do + begin + for j:=i+1 to NDetecteurs do + begin + if Adresse_detecteur[i]>Adresse_detecteur[j] then + begin + temp:=Adresse_detecteur[i]; + Adresse_detecteur[i]:=Adresse_detecteur[j]; + Adresse_detecteur[j]:=temp; + end; + end; + end; +end; + // trie les aiguillages procedure trier_aig; var i,j : integer; @@ -1991,21 +2018,21 @@ procedure trier_sig; var i,j : integer; temp : TSignal; begin - for i:=1 to NbreFeux do + for i:=1 to NbreSignaux do begin - for j:=i+1 to NbreFeux do + for j:=i+1 to NbreSignaux do begin - if feux[i].Adresse>feux[j].adresse then + if Signaux[i].Adresse>Signaux[j].adresse then begin - temp:=feux[i]; - feux[i]:=feux[j]; - feux[j]:=temp; + temp:=Signaux[i]; + Signaux[i]:=Signaux[j]; + Signaux[j]:=temp; end; end; end; - for i:=1 to NbreFeux do + for i:=1 to NbreSignaux do begin - index_accessoire[feux[i].adresse]:=i; + index_accessoire[Signaux[i].adresse]:=i; end; end; @@ -2048,13 +2075,13 @@ var s,sa,SOrigine: string; begin //Affiche('Définition des signaux',clyellow); i:=1;Nligne:=1; - NbreFeux:=0; + NbreSignaux:=0; repeat inc(Nligne); s:=lit_ligne; if s<>'0' then begin - if NbreFeux>=NbreMaxiSignaux then + if NbreSignaux>=NbreMaxiSignaux then begin Affiche('Nombre maximal de signaux atteint',clRed); end @@ -2654,7 +2681,6 @@ var s,sa,SOrigine: string; inc(nv); end; - // nombre d'adresses k:=pos(uppercase(nba_ch)+'=',s); if (k=1) and (NbreDecPers>0) then @@ -2909,10 +2935,11 @@ var s,sa,SOrigine: string; inc(NbPeriph_socket); Tablo_periph[NbPeriph].numComposant:=NbPeriph_socket; end; + if i=0 then Affiche('Erreur 96 : le périphérique '+Tablo_periph[NbPeriph].nom+' n''est pas reconnu comme COM/USB ou socket',clred); // extraire le numéro de com5:9600,n,8,1 i:=extract_int(sa); - if i=0 then Affiche('Erreur COM nul : '+sOrigine,clred); + if i=0 then Affiche('Erreur 97 - Port COM nul : '+sOrigine,clred); Tablo_periph[NbPeriph].NumCom:=i; Tablo_com_cde[NbPeriph].NumPeriph:=NbPeriph; end; @@ -2920,7 +2947,6 @@ var s,sa,SOrigine: string; end; - procedure lit_flux; label ici1,ici2,ici3,ici4 ; var i : integer; @@ -3444,6 +3470,16 @@ var s,sa,SOrigine: string; ServeurRetroCDM:=i; end; + sa:=uppercase(Z21_ch)+'='; + i:=pos(sa,s); + if i=1 then + begin + inc(nv); + delete(s,i,length(sa)); + val(s,i,erreur); + Z21:=i=1; + end; + sa:=uppercase(nb_det_dist_ch)+'='; i:=pos(sa,s); if i=1 then @@ -3483,6 +3519,7 @@ var s,sa,SOrigine: string; begin trouve_section_branche:=true; compile_branches; + trier_detecteurs; end; // section signaux @@ -3688,7 +3725,7 @@ begin lit_flux; close(fichier); - configNulle:=(maxAiguillage=0) and (NbreBranches=0) and (Nbrefeux=0); + configNulle:=(maxAiguillage=0) and (NbreBranches=0) and (NbreSignaux=0); if configNulle then Affiche('Fonctionnement en config nulle',ClYellow); s:='';//Affiche(intToSTR(Nv),clred); @@ -3733,11 +3770,11 @@ begin if not(trouve_section_branche) then Affiche('Manque section '+section_branches_ch,clred); // trouver les détecteurs amont des signaux et les range dans la structure des signaux - for i:=1 to NbreFeux do + for i:=1 to NbreSignaux do begin - adr:=feux[i].adresse; + adr:=Signaux[i].adresse; det_prec_signal(adr,TabloDet); - feux[i].DetAmont:=TabloDet; + Signaux[i].DetAmont:=TabloDet; end; end; @@ -3888,22 +3925,22 @@ begin AvecTCO:=CheckAvecTCO.checked; MasqueBandeauTCO:=CheckBandeauTCO.checked; lay:=editLay.Text; - if RadioButton4.Checked then ServeurInterfaceCDM:=0; - if RadioButton5.Checked then ServeurInterfaceCDM:=1; - if RadioButton6.Checked then ServeurInterfaceCDM:=2; - if RadioButton7.Checked then ServeurInterfaceCDM:=3; - if RadioButton8.Checked then ServeurInterfaceCDM:=4; - if RadioButton9.Checked then ServeurInterfaceCDM:=5; - if RadioButton10.Checked then ServeurInterfaceCDM:=6; - if RadioButton11.Checked then ServeurInterfaceCDM:=7; - if RadioButton12.Checked then ServeurInterfaceCDM:=8; - if RadioButton12.Checked then ServeurInterfaceCDM:=13; + if RadioButtonSS.Checked then ServeurInterfaceCDM:=0; + if RadioButtonXn.Checked then ServeurInterfaceCDM:=1; + if RadioButtonp50.Checked then ServeurInterfaceCDM:=2; + if RadioButtonSP.Checked then ServeurInterfaceCDM:=3; + if RadioButtonFIS.Checked then ServeurInterfaceCDM:=4; + if RadioButtonRS.Checked then ServeurInterfaceCDM:=5; + if RadioButtonDCCpp.Checked then ServeurInterfaceCDM:=6; + if RadioButtonECOS.Checked then ServeurInterfaceCDM:=7; + if RadioButtonDccpl.Checked then ServeurInterfaceCDM:=8; if RadioButton13.Checked then ServeurRetroCDM:=1; if RadioButton14.Checked then ServeurRetroCDM:=2; if RadioButton15.Checked then ServeurRetroCDM:=3; if RadioButton16.Checked then ServeurRetroCDM:=4; if RadioButton17.Checked then ServeurRetroCDM:=5; if RadioButton18.Checked then ServeurRetroCDM:=6; + Z21:=CheckBoxZ21.Checked; // changement sur les services CDM change_srv:=Srvc_Aig<>CheckBoxServAig.checked; @@ -3970,7 +4007,7 @@ begin exit; end; - Feu_Sauve:=feux[index]; // sauvegarde + Feu_Sauve:=Signaux[index]; // sauvegarde AncLigneClicSig:=ligneclicSig; ligneClicSig:=index-1; @@ -4055,22 +4092,22 @@ begin CheckAvecTCO.checked:=avecTCO; CheckBandeauTCO.Checked:=MasqueBandeauTCO; - RadioButton4.Checked:=ServeurInterfaceCDM=0; - RadioButton5.Checked:=ServeurInterfaceCDM=1; - RadioButton6.Checked:=ServeurInterfaceCDM=2; - RadioButton7.Checked:=ServeurInterfaceCDM=3; - RadioButton8.Checked:=ServeurInterfaceCDM=4; - RadioButton9.Checked:=ServeurInterfaceCDM=5; - RadioButton10.Checked:=ServeurInterfaceCDM=6; - RadioButton11.Checked:=ServeurInterfaceCDM=7; - RadioButton12.Checked:=ServeurInterfaceCDM=8; - RadioButton12.Checked:=ServeurInterfaceCDM=13; + RadioButtonSS.Checked:=ServeurInterfaceCDM=0; + RadioButtonXN.Checked:=ServeurInterfaceCDM=1; + RadioButtonP50.Checked:=ServeurInterfaceCDM=2; + RadioButtonSP.Checked:=ServeurInterfaceCDM=3; + RadioButtonFIS.Checked:=ServeurInterfaceCDM=4; + RadioButtonRS.Checked:=ServeurInterfaceCDM=5; + RadioButtonDCCpp.Checked:=ServeurInterfaceCDM=6; + RadioButtonECOS.Checked:=ServeurInterfaceCDM=7; + RadioButtonDCCpl.Checked:=ServeurInterfaceCDM=8; RadioButton13.Checked:=ServeurRetroCDM=1; RadioButton14.Checked:=ServeurRetroCDM=2; RadioButton15.Checked:=ServeurRetroCDM=3; RadioButton16.Checked:=ServeurRetroCDM=4; RadioButton17.Checked:=ServeurRetroCDM=5; RadioButton18.Checked:=ServeurRetroCDM=6; + checkBoxZ21.Checked:=Z21; CheckBoxServAig.checked:=Srvc_Aig; CheckBoxServDet.checked:=Srvc_Det; @@ -5198,7 +5235,7 @@ begin end; longestLength:=0; - for i:=1 to NbreFeux do + for i:=1 to NbreSignaux do begin s:=encode_sig_feux(i); // encode la ligne depuis le tableau feux //Affiche(s,clwhite); @@ -5212,7 +5249,7 @@ begin LongestString:=s; LongestLength:=l; end; - Feux[i].modifie:=false; + Signaux[i].modifie:=false; end; end; PixelLength:=ListboxSig.Canvas.TextWidth(LongestString); @@ -5228,7 +5265,8 @@ begin comboBoxNation.Items.add('Française'); comboBoxNation.Items.add('Belge'); - EdittrainDecl.Hint:='Train(s) déclencheur(s) séparés par des virgules pour lesquels la condition s''applique'+#13+' (mettre X pour tous les trains)'+#13+'déclenchement par actionneur uniquement'; + EdittrainDecl.Hint:='Train(s) déclencheur(s) séparés par des virgules pour lesquels la condition s''applique.' + +#13+'Mettre X pour tous les trains.'+#13+'Déclenchement par actionneur uniquement'; // actionneurs Train ou accessoire ListBoxAct.Clear; @@ -6092,17 +6130,17 @@ begin if index<1 then exit; clicListe:=true; i:=index; - FormConfig.EditAdrSig.text:=InttoSTr(feux[i].adresse); + FormConfig.EditAdrSig.text:=InttoSTr(Signaux[i].adresse); with formconfig.ImageSignal do begin Picture.Bitmap.TransparentMode:=tmAuto; Picture.Bitmap.TransparentColor:=clblue; Transparent:=true; - picture.Bitmap:=Select_dessin_feu(feux[i].aspect); + picture.Bitmap:=Select_dessin_feu(Signaux[i].aspect); end; - if feux[i].contrevoie then inverse_image(formCOnfig.ImageSignal,Formprinc.ImageSignal20); + if Signaux[i].contrevoie then inverse_image(formCOnfig.ImageSignal,Formprinc.ImageSignal20); with formconfig do begin @@ -6111,9 +6149,9 @@ begin EditDet2.Text:=''; EditSuiv2.Text:=''; EditDet3.Text:=''; EditSuiv3.Text:=''; EditDet4.Text:=''; EditSuiv4.Text:=''; - ComboBoxDec.ItemIndex:=feux[i].decodeur; + ComboBoxDec.ItemIndex:=Signaux[i].decodeur; - decodeur:=feux[i].decodeur; + decodeur:=Signaux[i].decodeur; ButtonConfigSR.Visible:=false; case decodeur of @@ -6123,7 +6161,7 @@ begin EditSpecUni.Visible:=true; LabelUni.Caption:='Spec Unisemaf'; LabelUni.Visible:=true; - EditSpecUni.Text:=IntToSTR(feux[i].Unisemaf); + EditSpecUni.Text:=IntToSTR(Signaux[i].Unisemaf); editSpecUni.Hint:='Paramètre de description supplémentaire du décodeur Unisemaf'; editSpecUni.ShowHint:=true; end; @@ -6138,7 +6176,7 @@ begin editSpecUni.Hint:='Nombre d''adresses occupées par le signal'; editSpecUni.ShowHint:=true; EditSpecUni.Visible:=true; - EditSpecUni.Text:=IntToSTR(feux[i].Na); + EditSpecUni.Text:=IntToSTR(Signaux[i].Na); end else labelInfo.Caption:=''; end; @@ -6147,7 +6185,7 @@ begin begin EditSpecUni.Visible:=false;LabelUni.Visible:=false;end; - d:=feux[i].aspect; + d:=Signaux[i].aspect; case d of 2 : ComboBoxAsp.ItemIndex:=0; 3 : ComboBoxAsp.ItemIndex:=1; @@ -6191,10 +6229,10 @@ begin begin CheckBoxVersContrevoie.Visible:=true; CheckBoxContrevoie.Visible:=true; - CheckBoxContrevoie.Checked:=feux[i].contrevoie; - CheckBoxVersContrevoie.Checked:=feux[i].Verscontrevoie; + CheckBoxContrevoie.Checked:=Signaux[i].contrevoie; + CheckBoxVersContrevoie.Checked:=Signaux[i].Verscontrevoie; - if Feux[i].Btype_suiv1=Aig then s:='Permet d''afficher le chevron sur le signal si l''aiguillage '+intToSTR(Feux[i].Adr_el_suiv1)+' est dévié' + if Signaux[i].Btype_suiv1=Aig then s:='Permet d''afficher le chevron sur le signal si l''aiguillage '+intToSTR(Signaux[i].Adr_el_suiv1)+' est dévié' else s:='Permet d''afficher le chevron sur le signal si son aiguillage est dévié;'+char(13)+'mais ce signal n''est pas suivi d''un aiguillage'; CheckBoxversContrevoie.Hint:=s; CheckBoxFB.caption:='Avec demande Blanc rouge'; @@ -6224,46 +6262,46 @@ begin EditDet1.Visible:=true;EditDet2.Visible:=true;EditDet3.Visible:=true;EditDet4.Visible:=true; EditSuiv1.Visible:=true;EditSuiv2.Visible:=true;EditSuiv3.Visible:=true;EditSuiv4.Visible:=true; Label24.Visible:=true; Label25.Visible:=true;Label26.Visible:=true;Label27.Visible:=true; - EditDet1.Text:=IntToSTR(feux[i].Adr_det1); - EditSuiv1.Text:=TypeEl_To_char(feux[i].Btype_suiv1)+IntToSTR(feux[i].Adr_el_suiv1); + EditDet1.Text:=IntToSTR(Signaux[i].Adr_det1); + EditSuiv1.Text:=TypeEl_To_char(Signaux[i].Btype_suiv1)+IntToSTR(Signaux[i].Adr_el_suiv1); - EditSuiv1.Hint:=chaine_element(feux[i].Btype_suiv1,feux[i].Adr_el_suiv1); - j:=feux[i].Adr_det2; + EditSuiv1.Hint:=chaine_element(Signaux[i].Btype_suiv1,Signaux[i].Adr_el_suiv1); + j:=Signaux[i].Adr_det2; if j<>0 then begin - Editdet2.Text:=IntToSTR(j);EditSuiv2.Text:=TypeEl_To_char(feux[i].Btype_suiv2)+IntToSTR(feux[i].Adr_el_suiv2); - EditSuiv2.Hint:=chaine_element(feux[i].Btype_suiv2,feux[i].Adr_el_suiv2); + Editdet2.Text:=IntToSTR(j);EditSuiv2.Text:=TypeEl_To_char(Signaux[i].Btype_suiv2)+IntToSTR(Signaux[i].Adr_el_suiv2); + EditSuiv2.Hint:=chaine_element(Signaux[i].Btype_suiv2,Signaux[i].Adr_el_suiv2); end else begin EditDet2.Text:='';EditSuiv2.Text:='';EditSuiv2.Hint:='';end; - j:=feux[i].Adr_det3; + j:=Signaux[i].Adr_det3; if j<>0 then begin - EditDet3.Text:=IntToSTR(j);EditSuiv3.Text:=TypeEl_To_char(feux[i].Btype_suiv3)+IntToSTR(feux[i].Adr_el_suiv3); - EditSuiv3.Hint:=chaine_element(feux[i].Btype_suiv3,feux[i].Adr_el_suiv3); + EditDet3.Text:=IntToSTR(j);EditSuiv3.Text:=TypeEl_To_char(Signaux[i].Btype_suiv3)+IntToSTR(Signaux[i].Adr_el_suiv3); + EditSuiv3.Hint:=chaine_element(Signaux[i].Btype_suiv3,Signaux[i].Adr_el_suiv3); end else begin EditDet3.Text:='';EditSuiv3.Text:='';EditSuiv3.Hint:='';end; - j:=feux[i].Adr_det4; + j:=Signaux[i].Adr_det4; if j<>0 then begin - EditDet4.Text:=IntToSTR(j);EditSuiv4.Text:=TypeEl_To_char(feux[i].Btype_suiv4)+IntToSTR(feux[i].Adr_el_suiv4); - EditSuiv4.Hint:=chaine_element(feux[i].Btype_suiv4,feux[i].Adr_el_suiv4); + EditDet4.Text:=IntToSTR(j);EditSuiv4.Text:=TypeEl_To_char(Signaux[i].Btype_suiv4)+IntToSTR(Signaux[i].Adr_el_suiv4); + EditSuiv4.Hint:=chaine_element(Signaux[i].Btype_suiv4,Signaux[i].Adr_el_suiv4); end else begin EditDet4.Text:='';EditSuiv4.Text:='';EditSuiv4.Hint:='';end; - checkVerrouCarre.Checked:=feux[i].VerrouCarre; - checkBoxFB.Checked:=feux[i].FeuBlanc; - checkFVC.Checked:=feux[i].checkFV; - checkFRC.Checked:=feux[i].checkFR; + checkVerrouCarre.Checked:=Signaux[i].VerrouCarre; + checkBoxFB.Checked:=Signaux[i].FeuBlanc; + checkFVC.Checked:=Signaux[i].checkFV; + checkFRC.Checked:=Signaux[i].checkFR; // conditions supplémentaires du carré par aiguillages l:=1; repeat - nc:=Length(feux[i].condcarre[l])-1 ; + nc:=Length(Signaux[i].condcarre[l])-1 ; if nc<>-1 then begin s:=''; for k:=1 to nc do begin - s:=s+'A'+IntToSTR(feux[i].condcarre[l][k].Adresse)+feux[i].condcarre[l][k].PosAig; + s:=s+'A'+IntToSTR(Signaux[i].condcarre[l][k].Adresse)+Signaux[i].condcarre[l][k].PosAig; if k-1 then begin s:=''; for k:=1 to nc do begin - s:=s+'A'+IntToSTR(feux[i].condFeuBlanc[l][k].Adresse)+feux[i].condFeuBlanc[l][k].PosAig; + s:=s+'A'+IntToSTR(Signaux[i].condFeuBlanc[l][k].Adresse)+Signaux[i].condFeuBlanc[l][k].PosAig; if kNbDecodeur+NbreDecPers then exit; - feux[i].decodeur:=decodeur; + Signaux[i].decodeur:=decodeur; Maj_Hint_Signal(i); @@ -7382,11 +7420,11 @@ begin Val(s,i,erreur); if (s<>'') and (erreur<>0) then begin LabelInfo.caption:='Erreur détecteur1 ';exit;end; LabelInfo.caption:=' '; - feux[ligneClicSig+1].Adr_det1:=i; + Signaux[ligneClicSig+1].Adr_det1:=i; maj_hint_Signal(ligneClicSig+1); s:=encode_sig_feux(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; - feux[ligneClicSig+1].modifie:=true; + Signaux[ligneClicSig+1].modifie:=true; ListBoxSig.selected[ligneClicSig]:=true; end; end; @@ -7436,8 +7474,8 @@ begin bt:=rien; end; LabelInfo.caption:=' '; - feux[ligneClicSig+1].Adr_el_suiv1:=i; - feux[ligneClicSig+1].Btype_suiv1:=bt; + Signaux[ligneClicSig+1].Adr_el_suiv1:=i; + Signaux[ligneClicSig+1].Btype_suiv1:=bt; s:=encode_sig_feux(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; @@ -7464,12 +7502,12 @@ begin Val(s,i,erreur); if (s<>'') and (erreur<>0) then begin LabelInfo.caption:='Erreur détecteur2 ';exit;end; LabelInfo.caption:=' '; - feux[ligneClicSig+1].Adr_det2:=i; + Signaux[ligneClicSig+1].Adr_det2:=i; maj_hint_Signal(ligneClicSig+1); s:=encode_sig_feux(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; - feux[ligneClicSig+1].modifie:=true; + Signaux[ligneClicSig+1].modifie:=true; end; end; @@ -7487,11 +7525,11 @@ begin if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then begin - feux[ligneClicSig+1].VerrouCarre:=checkVerrouCarre.Checked; + Signaux[ligneClicSig+1].VerrouCarre:=checkVerrouCarre.Checked; s:=encode_sig_feux(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; - feux[ligneClicSig+1].modifie:=true; + Signaux[ligneClicSig+1].modifie:=true; end; end; @@ -7503,11 +7541,11 @@ begin if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then begin - feux[ligneClicSig+1].FeuBlanc:=checkBoxFB.Checked; + Signaux[ligneClicSig+1].FeuBlanc:=checkBoxFB.Checked; s:=encode_sig_feux(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; - feux[ligneClicSig+1].modifie:=true; + Signaux[ligneClicSig+1].modifie:=true; end; end; @@ -7543,8 +7581,8 @@ begin bt:=rien; end; LabelInfo.caption:=' '; - feux[ligneClicSig+1].Adr_el_suiv2:=i; - feux[ligneClicSig+1].Btype_suiv2:=bt; + Signaux[ligneClicSig+1].Adr_el_suiv2:=i; + Signaux[ligneClicSig+1].Btype_suiv2:=bt; s:=encode_sig_feux(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; @@ -7571,12 +7609,12 @@ begin Val(s,i,erreur); if (s<>'') and (erreur<>0) then begin LabelInfo.caption:='Erreur détecteur3 ';exit;end; LabelInfo.caption:=' '; - feux[ligneClicSig+1].Adr_det3:=i; + Signaux[ligneClicSig+1].Adr_det3:=i; maj_hint_Signal(ligneClicSig+1); s:=encode_sig_feux(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; - feux[ligneClicSig+1].modifie:=true; + Signaux[ligneClicSig+1].modifie:=true; end; end; @@ -7619,8 +7657,8 @@ begin bt:=rien; end; LabelInfo.caption:=' '; - feux[ligneClicSig+1].Adr_el_suiv3:=i; - feux[ligneClicSig+1].Btype_suiv3:=bt; + Signaux[ligneClicSig+1].Adr_el_suiv3:=i; + Signaux[ligneClicSig+1].Btype_suiv3:=bt; s:=encode_sig_feux(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; @@ -7647,12 +7685,12 @@ begin Val(s,i,erreur); if (s<>'') and (erreur<>0) then begin LabelInfo.caption:='Erreur détecteur4 ';exit;end; LabelInfo.caption:=' '; - feux[ligneClicSig+1].Adr_det4:=i; + Signaux[ligneClicSig+1].Adr_det4:=i; maj_hint_Signal(ligneClicSig+1); s:=encode_sig_feux(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; - feux[ligneClicSig+1].modifie:=true; + Signaux[ligneClicSig+1].modifie:=true; end; end; @@ -7695,8 +7733,8 @@ begin bt:=rien; end; LabelInfo.caption:=' '; - feux[ligneClicSig+1].Adr_el_suiv4:=i; - feux[ligneClicSig+1].Btype_suiv4:=bt; + Signaux[ligneClicSig+1].Adr_el_suiv4:=i; + Signaux[ligneClicSig+1].Btype_suiv4:=bt; s:=encode_sig_feux(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; @@ -8138,15 +8176,15 @@ begin if index<1 then begin ComboBoxAsp.ItemIndex:=-1; - if NbreFeux=0 then s:='Crééz un signal ou '; + if NbreSignaux=0 then s:='Crééz un signal ou '; s:='sélectionnez un signal dans la liste'; LabelInfo.Caption:=s; exit; end; - if NbreFeux=NbreMaxiSignaux then + if NbreSignaux>=NbreMaxiSignaux then begin Affiche('Nombre maximal de signaux atteint',clRed); exit; @@ -8762,19 +8800,19 @@ begin with formconfig.ListBoxSig do for i:=0 to items.Count-1 do Selected[i]:=false; - inc(NbreFeux); + inc(NbreSignaux); AdrMax:=0; - for i:=1 to NbreFeux do + for i:=1 to NbreSignaux do begin - if AdrMaxnil then begin Feux[i].checkFB.Free;Feux[i].CheckFB:=nil;end; // supprime le check du feu blanc s'il existait + Signaux[i].Img.free; // supprime l'image, ce qui efface le feu du tableau graphique + Signaux[i].Lbl.free; // supprime le label + if Signaux[i].checkFB<>nil then begin Signaux[i].checkFB.Free;Signaux[i].CheckFB:=nil;end; // supprime le check du feu blanc s'il existait - for j:=i to NbreFeux-1 do + for j:=i to NbreSignaux-1 do begin - feux[j]:=feux[j+1]; - if feux[j].img=nil then affiche('erreur',clred); + Signaux[j]:=Signaux[j+1]; + if Signaux[j].img=nil then affiche('erreur',clred); - with feux[j].Img do + with Signaux[j].Img do begin Parent:=Formprinc.ScrollBox1; // dire que l'image est dans la scrollBox1 Top:=(HtImg+espY+20)*((j-1) div NbreImagePLigne); // détermine les points d'origine Left:=10+ (LargImg+5)*((j-1) mod (NbreImagePLigne)); - Name:='ImageFeu'+IntToSTR(feux[j].adresse); + Name:='ImageFeu'+IntToSTR(Signaux[j].adresse); Maj_Hint_Signal(j); end; - with feux[j].Lbl do + with Signaux[j].Lbl do begin Top:=HtImg+((HtImg+EspY+20)*((j-1) div NbreImagePLigne)); Left:=10+ (LargImg+5)*((j-1) mod (NbreImagePLigne)); - caption:='@'+IntToSTR(Feux[j].adresse); + caption:='@'+IntToSTR(Signaux[j].adresse); end; - if Feux[j].checkFB<>nil then - with Feux[j].CheckFB do + if Signaux[j].checkFB<>nil then + with Signaux[j].CheckFB do begin - Name:='CheckBoxFB'+intToSTR(Feux[j].adresse); + Name:='CheckBoxFB'+intToSTR(Signaux[j].adresse); Hint:='Feu blanc'; Top:=HtImg+15+((HtImg+EspY+20)*((j-1) div NbreImagePLigne)); Left:=10+ (LargImg+5)*((j-1) mod (NbreImagePLigne)); end; end; - dec(NbreFeux); + dec(NbreSignaux); i:=0; end; inc(i); - until i>NbreFeux; + until i>NbreSignaux; config_modifie:=true; FormConfig.ListBoxSig.Clear; // réafficher la liste - for i:=1 to Nbrefeux do + for i:=1 to NbreSignaux do begin s:=encode_sig_feux(i); if s<>'' then @@ -8896,6 +8937,7 @@ begin end; ligneClicSig:=-1; AncligneClicSig:=-1; + trier_sig; // recalcule les index clicliste:=false; end; @@ -8913,25 +8955,25 @@ begin if feu_supprime.adresse<>0 then begin clicliste:=true; - inc(NbreFeux); - feux[NbreFeux]:=Feu_supprime; + inc(NbreSignaux); + Signaux[NbreSignaux]:=Feu_supprime; Feu_Supprime.adresse:=0; // dévalider le feu sauvegardé Feu_supprime.aspect:=0; - cree_image(nbrefeux); + cree_image(NbreSignaux); config_modifie:=true; // réafficher le rechedit - s:=encode_Sig_Feux(NbreFeux); + s:=encode_Sig_Feux(NbreSignaux); if s<>'' then begin with ListBoxSig.Items do begin ButtonInsFeu.Caption:='Ajouter le feu supprimé'; Add(s); - ligneClicSig:=NbreFeux-1; + ligneClicSig:=NbreSignaux-1; AncligneClicSig:=-1; SetFocus; end; - Aff_champs_sig_feux(NbreFeux); + Aff_champs_sig_feux(NbreSignaux); end; clicListe:=false; end; @@ -8973,8 +9015,8 @@ var x,dec,nc,i,j : integer; begin nc:=0; i:=index_Signal(adr); - dec:=feux[i].decodeur; - x:=feux[i].aspect; + dec:=Signaux[i].decodeur; + x:=Signaux[i].aspect; // signal directionnel if x>10 then @@ -8984,15 +9026,15 @@ begin end; // nc=nombre d'adresses du signal - if dec=0 then nc:=0; // rien - if dec=1 then nc:=14; // digitalbahn - if dec=2 then nc:=5; // leb - if dec=3 then nc:=8; // ldt - if dec=4 then nc:=feux[i].Na; // cdf - if dec=5 then nc:=feux[i].Na; // digikeijs - if dec=6 then // paco unisemaf + if dec=0 then nc:=0; // rien + if dec=1 then nc:=14; // digitalbahn + if dec=2 then nc:=signaux[i].Na; // cdf + if dec=3 then nc:=8; // ldt LS dec sncf + if dec=4 then nc:=5; // leb + if dec=5 then nc:=Signaux[i].Na; // digikeijs + if dec=6 then // paco unisemaf begin - x:=feux[index].Unisemaf; // modèle + x:=Signaux[index].Unisemaf; // modèle case x of 2 : nc:=1; 3,4 : nc:=2; @@ -9003,8 +9045,8 @@ begin 93,94,95,96,97,98,99 : nc:=4; end; end; - if dec=7 then nc:=8; // SR - if dec=8 then // arcomora + if dec=7 then nc:=8; // SR + if dec=8 then // arcomora begin case x of 3 : nc:=3; @@ -9014,7 +9056,7 @@ begin end; end; if dec=9 then nc:=2; // LS-DEC-NMBS - if dec=10 then nc:=feux[i].Na; // Bmodels + if dec=10 then nc:=Signaux[i].Na; // Bmodels if dec>=NbDecodeurdeBase then begin j:=dec-NbDecodeurdeBase+1; @@ -9031,13 +9073,13 @@ var AncAdr,i,j,k,l,Indexaig,adr,adr2,extr,detect,condcarre,nc,index2,SuivAdr,ind modAig,AncModel,model,km,SuivModel,model2: TEquipement; c : char; vitesse : longint; - ok,trouveSuiv,TrouvePrec,AdrOk : boolean; + OkSignal,ok,trouveSuiv,TrouvePrec,AdrOk : boolean; s : string; begin // validation des index signaux et détecteurs - for i:=1 to NbreFeux do + for i:=1 to NbreSignaux do begin - index_accessoire[feux[i].adresse]:=i; + index_accessoire[Signaux[i].adresse]:=i; end; for i:=1 to maxAiguillage do begin @@ -9101,8 +9143,8 @@ begin ok:=false; end; end; - // vérifier si l'aiguillage est dans les branches - if aiguillage[Indexaig].modele<>rien then + // vérifier si l'aiguillage est dans les branches inutile + {if aiguillage[Indexaig].modele<>rien then begin trouve_aiguillage(aiguillage[Indexaig].adresse); // passe l'adresse de l'aiguillage à trouver if (IndexBranche_trouve=0) then @@ -9110,7 +9152,7 @@ begin Affiche('Avertissement 6: aiguillage '+intToSTR(aiguillage[Indexaig].adresse)+' décrit dans les aiguillages ; absent dans la description des branches',clOrange); ok:=false; end; - end; + end;} adr:=aiguillage[Indexaig].Adroit; if (aiguillage[Indexaig].AdroitB='Z') or (aiguillage[Indexaig].AdroitB=#0) then begin @@ -9179,9 +9221,9 @@ begin end; // cohérence 4 : vérifie si doublon signal ou si recouvrement avec un autre signal ou un aiguillage - for j:=1 to NbreFeux do + for j:=1 to NbreSignaux do begin - adr:=feux[j].Adresse; + adr:=Signaux[j].Adresse; nc:=nombre_adresses_signal(adr); for i:=1 to maxaiguillage do @@ -9193,10 +9235,10 @@ begin ok:=false; end; end; - - for i:=j+1 to NbreFeux do + + for i:=j+1 to NbreSignaux do begin - adr2:=feux[i].Adresse; + adr2:=Signaux[i].Adresse; nc2:=nombre_adresses_signal(adr2); if ((adr>adr2) and (adr adr2) and (adr+nc-10 then begin trouve_detecteur(i); if IndexBranche_trouve=0 then begin ok:=false; - Affiche('Erreur 8.1: Détecteur '+intToSTR(i)+' non existant dans les branches mais associé au signal '+IntToSTR(feux[j].adresse),clred); + Affiche('Erreur 8.1: Détecteur '+intToSTR(i)+' non existant dans les branches mais associé au signal '+IntToSTR(Signaux[j].adresse),clred); end; end else begin - if feux[j].Aspect<10 then + if Signaux[j].Aspect<10 then begin ok:=false; - Affiche('Erreur 8.2: Détecteur inconnu ('+intToSTR(i)+') sur signal '+IntToSTR(feux[j].adresse),clred); + Affiche('Erreur 8.2: Détecteur inconnu ('+intToSTR(i)+') sur signal '+IntToSTR(Signaux[j].adresse),clred); end; end; - i:=feux[j].Adr_det2; + i:=Signaux[j].Adr_det2; if i<>0 then begin trouve_detecteur(i); if IndexBranche_trouve=0 then begin ok:=false; - Affiche('Erreur 8.3: Détecteur '+intToSTR(i)+' non existant mais associé au signal '+IntToSTR(feux[j].adresse),clred); + Affiche('Erreur 8.3: Détecteur '+intToSTR(i)+' non existant mais associé au signal '+IntToSTR(Signaux[j].adresse),clred); end; end; - i:=feux[j].Adr_det3; + i:=Signaux[j].Adr_det3; if i<>0 then begin trouve_detecteur(i); if IndexBranche_trouve=0 then begin ok:=false; - Affiche('Erreur 8.4: Détecteur '+intToSTR(i)+' non existant mais associé au signal '+IntToSTR(feux[j].adresse),clred); + Affiche('Erreur 8.4: Détecteur '+intToSTR(i)+' non existant mais associé au signal '+IntToSTR(Signaux[j].adresse),clred); end; end; - i:=feux[j].Adr_det4; + i:=Signaux[j].Adr_det4; if i<>0 then begin trouve_detecteur(i); if IndexBranche_trouve=0 then begin ok:=false; - Affiche('Erreur 8.5: Détecteur '+intToSTR(i)+' non existant mais associé au signal '+IntToSTR(feux[j].adresse),clred); + Affiche('Erreur 8.5: Détecteur '+intToSTR(i)+' non existant mais associé au signal '+IntToSTR(Signaux[j].adresse),clred); end; end; // élement suivant 1 - i:=feux[j].Adr_el_suiv1; - km:=feux[j].Btype_suiv1; + i:=Signaux[j].Adr_el_suiv1; + km:=Signaux[j].Btype_suiv1; if i<>0 then begin if km=det then // détecteur @@ -9311,12 +9353,12 @@ begin if IndexBranche_trouve=0 then begin ok:=false; - Affiche('Erreur 9.1: Détecteur '+intToSTR(i)+' non existant mais associé au signal '+IntToSTR(feux[j].adresse),clred); + Affiche('Erreur 9.1: Détecteur '+intToSTR(i)+' non existant mais associé au signal '+IntToSTR(Signaux[j].adresse),clred); end else begin // vérifier si les deux détecteurs du signal sont contigüs (l et i) - l:=feux[j].Adr_det1; + l:=Signaux[j].Adr_det1; trouve_detecteur(i); det1Br:=branche_trouve; det1Index:=IndexBranche_trouve; @@ -9327,7 +9369,7 @@ begin if (det1Br<>Det2Br) or (abs(det1Index-det2Index)>1) then begin ok:=false; - Affiche('Erreur 9.12: signal '+intToSTR(feux[j].adresse)+' : détecteurs '+intToSTR(i)+' et '+intToSTR(l)+' non contigüs ',clred); + Affiche('Erreur 9.12: signal '+intToSTR(Signaux[j].adresse)+' : détecteurs '+intToSTR(i)+' et '+intToSTR(l)+' non contigüs ',clred); end; end; end; @@ -9338,24 +9380,24 @@ begin if k=0 then begin ok:=false; - Affiche('Erreur 9.2: aiguillage '+intToSTR(i)+' non existant mais associé au signal '+IntToSTR(feux[j].adresse),clred); + Affiche('Erreur 9.2: aiguillage '+intToSTR(i)+' non existant mais associé au signal '+IntToSTR(Signaux[j].adresse),clred); end else begin // vérifier si le détecteur du signal et l'aiguillage sont consécutifs - l:=feux[j].Adr_det1; + l:=Signaux[j].Adr_det1; if (aiguillage[k].ADroit<>l) and (aiguillage[k].ADevie<>l) and (aiguillage[k].APointe<>l) then begin ok:=false; - Affiche('Erreur 9.21: signal '+intToSTR(feux[j].adresse)+' : aiguillage '+intToSTR(i)+' et détecteur '+intToSTR(l)+' non contigüs ',clred); + Affiche('Erreur 9.21: signal '+intToSTR(Signaux[j].adresse)+' : aiguillage '+intToSTR(i)+' et détecteur '+intToSTR(l)+' non contigüs ',clred); end; end; end; end; // élement suivant 2 - i:=feux[j].Adr_el_suiv2; - km:=feux[j].Btype_suiv2; + i:=Signaux[j].Adr_el_suiv2; + km:=Signaux[j].Btype_suiv2; if i<>0 then begin if km=det then // détecteur @@ -9364,7 +9406,7 @@ begin if IndexBranche_trouve=0 then begin ok:=false; - Affiche('Erreur 9.3: Détecteur '+intToSTR(i)+' non existant mais associé au signal '+IntToSTR(feux[j].adresse),clred); + Affiche('Erreur 9.3: Détecteur '+intToSTR(i)+' non existant mais associé au signal '+IntToSTR(Signaux[j].adresse),clred); end; end; if ((km=aig) or (km=tjs) or (km=tjd) or (km=triple)) then @@ -9373,14 +9415,14 @@ begin if index_aig(i)=0 then begin ok:=false; - Affiche('Erreur 9.4: aiguillage '+intToSTR(i)+' non existant mais associé au signal '+IntToSTR(feux[j].adresse),clred); + Affiche('Erreur 9.4: aiguillage '+intToSTR(i)+' non existant mais associé au signal '+IntToSTR(Signaux[j].adresse),clred); end; end; end; // élement suivant 3 - i:=feux[j].Adr_el_suiv3; - km:=feux[j].Btype_suiv3; + i:=Signaux[j].Adr_el_suiv3; + km:=Signaux[j].Btype_suiv3; if i<>0 then begin if km=det then // détecteur @@ -9389,7 +9431,7 @@ begin if IndexBranche_trouve=0 then begin ok:=false; - Affiche('Erreur 9.5: Détecteur '+intToSTR(i)+' non existant mais associé au signal '+IntToSTR(feux[j].adresse),clred); + Affiche('Erreur 9.5: Détecteur '+intToSTR(i)+' non existant mais associé au signal '+IntToSTR(Signaux[j].adresse),clred); end; end; if ((km=aig) or (km=tjs) or (km=tjd) or (km=triple)) then @@ -9398,14 +9440,14 @@ begin if index_aig(i)=0 then begin ok:=false; - Affiche('Erreur 9.6: aiguillage '+intToSTR(i)+' non existant mais associé au signal '+IntToSTR(feux[j].adresse),clred); + Affiche('Erreur 9.6: aiguillage '+intToSTR(i)+' non existant mais associé au signal '+IntToSTR(Signaux[j].adresse),clred); end; end; end; // élement suivant 4 - i:=feux[j].Adr_el_suiv4; - km:=feux[j].Btype_suiv4; + i:=Signaux[j].Adr_el_suiv4; + km:=Signaux[j].Btype_suiv4; if i<>0 then begin if km=det then // détecteur @@ -9414,7 +9456,7 @@ begin if IndexBranche_trouve=0 then begin ok:=false; - Affiche('Erreur 9.7: Détecteur '+intToSTR(i)+' non existant mais associé au signal '+IntToSTR(feux[j].adresse),clred); + Affiche('Erreur 9.7: Détecteur '+intToSTR(i)+' non existant mais associé au signal '+IntToSTR(Signaux[j].adresse),clred); end; end; if ((km=aig) or (km=tjs) or (km=tjd) or (km=triple)) then @@ -9423,7 +9465,7 @@ begin if index_aig(i)=0 then begin ok:=false; - Affiche('Erreur 9.10: aiguillage '+intToSTR(i)+' non existant mais associé au signal '+IntToSTR(feux[j].adresse),clred); + Affiche('Erreur 9.10: aiguillage '+intToSTR(i)+' non existant mais associé au signal '+IntToSTR(Signaux[j].adresse),clred); end; end; end; @@ -9576,7 +9618,7 @@ begin begin Affiche('Erreur 10.41: Discordance de déclaration aiguillage '+intToSTR(adr)+': '+intToSTR(adr2),clred); ok:=false; - end; + end; // tjs ou tjs à 4 états if (((model2=tjs) or (model2=tjd)) and (aiguillage[index2].EtatTJD=4)) then @@ -9731,9 +9773,9 @@ begin end; // 9. vérifier la cohérence TCO - if avecTCO then + for indexTCO:=1 to NbreTCO do begin - for indexTCO:=1 to NbreTCO do + begin for y:=1 to NbreCellY[indexTCO] do for x:=1 to NbreCellX[indexTCO] do begin @@ -9789,6 +9831,7 @@ begin ok:=false; end; end; + end; end; // 11 Divers @@ -9796,17 +9839,19 @@ begin val(copy(portcom,i+1,j-i),vitesse,l); if (protocole=2) and (vitesse<>115200) then Affiche('La vitesse COM/USB en procotole DCC++ doit être de 115200 bauds',clred); - // si xpressnet, pas d'accesoires entre 257 à 272 + // si xpressnet, pas d'accesoires interférant avec les détecteurs AdrOk:=True; if Verif_AdrXpressNet=1 then begin - for k:=1 to NDetecteurs do - begin - adr:=((adresse_detecteur[k]-1) div 2) +1; // transforme l'adresse du détecteur en accessoire (ex 513 devient 257 - for i:=1 to maxaiguillage do + for i:=1 to maxaiguillage do + begin + adresse:=aiguillage[i].Adresse ; + + for k:=1 to NDetecteurs do begin - adresse:=aiguillage[i].Adresse ; + adr:=((adresse_detecteur[k]-1) div 2) +1; // transforme l'adresse du détecteur en accessoire (ex 513 devient 257) + if adresse=adr then begin AdrOk:=false; @@ -9814,27 +9859,48 @@ begin Affiche('Erreur 13: l''aiguillage '+IntToSTR(adresse)+' chevauche le détecteur '+intToSTR(adresse_detecteur[k]),clred); end; end; + end; - for i:=1 to NbreFeux do + for i:=1 to NbreSignaux do + begin + okSignal:=true; + s:=''; + adresse:=Signaux[i].Adresse; + nc:=Nombre_adresses_signal(adresse); + + for k:=1 to NDetecteurs do begin - adresse:=feux[i].Adresse; - nc:=Nombre_adresses_signal(adresse); + adr:=((adresse_detecteur[k]-1) div 2) +1; // transforme l'adresse du détecteur en accessoire (ex 513 devient 257) - if (adresse=adr) or ((adresse+nc-1>=adr) and (adresse+nc<=adr)) then + //if (adresse=adr) or ((adresse+nc-1>=adr) and (adresse+nc<=adr)) then + if (adr>=adresse) and (adr<=adresse+nc-1) then begin - dec:=feux[i].decodeur; + dec:=Signaux[i].decodeur; AdrOk:=false; ok:=false; - Affiche('Erreur 14: le signal '+IntToSTR(adresse)+' chevauche le détecteur '+intToStr(adresse_detecteur[k]),clred); - Affiche('en Xpressnet car son décodeur '+decodeur[dec]+' occupe '+intToSTR(nc)+' adresses de '+intToSTR(adresse)+' à '+intToSTR(adresse+nc-1),clred); + okSignal:=false; + s:=s+intToSTR(adresse_detecteur[k])+' '; end; end; - // actionneurs - for i:=1 to maxTablo_act do + + if not(oksignal) then begin - if Tablo_actionneur[i].act then + Affiche('Erreur 14: le signal '+IntToSTR(adresse)+' '+decodeur[dec]+' occupe '+intToSTR(nc)+' adresses de '+intToSTR(adresse)+ + ' à '+intToSTR(adresse+nc-1)+' et chevauche le(s) détecteur(s) ',clred); + affiche(s,clred); + end; + end; + + // actionneurs + for i:=1 to maxTablo_act do + begin + if Tablo_actionneur[i].act then + begin + adresse:=Tablo_actionneur[i].accessoire; + for k:=1 to NDetecteurs do begin - adresse:=Tablo_actionneur[i].accessoire; + adr:=((adresse_detecteur[k]-1) div 2) +1; // transforme l'adresse du détecteur en accessoire (ex 513 devient 257) + if (adresse=adr) then begin AdrOk:=false; @@ -9843,24 +9909,24 @@ begin Affiche('et chevauche le détecteur '+intToStr(adresse_detecteur[k])+' interdit en XpressNet',clred); end; end; + end; - if Tablo_actionneur[i].periph then + if Tablo_actionneur[i].periph then + begin + j:=Tablo_actionneur[i].fonction; + if j>10 then begin Affiche('Erreur 15.1 pilotage actionneur '+intToSTR(Tablo_actionneur[i].adresse),clred);ok:=false;end; + if j=0 then begin Affiche('Erreur 15.2 L''actionneur '+intToSTR(Tablo_actionneur[i].adresse)+' n''a pas d''accessoire COM/USB d''affecté',clRed);ok:=false;end; + if (j>0) and (j<11) and (Tablo_periph[j].NumCom=0) then begin - j:=Tablo_actionneur[i].fonction; - if j>10 then begin Affiche('Erreur 15.1 pilotage actionneur '+intToSTR(Tablo_actionneur[i].adresse),clred);ok:=false;end; - if j=0 then begin Affiche('Erreur 15.2 L''actionneur '+intToSTR(Tablo_actionneur[i].adresse)+' n''a pas d''accessoire COM/USB d''affecté',clRed);ok:=false;end; - if (j>0) and (j<11) and (Tablo_periph[j].NumCom=0) then - begin - Affiche('Erreur 15.3 L''actionneur '+intToSTR(Tablo_actionneur[i].adresse)+' n''a pas d''accessoire COM/USB d''affecté',clRed); - ok:=false; - end; + Affiche('Erreur 15.3 L''actionneur '+intToSTR(Tablo_actionneur[i].adresse)+' n''a pas d''accessoire COM/USB d''affecté',clRed); + ok:=false; end; end; end; if not(AdrOk) then begin - j:=MessageDlg('Une adresse DCC via XpressNet a été trouvée dans la plage interdite.'+#13+ + j:=MessageDlg('Une adresse ou des adresses DCC via XpressNet interfère avec des détecteurs.'+#13+ 'Si vous n''utilisez pas XpressNet, vous devez choisir d''ignorer cette erreur.'+#13+#13+ 'Voulez vous ignorer cette erreur à l''avenir? ',mtConfirmation,[mbNo,mbYes],0) ; if j=mrYes then @@ -10068,6 +10134,7 @@ begin FormConfig.ListBoxAig.items.Add(s); end; end; + trier_aig; // recalcule les index ligneClicAig:=-1; AncligneClicAig:=-1; clicliste:=false; @@ -10708,7 +10775,7 @@ begin if affevt then affiche('Evt MemoCarre change',clyellow); j:=MemoCarre.Selstart; clicMemo:=MemoCarre.Perform(EM_LINEFROMCHAR,j,0); // numéro de la ligne du curseur - aspect:=feux[ligneClicSig+1].aspect; + aspect:=Signaux[ligneClicSig+1].aspect; dir:=aspect>10; if dir and (clicMemo>aspect-10) then @@ -10748,15 +10815,15 @@ begin c:=#0; if erreur<>0 then c:=s[erreur]; // S ou D if (c<>'D') and (c<>'S') then begin LabelInfo.Caption:='Erreur manque D ou S : '+sO;exit;end; - setlength(feux[ligneClicSig+1].AigDirection[ligne],j+1); // augmenter le tableau dynamique - feux[ligneClicSig+1].AigDirection[ligne][j].PosAig:=c; - feux[ligneClicSig+1].AigDirection[ligne][j].Adresse:=adr; + setlength(Signaux[ligneClicSig+1].AigDirection[ligne],j+1); // augmenter le tableau dynamique + Signaux[ligneClicSig+1].AigDirection[ligne][j].PosAig:=c; + Signaux[ligneClicSig+1].AigDirection[ligne][j].Adresse:=adr; delete(s,1,erreur); // supprime jusque D if length(s)<>0 then if s[1]=',' then delete(s,1,1); inc(j); until s='' else - setlength(feux[ligneClicSig+1].AigDirection[ligne],0); + setlength(Signaux[ligneClicSig+1].AigDirection[ligne],0); end; s:=encode_sig_feux(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; @@ -10784,15 +10851,15 @@ begin c:=#0; if erreur<>0 then c:=s[erreur]; // S ou D if (c<>'D') and (c<>'S') then begin LabelInfo.Caption:='Erreur manque D ou S : '+sO;exit;end; - setlength(feux[ligneClicSig+1].condCarre[ligne],j+1); - feux[ligneClicSig+1].condCarre[ligne][j].PosAig:=c; - feux[ligneClicSig+1].condCarre[ligne][j].Adresse:=adr; + setlength(Signaux[ligneClicSig+1].condCarre[ligne],j+1); + Signaux[ligneClicSig+1].condCarre[ligne][j].PosAig:=c; + Signaux[ligneClicSig+1].condCarre[ligne][j].Adresse:=adr; delete(s,1,erreur); // supprime jusque D if length(s)<>0 then if s[1]=',' then delete(s,1,1); inc(j); until s='' else - setlength(feux[ligneClicSig+1].condCarre[ligne],0); + setlength(Signaux[ligneClicSig+1].condCarre[ligne],0); end; end; @@ -10945,13 +11012,13 @@ begin end; modif_branches:=false; - for index:=1 to NbreFeux do + for index:=1 to NbreSignaux do begin // créer les nouveau checkBox de feux blancs si de nouveaux ont été cochés - if feux[index].FeuBlanc and (feux[index].checkFB=nil) then + if Signaux[index].FeuBlanc and (Signaux[index].checkFB=nil) then begin - feux[index].CheckFB:=TCheckBox.create(Formprinc.ScrollBox1); // crée le handle - with Feux[index].CheckFB do + Signaux[index].CheckFB:=TCheckBox.create(Formprinc.ScrollBox1); // crée le handle + with Signaux[index].CheckFB do begin onClick:=formprinc.proc_checkBoxFB; // affecter l'adresse de la procédure de traitement quand on clique dessus Hint:=intToSTR(index); @@ -10964,10 +11031,10 @@ begin end; end; // supprimer les checkBox de feux blancs si ils ont été décochés - if not(feux[index].FeuBlanc) and (feux[index].checkFB<>nil) then + if not(Signaux[index].FeuBlanc) and (Signaux[index].checkFB<>nil) then begin - Feux[index].CheckFB.free; - Feux[index].CheckFB:=nil; + Signaux[index].CheckFB.free; + Signaux[index].CheckFB:=nil; end; end; @@ -10981,7 +11048,7 @@ procedure TFormConfig.ButtonConfigSRClick(Sender: TObject); var decodeur : integer; begin clicListe:=true; - decodeur:=feux[ligneClicSig+1].decodeur; + decodeur:=Signaux[ligneClicSig+1].decodeur; if decodeur=7 then // SR begin formSR.showmodal; @@ -11293,7 +11360,7 @@ begin val(editAdrFerme.Text,adr,erreur);if erreur<>0 then exit; val(editCdeFerme.Text,cmd,erreur);if erreur<>0 then exit; aff_acc:=true; - if Tablo_PN[i].pulse=1 then ts:=aigP else ts:=feu; + if Tablo_PN[i].pulse=1 then ts:=aigP else ts:=signal; pilote_acc(adr,cmd,ts); aff_acc:=false; end @@ -11317,7 +11384,7 @@ begin val(editAdrOuvre.Text,adr,erreur);if erreur<>0 then exit; val(editCdeOuvre.Text,cmd,erreur);if erreur<>0 then exit; aff_acc:=true; - if Tablo_PN[ligneCliqueePN+1].pulse=1 then ts:=aigP else ts:=feu; + if Tablo_PN[ligneCliqueePN+1].pulse=1 then ts:=aigP else ts:=signal; pilote_acc(adr,cmd,ts); aff_acc:=false; end @@ -11355,11 +11422,11 @@ begin if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then begin - feux[ligneClicSig+1].checkFV:=checkFVC.Checked; + Signaux[ligneClicSig+1].checkFV:=checkFVC.Checked; s:=encode_sig_feux(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; - feux[ligneClicSig+1].modifie:=true; + Signaux[ligneClicSig+1].modifie:=true; end; end; @@ -11371,11 +11438,11 @@ begin if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then begin - feux[ligneClicSig+1].checkFR:=checkFRC.Checked; + Signaux[ligneClicSig+1].checkFR:=checkFRC.Checked; s:=encode_sig_feux(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; - feux[ligneClicSig+1].modifie:=true; + Signaux[ligneClicSig+1].modifie:=true; end; end; @@ -11924,11 +11991,11 @@ procedure TFormConfig.CheckBoxVersContrevoieClick(Sender: TObject); if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then begin - feux[ligneClicSig+1].verscontrevoie:=checkBoxVersContreVoie.Checked; + Signaux[ligneClicSig+1].verscontrevoie:=checkBoxVersContreVoie.Checked; s:=encode_sig_feux(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; - feux[ligneClicSig+1].modifie:=true; + Signaux[ligneClicSig+1].modifie:=true; end; end; @@ -11941,19 +12008,19 @@ begin if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then begin - feux[ligneClicSig+1].contrevoie:=checkBoxContreVoie.Checked; + Signaux[ligneClicSig+1].contrevoie:=checkBoxContreVoie.Checked; s:=encode_sig_feux(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; - feux[ligneClicSig+1].modifie:=true; + Signaux[ligneClicSig+1].modifie:=true; aff_champs_sig_feux(ligneClicSig+1); // redessine les champs et le feu - contient l'inversion de l'image // maj le signal dans la fenetre principale - Feux[ligneClicSig+1].Img.picture.Bitmap:=ImageSIgnal.Picture.Bitmap; // et recopie le feu - adr:=feux[ligneClicSig+1].adresse; - if feux[ligneClicSig+1].contrevoie then Maj_Etat_Signal(adr,clignote_f or bita1_F) else Maj_Etat_Signal(adr,clignote_F); - dessine_signal_mx(Feux[ligneClicSig+1].Img.Canvas,0,0,1,1,feux[ligneClicSig+1].adresse,1); // dessine les feux du signal + Signaux[ligneClicSig+1].Img.picture.Bitmap:=ImageSIgnal.Picture.Bitmap; // et recopie le feu + adr:=Signaux[ligneClicSig+1].adresse; + if Signaux[ligneClicSig+1].contrevoie then Maj_Etat_Signal(adr,clignote_f or bita1_F) else Maj_Etat_Signal(adr,clignote_F); + dessine_signal_mx(Signaux[ligneClicSig+1].Img.Canvas,0,0,1,1,Signaux[ligneClicSig+1].adresse,1); // dessine les feux du signal end; end; @@ -12222,9 +12289,9 @@ end; LabelNbDecPers.caption:=intToSTR(NbreDecPers); //vérifier si le décodeur est utilisé dans les signaux pour changer son hint - for i:=1 to NbreFeux do + for i:=1 to NbreSignaux do begin - if feux[i].decodeur=NbDecodeurdeBase+decCourant-1 then Maj_Hint_Signal(i); + if Signaux[i].decodeur=NbDecodeurdeBase+decCourant-1 then Maj_Hint_Signal(i); end; end; @@ -12268,9 +12335,9 @@ begin ComboBoxDec.Items[NbDecodeurdeBase+DecCourant-1]:=s; //vérifier si le décodeur est utilisé dans les signaux pour changer son hint - for i:=1 to NbreFeux do + for i:=1 to NbreSignaux do begin - if feux[i].decodeur=NbDecodeurdeBase+decCourant-1 then Maj_Hint_Signal(i); + if Signaux[i].decodeur=NbDecodeurdeBase+decCourant-1 then Maj_Hint_Signal(i); end; end; @@ -12342,19 +12409,19 @@ begin // si le décodeur est attribué aux signaux, les passer en rien aff:=false; - for i:=1 to NbreFeux do + for i:=1 to NbreSignaux do begin - deco:=feux[i].decodeur; + deco:=Signaux[i].decodeur; if deco=supp then begin - Affiche('Le décodeur du signal '+intToSTR(Feux[i].adresse)+' a été réaffacté à rien',clOrange); - feux[i].decodeur:=0; + Affiche('Le décodeur du signal '+intToSTR(Signaux[i].adresse)+' a été réaffacté à rien',clOrange); + Signaux[i].decodeur:=0; if i=ligneClicSig+1 then aff_champs_sig_feux(ligneClicSig+1); aff:=true; end; if deco>supp then begin - dec(feux[i].decodeur); // et décrémenter les autres décodeurs personnalisés de rang supérieur + dec(Signaux[i].decodeur); // et décrémenter les autres décodeurs personnalisés de rang supérieur aff:=true; end; end; @@ -12363,13 +12430,13 @@ begin if aff then begin ListBoxSig.Items.Clear; - for i:=1 to NbreFeux do + for i:=1 to NbreSignaux do begin s:=encode_sig_feux(i); // encode la ligne depuis le tableau feux if s<>'' then begin ListBoxSig.Items.Add(s); - Feux[i].modifie:=false; + Signaux[i].modifie:=false; end; end; end; @@ -12393,7 +12460,7 @@ begin if affevt then affiche('Evt MemoBlanc change',clyellow); j:=MemoCarre.Selstart; clicMemo:=MemoCarre.Perform(EM_LINEFROMCHAR,j,0); // numéro de la ligne du curseur - aspect:=feux[ligneClicSig+1].aspect; + aspect:=Signaux[ligneClicSig+1].aspect; if (clicMemo>5) then @@ -12425,15 +12492,15 @@ begin c:=#0; if erreur<>0 then c:=s[erreur]; // S ou D if (c<>'D') and (c<>'S') then begin LabelInfo.Caption:='Erreur manque D ou S : '+sO;exit;end; - setlength(feux[ligneClicSig+1].condFeuBlanc[ligne],j+1); - feux[ligneClicSig+1].condFeuBlanc[ligne][j].PosAig:=c; - feux[ligneClicSig+1].condFeuBlanc[ligne][j].Adresse:=adr; + setlength(Signaux[ligneClicSig+1].condFeuBlanc[ligne],j+1); + Signaux[ligneClicSig+1].condFeuBlanc[ligne][j].PosAig:=c; + Signaux[ligneClicSig+1].condFeuBlanc[ligne][j].Adresse:=adr; delete(s,1,erreur); // supprime jusque D if length(s)<>0 then if s[1]=',' then delete(s,1,1); inc(j); until s='' else - setlength(feux[ligneClicSig+1].condFeuBlanc[ligne],0); + setlength(Signaux[ligneClicSig+1].condFeuBlanc[ligne],0); end; s:=encode_sig_feux(ligneClicSig+1); @@ -12459,7 +12526,7 @@ procedure TFormConfig.ListBoxSigMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin clicliste:=true; - if NbreFeux<1 then exit; + if NbreSignaux<1 then exit; raz_champs_sig; @@ -12473,7 +12540,7 @@ end; procedure TFormConfig.ListBoxSigKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin - if NbreFeux<1 then exit; + if NbreSignaux<1 then exit; if key=VK_delete then supprime_sig; if ord(Key)=VK_UP then @@ -12502,7 +12569,7 @@ begin if affevt then affiche('Evt ListBoxSig.Items keydown',clyellow); with Formconfig.ListBoxSig.Items do begin - if ligneClicSigligneClicSig then @@ -12637,7 +12704,6 @@ var ss,s : string; repeat if formconfig.ListBoxPeriph.selected[i-1] then begin - for j:=i to NbPeriph-1 do begin formconfig.ListBoxPeriph.selected[j-1]:=formconfig.ListBoxPeriph.selected[j]; @@ -12661,7 +12727,7 @@ var ss,s : string; // réafficher la liste for i:=1 to NbPeriph do - begin + begin s:=encode_Periph(i); if s<>'' then begin @@ -12725,7 +12791,7 @@ begin config_modifie:=true; end; - + // menu contextuel des listBox procedure TFormConfig.Supprimer1Click(Sender: TObject); var tl: TListBox; s : string; @@ -12740,6 +12806,7 @@ begin if s='ListBoxPeriph' then supprime_periph; end; +// menu contextuel des listBox procedure TFormConfig.Nouveau1Click(Sender: TObject); var tl: TListBox; s : string; @@ -12752,7 +12819,7 @@ begin if s='ListBoxAig' then ajoute_aiguillage; if s='ListBoxTrains' then ajoute_train; if s='ListBoxPeriph' then ajoute_periph; -end; +end; procedure TFormConfig.outcopierentatquetexte1Click(Sender: TObject); var tl: TListBox; @@ -12765,7 +12832,6 @@ procedure TFormConfig.ButtonOuvreComClick(Sender: TObject); var i,index : integer; begin // Affiche(intToSTr(componentcount),clyellow); - for i:=1 to NbMaxi_Periph do begin index:=com_socket(i); @@ -13196,8 +13262,8 @@ begin EditAdrSig.Color:=clWindow; LabelInfo.caption:=' '; - feux[ligneClicSig+1].adresse:=i; - Feux[ligneClicSig+1].Lbl.caption:='@'+IntToSTR(i); + Signaux[ligneClicSig+1].adresse:=i; + Signaux[ligneClicSig+1].Lbl.caption:='@'+IntToSTR(i); index_accessoire[i]:=ligneClicSig+1; s:=encode_sig_feux(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; @@ -13206,7 +13272,6 @@ begin end; end; - - end. +end. diff --git a/UnitPilote.dfm b/UnitPilote.dfm index 9b39ad4..da87211 100644 --- a/UnitPilote.dfm +++ b/UnitPilote.dfm @@ -48,8 +48,8 @@ object FormPilote: TFormPilote object LabelDec: TLabel Left = 208 Top = 184 - Width = 113 - Height = 41 + Width = 72 + Height = 19 Alignment = taCenter Caption = 'LabelDec' Font.Charset = ANSI_CHARSET diff --git a/UnitPilote.pas b/UnitPilote.pas index d0517b7..d271f7b 100644 --- a/UnitPilote.pas +++ b/UnitPilote.pas @@ -124,11 +124,11 @@ begin if i<>0 then //ImagePilote.Picture.Bitmap:=FormPilote.ImagePilote.picture.bitmap; - EtatFeuPilote:=feux[0].EtatSignal; - AncienEtat:=Feux[0].ancienEtat; + EtatFeuPilote:=Signaux[0].EtatSignal; + AncienEtat:=Signaux[0].ancienEtat; Vcanvas:=FormPilote.ImagePilote.picture.bitmap.Canvas; - case feux[i].aspect of + case Signaux[i].aspect of // feux de signalisation 2 : dessine_signal2(Vcanvas,0,0,1,1,EtatFeupilote,1); 3 : dessine_signal3(Vcanvas,0,0,1,1,EtatFeupilote,AncienEtat,1); @@ -136,7 +136,7 @@ begin 5 : dessine_signal5(VCanvas,0,0,1,1,EtatFeupilote,1); 7 : dessine_signal7(VCanvas,0,0,1,1,EtatFeupilote,1); 9 : dessine_signal9(VCanvas,0,0,1,1,EtatFeupilote,1); - 20 : dessine_signal20(VCanvas,0,0,1,1,EtatFeupilote,1,feux[i].adresse); + 20 : dessine_signal20(VCanvas,0,0,1,1,EtatFeupilote,1,Signaux[i].adresse); // indicateurs de direction 12 : dessine_dirN(VCanvas,0,0,1,1,EtatFeupilote,1,2); 13 : dessine_dirN(VCanvas,0,0,1,1,EtatFeupilote,1,3); @@ -151,8 +151,8 @@ function nation : integer; var i,dec,asp : integer; begin i:=1; - dec:=feux[0].decodeur; - asp:=feux[0].aspect; + dec:=Signaux[0].decodeur; + asp:=Signaux[0].aspect; if asp=20 then i:=2; // si décodeur personalisé if (dec>=NbDecodeurdeBase) and (dec10) and (feux[index].aspect<20 )then + if (Signaux[index].aspect>10) and (Signaux[index].aspect<20 )then begin val(EditNbreFeux.Text,i,e); - feux[0].EtatSignal:=i; + Signaux[0].EtatSignal:=i; pilote_direction(AdrPilote,i); end; - feux[index].EtatSignal:=feux[0].EtatSignal; + Signaux[index].EtatSignal:=Signaux[0].EtatSignal; envoi_signal(AdrPilote); end; @@ -300,7 +300,7 @@ if ord(Key) = VK_RETURN then begin if (i>=0) and (i<=6) then begin - feux[0].EtatSignal:=i; + Signaux[0].EtatSignal:=i; dessine_feu_pilote; end; if (i<0) and (i>6) then EditNbreFeux.text:='1'; @@ -314,17 +314,17 @@ var n,i,d : integer; begin // mise à jour du champ décodeur i:=Index_Signal(AdrPilote); - d:=feux[i].decodeur; - n:=feux[i].aspect; + d:=Signaux[i].decodeur; + n:=Signaux[i].aspect; with LabelDec do begin Caption:=decodeur[d]; width:=114; height:=42; end; - feux[0].decodeur:=d; - feux[0].aspect:=n; - feux[0].contrevoie:=feux[i].contrevoie; + Signaux[0].decodeur:=d; + Signaux[0].aspect:=n; + Signaux[0].contrevoie:=Signaux[i].contrevoie; // signal belge @@ -370,7 +370,7 @@ begin if (n<4) or (n>10) then checkVerrouCarre.Visible:=false else begin checkVerrouCarre.Visible:=false; //true; - checkVerrouCarre.Checked:=feux[i].VerrouCarre; + checkVerrouCarre.Checked:=Signaux[i].VerrouCarre; end; with imagePilote do @@ -379,14 +379,14 @@ begin Picture.Bitmap.TransparentMode:=tmAuto; Picture.Bitmap.TransparentColor:=clblue; Transparent:=true; - Picture.BitMap:=Feux[i].Img.Picture.Bitmap; + Picture.BitMap:=Signaux[i].Img.Picture.Bitmap; //left:=groupBox1.width+50; end; LabelTitrePilote.Caption:='Pilotage du signal '+intToSTR(AdrPilote); - feux[0].EtatSignal:=feux[i].EtatSignal; + Signaux[0].EtatSignal:=Signaux[i].EtatSignal; - if (feux[i].aspect>10) and (feux[i].aspect<20) then + if (Signaux[i].aspect>10) and (Signaux[i].aspect<20) then begin // signaux directionnels GroupBox1.Visible:=false; @@ -400,7 +400,7 @@ begin LabelNbFeux.Visible:=False; EditNbreFeux.Visible:=false; GroupBox1.Visible:=true; - if (feux[i].aspect<10) then GroupBox2.Visible:=true else GroupBox2.Visible:=false; + if (Signaux[i].aspect<10) then GroupBox2.Visible:=true else GroupBox2.Visible:=false; end; radioVert.Checked:=false; @@ -425,9 +425,9 @@ procedure TFormPilote.CheckVerrouCarreClick(Sender: TObject); var i : integer; begin i:=Index_Signal(AdrPilote); - if feux[i].VerrouCarre then + if Signaux[i].VerrouCarre then begin - feux[i].EtatVerrouCarre:=checkVerrouCarre.Checked=true; + Signaux[i].EtatVerrouCarre:=checkVerrouCarre.Checked=true; Maj_Etat_Signal(AdrPilote,carre); envoi_signal(Adrpilote); Maj_Etat_Signal(0,carre); diff --git a/UnitPrinc.dfm b/UnitPrinc.dfm index a063cfe..1dc3159 100644 --- a/UnitPrinc.dfm +++ b/UnitPrinc.dfm @@ -19,8 +19,8 @@ object FormPrinc: TFormPrinc OnCreate = FormCreate OnResize = FormResize DesignSize = ( - 1117 - 594) + 1125 + 602) PixelsPerInch = 96 TextHeight = 13 object LabelTitre: TLabel @@ -1429,8 +1429,8 @@ object FormPrinc: TFormPrinc end object StatusBar1: TStatusBar Left = 0 - Top = 572 - Width = 1117 + Top = 580 + Width = 1125 Height = 22 Panels = < item diff --git a/UnitPrinc.pas b/UnitPrinc.pas index 1a4a801..efd6ddf 100644 --- a/UnitPrinc.pas +++ b/UnitPrinc.pas @@ -1,5 +1,5 @@ Unit UnitPrinc; -// 22/12 22 +// 23/12 12h (******************************************** Programme signaux complexes Graphique Lenz Delphi 7 + activeX Tmscomm + clientSocket @@ -414,11 +414,11 @@ Max_Event_det_tick=30000; EtatSign : array[0..13] of string[20] =('carré','sémaphore','sémaphore cli','vert','vert cli','violet', 'blanc','blanc cli','jaune','jaune cli','ral 30','ral 60','rappel 30','rappel 60'); -// texte de la combo box - attention ce n'est pas l'index de feux[x].aspect!! +// texte de la combo box des signaux - attention ce n'est pas l'index de Signaux[x].aspect!! Aspects : array[0..11] of string[20]=('2 feux','3 feux','4 feux','5 feux','7 feux','9 feux','Directionnel 2 feux','Directionnel 3 feux','Directionnel 4 feux', 'Directionnel 5 feux','Directionnel 6 feux','Signal belge type 1'); -// conversion index et feux[aspect] +// conversion index et Signaux[aspect] // index aspect // 2feux 0 2 // 3feux 1 3 @@ -444,7 +444,7 @@ EtatSignBelge: array[0..9] of string[30]= 'deux jaunes','Chiffre','Chevron','Clignote'); type -Taccessoire = (aigP,feu); // aiguillage ou feu +Taccessoire = (aigP,signal); // aiguillage ou signal TEquipement = (rien,aig,tjd,tjs,triple,det,buttoir,voie,crois,act); // voie uniquement pour le tco TBranche = record BType : Tequipement ; // ne prend que les valeurs suivantes: dét aig Buttoir @@ -532,7 +532,7 @@ TSignal = record SR : array[1..19] of record // configuration des sorties du décodeur Stéphane Ravaut ou digikeijs ou cdf pour chacun des 19 états sortie1,sortie0 : integer; // ex SR[1]=[carre] (voir tableau Etats) end; - Na : integer; // nombre d'adresses du feu occupées par le décodeur CDF/digikeijs + Na : integer; // nombre d'adresses du feu occupées par le décodeur CDF/digikeijs/Belge DetAmont : TtabloDet; // tableau des détecteurs amonts, calculés à la lecture du fichier de config end; @@ -550,7 +550,7 @@ var N_Cv,index_simule,NDetecteurs,N_Trains,N_routes,espY,Tps_affiche_retour_dcc, NbreImagePligne,NbreBranches,Index2_aig,branche_det,ntrains_cdm, I_simule,maxTablo_act,NbreVoies,El_suivant,N_modules_dcc,NbDet1,ncrois, - tempsCli,NbreFeux,pasreponse,AdrDevie,fenetre,Tempo_Aig,Tempo_feu,etat_init_interface, + tempsCli,NbreSignaux,pasreponse,AdrDevie,fenetre,Tempo_Aig,Tempo_feu,etat_init_interface, NombreImages,signalCpx,branche_trouve,Indexbranche_trouve,Actuel,Signal_suivant, Nbre_recu_cdm,Tempo_chgt_feux,Adj1,Adj2,NbrePN,ServeurInterfaceCDM,index_couleur, ServeurRetroCDM,TailleFonte,Nb_Det_Dist,Tdoubleclic,algo_Unisemaf,fA,fB, @@ -567,7 +567,8 @@ var TraceListe,clignotant,nack,Maj_feux_cours,configNulle,LanceCDM,AvecInitAiguillages, AvecDemandeInterfaceUSB,AvecDemandeInterfaceEth,aff_acc,affiche_aigdcc,modeStkRetro, retEtatDet,roulage,init_aig_cours,affevt,placeAffiche,clicComboTrain,clicAdrTrain, - avec_splitter,fichier_module_cdm,Diffusion,cdmDevant,avecRESA,serveurIPCDM_Touche : boolean; + avec_splitter,fichier_module_cdm,Diffusion,cdmDevant,avecRESA,serveurIPCDM_Touche, + Z21 : boolean; tick,Premier_tick : longint; @@ -710,7 +711,7 @@ var aiguillage : array[0..NbreMaxiAiguillages] of Taiguillage; // signaux - L'index du tableau n'est pas son adresse CdeDccpp : array[1..MaxCdeDccpp] of string; - feux : array[0..NbreMaxiSignaux] of TSignal; + Signaux : array[0..NbreMaxiSignaux] of TSignal; trains_cdm : array[1..Max_Trains] of record nom_train : string; adresse,vitmax : integer; @@ -977,9 +978,9 @@ var a,i,aspect,etat,combine,nation : integer; begin //i:=Index_Signal(adresse); i:=index_accessoire[adresse]; - etat:=feux[i].EtatSignal ; + etat:=Signaux[i].EtatSignal ; nation:=1; - a:=feux[i].aspect; + a:=Signaux[i].aspect; if a=20 then nation:=2; if nation=2 then @@ -1660,7 +1661,7 @@ begin //index:=index_signal(adresse); index:=index_accessoire[adresse]; - if feux[index].contrevoie then + if Signaux[index].contrevoie then begin xvert:=largeur-xvert; xrouge:=largeur-xrouge; @@ -1816,9 +1817,9 @@ begin Name:='Arial'; end; - if feux[index].Btype_suiv1=aig then + if Signaux[index].Btype_suiv1=aig then begin - adrAig:=feux[index].Adr_el_suiv1; + adrAig:=Signaux[index].Adr_el_suiv1; IndexAig:=index_aig(adrAig); vitesse:=aiguillage[IndexAig].vitesse div 10; @@ -2060,7 +2061,7 @@ begin if trouve then index_train_adresse:=i else index_train_adresse:=0 ; end; -// renvoie l'index du signal dans le tableau feux[] en fonction de son adresse +// renvoie l'index du signal dans le tableau Signaux[] en fonction de son adresse // si pas trouvé renvoie 0 function Index_signal_V1(adresse : integer) : integer; var i : integer; @@ -2068,9 +2069,9 @@ var i : integer; begin i:=1; repeat - trouve:=feux[i].adresse=adresse; + trouve:=Signaux[i].adresse=adresse; if not(trouve) then inc(i); - until (trouve) or (i>NbreFeux); + until (trouve) or (i>NbreSignaux); if trouve then result:=i else result:=0 ; end; @@ -2079,7 +2080,7 @@ begin if adresse>MaxAcc then result:=0 else result:=Index_Accessoire[adresse]; // vérifier si l'index correspond à un signal - if feux[result].adresse<>adresse then result:=0; + if Signaux[result].adresse<>adresse then result:=0; end; // renvoie l'index de l'aiguillage dans le tableau aiguillages[] en fonction de son adresse @@ -2126,18 +2127,18 @@ begin i:=Index_Signal(adresse); if i<>0 then begin - aspect:=feux[i].aspect ; + aspect:=Signaux[i].aspect ; case aspect of // feux de signalisation - 2 : dessine_signal2(CanvasDest,x,y,frx,fry,feux[i].EtatSignal,orientation); - 3 : dessine_signal3(CanvasDest,x,y,frx,fry,feux[i].EtatSignal,feux[i].AncienEtat,orientation); // essai - 4 : dessine_signal4(CanvasDest,x,y,frx,fry,feux[i].EtatSignal,orientation); - 5 : dessine_signal5(CanvasDest,x,y,frx,fry,feux[i].EtatSignal,orientation); - 7 : dessine_signal7(CanvasDest,x,y,frx,fry,feux[i].EtatSignal,orientation); - 9 : dessine_signal9(CanvasDest,x,y,frx,fry,feux[i].EtatSignal,orientation); - 20 : dessine_signal20(CanvasDest,x,y,frx,fry,feux[i].EtatSignal,orientation,feux[i].adresse); + 2 : dessine_signal2(CanvasDest,x,y,frx,fry,Signaux[i].EtatSignal,orientation); + 3 : dessine_signal3(CanvasDest,x,y,frx,fry,Signaux[i].EtatSignal,Signaux[i].AncienEtat,orientation); // essai + 4 : dessine_signal4(CanvasDest,x,y,frx,fry,Signaux[i].EtatSignal,orientation); + 5 : dessine_signal5(CanvasDest,x,y,frx,fry,Signaux[i].EtatSignal,orientation); + 7 : dessine_signal7(CanvasDest,x,y,frx,fry,Signaux[i].EtatSignal,orientation); + 9 : dessine_signal9(CanvasDest,x,y,frx,fry,Signaux[i].EtatSignal,orientation); + 20 : dessine_signal20(CanvasDest,x,y,frx,fry,Signaux[i].EtatSignal,orientation,Signaux[i].adresse); // indicateurs de direction - 12..16 : dessine_dirN(CanvasDest,x,y,frx,fry,feux[i].EtatSignal,orientation,aspect-10); + 12..16 : dessine_dirN(CanvasDest,x,y,frx,fry,Signaux[i].EtatSignal,orientation,aspect-10); end; end; end; @@ -2215,13 +2216,13 @@ var adresse,TypeSignal : integer; s : string; T_BP : TBitMap; begin - TypeSignal:=feux[rang].aspect; + TypeSignal:=Signaux[rang].aspect; if typeSignal<=0 then exit; - adresse:=feux[rang].adresse; - Feux[rang].Img:=Timage.create(Formprinc.ScrollBox1); - if feux[rang].Img=nil then begin affiche('Erreur 900 : impossible de créer une image',clred);exit;end; + adresse:=Signaux[rang].adresse; + Signaux[rang].Img:=Timage.create(Formprinc.ScrollBox1); + if Signaux[rang].Img=nil then begin affiche('Erreur 900 : impossible de créer une image',clred);exit;end; - with Feux[rang].Img do + with Signaux[rang].Img do begin if debug=1 then affiche('Image '+intToSTR(rang)+' créée',clLime); //canvas.Create; @@ -2236,10 +2237,10 @@ begin Height:=HtImg; // hint - s:='Index='+IntToSTR(rang)+' @='+inttostr(Adresse)+' Décodeur='+decodeur[feux[rang].Decodeur]+#13+ - ' Adresse détecteur associé='+intToSTR(feux[rang].Adr_det1)+#13+ - ' Adresse élement suivant='+intToSTR(feux[rang].Adr_el_suiv1); - if feux[rang].Btype_suiv1=aig then s:=s+' (aig)'; + s:='Index='+IntToSTR(rang)+' @='+inttostr(Adresse)+' Décodeur='+decodeur[Signaux[rang].Decodeur]+#13+ + ' Adresse détecteur associé='+intToSTR(Signaux[rang].Adr_det1)+#13+ + ' Adresse élement suivant='+intToSTR(Signaux[rang].Adr_el_suiv1); + if Signaux[rang].Btype_suiv1=aig then s:=s+' (aig)'; Hint:=s; showHint:=true; @@ -2262,30 +2263,30 @@ begin Transparent:=true; // mettre rouge par défaut - if TypeSignal=2 then feux[rang].EtatSignal:=violet_F; - if TypeSignal=3 then feux[rang].EtatSignal:=semaphore_F; - if (TypeSignal>3) and (TypeSignal<10) and feux[rang].VerrouCarre then feux[rang].EtatSignal:=carre_F; - if (TypeSignal>3) and (TypeSignal<10) and not(feux[rang].VerrouCarre) then feux[rang].EtatSignal:=semaphore_F; - if (TypeSignal>10) and (TypeSignal<20) then feux[rang].EtatSignal:=0; + if TypeSignal=2 then Signaux[rang].EtatSignal:=violet_F; + if TypeSignal=3 then Signaux[rang].EtatSignal:=semaphore_F; + if (TypeSignal>3) and (TypeSignal<10) and Signaux[rang].VerrouCarre then Signaux[rang].EtatSignal:=carre_F; + if (TypeSignal>3) and (TypeSignal<10) and not(Signaux[rang].VerrouCarre) then Signaux[rang].EtatSignal:=semaphore_F; + if (TypeSignal>10) and (TypeSignal<20) then Signaux[rang].EtatSignal:=0; if TypeSignal=20 then // signal belge begin - feux[rang].EtatSignal:=semaphore_F; - if feux[rang].contrevoie then + Signaux[rang].EtatSignal:=semaphore_F; + if Signaux[rang].contrevoie then begin - inverse_image(Feux[rang].Img,Formprinc.ImageSignal20); - feux[rang].EtatSignal:=feux[rang].EtatSignal+clignote_F; + inverse_image(Signaux[rang].Img,Formprinc.ImageSignal20); + Signaux[rang].EtatSignal:=Signaux[rang].EtatSignal+clignote_F; end; end; - dessine_signal_mx(Feux[rang].Img.Canvas,0,0,1,1,feux[rang].adresse,1); - //if feux[rang].aspect=5 then cercle(Picture.Bitmap.Canvas,13,22,6,ClYellow); + dessine_signal_mx(Signaux[rang].Img.Canvas,0,0,1,1,Signaux[rang].adresse,1); + //if Signaux[rang].aspect=5 then cercle(Picture.Bitmap.Canvas,13,22,6,ClYellow); end; // créée le label pour afficher son adresse - Feux[rang].Lbl:=Tlabel.create(Formprinc.ScrollBox1); - with Feux[rang].Lbl do + Signaux[rang].Lbl:=Tlabel.create(Formprinc.ScrollBox1); + with Signaux[rang].Lbl do begin - caption:='@'+IntToSTR(Feux[rang].adresse); + caption:='@'+IntToSTR(Signaux[rang].adresse); Parent:=Formprinc.ScrollBox1; width:=100;height:=20; Top:=HtImg+((HtImg+EspY+20)*((rang-1) div NbreImagePLigne)); @@ -2294,11 +2295,11 @@ begin end; // créée le checkBox si un feu blanc est déclaré sur ce feu - if feux[rang].FeuBlanc then + if Signaux[rang].FeuBlanc then begin if debug=1 then affiche('Création CheckBox feu blanc '+intToSTR(rang),clLime); - Feux[rang].checkFB:=TCheckBox.create(Formprinc.ScrollBox1); // ranger l'adresse de la Checkbox dans la structure du feu - with Feux[rang].CheckFB do + Signaux[rang].checkFB:=TCheckBox.create(Formprinc.ScrollBox1); // ranger l'adresse de la Checkbox dans la structure du feu + with Signaux[rang].CheckFB do begin onClick:=formprinc.proc_checkBoxFB; // affecter l'adresse de la procédure de traitement quand on clique dessus Hint:='Feu blanc'; @@ -2311,7 +2312,7 @@ begin BringToFront; end; end - else Feux[rang].checkFB:=nil; + else Signaux[rang].checkFB:=nil; end; // affiche les signaux dans la fenêtre de droite @@ -2321,24 +2322,24 @@ begin i:=(Formprinc.ScrollBox1.Width div (largImg+5)) -1; if i=NbreImagePLigne then exit; NbreImagePLigne:=i; - for i:=1 to NbreFeux do + for i:=1 to NbreSignaux do begin - with Feux[i].img do + with Signaux[i].img do begin Top:=(HtImg+espY+20)*((i-1) div NbreImagePLigne); // détermine les points d'origine Left:=10+ (LargImg+5)*((i-1) mod (NbreImagePLigne)); repaint; end; - with Feux[i].lbl do + with Signaux[i].lbl do begin Top:=HtImg+((HtImg+EspY+20)*((i-1) div NbreImagePLigne)); Left:=10+ (LargImg+5)*((i-1) mod (NbreImagePLigne)); repaint; end; - if feux[i].FeuBlanc then - with Feux[i].checkFB do + if Signaux[i].FeuBlanc then + with Signaux[i].checkFB do begin Top:=HtImg+15+((HtImg+EspY+20)*((i-1) div NbreImagePLigne)); Left:=10+ (LargImg+5)*((i-1) mod (NbreImagePLigne)); @@ -2865,25 +2866,25 @@ begin if aspect<=$3f then begin // razer tous les bits non combinés - etats:=feux[i].EtatSignal and not($3F); + etats:=Signaux[i].EtatSignal and not($3F); // et allumer le nouveau etats:=setbit(etats,aspect); - feux[i].EtatSignal:=etats; + Signaux[i].EtatSignal:=etats; end; // signalisation combinée if (aspect and $1C0)<>0 then begin - etats:=feux[i].EtatSignal; + etats:=Signaux[i].EtatSignal; //si le bit 15 (bita1) est à 1, c'est l'indicateur de mise à 1 if testBit(aspect,bita1) then begin etats:=etats or (aspect and $1C0); // mise à 1 par masquage - feux[i].EtatSignal:=feux[i].EtatSignal or etats; + Signaux[i].EtatSignal:=Signaux[i].EtatSignal or etats; end else begin etats:=etats and not(aspect and $1c0); // mise à 0 par masquage - feux[i].EtatSignal:=feux[i].EtatSignal and etats; + Signaux[i].EtatSignal:=Signaux[i].EtatSignal and etats; end; end; end; @@ -2901,48 +2902,48 @@ begin if debug=3 then formprinc.Caption:='Maj_Etat_Signal '+IntToSTR(adresse); i:=Index_Signal(adresse); - if testBit(feux[i].EtatSignal,aspect)=false then // si le bit dans l'état du signal n'est pas allumé, procéder. + if testBit(Signaux[i].EtatSignal,aspect)=false then // si le bit dans l'état du signal n'est pas allumé, procéder. begin // effacement du motif de bits en fonction du nouvel état demandé suivant la règle des signaux complexes if (aspect<=blanc_cli) then begin - feux[i].EtatSignal:=0; //Tout aspect <=7 efface les autres + Signaux[i].EtatSignal:=0; //Tout aspect <=7 efface les autres end; if (aspect=jaune) then // jaune begin - feux[i].EtatSignal:=RazBit(feux[i].EtatSignal,jaune_cli); // cas du jaune: efface le bit du jaune clignotant (bit 9) - feux[i].EtatSignal:=RazBit(feux[i].EtatSignal,ral_30); // cas du jaune: efface le bit du ral_30 (bit 10) - feux[i].EtatSignal:=RazBit(feux[i].EtatSignal,ral_60); // cas du jaune: efface le bit du ral_60 (bit 11) - feux[i].EtatSignal:=feux[i].EtatSignal and not($00FF); // et effacer les bits 0 à 7 + Signaux[i].EtatSignal:=RazBit(Signaux[i].EtatSignal,jaune_cli); // cas du jaune: efface le bit du jaune clignotant (bit 9) + Signaux[i].EtatSignal:=RazBit(Signaux[i].EtatSignal,ral_30); // cas du jaune: efface le bit du ral_30 (bit 10) + Signaux[i].EtatSignal:=RazBit(Signaux[i].EtatSignal,ral_60); // cas du jaune: efface le bit du ral_60 (bit 11) + Signaux[i].EtatSignal:=Signaux[i].EtatSignal and not($00FF); // et effacer les bits 0 à 7 end; if (aspect=jaune_cli) then // jaune clignotant begin - feux[i].EtatSignal:=RazBit(feux[i].EtatSignal,jaune); // cas du jaunecli: efface le bit du jaune (bit 8) - feux[i].EtatSignal:=feux[i].EtatSignal and $FF00; // et effacer les bits 0 à 7 + Signaux[i].EtatSignal:=RazBit(Signaux[i].EtatSignal,jaune); // cas du jaunecli: efface le bit du jaune (bit 8) + Signaux[i].EtatSignal:=Signaux[i].EtatSignal and $FF00; // et effacer les bits 0 à 7 end; if (aspect=ral_30) then // ralentissement 30 begin - feux[i].EtatSignal:=feux[i].EtatSignal and not($3BFF); // cas du ral 30: efface les bits 0 1 2 3 4 5 6 7 8 9 11 12 et 13 : 11 1000 1111 1111 + Signaux[i].EtatSignal:=Signaux[i].EtatSignal and not($3BFF); // cas du ral 30: efface les bits 0 1 2 3 4 5 6 7 8 9 11 12 et 13 : 11 1000 1111 1111 end; if (aspect=ral_60) then // ralentissement 60 begin - feux[i].EtatSignal:=feux[i].EtatSignal and not($35FF); // cas du ral 60: efface les bits 8 10 12 et 13 et de 0 à 7 : 11 0100 1111 1111 + Signaux[i].EtatSignal:=Signaux[i].EtatSignal and not($35FF); // cas du ral 60: efface les bits 8 10 12 et 13 et de 0 à 7 : 11 0100 1111 1111 end; if (aspect=rappel_30) then // rappel 30 begin - feux[i].EtatSignal:=feux[i].EtatSignal and not($2cff); // cas du rappel 30: efface les bits 0 1 2 3 4 5 6 7 10 11 et 13 : 10 1100 1111 0000 + Signaux[i].EtatSignal:=Signaux[i].EtatSignal and not($2cff); // cas du rappel 30: efface les bits 0 1 2 3 4 5 6 7 10 11 et 13 : 10 1100 1111 0000 end; if (aspect=rappel_60) then // rappel 60 begin - feux[i].EtatSignal:=feux[i].EtatSignal and not($1Cff); // cas du rappel 60: efface les bits 0 1 2 3 4 5 6 7 10 11 et 12 1 1100 1111 0000 + Signaux[i].EtatSignal:=Signaux[i].EtatSignal and not($1Cff); // cas du rappel 60: efface les bits 0 1 2 3 4 5 6 7 10 11 et 12 1 1100 1111 0000 end; if (aspect=aspect8) then // ral_60_jaune_cli décodeur LDT begin - feux[i].EtatSignal:=jaune_cli_F or ral_60_F; // cas du ralentissement 60 + avertissement clignotant : efface les bits 10 11 et 12 + Signaux[i].EtatSignal:=jaune_cli_F or ral_60_F; // cas du ralentissement 60 + avertissement clignotant : efface les bits 10 11 et 12 end; if (aspect<>aspect8) then begin - feux[i].EtatSignal:=SetBit(feux[i].EtatSignal,aspect); // allume le numéro du bit de la fonction du signal + Signaux[i].EtatSignal:=SetBit(Signaux[i].EtatSignal,aspect); // allume le numéro du bit de la fonction du signal end; end; if debug=3 then formprinc.Caption:=''; @@ -2952,7 +2953,7 @@ procedure Maj_Etat_Signal(adresse,aspect : integer); var i,d : integer; begin i:=Index_Signal(adresse); - d:=feux[i].aspect; + d:=Signaux[i].aspect; if d=20 then Maj_Etat_Signal_belge(adresse,aspect) else Maj_Etat_Signal_fr(adresse,aspect); end; @@ -2966,43 +2967,43 @@ procedure envoi_directionBahn(adr : integer;code : integer); var i : integer; begin i:=Index_Signal(adr); - if (feux[i].EtatSignal<>code) then + if (Signaux[i].EtatSignal<>code) then begin if (traceSign) then Affiche('Signal directionnel: ad'+IntToSTR(adr)+'='+intToSTR(code),clOrange); if AffSignal then AfficheDebug('Signal directionnel: ad'+IntToSTR(adr)+'='+intToSTR(code),clOrange); case code of - 0 : begin pilote_acc(adr,1,feu); // sortie 1 à 0 + 0 : begin pilote_acc(adr,1,signal); // sortie 1 à 0 sleep(tempo_Feu); - pilote_acc(adr+1,1,feu); // sortie 2 à 0 + pilote_acc(adr+1,1,signal); // sortie 2 à 0 sleep(Tempo_feu); - pilote_acc(adr+2,1,feu); // sortie 3 à 0 + pilote_acc(adr+2,1,signal); // sortie 3 à 0 sleep(Tempo_Feu); end; - 1 : begin pilote_acc(adr,2,feu); // sortie 1 à 1 + 1 : begin pilote_acc(adr,2,signal); // sortie 1 à 1 sleep(tempo_Feu); - pilote_acc(adr+1,1,feu); // sortie 2 à 0 + pilote_acc(adr+1,1,signal); // sortie 2 à 0 sleep(Tempo_feu); - pilote_acc(adr+2,1,feu); // sortie 3 à 0 + pilote_acc(adr+2,1,signal); // sortie 3 à 0 sleep(Tempo_Feu); end; - 2 : begin pilote_acc(adr,2,feu); // sortie 1 à 1 + 2 : begin pilote_acc(adr,2,signal); // sortie 1 à 1 sleep(tempo_Feu); - pilote_acc(adr+1,2,feu); // sortie 2 à 1 + pilote_acc(adr+1,2,signal); // sortie 2 à 1 sleep(Tempo_feu); - pilote_acc(adr+2,1,feu); // sortie 3 à 0 + pilote_acc(adr+2,1,signal); // sortie 3 à 0 sleep(Tempo_Feu); end; - 3 : begin pilote_acc(adr,2,feu); // sortie 1 à 1 + 3 : begin pilote_acc(adr,2,signal); // sortie 1 à 1 sleep(tempo_Feu); - pilote_acc(adr+1,2,feu); // sortie 2 à 1 + pilote_acc(adr+1,2,signal); // sortie 2 à 1 sleep(Tempo_feu); - pilote_acc(adr+2,2,feu); // sortie 3 à 1 + pilote_acc(adr+2,2,signal); // sortie 3 à 1 sleep(Tempo_Feu); end; end; - feux[i].EtatSignal:=code; - Dessine_signal_mx(Feux[Index_Signal(adr)].Img.Canvas,0,0,1,1,adr,1); + Signaux[i].EtatSignal:=code; + Dessine_signal_mx(Signaux[Index_Signal(adr)].Img.Canvas,0,0,1,1,adr,1); end; end; @@ -3015,7 +3016,7 @@ procedure envoi_directionCDF(adr : integer;code : integer); var i : integer; begin i:=Index_Signal(adr); - if (feux[i].EtatSignal<>code) then + if (Signaux[i].EtatSignal<>code) then begin if traceSign then Affiche('signal directionnel CDF: '+IntToSTR(adr)+' '+intToSTR(code),ClOrange); if AffSignal then AfficheDebug('signal directionnel CDF: '+IntToSTR(adr)+' '+intToSTR(code),ClOrange); @@ -3024,28 +3025,28 @@ begin // éteindre toutes les leds 0 : begin - pilote_acc(adr,1,feu) ; + pilote_acc(adr,1,signal) ; sleep(200); end; // code 1 : allume le feu le plus à gauche 1 : begin - pilote_acc(adr,2,feu) ; + pilote_acc(adr,2,signal) ; sleep(200); end; 2 : //allume 2 feux begin - pilote_acc(adr+1,1,feu) ; + pilote_acc(adr+1,1,signal) ; sleep(200); end; // code 3 : allume 3 feux 3 : begin - pilote_acc(adr+1,2,feu) ; + pilote_acc(adr+1,2,signal) ; sleep(200); end; end; - feux[i].EtatSignal:=code; + Signaux[i].EtatSignal:=code; end; end; @@ -3053,18 +3054,18 @@ procedure Envoi_DirectionLEB(Adr : integer;code : integer); var i : integer; begin i:=Index_Signal(i); - if feux[i].EtatSignal<>code then + if Signaux[i].EtatSignal<>code then begin if traceSign then Affiche('signal directionnel LEB: '+IntToSTR(adr)+' '+intToSTR(code),ClOrange); if affsignal then AfficheDebug('signal directionnel LEB: '+IntToSTR(adr)+' '+intToSTR(code),ClOrange); case code of - 0 : begin pilote_acc(adr+5,2,feu) ; pilote_acc(adr+6,2,feu) ;end; //00 - 1 : begin pilote_acc(adr+5,1,feu) ; pilote_acc(adr+6,2,feu) ;end; //10 - 2 : begin pilote_acc(adr+5,2,feu) ; pilote_acc(adr+6,1,feu) ;end; //01 - 3 : begin pilote_acc(adr+5,1,feu) ; pilote_acc(adr+6,1,feu) ;end; //11 + 0 : begin pilote_acc(adr+5,2,signal) ; pilote_acc(adr+6,2,signal) ;end; //00 + 1 : begin pilote_acc(adr+5,1,signal) ; pilote_acc(adr+6,2,signal) ;end; //10 + 2 : begin pilote_acc(adr+5,2,signal) ; pilote_acc(adr+6,1,signal) ;end; //01 + 3 : begin pilote_acc(adr+5,1,signal) ; pilote_acc(adr+6,1,signal) ;end; //11 end; - feux[i].EtatSignal:=code; + Signaux[i].EtatSignal:=code; end; end; @@ -3084,28 +3085,28 @@ var if nombre>0 then begin if (v and 1)=0 then j:=1 else j:=2; - pilote_acc(adresse,j,feu); + pilote_acc(adresse,j,signal); end; // bit 1 if nombre>1 then begin if (v and 2)=0 then j:=1 else j:=2; - pilote_acc(adresse+1,j,feu); + pilote_acc(adresse+1,j,signal); end; // bit 2 if nombre>2 then begin if (v and 4)=0 then j:=1 else j:=2; - pilote_acc(adresse+2,j,feu); + pilote_acc(adresse+2,j,signal); end; // bit 3 if nombre>3 then begin if (v and 8)=0 then j:=1 else j:=2; - pilote_acc(adresse+3,j,feu); + pilote_acc(adresse+3,j,signal); end; end; @@ -3121,8 +3122,8 @@ var // raz les 2 bits Pilote_acc0_X(adresse,1);Pilote_acc0_X(adresse,2); end; - if bit2=1 then pilote_acc(adresse,1,feu); - if bit2=2 then pilote_acc(adresse,2,feu); + if bit2=1 then pilote_acc(adresse,1,signal); + if bit2=2 then pilote_acc(adresse,2,signal); end; // bit 2-3 (adresse+1) @@ -3135,8 +3136,8 @@ var // raz les 2 bits Pilote_acc0_X(adresse,1);Pilote_acc0_X(adresse,2); end; - if bit2=4 then pilote_acc(adresse,1,feu); - if bit2=8 then pilote_acc(adresse,2,feu); + if bit2=4 then pilote_acc(adresse,1,signal); + if bit2=8 then pilote_acc(adresse,2,signal); end; // bit 4-5 (adresse+2) @@ -3149,8 +3150,8 @@ var // raz les 2 bits Pilote_acc0_X(adresse,1);Pilote_acc0_X(adresse,2); end; - if bit2=16 then pilote_acc(adresse,1,feu); - if bit2=32 then pilote_acc(adresse,2,feu); + if bit2=16 then pilote_acc(adresse,1,signal); + if bit2=32 then pilote_acc(adresse,2,signal); end; // bit 6-7 (adresse+3) @@ -3163,8 +3164,8 @@ var // raz les 2 bits Pilote_acc0_X(adresse,1);Pilote_acc0_X(adresse,2); end; - if bit2=64 then pilote_acc(adresse,1,feu); - if bit2=128 then pilote_acc(adresse,2,feu); + if bit2=64 then pilote_acc(adresse,1,signal); + if bit2=128 then pilote_acc(adresse,2,signal); end; end; @@ -3177,7 +3178,7 @@ var bit2:=v and 3; //0000 0011 if bit2<>0 then begin - pilote_acc(adresse,bit2,feu); + pilote_acc(adresse,bit2,signal); exit; end; end; @@ -3188,7 +3189,7 @@ var bit2:=v and $c; //0000 1100 if bit2<>0 then begin - pilote_acc(adresse+1,bit2 shr 2,feu); + pilote_acc(adresse+1,bit2 shr 2,signal); exit; end; end; @@ -3199,7 +3200,7 @@ var bit2:=v and $30; //0011 0000 if bit2<>0 then begin - pilote_acc(adresse+2,bit2 shr 4,feu); + pilote_acc(adresse+2,bit2 shr 4,signal); exit; end; end; @@ -3210,17 +3211,17 @@ var bit2:=v and $c0; //1100 0000 if bit2<>0 then begin - pilote_acc(adresse+3,bit2 shr 6,feu); + pilote_acc(adresse+3,bit2 shr 6,signal); end; end; end; begin i:=Index_Signal(adresse); - if (feux[i].AncienEtat<>feux[i].EtatSignal) then //; && (stop_cmd==FALSE)) + if (Signaux[i].AncienEtat<>Signaux[i].EtatSignal) then //; && (stop_cmd==FALSE)) begin - code:=feux[i].EtatSignal; - nombre:=feux[i].Na; // nombre d'adresses occupées par le signal + code:=Signaux[i].EtatSignal; + nombre:=Signaux[i].Na; // nombre d'adresses occupées par le signal code_to_aspect(code,aspect,combine); s:='Signal CDF: ad'+IntToSTR(adresse)+'='+chaine_signal(adresse); if traceSign then affiche(s,clOrange); @@ -3234,31 +3235,31 @@ begin if combine=-1 then case aspect of - carre : ecrire_3(Feux[i].SR[1].sortie1); - semaphore : ecrire_3(Feux[i].SR[2].sortie1); - semaphore_cli : ecrire_3(Feux[i].SR[3].sortie1); - vert : ecrire_3(Feux[i].SR[4].sortie1); - vert_cli : ecrire_3(Feux[i].SR[5].sortie1); - violet : ecrire_3(Feux[i].SR[6].sortie1); - blanc : ecrire_3(Feux[i].SR[7].sortie1); - blanc_cli : ecrire_3(Feux[i].SR[8].sortie1); - jaune : ecrire_3(Feux[i].SR[9].sortie1); - jaune_cli : ecrire_3(Feux[i].SR[10].sortie1); + carre : ecrire_3(Signaux[i].SR[1].sortie1); + semaphore : ecrire_3(Signaux[i].SR[2].sortie1); + semaphore_cli : ecrire_3(Signaux[i].SR[3].sortie1); + vert : ecrire_3(Signaux[i].SR[4].sortie1); + vert_cli : ecrire_3(Signaux[i].SR[5].sortie1); + violet : ecrire_3(Signaux[i].SR[6].sortie1); + blanc : ecrire_3(Signaux[i].SR[7].sortie1); + blanc_cli : ecrire_3(Signaux[i].SR[8].sortie1); + jaune : ecrire_3(Signaux[i].SR[9].sortie1); + jaune_cli : ecrire_3(Signaux[i].SR[10].sortie1); end; if aspect=-1 then case combine of - ral_30 : ecrire_3(Feux[i].SR[11].sortie1); - ral_60 : ecrire_3(Feux[i].SR[12].sortie1); - rappel_30 : ecrire_3(Feux[i].SR[14].sortie1); - rappel_60 : ecrire_3(Feux[i].SR[15].sortie1); + ral_30 : ecrire_3(Signaux[i].SR[11].sortie1); + ral_60 : ecrire_3(Signaux[i].SR[12].sortie1); + rappel_30 : ecrire_3(Signaux[i].SR[14].sortie1); + rappel_60 : ecrire_3(Signaux[i].SR[15].sortie1); end; if (aspect<>-1) and (combine<>-1) then begin - if (Combine=ral_60) and (aspect=jaune_cli) then ecrire_3(Feux[i].SR[13].sortie1); - if (Combine=rappel_30) and (aspect=jaune) then ecrire_3(Feux[i].SR[16].sortie1); - if (Combine=rappel_30) and (aspect=jaune_cli) then ecrire_3(Feux[i].SR[17].sortie1); - if (Combine=rappel_60) and (aspect=jaune) then ecrire_3(Feux[i].SR[18].sortie1); - if (Combine=rappel_60) and (aspect=jaune_cli) then ecrire_3(Feux[i].SR[19].sortie1); + if (Combine=ral_60) and (aspect=jaune_cli) then ecrire_3(Signaux[i].SR[13].sortie1); + if (Combine=rappel_30) and (aspect=jaune) then ecrire_3(Signaux[i].SR[16].sortie1); + if (Combine=rappel_30) and (aspect=jaune_cli) then ecrire_3(Signaux[i].SR[17].sortie1); + if (Combine=rappel_60) and (aspect=jaune) then ecrire_3(Signaux[i].SR[18].sortie1); + if (Combine=rappel_60) and (aspect=jaune_cli) then ecrire_3(Signaux[i].SR[19].sortie1); end; end; end; @@ -3273,9 +3274,9 @@ var s : string; begin index:=Index_Signal(adresse); - if (feux[index].AncienEtat<>feux[index].EtatSignal) then //; && (stop_cmd==FALSE)) + if (Signaux[index].AncienEtat<>Signaux[index].EtatSignal) then //; && (stop_cmd==FALSE)) begin - code:=feux[index].EtatSignal; + code:=Signaux[index].EtatSignal; //code_to_aspect(code,aspect,combine); s:='Signal SR: ad'+IntToSTR(adresse)+'='+chaine_signal(adresse); if traceSign then affiche(s,clOrange); @@ -3296,17 +3297,17 @@ begin // trouve l'index dans la configuration du feu correspondant à son état demandé repeat inc(i); - until (feux[index].SR[i].sortie1=etat) or (feux[index].SR[i].sortie0=etat) or (i=8); + until (Signaux[index].SR[i].sortie1=etat) or (Signaux[index].SR[i].sortie0=etat) or (i=8); - if (feux[index].SR[i].sortie1=etat) then + if (Signaux[index].SR[i].sortie1=etat) then begin //affiche('trouvé en sortie1 index '+IntToSTR(i),clyellow); - Pilote_acc(adresse+i-1,2,feu); + Pilote_acc(adresse+i-1,2,signal); end; - if (feux[index].SR[i].sortie0=etat) then + if (Signaux[index].SR[i].sortie0=etat) then begin //affiche('trouvé en sortie0 index '+IntToSTR(i),clyellow); - Pilote_acc(adresse+i-1,1,feu); + Pilote_acc(adresse+i-1,1,signal); end; end; end; @@ -3329,7 +3330,7 @@ var code,aspect,combine : integer; begin if (testBit(selection,i)) then begin octet:=1;s:=s+'1';end else begin octet:=2 ; s:=s+'0';end; - Pilote_acc(adresse+i,octet,feu); + Pilote_acc(adresse+i,octet,signal); // le décodeur LEB nécessite qu'on envoie 0 après son pilotage ; si on est en mode usb ou ethernet if (portCommOuvert or parSocketLenz) then Pilote_acc0_X(adresse+i,octet); end; @@ -3339,9 +3340,9 @@ var code,aspect,combine : integer; begin index:=Index_Signal(adresse); - if (feux[index].AncienEtat<>feux[index].EtatSignal) then //; && (stop_cmd==FALSE)) + if (Signaux[index].AncienEtat<>Signaux[index].EtatSignal) then //; && (stop_cmd==FALSE)) begin - code:=feux[index].EtatSignal; + code:=Signaux[index].EtatSignal; code_to_aspect(code,aspect,combine); s:='Signal LEB: ad'+IntToSTR(adresse)+'='+chaine_signal(adresse); if traceSign then affiche(s,clOrange); @@ -3392,10 +3393,10 @@ var asp,aspect,combine,code,offset,sortie : integer; s : string; begin index:=Index_Signal(adresse); - if (feux[index].AncienEtat<>feux[index].EtatSignal) then //; && (stop_cmd==FALSE)) + if (Signaux[index].AncienEtat<>Signaux[index].EtatSignal) then //; && (stop_cmd==FALSE)) begin - code:=feux[index].EtatSignal; - asp:=feux[index].aspect; + code:=Signaux[index].EtatSignal; + asp:=Signaux[index].aspect; code_to_aspect(code,aspect,combine); s:='Signal Arcomora: ad'+IntToSTR(adresse)+'='+chaine_signal(adresse); if traceSign then affiche(s,clOrange); @@ -3476,7 +3477,7 @@ begin end; end; - Pilote_acc(adresse+offset,sortie,feu); + Pilote_acc(adresse+offset,sortie,signal); end; @@ -3512,9 +3513,9 @@ var valeur,i : integer ; s : string; begin i:=Index_Signal(adresse); - if (feux[i].AncienEtat<>feux[i].EtatSignal) then + if (Signaux[i].AncienEtat<>Signaux[i].EtatSignal) then begin - code:=feux[i].EtatSignal; + code:=Signaux[i].EtatSignal; code_to_aspect(code,aspect,combine); s:='Signal NMRA: ad'+IntToSTR(adresse)+'='+chaine_signal(adresse); if traceSign then affiche(s,clOrange); @@ -3550,7 +3551,7 @@ begin if (Combine=rappel_60) and (aspect=jaune) then valeur:=17; if (Combine=rappel_60) and (aspect=jaune_cli) then valeur:=18; - pilote_acc(adresse,valeur,feu); + pilote_acc(adresse,valeur,signal); end; end; @@ -3562,9 +3563,9 @@ var modele,index: integer ; begin index:=Index_Signal(adresse); // tranforme l'adresse du feu en index tableau - if (feux[index].AncienEtat<>feux[index].EtatSignal) then + if (Signaux[index].AncienEtat<>Signaux[index].EtatSignal) then begin - code:=feux[index].EtatSignal; + code:=Signaux[index].EtatSignal; code_to_aspect(code,aspect,combine); s:='Signal Unisemaf: ad'+IntToSTR(adresse)+'='+chaine_signal(adresse); if traceSign then affiche(s,clOrange); @@ -3576,7 +3577,7 @@ begin end; // pour Unisemaf, la cible est définie dans le champ Unisemaf de la structure feux - modele:=feux[index].Unisemaf; + modele:=Signaux[index].Unisemaf; if modele=0 then Affiche('Erreur 741 : spécification unisemaf signal '+intToSTR(adresse)+' non défini',clred); //Affiche('Adresse='+intToSTR(Adresse)+' code='+intToSTR(code)+' combine'+intToSTR(combine),clyellow); @@ -3585,132 +3586,132 @@ begin begin if modele=2 then // 2 feux begin - if aspect=blanc then pilote_acc(adresse,1,feu); - if aspect=blanc_cli then pilote_acc(adresse,1,feu); - if aspect=violet then pilote_acc(adresse,2,feu); + if aspect=blanc then pilote_acc(adresse,1,signal); + if aspect=blanc_cli then pilote_acc(adresse,1,signal); + if aspect=violet then pilote_acc(adresse,2,signal); end; if modele=3 then // 3 feux begin - if aspect=vert then pilote_acc(adresse,1,feu); - if aspect=vert_cli then pilote_acc(adresse,1,feu); - if aspect=semaphore then pilote_acc(adresse,2,feu); - if aspect=semaphore_cli then pilote_acc(adresse,2,feu); + if aspect=vert then pilote_acc(adresse,1,signal); + if aspect=vert_cli then pilote_acc(adresse,1,signal); + if aspect=semaphore then pilote_acc(adresse,2,signal); + if aspect=semaphore_cli then pilote_acc(adresse,2,signal); - if aspect=jaune then pilote_acc(adresse+1,1,feu); - if aspect=jaune_cli then pilote_acc(adresse+1,1,feu); + if aspect=jaune then pilote_acc(adresse+1,1,signal); + if aspect=jaune_cli then pilote_acc(adresse+1,1,signal); end; if modele=4 then begin case aspect of - vert : pilote_acc(adresse,1,feu); - vert_cli : pilote_acc(adresse,1,feu); - jaune : pilote_acc(adresse,2,feu); - jaune_cli : pilote_acc(adresse,2,feu); - semaphore : pilote_acc(adresse+1,1,feu); - semaphore_cli : pilote_acc(adresse+1,1,feu); - carre : pilote_acc(adresse+1,2,feu); + vert : pilote_acc(adresse,1,signal); + vert_cli : pilote_acc(adresse,1,signal); + jaune : pilote_acc(adresse,2,signal); + jaune_cli : pilote_acc(adresse,2,signal); + semaphore : pilote_acc(adresse+1,1,signal); + semaphore_cli : pilote_acc(adresse+1,1,signal); + carre : pilote_acc(adresse+1,2,signal); end; end; // 51=carré + blanc if modele=51 then begin case aspect of - vert : pilote_acc(adresse,1,feu); - vert_cli : pilote_acc(adresse,1,feu); - jaune : pilote_acc(adresse,2,feu); - jaune_cli : pilote_acc(adresse,2,feu); - semaphore : pilote_acc(adresse+1,1,feu); - semaphore_cli : pilote_acc(adresse+1,1,feu); - carre : pilote_acc(adresse+1,2,feu); - blanc : pilote_acc(adresse+2,1,feu); - blanc_cli : pilote_acc(adresse+2,1,feu); + vert : pilote_acc(adresse,1,signal); + vert_cli : pilote_acc(adresse,1,signal); + jaune : pilote_acc(adresse,2,signal); + jaune_cli : pilote_acc(adresse,2,signal); + semaphore : pilote_acc(adresse+1,1,signal); + semaphore_cli : pilote_acc(adresse+1,1,signal); + carre : pilote_acc(adresse+1,2,signal); + blanc : pilote_acc(adresse+2,1,signal); + blanc_cli : pilote_acc(adresse+2,1,signal); end; end; // 52=VJR + blanc + violet if modele=52 then begin case aspect of - vert : pilote_acc(adresse,1,feu); - vert_cli : pilote_acc(adresse,1,feu); - jaune : pilote_acc(adresse,2,feu); - jaune_cli : pilote_acc(adresse,2,feu); - semaphore : pilote_acc(adresse+1,1,feu); - semaphore_cli : pilote_acc(adresse+1,1,feu); - violet : pilote_acc(adresse+2,1,feu); - blanc : pilote_acc(adresse+1,2,feu); - blanc_cli : pilote_acc(adresse+1,2,feu); + vert : pilote_acc(adresse,1,signal); + vert_cli : pilote_acc(adresse,1,signal); + jaune : pilote_acc(adresse,2,signal); + jaune_cli : pilote_acc(adresse,2,signal); + semaphore : pilote_acc(adresse+1,1,signal); + semaphore_cli : pilote_acc(adresse+1,1,signal); + violet : pilote_acc(adresse+2,1,signal); + blanc : pilote_acc(adresse+1,2,signal); + blanc_cli : pilote_acc(adresse+1,2,signal); end; end; // 71=VJR + ralentissement 30 if modele=71 then begin case aspect of - vert : pilote_acc(adresse,1,feu); - vert_cli : pilote_acc(adresse,1,feu); - jaune : pilote_acc(adresse,2,feu); - jaune_cli : pilote_acc(adresse,2,feu); - semaphore : pilote_acc(adresse+1,1,feu); - semaphore_cli : pilote_acc(adresse+1,1,feu); + vert : pilote_acc(adresse,1,signal); + vert_cli : pilote_acc(adresse,1,signal); + jaune : pilote_acc(adresse,2,signal); + jaune_cli : pilote_acc(adresse,2,signal); + semaphore : pilote_acc(adresse+1,1,signal); + semaphore_cli : pilote_acc(adresse+1,1,signal); end; - if combine=ral_30 then pilote_acc(adresse+1,2,feu); + if combine=ral_30 then pilote_acc(adresse+1,2,signal); end; // 72=VJR + carré + ralentissement 30 if modele=72 then begin case aspect of - vert : pilote_acc(adresse,1,feu); - vert_cli : pilote_acc(adresse,1,feu); - jaune : pilote_acc(adresse,2,feu); - jaune_cli : pilote_acc(adresse,2,feu); - semaphore : pilote_acc(adresse+1,1,feu); - semaphore_cli : pilote_acc(adresse+1,1,feu); - carre : pilote_acc(adresse+1,2,feu); + vert : pilote_acc(adresse,1,signal); + vert_cli : pilote_acc(adresse,1,signal); + jaune : pilote_acc(adresse,2,signal); + jaune_cli : pilote_acc(adresse,2,signal); + semaphore : pilote_acc(adresse+1,1,signal); + semaphore_cli : pilote_acc(adresse+1,1,signal); + carre : pilote_acc(adresse+1,2,signal); end; - if combine=ral_30 then pilote_acc(adresse+2,1,feu); + if combine=ral_30 then pilote_acc(adresse+2,1,signal); end; // 73=VJR + carré + ralentissement 60 if modele=73 then begin case aspect of - vert : pilote_acc(adresse,1,feu); - vert_cli : pilote_acc(adresse,1,feu); - jaune : pilote_acc(adresse,2,feu); - jaune_cli : pilote_acc(adresse,2,feu); - semaphore : pilote_acc(adresse+1,1,feu); - semaphore_cli : pilote_acc(adresse+1,1,feu); - carre : pilote_acc(adresse+1,2,feu); + vert : pilote_acc(adresse,1,signal); + vert_cli : pilote_acc(adresse,1,signal); + jaune : pilote_acc(adresse,2,signal); + jaune_cli : pilote_acc(adresse,2,signal); + semaphore : pilote_acc(adresse+1,1,signal); + semaphore_cli : pilote_acc(adresse+1,1,signal); + carre : pilote_acc(adresse+1,2,signal); end; - if combine=ral_60 then pilote_acc(adresse+2,1,feu); + if combine=ral_60 then pilote_acc(adresse+2,1,signal); end; // 91=VJR + carré + rappel 30 if modele=91 then begin case aspect of - vert : pilote_acc(adresse,1,feu); - vert_cli : pilote_acc(adresse,1,feu); - jaune : pilote_acc(adresse,2,feu); - jaune_cli : pilote_acc(adresse,2,feu); - semaphore : pilote_acc(adresse+1,1,feu); - semaphore_cli : pilote_acc(adresse+1,1,feu); - carre : pilote_acc(adresse+1,2,feu); + vert : pilote_acc(adresse,1,signal); + vert_cli : pilote_acc(adresse,1,signal); + jaune : pilote_acc(adresse,2,signal); + jaune_cli : pilote_acc(adresse,2,signal); + semaphore : pilote_acc(adresse+1,1,signal); + semaphore_cli : pilote_acc(adresse+1,1,signal); + carre : pilote_acc(adresse+1,2,signal); end; - if combine=rappel_30 then pilote_acc(adresse+2,1,feu); + if combine=rappel_30 then pilote_acc(adresse+2,1,signal); end; // 92=VJR + carré + rappel 60 if modele=92 then begin case aspect of - vert : pilote_acc(adresse,1,feu); - vert_cli : pilote_acc(adresse,1,feu); - jaune : pilote_acc(adresse,2,feu); - jaune_cli : pilote_acc(adresse,2,feu); - semaphore : pilote_acc(adresse+1,1,feu); - semaphore_cli : pilote_acc(adresse+1,1,feu); - carre : pilote_acc(adresse+1,2,feu); + vert : pilote_acc(adresse,1,signal); + vert_cli : pilote_acc(adresse,1,signal); + jaune : pilote_acc(adresse,2,signal); + jaune_cli : pilote_acc(adresse,2,signal); + semaphore : pilote_acc(adresse+1,1,signal); + semaphore_cli : pilote_acc(adresse+1,1,signal); + carre : pilote_acc(adresse+1,2,signal); end; - if combine=rappel_60 then pilote_acc(adresse+2,1,feu); + if combine=rappel_60 then pilote_acc(adresse+2,1,signal); end; // 93=VJR + carré + ral30 + rappel 30 @@ -3718,17 +3719,17 @@ begin begin if combine=-1 then //pas de sig combinée begin - if aspect=vert then pilote_acc(adresse,1,feu); - if aspect=vert_cli then pilote_acc(adresse,1,feu); - if aspect=jaune then pilote_acc(adresse,2,feu); - if aspect=jaune_cli then pilote_acc(adresse,2,feu); - if aspect=semaphore then pilote_acc(adresse+1,1,feu); - if aspect=semaphore_cli then pilote_acc(adresse+1,1,feu); - if aspect=carre then pilote_acc(adresse+1,2,feu); + if aspect=vert then pilote_acc(adresse,1,signal); + if aspect=vert_cli then pilote_acc(adresse,1,signal); + if aspect=jaune then pilote_acc(adresse,2,signal); + if aspect=jaune_cli then pilote_acc(adresse,2,signal); + if aspect=semaphore then pilote_acc(adresse+1,1,signal); + if aspect=semaphore_cli then pilote_acc(adresse+1,1,signal); + if aspect=carre then pilote_acc(adresse+1,2,signal); end; - if combine=ral_30 then pilote_acc(adresse+2,1,feu); - if combine=rappel_30 then pilote_acc(adresse+2,2,feu); - if (aspect=jaune) and (combine=rappel_30) then pilote_acc(adresse+3,1,feu); + if combine=ral_30 then pilote_acc(adresse+2,1,signal); + if combine=rappel_30 then pilote_acc(adresse+2,2,signal); + if (aspect=jaune) and (combine=rappel_30) then pilote_acc(adresse+3,1,signal); end; // 94=VJR + carré + ral60 + rappel60 @@ -3736,72 +3737,72 @@ begin begin if combine=-1 then begin - if aspect=vert then pilote_acc(adresse,1,feu); - if aspect=vert_cli then pilote_acc(adresse,1,feu); - if aspect=jaune then pilote_acc(adresse,2,feu); - if aspect=jaune_cli then pilote_acc(adresse,2,feu); - if aspect=semaphore then pilote_acc(adresse+1,1,feu); - if aspect=semaphore_cli then pilote_acc(adresse+1,1,feu); - if aspect=carre then pilote_acc(adresse+1,2,feu); + if aspect=vert then pilote_acc(adresse,1,signal); + if aspect=vert_cli then pilote_acc(adresse,1,signal); + if aspect=jaune then pilote_acc(adresse,2,signal); + if aspect=jaune_cli then pilote_acc(adresse,2,signal); + if aspect=semaphore then pilote_acc(adresse+1,1,signal); + if aspect=semaphore_cli then pilote_acc(adresse+1,1,signal); + if aspect=carre then pilote_acc(adresse+1,2,signal); end; - if combine=ral_60 then pilote_acc(adresse+2,1,feu); - if combine=rappel_60 then pilote_acc(adresse+2,2,feu); - if (aspect=jaune) and (combine=rappel_60) then pilote_acc(adresse+3,1,feu); + if combine=ral_60 then pilote_acc(adresse+2,1,signal); + if combine=rappel_60 then pilote_acc(adresse+2,2,signal); + if (aspect=jaune) and (combine=rappel_60) then pilote_acc(adresse+3,1,signal); end; // 95=VJR + carré + ral30 + rappel 60 if modele=95 then begin if combine=-1 then begin - if aspect=vert then pilote_acc(adresse,1,feu); - if aspect=vert_cli then pilote_acc(adresse,1,feu); - if aspect=jaune then pilote_acc(adresse,2,feu); - if aspect=jaune_cli then pilote_acc(adresse,2,feu); - if aspect=semaphore then pilote_acc(adresse+1,1,feu); - if aspect=semaphore_cli then pilote_acc(adresse+1,1,feu); - if aspect=carre then pilote_acc(adresse+1,2,feu); + if aspect=vert then pilote_acc(adresse,1,signal); + if aspect=vert_cli then pilote_acc(adresse,1,signal); + if aspect=jaune then pilote_acc(adresse,2,signal); + if aspect=jaune_cli then pilote_acc(adresse,2,signal); + if aspect=semaphore then pilote_acc(adresse+1,1,signal); + if aspect=semaphore_cli then pilote_acc(adresse+1,1,signal); + if aspect=carre then pilote_acc(adresse+1,2,signal); end; - if combine=ral_30 then pilote_acc(adresse+2,1,feu); - if combine=rappel_60 then pilote_acc(adresse+2,2,feu); - if (aspect=jaune) and (combine=rappel_60) then pilote_acc(adresse+3,1,feu); + if combine=ral_30 then pilote_acc(adresse+2,1,signal); + if combine=rappel_60 then pilote_acc(adresse+2,2,signal); + if (aspect=jaune) and (combine=rappel_60) then pilote_acc(adresse+3,1,signal); end; // 96=VJR + blanc + carré + ral30 + rappel30 if modele=96 then begin if combine=-1 then begin - if aspect=vert then pilote_acc(adresse,1,feu); - if aspect=vert_cli then pilote_acc(adresse,1,feu); - if aspect=jaune then pilote_acc(adresse,2,feu); - if aspect=jaune_cli then pilote_acc(adresse,2,feu); - if aspect=semaphore then pilote_acc(adresse+1,1,feu); - if aspect=semaphore_cli then pilote_acc(adresse+1,1,feu); - if aspect=carre then pilote_acc(adresse+1,2,feu); - if aspect=blanc then pilote_acc(adresse+3,2,feu); - if aspect=blanc_cli then pilote_acc(adresse+3,2,feu); + if aspect=vert then pilote_acc(adresse,1,signal); + if aspect=vert_cli then pilote_acc(adresse,1,signal); + if aspect=jaune then pilote_acc(adresse,2,signal); + if aspect=jaune_cli then pilote_acc(adresse,2,signal); + if aspect=semaphore then pilote_acc(adresse+1,1,signal); + if aspect=semaphore_cli then pilote_acc(adresse+1,1,signal); + if aspect=carre then pilote_acc(adresse+1,2,signal); + if aspect=blanc then pilote_acc(adresse+3,2,signal); + if aspect=blanc_cli then pilote_acc(adresse+3,2,signal); end; - if combine=ral_30 then pilote_acc(adresse+2,1,feu); - if combine=rappel_30 then pilote_acc(adresse+2,2,feu); - if (aspect=jaune) and (combine=rappel_30) then pilote_acc(adresse+3,1,feu); + if combine=ral_30 then pilote_acc(adresse+2,1,signal); + if combine=rappel_30 then pilote_acc(adresse+2,2,signal); + if (aspect=jaune) and (combine=rappel_30) then pilote_acc(adresse+3,1,signal); end; // 97=VJR + blanc + carré + ral30 + rappel60 if modele=97 then begin if combine=-1 then begin - if aspect=vert then pilote_acc(adresse,1,feu); - if aspect=vert_cli then pilote_acc(adresse,1,feu); - if aspect=jaune then pilote_acc(adresse,2,feu); - if aspect=jaune_cli then pilote_acc(adresse,2,feu); - if aspect=semaphore then pilote_acc(adresse+1,1,feu); - if aspect=semaphore_cli then pilote_acc(adresse+1,1,feu); - if aspect=carre then pilote_acc(adresse+1,2,feu); - if aspect=blanc then pilote_acc(adresse+3,2,feu); - if aspect=blanc_cli then pilote_acc(adresse+3,2,feu); + if aspect=vert then pilote_acc(adresse,1,signal); + if aspect=vert_cli then pilote_acc(adresse,1,signal); + if aspect=jaune then pilote_acc(adresse,2,signal); + if aspect=jaune_cli then pilote_acc(adresse,2,signal); + if aspect=semaphore then pilote_acc(adresse+1,1,signal); + if aspect=semaphore_cli then pilote_acc(adresse+1,1,signal); + if aspect=carre then pilote_acc(adresse+1,2,signal); + if aspect=blanc then pilote_acc(adresse+3,2,signal); + if aspect=blanc_cli then pilote_acc(adresse+3,2,signal); end; - if combine=ral_30 then pilote_acc(adresse+2,1,feu); - if combine=rappel_60 then pilote_acc(adresse+2,2,feu); - if (aspect=jaune) and (combine=rappel_60) then pilote_acc(adresse+3,1,feu); + if combine=ral_30 then pilote_acc(adresse+2,1,signal); + if combine=rappel_60 then pilote_acc(adresse+2,2,signal); + if (aspect=jaune) and (combine=rappel_60) then pilote_acc(adresse+3,1,signal); end; // 98=VJR + blanc + violet + ral30 + rappel30 @@ -3809,38 +3810,38 @@ begin begin if combine=-1 then begin - if aspect=vert then pilote_acc(adresse,1,feu); - if aspect=vert_cli then pilote_acc(adresse,1,feu); - if aspect=jaune then pilote_acc(adresse,2,feu); - if aspect=jaune_cli then pilote_acc(adresse,2,feu); - if aspect=semaphore then pilote_acc(adresse+1,1,feu); - if aspect=semaphore_cli then pilote_acc(adresse+1,1,feu); - if aspect=violet then pilote_acc(adresse+1,2,feu); - if aspect=blanc then pilote_acc(adresse+3,2,feu); - if aspect=blanc_cli then pilote_acc(adresse+3,2,feu); + if aspect=vert then pilote_acc(adresse,1,signal); + if aspect=vert_cli then pilote_acc(adresse,1,signal); + if aspect=jaune then pilote_acc(adresse,2,signal); + if aspect=jaune_cli then pilote_acc(adresse,2,signal); + if aspect=semaphore then pilote_acc(adresse+1,1,signal); + if aspect=semaphore_cli then pilote_acc(adresse+1,1,signal); + if aspect=violet then pilote_acc(adresse+1,2,signal); + if aspect=blanc then pilote_acc(adresse+3,2,signal); + if aspect=blanc_cli then pilote_acc(adresse+3,2,signal); end; - if (aspect=jaune) and (combine=rappel_30) then pilote_acc(adresse+3,1,feu); - if combine=ral_30 then pilote_acc(adresse+2,1,feu); - if combine=rappel_30 then pilote_acc(adresse+2,2,feu); + if (aspect=jaune) and (combine=rappel_30) then pilote_acc(adresse+3,1,signal); + if combine=ral_30 then pilote_acc(adresse+2,1,signal); + if combine=rappel_30 then pilote_acc(adresse+2,2,signal); end; // 99=VJR + blanc + violet + ral30 + rappel60 if modele=99 then begin if combine=-1 then begin - if aspect=vert then pilote_acc(adresse,1,feu); - if aspect=vert_cli then pilote_acc(adresse,1,feu); - if aspect=jaune then pilote_acc(adresse,2,feu); - if aspect=jaune_cli then pilote_acc(adresse,2,feu); - if aspect=semaphore then pilote_acc(adresse+1,1,feu); - if aspect=semaphore_cli then pilote_acc(adresse+1,1,feu); - if aspect=violet then pilote_acc(adresse+1,2,feu); - if aspect=blanc then pilote_acc(adresse+3,2,feu); - if aspect=blanc_cli then pilote_acc(adresse+3,2,feu); + if aspect=vert then pilote_acc(adresse,1,signal); + if aspect=vert_cli then pilote_acc(adresse,1,signal); + if aspect=jaune then pilote_acc(adresse,2,signal); + if aspect=jaune_cli then pilote_acc(adresse,2,signal); + if aspect=semaphore then pilote_acc(adresse+1,1,signal); + if aspect=semaphore_cli then pilote_acc(adresse+1,1,signal); + if aspect=violet then pilote_acc(adresse+1,2,signal); + if aspect=blanc then pilote_acc(adresse+3,2,signal); + if aspect=blanc_cli then pilote_acc(adresse+3,2,signal); end; - if (aspect=jaune) and (combine=rappel_60) then pilote_acc(adresse+3,1,feu); - if combine=ral_30 then pilote_acc(adresse+2,1,feu); - if combine=rappel_60 then pilote_acc(adresse+2,2,feu); + if (aspect=jaune) and (combine=rappel_60) then pilote_acc(adresse+3,1,signal); + if combine=ral_30 then pilote_acc(adresse+2,1,signal); + if combine=rappel_60 then pilote_acc(adresse+2,2,signal); end; end; @@ -3849,212 +3850,212 @@ begin begin if modele=2 then // 2 feux begin - if (aspect=blanc) or (aspect=blanc_cli) then pilote_acc(adresse,1,feu); - if aspect=violet then pilote_acc(adresse,2,feu); + if (aspect=blanc) or (aspect=blanc_cli) then pilote_acc(adresse,1,signal); + if aspect=violet then pilote_acc(adresse,2,signal); end; if modele=3 then // 3 feux begin - if aspect=vert then pilote_acc(adresse,1,feu); - if aspect=vert_cli then pilote_acc(adresse,1,feu); + if aspect=vert then pilote_acc(adresse,1,signal); + if aspect=vert_cli then pilote_acc(adresse,1,signal); - if aspect=semaphore then pilote_acc(adresse,2,feu); - if aspect=semaphore_cli then pilote_acc(adresse,2,feu); + if aspect=semaphore then pilote_acc(adresse,2,signal); + if aspect=semaphore_cli then pilote_acc(adresse,2,signal); - if aspect=jaune then pilote_acc(adresse+1,1,feu); - if aspect=jaune_cli then pilote_acc(adresse+1,1,feu); + if aspect=jaune then pilote_acc(adresse+1,1,signal); + if aspect=jaune_cli then pilote_acc(adresse+1,1,signal); end; if modele=4 then begin case aspect of - vert,vert_cli : begin pilote_acc(adresse+1,1,feu);pilote_acc(adresse+2,1,feu);end; - jaune,jaune_cli : begin pilote_acc(adresse,1,feu);pilote_acc(adresse+2,1,feu);end; - semaphore,semaphore_cli: begin pilote_acc(adresse,2,feu);pilote_acc(adresse+2,1,feu);end; - carre : begin pilote_acc(adresse,2,feu);pilote_acc(adresse+1,2,feu);end; + vert,vert_cli : begin pilote_acc(adresse+1,1,signal);pilote_acc(adresse+2,1,signal);end; + jaune,jaune_cli : begin pilote_acc(adresse,1,signal);pilote_acc(adresse+2,1,signal);end; + semaphore,semaphore_cli: begin pilote_acc(adresse,2,signal);pilote_acc(adresse+2,1,signal);end; + carre : begin pilote_acc(adresse,2,signal);pilote_acc(adresse+1,2,signal);end; end; end; // 51=carré + blanc if modele=51 then begin case aspect of - vert,vert_cli : begin pilote_acc(adresse+1,1,feu);pilote_acc(adresse+2,2,feu);end; - jaune,jaune_cli : begin pilote_acc(adresse,1,feu);pilote_acc(adresse+2,2,feu);end; - semaphore,semaphore_cli: begin pilote_acc(adresse,2,feu);pilote_acc(adresse+2,2,feu);end; - carre : begin pilote_acc(adresse,2,feu);pilote_acc(adresse+1,2,feu);end; - blanc,blanc_cli : pilote_acc(adresse+2,1,feu); + vert,vert_cli : begin pilote_acc(adresse+1,1,signal);pilote_acc(adresse+2,2,signal);end; + jaune,jaune_cli : begin pilote_acc(adresse,1,signal);pilote_acc(adresse+2,2,signal);end; + semaphore,semaphore_cli: begin pilote_acc(adresse,2,signal);pilote_acc(adresse+2,2,signal);end; + carre : begin pilote_acc(adresse,2,signal);pilote_acc(adresse+1,2,signal);end; + blanc,blanc_cli : pilote_acc(adresse+2,1,signal); end; end; // 52=VJR + blanc + violet if modele=52 then begin case aspect of - vert,vert_cli : begin pilote_acc(adresse+1,1,feu);pilote_acc(adresse+2,2,feu);end; - jaune,jaune_cli : begin pilote_acc(adresse,1,feu);pilote_acc(adresse+2,2,feu);end; - semaphore,semaphore_cli: begin pilote_acc(adresse,2,feu);pilote_acc(adresse+2,2,feu);end; - blanc,blanc_cli : pilote_acc(adresse+1,2,feu); - violet : pilote_acc(adresse+2,1,feu); + vert,vert_cli : begin pilote_acc(adresse+1,1,signal);pilote_acc(adresse+2,2,signal);end; + jaune,jaune_cli : begin pilote_acc(adresse,1,signal);pilote_acc(adresse+2,2,signal);end; + semaphore,semaphore_cli: begin pilote_acc(adresse,2,signal);pilote_acc(adresse+2,2,signal);end; + blanc,blanc_cli : pilote_acc(adresse+1,2,signal); + violet : pilote_acc(adresse+2,1,signal); end; end; // 71=VJR + ralentissement 30 if modele=71 then begin case aspect of - vert,vert_cli : pilote_acc(adresse+1,1,feu); - jaune,jaune_cli : pilote_acc(adresse,1,feu); - semaphore,semaphore_cli: pilote_acc(adresse,2,feu); + vert,vert_cli : pilote_acc(adresse+1,1,signal); + jaune,jaune_cli : pilote_acc(adresse,1,signal); + semaphore,semaphore_cli: pilote_acc(adresse,2,signal); end; - if combine=ral_30 then pilote_acc(adresse+1,2,feu); + if combine=ral_30 then pilote_acc(adresse+1,2,signal); end; // 72=VJR + carré + ralentissement 30 if modele=72 then begin case aspect of - vert,vert_cli : begin pilote_acc(adresse+1,1,feu);pilote_acc(adresse+2,2,feu);end; - jaune,jaune_cli : begin pilote_acc(adresse,1,feu);pilote_acc(adresse+2,2,feu);end; - semaphore,semaphore_cli: begin pilote_acc(adresse,2,feu);pilote_acc(adresse+2,2,feu);end; - carre : begin pilote_acc(adresse,2,feu);pilote_acc(adresse+1,2,feu);end; + vert,vert_cli : begin pilote_acc(adresse+1,1,signal);pilote_acc(adresse+2,2,signal);end; + jaune,jaune_cli : begin pilote_acc(adresse,1,signal);pilote_acc(adresse+2,2,signal);end; + semaphore,semaphore_cli: begin pilote_acc(adresse,2,signal);pilote_acc(adresse+2,2,signal);end; + carre : begin pilote_acc(adresse,2,signal);pilote_acc(adresse+1,2,signal);end; end; - if combine=ral_30 then pilote_acc(adresse+2,1,feu); //pilote_acc(adresse+2,2,feu); impossible en lenz + if combine=ral_30 then pilote_acc(adresse+2,1,signal); //pilote_acc(adresse+2,2,signal); impossible en lenz end; // 73=VJR + carré + ralentissement 60 if modele=73 then begin case aspect of - vert,vert_cli : begin pilote_acc(adresse+1,1,feu);pilote_acc(adresse+2,2,feu);end; - jaune,jaune_cli : begin pilote_acc(adresse,1,feu);pilote_acc(adresse+2,2,feu);end; - semaphore,semaphore_cli: begin pilote_acc(adresse,2,feu);pilote_acc(adresse+2,2,feu);end; - carre : begin pilote_acc(adresse,2,feu);pilote_acc(adresse+1,2,feu);end; + vert,vert_cli : begin pilote_acc(adresse+1,1,signal);pilote_acc(adresse+2,2,signal);end; + jaune,jaune_cli : begin pilote_acc(adresse,1,signal);pilote_acc(adresse+2,2,signal);end; + semaphore,semaphore_cli: begin pilote_acc(adresse,2,signal);pilote_acc(adresse+2,2,signal);end; + carre : begin pilote_acc(adresse,2,signal);pilote_acc(adresse+1,2,signal);end; end; - if combine=ral_60 then pilote_acc(adresse+2,1,feu); //pilote_acc(adresse+2,2,feu); impossible en lenz + if combine=ral_60 then pilote_acc(adresse+2,1,signal); //pilote_acc(adresse+2,2,signal); impossible en lenz end; // 91=VJR + carré + rappel 30 if modele=91 then begin case aspect of - vert,vert_cli : begin pilote_acc(adresse+1,1,feu);pilote_acc(adresse+2,2,feu);end; - jaune,jaune_cli : begin pilote_acc(adresse,1,feu);pilote_acc(adresse+2,2,feu);end; - semaphore,semaphore_cli: begin pilote_acc(adresse,2,feu);pilote_acc(adresse+2,2,feu);end; - carre : begin pilote_acc(adresse,2,feu);pilote_acc(adresse+1,2,feu);end; + vert,vert_cli : begin pilote_acc(adresse+1,1,signal);pilote_acc(adresse+2,2,signal);end; + jaune,jaune_cli : begin pilote_acc(adresse,1,signal);pilote_acc(adresse+2,2,signal);end; + semaphore,semaphore_cli: begin pilote_acc(adresse,2,signal);pilote_acc(adresse+2,2,signal);end; + carre : begin pilote_acc(adresse,2,signal);pilote_acc(adresse+1,2,signal);end; end; - if combine=rappel_30 then pilote_acc(adresse+2,1,feu);//pilote_acc(adresse+2,2,feu); impossible en lenz + if combine=rappel_30 then pilote_acc(adresse+2,1,signal);//pilote_acc(adresse+2,2,signal); impossible en lenz end; // 92=VJR + carré + rappel 60 if modele=92 then begin case aspect of - vert,vert_cli : begin pilote_acc(adresse+1,1,feu);pilote_acc(adresse+2,2,feu);end; - jaune,jaune_cli : begin pilote_acc(adresse,1,feu);pilote_acc(adresse+2,2,feu);end; - semaphore,semaphore_cli: begin pilote_acc(adresse,2,feu);pilote_acc(adresse+2,2,feu);end; - carre : begin pilote_acc(adresse,2,feu);pilote_acc(adresse+1,2,feu);end; + vert,vert_cli : begin pilote_acc(adresse+1,1,signal);pilote_acc(adresse+2,2,signal);end; + jaune,jaune_cli : begin pilote_acc(adresse,1,signal);pilote_acc(adresse+2,2,signal);end; + semaphore,semaphore_cli: begin pilote_acc(adresse,2,signal);pilote_acc(adresse+2,2,signal);end; + carre : begin pilote_acc(adresse,2,signal);pilote_acc(adresse+1,2,signal);end; end; - if combine=rappel_60 then pilote_acc(adresse+2,1,feu);//pilote_acc(adresse+2,2,feu); impossible en lenz + if combine=rappel_60 then pilote_acc(adresse+2,1,signal);//pilote_acc(adresse+2,2,signal); impossible en lenz end; // 93=VJR + carré + ral30 + rappel 30 if modele=93 then begin case aspect of - vert,vert_cli : begin pilote_acc(adresse+1,1,feu);pilote_acc(adresse+3,1,feu);end; - jaune,jaune_cli : begin pilote_acc(adresse,1,feu);pilote_acc(adresse+3,1,feu);end; - semaphore,semaphore_cli: begin pilote_acc(adresse,2,feu);pilote_acc(adresse+3,1,feu);end; - carre : begin pilote_acc(adresse,2,feu);pilote_acc(adresse+1,2,feu);end; + vert,vert_cli : begin pilote_acc(adresse+1,1,signal);pilote_acc(adresse+3,1,signal);end; + jaune,jaune_cli : begin pilote_acc(adresse,1,signal);pilote_acc(adresse+3,1,signal);end; + semaphore,semaphore_cli: begin pilote_acc(adresse,2,signal);pilote_acc(adresse+3,1,signal);end; + carre : begin pilote_acc(adresse,2,signal);pilote_acc(adresse+1,2,signal);end; end; - if combine=ral_30 then begin pilote_acc(adresse+2,1,feu);pilote_acc(adresse+3,1,feu);end; - if combine=rappel_30 then begin pilote_acc(adresse+2,2,feu);pilote_acc(adresse+3,1,feu);end; - if ((aspect=jaune) or (aspect=jaune_cli)) and (combine=rappel_30) then begin pilote_acc(adresse,1,feu);pilote_acc(adresse+2,2,feu);pilote_acc(adresse+3,1,feu);end; + if combine=ral_30 then begin pilote_acc(adresse+2,1,signal);pilote_acc(adresse+3,1,signal);end; + if combine=rappel_30 then begin pilote_acc(adresse+2,2,signal);pilote_acc(adresse+3,1,signal);end; + if ((aspect=jaune) or (aspect=jaune_cli)) and (combine=rappel_30) then begin pilote_acc(adresse,1,signal);pilote_acc(adresse+2,2,signal);pilote_acc(adresse+3,1,signal);end; end; // 94=VJR + carré + ral60 + rappel60 if modele=94 then begin case aspect of - vert,vert_cli : begin pilote_acc(adresse+1,1,feu);pilote_acc(adresse+3,1,feu);end; - jaune,jaune_cli : begin pilote_acc(adresse,1,feu);pilote_acc(adresse+3,1,feu);end; - semaphore,semaphore_cli: begin pilote_acc(adresse,2,feu);pilote_acc(adresse+3,1,feu);end; - carre : begin pilote_acc(adresse,2,feu);pilote_acc(adresse+1,2,feu);end; + vert,vert_cli : begin pilote_acc(adresse+1,1,signal);pilote_acc(adresse+3,1,signal);end; + jaune,jaune_cli : begin pilote_acc(adresse,1,signal);pilote_acc(adresse+3,1,signal);end; + semaphore,semaphore_cli: begin pilote_acc(adresse,2,signal);pilote_acc(adresse+3,1,signal);end; + carre : begin pilote_acc(adresse,2,signal);pilote_acc(adresse+1,2,signal);end; end; - if combine=ral_60 then begin pilote_acc(adresse+2,1,feu);pilote_acc(adresse+3,1,feu);end; - if combine=rappel_60 then begin pilote_acc(adresse+2,2,feu);pilote_acc(adresse+3,1,feu);end; - if ((aspect=jaune) or (aspect=jaune_cli)) and (combine=rappel_60) then begin pilote_acc(adresse,1,feu);pilote_acc(adresse+2,2,feu);pilote_acc(adresse+3,1,feu);end; + if combine=ral_60 then begin pilote_acc(adresse+2,1,signal);pilote_acc(adresse+3,1,signal);end; + if combine=rappel_60 then begin pilote_acc(adresse+2,2,signal);pilote_acc(adresse+3,1,signal);end; + if ((aspect=jaune) or (aspect=jaune_cli)) and (combine=rappel_60) then begin pilote_acc(adresse,1,signal);pilote_acc(adresse+2,2,signal);pilote_acc(adresse+3,1,signal);end; end; // 95=VJR + carré + ral30 + rappel 60 if modele=95 then begin case aspect of - vert,vert_cli : begin pilote_acc(adresse+1,1,feu);pilote_acc(adresse+3,1,feu);end; - jaune,jaune_cli : begin pilote_acc(adresse,1,feu);pilote_acc(adresse+3,1,feu);end; - semaphore,semaphore_cli: begin pilote_acc(adresse,2,feu);pilote_acc(adresse+3,1,feu);end; - carre : begin pilote_acc(adresse,2,feu);pilote_acc(adresse+1,2,feu);end; + vert,vert_cli : begin pilote_acc(adresse+1,1,signal);pilote_acc(adresse+3,1,signal);end; + jaune,jaune_cli : begin pilote_acc(adresse,1,signal);pilote_acc(adresse+3,1,signal);end; + semaphore,semaphore_cli: begin pilote_acc(adresse,2,signal);pilote_acc(adresse+3,1,signal);end; + carre : begin pilote_acc(adresse,2,signal);pilote_acc(adresse+1,2,signal);end; end; - if combine=ral_30 then begin pilote_acc(adresse+2,1,feu);pilote_acc(adresse+3,1,feu);end; - if combine=rappel_60 then begin pilote_acc(adresse+2,2,feu);pilote_acc(adresse+3,1,feu);end; + if combine=ral_30 then begin pilote_acc(adresse+2,1,signal);pilote_acc(adresse+3,1,signal);end; + if combine=rappel_60 then begin pilote_acc(adresse+2,2,signal);pilote_acc(adresse+3,1,signal);end; if ((aspect=jaune) or (aspect=jaune_cli)) and (combine=rappel_60) - then begin pilote_acc(adresse,1,feu);pilote_acc(adresse+2,2,feu);pilote_acc(adresse+3,1,feu);end; + then begin pilote_acc(adresse,1,signal);pilote_acc(adresse+2,2,signal);pilote_acc(adresse+3,1,signal);end; end; // 96=VJR + blanc + carré + ral30 + rappel30 if modele=96 then begin case aspect of - vert,vert_cli : begin pilote_acc(adresse+1,1,feu);pilote_acc(adresse+3,2,feu);end; - jaune,jaune_cli : begin pilote_acc(adresse,1,feu);pilote_acc(adresse+3,2,feu);end; - semaphore,semaphore_cli: begin pilote_acc(adresse,2,feu);pilote_acc(adresse+3,2,feu);end; - carre : begin pilote_acc(adresse,2,feu);pilote_acc(adresse+1,2,feu);end; - blanc,blanc_cli : pilote_acc(adresse+3,1,feu); + vert,vert_cli : begin pilote_acc(adresse+1,1,signal);pilote_acc(adresse+3,2,signal);end; + jaune,jaune_cli : begin pilote_acc(adresse,1,signal);pilote_acc(adresse+3,2,signal);end; + semaphore,semaphore_cli: begin pilote_acc(adresse,2,signal);pilote_acc(adresse+3,2,signal);end; + carre : begin pilote_acc(adresse,2,signal);pilote_acc(adresse+1,2,signal);end; + blanc,blanc_cli : pilote_acc(adresse+3,1,signal); end; - if combine=ral_30 then begin pilote_acc(adresse+2,1,feu);pilote_acc(adresse+3,2,feu);end; - if combine=rappel_30 then begin pilote_acc(adresse+2,2,feu);pilote_acc(adresse+3,2,feu);end; + if combine=ral_30 then begin pilote_acc(adresse+2,1,signal);pilote_acc(adresse+3,2,signal);end; + if combine=rappel_30 then begin pilote_acc(adresse+2,2,signal);pilote_acc(adresse+3,2,signal);end; if ((aspect=jaune) or (aspect=jaune_cli)) and (combine=rappel_30) - then begin pilote_acc(adresse,1,feu);pilote_acc(adresse+2,2,feu);pilote_acc(adresse+3,2,feu);end; + then begin pilote_acc(adresse,1,signal);pilote_acc(adresse+2,2,signal);pilote_acc(adresse+3,2,signal);end; end; // 97=VJR + blanc + carré + ral30 + rappel60 if modele=97 then begin case aspect of - vert,vert_cli : begin pilote_acc(adresse+1,1,feu);pilote_acc(adresse+3,2,feu);end; - jaune,jaune_cli : begin pilote_acc(adresse,1,feu);pilote_acc(adresse+3,2,feu);end; - semaphore,semaphore_cli: begin pilote_acc(adresse,2,feu);pilote_acc(adresse+3,2,feu);end; - carre : begin pilote_acc(adresse,2,feu);pilote_acc(adresse+1,2,feu);end; - blanc,blanc_cli : pilote_acc(adresse+3,1,feu); + vert,vert_cli : begin pilote_acc(adresse+1,1,signal);pilote_acc(adresse+3,2,signal);end; + jaune,jaune_cli : begin pilote_acc(adresse,1,signal);pilote_acc(adresse+3,2,signal);end; + semaphore,semaphore_cli: begin pilote_acc(adresse,2,signal);pilote_acc(adresse+3,2,signal);end; + carre : begin pilote_acc(adresse,2,signal);pilote_acc(adresse+1,2,signal);end; + blanc,blanc_cli : pilote_acc(adresse+3,1,signal); end; - if combine=ral_30 then begin pilote_acc(adresse+2,1,feu);pilote_acc(adresse+3,2,feu);end; - if combine=rappel_60 then begin pilote_acc(adresse+2,2,feu);pilote_acc(adresse+3,2,feu);end; + if combine=ral_30 then begin pilote_acc(adresse+2,1,signal);pilote_acc(adresse+3,2,signal);end; + if combine=rappel_60 then begin pilote_acc(adresse+2,2,signal);pilote_acc(adresse+3,2,signal);end; if ((aspect=jaune) or (aspect=jaune_cli)) and (combine=rappel_60) - then begin pilote_acc(adresse,1,feu);pilote_acc(adresse+2,2,feu);pilote_acc(adresse+3,2,feu);end; + then begin pilote_acc(adresse,1,signal);pilote_acc(adresse+2,2,signal);pilote_acc(adresse+3,2,signal);end; end; // 98=VJR + blanc + violet + ral30 + rappel30 if modele=98 then begin case aspect of - vert,vert_cli : begin pilote_acc(adresse+1,1,feu);pilote_acc(adresse+3,2,feu);end; - jaune,jaune_cli : begin pilote_acc(adresse,1,feu);pilote_acc(adresse+3,2,feu);end; - semaphore,semaphore_cli: begin pilote_acc(adresse,2,feu);pilote_acc(adresse+3,2,feu);end; - blanc,blanc_cli : pilote_acc(adresse+1,2,feu); - violet : pilote_acc(adresse+3,1,feu); + vert,vert_cli : begin pilote_acc(adresse+1,1,signal);pilote_acc(adresse+3,2,signal);end; + jaune,jaune_cli : begin pilote_acc(adresse,1,signal);pilote_acc(adresse+3,2,signal);end; + semaphore,semaphore_cli: begin pilote_acc(adresse,2,signal);pilote_acc(adresse+3,2,signal);end; + blanc,blanc_cli : pilote_acc(adresse+1,2,signal); + violet : pilote_acc(adresse+3,1,signal); end; - if combine=ral_30 then begin pilote_acc(adresse+2,1,feu);pilote_acc(adresse+3,2,feu);end; - if combine=rappel_30 then begin pilote_acc(adresse+2,2,feu);pilote_acc(adresse+3,2,feu);end; + if combine=ral_30 then begin pilote_acc(adresse+2,1,signal);pilote_acc(adresse+3,2,signal);end; + if combine=rappel_30 then begin pilote_acc(adresse+2,2,signal);pilote_acc(adresse+3,2,signal);end; if ((aspect=jaune) or (aspect=jaune_cli)) and (combine=rappel_30) - then begin pilote_acc(adresse,1,feu);pilote_acc(adresse+2,2,feu);pilote_acc(adresse+3,2,feu);end; + then begin pilote_acc(adresse,1,signal);pilote_acc(adresse+2,2,signal);pilote_acc(adresse+3,2,signal);end; end; // 99=VJR + blanc + violet + ral30 + rappel60 if modele=99 then begin case aspect of - vert,vert_cli : begin pilote_acc(adresse+1,1,feu);pilote_acc(adresse+3,2,feu);end; - jaune,jaune_cli : begin pilote_acc(adresse,1,feu);pilote_acc(adresse+3,2,feu);end; - semaphore,semaphore_cli: begin pilote_acc(adresse,2,feu);pilote_acc(adresse+3,2,feu);end; - blanc,blanc_cli : pilote_acc(adresse+1,2,feu); - violet : pilote_acc(adresse+3,1,feu); + vert,vert_cli : begin pilote_acc(adresse+1,1,signal);pilote_acc(adresse+3,2,signal);end; + jaune,jaune_cli : begin pilote_acc(adresse,1,signal);pilote_acc(adresse+3,2,signal);end; + semaphore,semaphore_cli: begin pilote_acc(adresse,2,signal);pilote_acc(adresse+3,2,signal);end; + blanc,blanc_cli : pilote_acc(adresse+1,2,signal); + violet : pilote_acc(adresse+3,1,signal); end; - if combine=ral_30 then begin pilote_acc(adresse+2,1,feu);pilote_acc(adresse+3,2,feu);end; - if combine=rappel_60 then begin pilote_acc(adresse+2,2,feu);pilote_acc(adresse+3,2,feu);end; + if combine=ral_30 then begin pilote_acc(adresse+2,1,signal);pilote_acc(adresse+3,2,signal);end; + if combine=rappel_60 then begin pilote_acc(adresse+2,2,signal);pilote_acc(adresse+3,2,signal);end; if ((aspect=jaune) or (aspect=jaune_cli)) and (combine=rappel_60) - then begin pilote_acc(adresse,1,feu);pilote_acc(adresse+2,2,feu);pilote_acc(adresse+3,2,feu);end; + then begin pilote_acc(adresse,1,signal);pilote_acc(adresse+2,2,signal);pilote_acc(adresse+3,2,signal);end; end; end; end; @@ -4069,9 +4070,9 @@ var na,code,aspect,combine : integer; s : string; begin i:=Index_Signal(adresse); - if (feux[i].AncienEtat<>feux[i].EtatSignal) then + if (Signaux[i].AncienEtat<>Signaux[i].EtatSignal) then begin - code:=feux[i].EtatSignal; + code:=Signaux[i].EtatSignal; code_to_aspect(code,aspect,combine); combine:=code and $01c0; s:='Signal b_models: ad'+IntToSTR(adresse)+'='+chaine_signal(adresse); @@ -4082,94 +4083,94 @@ begin s:='Tick='+IntToSTR(tick)+' Signal '+IntToSTR(adresse)+'='+chaine_signal(adresse); AfficheDebug(s,clyellow); end; - na:=feux[i].Na; // nombre d'adresses + na:=Signaux[i].Na; // nombre d'adresses // doc VB 5 lampes + chiffre + V // marqué recht et Afb dans la doc !! afb:=1; // afb rouge recht:=2; // recht vert if aspect=rouge then begin - pilote_acc(adresse,afb,feu); + pilote_acc(adresse,afb,signal); if (na>=4) then begin // chiffre allume éteint - if testbit(combine,chiffre) then pilote_acc(adresse+3,recht,feu) else pilote_acc(adresse+3,afb,feu) + if testbit(combine,chiffre) then pilote_acc(adresse+3,recht,signal) else pilote_acc(adresse+3,afb,signal) end; if (na>=5) then begin // chevron - if testbit(combine,chevron) then pilote_acc(adresse+4,recht,feu) else pilote_acc(adresse+4,afb,feu) + if testbit(combine,chevron) then pilote_acc(adresse+4,recht,signal) else pilote_acc(adresse+4,afb,signal) end; end; if aspect=vert then begin - pilote_acc(adresse,recht,feu); + pilote_acc(adresse,recht,signal); if (na>=4) then begin // chiffre - if testbit(combine,chiffre) then pilote_acc(adresse+3,recht,feu) else pilote_acc(adresse+3,afb,feu) + if testbit(combine,chiffre) then pilote_acc(adresse+3,recht,signal) else pilote_acc(adresse+3,afb,signal) end; if (na>=5) then begin // chevron - if testbit(combine,chevron) then pilote_acc(adresse+4,recht,feu) else pilote_acc(adresse+4,afb,feu) + if testbit(combine,chevron) then pilote_acc(adresse+4,recht,signal) else pilote_acc(adresse+4,afb,signal) end; end; if na=1 then exit; if aspect=deux_jaunes then begin - pilote_acc(adresse+1,afb,feu); + pilote_acc(adresse+1,afb,signal); if (na>=4) then begin // chiffre - if testbit(combine,chiffre) then pilote_acc(adresse+3,recht,feu) else pilote_acc(adresse+3,afb,feu) + if testbit(combine,chiffre) then pilote_acc(adresse+3,recht,signal) else pilote_acc(adresse+3,afb,signal) end; if (na>=5) then begin // chevron - if testbit(combine,chevron) then pilote_acc(adresse+4,recht,feu) else pilote_acc(adresse+4,afb,feu) + if testbit(combine,chevron) then pilote_acc(adresse+4,recht,signal) else pilote_acc(adresse+4,afb,signal) end; end; if aspect=vert_jaune_H then begin - pilote_acc(adresse+1,recht,feu); + pilote_acc(adresse+1,recht,signal); if (na>=4) then begin // chiffre - if testbit(combine,chiffre) then pilote_acc(adresse+3,recht,feu) else pilote_acc(adresse+3,afb,feu) + if testbit(combine,chiffre) then pilote_acc(adresse+3,recht,signal) else pilote_acc(adresse+3,afb,signal) end; if (na>=5) then begin // chevron - if testbit(combine,chevron) then pilote_acc(adresse+4,recht,feu) else pilote_acc(adresse+4,afb,feu) + if testbit(combine,chevron) then pilote_acc(adresse+4,recht,signal) else pilote_acc(adresse+4,afb,signal) end; end; if aspect=vert_jaune_V then begin - pilote_acc(adresse+2,afb,feu) ; + pilote_acc(adresse+2,afb,signal) ; if (na>=4) then begin // chiffre - if testbit(combine,chiffre) then pilote_acc(adresse+3,recht,feu) else pilote_acc(adresse+3,afb,feu) + if testbit(combine,chiffre) then pilote_acc(adresse+3,recht,signal) else pilote_acc(adresse+3,afb,signal) end; if (na>=5) then begin // chevron - if testbit(combine,chevron) then pilote_acc(adresse+4,recht,feu) else pilote_acc(adresse+4,afb,feu) + if testbit(combine,chevron) then pilote_acc(adresse+4,recht,signal) else pilote_acc(adresse+4,afb,signal) end; end; if aspect=rouge_blanc then begin - pilote_acc(adresse+2,recht,feu); + pilote_acc(adresse+2,recht,signal); if (na>=4) then begin // chiffre - if testbit(combine,chiffre) then pilote_acc(adresse+3,recht,feu) else pilote_acc(adresse+3,afb,feu) + if testbit(combine,chiffre) then pilote_acc(adresse+3,recht,signal) else pilote_acc(adresse+3,afb,signal) end; if (na>=5) then begin // chevron - if testbit(combine,chevron) then pilote_acc(adresse+4,recht,feu) else pilote_acc(adresse+4,afb,feu) + if testbit(combine,chevron) then pilote_acc(adresse+4,recht,signal) else pilote_acc(adresse+4,afb,signal) end; end; end; @@ -4189,9 +4190,9 @@ var code,aspect,combine : integer; s : string; begin i:=Index_Signal(adresse); - if (feux[i].AncienEtat<>feux[i].EtatSignal) then //; && (stop_cmd==FALSE)) + if (Signaux[i].AncienEtat<>Signaux[i].EtatSignal) then //; && (stop_cmd==FALSE)) begin - code:=feux[i].EtatSignal; + code:=Signaux[i].EtatSignal; code_to_aspect(code,aspect,combine); s:='Signal LDT_NMBS: ad'+IntToSTR(adresse)+'='+chaine_signal(adresse); if traceSign then affiche(s,clOrange); @@ -4201,10 +4202,10 @@ begin s:='Tick='+IntToSTR(tick)+' Signal '+IntToSTR(adresse)+'='+chaine_signal(adresse); AfficheDebug(s,clyellow); end; - if aspect=vert then begin pilote_acc(adresse,2,feu);end; - if aspect=semaphore then begin pilote_acc(adresse,1,feu);end; - if aspect=deux_jaunes then begin pilote_acc(adresse+1,2,feu);end; - if aspect=vert_jaune_H then begin pilote_acc(adresse+1,1,feu);end; + if aspect=vert then begin pilote_acc(adresse,2,signal);end; + if aspect=semaphore then begin pilote_acc(adresse,1,signal);end; + if aspect=deux_jaunes then begin pilote_acc(adresse+1,2,signal);end; + if aspect=vert_jaune_H then begin pilote_acc(adresse+1,1,signal);end; // a voir!!! end; end; @@ -4224,9 +4225,9 @@ var code,aspect,combine,mode : integer; s : string; begin i:=Index_Signal(adresse); - if (feux[i].AncienEtat<>feux[i].EtatSignal) then //; && (stop_cmd==FALSE)) + if (Signaux[i].AncienEtat<>Signaux[i].EtatSignal) then //; && (stop_cmd==FALSE)) begin - code:=feux[i].EtatSignal; + code:=Signaux[i].EtatSignal; code_to_aspect(code,aspect,combine); s:='Signal LDT: ad'+IntToSTR(adresse)+'='+chaine_signal(NbDecodeurdeBase+NbreDecPers-1); if traceSign then affiche(s,clOrange); @@ -4245,30 +4246,30 @@ begin // sauf pour le sémaphore, vert et jaune fixe 1 : // mode 1: feux 2 3 & 4 feux begin - if (aspect=semaphore) then pilote_acc(adresse,1,feu); - if (aspect=vert) then pilote_acc(adresse,2,feu); - if (aspect=carre) then pilote_acc(adresse+1,1,feu); - if (aspect=jaune) then pilote_acc(adresse+1,2,feu); + if (aspect=semaphore) then pilote_acc(adresse,1,signal); + if (aspect=vert) then pilote_acc(adresse,2,signal); + if (aspect=carre) then pilote_acc(adresse+1,1,signal); + if (aspect=jaune) then pilote_acc(adresse+1,2,signal); end; 2 : // mode 2: plus de 4 feux begin - if (aspect=semaphore) then begin pilote_acc(adresse+2,1,feu);sleep(tempo_Feu);pilote_acc(adresse,1,feu);end; - if (aspect=vert) then begin pilote_acc(adresse+2,1,feu);sleep(tempo_Feu);pilote_acc(adresse,2,feu);end; - if (aspect=carre) then begin pilote_acc(adresse+2,1,feu);sleep(tempo_Feu);pilote_acc(adresse+1,1,feu);end; - if (aspect=jaune) then begin pilote_acc(adresse+2,1,feu);sleep(tempo_Feu);pilote_acc(adresse+1,2,feu);end; - if (aspect=violet) then begin pilote_acc(adresse+2,2,feu);sleep(tempo_Feu);pilote_acc(adresse,1,feu);end; - if (aspect=blanc) then begin pilote_acc(adresse+2,2,feu);sleep(tempo_Feu);pilote_acc(adresse,2,feu);end; - if (aspect=semaphore) then begin pilote_acc(adresse+2,2,feu);sleep(tempo_Feu);pilote_acc(adresse+1,1,feu);end; - if (combine=aspect8) then begin pilote_acc(adresse+2,2,feu);sleep(tempo_Feu);pilote_acc(adresse+1,2,feu);end; + if (aspect=semaphore) then begin pilote_acc(adresse+2,1,signal);sleep(tempo_Feu);pilote_acc(adresse,1,signal);end; + if (aspect=vert) then begin pilote_acc(adresse+2,1,signal);sleep(tempo_Feu);pilote_acc(adresse,2,signal);end; + if (aspect=carre) then begin pilote_acc(adresse+2,1,signal);sleep(tempo_Feu);pilote_acc(adresse+1,1,signal);end; + if (aspect=jaune) then begin pilote_acc(adresse+2,1,signal);sleep(tempo_Feu);pilote_acc(adresse+1,2,signal);end; + if (aspect=violet) then begin pilote_acc(adresse+2,2,signal);sleep(tempo_Feu);pilote_acc(adresse,1,signal);end; + if (aspect=blanc) then begin pilote_acc(adresse+2,2,signal);sleep(tempo_Feu);pilote_acc(adresse,2,signal);end; + if (aspect=semaphore) then begin pilote_acc(adresse+2,2,signal);sleep(tempo_Feu);pilote_acc(adresse+1,1,signal);end; + if (combine=aspect8) then begin pilote_acc(adresse+2,2,signal);sleep(tempo_Feu);pilote_acc(adresse+1,2,signal);end; if (combine=ral_60) and (aspect=jaune_cli) - then begin pilote_acc(adresse+3,1,feu);sleep(tempo_Feu);pilote_acc(adresse,1,feu);end; // demande groupe 3 - if (aspect=vert_cli) then begin pilote_acc(adresse+3,1,feu);sleep(tempo_Feu);pilote_acc(adresse,2,feu);end; // demande groupe 3 - if (combine=Disque_D) then begin pilote_acc(adresse+3,1,feu);sleep(tempo_Feu);pilote_acc(adresse+1,1,feu);end;// demande groupe 3 - if (aspect=jaune_cli) then begin pilote_acc(adresse+3,1,feu);sleep(tempo_Feu);pilote_acc(adresse+1,2,feu);end; - if (combine=ral_30) then begin pilote_acc(adresse+3,2,feu);sleep(tempo_Feu);pilote_acc(adresse,1,feu);end; - if (combine=ral_60) then begin pilote_acc(adresse+3,2,feu);sleep(tempo_Feu);pilote_acc(adresse,2,feu);end; - if (combine=rappel_30) then begin pilote_acc(adresse+3,2,feu);sleep(tempo_Feu);pilote_acc(adresse+1,1,feu);end; - if (combine=rappel_60) then begin pilote_acc(adresse+3,2,feu);sleep(tempo_Feu);pilote_acc(adresse+1,2,feu);end; + then begin pilote_acc(adresse+3,1,signal);sleep(tempo_Feu);pilote_acc(adresse,1,signal);end; // demande groupe 3 + if (aspect=vert_cli) then begin pilote_acc(adresse+3,1,signal);sleep(tempo_Feu);pilote_acc(adresse,2,signal);end; // demande groupe 3 + if (combine=Disque_D) then begin pilote_acc(adresse+3,1,signal);sleep(tempo_Feu);pilote_acc(adresse+1,1,signal);end;// demande groupe 3 + if (aspect=jaune_cli) then begin pilote_acc(adresse+3,1,signal);sleep(tempo_Feu);pilote_acc(adresse+1,2,signal);end; + if (combine=ral_30) then begin pilote_acc(adresse+3,2,signal);sleep(tempo_Feu);pilote_acc(adresse,1,signal);end; + if (combine=ral_60) then begin pilote_acc(adresse+3,2,signal);sleep(tempo_Feu);pilote_acc(adresse,2,signal);end; + if (combine=rappel_30) then begin pilote_acc(adresse+3,2,signal);sleep(tempo_Feu);pilote_acc(adresse+1,1,signal);end; + if (combine=rappel_60) then begin pilote_acc(adresse+3,2,signal);sleep(tempo_Feu);pilote_acc(adresse+1,2,signal);end; end; end; end; @@ -4281,9 +4282,9 @@ var s : string; begin i:=Index_Signal(adresse); - if (feux[i].AncienEtat<>feux[i].EtatSignal) then //; && (stop_cmd==FALSE)) + if (Signaux[i].AncienEtat<>Signaux[i].EtatSignal) then //; && (stop_cmd==FALSE)) begin - code:=feux[i].EtatSignal; + code:=Signaux[i].EtatSignal; code_to_aspect(code,aspect,combine); s:='Signal virtuel: ad'+IntToSTR(adresse)+'='+chaine_signal(adresse); if traceSign then affiche(s,clOrange); @@ -4338,7 +4339,7 @@ var if nombre>=5 then begin if (v and $c0)=$80 then j:=2 else j:=1; - pilote_acc(adresse,j,feu); + pilote_acc(adresse,j,signal); inc(k); end; @@ -4346,7 +4347,7 @@ var if nombre>=3 then begin if (v and $30)=$20 then j:=2 else j:=1; - pilote_acc(adresse+k,j,feu); + pilote_acc(adresse+k,j,signal); inc(k); end; @@ -4354,7 +4355,7 @@ var if nombre>=2 then begin if (v and $c)=$8 then j:=2 else j:=1; - pilote_acc(adresse+k,j,feu); + pilote_acc(adresse+k,j,signal); inc(k); end; @@ -4363,17 +4364,17 @@ var begin if (v and $3)=$2 then j:=2 else j:=1; if k=3 then k:=4; // saut d'adresse - pilote_acc(adresse+k,j,feu); + pilote_acc(adresse+k,j,signal); inc(adresse); end; end; begin i:=Index_Signal(adresse); - if (feux[i].AncienEtat<>feux[i].EtatSignal) then //; && (stop_cmd==FALSE)) + if (Signaux[i].AncienEtat<>Signaux[i].EtatSignal) then //; && (stop_cmd==FALSE)) begin - code:=feux[i].EtatSignal; - nombre:=feux[i].Na; // nombre d'adresses occupées par le signal + code:=Signaux[i].EtatSignal; + nombre:=Signaux[i].Na; // nombre d'adresses occupées par le signal code_to_aspect(code,aspect,combine); s:='Signal digikeijs 4018: ad'+IntToSTR(adresse)+'='+chaine_signal(adresse); if traceSign then affiche(s,clOrange); @@ -4386,31 +4387,31 @@ begin if combine=-1 then case aspect of - carre : ecrire(Feux[i].SR[1].sortie1); - semaphore : ecrire(Feux[i].SR[2].sortie1); - semaphore_cli : ecrire(Feux[i].SR[3].sortie1); - vert : ecrire(Feux[i].SR[4].sortie1); - vert_cli : ecrire(Feux[i].SR[5].sortie1); - violet : ecrire(Feux[i].SR[6].sortie1); - blanc : ecrire(Feux[i].SR[7].sortie1); - blanc_cli : ecrire(Feux[i].SR[8].sortie1); - jaune : ecrire(Feux[i].SR[9].sortie1); - jaune_cli : ecrire(Feux[i].SR[10].sortie1); + carre : ecrire(Signaux[i].SR[1].sortie1); + semaphore : ecrire(Signaux[i].SR[2].sortie1); + semaphore_cli : ecrire(Signaux[i].SR[3].sortie1); + vert : ecrire(Signaux[i].SR[4].sortie1); + vert_cli : ecrire(Signaux[i].SR[5].sortie1); + violet : ecrire(Signaux[i].SR[6].sortie1); + blanc : ecrire(Signaux[i].SR[7].sortie1); + blanc_cli : ecrire(Signaux[i].SR[8].sortie1); + jaune : ecrire(Signaux[i].SR[9].sortie1); + jaune_cli : ecrire(Signaux[i].SR[10].sortie1); end; if aspect=-1 then case combine of - ral_30 : ecrire(Feux[i].SR[11].sortie1); - ral_60 : ecrire(Feux[i].SR[12].sortie1); - rappel_30 : ecrire(Feux[i].SR[14].sortie1); - rappel_60 : ecrire(Feux[i].SR[15].sortie1); + ral_30 : ecrire(Signaux[i].SR[11].sortie1); + ral_60 : ecrire(Signaux[i].SR[12].sortie1); + rappel_30 : ecrire(Signaux[i].SR[14].sortie1); + rappel_60 : ecrire(Signaux[i].SR[15].sortie1); end; if (aspect<>-1) and (combine<>-1) then begin - if (Combine=ral_60) and (aspect=jaune_cli) then ecrire(Feux[i].SR[13].sortie1); - if (Combine=rappel_30) and (aspect=jaune) then ecrire(Feux[i].SR[16].sortie1); - if (Combine=rappel_30) and (aspect=jaune_cli) then ecrire(Feux[i].SR[17].sortie1); - if (Combine=rappel_60) and (aspect=jaune) then ecrire(Feux[i].SR[18].sortie1); - if (Combine=rappel_60) and (aspect=jaune_cli) then ecrire(Feux[i].SR[19].sortie1); + if (Combine=ral_60) and (aspect=jaune_cli) then ecrire(Signaux[i].SR[13].sortie1); + if (Combine=rappel_30) and (aspect=jaune) then ecrire(Signaux[i].SR[16].sortie1); + if (Combine=rappel_30) and (aspect=jaune_cli) then ecrire(Signaux[i].SR[17].sortie1); + if (Combine=rappel_60) and (aspect=jaune) then ecrire(Signaux[i].SR[18].sortie1); + if (Combine=rappel_60) and (aspect=jaune_cli) then ecrire(Signaux[i].SR[19].sortie1); end; end; end; @@ -4429,9 +4430,9 @@ var i,aspect,code,combine : integer; begin connecte:=cdm_connecte or portCommOuvert or parSocketLenz; i:=Index_Signal(adresse); - if (feux[i].AncienEtat<>feux[i].EtatSignal) then //; && (stop_cmd==FALSE)) + if (Signaux[i].AncienEtat<>Signaux[i].EtatSignal) then //; && (stop_cmd==FALSE)) begin - code:=feux[i].EtatSignal; + code:=Signaux[i].EtatSignal; code_to_aspect(code,aspect,combine); s:='Signal Bahn: ad'+IntToSTR(adresse)+'='+chaine_signal(adresse); if traceSign then affiche(s,clOrange); @@ -4446,10 +4447,10 @@ begin // spécifique au décodeur digital bahn: // si le signal affichait un signal combiné, il faut éteindre le signal avec un sémaphore // avant d'afficher le nouvel état non combiné - Ancralrap:=(TestBit(feux[i].AncienEtat,ral_30)) or (TestBit(feux[i].AncienEtat,ral_60)) or - (TestBit(feux[i].AncienEtat,rappel_30)) or (TestBit(feux[i].AncienEtat,rappel_60)) ; + Ancralrap:=(TestBit(Signaux[i].AncienEtat,ral_30)) or (TestBit(Signaux[i].AncienEtat,ral_60)) or + (TestBit(Signaux[i].AncienEtat,rappel_30)) or (TestBit(Signaux[i].AncienEtat,rappel_60)) ; // si ancien état du signal=jaune ou jaune cli - Ancjau:=(TestBit(feux[i].AncienEtat,jaune)) or (TestBit(feux[i].AncienEtat,jaune_cli)) ; + Ancjau:=(TestBit(Signaux[i].AncienEtat,jaune)) or (TestBit(Signaux[i].AncienEtat,jaune_cli)) ; // si état demandé du signal=ralentissement ou rappel ralrap:=(TestBit(code,ral_30)) or (TestBit(code,ral_60)) or @@ -4463,20 +4464,20 @@ begin if connecte then begin Sleep(40); - pilote_acc(adresse+semaphore,2,feu) ; + pilote_acc(adresse+semaphore,2,signal) ; end; // dessine_feu(adresse); end; if connecte then sleep(40); // les commandes entre 2 feux successifs doivent être séparées au minimum de 100 ms // affichage du premier aspect du signal(1er bit à 1 dans codebin - if aspect<>-1 then pilote_acc(adresse+aspect,2,feu) ; + if aspect<>-1 then pilote_acc(adresse+aspect,2,signal) ; // affichage de la signalisation combinée if (Combine<>-1) and connecte then begin sleep(40); - pilote_ACC(adresse+Combine,2,feu) ; + pilote_ACC(adresse+Combine,2,signal) ; end; end; end; @@ -4488,10 +4489,10 @@ var s : string; trouve1,trouve2,trouve3,trouve4 : boolean; begin i:=Index_Signal(adresse); - etat:=feux[i].EtatSignal; - if (feux[i].AncienEtat<>etat) then //; && (stop_cmd==FALSE)) + etat:=Signaux[i].EtatSignal; + if (Signaux[i].AncienEtat<>etat) then //; && (stop_cmd==FALSE)) begin - d:=feux[i].decodeur; + d:=Signaux[i].decodeur; dp:=d-NbDecodeurdeBase+1; if dp<0 then exit; s:='Signal '+decodeur_pers[dp].nom+' : ad'+IntToSTR(adresse)+'='+chaine_signal(adresse); @@ -4499,7 +4500,7 @@ begin nAdresses:=decodeur_pers[dp].NbreAdr; - asp:=feux[i].aspect; + asp:=Signaux[i].aspect; if asp<>20 then // français -------------------------------------------- begin @@ -4569,12 +4570,12 @@ begin dec(j); if trouve1 or trouve3 then begin - pilote_ACC(adresse+decodeur_pers[dp].desc[j].offsetAdresse,decodeur_pers[dp].desc[j].sortie1,feu) ; + pilote_ACC(adresse+decodeur_pers[dp].desc[j].offsetAdresse,decodeur_pers[dp].desc[j].sortie1,signal) ; // Affiche(intToSTR(adresse+decodeur_pers[dp].desc[j].offsetAdresse)+' '+intToSTR(decodeur_pers[dp].desc[j].sortie1),clYellow); end; if trouve2 or trouve4 then begin - pilote_ACC(adresse+decodeur_pers[dp].desc[j].offsetAdresse,decodeur_pers[dp].desc[j].sortie2,feu) ; + pilote_ACC(adresse+decodeur_pers[dp].desc[j].offsetAdresse,decodeur_pers[dp].desc[j].sortie2,signal) ; // Affiche(intToSTR(adresse+decodeur_pers[dp].desc[j].offsetAdresse)+' '+intToSTR(decodeur_pers[dp].desc[j].sortie2),clYellow); end; end; @@ -4669,9 +4670,9 @@ begin for k:=1 to nAdresses do begin if decodeur_pers[dp].desc[k].etat1=j+1 then - pilote_ACC(adresse+decodeur_pers[dp].desc[k].offsetAdresse,decodeur_pers[dp].desc[k].sortie1,feu) ; + pilote_ACC(adresse+decodeur_pers[dp].desc[k].offsetAdresse,decodeur_pers[dp].desc[k].sortie1,signal) ; if decodeur_pers[dp].desc[k].etat2=j+1 then - pilote_ACC(adresse+decodeur_pers[dp].desc[k].offsetAdresse,decodeur_pers[dp].desc[k].sortie2,feu) ; + pilote_ACC(adresse+decodeur_pers[dp].desc[k].offsetAdresse,decodeur_pers[dp].desc[k].sortie2,signal) ; end; end; end; @@ -4792,11 +4793,11 @@ begin end; //Affiche(intToSTR(Adr)+' '+intToSTR(i),clWhite); - if (feux[i].AncienEtat<>feux[i].EtatSignal) then + if (Signaux[i].AncienEtat<>Signaux[i].EtatSignal) then begin - if (feux[i].aspect<10) or (feux[i].aspect>=20) then // si signal non directionnel + if (Signaux[i].aspect<10) or (Signaux[i].aspect>=20) then // si signal non directionnel begin - dec:=feux[i].decodeur; + dec:=Signaux[i].decodeur; // envoie la commande au décodeur case dec of 0 : envoi_virtuel(Adr); @@ -4820,10 +4821,10 @@ begin // Gestion démarrage temporisé des trains si on quitte le rouge : ne fonctionne qu'en roulage if roulage then begin - a:=feux[i].AncienEtat; - b:=feux[i].EtatSignal; + a:=Signaux[i].AncienEtat; + b:=Signaux[i].EtatSignal; // si l'ancien état était au rouge/violet et on quitte le rouge/violet - if feux[i].aspect=20 then begin rougeA:=testbit(a,rouge);rougeB:=testbit(b,rouge);end // signal belge + if Signaux[i].aspect=20 then begin rougeA:=testbit(a,rouge);rougeB:=testbit(b,rouge);end // signal belge else begin rougeA:=testbit(a,semaphore) or testbit(a,carre) or testbit(a,violet); @@ -4832,7 +4833,7 @@ begin if not(rougeB) and rougeA then // le signal quitte le rouge/violet begin // y a t il un train en face du signal - detect:=feux[i].Adr_det1; + detect:=Signaux[i].Adr_det1; if detect<>0 then begin // test si train sur le détecteur det @@ -4848,8 +4849,8 @@ begin if index_train<>0 then it:=trains[index_train].index_event_det_train; if it<>0 then event_det_train[it].signal_rouge:=0; // faire la réservation du canton - if feux[i].Btype_suiv1<>det then detSuiv:=detecteur_suivant(detect,det,feux[i].Adr_el_suiv1,feux[i].Btype_suiv1,1) - else detSuiv:=feux[i].Adr_el_suiv1; + if Signaux[i].Btype_suiv1<>det then detSuiv:=detecteur_suivant(detect,det,Signaux[i].Adr_el_suiv1,Signaux[i].Btype_suiv1,1) + else detSuiv:=Signaux[i].Adr_el_suiv1; if detSuiv<9990 then reserve_canton(detect,detSuiv,Adrtrain,0,2); // démarrage d'un train j:=index_train_adresse(adrtrain); @@ -4875,13 +4876,13 @@ begin else begin - pilote_direction(Adr,feux[i].etatSignal) + pilote_direction(Adr,Signaux[i].etatSignal) end; - feux[i].AncienEtat:=feux[i].EtatSignal; + Signaux[i].AncienEtat:=Signaux[i].EtatSignal; // allume les signaux du feu dans la fenêtre de droite - Dessine_signal_mx(Feux[i].Img.Canvas,0,0,1,1,adr,1); + Dessine_signal_mx(Signaux[i].Img.Canvas,0,0,1,1,adr,1); // allume les signaux du feu dans le TCO if TCOACtive then @@ -4893,7 +4894,7 @@ begin if TCO[indexTCO,x,y].Bimage=Id_signal then begin adresse:=TCO[IndexTCO,x,y].adresse; // vérifie si le feu existe dans le TCO - aspect:=feux[Index_Signal(adresse)].Aspect; + aspect:=Signaux[Index_Signal(adresse)].Aspect; case aspect of 2 : ImageFeu:=Formprinc.Image2feux; 3 : ImageFeu:=Formprinc.Image3feux; @@ -4927,9 +4928,9 @@ procedure envoi_signauxCplx; var i,adr : integer; begin //Affiche('Envoi des signaux (envoi_signauxCplx)',ClGreen); - for i:=1 to NbreFeux do + for i:=1 to NbreSignaux do begin - adr:=feux[i].adresse; + adr:=Signaux[i].adresse; if not(ferme) and (adr<>0) then envoi_signal(adr); end; end; @@ -5061,7 +5062,7 @@ begin i:=Index_Signal(adresse); if i<>0 then begin - aspect:=feux[i].aspect; + aspect:=Signaux[i].aspect; if ((aspect=2) and (UniSem=2)) or ((aspect=3) and (UniSem=3)) or ((aspect=4) and (UniSem=4)) or @@ -6088,10 +6089,10 @@ var trouve : boolean; begin i:=1; repeat - trouve:=(feux[i].Adr_det1=detecteur) or (feux[i].Adr_det2=detecteur) or (feux[i].Adr_det3=detecteur) or (feux[i].Adr_det4=detecteur); + trouve:=(Signaux[i].Adr_det1=detecteur) or (Signaux[i].Adr_det2=detecteur) or (Signaux[i].Adr_det3=detecteur) or (Signaux[i].Adr_det4=detecteur); inc(i); - until (i>=NbreFeux+1) or trouve; - if trouve then signal_detecteur:=feux[i-1].adresse else signal_detecteur:=0; + until (i>=NbreSignaux+1) or trouve; + if trouve then signal_detecteur:=Signaux[i-1].adresse else signal_detecteur:=0; end; // trouve l'index du feu associé au détecteur adr @@ -6108,10 +6109,10 @@ begin index1:=0; voie:=0; repeat - trouve1:=feux[i].Adr_det1=adr; - trouve2:=feux[i].Adr_det2=adr; - trouve3:=feux[i].Adr_det3=adr; - trouve4:=feux[i].Adr_det4=adr; + trouve1:=Signaux[i].Adr_det1=adr; + trouve2:=Signaux[i].Adr_det2=adr; + trouve3:=Signaux[i].Adr_det3=adr; + trouve4:=Signaux[i].Adr_det4=adr; if trouve1 or trouve2 or trouve3 or trouve4 then begin @@ -6127,7 +6128,7 @@ begin end; end; inc(i); - until (trouve=2) or (i>NbreFeux); + until (trouve=2) or (i>NbreSignaux); Index_signal_det:=index1; end; @@ -6865,28 +6866,28 @@ begin //Affiche('Voie '+intToStr(voie),clyellow); case voie of 1 : begin - el2:=feux[i].Adr_det1; + el2:=Signaux[i].Adr_det1; tq2:=det; - el1:=feux[i].Adr_el_suiv1; - tq1:=feux[i].Btype_suiv1; + el1:=Signaux[i].Adr_el_suiv1; + tq1:=Signaux[i].Btype_suiv1; end; 2 : begin - el2:=feux[i].Adr_det2; + el2:=Signaux[i].Adr_det2; tq2:=det; - el1:=feux[i].Adr_el_suiv2; - tq1:=feux[i].Btype_suiv2; + el1:=Signaux[i].Adr_el_suiv2; + tq1:=Signaux[i].Btype_suiv2; end; 3 : begin - el2:=feux[i].Adr_det3; + el2:=Signaux[i].Adr_det3; tq2:=det; - el1:=feux[i].Adr_el_suiv3; - tq1:=feux[i].Btype_suiv3; + el1:=Signaux[i].Adr_el_suiv3; + tq1:=Signaux[i].Btype_suiv3; end; 4 : begin - el2:=feux[i].Adr_det4; + el2:=Signaux[i].Adr_det4; tq2:=det; - el1:=feux[i].Adr_el_suiv4; - tq1:=feux[i].Btype_suiv4; + el1:=Signaux[i].Adr_el_suiv4; + tq1:=Signaux[i].Btype_suiv4; end; end; @@ -7206,7 +7207,7 @@ begin exit; end; - NCondCarre:=Length(feux[i].condFeuBlanc[1]); + NCondCarre:=Length(Signaux[i].condFeuBlanc[1]); l:=1; resultatOU:=false; @@ -7217,20 +7218,20 @@ begin resultatET:=true; for k:=1 to NcondCarre do begin - //s2:=s2+'A'+IntToSTR(feux[i].condFeuBlanc[l][k].Adresse)+feux[i].condFeuBlanc[l][k].PosAig+' '; - AdrAig:=feux[i].condFeuBlanc[l][k].Adresse; + //s2:=s2+'A'+IntToSTR(Signaux[i].condFeuBlanc[l][k].Adresse)+Signaux[i].condFeuBlanc[l][k].PosAig+' '; + AdrAig:=Signaux[i].condFeuBlanc[l][k].Adresse; index:=index_aig(adrAig); if index<>0 then begin if nivDebug=3 then AfficheDebug('Contrôle aiguillage '+IntToSTR(AdrAig),clyellow); - resultatET:=((aiguillage[index].position=const_devie) and (feux[i].condFeuBlanc[l][k].PosAig='S') or (aiguillage[index].position=const_droit) and (feux[i].condFeuBlanc[l][k].PosAig='D')) + resultatET:=((aiguillage[index].position=const_devie) and (Signaux[i].condFeuBlanc[l][k].PosAig='S') or (aiguillage[index].position=const_droit) and (Signaux[i].condFeuBlanc[l][k].PosAig='D')) and resultatET; end; end; //if resultatET then Affiche('VRAI',clyellow) else affiche('FAUX',clred); inc(l); resultatOU:=resultatOU or resultatET; - NCondCarre:=Length(feux[i].condFeuBlanc[l]); + NCondCarre:=Length(Signaux[i].condFeuBlanc[l]); end; //if resultatOU then Affiche('VRAI final',clyellow) else affiche('FAUX final',clred); if NivDebug=3 then @@ -7259,7 +7260,7 @@ begin exit; end; - NCondCarre:=Length(feux[i].condcarre[1]); + NCondCarre:=Length(Signaux[i].condcarre[1]); l:=1; resultatOU:=false; @@ -7270,20 +7271,20 @@ begin resultatET:=true; for k:=1 to NcondCarre do begin - //s2:=s2+'A'+IntToSTR(feux[i].condcarre[l][k].Adresse)+feux[i].condcarre[l][k].PosAig+' '; - AdrAig:=feux[i].condcarre[l][k].Adresse; + //s2:=s2+'A'+IntToSTR(Signaux[i].condcarre[l][k].Adresse)+Signaux[i].condcarre[l][k].PosAig+' '; + AdrAig:=Signaux[i].condcarre[l][k].Adresse; index:=index_aig(adrAig); if index<>0 then begin if nivDebug=3 then AfficheDebug('Contrôle aiguillage '+IntToSTR(AdrAig),clyellow); - resultatET:=((aiguillage[index].position=const_devie) and (feux[i].condcarre[l][k].PosAig='S') or (aiguillage[index].position=const_droit) and (feux[i].condcarre[l][k].PosAig='D')) + resultatET:=((aiguillage[index].position=const_devie) and (Signaux[i].condcarre[l][k].PosAig='S') or (aiguillage[index].position=const_droit) and (Signaux[i].condcarre[l][k].PosAig='D')) and resultatET; end; end; //if resultatET then Affiche('VRAI',clyellow) else affiche('FAUX',clred); inc(l); resultatOU:=resultatOU or resultatET; - NCondCarre:=Length(feux[i].condcarre[l]); + NCondCarre:=Length(Signaux[i].condcarre[l]); end; //if resultatOU then Affiche('VRAI final',clyellow) else affiche('FAUX final',clred); if NivDebug=3 then @@ -7321,7 +7322,7 @@ begin exit; end; - if (feux[i].aspect>10) and (feux[i].aspect<20) then + if (Signaux[i].aspect>10) and (Signaux[i].aspect<20) then begin s:='La demande de carré d''un signal directionnel '+IntToSTR(Adresse)+' est irrecevable'; Affiche(s,clred); @@ -7331,24 +7332,24 @@ begin end; j:=0; - prec:=feux[i].Adr_det1; + prec:=Signaux[i].Adr_det1; TypeElPrec:=Det; - actuel:=feux[i].Adr_el_suiv1; - if feux[i].Btype_suiv1=det then TypeElActuel:=det; // le type du feu 1=détecteur 2=aig 5=bis - if feux[i].Btype_suiv1=aig then TypeElActuel:=aig; + actuel:=Signaux[i].Adr_el_suiv1; + if Signaux[i].Btype_suiv1=det then TypeElActuel:=det; // le type du feu 1=détecteur 2=aig 5=bis + if Signaux[i].Btype_suiv1=aig then TypeElActuel:=aig; // en multivoie, trouver si une des voies présente un train - if feux[i].Adr_det2<>0 then + if Signaux[i].Adr_det2<>0 then begin prestrain:=presTrainPrec(adresse,Nb_cantons_Sig,false,AdrTrain,voie); // retourne la voie où se trouve le train avant le signal if prestrain then begin if nivdebug=3 then AfficheDebug('trouvé train sur voie '+intToSTR(voie),clYellow); case voie of - 1: begin prec:=feux[i].Adr_det1; actuel:=feux[i].Adr_el_suiv1; TypeElActuel:=feux[i].Btype_suiv1; end; - 2: begin prec:=feux[i].Adr_det2; actuel:=feux[i].Adr_el_suiv2; TypeElActuel:=feux[i].Btype_suiv2; end; - 3: begin prec:=feux[i].Adr_det3; actuel:=feux[i].Adr_el_suiv3; TypeElActuel:=feux[i].Btype_suiv3; end; - 4: begin prec:=feux[i].Adr_det4; actuel:=feux[i].Adr_el_suiv4; TypeElActuel:=feux[i].Btype_suiv4; end; + 1: begin prec:=Signaux[i].Adr_det1; actuel:=Signaux[i].Adr_el_suiv1; TypeElActuel:=Signaux[i].Btype_suiv1; end; + 2: begin prec:=Signaux[i].Adr_det2; actuel:=Signaux[i].Adr_el_suiv2; TypeElActuel:=Signaux[i].Btype_suiv2; end; + 3: begin prec:=Signaux[i].Adr_det3; actuel:=Signaux[i].Adr_el_suiv3; TypeElActuel:=Signaux[i].Btype_suiv3; end; + 4: begin prec:=Signaux[i].Adr_det4; actuel:=Signaux[i].Adr_el_suiv4; TypeElActuel:=Signaux[i].Btype_suiv4; end; end; TypeElPrec:=Det; end @@ -7406,13 +7407,13 @@ begin if indexFeu<>0 then begin - AdrFeu:=feux[indexFeu].adresse; + AdrFeu:=Signaux[indexFeu].adresse; if nivdebug=3 then s:='Trouvé signal '+intToSTR(AdrFeu); - if ((voie=1) and (Feux[indexFeu].Adr_el_suiv1=AdrSuiv)) or - ((voie=2) and (Feux[indexFeu].Adr_el_suiv2=AdrSuiv)) or - ((voie=3) and (Feux[indexFeu].Adr_el_suiv3=AdrSuiv)) or - ((voie=4) and (Feux[indexFeu].Adr_el_suiv4=AdrSuiv)) + if ((voie=1) and (Signaux[indexFeu].Adr_el_suiv1=AdrSuiv)) or + ((voie=2) and (Signaux[indexFeu].Adr_el_suiv2=AdrSuiv)) or + ((voie=3) and (Signaux[indexFeu].Adr_el_suiv3=AdrSuiv)) or + ((voie=4) and (Signaux[indexFeu].Adr_el_suiv4=AdrSuiv)) then // le feu est-il dans le bon sens de progression? begin if nivdebug=3 then begin s:=s+' dans le bon sens';AfficheDebug(s,clYellow);end; @@ -7429,14 +7430,14 @@ begin if index2<>0 then begin // vérifier le 2eme feu - AdrFeu:=Feux[index2].Adresse; + AdrFeu:=Signaux[index2].Adresse; if (adrFeu=Adresse) then // si on ne reboucle sur le même signal dont on cherche le suivant begin IndexFeu:=0; j:=10; // on ne trouve pas de suivant end; - if (Feux[index2].Adr_el_suiv1=AdrSuiv) then // le feu est-il dans le bon sens de progression? + if (Signaux[index2].Adr_el_suiv1=AdrSuiv) then // le feu est-il dans le bon sens de progression? begin // oui if NivDebug=3 then AfficheDebug('Sur même détecteur, trouvé signal2 suivant Adr='+IntToSTR(AdrFeu)+': ',clYellow); @@ -7561,7 +7562,7 @@ begin i:=Index_signal_det(Actuel,voie,index2); // trouve l'index de feu affecté au détecteur "Actuel" if i<>0 then begin - AdrFeu:=Feux[i].Adresse; + AdrFeu:=Signaux[i].Adresse; if (adrFeu=det1) then // si on ne reboucle sur le même signal dont on cherche le suivant begin AdrFeu:=0;j:=10; // on ne trouve pas de suivant @@ -7570,10 +7571,10 @@ begin begin AdrSuiv:=suivant_alg3(prec,TypePrec,actuel,TypeActuel,1); if nivdebug=3 then afficheDebug('Trouvé signal='+IntToSTR(AdrFeu)+'sur det '+intToSTR(actuel)+' Suivant='+IntToSTR(AdrSuiv)+' sur voie='+IntToSTR(voie),clyellow ); - if ((voie=1) and (Feux[i].Adr_el_suiv1=AdrSuiv)) or - ((voie=2) and (Feux[i].Adr_el_suiv2=AdrSuiv)) or - ((voie=3) and (Feux[i].Adr_el_suiv3=AdrSuiv)) or - ((voie=4) and (Feux[i].Adr_el_suiv4=AdrSuiv)) + if ((voie=1) and (Signaux[i].Adr_el_suiv1=AdrSuiv)) or + ((voie=2) and (Signaux[i].Adr_el_suiv2=AdrSuiv)) or + ((voie=3) and (Signaux[i].Adr_el_suiv3=AdrSuiv)) or + ((voie=4) and (Signaux[i].Adr_el_suiv4=AdrSuiv)) then // le feu est-il dans le bon sens de progression? begin // oui @@ -7591,12 +7592,12 @@ begin if index2<>0 then begin // vérifier le 2eme feu - AdrFeu:=Feux[index2].Adresse; + AdrFeu:=Signaux[index2].Adresse; if (adrFeu=det1) then // si on ne reboucle sur le même signal dont on cherche le suivant begin AdrFeu:=0;j:=10; // on ne trouve pas de suivant end; - if (Feux[index2].Adr_el_suiv1=AdrSuiv) then // le feu est-il dans le bon sens de progression? + if (Signaux[index2].Adr_el_suiv1=AdrSuiv) then // le feu est-il dans le bon sens de progression? begin // oui inc(num_feu); @@ -7655,7 +7656,7 @@ begin AdrSignalsuivant:=0; exit; end; - if (feux[i].aspect>10) and (feux[i].aspect<20) then + if (Signaux[i].aspect>10) and (Signaux[i].aspect<20) then begin s:='La demande de l''état du signal suivant depuis un feu directionnel '+IntToSTR(Adresse)+' est irrecevable'; Affiche(s,clred); @@ -7667,7 +7668,7 @@ begin Etat:=0; j:=0; num_feu:=0; - prec:=Feux[i].Adr_det1; // détecteur sur le courant + prec:=Signaux[i].Adr_det1; // détecteur sur le courant TypePrec:=det; if prec=0 then begin @@ -7680,8 +7681,8 @@ begin end; if debug=3 then formprinc.Caption:='Etat_signal_suivant '+intToSTR(adresse); - actuel:=feux[i].Adr_el_suiv1; - typeActuel:=feux[i].Btype_suiv1; + actuel:=Signaux[i].Adr_el_suiv1; + typeActuel:=Signaux[i].Btype_suiv1; elements[1].adresse:=actuel;elements[1].typ:=typeActuel; idEl:=2; @@ -7746,7 +7747,7 @@ begin i:=Index_signal_det(Actuel,voie,index2); // trouve l'index de feu affecté au détecteur "Actuel" if i<>0 then begin - AdrFeu:=Feux[i].Adresse; + AdrFeu:=Signaux[i].Adresse; if (adrFeu=Adresse) then // si on ne reboucle sur le même signal dont on cherche le suivant begin AdrFeu:=0;j:=10; // on ne trouve pas de suivant @@ -7755,15 +7756,15 @@ begin begin AdrSuiv:=suivant_alg3(prec,TypePrec,actuel,TypeActuel,1); if nivdebug=3 then afficheDebug('Trouvé signal='+IntToSTR(AdrFeu)+'sur det '+intToSTR(actuel)+' Suivant='+IntToSTR(AdrSuiv)+' sur voie='+IntToSTR(voie),clyellow ); - if ((voie=1) and (Feux[i].Adr_el_suiv1=AdrSuiv)) or - ((voie=2) and (Feux[i].Adr_el_suiv2=AdrSuiv)) or - ((voie=3) and (Feux[i].Adr_el_suiv3=AdrSuiv)) or - ((voie=4) and (Feux[i].Adr_el_suiv4=AdrSuiv)) + if ((voie=1) and (Signaux[i].Adr_el_suiv1=AdrSuiv)) or + ((voie=2) and (Signaux[i].Adr_el_suiv2=AdrSuiv)) or + ((voie=3) and (Signaux[i].Adr_el_suiv3=AdrSuiv)) or + ((voie=4) and (Signaux[i].Adr_el_suiv4=AdrSuiv)) then // le feu est-il dans le bon sens de progression? begin // oui inc(num_feu); - Etat:=feux[Index_Signal(AdrFeu)].EtatSignal; + Etat:=Signaux[Index_Signal(AdrFeu)].EtatSignal; code_to_aspect(Etat,aspect,combine); Signal_suivant:=AdrFeu; if NivDebug=3 then @@ -7780,17 +7781,17 @@ begin if index2<>0 then begin // vérifier le 2eme feu - AdrFeu:=Feux[index2].Adresse; + AdrFeu:=Signaux[index2].Adresse; if (adrFeu=Adresse) then // si on ne reboucle sur le même signal dont on cherche le suivant begin AdrFeu:=0;j:=10; // on ne trouve pas de suivant end; - if (Feux[index2].Adr_el_suiv1=AdrSuiv) then // le feu est-il dans le bon sens de progression? + if (Signaux[index2].Adr_el_suiv1=AdrSuiv) then // le feu est-il dans le bon sens de progression? begin // oui inc(num_feu); - Etat:=feux[Index_Signal(AdrFeu)].EtatSignal; + Etat:=Signaux[Index_Signal(AdrFeu)].EtatSignal; code_to_aspect(Etat,aspect,combine); Signal_suivant:=AdrFeu; if NivDebug=3 then @@ -7837,10 +7838,10 @@ begin Aiguille_deviee:=0; exit; end; - prec:=feux[i].Adr_det1; + prec:=Signaux[i].Adr_det1; TypePrec:=det; - actuel:=feux[i].Adr_el_suiv1; - TypeActuel:=feux[i].Btype_suiv1 ; + actuel:=Signaux[i].Adr_el_suiv1; + TypeActuel:=Signaux[i].Btype_suiv1 ; AdrFeu:=0; AdrDevie:=0; if (TypeActuel=aig) then // aiguillage @@ -7866,7 +7867,7 @@ begin if (TypeActuel=det) then // détecteur begin i:=Index_signal_det(AdrSuiv,voie,index2); // trouve l'index de feu affecté au détecteur "AdrSuiv" - AdrFeu:=Feux[i].Adresse; + AdrFeu:=Signaux[i].Adresse; if NivDebug=3 then AfficheDebug('trouvé signal '+intToSTR(AdrFeu)+' associé au détecteur '+IntToSTR(AdrSuiv),clyellow); end; end; @@ -7891,7 +7892,7 @@ procedure pilote_direction(Adr,nbre : integer); var i,j : integer; begin i:=Index_Signal(Adr); - j:=feux[i].decodeur; + j:=Signaux[i].decodeur; case j of // 0 : envoi_directionvirtuel(Adr,nbre); 1 : envoi_DirectionBahn(Adr,nbre); @@ -7908,16 +7909,16 @@ var NAig,i,id,j,NfeuxDir,AdrAigFeu,Position : integer; Positionok : boolean; begin id:=Index_Signal(Adr); - NfeuxDir:=feux[id].aspect-10; + NfeuxDir:=Signaux[id].aspect-10; i:=1; // i=1 position éteinte du feu ; pour les autres valeurs de i : nombre de feux allumés repeat - NAig:=length(feux[id].AigDirection[i])-1; + NAig:=length(Signaux[id].AigDirection[i])-1; if i=1 then positionok:=false else positionok:=true; for j:=1 to Naig do begin // vérifier la position déclarée des aiguillages pour chaque feu - AdrAigFeu:=feux[id].AigDirection[i][j].Adresse; - PosAigFeu:=feux[id].AigDirection[i][j].posAig; + AdrAigFeu:=Signaux[id].AigDirection[i][j].Adresse; + PosAigFeu:=Signaux[id].AigDirection[i][j].posAig; position:=aiguillage[index_aig(AdrAigFeu)].position; // if i=1 then positionok:=((position=const_droit) and (posAigFeu='D')) or ((position<>const_droit) and (posAigFeu='S')) or positionok; @@ -7965,27 +7966,27 @@ begin if NivDebug=3 then AfficheDebug('Boucle de test signal '+intToSTR(ife)+'/4',clOrange); if (ife=1) then begin - prec:=feux[i].Adr_det1; - Actuel:=feux[i].Adr_el_suiv1; - TypeActuel:=feux[i].Btype_suiv1; + prec:=Signaux[i].Adr_det1; + Actuel:=Signaux[i].Adr_el_suiv1; + TypeActuel:=Signaux[i].Btype_suiv1; end; //détecteur sur le signal courant if (ife=2) then begin - prec:=feux[i].Adr_det2; - Actuel:=feux[i].Adr_el_suiv2; - TypeActuel:=feux[i].Btype_suiv2; + prec:=Signaux[i].Adr_det2; + Actuel:=Signaux[i].Adr_el_suiv2; + TypeActuel:=Signaux[i].Btype_suiv2; end; // détecteur sur le signal courant if (ife=3) then begin - prec:=feux[i].Adr_det3; - Actuel:=feux[i].Adr_el_suiv3; - TypeActuel:=feux[i].Btype_suiv3; + prec:=Signaux[i].Adr_det3; + Actuel:=Signaux[i].Adr_el_suiv3; + TypeActuel:=Signaux[i].Btype_suiv3; end; // détecteur sur le signal courant if (ife=4) then begin - prec:=feux[i].Adr_det4; - Actuel:=feux[i].Adr_el_suiv4; - TypeActuel:=feux[i].Btype_suiv4; + prec:=Signaux[i].Adr_det4; + Actuel:=Signaux[i].Adr_el_suiv4; + TypeActuel:=Signaux[i].Btype_suiv4; end; // détecteur sur le signal courant if (actuel=0) or (actuel>NbMaxDet) or (prec=0) or (prec>NbMaxDet) then @@ -8054,7 +8055,7 @@ begin isi:=index_signal_det(Actuel,voie,index2); // renvoie l'index du signal se trouvant au détecteur "AdrSuiv": il peut y avoir 4 détecteurs par signal if isi<>0 then begin - AdrFeu:=feux[isi].adresse; // adresse du feu + AdrFeu:=Signaux[isi].adresse; // adresse du feu if (AdrFeu=adresse) then // si on ne reboucle sur le même signal dont on cherche le suivant begin AdrFeu:=0;j:=10; // on ne trouve pas de suivant @@ -8064,7 +8065,7 @@ begin end; if (AdrFeu<>0) then // si l'adresse est <>0 begin - if (feux[isi].Adr_el_suiv1<>prec) then // le feu est-il dans le bon sens de progression? + if (Signaux[isi].Adr_el_suiv1<>prec) then // le feu est-il dans le bon sens de progression? begin inc(Nfeux); j:=0; @@ -8185,27 +8186,27 @@ begin if NivDebug=3 then AfficheDebug('Boucle de test signal voie '+intToSTR(ife)+'/4',clOrange); if (ife=1) then begin - actuel:=feux[i].Adr_det1; - prec:=feux[i].Adr_el_suiv1; - Typeprec:=feux[i].Btype_suiv1; + actuel:=Signaux[i].Adr_det1; + prec:=Signaux[i].Adr_el_suiv1; + Typeprec:=Signaux[i].Btype_suiv1; end; //détecteur sur le signal courant if (ife=2) then begin - actuel:=feux[i].Adr_det2; - prec:=feux[i].Adr_el_suiv2; - Typeprec:=feux[i].Btype_suiv2; + actuel:=Signaux[i].Adr_det2; + prec:=Signaux[i].Adr_el_suiv2; + Typeprec:=Signaux[i].Btype_suiv2; end; // détecteur sur le signal courant if (ife=3) then begin - actuel:=feux[i].Adr_det3; - prec:=feux[i].Adr_el_suiv3; - Typeprec:=feux[i].Btype_suiv3; + actuel:=Signaux[i].Adr_det3; + prec:=Signaux[i].Adr_el_suiv3; + Typeprec:=Signaux[i].Btype_suiv3; end; // détecteur sur le signal courant if (ife=4) then begin - actuel:=feux[i].Adr_det4; - prec:=feux[i].Adr_el_suiv4; - Typeprec:=feux[i].Btype_suiv4; + actuel:=Signaux[i].Adr_det4; + prec:=Signaux[i].Adr_el_suiv4; + Typeprec:=Signaux[i].Btype_suiv4; end; // détecteur sur le signal courant TypeActuel:=det; @@ -8267,14 +8268,14 @@ begin ifd:=index_signal_det(Actuel,voie,index2); // renvoie l'index du signal se trouvant au détecteur "AdrSuiv": il peut y avoir 4 détecteurs par signal if ifd<>0 then begin - AdrFeu:=feux[ifd].adresse; // adresse du feu + AdrFeu:=Signaux[ifd].adresse; // adresse du feu if (AdrFeu=adresse) then // si on ne reboucle sur le même signal dont on cherche le suivant begin Signal_precedent:=0; end; if (AdrFeu<>0) then // si l'adresse est <>0 begin - if (feux[ifd].Adr_el_suiv1=prec) then // le feu est-il dans le bon sens de progression? + if (Signaux[ifd].Adr_el_suiv1=prec) then // le feu est-il dans le bon sens de progression? begin inc(Nfeux); s:='Trouvé signal '+IntToSTR(AdrFeu); @@ -8342,27 +8343,27 @@ begin if NivDebug=3 then AfficheDebug('Boucle de test signal '+intToSTR(ife)+'/4',clOrange); if (ife=1) then begin - actuel:=feux[i].Adr_det1; - prec:=feux[i].Adr_el_suiv1; - Typeprec:=feux[i].Btype_suiv1; + actuel:=Signaux[i].Adr_det1; + prec:=Signaux[i].Adr_el_suiv1; + Typeprec:=Signaux[i].Btype_suiv1; end; //détecteur sur le signal courant if (ife=2) then begin - actuel:=feux[i].Adr_det2; - prec:=feux[i].Adr_el_suiv2; - Typeprec:=feux[i].Btype_suiv2; + actuel:=Signaux[i].Adr_det2; + prec:=Signaux[i].Adr_el_suiv2; + Typeprec:=Signaux[i].Btype_suiv2; end; // détecteur sur le signal courant if (ife=3) then begin - actuel:=feux[i].Adr_det3; - prec:=feux[i].Adr_el_suiv3; - Typeprec:=feux[i].Btype_suiv3; + actuel:=Signaux[i].Adr_det3; + prec:=Signaux[i].Adr_el_suiv3; + Typeprec:=Signaux[i].Btype_suiv3; end; // détecteur sur le signal courant if (ife=4) then begin - actuel:=feux[i].Adr_det4; - prec:=feux[i].Adr_el_suiv4; - Typeprec:=feux[i].Btype_suiv4; + actuel:=Signaux[i].Adr_det4; + prec:=Signaux[i].Adr_el_suiv4; + Typeprec:=Signaux[i].Btype_suiv4; end; // détecteur sur le signal courant if actuel>NbMaxDet then @@ -8395,7 +8396,7 @@ begin // lire la mémoire de zone des détecteurs précédent le signal k:=1; repeat - d:=feux[i].DetAmont[k]; + d:=Signaux[i].DetAmont[k]; if d<>0 then begin pres_Train:=MemZone[d,actuel].etat or Pres_Train; @@ -8482,7 +8483,7 @@ begin ifd:=index_signal_det(Actuel,voie,index2); // renvoie l'index du signal se trouvant au détecteur "AdrSuiv": il peut y avoir 4 détecteurs par signal if ifd<>0 then begin - AdrFeu:=feux[ifd].adresse; // adresse du signal + AdrFeu:=Signaux[ifd].adresse; // adresse du signal if (AdrFeu=adresse) then // si on ne reboucle sur le même signal dont on cherche le suivant begin AdrFeu:=0; // on ne trouve pas de suivant @@ -8494,7 +8495,7 @@ begin end; if (AdrFeu<>0) then // si l'adresse est <>0 begin - if (feux[ifd].Adr_el_suiv1=prec) then // le feu est-il dans le bon sens de progression? + if (Signaux[ifd].Adr_el_suiv1=prec) then // le feu est-il dans le bon sens de progression? begin inc(Nfeux); j:=0; @@ -8512,7 +8513,7 @@ begin // lire la mémoire de zone des détecteurs n-2 précédent le signal k:=1; repeat - d:=feux[ifd].DetAmont[k]; + d:=Signaux[ifd].DetAmont[k]; if d<>0 then begin pres_Train:=MemZone[d,actuel].etat or Pres_Train; @@ -8548,8 +8549,8 @@ function signal_rouge(adresse : word) : boolean; var etat,i : integer; begin i:=index_signal(adresse); - etat:=feux[i].EtatSignal; - if feux[i].aspect=20 then result:=testbit(etat,rouge) + etat:=Signaux[i].EtatSignal; + if Signaux[i].aspect=20 then result:=testbit(etat,rouge) else result:=testbit(etat,semaphore) or testbit(etat,carre) or testbit(etat,violet); end; @@ -8576,13 +8577,13 @@ begin if affSignal then AfficheDebug('Signal belge',clOrange); index:=Index_Signal(AdrFeu); - Adr_det:=Feux[index].Adr_det1; // détecteur sur le signal - Adr_El_Suiv:=Feux[index].Adr_el_suiv1; // adresse élément suivant au feu - Btype_el_suivant:=Feux[index].Btype_suiv1; + Adr_det:=Signaux[index].Adr_det1; // détecteur sur le signal + Adr_El_Suiv:=Signaux[index].Adr_el_suiv1; // adresse élément suivant au feu + Btype_el_suivant:=Signaux[index].Btype_suiv1; PresTrain:=false; // détecteurs précédent le feu , pour déterminer si leurs mémoires de zones sont à 1 pour libérer le carré - //if (Feux[index].VerrouCarre) and (modele>=4) then + //if (Signaux[index].VerrouCarre) and (modele>=4) then presTrain:=PresTrainPrec(AdrFeu,Nb_cantons_Sig,false,AdrTrainLoc,voie); //etape A // présence train par adresse train ; renvoie l'adresse du train dans AdrTrainLoc if AffSignal and roulage then AfficheDebug('L''@ du train avant le signal est '+intToSTR(AdrTrainLoc),clYellow); @@ -8598,9 +8599,9 @@ begin // conditions supplémentaires de carré en fonction des aiguillages décrits car:=cond_carre(AdrFeu) or car; - if AffSignal and feux[index].VerrouCarre then AfficheDebug('le signal est verrouillé au carré',clYellow); + if AffSignal and Signaux[index].VerrouCarre then AfficheDebug('le signal est verrouillé au carré',clYellow); - if (Feux[index].VerrouCarre and not(presTrain)) or car + if (Signaux[index].VerrouCarre and not(presTrain)) or car then Maj_Etat_Signal_belge(AdrFeu,semaphore) else begin @@ -8612,20 +8613,20 @@ begin if Aff_Semaphore then begin if AffSignal then AfficheDebug('Présence train après signal'+intToSTR(AdrFeu)+' -> sémaphore ou carré',clYellow); - if feux[index].checkFR then Maj_Etat_Signal_belge(AdrFeu,semaphore_cli) + if Signaux[index].checkFR then Maj_Etat_Signal_belge(AdrFeu,semaphore_cli) else Maj_Etat_Signal_belge(AdrFeu,semaphore); end else begin // si aiguillage au pied du signal avec chevron - if feux[index].Btype_suiv1=aig then + if Signaux[index].Btype_suiv1=aig then begin - adrAig:=feux[index].Adr_el_suiv1; + adrAig:=Signaux[index].Adr_el_suiv1; IndexAig:=index_aig(adrAig); //rouge if aiguillage[IndexAig].position=const_devie then begin - if feux[index].verscontrevoie then Maj_Etat_Signal_belge(AdrFeu,chevron_F or bita1_F) else Maj_Etat_Signal_belge(AdrFeu,chevron_F); + if Signaux[index].verscontrevoie then Maj_Etat_Signal_belge(AdrFeu,chevron_F or bita1_F) else Maj_Etat_Signal_belge(AdrFeu,chevron_F); if aiguillage[indexAig].vitesse<>0 then Maj_Etat_Signal_belge(AdrFeu,chiffre_F or bita1_F) // allumer le chiffre else Maj_Etat_Signal_belge(AdrFeu,chiffre_F); // effacer le chiffre @@ -8651,10 +8652,10 @@ begin if AffSignal then AfficheDebug('Pas d''aiguille déviée',clYellow); // feu vert, vert cli ou blanc //if affsignal then AfficheDebug('test 405',clyellow); - if feux[index].checkFB<>nil then + if Signaux[index].checkFB<>nil then begin //if affsignal then AfficheDebug('test 406',clyellow); - if feux[index].checkFB.Checked then + if Signaux[index].checkFB.Checked then Maj_Etat_Signal_belge(AdrFeu,rouge_blanc) else Maj_Etat_Signal_belge(AdrFeu,vertB); end @@ -8673,18 +8674,18 @@ begin // si le signal n'est pas rouge, réserver les aiguillages en aval if (roulage or AvecResa) and (AdrTrainLoc<>0) then begin - etat:=feux[index].EtatSignal; + etat:=Signaux[index].EtatSignal; if not(signal_rouge(AdrFeu)) then begin - adr_Det:=feux[index].Adr_det1; + adr_Det:=Signaux[index].Adr_det1; if detecteur[adr_det].Etat then begin - if feux[index].Btype_suiv1<>det then detSuiv:=detecteur_suivant(feux[index].Adr_det1,det,feux[index].Adr_el_suiv1,feux[index].Btype_suiv1,1) - else detSuiv:=feux[index].Adr_el_suiv1; + if Signaux[index].Btype_suiv1<>det then detSuiv:=detecteur_suivant(Signaux[index].Adr_det1,det,Signaux[index].Adr_el_suiv1,Signaux[index].Btype_suiv1,1) + else detSuiv:=Signaux[index].Adr_el_suiv1; if detSuiv<9990 then begin - if roulage then reserve_canton(feux[index].Adr_det1,detSuiv,AdrtrainLoc,0,2) else - if AvecResa then reserve_canton(feux[index].Adr_det1,detSuiv,0,AdrtrainLoc,2) ; + if roulage then reserve_canton(Signaux[index].Adr_det1,detSuiv,AdrtrainLoc,0,2) else + if AvecResa then reserve_canton(Signaux[index].Adr_det1,detSuiv,0,AdrtrainLoc,2) ; end; end; end; @@ -8723,7 +8724,7 @@ begin if (AdrFeu=0) or (index=0) then exit; - modele:=Feux[index].aspect; + modele:=Signaux[index].aspect; if modele=20 then begin @@ -8733,9 +8734,9 @@ begin // ici signal français - Adr_det:=Feux[index].Adr_det1; // détecteur sur le signal - Adr_El_Suiv:=Feux[index].Adr_el_suiv1; // adresse élément suivant au feu - Btype_el_suivant:=Feux[index].Btype_suiv1; + Adr_det:=Signaux[index].Adr_det1; // détecteur sur le signal + Adr_El_Suiv:=Signaux[index].Adr_el_suiv1; // adresse élément suivant au feu + Btype_el_suivant:=Signaux[index].Btype_suiv1; // signal directionnel ? if (modele>10) and (modele<20) then @@ -8757,11 +8758,11 @@ begin AfficheDebug(s,clyellow); end; // signal à 2 feux = carré violet+blanc - if (modele=2) then //or (feux[i].check<>nil) then // si carré violet + if (modele=2) then //or (Signaux[i].check<>nil) then // si carré violet begin // si aiguillage après signal mal positionnées ou réservé ou pas de train avant le signal PresTrain:=PresTrainPrec(AdrFeu,Nb_cantons_Sig,detect,AdrTrainLoc,voie); - if (carre_signal(AdrFeu,AdrTrainLoc,reserveTrainTiers,AdrTrainRes)<>0) or not(PresTrain) or (feux[index].VerrouCarre) then + if (carre_signal(AdrFeu,AdrTrainLoc,reserveTrainTiers,AdrTrainRes)<>0) or not(PresTrain) or (Signaux[index].VerrouCarre) then begin Maj_Etat_Signal(AdrFeu,violet); if debug=3 then formprinc.Caption:=''; @@ -8776,11 +8777,11 @@ begin end; //if AffSignal then AfficheDebug('Debut du traitement général',clYellow); // traitement des feux >3 feux différents de violet (cas général) - if (modele>=3) and (feux[index].EtatSignal<>violet_F) then + if (modele>=3) and (Signaux[index].EtatSignal<>violet_F) then begin PresTrain:=false; // détecteurs précédent le feu , pour déterminer si leurs mémoires de zones sont à 1 pour libérer le carré - //if (Feux[index].VerrouCarre) and (modele>=4) then + //if (Signaux[index].VerrouCarre) and (modele>=4) then presTrain:=PresTrainPrec(AdrFeu,Nb_cantons_Sig,false,AdrTrainLoc,voie); //etape A // présence train par adresse train ; renvoie l'adresse du train dans AdrTrainLoc if AffSignal and roulage then AfficheDebug('L''@ du train avant le signal est '+intToSTR(AdrTrainLoc),clYellow); // si le signal peut afficher un carré et les aiguillages après le signal sont mal positionnées ou aig réservé ou que pas présence train avant signal et signal @@ -8789,12 +8790,12 @@ begin if AffSignal and reserveTrainTiers then AfficheDebug('trouvé aiguillage réservé par autre train',clYellow); if AffSignal and car then AfficheDebug('le signal a des aiguilles en talon aval mal positionnées',clYellow); // En mode roulage, si la réservation est faite par le train détecté en étape A, ne pas verrouiller au carré - if avecRESA or roulage then car:=(reserveTrainTiers and feux[index].VerrouCarre) or car; // tenir compte de la réservation si on est en mode avec réservation des aiguillages + if avecRESA or roulage then car:=(reserveTrainTiers and Signaux[index].VerrouCarre) or car; // tenir compte de la réservation si on est en mode avec réservation des aiguillages // conditions supplémentaires de carré en fonction des aiguillages décrits car:=cond_carre(AdrFeu) or car; //if AffSignal and car then AfficheDebug('le signal a des aiguilles en talon aval mal positionnées',clYellow); - if AffSignal and feux[index].VerrouCarre then AfficheDebug('le signal est verrouillé au carré',clYellow); - if (modele>=4) and ((not(PresTrain) and feux[index].Verroucarre) or car ) then Maj_Etat_Signal(AdrFeu,carre) + if AffSignal and Signaux[index].VerrouCarre then AfficheDebug('le signal est verrouillé au carré',clYellow); + if (modele>=4) and ((not(PresTrain) and Signaux[index].Verroucarre) or car ) then Maj_Etat_Signal(AdrFeu,carre) else begin // si on quitte le détecteur on affiche un sémaphore : tester le sens de circulation @@ -8805,9 +8806,9 @@ begin if Aff_Semaphore then begin if AffSignal then AfficheDebug('Présence train après signal'+intToSTR(AdrFeu)+' -> sémaphore ou carré',clYellow); - if testBit(feux[index].EtatSignal,carre)=FALSE then + if testBit(Signaux[index].EtatSignal,carre)=FALSE then begin - if feux[index].checkFR then Maj_Etat_Signal(AdrFeu,semaphore_cli) + if Signaux[index].checkFR then Maj_Etat_Signal(AdrFeu,semaphore_cli) else Maj_Etat_Signal(AdrFeu,semaphore); end; end @@ -8818,11 +8819,11 @@ begin begin Aig:=Aiguille_deviee(Adrfeu); // si aiguille locale déviée - if (aig<>0) and (feux[index].aspect>=9) then // si le signal peut afficher un rappel et aiguille déviée + if (aig<>0) and (Signaux[index].aspect>=9) then // si le signal peut afficher un rappel et aiguille déviée begin indexAig:=Index_aig(aig); if AffSignal then AfficheDebug('Aiguillage '+intToSTR(aig)+' du signal '+intToSTR(AdrFeu)+' déviée',clYellow); - feux[index].EtatSignal:=0; + Signaux[index].EtatSignal:=0; if (aiguillage[indexAig].vitesse<=30) then Maj_Etat_Signal(AdrFeu,rappel_30) else if ((aiguillage[indexAig].vitesse>30) and (aiguillage[indexAig].vitesse<=60)) then Maj_Etat_Signal(AdrFeu,rappel_60) else @@ -8851,7 +8852,7 @@ begin begin if AffSignal then AfficheDebug('pas d''aiguille déviée',clYellow); // effacer la signalisation combinée - feux[index].EtatSignal:=feux[index].EtatSignal and not($3c00); + Signaux[index].EtatSignal:=Signaux[index].EtatSignal and not($3c00); // si signal suivant rouge if signal_rouge(AdrSignalSuivant) then @@ -8865,7 +8866,7 @@ begin // si signal suivant affiche rappel if TestBit(etat,rappel_30) or TestBit(etat,rappel_60) then begin - feux[index].EtatSignal:=0; + Signaux[index].EtatSignal:=0; if TestBit(etat,rappel_30) then begin Maj_Etat_Signal(AdrFeu,ral_30); @@ -8891,10 +8892,10 @@ begin begin // feu vert, vert cli ou blanc //if affsignal then AfficheDebug('test 405',clyellow); - if feux[index].checkFB<>nil then + if Signaux[index].checkFB<>nil then begin //if affsignal then AfficheDebug('test 406',clyellow); - if feux[index].checkFB.Checked then + if Signaux[index].checkFB.Checked then begin Maj_Etat_Signal(AdrFeu,blanc); //if affsignal then AfficheDebug('Mise du feu au blanc',clyellow); @@ -8903,7 +8904,7 @@ begin end else begin - if feux[index].checkFV then Maj_Etat_Signal(AdrFeu,vert_cli) + if Signaux[index].checkFV then Maj_Etat_Signal(AdrFeu,vert_cli) else Maj_Etat_Signal(AdrFeu,vert); //if affsignal then AfficheDebug('Mise du feu au vert',clyellow); end; @@ -8921,10 +8922,10 @@ begin // si le signal n'est pas rouge avec un train sur le détecteur du signal, réserver les aiguillages en aval if (roulage or AvecResa) and (AdrTrainLoc<>0) then begin - etat:=feux[index].EtatSignal; + etat:=Signaux[index].EtatSignal; if not(signal_rouge(AdrFeu)) then begin - adr_Det:=feux[index].Adr_det1; + adr_Det:=Signaux[index].Adr_det1; if detecteur[adr_det].Etat then // détecteur doit être activé par loco begin // trouver si le signal est dans le bon sens @@ -8934,12 +8935,12 @@ begin det3:=suivant_alg3(det1, } // trouver le détecteur suivant - if feux[index].Btype_suiv1<>det then detSuiv:=detecteur_suivant(feux[index].Adr_det1,det,feux[index].Adr_el_suiv1,feux[index].Btype_suiv1,1) - else detSuiv:=feux[index].Adr_el_suiv1; + if Signaux[index].Btype_suiv1<>det then detSuiv:=detecteur_suivant(Signaux[index].Adr_det1,det,Signaux[index].Adr_el_suiv1,Signaux[index].Btype_suiv1,1) + else detSuiv:=Signaux[index].Adr_el_suiv1; if detSuiv<9990 then begin - if roulage then reserve_canton(feux[index].Adr_det1,detSuiv,AdrtrainLoc,0,2) else - if AvecResa then reserve_canton(feux[index].Adr_det1,detSuiv,0,AdrtrainLoc,2) ; + if roulage then reserve_canton(Signaux[index].Adr_det1,detSuiv,AdrtrainLoc,0,2) else + if AvecResa then reserve_canton(Signaux[index].Adr_det1,detSuiv,0,AdrtrainLoc,2) ; end; end; end; @@ -8958,9 +8959,9 @@ begin if not(maj_feux_cours) then begin Maj_feux_cours:=TRUE; - for i:=1 to NbreFeux do + for i:=1 to NbreSignaux do begin - Maj_feu(Feux[i].Adresse,detect); + Maj_feu(Signaux[i].Adresse,detect); end; Maj_feux_cours:=FALSE; end; @@ -8993,8 +8994,8 @@ begin end; actuel:=det1; typeAct:=det; - suiv:=feux[i].Adr_el_suiv1; - typSuiv:=feux[i].Btype_suiv1; + suiv:=Signaux[i].Adr_el_suiv1; + typSuiv:=Signaux[i].Btype_suiv1; if suiv=det2 then begin signal_sens:=true; @@ -9080,7 +9081,7 @@ begin if not(cas2) then AdrSig:=signal_suivant_det(detecteur1,detecteur2); // signal suivant dans le bon sens if traceListe then afficheDebug('Le signal est '+intToSTR(AdrSig)+' ',clyellow); - etat:=feux[Index_Signal(AdrSig)].etatSignal; + etat:=Signaux[Index_Signal(AdrSig)].etatSignal; rouge:=signal_rouge(AdrSig); if rouge then begin @@ -9194,14 +9195,14 @@ begin couleur:=CouleurTrain[i2]; index_train:=index_train_adresse(adrTrain); // index du tableau trains - adresse:=feux[i].adresse; //voir si il est dans le bon sens + adresse:=Signaux[i].adresse; //voir si il est dans le bon sens adresse2:=signal_suivant_det(det1,det2); // renvoie le signal suivant dans le sens det1 det2 if adresse<>adresse2 then exit; // non pas dans le bon sens - etat:=feux[i].EtatSignal; + etat:=Signaux[i].EtatSignal; - rouge:=signal_rouge(feux[i].adresse); + rouge:=signal_rouge(Signaux[i].adresse); jauneC:=testbit(etat,jaune) or testbit(etat,blanc) or testbit(etat,blanc_cli); rappel30C:=testbit(etat,rappel_30); rappel60C:=testbit(etat,rappel_60); @@ -9688,7 +9689,7 @@ begin Maj_Feu(j,false); k:=Index_Signal(j); // si le feu j est au rouge - etatSig:=feux[k].etatsignal; + etatSig:=Signaux[k].etatsignal; if (testBit(etatSig,carre)) or (testBit(etatSig,semaphore)) or (testBit(etatSig,semaphore_cli)) then begin // Maj du signal précédent (pour l'avertissement) @@ -9892,14 +9893,14 @@ begin end; // vérifier si le détecteur du nouveau train est associé à un feu vers un buttoir - for i:=1 to NbreFeux do + for i:=1 to NbreSignaux do begin - AdrFeu:=Feux[i].Adresse; - AdrDetfeu:=Feux[i].Adr_Det1; - if (AdrDetFeu=Det3) and (feux[i].aspect<10) then + AdrFeu:=Signaux[i].Adresse; + AdrDetfeu:=Signaux[i].Adr_Det1; + if (AdrDetFeu=Det3) and (Signaux[i].aspect<10) then begin - AdrSuiv:=Feux[i].Adr_el_suiv1; - TypeSuiv:=Feux[i].Btype_suiv1; + AdrSuiv:=Signaux[i].Adr_el_suiv1; + TypeSuiv:=Signaux[i].Btype_suiv1; AdrPrec:=detecteur_suivant(AdrSuiv,typeSuiv,AdrDetFeu,det,1) ; // détecteur précédent le feu ; algo 1 if AdrPrec=0 then begin @@ -10333,7 +10334,7 @@ begin Affiche(st+' Train='+trainDecl+' Accessoire '+IntToSTR(access)+':'+intToSTR(sortie),clyellow); // exécution la fonction accessoire vers CDM - if Tablo_actionneur[i].RAZ then Ts:=aigP else Ts:=Feu; + if Tablo_actionneur[i].RAZ then Ts:=aigP else Ts:=signal; pilote_acc(access,sortie,Ts); // sans RAZ end; @@ -10377,7 +10378,7 @@ begin Affiche('Ouverture PN'+intToSTR(i)+' par act '+intToSTr(adr)+' (train voie '+IntToSTR(v)+')',clOrange); if tablo_pn[i].TypeCde=0 then begin - if Tablo_PN[i].pulse=1 then ts:=aigP else ts:=feu; + if Tablo_PN[i].pulse=1 then ts:=aigP else ts:=signal; pilote_acc(Tablo_PN[i].AdresseOuvre,Tablo_PN[i].CommandeOuvre,ts); end else @@ -10400,7 +10401,7 @@ begin Affiche(sDecl,clOrange); if tablo_pn[i].TypeCde=0 then begin - if Tablo_PN[i].pulse=1 then ts:=aigP else ts:=feu; + if Tablo_PN[i].pulse=1 then ts:=aigP else ts:=signal; pilote_acc(Tablo_PN[i].AdresseFerme,Tablo_PN[i].CommandeFerme,ts); end else @@ -10434,7 +10435,7 @@ begin //if AffAigDet then AfficheDebug(s,clorange); if tablo_pn[i].TypeCde=0 then begin - if Tablo_PN[i].pulse=1 then ts:=aigP else ts:=feu; + if Tablo_PN[i].pulse=1 then ts:=aigP else ts:=signal; pilote_acc(Tablo_PN[i].AdresseOuvre,Tablo_PN[i].CommandeOuvre,ts); end else @@ -10457,7 +10458,7 @@ begin affiche(sDecl,clorange); if tablo_pn[i].TypeCde=0 then begin - if Tablo_PN[i].pulse=1 then ts:=aigP else ts:=feu; + if Tablo_PN[i].pulse=1 then ts:=aigP else ts:=signal; pilote_acc(Tablo_PN[i].AdresseFerme,Tablo_PN[i].CommandeFerme,ts); end else @@ -10617,15 +10618,15 @@ begin if not(confignulle) then //explore les signaux pour voir si on démarre d'un buttoir - for i:=1 to NbreFeux do + for i:=1 to NbreSignaux do begin - AdrFeu:=Feux[i].Adresse; - AdrDetfeu:=Feux[i].Adr_Det1; - if (AdrDetFeu=Adresse) and (feux[i].aspect<10) then + AdrFeu:=Signaux[i].Adresse; + AdrDetfeu:=Signaux[i].Adr_Det1; + if (AdrDetFeu=Adresse) and (Signaux[i].aspect<10) then begin - AdrSuiv:=Feux[i].Adr_el_suiv1; - TypeSuiv:=Feux[i].Btype_suiv1; + AdrSuiv:=Signaux[i].Adr_el_suiv1; + TypeSuiv:=Signaux[i].Btype_suiv1; if AffSignal then AfficheDebug('Pour signal '+intToSTR(AdrFeu)+' detecteursuivant('+intToSTR(AdrSuiv)+','+BTypeToChaine(typeSuiv)+','+intToSTR(AdrDetFeu)+',1)',clyellow); AdrPrec:=detecteur_suivant(AdrSuiv,typeSuiv,AdrDetFeu,det,1) ; // détecteur précédent le feu, algo 1 if AdrPrec=0 then @@ -10903,7 +10904,7 @@ begin if CDM_connecte then begin //AfficheDebug(intToSTR(adresse),clred); - if debug_dec_sig and (acc=feu) then AfficheDebug('Tick='+IntToSTR(Tick)+' signal '+intToSTR(adresse)+' '+intToSTR(pilotage),clorange); + if debug_dec_sig and (acc=signal) then AfficheDebug('Tick='+IntToSTR(Tick)+' signal '+intToSTR(adresse)+' '+intToSTR(pilotage),clorange); if aff_acc then Affiche('Accessoire '+intToSTR(adresse)+' à '+intToSTR(pilotage),clorange); if pilotage=1 then pilotageCDM:=1; // 3 = wrong state or value if pilotage=2 then pilotageCDM:=2; @@ -10934,12 +10935,12 @@ begin // pilotage à 1 s:=#$52+Char(groupe)+char(fonction or $88); // activer la sortie s:=checksum(s); - if debug_dec_sig and (acc=feu) then AfficheDebug('Tick='+IntToSTR(Tick)+' signal '+intToSTR(adresse)+' '+intToSTR(pilotage),clorange); + if debug_dec_sig and (acc=signal) then AfficheDebug('Tick='+IntToSTR(Tick)+' signal '+intToSTR(adresse)+' '+intToSTR(pilotage),clorange); envoi(s); // envoi de la trame et attente Ack event_aig(adresse,pilotage); // si l'accessoire est un feu et sans raz des signaux, sortir - if (acc=feu) and not(Raz_Acc_signaux) then exit; + if (acc=signal) and not(Raz_Acc_signaux) then exit; // si aiguillage, faire une temporisation //if (Index_Signal(adresse)=0) or (Acc=aig) then @@ -10952,7 +10953,7 @@ begin // pilotage à 0 pour éteindre le pilotage de la bobine du relais s:=#$52+Char(groupe)+char(fonction or $80); // désactiver la sortie s:=checksum(s); - if debug_dec_sig and (acc=feu) then AfficheDebug('Tick='+IntToSTR(Tick)+' signal '+intToSTR(adresse)+' 0',clorange); + if debug_dec_sig and (acc=signal) then AfficheDebug('Tick='+IntToSTR(Tick)+' signal '+intToSTR(adresse)+' 0',clorange); envoi(s); // envoi de la trame et attente Ack result:=true; exit; @@ -11881,7 +11882,8 @@ begin if i>NbMaxi_Periph then exit; s:=Tablo_periph[i].protocole; - if length(s)>1 then if upcase(s[1])='C' then result:=1 else result:=2; + if pos('COM',uppercase(s))<>0 then result:=1; + if Ipok(s) then result:=2; end; function connecte_socket_periph(index :integer) : boolean; @@ -12153,33 +12155,6 @@ begin end; end; -// envoie des touches pour simuler un appui clavier -procedure SendKey(Wnd,VK : Cardinal; Ctrl,Alt,Shift : Boolean); -var MC,MA,MS : Boolean; -begin - // Etats des touches spéciales - MC:=Hi(GetAsyncKeyState(VK_CONTROL))>127; - MA:=Hi(GetAsyncKeyState(VK_MENU))>127; - MS:=Hi(GetAsyncKeyState(VK_SHIFT))>127; - - // Simulation des touches de contrôle - if Ctrl<>MC then keybd_event(VK_CONTROL,0,Byte(MC)*KEYEVENTF_KEYUP,0); - if Alt<>MA then keybd_event(VK_MENU,0,Byte(MA)*KEYEVENTF_KEYUP,0); - if Shift<>MS then keybd_event(VK_SHIFT,0,Byte(MS)*KEYEVENTF_KEYUP,0); - - // Appui sur les touches - keybd_event(VK,0,0,0); - keybd_event(VK,0,KEYEVENTF_KEYUP,0); - -// keybd_event(MapVirtualKeyA(VK,0),0,0,0); -// keybd_event(MapVirtualKeyA(VK,0),0,KEYEVENTF_KEYUP,0); - - // Relâchement des touches si nécessaire - if Ctrl<>MC then keybd_event(VK_CONTROL,0,Byte(Ctrl)*KEYEVENTF_KEYUP,0); - if Alt<>MA then keybd_event(VK_MENU,0,Byte(Alt)*KEYEVENTF_KEYUP,0); - if Shift<>MS then keybd_event(VK_SHIFT,0,Byte(Shift)*KEYEVENTF_KEYUP,0); -end; - // conversion d'une chaine standard en chaîne VK (virtual key) pour envoyer des évènements clavier // 112=F1 .. 135=F20 136 à 143 rien 145 à 159 : spécifique ou non utilisé // $A0 .. $B0 : contrôles curseur @@ -12233,15 +12208,18 @@ begin Affiche('CDM déjà lancé',clOrange); Lance_CDM:=true; if CDM_connecte then exit; - deconnecte_USB; - connecte_CDM; + if avecSocket then + begin + deconnecte_USB; + connecte_CDM; + end; exit; end; s:=''; if lay<>'' then s:='-f '+lay; // lay - if not(serveurIPCDM_Touche) then s:=s+' -COMIPC'; // démarre serveur comipc + if not(serveurIPCDM_Touche) and avecSocket then s:=s+' -COMIPC'; // démarre serveur comipc cdm_lanceLoc:=false; // lancement depuis le répertoire 32 bits d'un OS64 @@ -12342,18 +12320,32 @@ begin KeybdInput(VK_SPACE,0);KeybdInput(VK_SPACE,KEYEVENTF_KEYUP); SendInput(Length(KeyInputs), KeyInputs[0], SizeOf(KeyInputs[0]));SetLength(KeyInputs,0); Sleep(400); - + // Interface - if (ServeurInterfaceCDM=1) or (ServeurInterfaceCDM=7) then + if (ServeurInterfaceCDM=1) or (ServeurInterfaceCDM=5) then begin for i:=1 to ServeurRetroCDM-1 do begin KeybdInput(VK_DOWN,0);KeybdInput(VK_DOWN,KEYEVENTF_KEYUP); SendInput(Length(KeyInputs),KeyInputs[0],SizeOf(KeyInputs[0]));SetLength(KeyInputs,0); end; + // 2x TAB pour pointer sur OK KeybdInput(VK_TAB,0);KeybdInput(VK_TAB,KEYEVENTF_KEYUP); KeybdInput(VK_TAB,0);KeybdInput(VK_TAB,KEYEVENTF_KEYUP); + + if Z21 and (ServeurInterfaceCDM=1) then + begin + // 1x monte + KeybdInput(VK_UP,0);KeybdInput(VK_UP,KEYEVENTF_KEYUP); + // ESPACE pour sélectionner Z21 + KeybdInput(VK_SPACE,0);KeybdInput(VK_SPACE,KEYEVENTF_KEYUP); + // TAB pour sélectionner OK + KeybdInput(VK_TAB,0);KeybdInput(VK_TAB,KEYEVENTF_KEYUP); + SendInput(Length(KeyInputs),KeyInputs[0],SizeOf(KeyInputs[0]));SetLength(KeyInputs,0); + Sleep(200); + end; + KeybdInput(VK_SPACE,0);KeybdInput(VK_SPACE,KEYEVENTF_KEYUP); // valide la fenetre d'interface SendInput(Length(KeyInputs), KeyInputs[0], SizeOf(KeyInputs[0]));SetLength(KeyInputs,0); @@ -12455,11 +12447,11 @@ begin { ralentit au démarrage for i:=1 to NbreFeux do begin - typeFeu:=feux[i].aspect; - if TypeFeu=2 then feux[i].EtatSignal:=violet_F; - if TypeFeu=3 then feux[i].EtatSignal:=semaphore_F; - if (TypeFeu>3) and (TypeFeu<10) then feux[i].EtatSignal:=carre_F; - envoi_signal(feux[i].adresse); + typeFeu:=Signaux[i].aspect; + if TypeFeu=2 then Signaux[i].EtatSignal:=violet_F; + if TypeFeu=3 then Signaux[i].EtatSignal:=semaphore_F; + if (TypeFeu>3) and (TypeFeu<10) then Signaux[i].EtatSignal:=carre_F; + envoi_signal(Signaux[i].adresse); end; } end; @@ -12731,7 +12723,7 @@ begin NbDecodeur:= 11; NbDecodeurdeBase:=NbDecodeur; - Decodeur[0]:='Rien';Decodeur[1]:='Digital Bahn 10';Decodeur[2]:='CDF';Decodeur[3]:='LS-DEC-SNCF';Decodeur[4]:='LEB'; + Decodeur[0]:='Rien';Decodeur[1]:='Digital Bahn';Decodeur[2]:='CDF';Decodeur[3]:='LS-DEC-SNCF';Decodeur[4]:='LEB'; Decodeur[5]:='Digikeijs 4018';Decodeur[6]:='Unisemaf Paco';Decodeur[7]:='Stéphane Ravaut';Decodeur[8]:='Arcomora'; Decodeur[9]:='LS-DEC-NMBS';Decodeur[10]:='B-models'; @@ -12828,7 +12820,7 @@ begin if NbreImagePLigne=0 then NbreImagePLigne:=1; // ajoute les images des signaux dynamiquement - for i:=1 to NbreFeux do + for i:=1 to NbreSignaux do begin if debug=1 then affiche('Création du signal '+intToSTR(i)+' ----------',clLime); cree_image(i); // et initialisation tableaux signaux @@ -12942,7 +12934,10 @@ begin positionne_elements(PosSplitter); end; - for index:=1 to 10 do formTCO[index]:=nil; + for index:=1 to 10 do + begin + formTCO[index]:=nil; + end; for index:=1 to nbreTCO do begin @@ -12966,7 +12961,7 @@ begin end; - // ouvre périphériques commandes actionneurs, car on a lu les com dans la config + // ouvre les périphériques commandes actionneurs, car on a lu les com dans la config for i:=1 to NbPeriph do begin index:=com_socket(i); // comusb ou socket ? @@ -13047,9 +13042,16 @@ begin begin if not(ConfigNulle) and not(ferme) and (AvecInitAiguillages) then begin - Affiche('Positionnement des signaux',clYellow); - init_aiguillages; // initialisation des aiguillages - envoi_signauxCplx; // initialisation des signaux + if maxaiguillage>0 then + begin + Affiche('Positionnement des aiguillages',clYellow); + init_aiguillages; // initialisation des aiguillages + end; + if NbreSignaux>0 then + begin + Affiche('Positionnement des signaux',clyellow); + envoi_signauxCplx; // initialisation des signaux + end; end; if not(AvecInitAiguillages) and not(ferme) and (parSocketLenz or portCommOuvert) and AvecDemandeAiguillages then @@ -13285,17 +13287,17 @@ begin tempsCli:=4; clignotant:=not(clignotant); // inversion du clignotant //tester chaque feu pour voir s'il y a un code de clignotement - for i:=1 to NbreFeux do + for i:=1 to NbreSignaux do begin - a:=feux[i].EtatSignal; // a = état binaire du feu - adresse:=feux[i].adresse; + a:=Signaux[i].EtatSignal; // a = état binaire du feu + adresse:=Signaux[i].adresse; // signal belge - if feux[i].aspect=20 then + if Signaux[i].aspect=20 then begin // signal belge - if TestBit(a,clignote) or feux[i].contrevoie then + if TestBit(a,clignote) or Signaux[i].contrevoie then begin - Dessine_signal_mx(Feux[i].Img.Canvas,0,0,1,1,adresse,1); + Dessine_signal_mx(Signaux[i].Img.Canvas,0,0,1,1,adresse,1); end; end else @@ -13305,14 +13307,14 @@ begin TestBit(a,rappel_60) or testBit(a,semaphore_cli) or testBit(a,vert_cli) or testbit(a,blanc_cli) then begin - Dessine_signal_mx(Feux[i].Img.Canvas,0,0,1,1,adresse,1); + Dessine_signal_mx(Signaux[i].Img.Canvas,0,0,1,1,adresse,1); //Affiche('Clignote feu '+IntToSTR(adresse),clyellow); end; end; end; // signaux du TCO----------------------------------------------- - if TCOActive then // évite d'accéder à la variable FormTCO si elle est pas encore ouverte + if TCOActive then // évite d'accéder aux variables FormTCO si la form n'est pas encore ouverte begin for IndexTCO:=1 to NbreTCO do begin @@ -13327,9 +13329,9 @@ begin begin adresse:=TCO[indexTCO,x,y].adresse; i:=Index_Signal(adresse); - a:=feux[i].EtatSignal; // a = état binaire du feu + a:=Signaux[i].EtatSignal; // a = état binaire du feu faire:=false; - if feux[i].aspect<>20 then + if Signaux[i].aspect<>20 then faire:=TestBit(a,jaune_cli) or TestBit(a,ral_60) or TestBit(a,rappel_60) or testBit(a,semaphore_cli) or testBit(a,vert_cli) or testbit(a,blanc_cli) @@ -13340,7 +13342,7 @@ begin end; if faire then begin - aspect:=feux[Index_Signal(adresse)].Aspect; + aspect:=Signaux[Index_Signal(adresse)].Aspect; case aspect of 2 : ImageFeu:=Formprinc.Image2feux; 3 : ImageFeu:=Formprinc.Image3feux; @@ -13366,8 +13368,8 @@ begin // fenêtre de pilotage manuel du signal ------------------- if AdrPilote<>0 then begin - a:=feux[0].EtatSignal; - if feux[0].aspect<>20 then + a:=Signaux[0].EtatSignal; + if Signaux[0].aspect<>20 then begin if TestBit(a,jaune_cli) or TestBit(a,ral_60) or TestBit(a,rappel_60) or testBit(a,semaphore_cli) or @@ -13380,7 +13382,7 @@ begin else begin // signal belge - if TestBit(a,clignote) or feux[0].contrevoie then Dessine_feu_pilote; + if TestBit(a,clignote) or Signaux[0].contrevoie then Dessine_feu_pilote; end; end; @@ -13388,7 +13390,7 @@ begin // fenetre de config du signal CDF if dessineCDF then begin - a:=feux[0].EtatSignal; + a:=Signaux[0].EtatSignal; if TestBit(a,jaune_cli) or TestBit(a,ral_60) or TestBit(a,rappel_60) or testBit(a,semaphore_cli) or testBit(a,vert_cli) or testbit(a,blanc_cli) then @@ -13642,7 +13644,7 @@ begin begin i:=Index_Signal(adresse); if i=0 then exit; - etat:=feux[i].EtatSignal; + etat:=Signaux[i].EtatSignal; code_to_aspect(etat,aspect,combine); // si le feu est vert et que la coche est mise, substituer le blanc if ((aspect=vert) or (aspect=vert_cli)) and coche then @@ -13671,7 +13673,7 @@ begin begin i:=Index_Signal(adresse); if i=0 then exit; - etat:=feux[i].EtatSignal; + etat:=Signaux[i].EtatSignal; // si le feu est vert et que la coche est mise, substituer le blanc if (etat=vert_f) and coche then begin @@ -13699,7 +13701,7 @@ begin begin i:=Index_Signal(adresse); if i=0 then exit; - etat:=feux[i].EtatSignal; + etat:=Signaux[i].EtatSignal; //affiche(IntToSTR(etat),clyellow); // si le feu est vert et que la coche est mise, substituer le blanc if (etat=semaphore_f) and coche then @@ -14726,60 +14728,60 @@ var nation,i,j,k,l,d,NfeuxDir,nc,asp : integer; begin Affiche('Codification interne des signaux:',ClYellow); - for i:=1 to NbreFeux do + for i:=1 to NbreSignaux do begin // feu de signalisation - s:=IntToSTR(i)+' Adr='+IntToSTR(feux[i].Adresse); - s:=s+' décodeur='+IntToStr(feux[i].decodeur); - asp:=feux[i].aspect; + s:=IntToSTR(i)+' Adr='+IntToSTR(Signaux[i].Adresse); + s:=s+' décodeur='+IntToStr(Signaux[i].decodeur); + asp:=Signaux[i].aspect; if asp<>20 then nation:=1 else nation:=2; // non directionnel if (asp<10) or (asp>=20) then begin - l:=feux[i].aspect; + l:=Signaux[i].aspect; if asp=20 then l:=5; s:=s+' SIG Nbrefeux='+intToSTR(l)+' '; - s:=s+' Det='+IntToSTR(feux[i].Adr_det1); - s:=s+' El_Suiv1='+IntToSTR(feux[i].Adr_el_suiv1)+' Type suiv1='+BTypeToChaine(feux[i].Btype_suiv1); - case feux[i].Btype_suiv1 of + s:=s+' Det='+IntToSTR(Signaux[i].Adr_det1); + s:=s+' El_Suiv1='+IntToSTR(Signaux[i].Adr_el_suiv1)+' Type suiv1='+BTypeToChaine(Signaux[i].Btype_suiv1); + case Signaux[i].Btype_suiv1 of det : s:=s+' (det) '; aig,tjs,tjd : s:=s+' (aig ou TJD-S) '; triple : s:=s+' (aig triple) '; end; - if feux[i].decodeur=6 then - s:=s+'Cible unisemaf='+intToSTR(feux[i].Unisemaf); + if Signaux[i].decodeur=6 then + s:=s+'Cible unisemaf='+intToSTR(Signaux[i].Unisemaf); // conditions sur carré l:=1; repeat - nc:=Length(feux[i].condcarre[l])-1 ; + nc:=Length(Signaux[i].condcarre[l])-1 ; if (nc>0) and (l=1) then begin Affiche(s,clYellow);s:='';end; // pour afficher sur 2 lignes for k:=1 to nc do begin - s:=s+'A'+IntToSTR(feux[i].condcarre[l][k].Adresse)+feux[i].condcarre[l][k].PosAig; + s:=s+'A'+IntToSTR(Signaux[i].condcarre[l][k].Adresse)+Signaux[i].condcarre[l][k].PosAig; if k0 then s:=s+'/'; until (nc<=0) or (l>6); - if feux[i].decodeur=7 then + if Signaux[i].decodeur=7 then begin s:=s+' SR('; for l:=1 to 8 do begin - s:=s+intToSTR(feux[i].SR[l].sortie1)+','; - s:=s+intToSTR(feux[i].SR[l].sortie0); + s:=s+intToSTR(Signaux[i].SR[l].sortie1)+','; + s:=s+intToSTR(Signaux[i].SR[l].sortie0); if l<8 then s:=s+'/' else s:=s+')'; end; end; - if (feux[i].decodeur=2) or (feux[i].decodeur=5) then + if (Signaux[i].decodeur=2) or (Signaux[i].decodeur=5) then begin s:=s+' MOT('; for l:=1 to 19 do begin - s:=s+intToSTR(feux[i].SR[l].sortie1); + s:=s+intToSTR(Signaux[i].SR[l].sortie1); if l<19 then s:=s+',' else s:=s+')'; end; end; @@ -14787,7 +14789,7 @@ begin k:=1; s:=s+'Dét amont niv 2 : '; repeat - d:=feux[i].DetAmont[k]; + d:=Signaux[i].DetAmont[k]; if d<>0 then begin s:=s+IntToSTR(d)+' '; @@ -14800,14 +14802,14 @@ begin else // feu directionnel begin - s:=s+' DIR Nbrefeux='+IntToSTR(feux[i].aspect-10)+' '; - NfeuxDir:=feux[i].aspect-10; + s:=s+' DIR Nbrefeux='+IntToSTR(Signaux[i].aspect-10)+' '; + NfeuxDir:=Signaux[i].aspect-10; for j:=1 to NfeuxDir+1 do begin s:=s+'('; - for k:=1 to Length(feux[i].AigDirection[j])-1 do + for k:=1 to Length(Signaux[i].AigDirection[j])-1 do begin - s:=s+IntToSTR(feux[i].AigDirection[j][k].adresse) + feux[i].AigDirection[j][k].posaig+' '; + s:=s+IntToSTR(Signaux[i].AigDirection[j][k].adresse) + Signaux[i].AigDirection[j][k].posaig+' '; end; s:=s+')'; end; @@ -15207,9 +15209,9 @@ procedure TFormPrinc.Etatdessignaux1Click(Sender: TObject); var Adr,i : integer; s : string; begin - for i:=1 to NbreFeux do + for i:=1 to NbreSignaux do begin - Adr:=Feux[i].Adresse; + Adr:=Signaux[i].Adresse; s:='Signal '+IntToSTR(Adr)+' Etat='; s:=s+chaine_signal(adr); Affiche(s,clYellow); @@ -15331,7 +15333,7 @@ begin t:=t+t1*NbreCellX[i]*NbreCellY[i]; Affiche('Taille des '+intToSTR(NbreTCO)+' TCOs : '+intToSTR(t)+' octets',clOrange); Affiche('Taille des aiguillages : '+intToSTR(SizeOf(aiguillage) )+' octets',clorange); - Affiche('Taille des signaux : '+intToSTR(SizeOf(feux) )+' octets',clorange); + Affiche('Taille des signaux : '+intToSTR(SizeOf(Signaux) )+' octets',clorange); Affiche('Taille des branches : '+intToSTR(SizeOf(brancheN) )+' octets',clorange); Affiche('Taille des actionneurs standards: '+intToSTR(SizeOf(Tablo_actionneur))+' octets',clorange); Affiche('Taille des actionneurs PN: '+intToSTR(SizeOf(Tablo_PN) )+' octets',clorange); @@ -15360,10 +15362,10 @@ var s,ss : string; code : word; begin i:=index_signal(adresse); - n:=feux[i].aspect; + n:=Signaux[i].aspect; if (n>10) and (n<20) then exit; if n=20 then nation:=2 else nation:=1; - code:=feux[i].EtatSignal; + code:=Signaux[i].EtatSignal; code_to_aspect(code,aspect,combine); //s:='Signal ad'+IntToSTR(adresse)+'='+chaine_signal(adresse); //Affiche(s,clYellow); @@ -15398,9 +15400,9 @@ begin else s:=s+'Des aiguillages ou des croisements en aval du signal ('+ss+') sont réservés par le train (@'+intToSTR(AdrTrainRes)+')'+#13 end; if Cond_Carre(Adresse) then s:=s+'les aiguillages déclarés dans la définition du signal sont mal positionnés'+#13; - if feux[i].VerrouCarre and not(PresTrainPrec(Adresse,Nb_cantons_Sig,false,TrainReserve,voie)) then s:=s+'le signal est verrouillable au carré et aucun train n''est présent avant le signal'+#13; + if Signaux[i].VerrouCarre and not(PresTrainPrec(Adresse,Nb_cantons_Sig,false,TrainReserve,voie)) then s:=s+'le signal est verrouillable au carré et aucun train n''est présent avant le signal'+#13; if test_memoire_zones(Adresse) then s:=s+'présence train dans canton suivant le signal'+#13; - if feux[i].EtatVerrouCarre then s:=s+'le signal est verrouillé au carré dans la fenêtre de pilotage'+#13; + if Signaux[i].EtatVerrouCarre then s:=s+'le signal est verrouillé au carré dans la fenêtre de pilotage'+#13; end; if (aspect=vert_jaune_H) and (nation=2) then @@ -15422,9 +15424,9 @@ begin if AdrAig<>0 then s:=s+'les aiguillages en aval du signal sont mal positionnés (A'+intToSTr(AdrAig)+') ou leur positions inconnues'+#13; if reserveTrainTiers then s:=s+'un aiguillage ou un croisement en aval du signal sont réservés par un autre train (@'+intToSTR(AdrTrainRes)+')'+#13; if Cond_Carre(Adresse) then s:=s+'les aiguillages déclarés dans la définition du signal sont mal positionnés'+#13; - if feux[i].VerrouCarre and not(PresTrainPrec(Adresse,Nb_cantons_Sig,false,TrainReserve,voie)) then s:=s+'le signal est verrouillable au carré et aucun train n''est présent avant le signal'+#13; + if Signaux[i].VerrouCarre and not(PresTrainPrec(Adresse,Nb_cantons_Sig,false,TrainReserve,voie)) then s:=s+'le signal est verrouillable au carré et aucun train n''est présent avant le signal'+#13; if test_memoire_zones(Adresse) then s:=s+'présence train dans canton suivant le signal'+#13; - if feux[i].EtatVerrouCarre then s:=s+'le signal est verrouillé au rouge dans la fenêtre de pilotage'+#13; + if Signaux[i].EtatVerrouCarre then s:=s+'le signal est verrouillé au rouge dans la fenêtre de pilotage'+#13; end; end; // avertissement ou deux-jaunes (belge) @@ -15469,13 +15471,13 @@ begin combine:=code and $1C0; if testbit(combine,chiffre) then begin - aig:=feux[i].Adr_el_suiv1; + aig:=Signaux[i].Adr_el_suiv1; aig:=index_aig(aig); s:=s+'le signal doit être franchi à <'+intToSTR(aiguillage[aig].vitesse)+'km/h'+#13; end; if testbit(combine,chevron) then begin - aig:=feux[i].Adr_el_suiv1; + aig:=Signaux[i].Adr_el_suiv1; aig:=index_aig(aig); s:=s+'l''aiguillage mène à une voie en contresens'+#13; end; @@ -15491,7 +15493,7 @@ begin s:=((Tpopupmenu(Tmenuitem(sender).GetParentMenu).PopupComponent) as TImage).name; // nom du composant, pout récupérer l'adresse du feu (ex: ImageFeu260) //Affiche(s,clOrange); // nom de l'image du signal (ex: ImageFeu2) i:=extract_int(s); // extraire l'index (ex 2) - adresse:=feux[i].adresse; + adresse:=Signaux[i].adresse; s:=InfoSignal(adresse); Affiche_CR(s,clyellow); @@ -15960,10 +15962,14 @@ begin begin sleep(400); s2:='CDR'; + //SetBackgroundWindow(formprinc.Handle); // met SC devant ProcessRunning(s2); // récupérer le handle de CDM SetForegroundWindow(CDMhd); + SetActiveWindow(CdmHd); Application.ProcessMessages; - sleep(300); + sleep(900); + Application.ProcessMessages; + KeybdInput(VK_MENU,0); // enfonce Alt KeybdInput(vk_decimal,0); @@ -16843,24 +16849,26 @@ begin end; end; +// télécommande de signaux complexes par les clients function telecommande(s : string) : boolean; var adresse,i,erreur : integer; begin result:=false; s:=uppercase(s); - if s='' then + // --- commandes sans paramètres + if pos('',s)<>0 then begin Lance_CDM(true); result:=true; end; - if s='' then + if pos('',s)<>0 then begin if cdmHd=0 then exit; if not(cdmDevant) then ShowWindow(CDMhd,SW_MINIMIZE) else ShowWindow(CDMhd,SW_MAXIMIZE); cdmDevant:=not(cdmDevant); result:=true; end; - if s='' then + if pos('',s)<>0 then begin with formprinc do begin @@ -16870,6 +16878,8 @@ begin end; result:=true; end; + + // --- commandes avec paramètres if copy(s,1,4)='const_inconnu then aiguillage[i].posInit:=p; + if (p<>const_inconnu) and (aiguillage[i].modele<>crois) then + begin + aiguillage[i].posInit:=p; + tsi:=true; + end; end; config_modifie:=true; - Affiche('La position initiale des aiguillages dont la position est connue a été mise à jour',clYellow); + if tsi then Affiche('La position initiale des aiguillages dont la position est connue a été mise à jour',clYellow) + else affiche('Aucun aiguillage n''a de position connue',clorange); end; procedure TFormPrinc.ServerSocketAccept(Sender: TObject; @@ -17042,14 +17059,12 @@ begin Affiche('Client '+intToSTR(n)+' '+Socket.remoteAddress+':'+intToSTR(Socket.RemotePort)+':'+intToSTR(Socket.LocalPort)+' connecté',clyellow); end; - - +// réception de données des clients de signaux complexes procedure TFormPrinc.ServerSocketClientRead(Sender: TObject;Socket: TCustomWinSocket); var s :string; begin s:=socket.ReceiveText; if not(telecommande(s)) then Affiche(s,clWhite); - end; procedure TFormPrinc.ServerSocketClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); diff --git a/UnitSR.pas b/UnitSR.pas index f10f6db..cae9c66 100644 --- a/UnitSR.pas +++ b/UnitSR.pas @@ -196,75 +196,75 @@ begin LabelAdrSR7.caption:=intToSTR(Adr+6); LabelAdrSR8.caption:=intToSTR(Adr+7); - ComboBoxAdr1.ItemIndex:=feux[indexSig].SR[1].sortie1; - ComboBoxAdr2.ItemIndex:=feux[indexSig].SR[1].sortie0; - ComboBoxAdr3.ItemIndex:=feux[indexSig].SR[2].sortie1; - ComboBoxAdr4.ItemIndex:=feux[indexSig].SR[2].sortie0; - ComboBoxAdr5.ItemIndex:=feux[indexSig].SR[3].sortie1; - ComboBoxAdr6.ItemIndex:=feux[indexSig].SR[3].sortie0; - ComboBoxAdr7.ItemIndex:=feux[indexSig].SR[4].sortie1; - ComboBoxAdr8.ItemIndex:=feux[indexSig].SR[4].sortie0; - ComboBoxAdr9.ItemIndex:=feux[indexSig].SR[5].sortie1; - ComboBoxAdr10.ItemIndex:=feux[indexSig].SR[5].sortie0; - ComboBoxAdr11.ItemIndex:=feux[indexSig].SR[6].sortie1; - ComboBoxAdr12.ItemIndex:=feux[indexSig].SR[6].sortie0; - ComboBoxAdr13.ItemIndex:=feux[indexSig].SR[7].sortie1; - ComboBoxAdr14.ItemIndex:=feux[indexSig].SR[7].sortie0; - ComboBoxAdr15.ItemIndex:=feux[indexSig].SR[8].sortie1; - ComboBoxAdr16.ItemIndex:=feux[indexSig].SR[8].sortie0; + ComboBoxAdr1.ItemIndex:=Signaux[indexSig].SR[1].sortie1; + ComboBoxAdr2.ItemIndex:=Signaux[indexSig].SR[1].sortie0; + ComboBoxAdr3.ItemIndex:=Signaux[indexSig].SR[2].sortie1; + ComboBoxAdr4.ItemIndex:=Signaux[indexSig].SR[2].sortie0; + ComboBoxAdr5.ItemIndex:=Signaux[indexSig].SR[3].sortie1; + ComboBoxAdr6.ItemIndex:=Signaux[indexSig].SR[3].sortie0; + ComboBoxAdr7.ItemIndex:=Signaux[indexSig].SR[4].sortie1; + ComboBoxAdr8.ItemIndex:=Signaux[indexSig].SR[4].sortie0; + ComboBoxAdr9.ItemIndex:=Signaux[indexSig].SR[5].sortie1; + ComboBoxAdr10.ItemIndex:=Signaux[indexSig].SR[5].sortie0; + ComboBoxAdr11.ItemIndex:=Signaux[indexSig].SR[6].sortie1; + ComboBoxAdr12.ItemIndex:=Signaux[indexSig].SR[6].sortie0; + ComboBoxAdr13.ItemIndex:=Signaux[indexSig].SR[7].sortie1; + ComboBoxAdr14.ItemIndex:=Signaux[indexSig].SR[7].sortie0; + ComboBoxAdr15.ItemIndex:=Signaux[indexSig].SR[8].sortie1; + ComboBoxAdr16.ItemIndex:=Signaux[indexSig].SR[8].sortie0; - etat_SR(feux[indexSig].SR[1].sortie1,etat1,etat2); + etat_SR(Signaux[indexSig].SR[1].sortie1,etat1,etat2); labelCV1.Caption:='CV='+IntToSTR(etat1); labelCV2.Caption:='CV='+IntToSTR(etat2); - etat_SR(feux[indexSig].SR[1].sortie0,etat1,etat2); + etat_SR(Signaux[indexSig].SR[1].sortie0,etat1,etat2); labelCV3.Caption:='CV='+IntToSTR(etat1); labelCV4.Caption:='CV='+IntToSTR(etat2); - etat_SR(feux[indexSig].SR[2].sortie1,etat1,etat2); + etat_SR(Signaux[indexSig].SR[2].sortie1,etat1,etat2); labelCV5.Caption:='CV='+IntToSTR(etat1); labelCV6.Caption:='CV='+IntToSTR(etat2); - etat_SR(feux[indexSig].SR[2].sortie0,etat1,etat2); + etat_SR(Signaux[indexSig].SR[2].sortie0,etat1,etat2); labelCV7.Caption:='CV='+IntToSTR(etat1); labelCV8.Caption:='CV='+IntToSTR(etat2); - etat_SR(feux[indexSig].SR[3].sortie1,etat1,etat2); + etat_SR(Signaux[indexSig].SR[3].sortie1,etat1,etat2); labelCV9.Caption:='CV='+IntToSTR(etat1); labelCV10.Caption:='CV='+IntToSTR(etat2); - etat_SR(feux[indexSig].SR[3].sortie0,etat1,etat2); + etat_SR(Signaux[indexSig].SR[3].sortie0,etat1,etat2); labelCV11.Caption:='CV='+IntToSTR(etat1); labelCV12.Caption:='CV='+IntToSTR(etat2); - etat_SR(feux[indexSig].SR[4].sortie1,etat1,etat2); + etat_SR(Signaux[indexSig].SR[4].sortie1,etat1,etat2); labelCV13.Caption:='CV='+IntToSTR(etat1); labelCV14.Caption:='CV='+IntToSTR(etat2); - etat_SR(feux[indexSig].SR[4].sortie0,etat1,etat2); + etat_SR(Signaux[indexSig].SR[4].sortie0,etat1,etat2); labelCV15.Caption:='CV='+IntToSTR(etat1); labelCV16.Caption:='CV='+IntToSTR(etat2); - etat_SR(feux[indexSig].SR[5].sortie1,etat1,etat2); + etat_SR(Signaux[indexSig].SR[5].sortie1,etat1,etat2); labelCV17.Caption:='CV='+IntToSTR(etat1); labelCV18.Caption:='CV='+IntToSTR(etat2); - etat_SR(feux[indexSig].SR[5].sortie0,etat1,etat2); + etat_SR(Signaux[indexSig].SR[5].sortie0,etat1,etat2); labelCV19.Caption:='CV='+IntToSTR(etat1); labelCV20.Caption:='CV='+IntToSTR(etat2); - etat_SR(feux[indexSig].SR[6].sortie1,etat1,etat2); + etat_SR(Signaux[indexSig].SR[6].sortie1,etat1,etat2); labelCV21.Caption:='CV='+IntToSTR(etat1); labelCV22.Caption:='CV='+IntToSTR(etat2); - etat_SR(feux[indexSig].SR[6].sortie0,etat1,etat2); + etat_SR(Signaux[indexSig].SR[6].sortie0,etat1,etat2); labelCV23.Caption:='CV='+IntToSTR(etat1); labelCV24.Caption:='CV='+IntToSTR(etat2); - etat_SR(feux[indexSig].SR[7].sortie1,etat1,etat2); + etat_SR(Signaux[indexSig].SR[7].sortie1,etat1,etat2); labelCV25.Caption:='CV='+IntToSTR(etat1); labelCV26.Caption:='CV='+IntToSTR(etat2); - etat_SR(feux[indexSig].SR[7].sortie0,etat1,etat2); + etat_SR(Signaux[indexSig].SR[7].sortie0,etat1,etat2); labelCV27.Caption:='CV='+IntToSTR(etat1); labelCV28.Caption:='CV='+IntToSTR(etat2); - etat_SR(feux[indexSig].SR[8].sortie1,etat1,etat2); + etat_SR(Signaux[indexSig].SR[8].sortie1,etat1,etat2); labelCV29.Caption:='CV='+IntToSTR(etat1); labelCV30.Caption:='CV='+IntToSTR(etat2); - etat_SR(feux[indexSig].SR[8].sortie0,etat1,etat2); + etat_SR(Signaux[indexSig].SR[8].sortie0,etat1,etat2); labelCV31.Caption:='CV='+IntToSTR(etat1); labelCV32.Caption:='CV='+IntToSTR(etat2); @@ -289,7 +289,7 @@ begin etat_SR(i,etat1,etat2); labelCV1.Caption:='CV='+IntToSTR(etat1); labelCV2.Caption:='CV='+IntToSTR(etat2); - feux[indexSig].SR[1].sortie1:=i; + Signaux[indexSig].SR[1].sortie1:=i; maj_db; end; @@ -301,7 +301,7 @@ begin etat_SR(i,etat1,etat2); labelCV3.Caption:='CV='+IntToSTR(etat1); labelCV4.Caption:='CV='+IntToSTR(etat2); - feux[indexSig].SR[1].sortie0:=i; + Signaux[indexSig].SR[1].sortie0:=i; maj_db; end; @@ -313,7 +313,7 @@ begin etat_SR(i,etat1,etat2); labelCV5.Caption:='CV='+IntToSTR(etat1); labelCV6.Caption:='CV='+IntToSTR(etat2); - feux[indexSig].SR[2].sortie1:=i; + Signaux[indexSig].SR[2].sortie1:=i; maj_db; end; @@ -325,7 +325,7 @@ begin etat_SR(i,etat1,etat2); labelCV7.Caption:='CV='+IntToSTR(etat1); labelCV8.Caption:='CV='+IntToSTR(etat2); - feux[indexSig].SR[2].sortie0:=i; + Signaux[indexSig].SR[2].sortie0:=i; maj_db; end; @@ -337,7 +337,7 @@ begin etat_SR(i,etat1,etat2); labelCV9.Caption:='CV='+IntToSTR(etat1); labelCV10.Caption:='CV='+IntToSTR(etat2); - feux[indexSig].SR[3].sortie1:=i; + Signaux[indexSig].SR[3].sortie1:=i; maj_db; end; @@ -349,7 +349,7 @@ begin etat_SR(i,etat1,etat2); labelCV11.Caption:='CV='+IntToSTR(etat1); labelCV12.Caption:='CV='+IntToSTR(etat2); - feux[indexSig].SR[3].sortie0:=i; + Signaux[indexSig].SR[3].sortie0:=i; maj_db; end; @@ -361,7 +361,7 @@ begin etat_SR(i,etat1,etat2); labelCV13.Caption:='CV='+IntToSTR(etat1); labelCV14.Caption:='CV='+IntToSTR(etat2); - feux[indexSig].SR[4].sortie1:=i; + Signaux[indexSig].SR[4].sortie1:=i; maj_db; end; @@ -372,7 +372,7 @@ begin etat_SR(i,etat1,etat2); labelCV15.Caption:='CV='+IntToSTR(etat1); labelCV16.Caption:='CV='+IntToSTR(etat2); - feux[indexSig].SR[4].sortie0:=i; + Signaux[indexSig].SR[4].sortie0:=i; maj_db; end; @@ -383,7 +383,7 @@ begin etat_SR(i,etat1,etat2); labelCV17.Caption:='CV='+IntToSTR(etat1); labelCV18.Caption:='CV='+IntToSTR(etat2); - feux[indexSig].SR[5].sortie1:=i; + Signaux[indexSig].SR[5].sortie1:=i; maj_db; end; @@ -394,7 +394,7 @@ begin etat_SR(i,etat1,etat2); labelCV19.Caption:='CV='+IntToSTR(etat1); labelCV20.Caption:='CV='+IntToSTR(etat2); - feux[indexSig].SR[5].sortie0:=i; + Signaux[indexSig].SR[5].sortie0:=i; maj_db; end; @@ -405,7 +405,7 @@ begin etat_SR(i,etat1,etat2); labelCV21.Caption:='CV='+IntToSTR(etat1); labelCV22.Caption:='CV='+IntToSTR(etat2); - feux[indexSig].SR[6].sortie1:=i; + Signaux[indexSig].SR[6].sortie1:=i; maj_db; end; @@ -416,7 +416,7 @@ begin etat_SR(i,etat1,etat2); labelCV23.Caption:='CV='+IntToSTR(etat1); labelCV24.Caption:='CV='+IntToSTR(etat2); - feux[indexSig].SR[6].sortie0:=i; + Signaux[indexSig].SR[6].sortie0:=i; maj_db; end; @@ -427,7 +427,7 @@ begin etat_SR(i,etat1,etat2); labelCV25.Caption:='CV='+IntToSTR(etat1); labelCV26.Caption:='CV='+IntToSTR(etat2); - feux[indexSig].SR[7].sortie1:=i; + Signaux[indexSig].SR[7].sortie1:=i; maj_db; end; @@ -438,7 +438,7 @@ begin etat_SR(i,etat1,etat2); labelCV27.Caption:='CV='+IntToSTR(etat1); labelCV28.Caption:='CV='+IntToSTR(etat2); - feux[indexSig].SR[7].sortie0:=i; + Signaux[indexSig].SR[7].sortie0:=i; maj_db; end; @@ -449,7 +449,7 @@ begin etat_SR(i,etat1,etat2); labelCV29.Caption:='CV='+IntToSTR(etat1); labelCV30.Caption:='CV='+IntToSTR(etat2); - feux[indexSig].SR[8].sortie1:=i; + Signaux[indexSig].SR[8].sortie1:=i; maj_db; end; @@ -460,7 +460,7 @@ begin etat_SR(i,etat1,etat2); labelCV31.Caption:='CV='+IntToSTR(etat1); labelCV32.Caption:='CV='+IntToSTR(etat2); - feux[indexSig].SR[8].sortie0:=i; + Signaux[indexSig].SR[8].sortie0:=i; maj_db; end; diff --git a/UnitTCO.pas b/UnitTCO.pas index e85542e..164f739 100644 --- a/UnitTCO.pas +++ b/UnitTCO.pas @@ -8155,7 +8155,7 @@ var index,x0,y0,xp,yp,orientation,adresse,aspect,PiedFeu,TailleX,TailleY,larg,h Contrevoie : boolean; frX,frY : real; begin - if (x>NbreCellX[indexTCO]) or (y>NbreCellY[indexTCO]) or (x<1) or (y<1) or (NbreFeux=0) then exit; + if (x>NbreCellX[indexTCO]) or (y>NbreCellY[indexTCO]) or (x<1) or (y<1) or (NbreSignaux=0) then exit; larg:=LargeurCell[indexTCO]; haut:=hauteurCell[indexTCO]; @@ -8168,7 +8168,7 @@ begin if Orientation=0 then Orientation:=1; // cas d'un signal non encore renseigné index:=Index_Signal(adresse); - aspect:=feux[index].aspect; + aspect:=Signaux[index].aspect; if aspect=0 then aspect:=9; //if aspect>9 then exit; @@ -8250,13 +8250,13 @@ begin tco[indextco,x,y].x:=x0; tco[indextco,x,y].y:=y0; - Contrevoie:=feux[index].contrevoie; + Contrevoie:=Signaux[index].contrevoie; // affichage du signal et du pied - orientation verticale if (Orientation=1) then begin // si inversion - if feux[index].contrevoie then + if Signaux[index].contrevoie then begin inverse_image(FormTCO[indexTCO].ImageTemp,ImageFeu); // copie avec mise à l'échelle de l'image du signal @@ -8541,10 +8541,10 @@ begin if (BImage=Id_signal) and (adresse<>0) then begin index:=Index_Signal(adresse); - aspect:=feux[index].Aspect; + aspect:=Signaux[index].Aspect; oriente:=tco[indextco,x,y].FeuOriente; pied:=tco[indextco,x,y].PiedFeu; - inverse:=feux[index].contrevoie; // pour signal belge + inverse:=Signaux[index].contrevoie; // pour signal belge xt:=0;yt:=0; // signal belge if (aspect=20) then @@ -12939,7 +12939,7 @@ begin TCO_modifie:=true; adresse:=tco[indextco,XClicCell[indexTCO],YClicCell[indexTCO]].Adresse; - aspect:=feux[Index_Signal(adresse)].Aspect; + aspect:=Signaux[Index_Signal(adresse)].Aspect; if aspect=0 then aspect:=9; // ancien signal orienté orienté 90D @@ -12989,7 +12989,7 @@ begin TCO_modifie:=true; adresse:=tco[indextco,XClicCell[indexTCO],YClicCell[indexTCO]].Adresse; - aspect:=feux[Index_Signal(adresse)].Aspect; + aspect:=Signaux[Index_Signal(adresse)].Aspect; if aspect=0 then aspect:=9; // effacement de l'ancien signal @@ -13033,7 +13033,7 @@ begin TCO_modifie:=true; adresse:=tco[indextco,XClicCell[indexTCO],YClicCell[indexTCO]].Adresse; - aspect:=feux[Index_Signal(adresse)].Aspect; + aspect:=Signaux[Index_Signal(adresse)].Aspect; if aspect=0 then aspect:=9; // effacement de l'ancien signal @@ -13248,9 +13248,9 @@ begin ImagePilote.Picture.Bitmap.TransparentColor:=clblue; ImagePilote.Transparent:=true; - ImagePilote.Picture.BitMap:=feux[i].Img.Picture.Bitmap; + ImagePilote.Picture.BitMap:=Signaux[i].Img.Picture.Bitmap; LabelTitrePilote.Caption:='Pilotage du signal '+intToSTR(Adresse); - feux[0].EtatSignal:=feux[i].EtatSignal; + Signaux[0].EtatSignal:=Signaux[i].EtatSignal; LabelNbFeux.Visible:=False; EditNbreFeux.Visible:=false; @@ -13259,7 +13259,7 @@ begin efface_entoure(indexTCO); SelectionAffichee[indexTCO]:=false; - if (feux[i].aspect>10) and (feux[i].aspect<20) then + if (Signaux[i].aspect>10) and (Signaux[i].aspect<20) then begin GroupBox1.Visible:=false; GroupBox2.Visible:=false; @@ -13272,7 +13272,7 @@ begin LabelNbFeux.Visible:=False; EditNbreFeux.Visible:=false; GroupBox1.Visible:=true; - if (feux[i].aspect<20) then GroupBox2.Visible:=true else GroupBox2.Visible:=false; + if (Signaux[i].aspect<20) then GroupBox2.Visible:=true else GroupBox2.Visible:=false; end; end; end; diff --git a/Unitplace.pas b/Unitplace.pas index 13e8f0c..7b6e58e 100644 --- a/Unitplace.pas +++ b/Unitplace.pas @@ -369,7 +369,7 @@ begin if adrFeu<>0 then begin id:=index_Signal(AdrFeu); - a:=feux[id].EtatSignal; + a:=Signaux[id].EtatSignal; if ((a=semaphore_F) or (a=carre_F) or (a=violet_F)) then rouge:=true; end; diff --git a/verif_version.pas b/verif_version.pas index 1eb9b94..f4269bc 100644 --- a/verif_version.pas +++ b/verif_version.pas @@ -25,7 +25,7 @@ var verifVersion,notificationVersion : boolean; date_creation,nombre_tel : string; -Const Version='8.33'; // sert à la comparaison de la version publiée +Const Version='8.34'; // sert à la comparaison de la version publiée SousVersion=' '; // A B C ... en cas d'absence de sous version mettre un espace function GetCurrentProcessEnvVar(const VariableName: string): string; diff --git a/versions.txt b/versions.txt index 4309083..8e4bbe1 100644 --- a/versions.txt +++ b/versions.txt @@ -214,3 +214,7 @@ version 8.31 : Correction d'un bug sur les d version 8.32 : Un actionneur seul peut être déclenché par plusieurs trains. Correction du lancement du serveur COM-IP pour CDMRail V20.12. version 8.33 : Correction d'un bug sur le calcul d'index. +version 8.34 : Correction signal Unisemaf + Ajout de la Z21 dans le choix des interfaces au lancement de CDM rail. + +