From ed7935a64141fdc5322153061b48f2be4719b0b3 Mon Sep 17 00:00:00 2001 From: f1iwq2 Date: Thu, 11 Jan 2024 20:39:36 +0100 Subject: [PATCH] V8.37 --- Importation.pas | 5 +- Signaux_complexes_GL.dpr | 1 - Signaux_complexes_GL.map | 44 +-- UnitAnalyseSegCDM.pas | 22 +- UnitCDF.pas | 48 +-- UnitConfig.dfm | 12 +- UnitConfig.pas | 306 ++++++++------- UnitConfigTCO.pas | 2 + UnitPilote.pas | 42 +-- UnitPrinc.dfm | 12 +- UnitPrinc.pas | 788 +++++++++++++++++++-------------------- UnitSR.pas | 4 +- UnitTCO.pas | 8 +- Unitplace.pas | 21 +- verif_version.pas | 2 +- versions.txt | 3 +- 16 files changed, 685 insertions(+), 635 deletions(-) diff --git a/Importation.pas b/Importation.pas index 378066a..b85d1db 100644 --- a/Importation.pas +++ b/Importation.pas @@ -4,7 +4,7 @@ interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, StdCtrls, ExtCtrls; + Dialogs, StdCtrls, ExtCtrls, unitConfig, UnitPrinc; type TFormImportation = class(TForm) @@ -47,10 +47,13 @@ end; procedure TFormImportation.FormCreate(Sender: TObject); begin + if debug=1 then Affiche('Création fenetre compilation réseau CDM',clLime); radioCroisBase.Checked:=true; radioCroisSuite.checked:=false; BaseCroisement:=100; EditBaseCrois.Text:=IntToSTR(BaseCroisement); + if debug=1 then Affiche('Fin création fenetre compilation réseau CDM',clLime); + formprinc.SetFocus; // fin d'init de signaux complexes, on active la form principale end; procedure TFormImportation.CheckDebugAnalyseClick(Sender: TObject); diff --git a/Signaux_complexes_GL.dpr b/Signaux_complexes_GL.dpr index 9c93819..6fec6ed 100644 --- a/Signaux_complexes_GL.dpr +++ b/Signaux_complexes_GL.dpr @@ -18,7 +18,6 @@ uses UnitPareFeu in 'UnitPareFeu.pas', UnitAnalyseSegCDM in 'UnitAnalyseSegCDM.pas' {FormAnalyseCDM}, Importation in 'Importation.pas' {FormImportation}; - {$R *.res} begin diff --git a/Signaux_complexes_GL.map b/Signaux_complexes_GL.map index b5c325d..aacb15b 100644 --- a/Signaux_complexes_GL.map +++ b/Signaux_complexes_GL.map @@ -1,6 +1,6 @@ Start Length Name Class - 0001:00000000 001A20F8H .text CODE + 0001:00000000 001A254CH .text CODE 0002:00000000 00002C7CH .data DATA 0002:00002C7C 045DE035H .bss BSS @@ -83,22 +83,22 @@ Detailed map of segments 0001:0009A6E4 00002108 C=CODE S=.text G=(none) M=Mask ACBP=A9 0001:0009C7EC 0000924C C=CODE S=.text G=(none) M=Grids ACBP=A9 0001:000A5A38 00001980 C=CODE S=.text G=(none) M=UnitPilote ACBP=A9 - 0001:000A73B8 000004D0 C=CODE S=.text G=(none) M=Importation ACBP=A9 - 0001:000A7888 00013ACC C=CODE S=.text G=(none) M=UnitAnalyseSegCDM ACBP=A9 - 0001:000BB354 00002CA4 C=CODE S=.text G=(none) M=UnitConfigTCO ACBP=A9 - 0001:000BDFF8 00000D10 C=CODE S=.text G=(none) M=Unit_Pilote_aig ACBP=A9 - 0001:000BED08 00004DD8 C=CODE S=.text G=(none) M=UnitConfigCellTCO ACBP=A9 - 0001:000C3AE0 00045748 C=CODE S=.text G=(none) M=UnitTCO ACBP=A9 - 0001:00109228 00003160 C=CODE S=.text G=(none) M=UnitSR ACBP=A9 - 0001:0010C388 00002880 C=CODE S=.text G=(none) M=UnitCDF ACBP=A9 - 0001:0010EC08 000431B4 C=CODE S=.text G=(none) M=UnitConfig ACBP=A9 - 0001:00151DBC 00001833 C=CODE S=.text G=(none) M=verif_version ACBP=A9 - 0001:001535F0 000011D0 C=CODE S=.text G=(none) M=UnitPareFeu ACBP=A9 - 0001:001547C0 00002BC8 C=CODE S=.text G=(none) M=UnitDebug ACBP=A9 - 0001:00157388 00000D2C C=CODE S=.text G=(none) M=UnitSimule ACBP=A9 - 0001:001580B4 00002604 C=CODE S=.text G=(none) M=Unitplace ACBP=A9 - 0001:0015A6B8 000475B0 C=CODE S=.text G=(none) M=UnitPrinc ACBP=A9 - 0001:001A1C68 0000048D C=CODE S=.text G=(none) M=Signaux_complexes_GL ACBP=A9 + 0001:000A73B8 00000574 C=CODE S=.text G=(none) M=Importation ACBP=A9 + 0001:000A792C 00013B38 C=CODE S=.text G=(none) M=UnitAnalyseSegCDM ACBP=A9 + 0001:000BB464 00002D20 C=CODE S=.text G=(none) M=UnitConfigTCO ACBP=A9 + 0001:000BE184 00000D10 C=CODE S=.text G=(none) M=Unit_Pilote_aig ACBP=A9 + 0001:000BEE94 00004DD8 C=CODE S=.text G=(none) M=UnitConfigCellTCO ACBP=A9 + 0001:000C3C6C 00045748 C=CODE S=.text G=(none) M=UnitTCO ACBP=A9 + 0001:001093B4 00003160 C=CODE S=.text G=(none) M=UnitSR ACBP=A9 + 0001:0010C514 000028D4 C=CODE S=.text G=(none) M=UnitCDF ACBP=A9 + 0001:0010EDE8 00001833 C=CODE S=.text G=(none) M=verif_version ACBP=A9 + 0001:0011061C 000011D0 C=CODE S=.text G=(none) M=UnitPareFeu ACBP=A9 + 0001:001117EC 00043384 C=CODE S=.text G=(none) M=UnitConfig ACBP=A9 + 0001:00154B70 00002BC8 C=CODE S=.text G=(none) M=UnitDebug ACBP=A9 + 0001:00157738 00000D2C C=CODE S=.text G=(none) M=UnitSimule ACBP=A9 + 0001:00158464 00002678 C=CODE S=.text G=(none) M=Unitplace ACBP=A9 + 0001:0015AADC 000475E0 C=CODE S=.text G=(none) M=UnitPrinc ACBP=A9 + 0001:001A20BC 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,9 +215,9 @@ Detailed map of segments 0002:00015760 00418704 C=BSS S=.bss G=DGROUP M=UnitTCO ACBP=A9 0002:0042DE64 00000010 C=BSS S=.bss G=DGROUP M=UnitSR ACBP=A9 0002:0042DE74 00000014 C=BSS S=.bss G=DGROUP M=UnitCDF ACBP=A9 - 0002:0042DE88 000004FC C=BSS S=.bss G=DGROUP M=UnitConfig ACBP=A9 - 0002:0042E384 00000018 C=BSS S=.bss G=DGROUP M=verif_version ACBP=A9 - 0002:0042E39C 00000004 C=BSS S=.bss G=DGROUP M=UnitPareFeu ACBP=A9 + 0002:0042DE88 00000018 C=BSS S=.bss G=DGROUP M=verif_version ACBP=A9 + 0002:0042DEA0 00000004 C=BSS S=.bss G=DGROUP M=UnitPareFeu ACBP=A9 + 0002:0042DEA4 000004FC C=BSS S=.bss G=DGROUP M=UnitConfig ACBP=A9 0002:0042E3A0 0000002C C=BSS S=.bss G=DGROUP M=UnitDebug ACBP=A9 0002:0042E3CC 0000000C C=BSS S=.bss G=DGROUP M=UnitSimule ACBP=A9 0002:0042E3D8 00000008 C=BSS S=.bss G=DGROUP M=Unitplace ACBP=A9 @@ -237,8 +237,8 @@ UnitConfigCellTCO.dfm UnitTCO.dfm UnitSR.dfm UnitCDF.dfm -UnitConfig.dfm verif_version.dfm +UnitConfig.dfm UnitDebug.dfm UnitSimule.dfm Unitplace.dfm @@ -247,4 +247,4 @@ Signaux_complexes_GL.res Signaux_complexes_GL.drf -Program entry point at 0001:001A1F78 +Program entry point at 0001:001A23CC diff --git a/UnitAnalyseSegCDM.pas b/UnitAnalyseSegCDM.pas index a59bffe..703afc0 100644 --- a/UnitAnalyseSegCDM.pas +++ b/UnitAnalyseSegCDM.pas @@ -1577,8 +1577,13 @@ begin coords(x1,y1); if formAnalyseCDM.CheckConnexions.checked then begin - canvas.pen.width:=1; - canvas.Ellipse(x1-5,y1-5,x1+5,y1+5); + with canvas do + begin + pen.Color:=clOrange; + pen.width:=1; + Ellipse(x1-5,y1-5,x1+5,y1+5); + canvas.pen.Color:=clWhite; + end; end; if j<40 then begin @@ -1767,7 +1772,7 @@ begin end; end; -// renvoie si le segment est de tye aiguillage +// renvoie si le segment est de type aiguillage function segment_aig(s : string) : boolean; begin segment_aig:=(s='turnout') or (s='dbl_slip_switch') or (s='turnout_sym') or @@ -1817,7 +1822,7 @@ begin end; -// trouve les indexs Segment et port contenant le détecteur est detecteur +// trouve les index Segment et port contenant le détecteur est detecteur function trouve_IndexSegPortDetecteur(detecteur : integer;var indexSeg,indexPeriph : integer) : boolean; var i,j,p,np : integer; trouve : boolean; @@ -2630,7 +2635,7 @@ begin //else begin - // y a til un détecteur + // y a t-il un détecteur? NombrePeriph:=segment[indexSegSuivant].nperiph; j:=0;detecteur:=0; @@ -3316,10 +3321,11 @@ begin Affiche('Importation des aiguillages et des branches',clWhite); - // recopier les aiguillages + // recopier les aiguillages CDM dans signaux_complexes for i:=1 to NAig_CDM do begin Aiguillage[i].adresse:=Aig_CDM[i].adresse; + tablo_index_aiguillage[aiguillage[i].Adresse]:=i; Aiguillage[i].adrtriple:=Aig_CDM[i].adrtriple; Aiguillage[i].modele:=Aig_Cdm[i].modele; Aiguillage[i].temps:=Aig_cdm[i].temps; @@ -3504,7 +3510,7 @@ end; procedure TFormAnalyseCDM.FormCreate(Sender: TObject); begin - if debug=1 then Affiche('Création fenêtre CDM',clLime); + if debug=1 then Affiche('Création fenêtre réseau CDM',clLime); IndexClic:=0; checkPorts.Checked:=false; CheckAdresses.checked:=true; @@ -3534,7 +3540,7 @@ begin hauteurTrain:=Height; end; ArcTanHautLargTrain:=ArcTan(HauteurTrain/LargeurTrain); - if debug=1 then Affiche('Fin création fenetre CDM',clLime); + if debug=1 then Affiche('Fin création fenetre réseau CDM',clLime); end; diff --git a/UnitCDF.pas b/UnitCDF.pas index 45338dd..b98e041 100644 --- a/UnitCDF.pas +++ b/UnitCDF.pas @@ -95,7 +95,7 @@ var {$R *.dfm} -procedure dessine_feu_CDF; +procedure dessine_signal_CDF; procedure couleurs_cdf; implementation @@ -191,7 +191,7 @@ begin end; -procedure dessine_feu_CDF; +procedure dessine_signal_CDF; var i,ancienEtat : integer; Vcanvas : Tcanvas; begin @@ -223,10 +223,10 @@ end; procedure Maj_DB; var s : string; begin - s:=encode_sig_feux(index); + s:=encode_signal(index); formconfig.ListBoxSig.items[index-1]:=s; formconfig.ListBoxSig.selected[ligneClicSig]:=true; - aff_champs_sig_feux(index); + aff_champs_signaux(index); end; procedure TFormCDF.Edit1Change(Sender: TObject); @@ -237,7 +237,7 @@ begin 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; + dessine_signal_CDF; end; end; @@ -249,7 +249,7 @@ begin 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; + dessine_signal_CDF; end; end; @@ -261,7 +261,7 @@ begin 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; + dessine_signal_CDF; end; end; @@ -273,7 +273,7 @@ begin 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; + dessine_signal_CDF; end; end; @@ -285,7 +285,7 @@ begin 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; + dessine_signal_CDF; end; end; @@ -297,7 +297,7 @@ begin 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; + dessine_signal_CDF; end; end; @@ -309,7 +309,7 @@ begin 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; + dessine_signal_CDF; end; end; @@ -321,7 +321,7 @@ begin 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; + dessine_signal_CDF; end; end; @@ -333,7 +333,7 @@ begin 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; + dessine_signal_CDF; end; end; @@ -349,7 +349,7 @@ begin Maj_Etat_Signal(0,semaphore); Maj_Etat_Signal(0,jaune_cli); end; - dessine_feu_CDF; + dessine_signal_CDF; end; end; @@ -361,7 +361,7 @@ begin 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; + dessine_signal_CDF; end; end; @@ -373,7 +373,7 @@ begin 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; + dessine_signal_CDF; end; end; @@ -385,7 +385,7 @@ begin 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; + dessine_signal_CDF; end; end; @@ -397,7 +397,7 @@ begin 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; + dessine_signal_CDF; end; end; @@ -409,7 +409,7 @@ begin 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; + dessine_signal_CDF; end; end; @@ -421,7 +421,7 @@ begin 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; + dessine_signal_CDF; end; end; @@ -433,7 +433,7 @@ begin 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; + dessine_signal_CDF; end; end; @@ -445,7 +445,7 @@ begin 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; + dessine_signal_CDF; end; end; @@ -457,7 +457,7 @@ begin 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; + dessine_signal_CDF; end; end; @@ -487,7 +487,9 @@ end; procedure TFormCDF.FormCreate(Sender: TObject); begin + if debug=1 then Affiche('Fin création fenetre CDF',clLime); couleurs_cdf; + if debug=1 then Affiche('Fin création fenetre CDF',clLime); end; end. diff --git a/UnitConfig.dfm b/UnitConfig.dfm index fbc331d..179f1c8 100644 --- a/UnitConfig.dfm +++ b/UnitConfig.dfm @@ -668,7 +668,7 @@ object FormConfig: TFormConfig Top = 8 Width = 633 Height = 505 - ActivePage = TabSheetPeriph + ActivePage = TabSheetCDM Font.Charset = DEFAULT_CHARSET Font.Color = clBlack Font.Height = -11 @@ -2805,7 +2805,7 @@ object FormConfig: TFormConfig Top = 56 Width = 193 Height = 21 - ItemHeight = 13 + ItemHeight = 0 TabOrder = 0 OnChange = ComboBoxDecodeurPersoChange end @@ -2824,7 +2824,7 @@ object FormConfig: TFormConfig Width = 145 Height = 21 Style = csDropDownList - ItemHeight = 13 + ItemHeight = 0 TabOrder = 2 OnChange = ComboBoxNationChange end @@ -2870,7 +2870,7 @@ object FormConfig: TFormConfig Width = 193 Height = 21 Style = csDropDownList - ItemHeight = 13 + ItemHeight = 0 TabOrder = 6 OnChange = ComboBoxDecCdeChange end @@ -3255,7 +3255,7 @@ object FormConfig: TFormConfig Height = 21 Hint = 'Nom de l'#39'accessoire d'#233'fini dans l'#39'onglet "p'#233'riph'#233'riques COM/USB"' Style = csDropDownList - ItemHeight = 13 + ItemHeight = 0 ParentShowHint = False ShowHint = True TabOrder = 6 @@ -3436,7 +3436,7 @@ object FormConfig: TFormConfig Height = 21 Hint = 'Nom de l'#39'accessoire d'#233'fini dans l'#39'onglet "p'#233'riph'#233'riques COM/USB"' Style = csDropDownList - ItemHeight = 13 + ItemHeight = 0 ParentShowHint = False ShowHint = True TabOrder = 10 diff --git a/UnitConfig.pas b/UnitConfig.pas index 63658a7..0898bb9 100644 --- a/UnitConfig.pas +++ b/UnitConfig.pas @@ -572,7 +572,6 @@ retro_ch='retro'; Z21_ch='Z21'; Init_aig_ch='Init_Aig'; LAY_ch='Lay'; -Maxcom_ch='MaxCom'; Init_dem_aig_ch='Init_Dem_Aig'; Init_dem_interfaceUSBCOM_ch='Init_demUSBCOM'; Init_dem_interfaceEth_ch='Init_demETH'; @@ -590,7 +589,7 @@ fenetre_ch='Fenetre'; AffMemoFenetre_ch='AffMemoFenetre'; Tempo_aig_ch='Tempo_Aig'; Nb_cantons_Sig_ch='Nb_cantons_Sig'; -Tempo_Feu_ch='Tempo_Feu'; +Tempo_Signal_ch='Tempo_Feu'; Algo_Unisemaf_ch='Alg_Unisemaf'; NOTIF_VERSION_ch='notif_version'; verif_version_ch='verif_version'; @@ -633,7 +632,7 @@ var portCDM,TempoOctet,TimoutMaxInterface,Valeur_entete,PortInterface,prot_serie,NumPort,debug, LigneCliqueePN,AncLigneCliqueePN,clicMemo,Nb_cantons_Sig,protocole,Port,PortServeur, ligneclicAig,AncLigneClicAig,ligneClicSig,AncligneClicSig,EnvAigDccpp,AdrBaseDetDccpp, - ligneClicBr,AncligneClicBr,ligneClicAct,AncLigneClicAct,Indexfeuclic,NumTrameCDM, + ligneClicBr,AncligneClicBr,ligneClicAct,AncLigneClicAct,IndexSignalclic,NumTrameCDM, Algo_localisation,Verif_AdrXpressNet,ligneclicTrain,AncligneclicTrain,AntiTimeoutEthLenz, ligneDCC,decCourant,AffMemoFenetre,ligneClicAccPeriph,AncligneClicAccPeriph,ligneCherche,compt_Ligne : integer; @@ -678,10 +677,10 @@ function place_id(s : string) : string; procedure decodeAig(s : string;var adr : integer;var B : char); function sauve_config : boolean; procedure lit_config; -Procedure aff_champs_sig_feux(index : integer); +Procedure aff_champs_signaux(index : integer); function verif_coherence : boolean; function compile_branche(s : string;i : integer) : boolean; -function encode_sig_feux(i : integer): string; +function encode_signal(i : integer): string; procedure valide_branches; procedure trier_aig; procedure trier_detecteurs; @@ -727,16 +726,16 @@ begin place_id:=s; end; -procedure Maj_Hint_Signal(indexFeu : integer); +procedure Maj_Hint_Signal(indexSignal : integer); var s : string; begin // ne pas supprimer le @= qui sert de marqueur pour identifier le feu - 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)'; + s:='Index='+IntToSTR(indexSignal)+' @='+inttostr(Signaux[indexSignal].Adresse)+' Décodeur='+decodeur[Signaux[indexSignal].Decodeur]+ + ' Adresse détecteur associé='+intToSTR(Signaux[indexSignal].Adr_det1)+ + ' Adresse élement suivant='+intToSTR(Signaux[indexSignal].Adr_el_suiv1); + if Signaux[indexSignal].Btype_suiv1=aig then s:=s+' (aig)'; - Signaux[indexFeu].Img.Hint:=s; + Signaux[indexSignal].Img.Hint:=s; end; // demande les services Com-IP à CDM @@ -1071,7 +1070,7 @@ begin end; // transforme le signal du tableau Signaux[] en texte -function encode_sig_feux(i : integer): string; +function encode_signal(i : integer): string; var s : string; adresse,aspect,j,k,NfeuxDir,CondCarre,CondFeuBlanc,nc : integer; begin @@ -1079,7 +1078,7 @@ begin 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; + if adresse=0 then begin encode_signal:='';exit;end; s:=IntToSTR(adresse)+','; // forme - D=directionnel ajouter 10 @@ -1183,7 +1182,7 @@ begin end; end else - // feux directionnels + // signaux directionnels begin NfeuxDir:=aspect-10; for j:=1 to NfeuxDir+1 do @@ -1198,10 +1197,10 @@ begin end; end; - encode_sig_feux:=s; + encode_signal:=s; end; -// décode la ligne de signal et la stocke dans l'index i du tableau feux +// décode la ligne de signal et la stocke dans l'index i du tableau signaux // sortie vrai si le signal a été stocké - faux si doublon function decode_ligne_signal(chaine_signal : string;i : integer) : boolean; var s,chaine,sa : string; @@ -1246,7 +1245,7 @@ begin begin sa:=copy(s,1,j-1); if sa[1]='D' then - // feu directionnel ------------------------------------------ + // signal directionnel ------------------------------------------ begin delete(sa,1,1); j:=pos(',',s); @@ -1263,11 +1262,11 @@ begin 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 - k:=1; // numéro de feu directionnel + k:=1; // numéro de feux directionnels repeat // boucle de direction delete(s,1,1); // supprimer ( ou le , - j:=1; // Nombre de descriptions d'aiguillages dans le feu + j:=1; // Nombre de descriptions d'aiguillages dans le signal repeat if s[1]<>'A' then begin Affiche('Erreur 674 ligne '+chaine_signal,clred);exit;end; delete(s,1,1); @@ -1472,7 +1471,7 @@ begin t:=pos('(',s); if t=1 then begin - //Affiche('Conditions supplémentaires pour le feu '+IntToSTR(adresse)+' parenthèse '+intToSTR(l),clyellow); + //Affiche('Conditions supplémentaires pour le signal '+IntToSTR(adresse)+' parenthèse '+intToSTR(l),clyellow); k:=pos(')',s); sa:=copy(s,t+1,k-t); // contient l'intérieur des parenthèses sans les parenthèses delete(s,1,k+1);//Affiche(s,clYellow); @@ -1504,7 +1503,7 @@ begin t:=pos('CFB(',s); if t=1 then begin - //Affiche('Conditions supplémentaires pour le feu '+IntToSTR(adresse)+' parenthèse '+intToSTR(l),clyellow); + //Affiche('Conditions supplémentaires pour le signal '+IntToSTR(adresse)+' parenthèse '+intToSTR(l),clyellow); k:=pos(')',s); sa:=copy(s,t+4,k-4); // contient l'intérieur des parenthèses sans les parenthèses delete(s,1,k+1);//Affiche(s,clYellow); @@ -1736,9 +1735,6 @@ begin // adresse ip interface XpressNet writeln(fichierN,IPV4_Interface_ch+'=',adresseIP+':'+intToSTR(portInterface)); - // max com - writeln(fichierN,Maxcom_ch+'=',MaxPortCom); - // port com writeln(fichierN,Protocole_serie_ch+'=',portcom); @@ -1827,8 +1823,8 @@ begin if Raz_Acc_signaux then s:='1' else s:='0'; writeln(fichierN,Raz_signaux_ch+'='+s); - // temporisation entre 2 commandes décodeurs feu - writeln(fichierN,Tempo_feu_ch+'=',IntToSTR(Tempo_feu)); + // temporisation entre 2 commandes décodeurs signaux + writeln(fichierN,Tempo_signal_ch+'=',IntToSTR(Tempo_Signal)); // Nombre de cantons avant signal writeln(fichierN,Nb_cantons_Sig_ch+'=',intToSTR(Nb_cantons_Sig)); @@ -1913,11 +1909,11 @@ begin writeln(fichierN,'/------------'); writeln(fichierN,section_sig_ch); - // feux + // signaux for i:=1 to NbreSignaux do begin - s:=encode_sig_feux(i); - // transformer le tableau feux en ligne + s:=encode_signal(i); + // transformer le tableau signal en ligne //Affiche(s,clLime); if s='' then Affiche('Erreur 700 - Encodage du signal index='+IntToSTR(i),clRed); Signaux[i].modifie:=false; // sauvegarde en cours, on démarque @@ -2014,6 +2010,7 @@ end; procedure trier_aig; var i,j : integer; temp : TAiguillage; + s : string; begin for i:=1 to MaxAiguillage-1 do begin @@ -2030,11 +2027,25 @@ begin for i:=1 to MaxAiguillage do tablo_index_aiguillage[aiguillage[i].adresse]:=i; + + // réaffecte la listebox aiguillages + if formconfig<>nil then + begin + formconfig.ListBoxAig.Clear; + for i:=1 to MaxAiguillage do + begin + s:=encode_aig(i); + formConfig.ListBoxAig.Items.AddObject(s, Pointer(clRed)); + Aiguillage[i].modifie:=false; + end; + formconfig.ListBoxAig.itemindex:=0; + end; end; // trie les signaux procedure trier_sig; -var i,j : integer; +var i,j,l,longestLength,pixelLength : integer; + s,LongestString : string; temp : TSignal; begin for i:=1 to NbreSignaux-1 do @@ -2049,10 +2060,40 @@ begin end; end; end; + + // calcule les index for i:=1 to NbreSignaux do begin tablo_index_signal[Signaux[i].adresse]:=i; end; + + if formconfig<>nil then + begin + formconfig.ListBoxSig.Clear; + longestLength:=0; + for i:=1 to NbreSignaux do + begin + s:=encode_signal(i); // encode la ligne depuis le tableau feux + //Affiche(s,clwhite); + if s<>'' then + begin + formconfig.ListBoxSig.Items.Add(s); + // trouver la chaine la plus longue pour la future scrollbar + l:=Length(s); + if l>LongestLength then + begin + LongestString:=s; + LongestLength:=l; + end; + Signaux[i].modifie:=false; + end; + end; + + PixelLength:=formconfig.ListboxSig.Canvas.TextWidth(LongestString); + // positionne une scrollbar dans la listbox - pour l'enlever, envoyer 0 dans pixelLength + SendMessage(formconfig.ListBoxSig.Handle,LB_SETHORIZONTALEXTENT,PixelLength,0); + end; + end; @@ -2063,7 +2104,7 @@ var s,sa,SOrigine: string; trouve_sec_init,trouve_init_aig,trouve_lay,trouve_IPV4_INTERFACE,trouve_PROTOCOLE_SERIE,trouve_INTER_CAR, trouve_Tempo_maxi,trouve_Entete,trouve_tco,trouve_cdm,trouve_Serveur_interface,trouve_fenetre,trouve_MasqueTCO, trouve_NOTIF_VERSION,trouve_verif_version,trouve_fonte,trouve_tempo_aig,trouve_raz,trouve_section_aig, - trouve_section_branche,trouve_section_sig,trouve_section_act,trouve_tempo_feu, + trouve_section_branche,trouve_section_sig,trouve_section_act,trouve_tempo_signal, trouve_algo_uni,croi,trouve_Nb_cantons_Sig,trouve_dem_aig,trouve_demcnxCOMUSB,trouve_demcnxEth : boolean; virgule,i_detect,i,erreur,aig2,detect,offset,j,position, ComptEl,Compt_IT,Num_Element,adr,Nligne,postriple,itl, @@ -2106,7 +2147,7 @@ var s,sa,SOrigine: string; end else begin - if decode_ligne_signal(s,i) then // décode la chaine et stocke en tableau feux + if decode_ligne_signal(s,i) then // décode la chaine et stocke en tableau signal begin inc(i); end @@ -2460,6 +2501,7 @@ var s,sa,SOrigine: string; if erreur<>0 then Affiche('Erreur aiguillage '+intToSTR(adraig)+' ; caractère '+enregistrement[erreur]+' inconnu',clred); if debugConfig then Affiche('Adresse='+IntToSTR(adraig)+' enregistrement='+Enregistrement,clyellow); aiguillage[maxaiguillage].Adresse:=adraig; + tablo_index_aiguillage[adrAig]:=maxaiguillage; // stockage index avant tri aiguillage[maxaiguillage].AdroitB:='Z'; aiguillage[maxaiguillage].AdevieB:='Z'; aiguillage[maxaiguillage].DdroitB:='Z'; aiguillage[maxaiguillage].DdevieB:='Z'; @@ -3196,20 +3238,6 @@ var s,sa,SOrigine: string; else begin adresseIP:='0';parSocketLenz:=false;end; end; - // nombre max de port série à explorer - // configuration du port com - sa:=uppercase(MaxCom_ch)+'='; - i:=pos(sa,s); - if i=1 then - begin - inc(nv); - delete(s,i,length(sa)); - trouve_MaxPort:=true; - val(s,MaxPortCom,erreur); - if erreur<>0 then Affiche('Erreur MaxCom: '+sOrigine,clred); - if (MaxPortCom<1) or (MaxPortCom>255) then MaxPortCom:=30; - end; - // configuration du port com interface sa:=uppercase(PROTOCOLE_SERIE_ch)+'='; i:=pos(sa,s); @@ -3350,16 +3378,16 @@ var s,sa,SOrigine: string; val(s,Tempo_Aig,erreur); end; - // temporisation décodeurs de feux - sa:=uppercase(Tempo_Feu_ch)+'='; + // temporisation décodeurs de signal + sa:=uppercase(Tempo_Signal_ch)+'='; i:=pos(sa,s); if i=1 then begin inc(nv); - trouve_Tempo_feu:=true; + trouve_Tempo_signal:=true; delete(s,i,length(sa)); - val(s,Tempo_Feu,erreur); - if tempo_Feu=0 then Tempo_feu:=100; + val(s,Tempo_Signal,erreur); + if Tempo_Signal=0 then Tempo_Signal:=100; end; // algo unisemaf @@ -3660,7 +3688,7 @@ begin trouve_init_aig:=false; trouve_dem_aig:=false; trouve_tempo_aig:=false; - trouve_tempo_feu:=false; + trouve_tempo_signal:=false; trouve_INTER_CAR:=false; trouve_entete:=false; trouve_IPV4_INTERFACE:=false; @@ -3689,10 +3717,10 @@ begin //trouve_FVR:=false; - if not(trouve_tempo_feu) then + if not(trouve_tempo_signal) then begin - s:=tempo_feu_ch; - tempo_feu:=100; + s:=tempo_signal_ch; + Tempo_Signal:=100; s:=''; end; if not(trouve_NOTIF_VERSION) then s:=NOTIF_VERSION_ch; @@ -3746,7 +3774,7 @@ begin AvecDemandeInterfaceEth:=true; lay:=''; Tempo_Aig:=100; - Tempo_feu:=100; + Tempo_Signal:=100; ServeurInterfaceCDM:=1; Nb_cantons_Sig:=3; ServeurRetroCDM:=1; @@ -3784,10 +3812,10 @@ begin if not(trouve_demcnxEth) then s:=Init_dem_interfaceEth_ch; if not(trouveAvecVerifIconesTCO) then confasauver:=true; - if not(trouve_tempo_feu) then + if not(trouve_tempo_signal) then begin - s:=tempo_feu_ch; - tempo_feu:=100; + s:=tempo_signal_ch; + Tempo_Signal:=100; s:=''; end; if not(trouve_NOTIF_VERSION) then s:=NOTIF_VERSION_ch; @@ -4043,7 +4071,7 @@ begin exit; end; - Feu_Sauve:=Signaux[index]; // sauvegarde + Signal_Sauve:=Signaux[index]; // sauvegarde AncLigneClicSig:=ligneclicSig; ligneClicSig:=index-1; @@ -4059,12 +4087,14 @@ begin if sombre then Formconfig.editAdrSig.Color:=couleurfond else FormConfig.EditAdrSig.Color:=clWindow; - aff_champs_sig_feux(index); // affiche les champs du feu + aff_champs_signaux(index); // affiche les champs du feu clicliste:=false; end; procedure TFormConfig.FormActivate(Sender: TObject); +var i : integer; + s : string; begin if affevt then affiche('FormConfig activate',clLime); activ:=true; @@ -4093,7 +4123,7 @@ begin CheckBoxAffMemo.Checked:=AffMemoFenetre=1; EditNbCantons.text:=intToSTR(Nb_cantons_Sig); - EditTempoFeu.Text:=IntToSTR(Tempo_feu); + EditTempoFeu.Text:=IntToSTR(Tempo_Signal); EditNbDetDist.text:=IntToSTR(Nb_Det_dist); EditAdrIPCDM.text:=adresseIPCDM; EditPortCDM.Text:=IntToSTR(portCDM); @@ -4174,9 +4204,20 @@ begin clicListe:=false; activ:=false; - if clicproprietes then clicListeSignal(Indexfeuclic); + if clicproprietes then clicListeSignal(IndexSignalClic); clicproprietes:=false; + // aiguillages + ListBoxAig.Clear; + for i:=1 to MaxAiguillage do + begin + s:=encode_aig(i); + ListBoxAig.Items.AddObject(s, Pointer(clRed)); + Aiguillage[i].modifie:=false; + end; + ListBoxAig.itemindex:=0; + + end; procedure champs_dec_centrale; @@ -4649,8 +4690,8 @@ begin if affevt then affiche('FormConfig create',clLime); PageControl.ActivePage:=Formconfig.TabSheetCDM; // force le premier onglet sur la page Aig_supprime.Adresse:=0; - Feu_Supprime.Adresse:=0; - Feu_sauve.adresse:=0; + Signal_Supprime.Adresse:=0; + Signal_sauve.adresse:=0; clicListe:=false; ligneCherche:=0; Compt_ligne:=0; @@ -5277,18 +5318,6 @@ begin else formconfig.ComboBoxDecodeurPerso.ItemIndex:=-1; maj_decodeurs; - - // aiguillages - ListBoxAig.Clear; - for i:=1 to MaxAiguillage do - begin - s:=encode_aig(i); - ListBoxAig.Items.AddObject(s, Pointer(clRed)); - Aiguillage[i].modifie:=false; - end; - ListBoxAig.itemindex:=0; - - // branches clicListe:=true; RichBranche.clear; @@ -5307,7 +5336,6 @@ begin // signaux ListBoxSig.Items.clear; ComboBoxDec.items.Clear; - for i:=0 to 11 do begin ComboBoxAsp.items.add(Aspects[i]); @@ -5317,6 +5345,7 @@ begin begin ComboBoxDec.items.add(decodeur[i-1]); end; + // décodeurs personalisés for i:=1 to NbreDecPers do begin @@ -5327,7 +5356,7 @@ begin longestLength:=0; for i:=1 to NbreSignaux do begin - s:=encode_sig_feux(i); // encode la ligne depuis le tableau feux + s:=encode_signal(i); // encode la ligne depuis le tableau feux //Affiche(s,clwhite); if s<>'' then begin @@ -5342,6 +5371,7 @@ begin Signaux[i].modifie:=false; end; end; + PixelLength:=ListboxSig.Canvas.TextWidth(LongestString); // positionne une scrollbar dans la listbox - pour l'enlever, envoyer 0 dans pixelLength SendMessage(ListBoxSig.Handle,LB_SETHORIZONTALEXTENT,PixelLength,0); @@ -5395,7 +5425,7 @@ begin GroupBoxAct.Visible:=false; GroupBoxPN.Visible:=false; - if clicproprietes then clicListeSignal(Indexfeuclic); + if clicproprietes then clicListeSignal(IndexSignalClic); clicproprietes:=false; i:=1; @@ -6209,7 +6239,7 @@ begin end; // mise à jour des champs du signal d'après le tableau feux -Procedure aff_champs_sig_feux(index : integer); +Procedure aff_champs_signaux(index : integer); var i,j,l,d,p,k,nc,decodeur : integer; s : string; begin @@ -6224,7 +6254,7 @@ begin Picture.Bitmap.TransparentMode:=tmAuto; Picture.Bitmap.TransparentColor:=clblue; Transparent:=true; - picture.Bitmap:=Select_dessin_feu(Signaux[i].aspect); + picture.Bitmap:=Select_dessin_Signal(Signaux[i].aspect); end; if Signaux[i].contrevoie then inverse_image(formCOnfig.ImageSignal,Formprinc.ImageSignal20); @@ -7493,10 +7523,10 @@ begin end else labelInfo.Caption:=''; end; - s:=encode_sig_feux(i); + s:=encode_signal(i); formconfig.ListBoxSig.Items[ligneclicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; - aff_champs_sig_feux(i); + aff_champs_signaux(i); if not(verif_dec_sig(false)) then FormConfig.labelInfo.Caption:='Combinaison décodeur / aspect incompatible'; if affevt then Affiche('Evt ComboBox Decodeur',clOrange); @@ -7519,7 +7549,7 @@ begin LabelInfo.caption:=' '; Signaux[ligneClicSig+1].Adr_det1:=i; maj_hint_Signal(ligneClicSig+1); - s:=encode_sig_feux(ligneClicSig+1); + s:=encode_signal(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; Signaux[ligneClicSig+1].modifie:=true; ListBoxSig.selected[ligneClicSig]:=true; @@ -7534,7 +7564,7 @@ begin Val(s,i,erreur); if (s<>'') and (erreur<>0) then begin LabelInfo.caption:='Erreur temporisation décodeurs ';exit;end; LabelInfo.caption:=' '; - tempo_feu:=i; + Tempo_Signal:=i; end; @@ -7573,7 +7603,7 @@ begin LabelInfo.caption:=' '; Signaux[ligneClicSig+1].Adr_el_suiv1:=i; Signaux[ligneClicSig+1].Btype_suiv1:=bt; - s:=encode_sig_feux(ligneClicSig+1); + s:=encode_signal(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; end; @@ -7601,7 +7631,7 @@ begin LabelInfo.caption:=' '; Signaux[ligneClicSig+1].Adr_det2:=i; maj_hint_Signal(ligneClicSig+1); - s:=encode_sig_feux(ligneClicSig+1); + s:=encode_signal(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; Signaux[ligneClicSig+1].modifie:=true; @@ -7623,7 +7653,7 @@ begin if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then begin Signaux[ligneClicSig+1].VerrouCarre:=checkVerrouCarre.Checked; - s:=encode_sig_feux(ligneClicSig+1); + s:=encode_signal(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; Signaux[ligneClicSig+1].modifie:=true; @@ -7639,7 +7669,7 @@ begin if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then begin Signaux[ligneClicSig+1].FeuBlanc:=checkBoxFB.Checked; - s:=encode_sig_feux(ligneClicSig+1); + s:=encode_signal(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; Signaux[ligneClicSig+1].modifie:=true; @@ -7680,7 +7710,7 @@ begin LabelInfo.caption:=' '; Signaux[ligneClicSig+1].Adr_el_suiv2:=i; Signaux[ligneClicSig+1].Btype_suiv2:=bt; - s:=encode_sig_feux(ligneClicSig+1); + s:=encode_signal(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; end; @@ -7708,7 +7738,7 @@ begin LabelInfo.caption:=' '; Signaux[ligneClicSig+1].Adr_det3:=i; maj_hint_Signal(ligneClicSig+1); - s:=encode_sig_feux(ligneClicSig+1); + s:=encode_signal(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; Signaux[ligneClicSig+1].modifie:=true; @@ -7756,7 +7786,7 @@ begin LabelInfo.caption:=' '; Signaux[ligneClicSig+1].Adr_el_suiv3:=i; Signaux[ligneClicSig+1].Btype_suiv3:=bt; - s:=encode_sig_feux(ligneClicSig+1); + s:=encode_signal(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; end; @@ -7784,7 +7814,7 @@ begin LabelInfo.caption:=' '; Signaux[ligneClicSig+1].Adr_det4:=i; maj_hint_Signal(ligneClicSig+1); - s:=encode_sig_feux(ligneClicSig+1); + s:=encode_signal(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; Signaux[ligneClicSig+1].modifie:=true; @@ -7832,7 +7862,7 @@ begin LabelInfo.caption:=' '; Signaux[ligneClicSig+1].Adr_el_suiv4:=i; Signaux[ligneClicSig+1].Btype_suiv4:=bt; - s:=encode_sig_feux(ligneClicSig+1); + s:=encode_signal(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; end; @@ -8296,16 +8326,16 @@ begin Signaux[index].aspect:=aspect; - s:=encode_sig_feux(index); + s:=encode_signal(index); ListBoxSig.Items[ligneClicSig]:=s; - aff_champs_sig_feux(index); // redessine les champs et le feu + aff_champs_signaux(index); // redessine les champs et le feu if not(verif_dec_sig(false)) then labelInfo.Caption:='Combinaison décodeur / aspect incompatible'; ListBoxSig.Selected[ligneClicSig]:=true; // change l'image du feu dans la feuille graphique principale - bm:=Select_dessin_feu(Signaux[index].aspect); + bm:=Select_dessin_Signal(Signaux[index].aspect); if bm=nil then exit; Signaux[index].Img.picture.Bitmap:=bm; dessine_signal_mx(Signaux[index].Img.Canvas,0,0,1,1,Signaux[index].adresse,1); // dessine les feux du signal @@ -8354,7 +8384,7 @@ begin Signaux[ligneClicSig+1].Unisemaf:=i; end; if decodeur=10 then Signaux[ligneClicSig+1].Na:=i; - s:=encode_sig_feux(ligneClicSig+1); + s:=encode_signal(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; end; @@ -8363,17 +8393,17 @@ end; procedure TFormConfig.ButtonrestaureClick(Sender: TObject); var index : integer; begin - if (Feu_sauve.adresse<>0) and (ligneClicSig>=0) then + if (Signal_sauve.adresse<>0) and (ligneClicSig>=0) then begin clicListe:=true; index:=ligneClicSig+1; - Signaux[index]:=Feu_sauve; - ListBoxSig.Items[ligneClicSig]:=encode_sig_feux(index); + Signaux[index]:=Signal_sauve; + ListBoxSig.Items[ligneClicSig]:=encode_signal(index); ListBoxSig.selected[ligneClicSig]:=true; - aff_champs_sig_feux(index); // réaffiche les champs + aff_champs_signaux(index); // réaffiche les champs Maj_Hint_Signal(index); // change l'image du feu dans la feuille graphique principale - Signaux[index].Img.picture.Bitmap:=Select_dessin_feu(Signaux[index].aspect); + Signaux[index].Img.picture.Bitmap:=Select_dessin_Signal(Signaux[index].aspect); dessine_signal_mx(Signaux[index].Img.Canvas,0,0,1,1,Signaux[index].adresse,1); // dessine les feux du signal clicListe:=false; end; @@ -8925,8 +8955,7 @@ begin Signaux[i].verrouCarre:=false; cree_image(i); - //Affiche('Feu 999 créé',clyellow); - s:=encode_sig_feux(i); + s:=encode_signal(i); // scroller à la fin et sélectionner with formConfig.ListBoxSig do @@ -8940,9 +8969,9 @@ begin formCOnfig.LabelInfo.caption:=''; ligneClicSig:=i-1; AncligneClicSig:=ligneClicSig; - Aff_champs_Sig_feux(i); + aff_champs_signaux(i); clicliste:=false; - Feu_sauve.Adresse:=0; + Signal_sauve.Adresse:=0; config_modifie:=true; // encoder l'index @@ -8985,8 +9014,9 @@ begin repeat if formconfig.ListBoxSig.selected[i-1] then begin - Feu_supprime:=Signaux[i]; // sauvegarde le signal supprimé - feu_sauve.adresse:=0; // dévalider sa définition + Signal_supprime:=Signaux[i]; // sauvegarde le signal supprimé + Signal_sauve.adresse:=0; // dévalider sa définition + FormConfig.ButtonInsFeu.Caption:='Ajouter le signal '+intToSTR(Signaux[i].adresse)+' supprimé'; // supprimer le signal i @@ -8997,7 +9027,11 @@ begin 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 + Tablo_Index_Signal[Signaux[i].adresse]:=0; + 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 NbreSignaux-1 do begin @@ -9041,7 +9075,7 @@ begin // réafficher la liste for i:=1 to NbreSignaux do begin - s:=encode_sig_feux(i); + s:=encode_signal(i); if s<>'' then begin FormConfig.ListBoxSig.items.Add(s); @@ -9049,7 +9083,13 @@ begin end; ligneClicSig:=-1; AncligneClicSig:=-1; - trier_sig; // recalcule les index + + // calcule les index - ne pas trier les signaux, il faudrait trier la fenetre graphique + for i:=1 to NbreSignaux do + begin + tablo_index_signal[Signaux[i].adresse]:=i; + end; + clicliste:=false; end; @@ -9064,17 +9104,18 @@ end; procedure TFormConfig.ButtonInsFeuClick(Sender: TObject); var s : string; begin - if feu_supprime.adresse<>0 then + if Signal_supprime.adresse<>0 then begin clicliste:=true; inc(NbreSignaux); - Signaux[NbreSignaux]:=Feu_supprime; - Feu_Supprime.adresse:=0; // dévalider le feu sauvegardé - Feu_supprime.aspect:=0; + Signaux[NbreSignaux]:=Signal_supprime; + Tablo_Index_Signal[Signaux[NbreSignaux].adresse]:=NbreSignaux; // index + Signal_supprime.adresse:=0; // dévalider le feu sauvegardé + Signal_supprime.aspect:=0; cree_image(NbreSignaux); config_modifie:=true; // réafficher le rechedit - s:=encode_Sig_Feux(NbreSignaux); + s:=encode_signal(NbreSignaux); if s<>'' then begin with ListBoxSig.Items do @@ -9085,7 +9126,7 @@ begin AncligneClicSig:=-1; SetFocus; end; - Aff_champs_sig_feux(NbreSignaux); + aff_champs_signaux(NbreSignaux); end; clicListe:=false; end; @@ -10737,6 +10778,7 @@ begin begin inc(MaxAiguillage); aiguillage[MaxAiguillage]:=Aig_supprime; + Tablo_Index_aiguillage[aiguillage[maxAiguillage].adresse]:=maxAiguillage; // index Aig_Supprime.adresse:=0; // dévalider l'aiguillage sauvegardé Aig_Supprime.modele:=rien; clicListe:=true; @@ -11114,7 +11156,7 @@ begin else setlength(Signaux[ligneClicSig+1].AigDirection[ligne],0); end; - s:=encode_sig_feux(ligneClicSig+1); + s:=encode_signal(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; end @@ -11152,7 +11194,7 @@ begin end; end; - s:=encode_sig_feux(ligneClicSig+1); + s:=encode_signal(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; LabelInfo.Caption:=''; clicListe:=false; @@ -11716,7 +11758,7 @@ begin if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then begin Signaux[ligneClicSig+1].checkFV:=checkFVC.Checked; - s:=encode_sig_feux(ligneClicSig+1); + s:=encode_signal(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; Signaux[ligneClicSig+1].modifie:=true; @@ -11732,7 +11774,7 @@ begin if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then begin Signaux[ligneClicSig+1].checkFR:=checkFRC.Checked; - s:=encode_sig_feux(ligneClicSig+1); + s:=encode_signal(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; Signaux[ligneClicSig+1].modifie:=true; @@ -12285,7 +12327,7 @@ procedure TFormConfig.CheckBoxVersContrevoieClick(Sender: TObject); if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then begin Signaux[ligneClicSig+1].verscontrevoie:=checkBoxVersContreVoie.Checked; - s:=encode_sig_feux(ligneClicSig+1); + s:=encode_signal(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; Signaux[ligneClicSig+1].modifie:=true; @@ -12302,12 +12344,12 @@ begin if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then begin Signaux[ligneClicSig+1].contrevoie:=checkBoxContreVoie.Checked; - s:=encode_sig_feux(ligneClicSig+1); + s:=encode_signal(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; Signaux[ligneClicSig+1].modifie:=true; - aff_champs_sig_feux(ligneClicSig+1); // redessine les champs et le feu - contient l'inversion de l'image + aff_champs_signaux(ligneClicSig+1); // redessine les champs et le feu - contient l'inversion de l'image // maj le signal dans la fenetre principale Signaux[ligneClicSig+1].Img.picture.Bitmap:=ImageSIgnal.Picture.Bitmap; // et recopie le feu @@ -12709,7 +12751,7 @@ begin begin 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); + if i=ligneClicSig+1 then aff_champs_signaux(ligneClicSig+1); aff:=true; end; if deco>supp then @@ -12725,7 +12767,7 @@ begin ListBoxSig.Items.Clear; for i:=1 to NbreSignaux do begin - s:=encode_sig_feux(i); // encode la ligne depuis le tableau feux + s:=encode_signal(i); // encode la ligne depuis le tableau feux if s<>'' then begin ListBoxSig.Items.Add(s); @@ -12796,7 +12838,7 @@ begin setlength(Signaux[ligneClicSig+1].condFeuBlanc[ligne],0); end; - s:=encode_sig_feux(ligneClicSig+1); + s:=encode_signal(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; LabelInfo.Caption:=''; @@ -12850,7 +12892,7 @@ begin if AncligneClicSig<>ligneClicSig then begin AncligneClicSig:=ligneClicSig; - aff_champs_sig_feux(ligneClicSig+1); + aff_champs_signaux(ligneClicSig+1); end; end; end; @@ -12869,7 +12911,7 @@ begin if AncligneClicSig<>ligneClicSig then begin AncligneClicSig:=ligneClicSig; - aff_champs_sig_feux(ligneClicSig+1); + aff_champs_signaux(ligneClicSig+1); end; end; end; @@ -13560,7 +13602,7 @@ begin tablo_index_signal[i]:=ligneClicSig+1; Signaux[ligneClicSig+1].Lbl.caption:='@'+IntToSTR(i); - s:=encode_sig_feux(ligneClicSig+1); + s:=encode_signal(ligneClicSig+1); ListBoxSig.Items[ligneClicSig]:=s; ListBoxSig.selected[ligneClicSig]:=true; Maj_Hint_Signal(ligneClicSig+1); diff --git a/UnitConfigTCO.pas b/UnitConfigTCO.pas index e6f767a..75fb247 100644 --- a/UnitConfigTCO.pas +++ b/UnitConfigTCO.pas @@ -549,6 +549,7 @@ procedure TFormConfigTCO.FormCreate(Sender: TObject); var i : integer; c : tcomponent; begin + if debug=1 then Affiche('Création fenetre configTCO',clLime); for i:=0 to stringGridTCO.RowCount - 1 do with stringGridTCO do begin @@ -577,6 +578,7 @@ begin composant(c,couleurFond,couleurTexte); end; end; + if debug=1 then Affiche('Fin création fenetre configTCO',clLime); end; procedure TFormConfigTCO.TrackBarEpaisseurChange(Sender: TObject); diff --git a/UnitPilote.pas b/UnitPilote.pas index dd8315f..39d6b51 100644 --- a/UnitPilote.pas +++ b/UnitPilote.pas @@ -110,14 +110,14 @@ var EtatFeuPilote : word; AdrPilote : integer; -procedure dessine_feu_pilote; +procedure dessine_signal_pilote; procedure couleurs_pilote; implementation {$R *.dfm} -procedure dessine_feu_pilote; +procedure dessine_signal_pilote; var i,ancienEtat : integer; Vcanvas : Tcanvas; begin @@ -168,70 +168,70 @@ procedure TFormPilote.RadioVertClick(Sender: TObject); begin Signaux[0].AncienEtat:=Signaux[0].EtatSignal; if nation=1 then Maj_Etat_Signal(0,vert) else Maj_Etat_Signal(0,vertB) ; - dessine_feu_pilote; + dessine_signal_pilote; end; procedure TFormPilote.RadioVertCliClick(Sender: TObject); begin Signaux[0].AncienEtat:=Signaux[0].EtatSignal; Maj_Etat_Signal(0,vert_cli); - dessine_feu_pilote; + dessine_signal_pilote; end; procedure TFormPilote.RadioJauneClick(Sender: TObject); begin Signaux[0].AncienEtat:=Signaux[0].EtatSignal; if nation=1 then Maj_Etat_Signal(0,jaune) else Maj_Etat_Signal(0,deux_jaunes); - dessine_feu_pilote; + dessine_signal_pilote; end; procedure TFormPilote.RadioJaunecliClick(Sender: TObject); begin Signaux[0].AncienEtat:=Signaux[0].EtatSignal; Maj_Etat_Signal(0,jaune_cli); - dessine_feu_pilote; + dessine_signal_pilote; end; procedure TFormPilote.RadioRougeClick(Sender: TObject); begin Signaux[0].AncienEtat:=Signaux[0].EtatSignal; Maj_Etat_Signal(0,semaphore); - dessine_feu_pilote; + dessine_signal_pilote; end; procedure TFormPilote.RadioRougeCliClick(Sender: TObject); begin Signaux[0].AncienEtat:=Signaux[0].EtatSignal; Maj_Etat_Signal(0,semaphore_cli); - dessine_feu_pilote; + dessine_signal_pilote; end; procedure TFormPilote.RadioCarreClick(Sender: TObject); begin Signaux[0].AncienEtat:=Signaux[0].EtatSignal; if nation=1 then Maj_Etat_Signal(0,carre) else Maj_Etat_Signal(0,vert_jaune_H); - dessine_feu_pilote; + dessine_signal_pilote; end; procedure TFormPilote.RadioBlancClick(Sender: TObject); begin Signaux[0].AncienEtat:=Signaux[0].EtatSignal; if nation=1 then Maj_Etat_Signal(0,blanc) else Maj_Etat_Signal(0,rouge_blanc); - dessine_feu_pilote; + dessine_signal_pilote; end; procedure TFormPilote.RadioVioletClick(Sender: TObject); begin Signaux[0].AncienEtat:=Signaux[0].EtatSignal; if nation=1 then Maj_Etat_Signal(0,violet) else Maj_Etat_Signal(0,vert_jaune_V); - dessine_feu_pilote; + dessine_signal_pilote; end; procedure TFormPilote.RadioBlancCliClick(Sender: TObject); begin Signaux[0].AncienEtat:=Signaux[0].EtatSignal; Maj_Etat_Signal(0,blanc_cli); - dessine_feu_pilote; + dessine_signal_pilote; end; procedure TFormPilote.FormClose(Sender: TObject; var Action: TCloseAction); @@ -244,7 +244,7 @@ procedure TFormPilote.RadioRalen30Click(Sender: TObject); begin Signaux[0].AncienEtat:=Signaux[0].EtatSignal; Maj_Etat_Signal(0,ral_30); - dessine_feu_pilote; + dessine_signal_pilote; end; @@ -252,7 +252,7 @@ procedure TFormPilote.RadioRappel60Click(Sender: TObject); begin Signaux[0].AncienEtat:=Signaux[0].EtatSignal; Maj_Etat_Signal(0,rappel_60); - dessine_feu_pilote; + dessine_signal_pilote; end; @@ -260,14 +260,14 @@ procedure TFormPilote.RadioRalen60Click(Sender: TObject); begin Signaux[0].AncienEtat:=Signaux[0].EtatSignal; Maj_Etat_Signal(0,ral_60); - dessine_feu_pilote; + dessine_signal_pilote; end; procedure TFormPilote.RadioRappel30Click(Sender: TObject); begin Signaux[0].AncienEtat:=Signaux[0].EtatSignal; Maj_Etat_Signal(0,rappel_30); - dessine_feu_pilote; + dessine_signal_pilote; end; procedure couleurs_pilote; @@ -316,7 +316,7 @@ if ord(Key) = VK_RETURN then if (i>=0) and (i<=6) then begin Signaux[0].EtatSignal:=i; - dessine_feu_pilote; + dessine_signal_pilote; end; if (i<0) and (i>6) then EditNbreFeux.text:='1'; end @@ -446,7 +446,7 @@ begin Maj_Etat_Signal(AdrPilote,carre); envoi_signal(Adrpilote); Maj_Etat_Signal(0,carre); - dessine_feu_pilote; + dessine_signal_pilote; end; end; @@ -458,19 +458,19 @@ end; procedure TFormPilote.CheckChiffreClick(Sender: TObject); begin if checkChiffre.Checked then Maj_Etat_Signal_belge(0,chiffre_F or bita1_F) else Maj_Etat_Signal_belge(0,chiffre_F); - dessine_feu_pilote; + dessine_signal_pilote; end; procedure TFormPilote.CheckChevronClick(Sender: TObject); begin if checkChevron.Checked then Maj_Etat_Signal(0,chevron_F or bita1_F) else Maj_Etat_Signal(0,chevron_F ); - dessine_feu_pilote; + dessine_signal_pilote; end; procedure TFormPilote.CheckClignoteClick(Sender: TObject); begin if checkclignote.Checked then Maj_Etat_Signal(0,clignote_F or bita1_F) else Maj_Etat_Signal(0,clignote_F ); - dessine_feu_pilote; + dessine_signal_pilote; end; begin diff --git a/UnitPrinc.dfm b/UnitPrinc.dfm index 6e7fba7..5b0567c 100644 --- a/UnitPrinc.dfm +++ b/UnitPrinc.dfm @@ -19,8 +19,8 @@ object FormPrinc: TFormPrinc OnCreate = FormCreate OnResize = FormResize DesignSize = ( - 1141 - 638) + 1133 + 630) PixelsPerInch = 96 TextHeight = 13 object LabelTitre: TLabel @@ -1429,8 +1429,8 @@ object FormPrinc: TFormPrinc end object StatusBar1: TStatusBar Left = 0 - Top = 616 - Width = 1141 + Top = 608 + Width = 1133 Height = 22 Panels = < item @@ -2466,8 +2466,8 @@ object FormPrinc: TFormPrinc OnClick = Coller1Click end end - object PopupMenuFeu: TPopupMenu - OnPopup = PopupMenuFeuPopup + object PopupMenuSignal: TPopupMenu + OnPopup = PopupMenuSignalPopup Left = 896 object Proprits1: TMenuItem Caption = 'Propri'#233't'#233's du signal' diff --git a/UnitPrinc.pas b/UnitPrinc.pas index bd64b6d..7dbbbe1 100644 --- a/UnitPrinc.pas +++ b/UnitPrinc.pas @@ -1,5 +1,5 @@ Unit UnitPrinc; -// 5/1 9h +// 11/1 16h (******************************************** Programme signaux complexes Graphique Lenz Delphi 7 + activeX Tmscomm + clientSocket @@ -117,7 +117,7 @@ type Etatdessignaux1: TMenuItem; N6: TMenuItem; Apropos1: TMenuItem; - PopupMenuFeu: TPopupMenu; + PopupMenuSignal: TPopupMenu; Proprits1: TMenuItem; N8: TMenuItem; Vrifierlacohrence: TMenuItem; @@ -307,7 +307,7 @@ type procedure SBMarcheArretLocoClick(Sender: TObject); procedure EditAdrTrainChange(Sender: TObject); procedure SplitterVMoved(Sender: TObject); - procedure PopupMenuFeuPopup(Sender: TObject); + procedure PopupMenuSignalPopup(Sender: TObject); procedure Vrifiernouvelleversion1Click(Sender: TObject); procedure Analyser1Click(Sender: TObject); procedure Coller1Click(Sender: TObject); @@ -560,7 +560,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,NbreSignaux,pasreponse,AdrDevie,fenetre,Tempo_Aig,Tempo_feu,etat_init_interface, + tempsCli,NbreSignaux,pasreponse,AdrDevie,fenetre,Tempo_Aig,Tempo_Signal,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, @@ -574,7 +574,7 @@ var Srvc_Pos,Srvc_Sig,debugtrames,LayParParam,AvecFVR,InverseMotif,Srvc_tdcc, Hors_tension,traceSign,TraceZone,Ferme,parSocketLenz,ackCdm,PremierFD,doubleclic, NackCDM,MsgSim,StopSimu,succes,recu_cv,AffAigDet,AffTiers,AvecDemandeAiguillages, - TraceListe,clignotant,nack,Maj_feux_cours,configNulle,LanceCDM,AvecInitAiguillages, + TraceListe,clignotant,nack,Maj_signaux_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, @@ -677,7 +677,7 @@ var nation : integer; // 1=FR 2=BE commande : integer; // =0 pilotage par centrale =1 pilotage par périphérique COM/USB/Socket Peripherique : integer; // numéro du périphérique - desc : array[1..20] of // Description. Index=adresse d'offset + desc : array[1..20] of // Description des 20 états. Index=adresse d'offset record etat1,etat2, // états (rouge, sémaphore etc) offsetAdresse, // décalage d'adresse des deux sorties @@ -781,7 +781,7 @@ var decodeur : array[0..30] of string[20]; - Feu_supprime,Feu_sauve : TSignal; + Signal_supprime,Signal_sauve : TSignal; Aig_supprime,Aig_sauve : TAiguillage; BrancheN : array[1..MaxBranches,1..MaxElBranches] of TBranche; @@ -823,7 +823,7 @@ function carre_signal(adresse,TrainReserve : integer;var reserveTrainTiers : boo procedure Event_Detecteur(Adresse : integer;etat : boolean;train : string); procedure Event_act(adr,adr2,etat : integer;trainDecl : string); function verif_UniSemaf(adresse,UniSem : integer) : integer; -function Select_dessin_feu(TypeFeu : integer) : TBitmap; +function Select_dessin_Signal(TypeSignal : integer) : TBitmap; procedure cree_image(rang : integer); procedure trouve_aiguillage(adresse : integer); procedure trouve_detecteur(detecteur : integer); @@ -837,7 +837,7 @@ procedure init_aiguillages; function index_adresse_detecteur(de : integer) : integer; function index_train_adresse(adr : integer) : integer; procedure vitesse_loco(nom_train :string;index : integer;adr_loco : integer;vitesse : integer;sens : boolean;repetition : boolean); -procedure Maj_Feux(detect : boolean); +procedure Maj_Signaux(detect : boolean); procedure Det_Adj(adresse : integer); procedure reserve_canton(detecteur1,detecteur2,adrtrain,NumTrain,NCantons : integer); function signal_detecteur(detecteur : integer) : integer; @@ -1174,7 +1174,7 @@ begin if (orientation=3) then begin - //rotation 90° vers la droite des feux + //rotation 90° vers la droite des signaux ech:=frY;frY:=frX;FrX:=ech; Temp:=LgImage-Xjaune;XJaune:=YJaune;Yjaune:=Temp; Temp:=LgImage-XSem;XSem:=YSem;YSem:=Temp; @@ -1310,7 +1310,7 @@ begin end; if (orientation=2) then begin - //rotation 90° vers la gauche des feux + // rotation 90° vers la gauche des signaux // calcul des facteurs de réduction pour la rotation ech:=frY;frY:=frX;FrX:=ech; Temp:=HtImage-yjaune;YJaune:=XJaune;Xjaune:=Temp; @@ -1322,7 +1322,7 @@ begin if (orientation=3) then begin - //rotation 90° vers la droite des feux + // rotation 90° vers la droite des signaux // calcul des facteurs de réduction pour la rotation ech:=frY;frY:=frX;FrX:=ech; Temp:=LgImage-Xjaune;XJaune:=YJaune;Yjaune:=Temp; @@ -1727,7 +1727,7 @@ begin if (orientation=2) then begin - //rotation 90° vers la gauche des feux + //rotation 90° vers la gauche des signaux // calcul des facteurs de réduction pour la rotation ech:=frY;frY:=frX;FrX:=ech; Temp:=HtImage-yjauneBas;YJauneBas:=XJauneBas;XjauneBas:=Temp; @@ -1744,7 +1744,7 @@ begin if (orientation=3) then begin - // rotation 90° vers la droite des feux + // rotation 90° vers la droite des signaux // calcul des facteurs de réduction pour la rotation ech:=frY;frY:=frX;FrX:=ech; Temp:=LgImage-XjauneBas;XJauneBas:=YJauneBas;YjauneBas:=Temp; @@ -1888,7 +1888,6 @@ begin end; end; - // dessine les feux sur une cible directionnelle à N feux procedure dessine_dirN(Acanvas : Tcanvas;x,y : integer;frX,frY : real;EtatSignal : word;orientation,N : integer); var rayon,x1,x2,x3,y1,y2,y3,x4,y4,x5,y5,x6,y6,LgImage,HtImage,temp : integer; @@ -2171,7 +2170,7 @@ begin begin aspect:=Signaux[i].aspect ; case aspect of - // feux de signalisation + // signaux 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); @@ -2193,8 +2192,8 @@ var s : string; begin if button=mbRight then begin - P_image_pilote:=Sender as TImage; // récupérer l'objet image du feu qu'on a cliqué de la forme pilote - s:=P_Image_pilote.Hint; // récupérer son hint qui contient l'adresse du feu cliqué + P_image_pilote:=Sender as TImage; // récupérer l'objet image du signal cliqué de la forme pilote + s:=P_Image_pilote.Hint; // récupérer son hint qui contient l'adresse du signal cliqué i:=pos('@',s); if i<>0 then delete(s,1,i); i:=pos('=',s); if i<>0 then delete(s,i,1); i:=pos(' ',s); @@ -2209,7 +2208,7 @@ var s : string; P_image_pilote : Timage; i,erreur : integer; begin - P_image_pilote:=Sender as TImage; // récupérer l'objet image du feu qu'on a cliqué de la forme pilote + P_image_pilote:=Sender as TImage; // récupérer l'objet image du signal cliqué de la forme pilote s:=P_Image_pilote.Hint; // récupérer son hint qui contient l'adresse du feu cliqué //Affiche(s,clyellow); i:=pos('@',s); if i<>0 then delete(s,1,i); @@ -2228,10 +2227,10 @@ begin end; end; -function Select_dessin_feu(TypeFeu : integer) : TBitmap; +function Select_dessin_Signal(TypeSignal : integer) : TBitmap; var Bm : TBitMap; begin - case TypeFeu of + case TypeSignal of 2 : Bm:=Formprinc.Image2feux.picture.Bitmap; 3 : Bm:=Formprinc.Image3feux.picture.Bitmap; 4 : Bm:=Formprinc.Image4feux.picture.Bitmap; @@ -2248,7 +2247,7 @@ begin 16 : Bm:=Formprinc.Image6Dir.picture.Bitmap; else Bm:=nil; end; - Select_dessin_feu:=bm; + Select_dessin_Signal:=bm; end; // créée une image dynamiquement pour un nouveau signal déclaré dans le fichier de config @@ -2288,10 +2287,10 @@ begin onClick:=Formprinc.Imageonclick; // affectation procédure clique G sur image onMouseDown:=Formprinc.ProcOnMouseDown; // clique G ou D - PopUpMenu:=Formprinc.PopupMenuFeu; // affectation popupmenu sur clic droit + PopUpMenu:=Formprinc.PopupMenuSignal; // affectation popupmenu sur clic droit - // affecter le type d'image de feu dans l'image créée - T_BP:=Select_dessin_feu(TypeSignal); + // affecter le type d'image de signal dans l'image créée + T_BP:=Select_dessin_Signal(TypeSignal); if T_BP=nil then begin Affiche('Erreur 418 : sélection type signal incorrecte pour signal '+intToSTR(adresse),clred); @@ -3021,32 +3020,32 @@ begin case code of 0 : begin pilote_acc(adr,1,signal); // sortie 1 à 0 - sleep(tempo_Feu); + sleep(Tempo_Signal); pilote_acc(adr+1,1,signal); // sortie 2 à 0 - sleep(Tempo_feu); + sleep(Tempo_Signal); pilote_acc(adr+2,1,signal); // sortie 3 à 0 - sleep(Tempo_Feu); + sleep(Tempo_Signal); end; 1 : begin pilote_acc(adr,2,signal); // sortie 1 à 1 - sleep(tempo_Feu); + sleep(Tempo_Signal); pilote_acc(adr+1,1,signal); // sortie 2 à 0 - sleep(Tempo_feu); + sleep(Tempo_Signal); pilote_acc(adr+2,1,signal); // sortie 3 à 0 - sleep(Tempo_Feu); + sleep(Tempo_Signal); end; 2 : begin pilote_acc(adr,2,signal); // sortie 1 à 1 - sleep(tempo_Feu); + sleep(Tempo_Signal); pilote_acc(adr+1,2,signal); // sortie 2 à 1 - sleep(Tempo_feu); + sleep(Tempo_Signal); pilote_acc(adr+2,1,signal); // sortie 3 à 0 - sleep(Tempo_Feu); + sleep(Tempo_Signal); end; 3 : begin pilote_acc(adr,2,signal); // sortie 1 à 1 - sleep(tempo_Feu); + sleep(Tempo_Signal); pilote_acc(adr+1,2,signal); // sortie 2 à 1 - sleep(Tempo_feu); + sleep(Tempo_Signal); pilote_acc(adr+2,2,signal); // sortie 3 à 1 - sleep(Tempo_Feu); + sleep(Tempo_Signal); end; end; Signaux[i].EtatSignal:=code; @@ -3341,7 +3340,7 @@ begin if index<>0 then begin i:=0; - // trouve l'index dans la configuration du feu correspondant à son état demandé + // trouve l'index dans la configuration du signal correspondant à son état demandé repeat inc(i); until (Signaux[index].SR[i].sortie1=etat) or (Signaux[index].SR[i].sortie0=etat) or (i=8); @@ -3400,7 +3399,7 @@ begin AfficheDebug(s,clyellow); end; - Sleep(60); // si le feu se positionne à la suite d'un positionnement d'aiguillage, on peut avoir le message station occupée + Sleep(60); // si le signal se met à jour à la suite d'un positionnement d'aiguillage, on peut avoir le message station occupée //Affiche(IntToSTR(aspect)+' '+inttoSTR(combine),clOrange); if (aspect<>-1) and (combine=-1) then begin @@ -3608,7 +3607,7 @@ var modele,index: integer ; s : string; code,aspect,combine : integer; begin - index:=Index_Signal(adresse); // tranforme l'adresse du feu en index tableau + index:=Index_Signal(adresse); // tranforme l'adresse du signal en index tableau if (Signaux[index].AncienEtat<>Signaux[index].EtatSignal) then begin @@ -3622,7 +3621,7 @@ begin s:='Tick='+IntToSTR(tick)+' Signal '+IntToSTR(adresse)+'='+chaine_signal(adresse); AfficheDebug(s,clyellow); end; - // pour Unisemaf, la cible est définie dans le champ Unisemaf de la structure feux + // pour Unisemaf, la cible est définie dans le champ Unisemaf de la structure Tsignal modele:=Signaux[index].Unisemaf; if modele=0 then Affiche('Erreur 741 : spécification unisemaf signal '+intToSTR(adresse)+' non défini',clred); @@ -4300,23 +4299,23 @@ begin end; 2 : // mode 2: plus de 4 feux begin - 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 (aspect=semaphore) then begin pilote_acc(adresse+2,1,signal);sleep(Tempo_Signal);pilote_acc(adresse,1,signal);end; + if (aspect=vert) then begin pilote_acc(adresse+2,1,signal);sleep(Tempo_Signal);pilote_acc(adresse,2,signal);end; + if (aspect=carre) then begin pilote_acc(adresse+2,1,signal);sleep(Tempo_Signal);pilote_acc(adresse+1,1,signal);end; + if (aspect=jaune) then begin pilote_acc(adresse+2,1,signal);sleep(Tempo_Signal);pilote_acc(adresse+1,2,signal);end; + if (aspect=violet) then begin pilote_acc(adresse+2,2,signal);sleep(Tempo_Signal);pilote_acc(adresse,1,signal);end; + if (aspect=blanc) then begin pilote_acc(adresse+2,2,signal);sleep(Tempo_Signal);pilote_acc(adresse,2,signal);end; + if (aspect=semaphore) then begin pilote_acc(adresse+2,2,signal);sleep(Tempo_Signal);pilote_acc(adresse+1,1,signal);end; + if (combine=aspect8) then begin pilote_acc(adresse+2,2,signal);sleep(Tempo_Signal);pilote_acc(adresse+1,2,signal);end; if (combine=ral_60) and (aspect=jaune_cli) - 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; + then begin pilote_acc(adresse+3,1,signal);sleep(Tempo_Signal);pilote_acc(adresse,1,signal);end; // demande groupe 3 + if (aspect=vert_cli) then begin pilote_acc(adresse+3,1,signal);sleep(Tempo_Signal);pilote_acc(adresse,2,signal);end; // demande groupe 3 + if (combine=Disque_D) then begin pilote_acc(adresse+3,1,signal);sleep(Tempo_Signal);pilote_acc(adresse+1,1,signal);end;// demande groupe 3 + if (aspect=jaune_cli) then begin pilote_acc(adresse+3,1,signal);sleep(Tempo_Signal);pilote_acc(adresse+1,2,signal);end; + if (combine=ral_30) then begin pilote_acc(adresse+3,2,signal);sleep(Tempo_Signal);pilote_acc(adresse,1,signal);end; + if (combine=ral_60) then begin pilote_acc(adresse+3,2,signal);sleep(Tempo_Signal);pilote_acc(adresse,2,signal);end; + if (combine=rappel_30) then begin pilote_acc(adresse+3,2,signal);sleep(Tempo_Signal);pilote_acc(adresse+1,1,signal);end; + if (combine=rappel_60) then begin pilote_acc(adresse+3,2,signal);sleep(Tempo_Signal);pilote_acc(adresse+1,2,signal);end; end; end; end; @@ -4513,11 +4512,10 @@ begin Sleep(40); 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 connecte then sleep(40); // les commandes entre 2 signaux 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,signal) ; // affichage de la signalisation combinée @@ -4821,12 +4819,12 @@ begin end; -// pilotage d'un signal, et mise à jour du graphisme du feu dans les 3 fenetres +// pilotage d'un signal, et mise à jour du graphisme du signal dans les 3 fenetres procedure envoi_signal(Adr : integer); var i,it,j,index_train,adresse,detect,detsuiv,a,b,aspect,x,y,TailleX,TailleY,Orientation, indexTCO,AdrTrain,dec : integer; rougeA,rougeB : boolean; - ImageFeu : TImage; + ImageSignal : TImage; frX,frY : real; s : string; begin @@ -4928,10 +4926,10 @@ begin Signaux[i].AncienEtat:=Signaux[i].EtatSignal; - // allume les signaux du feu dans la fenêtre de droite + // allume les feux du signal dans la fenêtre de droite Dessine_signal_mx(Signaux[i].Img.Canvas,0,0,1,1,adr,1); - // allume les signaux du feu dans le TCO + // allume les feux du signal dans le TCO if TCOACtive then begin indexTCO:=1; @@ -4940,25 +4938,25 @@ begin 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 + adresse:=TCO[IndexTCO,x,y].adresse; // vérifie si le signal existe dans le TCO aspect:=Signaux[Index_Signal(adresse)].Aspect; case aspect of - 2 : ImageFeu:=Formprinc.Image2feux; - 3 : ImageFeu:=Formprinc.Image3feux; - 4 : ImageFeu:=Formprinc.Image4feux; - 5 : ImageFeu:=Formprinc.Image5feux; - 7 : ImageFeu:=Formprinc.Image7feux; - 9 : ImageFeu:=Formprinc.Image9feux; - 12 : ImageFeu:=Formprinc.Image2Dir; - 13 : ImageFeu:=Formprinc.Image3Dir; - 14 : ImageFeu:=Formprinc.Image4Dir; - 15 : ImageFeu:=Formprinc.Image5Dir; - 16 : ImageFeu:=Formprinc.Image6Dir; - 20 : ImageFeu:=formprinc.ImageSignal20; - else ImageFeu:=Formprinc.Image3feux; + 2 : ImageSignal:=Formprinc.Image2feux; + 3 : ImageSignal:=Formprinc.Image3feux; + 4 : ImageSignal:=Formprinc.Image4feux; + 5 : ImageSignal:=Formprinc.Image5feux; + 7 : ImageSignal:=Formprinc.Image7feux; + 9 : ImageSignal:=Formprinc.Image9feux; + 12 : ImageSignal:=Formprinc.Image2Dir; + 13 : ImageSignal:=Formprinc.Image3Dir; + 14 : ImageSignal:=Formprinc.Image4Dir; + 15 : ImageSignal:=Formprinc.Image5Dir; + 16 : ImageSignal:=Formprinc.Image6Dir; + 20 : ImageSignal:=formprinc.ImageSignal20; + else ImageSignal:=Formprinc.Image3feux; end; - TailleY:=ImageFeu.picture.BitMap.Height; // taille du signal d'origine - TailleX:=ImageFeu.picture.BitMap.Width; + TailleY:=ImageSignal.picture.BitMap.Height; // taille du signal d'origine + TailleX:=ImageSignal.picture.BitMap.Width; Orientation:=tco[indextco,x,y].FeuOriente; // réduction variable en fonction de la taille des cellules calcul_reduction(frx,fry,LargeurCell[indexTCO],HauteurCell[indexTCO]); @@ -5129,6 +5127,7 @@ end; // trouve un élément en balayant les branches à partir de la branche offset renvoie branche_trouve IndexBranche_trouve // el : adresse de l'élément TypeEL=(1=détécteur 2=aig 3=aig Bis 4=aig triple - Buttoir) // explore les branches +// si pas trouvé, Branche_trouve=0 IndexBranche_trouve=0 procedure trouve_element_V1(el: integer; TypeEl : TEquipement; Offset : integer); var i,adr,Branche : integer ; s : string; @@ -6142,12 +6141,12 @@ begin if trouve then signal_detecteur:=Signaux[i-1].adresse else signal_detecteur:=0; end; -// trouve l'index du feu associé au détecteur adr +// trouve l'index du signal associé au détecteur adr // renvoie dans voie le numéro de la voie (1 à 4) du signal sur lequel le détecteur se trouve -// attention , il peut y avoir plus d'un feu sur un detecteur (suivant le sens)! -// si 2eme feu, son index est dans index2 +// attention , il peut y avoir plus d'un signal sur un detecteur (suivant le sens)! +// si 2eme signal, son index est dans index2 function index_signal_det(adr : integer;var voie,index2 : integer) : integer ; - var trouve,i,index1 : integer; +var trouve,i,index1 : integer; trouve1,trouve2,trouve3,trouve4 : boolean; begin i:=1; @@ -7350,7 +7349,7 @@ end; // Si reserveTrainTiers=vrai, le parcours est réservé par un autre train function carre_signal(adresse,TrainReserve : integer;var reserveTrainTiers : boolean;Var AdrTrain : integer) : integer; var - i,j,k,prec,indexFeu,AdrSuiv,index2,voie,AdrFeu : integer; + i,j,k,prec,indexSignal,AdrSuiv,index2,voie,AdrSignal : integer; TypeELPrec,TypeElActuel : TEquipement; sort,prestrain : boolean; s : string; @@ -7382,7 +7381,7 @@ begin prec:=Signaux[i].Adr_det1; TypeElPrec:=Det; 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=det then TypeElActuel:=det; // le type du signal 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 @@ -7458,21 +7457,21 @@ begin end; // si le précédent est un détecteur comporte t-il un signal? - indexFeu:=0; + indexSignal:=0; if (typeElPrec=det) then begin - indexFeu:=index_signal_det(prec,voie,index2); // trouve l'index du feu correspondant au détecteur AdrSuiv + indexSignal:=index_signal_det(prec,voie,index2); // trouve l'index du signal correspondant au détecteur AdrSuiv - if indexFeu<>0 then + if indexSignal<>0 then begin - AdrFeu:=Signaux[indexFeu].adresse; + AdrSignal:=Signaux[indexSignal].adresse; - if nivdebug=3 then s:='Trouvé signal '+intToSTR(AdrFeu); - 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? + if nivdebug=3 then s:='Trouvé signal '+intToSTR(AdrSignal); + if ((voie=1) and (Signaux[indexSignal].Adr_el_suiv1=AdrSuiv)) or + ((voie=2) and (Signaux[indexSignal].Adr_el_suiv2=AdrSuiv)) or + ((voie=3) and (Signaux[indexSignal].Adr_el_suiv3=AdrSuiv)) or + ((voie=4) and (Signaux[indexSignal].Adr_el_suiv4=AdrSuiv)) + then // le signal est-il dans le bon sens de progression? begin if nivdebug=3 then begin s:=s+' dans le bon sens';AfficheDebug(s,clYellow);end; end @@ -7483,28 +7482,28 @@ begin s:=s+' dans le mauvais sens'; AfficheDebug(s,clYellow); end; - indexFeu:=0; - // 2eme feu? + indexSignal:=0; + // 2eme signal? if index2<>0 then begin - // vérifier le 2eme feu - AdrFeu:=Signaux[index2].Adresse; + // vérifier le 2eme signal + AdrSignal:=Signaux[index2].Adresse; - if (adrFeu=Adresse) then // si on ne reboucle sur le même signal dont on cherche le suivant + if (adrSignal=Adresse) then // si on ne reboucle sur le même signal dont on cherche le suivant begin - IndexFeu:=0; + IndexSignal:=0; j:=10; // on ne trouve pas de suivant end; - if (Signaux[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 signal 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); - indexFeu:=index2; + if NivDebug=3 then AfficheDebug('Sur même détecteur, trouvé signal2 suivant Adr='+IntToSTR(AdrSignal)+': ',clYellow); + indexSignal:=index2; end else begin - if NivDebug=3 then AfficheDebug('Sur même détecteur, trouvé signal2 '+intToSTR(AdrFeu)+' mais dans le mauvais sens',clYellow); - IndexFeu:=0; + if NivDebug=3 then AfficheDebug('Sur même détecteur, trouvé signal2 '+intToSTR(AdrSignal)+' mais dans le mauvais sens',clYellow); + IndexSignal:=0; end; end; end; @@ -7513,7 +7512,7 @@ begin end; // si le suivant est un aiguillage , mais ne vérifier que si pas trouvé de signal - if ((typeElActuel=Aig) or (typeElActuel=Crois)) and (AdrFeu=0) then + if ((typeElActuel=Aig) or (typeElActuel=Crois)) and (AdrSignal=0) then begin // adresse k:=index_aig(actuel); @@ -7528,9 +7527,9 @@ begin end; end; - sort:=(j=10) or (indexFeu<>0) or (AdrSuiv=9998) or (AdrSuiv=0); // arret si aiguillage en talon ou buttoir + sort:=(j=10) or (indexSignal<>0) or (AdrSuiv=9998) or (AdrSuiv=0); // arret si aiguillage en talon ou buttoir until (sort); - // si trouvé un feu ou j=10, les aiguillages sont bien positionnés + // si trouvé un signal ou j=10, les aiguillages sont bien positionnés // si trouvé 9998, aiguillages mal positionnés if (NivDebug=3) then begin @@ -7547,7 +7546,7 @@ end; // renvoie l'adresse du signal suivant (et dans le bon sens) à partir du détecteur det1 (non compris) et dans le sens det1 vers det2. // Si renvoie 0, pas trouvé le signal suivant. function signal_suivant_det(det1,det2 : integer) : integer; -var num_feu,AdrFeu,i,j,prec,AdrSuiv,index2,voie : integer; +var num_signal,AdrSignal,i,j,prec,AdrSuiv,index2,voie : integer; Typ,TypePrec,TypeActuel : TEquipement; s : string; begin @@ -7614,62 +7613,62 @@ begin end; end; // si le suivant est un détecteur comporte t-il un signal? - AdrFeu:=0; + AdrSignal:=0; if (TypeActuel=det) then // détecteur? begin - i:=Index_signal_det(Actuel,voie,index2); // trouve l'index de feu affecté au détecteur "Actuel" + i:=Index_signal_det(Actuel,voie,index2); // trouve l'index de signal affecté au détecteur "Actuel" if i<>0 then begin - AdrFeu:=Signaux[i].Adresse; - if (adrFeu=det1) then // si on ne reboucle sur le même signal dont on cherche le suivant + AdrSignal:=Signaux[i].Adresse; + if (AdrSignal=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 + AdrSignal:=0;j:=10; // on ne trouve pas de suivant end; - if (AdrFeu<>0) then // si l'adresse est <>0 + if (AdrSignal<>0) then // si l'adresse est <>0 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 nivdebug=3 then afficheDebug('Trouvé signal='+IntToSTR(AdrSignal)+'sur det '+intToSTR(actuel)+' Suivant='+IntToSTR(AdrSuiv)+' sur voie='+IntToSTR(voie),clyellow ); 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? + then // le signal est-il dans le bon sens de progression? begin // oui - signal_suivant_det:=AdrFeu; + signal_suivant_det:=AdrSignal; if NivDebug=3 then begin - s:='Trouvé signal suivant Adr='+IntToSTR(AdrFeu); + s:='Trouvé signal suivant Adr='+IntToSTR(AdrSignal); AfficheDebug(s,clorange); end; end else begin - if NivDebug=3 then AfficheDebug('Trouvé signal '+intToSTR(AdrFeu)+' mais dans le mauvais sens',clOrange); - AdrFeu:=0; + if NivDebug=3 then AfficheDebug('Trouvé signal '+intToSTR(AdrSignal)+' mais dans le mauvais sens',clOrange); + AdrSignal:=0; if index2<>0 then begin - // vérifier le 2eme feu - AdrFeu:=Signaux[index2].Adresse; - if (adrFeu=det1) then // si on ne reboucle sur le même signal dont on cherche le suivant + // vérifier le 2eme signal + AdrSignal:=Signaux[index2].Adresse; + if (AdrSignal=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 + AdrSignal:=0;j:=10; // on ne trouve pas de suivant end; - if (Signaux[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 signal est-il dans le bon sens de progression? begin // oui - inc(num_feu); - signal_suivant_det:=AdrFeu; + inc(num_signal); + signal_suivant_det:=AdrSignal; if NivDebug=3 then begin - s:=IntToSTR(AdrFeu); + s:=IntToSTR(AdrSignal); AfficheDebug('Sur même détecteur, trouvé signal2 suivant Adr='+s,clorange); end; end else begin - if NivDebug=3 then AfficheDebug('Sur même détecteur, trouvé signal2 '+intToSTR(AdrFeu)+' mais dans le mauvais sens',clOrange); - AdrFeu:=0; + if NivDebug=3 then AfficheDebug('Sur même détecteur, trouvé signal2 '+intToSTR(AdrSignal)+' mais dans le mauvais sens',clOrange); + AdrSignal:=0; end; end; end; @@ -7677,11 +7676,11 @@ begin end else if nivDebug=3 then AfficheDebug('Pas de signal pour le det '+IntToSTR(AdrSuiv),clyellow); end; - until (j=10) or (AdrFeu<>0); - signal_suivant_det:=Adrfeu; + until (j=10) or (AdrSignal<>0); + signal_suivant_det:=AdrSignal; if debug=3 then formprinc.Caption:=''; - if (NivDebug=3) and (adrFeu=0) then AfficheDebug('Pas Trouvé de signal suivant au signal Adr='+IntToSTR(det1),clOrange); + if (NivDebug=3) and (AdrSignal=0) then AfficheDebug('Pas Trouvé de signal suivant au signal Adr='+IntToSTR(det1),clOrange); end; function modele(adresse : integer;mdl : tEquipement) : tequipement; @@ -7696,11 +7695,11 @@ end; // renvoie l'état du signal suivant du signal "adresse". Si renvoie 0, pas trouvé le signal suivant. // adresse : adresse du signal -// rang=1 pour feu suivant, 2 pour feu suivant le 1, etc -// retour dans AdrSignalsuivant : adresse du feu suivant +// rang=1 pour signal suivant, 2 pour signal suivant le 1, etc +// retour dans AdrSignalsuivant : adresse du signal suivant // stocke les éléments trouvés dans Elements function etat_signal_suivant(Adresse,rang : integer;var AdrSignalsuivant : integer) : integer; -var index,num_feu,etat,AdrFeu,i,j,prec,AdrSuiv,index2,voie : integer; +var index,num_signal,etat,AdrSignal,i,j,prec,AdrSuiv,index2,voie : integer; aspect,combine : integer; TypePrec,TypeActuel,typ : TEquipement; s : string; @@ -7716,7 +7715,7 @@ begin end; 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'; + s:='La demande de l''état du signal suivant depuis un signal directionnel '+IntToSTR(Adresse)+' est irrecevable'; Affiche(s,clred); AfficheDebug(s,clred); etat_signal_suivant:=0; @@ -7725,7 +7724,7 @@ begin Etat:=0; j:=0; - num_feu:=0; + num_signal:=0; prec:=Signaux[i].Adr_det1; // détecteur sur le courant TypePrec:=det; if prec=0 then @@ -7799,62 +7798,62 @@ begin end; end; // si le suivant est un détecteur comporte t-il un signal? - AdrFeu:=0; + AdrSignal:=0; if (TypeActuel=det) then // détecteur? begin - i:=Index_signal_det(Actuel,voie,index2); // trouve l'index de feu affecté au détecteur "Actuel" + i:=Index_signal_det(Actuel,voie,index2); // trouve l'index de signal affecté au détecteur "Actuel" if i<>0 then begin - AdrFeu:=Signaux[i].Adresse; - if (adrFeu=Adresse) then // si on ne reboucle sur le même signal dont on cherche le suivant + AdrSignal:=Signaux[i].Adresse; + if (AdrSignal=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 + AdrSignal:=0;j:=10; // on ne trouve pas de suivant end; - if (AdrFeu<>0) then // si l'adresse est <>0 + if (AdrSignal<>0) then // si l'adresse est <>0 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 nivdebug=3 then afficheDebug('Trouvé signal='+IntToSTR(AdrSignal)+'sur det '+intToSTR(actuel)+' Suivant='+IntToSTR(AdrSuiv)+' sur voie='+IntToSTR(voie),clyellow ); 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? + then // le signal est-il dans le bon sens de progression? begin // oui - inc(num_feu); - Etat:=Signaux[Index_Signal(AdrFeu)].EtatSignal; + inc(num_signal); + Etat:=Signaux[Index_Signal(AdrSignal)].EtatSignal; code_to_aspect(Etat,aspect,combine); - Signal_suivant:=AdrFeu; + Signal_suivant:=AdrSignal; if NivDebug=3 then begin - s:='Trouvé signal suivant Adr='+IntToSTR(AdrFeu)+': '+IntToSTR(etat)+'='; - s:=s+chaine_signal(AdrFeu); + s:='Trouvé signal suivant Adr='+IntToSTR(AdrSignal)+': '+IntToSTR(etat)+'='; + s:=s+chaine_signal(AdrSignal); AfficheDebug(s,clorange); end; end else begin - if NivDebug=3 then AfficheDebug('Trouvé signal '+intToSTR(AdrFeu)+' mais dans le mauvais sens',clOrange); - AdrFeu:=0; + if NivDebug=3 then AfficheDebug('Trouvé signal '+intToSTR(AdrSignal)+' mais dans le mauvais sens',clOrange); + AdrSignal:=0; if index2<>0 then begin - // vérifier le 2eme feu - AdrFeu:=Signaux[index2].Adresse; + // vérifier le 2eme signal + AdrSignal:=Signaux[index2].Adresse; - if (adrFeu=Adresse) then // si on ne reboucle sur le même signal dont on cherche le suivant + if (AdrSignal=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 + AdrSignal:=0;j:=10; // on ne trouve pas de suivant end; - if (Signaux[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 signal est-il dans le bon sens de progression? begin // oui - inc(num_feu); - Etat:=Signaux[Index_Signal(AdrFeu)].EtatSignal; + inc(num_signal); + Etat:=Signaux[Index_Signal(AdrSignal)].EtatSignal; code_to_aspect(Etat,aspect,combine); - Signal_suivant:=AdrFeu; + Signal_suivant:=AdrSignal; if NivDebug=3 then begin - s:=IntToSTR(AdrFeu)+': '+IntToSTR(etat)+'='; + s:=IntToSTR(AdrSignal)+': '+IntToSTR(etat)+'='; if aspect<>-1 then s:=s+EtatSign[aspect]+' '; if combine<>-1 then s:=s+EtatSign[combine]; AfficheDebug('Sur même détecteur, trouvé signal2 suivant Adr='+s,clorange); @@ -7862,28 +7861,27 @@ begin end else begin - if NivDebug=3 then AfficheDebug('Sur même détecteur, trouvé signal2 '+intToSTR(AdrFeu)+' mais dans le mauvais sens',clOrange); - AdrFeu:=0; + if NivDebug=3 then AfficheDebug('Sur même détecteur, trouvé signal2 '+intToSTR(AdrSignal)+' mais dans le mauvais sens',clOrange); + AdrSignal:=0; end; end; -// AdrFeu:=0; end; end end else if nivDebug=3 then AfficheDebug('Pas de signal pour le det '+IntToSTR(AdrSuiv),clyellow); end; - until (j=10) or ((AdrFeu<>0) and (num_feu=rang)); + until (j=10) or ((AdrSignal<>0) and (num_signal=rang)); if etat=0 then Signal_Suivant:=0; etat_signal_suivant:=Etat; AdrSignalsuivant:=Signal_suivant; - if (NivDebug=3) and (adrFeu=0) then AfficheDebug('Pas Trouvé de feu suivant au feu Adr='+IntToSTR(ADresse),clOrange); + if (NivDebug=3) and (AdrSignal=0) then AfficheDebug('Pas Trouvé de signal suivant au signal Adr='+IntToSTR(ADresse),clOrange); end; // renvoie l'adresse de la première aiguille déviée après le signal "adresse" et ce jusqu'au prochain signal // sinon il n'y a pas d'aiguille ou si pas dévié, renvoie 0 // adresse=adresse du signal function Aiguille_deviee(adresse : integer) : integer ; -var AdrFeu,i,j,prec,AdrSuiv,Actuel,index,index2,voie : integer; +var AdrSignal,i,j,prec,AdrSuiv,Actuel,index,index2,voie : integer; TypePrec,TypeActuel : TEquipement; s : string; begin @@ -7900,7 +7898,7 @@ begin TypePrec:=det; actuel:=Signaux[i].Adr_el_suiv1; TypeActuel:=Signaux[i].Btype_suiv1 ; - AdrFeu:=0; + AdrSignal:=0; AdrDevie:=0; if (TypeActuel=aig) then // aiguillage begin @@ -7921,15 +7919,15 @@ begin prec:=actuel;TypePrec:=TypeActuel; actuel:=AdrSuiv;TypeActuel:=typeGen; // si le suivant est un détecteur comporte t-il un signal? - AdrFeu:=0; + AdrSignal:=0; 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:=Signaux[i].Adresse; - if NivDebug=3 then AfficheDebug('trouvé signal '+intToSTR(AdrFeu)+' associé au détecteur '+IntToSTR(AdrSuiv),clyellow); + AdrSignal:=Signaux[i].Adresse; + if NivDebug=3 then AfficheDebug('trouvé signal '+intToSTR(AdrSignal)+' associé au détecteur '+IntToSTR(AdrSuiv),clyellow); end; end; - until (j=10) or (AdrSuiv>=9990) or (AdrFeu<>0) or (AdrSuiv=0) ; + until (j=10) or (AdrSuiv>=9990) or (AdrSignal<>0) or (AdrSuiv=0) ; if (AdrSuiv=9997) then begin s:='le signal '+intToSTR(adresse)+' doit afficher un rappel car l''aiguillage '+intToSTR(AdrDevie); @@ -7960,7 +7958,7 @@ begin end; end; -// allume le signal directionnel d'adresse ADR en fonction de la position des aiguillages déclarés pour ce feu +// allume le signal directionnel d'adresse ADR en fonction de la position des aiguillages déclarés pour ce signal procedure Signal_direction(Adr : integer); var NAig,i,id,j,NfeuxDir,AdrAigFeu,Position : integer; PosAigFeu : char; @@ -7999,7 +7997,7 @@ end; function test_memoire_zones(adresse : integer) : boolean; var AdrSuiv,prec,ife,actuel,i,j,it,isi, - dernierdet,AdrFeu,Nfeux,NFeuxMax,voie,index2 : integer; + dernierdet,AdrSignal,NSignaux,NSigMax,voie,index2 : integer; TypePrec,TypeActuel : TEquipement; Pres_train : boolean; s : string; @@ -8016,11 +8014,11 @@ begin end; if debug=3 then formprinc.Caption:='Test_memoire_zones '+IntToSTR(adresse); - NFeuxMax:=1; // nombre de feux à trouver (nombre de cantons) + NSigMax:=1; // nombre de feux à trouver (nombre de cantons) ife:=1; // index feu de 1 à 4 pour explorer les 4 détecteurs d'un feu repeat - Nfeux:=0; + NSignaux:=0; if NivDebug=3 then AfficheDebug('Boucle de test signal '+intToSTR(ife)+'/4',clOrange); if (ife=1) then begin @@ -8113,24 +8111,24 @@ 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:=Signaux[isi].adresse; // adresse du feu - if (AdrFeu=adresse) then // si on ne reboucle sur le même signal dont on cherche le suivant + AdrSignal:=Signaux[isi].adresse; // adresse du feu + if (AdrSignal=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 + AdrSignal:=0;j:=10; // on ne trouve pas de suivant test_memoire_zones:=false; if debug=3 then formprinc.Caption:=''; exit; end; - if (AdrFeu<>0) then // si l'adresse est <>0 + if (AdrSignal<>0) then // si l'adresse est <>0 begin if (Signaux[isi].Adr_el_suiv1<>prec) then // le feu est-il dans le bon sens de progression? begin - inc(Nfeux); + inc(NSignaux); j:=0; - s:='Trouvé signal ('+IntToSTR(nfeux)+'/'+intToSTR(NFeuxMax)+') '+IntToSTR(AdrFeu); + s:='Trouvé signal (n°'+IntToSTR(NSignaux)+'/'+intToSTR(NSigMax)+') '+IntToSTR(AdrSignal); if (NivDebug=3) And Pres_Train then AfficheDebug(s+' et mémoire de zone à 1',clyellow); if (NivDebug=3) And (not(Pres_Train)) then AfficheDebug(s+' et mémoire de zone à 0',clOrange); - if nFeux=NFeuxMax then + if NSignaux=NSigMax then begin test_memoire_zones:=Pres_train; if debug=3 then formprinc.Caption:=''; @@ -8138,8 +8136,8 @@ begin end else begin - if NivDebug=3 then AfficheDebug('Trouvé signal '+intToSTR(AdrFeu)+' mais dans le mauvais sens',clYellow); - AdrFeu:=0; + if NivDebug=3 then AfficheDebug('Trouvé signal '+intToSTR(AdrSignal)+' mais dans le mauvais sens',clYellow); + AdrSignal:=0; end; end; end; @@ -8155,7 +8153,7 @@ begin prec:=actuel;TypePrec:=TypeActuel; actuel:=AdrSuiv;TypeActuel:=typeGen; - until (j=10) or pres_train or (nFeux=NFeuxMax); // on arrete si on va trop loin (10 itérations) + until (j=10) or pres_train or (NSignaux=NSigMax); // on arrete si on va trop loin (10 itérations) inc(ife); until ife>=5; if (NivDebug>0) then AfficheDebug('Pas trouvé de signal suivant au '+intToSTR(adresse),clyellow); @@ -8218,7 +8216,7 @@ end; function Signal_precedent(adresse : integer) : integer; var AdrSuiv,prec,ife,actuel,i,j,ifd,index, - dernierdet,AdrFeu,Nfeux,voie,index2 : integer; + dernierdet,AdrSignal,Nsignaux,voie,index2 : integer; TypePrec,TypeActuel : TEquipement; malpositionne : boolean; s : string; @@ -8237,7 +8235,7 @@ begin end; idEl:=1; - Nfeux:=0; + Nsignaux:=0; ife:=1; // index feu de 1 à 4 pour explorer les 4 détecteurs d'un feu repeat j:=0; @@ -8326,25 +8324,25 @@ 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:=Signaux[ifd].adresse; // adresse du feu - if (AdrFeu=adresse) then // si on ne reboucle sur le même signal dont on cherche le suivant + AdrSignal:=Signaux[ifd].adresse; // adresse du feu + if (AdrSignal=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 + if (AdrSignal<>0) then // si l'adresse est <>0 begin 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); - Signal_precedent:=AdrFeu; + inc(Nsignaux); + s:='Trouvé signal '+IntToSTR(AdrSignal); + Signal_precedent:=AdrSignal; if debug=3 then formprinc.Caption:=''; exit; end else begin - if NivDebug=3 then AfficheDebug('Trouvé signal '+intToSTR(AdrFeu)+' mais dans le mauvais sens',clYellow); - AdrFeu:=0; + if NivDebug=3 then AfficheDebug('Trouvé signal '+intToSTR(AdrSignal)+' mais dans le mauvais sens',clYellow); + AdrSignal:=0; end; end; end; @@ -8368,7 +8366,7 @@ end; function PresTrainPrec(Adresse,NbCtSig : integer;detect : boolean;var AdrTr,voie : integer) : boolean; var AdrSuiv,prec,ife,actuel,i,j,k,ifd,d, - dernierdet,AdrFeu,Nfeux,NFeuxMax,voieLoc,index2 : integer; + dernierdet,AdrSignal,Nsignaux,voieLoc,index2 : integer; TypePrec,TypeActuel : TEquipement; Pres_train,malpositionne,etat,etatDet,EtatZone : boolean; s : string; @@ -8377,7 +8375,7 @@ begin if debug=3 then formprinc.Caption:='PresTrainPrec '+IntToSTR(adresse); if NivDebug>=1 then begin - s:='Proc PresTrainPrec('+intToSTR(adresse)+') '; + s:='Proc PresTrainPrec('+intToSTR(adresse)+','+intToSTR(NbCtSig)+') '; if detect then s:=s+'avec zones de détecteurs et détecteurs' else s:=s+'sur zones de détecteurs uniquement'; AfficheDebug(s,clyellow); @@ -8393,9 +8391,6 @@ begin exit; end; - - NFeuxMax:=NbCtSig; // nombre de feux à trouver (nombre de cantons) - ife:=1; // index voie de 1 à 4 pour explorer les 4 détecteurs d'un feu repeat if NivDebug=3 then AfficheDebug('Boucle de test signal '+intToSTR(ife)+'/4',clOrange); @@ -8470,7 +8465,7 @@ begin dernierdet:=actuel; j:=0; - nFeux:=0; + Nsignaux:=0; repeat inc(j); @@ -8541,26 +8536,26 @@ 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:=Signaux[ifd].adresse; // adresse du signal - if (AdrFeu=adresse) then // si on ne reboucle sur le même signal dont on cherche le suivant + AdrSignal:=Signaux[ifd].adresse; // adresse du signal + if (AdrSignal=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 + AdrSignal:=0; // on ne trouve pas de suivant PresTrainPrec:=false; AdrTr:=0; if debug=3 then formprinc.Caption:=''; voie:=ife; exit; end; - if (AdrFeu<>0) then // si l'adresse est <>0 + if (AdrSignal<>0) then // si l'adresse est <>0 begin if (Signaux[ifd].Adr_el_suiv1=prec) then // le feu est-il dans le bon sens de progression? begin - inc(Nfeux); + inc(Nsignaux); j:=0; - s:='Trouvé signal '+intToStr(AdrFeu)+' ('+IntToSTR(nfeux)+'/'+intToSTR(NFeuxMax)+') '+IntToSTR(AdrFeu); + s:='Trouvé signal '+intToStr(AdrSignal)+' ('+IntToSTR(Nsignaux)+'/'+intToSTR(NbCtSig)+') '+IntToSTR(AdrSignal); if (NivDebug=3) And Pres_Train then AfficheDebug(s+' et mémoire de zone à 1',clOrange); if (NivDebug=3) And (not(Pres_Train)) then AfficheDebug(s+' et mémoire de zone à 0',clOrange); - if nFeux=NFeuxMax then // si atteint les 3 signaux (3 cantons) + if nSignaux=NbCtSig then // si atteint les 3 signaux (3 cantons) begin presTrainPrec:=pres_train; if debug=3 then formprinc.Caption:=''; @@ -8587,14 +8582,14 @@ begin end else begin - if NivDebug=3 then AfficheDebug('Trouvé signal '+intToSTR(AdrFeu)+' mais dans le mauvais sens',clYellow); - AdrFeu:=0; + if NivDebug=3 then AfficheDebug('Trouvé signal '+intToSTR(AdrSignal)+' mais dans le mauvais sens',clYellow); + AdrSignal:=0; end; end; end; end; end; - until (j=10) or Pres_train or malpositionne or (nfeux>=NFeuxMax); // on arrete jusqu'à trouver un train ou un signal ou si on va trop loin (10 itérations) + until (j=10) or Pres_train or malpositionne or (Nsignaux>=NbCtSig); // on arrete jusqu'à trouver un train ou un signal ou si on va trop loin (10 itérations) inc(ife); until (ife>=5) or Pres_train; if (NivDebug>0) then AfficheDebug('606. Pas trouvé de signal suivant au '+intToSTR(adresse),clyellow); @@ -8603,6 +8598,7 @@ begin PresTrainPrec:=Pres_Train; end; +// renvoie vrai si le signal est au carré, sémaphore, sémaphore cli, violet function signal_rouge(adresse : word) : boolean; var etat,i : integer; begin @@ -8614,7 +8610,7 @@ end; // met à jour l'état du signel belge selon l'environnement des aiguillages et des trains -procedure signal_belge(Adrfeu : integer;detect : boolean); +procedure signal_belge(AdrSignal : integer;detect : boolean); var adrAig,adr_det,adr_el_suiv,AdrTrainLoc,voie,indexAig,etat,AdrSignalsuivant,AdrTrainRes,detSuiv : integer; Btype_el_suivant : TEquipement; car,presTrain,reserveTrainTiers,Aff_Semaphore : boolean; @@ -8622,57 +8618,57 @@ var adrAig,adr_det,adr_el_suiv,AdrTrainLoc,voie,indexAig,etat,AdrSignalsuivant,A begin if affsignal=false then begin - if signalDebug=AdrFeu then AffSignal:=true + if signalDebug=AdrSignal then AffSignal:=true else affsignal:=false; end; if AffSignal then begin - s:='Traitement du signal '+intToSTR(Adrfeu)+'------------------------------------'; + s:='Traitement du signal '+intToSTR(AdrSignal)+'------------------------------------'; AfficheDebug(s,clOrange); nivDebug:=3; end; if affSignal then AfficheDebug('Signal belge',clOrange); - index:=Index_Signal(AdrFeu); + index:=Index_Signal(AdrSignal); 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 + Adr_El_Suiv:=Signaux[index].Adr_el_suiv1; // adresse élément suivant au signal 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é + // détecteurs précédent le signal , pour déterminer si leurs mémoires de zones sont à 1 pour libérer le carré //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 + presTrain:=PresTrainPrec(AdrSignal,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 // verrouillable au carré, afficher un carré - car:=carre_signal(AdrFeu,AdrTrainLoc,reserveTrainTiers,AdrTrainRes)<>0; // si reserveTrainTiers, réservé par un autre train + car:=carre_signal(AdrSignal,AdrTrainLoc,reserveTrainTiers,AdrTrainRes)<>0; // si reserveTrainTiers, réservé par un autre train if AffSignal and reserveTrainTiers then AfficheDebug('Trouvé aiguillage réservé par autre train (@'+intToSTR(AdrTrainRes)+')',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 roulage then car:=reserveTrainTiers or car; // conditions supplémentaires de carré en fonction des aiguillages décrits - car:=cond_carre(AdrFeu) or car; + car:=cond_carre(AdrSignal) or car; if AffSignal and Signaux[index].VerrouCarre then AfficheDebug('le signal est verrouillé au carré',clYellow); if (Signaux[index].VerrouCarre and not(presTrain)) or car - then Maj_Etat_Signal_belge(AdrFeu,semaphore) + then Maj_Etat_Signal_belge(AdrSignal,semaphore) else begin // si on quitte le détecteur on affiche un sémaphore : tester le sens de circulation - // pour ne pas passer au rouge un feu à contresens. + // pour ne pas passer au rouge un signal à contresens. // trouver la mémoire de zone MemZone[Adr_det,?] qui a déclenché le feu rouge if AffSignal then AfficheDebug('Test du sémaphore',clYellow); - Aff_semaphore:=test_memoire_zones(AdrFeu); // test si présence train après signal + Aff_semaphore:=test_memoire_zones(AdrSignal); // test si présence train après signal if Aff_Semaphore then begin - if AffSignal then AfficheDebug('Présence train après signal'+intToSTR(AdrFeu)+' -> sémaphore ou carré',clYellow); - if Signaux[index].checkFR then Maj_Etat_Signal_belge(AdrFeu,semaphore_cli) - else Maj_Etat_Signal_belge(AdrFeu,semaphore); + if AffSignal then AfficheDebug('Présence train après signal'+intToSTR(AdrSignal)+' -> sémaphore ou carré',clYellow); + if Signaux[index].checkFR then Maj_Etat_Signal_belge(AdrSignal,semaphore_cli) + else Maj_Etat_Signal_belge(AdrSignal,semaphore); end else begin @@ -8684,25 +8680,25 @@ begin //rouge if aiguillage[IndexAig].position=const_devie then begin - 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 + if Signaux[index].verscontrevoie then Maj_Etat_Signal_belge(AdrSignal,chevron_F or bita1_F) else Maj_Etat_Signal_belge(AdrSignal,chevron_F); + if aiguillage[indexAig].vitesse<>0 then Maj_Etat_Signal_belge(AdrSignal,chiffre_F or bita1_F) // allumer le chiffre else - Maj_Etat_Signal_belge(AdrFeu,chiffre_F); // effacer le chiffre + Maj_Etat_Signal_belge(AdrSignal,chiffre_F); // effacer le chiffre end - else begin Maj_Etat_Signal_belge(AdrFeu,chiffre_F); Maj_Etat_Signal_belge(AdrFeu,chevron_F);end; + else begin Maj_Etat_Signal_belge(AdrSignal,chiffre_F); Maj_Etat_Signal_belge(AdrSignal,chevron_F);end; end; // rouge - etat:=etat_signal_suivant(AdrFeu,1,AdrSignalsuivant) ; // état du signal suivant + adresse du signal suivant dans Signal_Suivant - if adrSignalSuivant=0 then Maj_Etat_Signal_belge(AdrFeu,semaphore) + etat:=etat_signal_suivant(AdrSignal,1,AdrSignalsuivant) ; // état du signal suivant + adresse du signal suivant dans Signal_Suivant + if adrSignalSuivant=0 then Maj_Etat_Signal_belge(AdrSignal,semaphore) else begin - if TestBit(etat,semaphore) or TestBit(etat,carre) or TestBit(etat,rouge_blanc) then Maj_Etat_Signal_belge(AdrFeu,deux_jaunes) + if TestBit(etat,semaphore) or TestBit(etat,carre) or TestBit(etat,rouge_blanc) then Maj_Etat_Signal_belge(AdrSignal,deux_jaunes) else begin if testBit(etat,chiffre) then begin - Maj_Etat_Signal_belge(AdrFeu,vert_jaune_H) + Maj_Etat_Signal_belge(AdrSignal,vert_jaune_H) end else // aiguille signal suivant droite @@ -8714,26 +8710,26 @@ begin begin //if affsignal then AfficheDebug('test 406',clyellow); if Signaux[index].checkFB.Checked then - Maj_Etat_Signal_belge(AdrFeu,rouge_blanc) - else Maj_Etat_Signal_belge(AdrFeu,vertB); + Maj_Etat_Signal_belge(AdrSignal,rouge_blanc) + else Maj_Etat_Signal_belge(AdrSignal,vertB); end else begin - Maj_Etat_Signal_belge(AdrFeu,vertB); - //if affsignal then AfficheDebug('Mise du feu au vert',clyellow); + Maj_Etat_Signal_belge(AdrSignal,vertB); + //if affsignal then AfficheDebug('Mise du signal au vert',clyellow); end; end; end; end; end; end; - envoi_signal(AdrFeu); + envoi_signal(AdrSignal); // si le signal n'est pas rouge, réserver les aiguillages en aval if (roulage or AvecResa) and (AdrTrainLoc<>0) then begin etat:=Signaux[index].EtatSignal; - if not(signal_rouge(AdrFeu)) then + if not(signal_rouge(AdrSignal)) then begin adr_Det:=Signaux[index].Adr_det1; if detecteur[adr_det].Etat then @@ -8749,63 +8745,62 @@ begin end; end; - if signalDebug=AdrFeu then begin AffSignal:=false;nivDebug:=0;end; + if signalDebug=AdrSignal then begin AffSignal:=false;nivDebug:=0;end; if debug=3 then formprinc.Caption:=''; end; // mise à jour de l'état d'un signal en fonction de son environnement et affiche le signal -// AdrFeu: adresse du signal +// AdrSignal: adresse du signal // detect: si true, tient compte de la présence des trains par détecteurs dans la fonction signalPrec -procedure Maj_Feu(Adrfeu : integer;detect : boolean); -var Adr_det,etat,Aig,Adr_El_Suiv,modele,index,IndexAig,AdrTrainLoc,voie,detSuiv : integer ; +procedure Maj_Signal(AdrSignal : integer;detect : boolean); +var Adr_det,etat,Aig,Adr_El_Suiv,modele,index,IndexAig,AdrTrainLoc,voie,detSuiv,code,combine,AdrSignalsuivant,AdrTrainRes : integer ; PresTrain,Aff_semaphore,car,reserveTrainTiers : boolean; - code,combine,AdrSignalsuivant,AdrTrainRes : integer; Btype_el_suivant : TEquipement; s : string; begin if affsignal=false then begin - if signalDebug=AdrFeu then + if signalDebug=AdrSignal then AffSignal:=true else affsignal:=false; end; if AffSignal or ProcPrinc then begin - s:='Traitement du signal '+intToSTR(Adrfeu)+'------------------------------------'; + s:='Traitement du signal '+intToSTR(AdrSignal)+'------------------------------------'; AfficheDebug(s,clOrange); if AffSignal then nivDebug:=3; end; - index:=Index_Signal(Adrfeu); - if (Nivdebug>=1) then AfficheDebug('Proc Maj_feu '+IntToSTR(adrFeu)+'-------------',clorange); + index:=Index_Signal(AdrSignal); + if (Nivdebug>=1) then AfficheDebug('Proc Maj_Signal '+IntToSTR(AdrSignal)+'-------------',clorange); - if (AdrFeu=0) or (index=0) then exit; + if (AdrSignal=0) or (index=0) then exit; modele:=Signaux[index].aspect; if modele=20 then begin - signal_belge(AdrFeu,detect); + signal_belge(AdrSignal,detect); exit; end; // ici signal français 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 + Adr_El_Suiv:=Signaux[index].Adr_el_suiv1; // adresse élément suivant au signal Btype_el_suivant:=Signaux[index].Btype_suiv1; // signal directionnel ? if (modele>10) and (modele<20) then begin - //Affiche('Signal directionnel '+IntToSTR(AdrFeu),clyellow); - Signal_direction(AdrFeu); + //Affiche('Signal directionnel '+IntToSTR(AdrSignal),clyellow); + Signal_direction(AdrSignal); if debug=3 then formprinc.Caption:=''; exit; end; // signal non directionnel - etat:=etat_signal_suivant(AdrFeu,1,AdrSignalsuivant) ; // état du signal suivant + adresse du signal suivant dans Signal_Suivant + etat:=etat_signal_suivant(AdrSignal,1,AdrSignalsuivant) ; // état du signal suivant + adresse du signal suivant dans Signal_Suivant if AffSignal then begin code_to_aspect(etat,code,combine); @@ -8819,16 +8814,16 @@ begin 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 (Signaux[index].VerrouCarre) then + PresTrain:=PresTrainPrec(AdrSignal,Nb_cantons_Sig,detect,AdrTrainLoc,voie); + if (carre_signal(AdrSignal,AdrTrainLoc,reserveTrainTiers,AdrTrainRes)<>0) or not(PresTrain) or (Signaux[index].VerrouCarre) then begin - Maj_Etat_Signal(AdrFeu,violet); + Maj_Etat_Signal(AdrSignal,violet); if debug=3 then formprinc.Caption:=''; end else begin - if not(cond_FeuBlanc(AdrFeu)) and test_memoire_zones(AdrFeu) then Maj_Etat_Signal(AdrFeu,violet) // test si présence train après signal - else Maj_Etat_Signal(AdrFeu,blanc); + if not(cond_FeuBlanc(AdrSignal)) and test_memoire_zones(AdrSignal) then Maj_Etat_Signal(AdrSignal,violet) // test si présence train après signal + else Maj_Etat_Signal(AdrSignal,blanc); // faire la réservation des aiguillages if debug=3 then formprinc.Caption:=''; end; @@ -8838,74 +8833,74 @@ begin 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é + // détecteurs précédent le signal , pour déterminer si leurs mémoires de zones sont à 1 pour libérer le carré //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 + presTrain:=PresTrainPrec(AdrSignal,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 // verrouillable au carré, afficher un carré - car:=carre_signal(AdrFeu,AdrTrainLoc,reserveTrainTiers,AdrTrainRes)<>0; // si reserveTrainTiers, réservé par un autre train + car:=carre_signal(AdrSignal,AdrTrainLoc,reserveTrainTiers,AdrTrainRes)<>0; // si reserveTrainTiers, réservé par un autre train 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 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; + car:=cond_carre(AdrSignal) or car; //if AffSignal and car then AfficheDebug('le signal a des aiguilles en talon aval mal positionnées',clYellow); 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) + if (modele>=4) and ((not(PresTrain) and Signaux[index].Verroucarre) or car ) then Maj_Etat_Signal(AdrSignal,carre) else begin // si on quitte le détecteur on affiche un sémaphore : tester le sens de circulation - // pour ne pas passer au rouge un feu à contresens. + // pour ne pas passer au rouge un signal à contresens. // trouver la mémoire de zone MemZone[Adr_det,?] qui a déclenché le feu rouge if AffSignal then AfficheDebug('test du sémaphore',clYellow); - Aff_semaphore:=test_memoire_zones(AdrFeu); // test si présence train après signal + Aff_semaphore:=test_memoire_zones(AdrSignal); // test si présence train après signal if Aff_Semaphore then begin - if AffSignal then AfficheDebug('Présence train après signal'+intToSTR(AdrFeu)+' -> sémaphore ou carré',clYellow); + if AffSignal then AfficheDebug('Présence train après signal'+intToSTR(AdrSignal)+' -> sémaphore ou carré',clYellow); if testBit(Signaux[index].EtatSignal,carre)=FALSE then begin - if Signaux[index].checkFR then Maj_Etat_Signal(AdrFeu,semaphore_cli) - else Maj_Etat_Signal(AdrFeu,semaphore); + if Signaux[index].checkFR then Maj_Etat_Signal(AdrSignal,semaphore_cli) + else Maj_Etat_Signal(AdrSignal,semaphore); end; end else begin - if cond_feuBlanc(AdrFeu) then Maj_Etat_Signal(AdrFeu,blanc) + if cond_feuBlanc(AdrSignal) then Maj_Etat_Signal(AdrSignal,blanc) else begin - Aig:=Aiguille_deviee(Adrfeu); + Aig:=Aiguille_deviee(AdrSignal); // si aiguille locale 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); + if AffSignal then AfficheDebug('Aiguillage '+intToSTR(aig)+' du signal '+intToSTR(AdrSignal)+' déviée',clYellow); 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) + if (aiguillage[indexAig].vitesse<=30) then Maj_Etat_Signal(AdrSignal,rappel_30) else + if ((aiguillage[indexAig].vitesse>30) and (aiguillage[indexAig].vitesse<=60)) then Maj_Etat_Signal(AdrSignal,rappel_60) else begin - Maj_Etat_Signal(AdrFeu,rappel_30); - s:='Aiguillage '+intToSTR(aig)+'dévié mais vitesse de franchissement mal définie pour le signal '+intToSTR(AdrFeu)+' '; + Maj_Etat_Signal(AdrSignal,rappel_30); + s:='Aiguillage '+intToSTR(aig)+'dévié mais vitesse de franchissement mal définie pour le signal '+intToSTR(AdrSignal)+' '; Affiche(s,clred); if AffSignal then AfficheDebug(s,clred); end; // si signal suivant affiche rappel ou rouge if TestBit(etat,rappel_60) or testBit(etat,rappel_30) or signal_rouge(AdrSignalSuivant) - then Maj_Etat_Signal(AdrFeu,jaune) + then Maj_Etat_Signal(AdrSignal,jaune) else begin // sinon si signal suivant=jaune if (TestBit(etat,jaune)) then begin - Maj_Etat_Signal(AdrFeu,jaune_cli); - //if AffSignal then AfficheDebug('400.Mise du feu au jaune cli',clyellow); + Maj_Etat_Signal(AdrSignal,jaune_cli); + //if AffSignal then AfficheDebug('400.Mise du signal au jaune cli',clyellow); end; end; end else - // aiguille locale non déviée ou aspect feu<9 + // aiguille locale non déviée ou aspect signal<9 // si le signal suivant est rouge begin if AffSignal then AfficheDebug('pas d''aiguille déviée',clYellow); @@ -8915,8 +8910,8 @@ begin // si signal suivant rouge if signal_rouge(AdrSignalSuivant) then begin - Maj_Etat_Signal(AdrFeu,jaune); - //if AffSignal then AfficheDebug('Mise du Feu à l''avertissement',clyellow); + Maj_Etat_Signal(AdrSignal,jaune); + //if AffSignal then AfficheDebug('Mise du signal à l''avertissement',clyellow); end else begin @@ -8927,14 +8922,14 @@ begin Signaux[index].EtatSignal:=0; if TestBit(etat,rappel_30) then begin - Maj_Etat_Signal(AdrFeu,ral_30); + Maj_Etat_Signal(AdrSignal,ral_30); //if affsignal then AfficheDebug('Mise du feu au ralen 30',clyellow); end; if TestBit(etat,rappel_60) then begin //if AffSignal then AfficheDebug('Mise du Feu au ralen 60',clyellow); - Maj_Etat_Signal(AdrFeu,ral_60); // si signal suivant est au rappel60, il faut tester s'il est à l'avertissement aussi - if TestBit(etat,jaune) then Maj_Etat_Signal(AdrFeu,jaune_cli); + Maj_Etat_Signal(AdrSignal,ral_60); // si signal suivant est au rappel60, il faut tester s'il est à l'avertissement aussi + if TestBit(etat,jaune) then Maj_Etat_Signal(AdrSignal,jaune_cli); end; end else @@ -8943,7 +8938,7 @@ begin //if affsignal then AfficheDebug('test 404',clyellow); if TestBit(etat,jaune) then begin - Maj_Etat_Signal(AdrFeu,jaune_cli); + Maj_Etat_Signal(AdrSignal,jaune_cli); //if affsignal then AfficheDebug('401.Mise du feu au jaune cli',clyellow); end else @@ -8955,15 +8950,15 @@ begin //if affsignal then AfficheDebug('test 406',clyellow); if Signaux[index].checkFB.Checked then begin - Maj_Etat_Signal(AdrFeu,blanc); + Maj_Etat_Signal(AdrSignal,blanc); //if affsignal then AfficheDebug('Mise du feu au blanc',clyellow); end - else Maj_Etat_Signal(AdrFeu,vert); + else Maj_Etat_Signal(AdrSignal,vert); end else begin - if Signaux[index].checkFV then Maj_Etat_Signal(AdrFeu,vert_cli) - else Maj_Etat_Signal(AdrFeu,vert); + if Signaux[index].checkFV then Maj_Etat_Signal(AdrSignal,vert_cli) + else Maj_Etat_Signal(AdrSignal,vert); //if affsignal then AfficheDebug('Mise du feu au vert',clyellow); end; end; @@ -8975,13 +8970,13 @@ begin end; end; - envoi_signal(AdrFeu); + envoi_signal(AdrSignal); // 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:=Signaux[index].EtatSignal; - if not(signal_rouge(AdrFeu)) then + if not(signal_rouge(AdrSignal)) then begin adr_Det:=Signaux[index].Adr_det1; if detecteur[adr_det].Etat then // détecteur doit être activé par loco @@ -9004,24 +8999,42 @@ begin end; end; - if signalDebug=AdrFeu then begin AffSignal:=false;nivDebug:=0;end; + if signalDebug=AdrSignal then begin AffSignal:=false;nivDebug:=0;end; if debug=3 then formprinc.Caption:=''; end; +// mise à jour du signal et de son précédent +procedure maj_Signal_P(adrSignal : integer;detect : boolean); +var adrPrec,etat : integer; +begin + Maj_signal(Adrsignal,detect); + // si le signal est rouge ou rappel, mettre à jour son précédent + etat:=Signaux[index_signal(AdrSignal)].EtatSignal; + if (signal_rouge(AdrSignal)) or testbit(etat,rappel_60) or testbit(etat,rappel_30) then + begin + adrPrec:=Signal_precedent(AdrSignal); + if adrPrec<>0 then + begin + //Affiche('signal='+intToSTR(AdrSignal)+' précédent='+intToSTR(adrPrec),clyellow); + Maj_signal(adrPrec,detect); + end; + end; +end; + // mise à jour des signaux // detect: si true, tient compte de la présence des trains sur les détecteurs dans la fonction signalPrec -Procedure Maj_feux(detect : boolean); +Procedure Maj_Signaux(detect : boolean); var i : integer; begin - if (nivDebug=1) or ProcPrinc then AfficheDebug('Proc Maj_feux',clorange); - if not(maj_feux_cours) then + if (nivDebug=1) or ProcPrinc then AfficheDebug('Proc Maj_signaux',clorange); + if not(Maj_signaux_cours) then begin - Maj_feux_cours:=TRUE; + Maj_signaux_cours:=TRUE; for i:=1 to NbreSignaux do begin - Maj_feu(Signaux[i].Adresse,detect); + Maj_Signal_P(Signaux[i].Adresse,detect); end; - Maj_feux_cours:=FALSE; + Maj_signaux_cours:=FALSE; end; end; @@ -9103,7 +9116,7 @@ begin Aiguillage[index_aig(j)].AdrTrain:=0; // libère l'aiguillage end; end; - Maj_Feux(false); + Maj_Signaux(false); end; @@ -9111,7 +9124,7 @@ end; // la réservation consiste à marquer un aiguillage avec l'adresse du train "adrTrain" ou "NumTrain" // det1 et det2 sont contigus // adrTrain = adresse du train (mode roulage uniquement) -// NumTrain = index du train (pas mode roulage) +// NumTrain = index du train (pas mode roulage, avec CDM) procedure reserve_canton(detecteur1,detecteur2,adrtrain,NumTrain,NCantons : integer); var nc,AdrSig,i,j,etat,etatSuiv,AdrSignalsuivant : integer; rouge,cas2 : boolean; @@ -9147,7 +9160,7 @@ begin exit; end; - etatSuiv:=etat_signal_suivant(AdrSig,1,AdrSignalsuivant); //réserve le canton du signal AdrSig au suivant : AdresseFeuSuivant + etatSuiv:=etat_signal_suivant(AdrSig,1,AdrSignalsuivant); //réserve le canton du signal AdrSig au suivant : AdresseSignalSuivant // dans le bon sens // 1er canton // marquer les aiguillages réservés @@ -9193,7 +9206,7 @@ begin if Traceliste then AfficheDebug('Canton '+intToSTR(nc),clOrange); AdrSig:=AdrSignalSuivant; - etatsuiv:=etat_signal_suivant(AdrSig,1,AdrSignalsuivant); //réserve le canton du signal AdrSig au suivant : AdresseFeuSuivant + etatsuiv:=etat_signal_suivant(AdrSig,1,AdrSignalsuivant); //réserve le canton du signal AdrSig au suivant : AdresseSignalSuivant if traceListe then afficheDebug('Le signal sursuivant est '+intToSTR(AdrSig),clyellow); rouge:=signal_rouge(AdrSignalSuivant); if rouge then @@ -9232,7 +9245,7 @@ begin inc(nc); until (nc>Ncantons); - Maj_feux(false); + Maj_Signaux(false); end; // pilote le train sur le détecteur det2, d'adresse adrtrain @@ -9267,7 +9280,7 @@ begin entree_signal:=detecteur[det2].etat; - // si le feu est au rouge et qu'on entre dans son détecteur + // si le signal est au rouge et qu'on entre dans son détecteur if rouge and entree_signal then begin s:='Signal '+intToSTR(adresse)+' au rouge - Arrêt train @'+intToSTR(AdrTrain); @@ -9339,7 +9352,7 @@ end; // rattache le nouveau détecteur à un train // adresse: adresse du detecteur, front: état du détecteur procedure calcul_zones_V1(adresse: integer;etat : boolean); -var m,AdrFeu,AdrDetFeu,AdrTrainLoc,Nbre,i,i2,j,k,n,det1,det2,det3,det4,AdrSuiv,AdrPrec,Prev, +var m,AdrSignal,AdrDetSignal,AdrTrainLoc,Nbre,i,i2,j,k,n,det1,det2,det3,det4,AdrSuiv,AdrPrec,Prev, id_couleur,det_suiv,nc,etatSig,tco : integer ; traite,trouve,SuivOk,casaig,rebond : boolean; couleur : tcolor; @@ -9460,8 +9473,8 @@ begin end; reserve_canton(det3,AdrSuiv,AdrTrainLoc,i,2); // si feu réserve canton courant libere_canton(det1,det3); // on quitte det3 - maj_feux(false); - maj_feux(false); + Maj_Signaux(false); + Maj_Signaux(false); reserve_canton(AdrSuiv,det4,AdrTrainLoc,i,2); // réserve canton suivant après maj signaux event_act(det1,det3,1,''); // évènement actionneur @@ -9566,7 +9579,7 @@ begin // actualiser le signal du det3 j:=signal_detecteur(det3); - if j<>0 then Maj_Feu(j,false); + if j<>0 then Maj_Signal_P(j,false); exit; end; if Traceliste then AfficheDebug(inttoSTR(det3)+' n''est pas contigu à '+intToSTR(det1)+' pour le train '+intToSTR(i),clyellow); @@ -9665,7 +9678,7 @@ begin reserve_canton(det3,AdrSuiv,adrTrainLoc,i,2); reserve_canton(AdrSuiv,det4,adrTrainLoc,i,2); - maj_feux(false); + Maj_Signaux(false); // stockage dans historique de zones if i0 then begin - Maj_Feu(j,false); - k:=Index_Signal(j); - // si le feu j est au rouge + Maj_Signal_P(j,false); 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) - j:=Signal_precedent(j); - if j<>0 then - begin - maj_feu(j,false); - j:=Signal_precedent(j); - if j<>0 then maj_feu(j,false); - end; - end; end; - maj_feux(false); // mise à jour générale - maj_feux(false); // 2eme mise à jour - maj_feux(false); // 3eme + Maj_Signaux(false); // mise à jour générale exit; // sortir absolument end; end @@ -9889,10 +9887,10 @@ begin if etat then begin - maj_feux(true); // les autres signaux , avec détecteurs + Maj_Signaux(true); // les autres signaux , avec détecteurs // mettre à jour le feu du détecteur i2:=signal_detecteur(det3); // trouve le signal associé au detecteur2 - if i2<>0 then maj_feu(i2,true); // avec détecteur + if i2<>0 then Maj_Signal_P(i2,true); // avec détecteur for i:=1 to N_trains do begin @@ -9953,21 +9951,21 @@ begin // vérifier si le détecteur du nouveau train est associé à un feu vers un buttoir for i:=1 to NbreSignaux do begin - AdrFeu:=Signaux[i].Adresse; - AdrDetfeu:=Signaux[i].Adr_Det1; - if (AdrDetFeu=Det3) and (Signaux[i].aspect<10) then + AdrSignal:=Signaux[i].Adresse; + AdrDetSignal:=Signaux[i].Adr_Det1; + if (AdrDetSignal=Det3) and (Signaux[i].aspect<10) then begin 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 + AdrPrec:=detecteur_suivant(AdrSuiv,typeSuiv,AdrDetSignal,det,1) ; // détecteur précédent le feu ; algo 1 if AdrPrec=0 then begin - if TraceListe then Affiche('FD - Le signal '+IntToSTR(AdrFeu)+' est précédé d''un buttoir',clyellow); - if AdrDetFeu650) then + // envoyer au périphérique le service actionneur for i:=1 to NbPeriph do begin sDecl:='A'+intToSTR(adr)+','+intToSTR(etat)+','+trainDecl; @@ -10577,13 +10575,13 @@ end; procedure evalue; begin if nivDebug=1 then AfficheDebug('Proc evalue',clorange); - if not(configNulle) then Maj_feux(false); // on ne traite pas les calculs si CDM en envoie plusieurs + if not(configNulle) then Maj_Signaux(false); // on ne traite pas les calculs si CDM en envoie plusieurs end; // traitement des évènements détecteurs procedure Event_Detecteur(Adresse : integer;etat : boolean;train : string); -var dr,i,AdrSuiv,AdrFeu,AdrDetfeu,index,Etat01,AdrPrec : integer; +var dr,i,AdrSuiv,AdrSignal,AdrDetSignal,index,Etat01,AdrPrec : integer; typeSuiv : tequipement; s : string; begin @@ -10678,21 +10676,21 @@ begin //explore les signaux pour voir si on démarre d'un buttoir for i:=1 to NbreSignaux do begin - AdrFeu:=Signaux[i].Adresse; - AdrDetfeu:=Signaux[i].Adr_Det1; - if (AdrDetFeu=Adresse) and (Signaux[i].aspect<10) then + AdrSignal:=Signaux[i].Adresse; + AdrDetSignal:=Signaux[i].Adr_Det1; + if (AdrDetSignal=Adresse) and (Signaux[i].aspect<10) then begin 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 AffSignal then AfficheDebug('Pour signal '+intToSTR(AdrSignal)+' detecteursuivant('+intToSTR(AdrSuiv)+','+BTypeToChaine(typeSuiv)+','+intToSTR(AdrDetSignal)+',1)',clyellow); + AdrPrec:=detecteur_suivant(AdrSuiv,typeSuiv,AdrDetSignal,det,1) ; // détecteur précédent le feu, algo 1 if AdrPrec=0 then begin - If traceListe then AfficheDebug('Le signal '+IntToSTR(AdrFeu)+' est précédé d''un buttoir',clyellow); - MemZone[0,AdrDetFeu].etat:=true; - event_act(0,AdrDetFeu,1,''); // activation zone - maj_feu(AdrFeu,false); + If traceListe then AfficheDebug('Le signal '+IntToSTR(AdrSignal)+' est précédé d''un buttoir',clyellow); + MemZone[0,AdrDetSignal].etat:=true; + event_act(0,AdrDetSignal,1,''); // activation zone + Maj_Signal_P(AdrSignal,false); end; end; end; @@ -10928,7 +10926,7 @@ end; // octet = 1 (dévié) ou 2 (droit) si 0 on ne traite pas // uniquement en mode autonome: // si acc=Taig, alors la sortie "octet" est mise à 1 puis à 0 -// si acc=feu, alors la sortie "octet" est mise à 1 uniquement. +// si acc=signal, alors la sortie "octet" est mise à 1 uniquement. // Résultat true si ok function pilote_acc(adresse : integer;octet : byte;Acc : TAccessoire): boolean; var groupe,temp,indexAig,AdrTrain : integer ; @@ -10974,7 +10972,7 @@ begin exit; end; - if (pilotage=0) or (pilotage>2) then exit; + if (pilotage=0) or (pilotage>2) then begin result:=true;exit;end; // pilotage par USB ou par éthernet de la centrale ------------ if (portCommOuvert or parSocketLenz) then @@ -10997,7 +10995,7 @@ begin 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 + // si l'accessoire est un signal et sans raz des signaux, sortir if (acc=signal) and not(Raz_Acc_signaux) then exit; // si aiguillage, faire une temporisation @@ -11030,7 +11028,6 @@ begin result:=true; exit; end; - end; // pas de centrale et pas CDM connecté: on change la position de l'aiguillage @@ -11758,21 +11755,21 @@ function IsWow64Process: Boolean; type TIsWow64Process=function(hProcess: THandle; var Wow64Process: Boolean): Boolean; stdcall; var - DLL: THandle; + Dll: THandle; pIsWow64Process: TIsWow64Process; const IsWow64: Boolean=False; begin IsWow64:=false; - DLL:=LoadLibrary('kernel32.dll'); - if (DLL<>0) then + Dll:=LoadLibrary('kernel32.dll'); + if (Dll<>0) then begin pIsWow64Process:=GetProcAddress(DLL,'IsWow64Process'); if (Assigned(pIsWow64Process)) then begin pIsWow64Process(GetCurrentProcess,IsWow64); end; - FreeLibrary(DLL); + FreeLibrary(Dll); end; Result:=IsWow64; end; @@ -11786,7 +11783,6 @@ begin Affiche('',clyellow); for i:=1 to MaxAiguillage do begin - adr:=aiguillage[i].adresse; groupe:=((adr-1) div 4)+1; fonction:=((adr-1) mod 4); @@ -12896,7 +12892,7 @@ begin ProcPrinc:=false; algo_Unisemaf:=1; NbPeriph:=0; - MaxPortCom:=30; + MaxPortCom:=255; roulage:=false; espY:=15; etat_init_interface:=0; @@ -13202,7 +13198,7 @@ begin trains[i].SbitMap.height:=300; end; - // lancer CDM rail et le connecte si on le demande ; à faire après la création des feux et du tco + // lancer CDM rail et le connecte si on le demande ; à faire après la création des signaux et du tco if debug=1 then Affiche('Procédure CDM',clLime); procetape('Test CDM et son lancement'); if LanceCDM then Lance_CDM(true); @@ -13216,14 +13212,14 @@ begin // si CDM n'est pas connecté, on regarde si on ouvre la liaison vers la centrale if not(CDM_connecte) then begin - procetape('Ouvertures COM/USB'); + procetape('Ouvertures COM/USB interface'); // ouverture par USB etat_init_interface:=1; // demande connexion usb if AvecDemandeInterfaceUSB then connecte_USB; if not(portCommOuvert) and AvecDemandeInterfaceEth then begin application.ProcessMessages; - connecte_interface_ethernet; // la connexion du socket ne se fait qu'a la sortie de cette procédure create + connecte_interface_ethernet; // la connexion du socket ne se fait qu'à la sortie de cette procédure create end; end; @@ -13324,7 +13320,7 @@ begin decode_chaine_retro_dcc(''); } procetape('Terminé !!'); if debug=1 then Affiche('Positionnement des signaux',clLime); - Maj_feux(false); + Maj_Signaux(false); // vérifier si le fichier de segments existe fichier_module_CDM:=fileExists(NomModuleCDM); @@ -13341,7 +13337,6 @@ begin //formPrinc.left:=-1000; ConfCellTCO:=false; if debug=1 then Affiche('Fini',clLime); - end; @@ -13484,16 +13479,16 @@ begin if temps>0 then dec(temps); - // gestion du clignotant des feux de la page principale---------------------- + // gestion du clignotant des signaux de la page principale---------------------- if tempsCli>0 then dec(tempsCli); if tempsCli=0 then begin tempsCli:=4; clignotant:=not(clignotant); // inversion du clignotant - //tester chaque feu pour voir s'il y a un code de clignotement + //tester chaque signal pour voir s'il y a un code de clignotement for i:=1 to NbreSignaux do begin - a:=Signaux[i].EtatSignal; // a = état binaire du feu + a:=Signaux[i].EtatSignal; // a = état binaire du signal adresse:=Signaux[i].adresse; // signal belge if Signaux[i].aspect=20 then @@ -13512,7 +13507,7 @@ begin testBit(a,vert_cli) or testbit(a,blanc_cli) then begin Dessine_signal_mx(Signaux[i].Img.Canvas,0,0,1,1,adresse,1); - //Affiche('Clignote feu '+IntToSTR(adresse),clyellow); + //Affiche('Clignote signal '+IntToSTR(adresse),clyellow); end; end; end; @@ -13533,7 +13528,7 @@ begin begin adresse:=TCO[indexTCO,x,y].adresse; i:=Index_Signal(adresse); - a:=Signaux[i].EtatSignal; // a = état binaire du feu + a:=Signaux[i].EtatSignal; // a = état binaire du signal faire:=false; if Signaux[i].aspect<>20 then faire:=TestBit(a,jaune_cli) or TestBit(a,ral_60) or @@ -13580,13 +13575,13 @@ begin testBit(a,vert_cli) or testbit(a,blanc_cli) then begin //if clignotant then affiche('1',clyellow) else affiche('0',clwhite); - Dessine_feu_pilote; // dessiner le signal en fonction du bit "clignotant" + Dessine_Signal_pilote; // dessiner le signal en fonction du bit "clignotant" end; end else begin // signal belge - if TestBit(a,clignote) or Signaux[0].contrevoie then Dessine_feu_pilote; + if TestBit(a,clignote) or Signaux[0].contrevoie then dessine_signal_pilote; end; end; @@ -13598,7 +13593,7 @@ begin 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 - Dessine_feu_CDF; // dessiner le feu CDF en fonction du bit "clignotant" + Dessine_Signal_CDF; // dessiner le feu CDF en fonction du bit "clignotant" end; end; @@ -13768,7 +13763,7 @@ end; procedure TFormPrinc.BoutonRafClick(Sender: TObject); begin - Maj_feux(false); + Maj_Signaux(false); end; // erreur sur socket Lenz (interface XpressNet) @@ -13857,7 +13852,7 @@ begin Envoi_signauxCplx; end; // si pas coché, on revient en normal - if not(coche) then Maj_feux(false); + if not(coche) then Maj_Signaux(false); end; end; @@ -13885,7 +13880,7 @@ begin Envoi_signauxCplx; end; // si pas coché, on revient en normal - if not(coche) then Maj_feux(false); + if not(coche) then Maj_Signaux(false); end; end; @@ -13914,7 +13909,7 @@ begin Envoi_signauxCplx; end; // si pas coché, on revient en normal - if not(coche) then Maj_feux(false); + if not(coche) then Maj_Signaux(false); end; end; @@ -14174,7 +14169,7 @@ begin begin Affiche('Positionnement des signaux',clYellow); init_aiguillages; // initialisation des aiguillages - envoi_signauxCplx; // initialisation des feux + envoi_signauxCplx; // initialisation des signaux end; if not(AvecInitAiguillages) and not(ferme) and (parSocketLenz or portCommOuvert) and AvecDemandeAiguillages then @@ -14934,7 +14929,7 @@ begin for i:=1 to NbreSignaux do begin - // feu de signalisation + // signal de signalisation s:=IntToSTR(i)+' i='+intToSTR(tablo_index_signal[Signaux[i].Adresse])+' Adr='+IntToSTR(Signaux[i].Adresse); s:=s+' décodeur='+IntToStr(Signaux[i].decodeur); asp:=Signaux[i].aspect; @@ -15004,7 +14999,7 @@ begin end else - // feu directionnel + // signal directionnel begin s:=s+' DIR Nbrefeux='+IntToSTR(Signaux[i].aspect-10)+' '; NfeuxDir:=Signaux[i].aspect-10; @@ -15550,9 +15545,9 @@ procedure TFormPrinc.Proprits1Click(Sender: TObject); var s: string; begin clicliste:=false; - s:=((Tpopupmenu(Tmenuitem(sender).GetParentMenu).PopupComponent) as TImage).name; // nom du composant, pout récupérer l'index du feu (ex: ImageFeu2) + s:=((Tpopupmenu(Tmenuitem(sender).GetParentMenu).PopupComponent) as TImage).name; // nom du composant, pout récupérer l'index du signal (ex: ImageFeu2) //Affiche(s,clOrange); // nom de l'image du signal (ex: ImageFeu2) - IndexFeuClic:=extract_int(s); // extraire l'adresse (ex 2) + IndexSignalClic:=extract_int(s); // extraire l'adresse (ex 2) formconfig.PageControl.ActivePage:=formconfig.TabSheetSig; clicproprietes:=true; formconfig.showmodal; @@ -15959,7 +15954,7 @@ begin roulage:=true; end; end; - if trouve then Maj_feux(true); + if trouve then Maj_Signaux(true); end; procedure TFormPrinc.Button1Click(Sender: TObject); @@ -16100,7 +16095,7 @@ procedure TFormPrinc.RazResaClick(Sender: TObject); begin Affiche('Mise à 0 de la réservation des aiguillages',clYellow); Raz_reservations; - Maj_feux(false); + Maj_Signaux(false); end; procedure TFormPrinc.SBMarcheArretLocoClick(Sender: TObject); @@ -16141,7 +16136,7 @@ begin positionne_elements(SplitterV.Left); end; -procedure TFormPrinc.PopupMenuFeuPopup(Sender: TObject); +procedure TFormPrinc.PopupMenuSignalPopup(Sender: TObject); var ob : TPopupMenu; begin // AdrPilote est récupéré de l'event OnMouseDown de l'image du signal qui se produit avant @@ -17030,7 +17025,6 @@ end; procedure TFormPrinc.Affichagenormal1Click(Sender: TObject); begin - //FenRich.Width:=panel2.Width div 2; FenRich.Width:=GrandPanel.Width-Panel1.Width-GroupBox1.Width-25; splitterV.Left:=FenRich.left+FenRich.Width-5; positionne_elements(splitterV.Left); @@ -17047,19 +17041,19 @@ begin sauve_config; end; - +// change la couleur du texte du panel procedure TFormPrinc.StatusBar1DrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel; const Rect: TRect); var RectForText: TRect; begin - if (Panel = StatusBar.Panels[3]) then + if Panel=StatusBar.Panels[3] then begin if Panel.Text<>'' then begin - StatusBar1.Canvas.Font.Color := clwhite; + StatusBar1.Canvas.Font.Color:=clwhite; StatusBar1.Canvas.Brush.color:=clGreen; RectForText:=Rect; StatusBar1.Canvas.FillRect(RectForText); - DrawText(StatusBar1.Canvas.Handle, PChar(Panel.Text), -1, RectForText,DT_SINGLELINE or DT_VCENTER or DT_LEFT); + DrawText(StatusBar1.Canvas.Handle,PChar(Panel.Text),-1,RectForText,DT_SINGLELINE or DT_VCENTER or DT_LEFT); end; end; end; diff --git a/UnitSR.pas b/UnitSR.pas index 125d991..b4d2363 100644 --- a/UnitSR.pas +++ b/UnitSR.pas @@ -276,10 +276,10 @@ end; procedure Maj_DB; var s : string; begin - s:=encode_sig_feux(indexSig); + s:=encode_signal(indexSig); formconfig.ListBoxSig.items[indexSig-1]:=s; formconfig.ListBoxSig.selected[ligneClicSig]:=true; - aff_champs_sig_feux(indexSig); + aff_champs_signaux(indexSig); end; procedure TFormSR.ComboBoxAdr1Change(Sender: TObject); diff --git a/UnitTCO.pas b/UnitTCO.pas index 11edbdf..deced51 100644 --- a/UnitTCO.pas +++ b/UnitTCO.pas @@ -8791,7 +8791,7 @@ end; procedure TFormTCO.FormCreate(Sender: TObject); var s : string; begin - if affevt or (debug=1) then Affiche('FormTCO'+intToSTR(indexTCOCreate)+' create',clyellow); + if affevt or (debug=1) then Affiche('FormTCO'+intToSTR(indexTCOCreate)+' create',clLime); //Screen.OnActiveControlChange := ActiveControlChanged; offsetSourisY:=-10; // permet de tenir l'icone au milieu quand on fait un glisser offsetSourisX:=-10; @@ -13772,7 +13772,7 @@ begin end; procedure TFormTCO.LigneDessousClick(Sender: TObject); -var x,y,indexTCO : integer; +var indexTCO : integer; c : tcomponent; begin c:=popupmenu1.PopupComponent ; // imageTCO @@ -13824,8 +13824,8 @@ begin end; procedure TFormTCO.Colonnedroite1Click(Sender: TObject); - var x,y,indexTCO : integer; - c : tcomponent; +var indexTCO : integer; + c : tcomponent; begin c:=popupmenu1.PopupComponent ; // imageTCO c:=c.GetParentComponent; // scrollBox diff --git a/Unitplace.pas b/Unitplace.pas index dcf84ef..b413885 100644 --- a/Unitplace.pas +++ b/Unitplace.pas @@ -230,9 +230,8 @@ begin begin affiche_tco(1); end; - maj_feux(true); - maj_feux(true); - maj_feux(true); + Maj_Signaux(true); + Maj_Signaux(true); end; procedure TFormPlace.Edit1Change(Sender: TObject); @@ -343,7 +342,7 @@ begin end; procedure TFormPlace.ButtonLanceRoutageClick(Sender: TObject); -var a,i,j,id,adrDet,AdrTrain,AdrFeu : integer; +var a,i,j,id,adrDet,AdrTrain,AdrSignal : integer; trouve,rouge : boolean; var s: string; begin @@ -365,12 +364,12 @@ begin roulage:=true; avecResa:=false; // pour adrTrain ou NumTrain AdrTrain:=detecteur[AdrDet].AdrTrain; - AdrFeu:=signal_detecteur(AdrDet); // trouve l'adresse du signal correspondant au détecteur + AdrSignal:=signal_detecteur(AdrDet); // trouve l'adresse du signal correspondant au détecteur // si il y a un signal sur le détecteur de démarrage du train est il au rouge? - if adrFeu<>0 then + if AdrSignal<>0 then begin - id:=index_Signal(AdrFeu); + id:=index_Signal(AdrSignal); a:=Signaux[id].EtatSignal; if ((a=semaphore_F) or (a=carre_F) or (a=violet_F)) then rouge:=true; end; @@ -380,21 +379,21 @@ begin j:=index_train_adresse(AdrTrain); vitesse_loco('',adrTrain,j,trains[j].VitNominale,not(placement[j].inverse),true); - maj_feux(true); // avec détecteurs + Maj_Signaux(true); // avec détecteurs s:='Lancement du train '+detecteur[adrDet].train+' depuis détecteur '+intToSTR(adrDet); Affiche(s,clYellow); if traceListe then AfficheDebug(s,clyellow); reserve_canton(AdrDet,placement[j].detdir,adrtrain,0,2); end - Else Affiche('Le signal '+intToSTR(AdrFeu)+' étant rouge, le train '+detecteur[adrDet].train+' @'+intToSTR(AdrTrain)+' ne démarre pas',clyellow); + Else Affiche('Le signal '+intToSTR(AdrSignal)+' étant rouge, le train '+detecteur[adrDet].train+' @'+intToSTR(AdrTrain)+' ne démarre pas',clyellow); end; end; // au moins un train démarre if trouve then begin - Maj_feux(true); + Maj_Signaux(true); Formprinc.LabelTitre.caption:=titre+' - Mode roulage en cours'; with Formprinc.SBMarcheArretLoco do begin @@ -550,8 +549,10 @@ procedure TFormPlace.FormCreate(Sender: TObject); var c : tcomponent; i : integer; begin + if debug=1 then Affiche('Début création fenetre Place',clLime); PlaceAffiche:=true; couleurs_place; + if debug=1 then Affiche('Fin création fenetre Place',clLime); end; procedure TFormPlace.BitBtn1Click(Sender: TObject); diff --git a/verif_version.pas b/verif_version.pas index 899017b..5472445 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.36'; // sert à la comparaison de la version publiée +Const Version='8.37'; // 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 ebf218c..55d8789 100644 --- a/versions.txt +++ b/versions.txt @@ -221,4 +221,5 @@ version 8.35 : Correction ajout de signaux et d'aiguillages. Amélioration de l'édition des TJD. version 8.36 : Création d'un mode de fond sombre modifiable pour l'affichage. Amélioration édition des lignes et colonnes du TCO. - +version 8.37 : Correction des calculs des index des aiguillages et des signaux lors de leur suppression. + Correction présence trains avant signal. \ No newline at end of file