From a1839decfa0fef4b8b9d14ac51811274aebb6562 Mon Sep 17 00:00:00 2001 From: f1iwq2 Date: Sun, 29 Nov 2020 11:04:24 +0100 Subject: [PATCH] V2.2 V2.2 --- Signaux_complexes_GL.cfg | 4 +- Signaux_complexes_GL.exe | Bin 0 -> 1046016 bytes UnitConfig.dcu | Bin 52897 -> 54656 bytes UnitConfig.dfm | 6 +- UnitConfig.pas | 44 +- UnitDebug.dcu | Bin 15832 -> 16380 bytes UnitDebug.dfm | 292 +- UnitDebug.pas | 27 +- UnitPrinc.dcu | Bin 200809 -> 203757 bytes UnitPrinc.pas | 646 +-- UnitPrinc.~dfm | 1609 +++++++ UnitPrinc.~pas | 8649 ++++++++++++++++++++++++++++++++++++++ UnitSimule.dcu | Bin 7819 -> 7819 bytes UnitTCO.dcu | Bin 134461 -> 134505 bytes UnitTCO.pas | 12 +- page.txt | 32 +- verif_version.dcu | Bin 9468 -> 9470 bytes verif_version.pas | 2 +- verif_version.~dfm | 35 + verif_version.~pas | 210 + versions.txt | 4 + 21 files changed, 11131 insertions(+), 441 deletions(-) create mode 100644 Signaux_complexes_GL.exe create mode 100644 UnitPrinc.~dfm create mode 100644 UnitPrinc.~pas create mode 100644 verif_version.~dfm create mode 100644 verif_version.~pas diff --git a/Signaux_complexes_GL.cfg b/Signaux_complexes_GL.cfg index 69e7fa7..733e635 100644 --- a/Signaux_complexes_GL.cfg +++ b/Signaux_complexes_GL.cfg @@ -31,5 +31,5 @@ -M -$M16384,1048576 -K$00400000 --LE"c:\program files (x86)\borland\delphi7\Projects\Bpl" --LN"c:\program files (x86)\borland\delphi7\Projects\Bpl" +-LE"c:\program files\borland\delphi7\Projects\Bpl" +-LN"c:\program files\borland\delphi7\Projects\Bpl" diff --git a/Signaux_complexes_GL.exe b/Signaux_complexes_GL.exe new file mode 100644 index 0000000000000000000000000000000000000000..1e1999f10578dab9fa09bb0d82c9cef7c0fcd19b GIT binary patch literal 1046016 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,k&$YcLluCnO!wlF!ASFy5V8rii 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%0DeOC|Z^oJuVVIEEXTretvI` z$Fu77=vh)C2BpWvDl(%-%E6fmm~3{mVz3TwEkwkWag#_qV5!q?iZd;8y}t@CVqIIWc9Zc@e8wInjF*MT2aW6j7=pc?md zKJ#nTf5E!m3NwyEIc+FQA=%^9Kh_4_b-i;;Zj)r3W3tgouKPj&LyU@>OpwNGrTr(w zyFT3|lD^D&AR*kWpqLX;%O#CYa?MZK0UiIB@ona*C;R%g>UrDmzsZv3+*%aVYqP1@ zT+jE`g%n|~l{axdU=j;?%cBcT^Od}*5^t8|yAFHQt$KNLNiy*hBz6ZuZ49`ue`O#f zdXhG$z&k3#g*S4Vz?;^z$o%s?3e#G0s0Hb6|HcxJIe9M#=wzLf5qa+=3r>g{h;F-q zRc6V`zP`H!TmtT^CE)ir5g<2vy8%C!0BLFxr~)dFckQ^)0)_q+x>%0RSe{MJGvqwO z&ht9wdA;*o;XH3}o;NzrmCkdO^F({8<*s&~YnOAY5=QYl=-g#c@JeN7o2Im=co|ib!+0L`Vc~&~lD(5-JdCqm7^PK0U&hs+o zdAakv!g(^PJ#3&vKq;JI`-B&xy|S9Orqi^DK6r=Q+>wo#zG4^FrrY z;5?6ao}-=T3C>gYFoYgYbe<9y>RW?s z)=Bt(`jdF!Jz|jm()lHxef;+GGyL}QD=aSYl<*T@NjZUO%dT5gzjVoz<%=3?mo6SV z=s%Y&@&CVN=N(e^tj6l)i$Y5qmeGdkl#?-}vb5kTz}FMA9LHwTzjIuC3m*neVi0{VuCrw7jW0 zq^0&z>ZZr~>#GReP+zSvq8!{xL{?2xX+!-IUrp1r5V%-8w5F+Q*^=tz^-Gsk^Dg%R zT~j?P97bLZK&3zAL9w<%!ZQX}2CJ9#S0g5f1%wZ3Y^rDg)me>AlNUAB zX7XqV4YnV=WhdYGAZ=NF^`hm6H8xFK*0gjY357#I}YR-m_7w zxwf=^(c)_cHC{Wnc4??Ov+>%Q4UPIgl+}1`SwrIugC!^=Z-+HrJEMB})zuV4NH$-K zny#@QZWQ4JI8pY4qBYkLEk|D|S+d%a<&6sGH7xgO3VCt6E!H-5Ft87;EL|RMs_n

;J}T@rrAR3J$b*7lZQ$9p+O9ZP+Lev?ZTx+* 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 literal 0 HcmV?d00001 diff --git a/UnitConfig.dcu b/UnitConfig.dcu index 47f4b15fd8cb83e5e40810633fabb52c6cf03a5e..dc5d206b7aa36b96718b0edec50253836fbb5c7d 100644 GIT binary patch delta 15903 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 Nhj*KDGB diff --git a/UnitConfig.dfm b/UnitConfig.dfm index 7cd88a3..f088a84 100644 --- a/UnitConfig.dfm +++ b/UnitConfig.dfm @@ -1,6 +1,6 @@ object FormConfig: TFormConfig - Left = 267 - Top = 246 + Left = 266 + Top = 160 Hint = 'Modifie les fichiers de configuration selon les s'#233'lections chois' + 'ies' @@ -1776,7 +1776,7 @@ object FormConfig: TFormConfig Top = 8 Width = 585 Height = 441 - ActivePage = TabSheetCDM + ActivePage = TabSheetSig Font.Charset = DEFAULT_CHARSET Font.Color = clBackground Font.Height = -11 diff --git a/UnitConfig.pas b/UnitConfig.pas index 01cf4a0..1345f90 100644 --- a/UnitConfig.pas +++ b/UnitConfig.pas @@ -486,8 +486,8 @@ begin aspect:=feux[i].aspect; if aspect<10 then s:=s+IntToSTR(aspect)+',' else s:=s+'D'+intToSTR(aspect-10)+','; - // bouton feu blanc - if feux[i].feublanc then s:=s+'1,' else s:=s+'0,'; + // bouton feu blanc, n'existe pas pour un feu directionnel (aspect>10) + if aspect<10 then begin if feux[i].feublanc then s:=s+'1,' else s:=s+'0,';end; // décodeur s:=s+IntToSTR(feux[i].decodeur)+','; @@ -697,27 +697,33 @@ begin writeln(fichierN,s); continue:=s[1]<>'0'; until not(continue); - copie_commentaire; - writeln(fichierN,s); - // modélisation des signaux - if s[1]<>'0' then + // copie tous les commentaires de la branche feux repeat readln(fichier,s); - writeln(fichierN,s); - continue:=s[1]<>'0'; - until not(continue); - copie_commentaire; + continue:=true; + if length(s)>0 then + begin + if s[1]='/' then writeln(fichierN,s); + continue:=s[1]<>'0'; + end; + until not(continue) or eof(fichier); - writeln(fichierN,s); - // Fonctions Fx - if s[1]<>'0' then - repeat - readln(fichier,s); + for i:=1 to NbreFeux do + begin + s:=encode_sig(i); + feux[i].modifie:=false; // sauvegarde en cours, on démarque writeln(fichierN,s); - continue:=s[1]<>'0'; - until not(continue); - copie_commentaire; + end; + writeln(fichierN,'0'); + + // Fonctions Fx généré du fichier d'origine, pas encore fait + repeat + continue:=true; + readln(fichier,s); + writeln(fichierN,s); + if length(s)>0 then continue:=s[1]<>'0'; + until not(continue) or eof(fichier); closefile(fichier); closefile(fichierN); @@ -1285,7 +1291,7 @@ begin EditDet1.Visible:=true;EditDet2.Visible:=true;EditDet3.Visible:=true;EditDet4.Visible:=true; EditSuiv1.Visible:=true;EditSuiv2.Visible:=true;EditSuiv3.Visible:=true;EditSuiv4.Visible:=true; Label24.Visible:=true; Label25.Visible:=true;Label26.Visible:=true;Label27.Visible:=true; - CheckVerrouCarre.Visible:=false; + CheckVerrouCarre.Visible:=true; EditDet1.Text:=IntToSTR(feux[i].Adr_det1); EditSuiv1.Text:=TypeEl_To_char(feux[i].Btype_suiv1)+IntToSTR(feux[i].Adr_el_suiv1); j:=feux[i].Adr_det2; diff --git a/UnitDebug.dcu b/UnitDebug.dcu index 48ac94fcc9b2cf9f190e0934dfce4e9a3d5fe986..1c542feb50d764d7a63eb89fc71707a40179cf4f 100644 GIT binary patch delta 4691 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

  • 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 diff --git a/UnitDebug.dfm b/UnitDebug.dfm index 536e63a..b59c810 100644 --- a/UnitDebug.dfm +++ b/UnitDebug.dfm @@ -1,8 +1,8 @@ object FormDebug: TFormDebug - Left = 186 - Top = 143 - Width = 809 - Height = 773 + Left = 342 + Top = 80 + Width = 842 + Height = 762 Caption = 'Fen'#234'tre de d'#233'bug' Color = clWindow TransparentColorValue = clTeal @@ -16,12 +16,12 @@ object FormDebug: TFormDebug OnClose = FormClose OnCreate = FormCreate DesignSize = ( - 793 - 735) + 826 + 724) PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel - Left = 609 + Left = 642 Top = 7 Width = 108 Height = 13 @@ -37,7 +37,7 @@ object FormDebug: TFormDebug ParentFont = False end object Label2: TLabel - Left = 441 + Left = 474 Top = 4 Width = 131 Height = 18 @@ -51,10 +51,10 @@ object FormDebug: TFormDebug ParentFont = False end object Label3: TLabel - Left = 441 + Left = 472 Top = 168 - Width = 97 - Height = 193 + Width = 99 + Height = 185 Anchors = [akTop, akRight] AutoSize = False Caption = 'Label3' @@ -69,7 +69,7 @@ object FormDebug: TFormDebug WordWrap = True end object EditNivDebug: TEdit - Left = 721 + Left = 754 Top = 4 Width = 49 Height = 21 @@ -85,10 +85,10 @@ object FormDebug: TFormDebug OnKeyPress = EditNivDebugKeyPress end object MemoEvtDet: TMemo - Left = 545 - Top = 408 - Width = 233 - Height = 221 + Left = 578 + Top = 360 + Width = 239 + Height = 225 Anchors = [akTop, akRight] Color = clBlack Font.Charset = ANSI_CHARSET @@ -104,8 +104,8 @@ object FormDebug: TFormDebug TabOrder = 1 end object ButtonEcrLog: TButton - Left = 441 - Top = 504 + Left = 474 + Top = 480 Width = 97 Height = 29 Anchors = [akTop, akRight] @@ -115,9 +115,9 @@ object FormDebug: TFormDebug end object MemoDebug: TMemo Left = 0 - Top = 8 - Width = 426 - Height = 722 + Top = 0 + Width = 465 + Height = 721 Anchors = [akLeft, akTop, akRight, akBottom] Lines.Strings = ( 'MemoDebug') @@ -126,8 +126,8 @@ object FormDebug: TFormDebug WordWrap = False end object ButtonRazTampon: TButton - Left = 441 - Top = 584 + Left = 474 + Top = 552 Width = 97 Height = 33 Anchors = [akTop, akRight] @@ -137,18 +137,18 @@ object FormDebug: TFormDebug OnClick = ButtonRazTamponClick end object ButtonCherche: TButton - Left = 441 - Top = 464 + Left = 474 + Top = 448 Width = 97 - Height = 33 + Height = 25 Anchors = [akTop, akRight] Caption = 'Chercher erreurs' TabOrder = 5 OnClick = ButtonChercheClick end object ButtonAffEvtChrono: TButton - Left = 441 - Top = 424 + Left = 474 + Top = 408 Width = 97 Height = 33 Anchors = [akTop, akRight] @@ -158,21 +158,27 @@ object FormDebug: TFormDebug OnClick = ButtonAffEvtChronoClick end object ButtonCop: TButton - Left = 441 - Top = 368 + Left = 474 + Top = 360 Width = 97 - Height = 49 + Height = 41 Anchors = [akTop, akRight] Caption = 'Copie fen'#234'te principale dans debug' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWhite + Font.Height = -9 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False TabOrder = 7 WordWrap = True OnClick = ButtonCopClick end object RichEdit: TRichEdit - Left = 545 + Left = 578 Top = 168 - Width = 233 - Height = 233 + Width = 239 + Height = 185 Anchors = [akTop, akRight] HideScrollBars = False PopupMenu = PopupMenuRE @@ -180,8 +186,8 @@ object FormDebug: TFormDebug TabOrder = 8 end object ButtonRazLog: TButton - Left = 441 - Top = 544 + Left = 474 + Top = 512 Width = 97 Height = 33 Anchors = [akTop, akRight] @@ -191,11 +197,11 @@ object FormDebug: TFormDebug OnClick = ButtonRazLogClick end object GroupBox1: TGroupBox - Left = 433 - Top = 633 - Width = 353 - Height = 97 - Anchors = [akRight, akBottom] + Left = 474 + Top = 592 + Width = 343 + Height = 132 + Anchors = [akTop, akRight] Caption = 'Fonctions primitives' Color = cl3DLight Font.Charset = DEFAULT_CHARSET @@ -206,78 +212,118 @@ object FormDebug: TFormDebug ParentColor = False ParentFont = False TabOrder = 10 - object ButtonSigSuiv: TButton - Left = 16 - Top = 24 - Width = 97 - Height = 25 - Hint = 'Etat du signal suivant' - Caption = 'Etat signal suivant' - ParentShowHint = False - ShowHint = True - TabOrder = 0 - OnClick = ButtonSigSuivClick - end - object EditSigSuiv: TEdit - Left = 280 - Top = 24 - Width = 49 - Height = 21 - Hint = 'Indiquer l'#39'adresse du signal ' - ParentShowHint = False - ShowHint = True - TabOrder = 1 - end - object EditPrec: TEdit - Left = 224 - Top = 58 - Width = 49 - Height = 21 - Hint = 'Element pr'#233'c'#233'dent' - ParentShowHint = False - ShowHint = True - TabOrder = 2 - end - object EditActuel: TEdit - Left = 288 - Top = 58 - Width = 49 - Height = 21 - Hint = 'Element actuel' - ParentShowHint = False - ShowHint = True - TabOrder = 3 - end - object ButtonDetSuiv: TButton - Left = 16 - Top = 56 - Width = 201 - Height = 25 - Hint = - 'Renvoie l'#39#233'l'#233'ment suivant aux deux '#233'l'#233'ments (d'#233'tecteurs ou aigui' + - 'llages) ' - Caption = 'D'#233'tecteur suivant aux '#233'l'#233'ments' - ParentShowHint = False - ShowHint = True - TabOrder = 4 - OnClick = ButtonDetSuivClick - end - object ButtonCanSuivSig: TButton - Left = 128 + object GroupBox3: TGroupBox + Left = 8 Top = 16 - Width = 105 - Height = 33 - Hint = 'Renvoie l'#39'occupation du canton suivant le signal' - Caption = 'Etat canton suivant signal occup'#233 - ParentShowHint = False - ShowHint = True - TabOrder = 5 - WordWrap = True - OnClick = ButtonCanSuivSigClick + Width = 329 + Height = 57 + Caption = 'Signal' + TabOrder = 0 + object Label4: TLabel + Left = 241 + Top = 26 + Width = 32 + Height = 13 + Caption = 'Signal:' + Font.Charset = DEFAULT_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + end + object ButtonSigSuiv: TButton + Left = 8 + Top = 16 + Width = 65 + Height = 33 + Hint = 'Etat du signal suivant' + Caption = 'Etat signal suivant' + ParentShowHint = False + ShowHint = True + TabOrder = 0 + WordWrap = True + OnClick = ButtonSigSuivClick + end + object ButtonCanSuivSig: TButton + Left = 72 + Top = 8 + Width = 81 + Height = 41 + Hint = 'Renvoie l'#39'occupation du canton suivant le signal' + Caption = 'Etat canton suivant signal' + ParentShowHint = False + ShowHint = True + TabOrder = 1 + WordWrap = True + OnClick = ButtonCanSuivSigClick + end + object EditSigSuiv: TEdit + Left = 272 + Top = 24 + Width = 41 + Height = 21 + Hint = 'Indiquer l'#39'adresse du signal ' + ParentShowHint = False + ShowHint = True + TabOrder = 2 + end + object Button1: TButton + Left = 152 + Top = 8 + Width = 81 + Height = 41 + Caption = 'Etat 3 cantons pr'#233'c'#233'dents signal' + TabOrder = 3 + WordWrap = True + OnClick = Button1Click + end + end + object GroupBox4: TGroupBox + Left = 8 + Top = 72 + Width = 329 + Height = 49 + Caption = 'D'#233'tecteur suivant' + TabOrder = 1 + object ButtonDetSuiv: TButton + Left = 16 + Top = 16 + Width = 185 + Height = 25 + Hint = + 'Renvoie l'#39#233'l'#233'ment suivant aux deux '#233'l'#233'ments (d'#233'tecteurs ou aigui' + + 'llages) ' + Caption = 'D'#233'tecteur suivant aux '#233'l'#233'ments' + ParentShowHint = False + ShowHint = True + TabOrder = 0 + OnClick = ButtonDetSuivClick + end + object EditPrec: TEdit + Left = 216 + Top = 18 + Width = 49 + Height = 21 + Hint = 'Element pr'#233'c'#233'dent' + ParentShowHint = False + ShowHint = True + TabOrder = 1 + end + object EditActuel: TEdit + Left = 272 + Top = 18 + Width = 49 + Height = 21 + Hint = 'Element actuel' + ParentShowHint = False + ShowHint = True + TabOrder = 2 + end end end object GroupBox2: TGroupBox - Left = 433 + Left = 472 Top = 24 Width = 345 Height = 137 @@ -293,9 +339,9 @@ object FormDebug: TFormDebug ParentFont = False TabOrder = 11 object CheckAffSig: TCheckBox - Left = 24 + Left = 8 Top = 16 - Width = 297 + Width = 161 Height = 17 Caption = 'Fonctionnement des signaux' Font.Charset = DEFAULT_CHARSET @@ -308,9 +354,9 @@ object FormDebug: TFormDebug OnClick = CheckAffSigClick end object CheckBoxEvtDetAig: TCheckBox - Left = 24 + Left = 8 Top = 32 - Width = 281 + Width = 201 Height = 17 Caption = 'Ev'#232'nements d'#233'tecteurs et aiguillages' Font.Charset = DEFAULT_CHARSET @@ -323,9 +369,9 @@ object FormDebug: TFormDebug OnClick = CheckBoxEvtDetAigClick end object CheckBoxTraceLIste: TCheckBox - Left = 24 + Left = 8 Top = 112 - Width = 289 + Width = 185 Height = 17 Caption = 'Evaluations des routes des trains' Font.Charset = DEFAULT_CHARSET @@ -338,9 +384,9 @@ object FormDebug: TFormDebug OnClick = CheckBoxTraceLIsteClick end object CheckTrame: TCheckBox - Left = 24 + Left = 8 Top = 80 - Width = 305 + Width = 233 Height = 17 Caption = 'Trames '#233'chang'#233'es avec l'#39'interface ou CDM' Font.Charset = DEFAULT_CHARSET @@ -353,9 +399,9 @@ object FormDebug: TFormDebug OnClick = CheckTrameClick end object CheckBoxAct: TCheckBox - Left = 24 + Left = 8 Top = 48 - Width = 257 + Width = 153 Height = 17 Caption = 'Ev'#232'vements actionneurs' Font.Charset = DEFAULT_CHARSET @@ -368,9 +414,9 @@ object FormDebug: TFormDebug OnClick = CheckBoxActClick end object CheckBoxAffFD: TCheckBox - Left = 24 + Left = 8 Top = 96 - Width = 297 + Width = 193 Height = 17 Caption = 'Fronts descendants des d'#233'tecteurs' Color = cl3DLight @@ -385,9 +431,9 @@ object FormDebug: TFormDebug OnClick = CheckBoxAffFDClick end object CheckBoxAffDebDecSig: TCheckBox - Left = 24 + Left = 8 Top = 64 - Width = 265 + Width = 193 Height = 17 Caption = 'Pilotage des d'#233'codeurs de signaux' Font.Charset = DEFAULT_CHARSET diff --git a/UnitDebug.pas b/UnitDebug.pas index 4b75e19..e67432e 100644 --- a/UnitDebug.pas +++ b/UnitDebug.pas @@ -25,11 +25,6 @@ type copier1: TMenuItem; ButtonRazLog: TButton; GroupBox1: TGroupBox; - ButtonSigSuiv: TButton; - EditSigSuiv: TEdit; - EditPrec: TEdit; - EditActuel: TEdit; - ButtonDetSuiv: TButton; GroupBox2: TGroupBox; CheckAffSig: TCheckBox; CheckBoxEvtDetAig: TCheckBox; @@ -38,7 +33,16 @@ type CheckBoxAct: TCheckBox; CheckBoxAffFD: TCheckBox; CheckBoxAffDebDecSig: TCheckBox; + GroupBox3: TGroupBox; + ButtonSigSuiv: TButton; ButtonCanSuivSig: TButton; + EditSigSuiv: TEdit; + Label4: TLabel; + GroupBox4: TGroupBox; + ButtonDetSuiv: TButton; + EditPrec: TEdit; + EditActuel: TEdit; + Button1: TButton; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCreate(Sender: TObject); procedure ButtonEcrLogClick(Sender: TObject); @@ -59,13 +63,14 @@ type procedure ButtonSigSuivClick(Sender: TObject); procedure ButtonDetSuivClick(Sender: TObject); procedure ButtonCanSuivSigClick(Sender: TObject); + procedure Button1Click(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } end; -Const +Const Max_Event_det_tick=30000; Max_event_det=400; Max_Trains=50; @@ -356,4 +361,14 @@ end; +procedure TFormDebug.Button1Click(Sender: TObject); +var Adr,erreur,ancdebug : integer ; +begin + Val(EditSigSuiv.Text,Adr,erreur); if erreur<>0 then exit; + ancdebug:=NivDebug; + NivDebug:=3; + PresTrainPrec(Adr); + NivDebug:=AncDebug; +end; + end. diff --git a/UnitPrinc.dcu b/UnitPrinc.dcu index f657324d83372889bd342ac88a3a832a1de63b5b..e18181d20bd5bcded994983fe05ce218109c6eae 100644 GIT binary patch delta 67695 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�pthy6gG`!OKARyn&JHnIV)JZ{*gKnN3O>61 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 delta 64878 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 Su*PgK+s8QYC>i(r#s3391@rR& diff --git a/UnitPrinc.pas b/UnitPrinc.pas index ef09fb4..d8399f6 100644 --- a/UnitPrinc.pas +++ b/UnitPrinc.pas @@ -228,7 +228,7 @@ var ancien_tablo_signalCplx,EtatsignalCplx : array[0..MaxAcc] of word; ServeurRetroCDM,TailleFonte : integer; Hors_tension2,traceSign,TraceZone,Ferme,parSocket,ackCdm,PremierFD, - NackCDM,MsgSim,succes,recu_cv,AffActionneur,AffAigDet, + NackCDM,MsgSim,succes,recu_cv,AffActionneur,AffAigDet,Option_demarrage, TraceListe,clignotant,nack,Maj_feux_cours,configNulle,LanceCDM : boolean; CDMhd : THandle; @@ -244,7 +244,14 @@ var ancien_tablo_signalCplx,EtatsignalCplx : array[0..MaxAcc] of word; maxaiguillage,detecteur_chgt,Temps,Tempo_init,Suivant,TypeGen, NbreImagePligne,NbreBranches,Index2_det,Index2_aig,branche_det,Index_det, I_simule,maxTablo_act,NbreVoies,AdresseFeuSuivant,El_suivant : integer; - Ancien_detecteur,detecteur : array[0..1024] of boolean; // anciens état des détecteurs et adresses des détecteurs et leur état + Ancien_detecteur : array[0..1024] of boolean; // anciens état des détecteurs et adresses des détecteurs et leur état + detecteur : array[0..1024] of + record + etat : boolean; + tempo : integer; + train : string; + end; + Adresse_detecteur : array[0..60] of integer; // adresses des détecteurs par index mem : array[0..1024] of boolean ; // mémoire des états des détecteurs MemZone : array[0..1024,0..1024] of boolean ; // mémoires de zones @@ -346,6 +353,7 @@ function etat_signal_suivant(Adresse,rang : integer) : integer; function suivant_alg3(prec : integer;typeELprec : integer;var actuel : integer;typeElActuel : integer;alg : integer) : integer; function detecteur_suivant_El(el1: integer;TypeDet1 : integer;el2 : integer;TypeDet2 : integer) : integer ; function test_memoire_zones(adresse : integer) : boolean; +function PresTrainPrec(AdrFeu : integer) : boolean; implementation @@ -740,7 +748,7 @@ end; // dessine les feux sur une cible à 9 feux procedure dessine_feu9(Acanvas : Tcanvas;x,y : integer;frX,frY : real;etatsignal : word;orientation : integer); -var rayon, +var rayon, XBlanc,Yblanc,xJaune,yJaune,Xsem,YSem,Xvert,YVert,Xcarre,Ycarre,Xral1,Yral1,Xral2,YRal2, Xrap1,Yrap1,Xrap2,Yrap2,Temp : integer; LgImage,HtImage,xt,yt : integer; @@ -763,7 +771,7 @@ begin LgImage:=Formprinc.Image9feux.Picture.Bitmap.Width; HtImage:=Formprinc.Image9feux.Picture.Bitmap.Height; - + if (orientation=2) then begin //rotation 90° vers la gauche des feux @@ -791,7 +799,7 @@ begin Temp:=LgImage-Xral1;Xral1:=Yral1;Yral1:=Temp; Temp:=LgImage-Xral2;Xral2:=Yral2;Yral2:=Temp; Temp:=LgImage-Xrap1;Xrap1:=Yrap1;Yrap1:=Temp; - Temp:=LgImage-Xrap2;Xrap2:=Yrap2;Yrap2:=Temp; + Temp:=LgImage-Xrap2;Xrap2:=Yrap2;Yrap2:=Temp; end; XJaune:=round(Xjaune*Frx)+x; YJaune:=round(Yjaune*Fry)+Y; @@ -836,7 +844,7 @@ begin if ((code=vert_cli) and clignotant) or (code=vert) then cercle(ACanvas,xvert,yvert,rayon,clGreen); if ((code=blanc_cli) and clignotant) or (code=blanc) then cercle(ACanvas,xBlanc,yBlanc,rayon,clWhite); if (code=violet) then cercle(ACanvas,xblanc,yblanc,rayon,clViolet); - + if code=carre then begin cercle(ACanvas,xcarre,yCarre,rayon,clRed); @@ -1192,14 +1200,14 @@ begin 5 : picture.bitmap:=Formprinc.Image5feux.picture.Bitmap; 7 : picture.bitmap:=Formprinc.Image7feux.picture.Bitmap; 9 : picture.bitmap:=Formprinc.Image9feux.picture.Bitmap; - + 12 : picture.bitmap:=Formprinc.Image2Dir.picture.Bitmap; 13 : picture.bitmap:=Formprinc.Image3Dir.picture.Bitmap; 14 : picture.bitmap:=Formprinc.Image4Dir.picture.Bitmap; 15 : picture.bitmap:=Formprinc.Image5Dir.picture.Bitmap; 16 : picture.bitmap:=Formprinc.Image6Dir.picture.Bitmap; end; - + // mettre rouge par défaut if TypeFeu=2 then EtatSignalCplx[feux[rang].adresse]:=violet_F; if TypeFeu=3 then EtatSignalCplx[feux[rang].adresse]:=semaphore_F; @@ -1383,6 +1391,20 @@ begin chaine_CDM_Func:=so+s; end; +// chaîne pour vitesse train +function chaine_CDM_vitesse(vitesse:integer;train:string) : string; +var s,so,sx: string; +begin + { C-C-00-0002-CMDTRN-SPEED|0xx|02|NAME=nomdutrain;UREQ=vitesse; } + so:=place_id('C-C-01-0004-CMDTRN-SPEED'); + s:=s+'NAME='+train+';'; + s:=s+'UREQ='+intToSTR(vitesse)+';'; + sx:=format('%.*d',[2,2])+'|'; // 2 paramètres + so:=so+ '|'+format('%.*d',[3,length(s)+length(sx)])+'|'+sx; + + chaine_CDM_vitesse:=so+s; +end; + // prépare la chaîne de commande pour un accessoire via CDM Function chaine_CDM_Acc(adresse,etat1 : integer) : string; var so,sx,s : string; @@ -1477,7 +1499,7 @@ begin s:=chaine_CDM_Acc(adresse,octet); envoi_CDM(s); if (acc=feu) and not(Raz_Acc_signaux) then exit; - if debug_dec_sig and (acc=feu) then AfficheDebug('Tick='+IntToSTR(Tick)+' signal '+intToSTR(adresse)+' '+intToSTR(octet),clorange); + if debug_dec_sig and (acc=feu) then AfficheDebug('Tick='+IntToSTR(Tick)+' signal '+intToSTR(adresse)+' 0',clorange); s:=chaine_CDM_Acc(adresse,0); envoi_CDM(s); exit; @@ -1504,7 +1526,7 @@ begin envoi(s); // envoi de la trame et attente Ack // si l'accessoire est un feu et sans raz des signaux, sortir if (acc=feu) and not(Raz_Acc_signaux) then exit; - + // si aiguillage, faire une temporisation //if (index_feu(adresse)=0) or (Acc=aig) then @@ -1557,10 +1579,19 @@ end; procedure vitesse_loco(loco : integer;vitesse : integer;sens : boolean); var s : string; begin - if sens then vitesse:=vitesse or 128; - s:=#$e4+#$13+#$0+char(loco)+char(vitesse); - s:=checksum(s); - envoi(s); + if portCommOuvert or parSocket then + begin + if sens then vitesse:=vitesse or 128; + s:=#$e4+#$13+#$0+char(loco)+char(vitesse); + s:=checksum(s); + envoi(s); + end; + if cdm_connecte then + begin + //s:=chaine_CDM_vitesse(0,'BB25531'); + s:=chaine_CDM_vitesse(1,'CC406526'); // 0 n'arrete pas le train + envoi_CDM(s); + end; end; // fonctions sur les bits @@ -1602,7 +1633,9 @@ end; // Aspect : code représentant l'état du signal de 0 à 15 procedure Maj_Etat_Signal(adresse,aspect : integer); var i : integer; -begin +begin +// ('0carré','1sémaphore','2sémaphore cli','3vert','4vert cli','5violet', +// '6blanc','7blanc cli','8jaune','9jaune cli','10ral 30','11ral 60','12rappel 30','13rappel 60'); if testBit((EtatSignalCplx[adresse]),aspect)=false then // si le bit dans l'état du signal n'est pas allumé, procéder. begin // effacement du motif de bits en fonction du nouvel état demandé suivant la règle des signaux complexes @@ -1769,9 +1802,9 @@ var index : integer; code,aspect,combine : word; s : string; begin - if (ancien_tablo_signalCplx[adresse]<>EtatSignalCplx[adresse]) then //; && (stop_cmd==FALSE)) + //***if (ancien_tablo_signalCplx[adresse]<>EtatSignalCplx[adresse]) then //; && (stop_cmd==FALSE)) begin - ancien_tablo_signalCplx[adresse]:=EtatSignalCplx[adresse]; + //***ancien_tablo_signalCplx[adresse]:=EtatSignalCplx[adresse]; code:=EtatSignalCplx[adresse]; code_to_aspect(code,aspect,combine); s:='Signal CDF: ad'+IntToSTR(adresse)+'='+chaine_signal(code); @@ -1814,9 +1847,9 @@ var code,aspect,combine : word; end; begin -if (ancien_tablo_signalCplx[adresse]<>EtatSignalCplx[adresse]) then //; && (stop_cmd==FALSE)) +//***if (ancien_tablo_signalCplx[adresse]<>EtatSignalCplx[adresse]) then //; && (stop_cmd==FALSE)) begin - ancien_tablo_signalCplx[adresse]:=EtatSignalCplx[adresse]; + //***ancien_tablo_signalCplx[adresse]:=EtatSignalCplx[adresse]; code:=EtatSignalCplx[adresse]; code_to_aspect(code,aspect,combine); s:='Signal LEB: ad'+IntToSTR(adresse)+'='+chaine_signal(code); @@ -1891,9 +1924,9 @@ begin //index:=Index_feu(adresse); // tranforme l'adresse du feu en index tableau //code:=feux[index].aspect; // aspect du feu; - if (ancien_tablo_signalCplx[adresse]<>EtatSignalCplx[adresse]) then + //***if (ancien_tablo_signalCplx[adresse]<>EtatSignalCplx[adresse]) then begin - ancien_tablo_signalCplx[adresse]:=EtatSignalCplx[adresse]; + //***ancien_tablo_signalCplx[adresse]:=EtatSignalCplx[adresse]; code:=EtatSignalCplx[adresse]; code_to_aspect(code,aspect,combine); s:='Signal NMRA: ad'+IntToSTR(adresse)+'='+chaine_signal(code); @@ -1937,9 +1970,9 @@ var modele,index: integer ; begin index:=Index_feu(adresse); // tranforme l'adresse du feu en index tableau - if (ancien_tablo_signalCplx[adresse]<>EtatSignalCplx[adresse]) then + //***if (ancien_tablo_signalCplx[adresse]<>EtatSignalCplx[adresse]) then begin - ancien_tablo_signalCplx[adresse]:=EtatSignalCplx[adresse]; + //***ancien_tablo_signalCplx[adresse]:=EtatSignalCplx[adresse]; code:=EtatSignalCplx[adresse]; code_to_aspect(code,aspect,combine); s:='Signal Unisemaf: ad'+IntToSTR(adresse)+'='+chaine_signal(code); @@ -2230,9 +2263,9 @@ procedure envoi_LDT(adresse : integer); var code,aspect,combine,mode : word; s : string; begin - if (ancien_tablo_signalCplx[adresse]<>EtatSignalCplx[adresse]) then //; && (stop_cmd==FALSE)) + //***if (ancien_tablo_signalCplx[adresse]<>EtatSignalCplx[adresse]) then //; && (stop_cmd==FALSE)) begin - ancien_tablo_signalCplx[adresse]:=EtatSignalCplx[adresse]; + //***ancien_tablo_signalCplx[adresse]:=EtatSignalCplx[adresse]; code:=EtatSignalCplx[adresse]; code_to_aspect(code,aspect,combine); s:='Signal LDT: ad'+IntToSTR(adresse)+'='+chaine_signal(code); @@ -2305,7 +2338,7 @@ var aspect,code,combine : word; ralrap, jau ,Ancralrap,Ancjau : boolean; s : string; begin - if (ancien_tablo_signalCplx[adresse]<>EtatSignalCplx[adresse]) then //; && (stop_cmd==FALSE)) + //***if (ancien_tablo_signalCplx[adresse]<>EtatSignalCplx[adresse]) then //; && (stop_cmd==FALSE)) begin code:=EtatSignalCplx[adresse]; @@ -2322,7 +2355,8 @@ begin (TestBit(ancien_tablo_signalCplx[adresse],rappel_30)) or (TestBit(ancien_tablo_signalCplx[adresse],rappel_60)) ; // si ancien état du signal=jaune ou jaune cli Ancjau:=(TestBit(ancien_tablo_signalCplx[adresse],jaune)) or (TestBit(ancien_tablo_signalCplx[adresse],jaune_cli)) ; - ancien_tablo_signalCplx[adresse]:=EtatSignalCplx[adresse]; + + //***ancien_tablo_signalCplx[adresse]:=EtatSignalCplx[adresse]; // si état demandé du signal=ralentissement ou rappel ralrap:=(TestBit(code,ral_30)) or (TestBit(code,ral_60)) or @@ -2518,7 +2552,7 @@ else signalCplx:=232; if ((aiguillage[1].position<>2) and (aiguillage[3].position=2) and (aiguillage[4].position=2) and (aiguillage[6].position<>0)) then begin - if detecteur[516] then Maj_Etat_Signal(signalCplx,blanc) + if detecteur[516].etat then Maj_Etat_Signal(signalCplx,blanc) else Maj_Etat_Signal(signalCplx,blanc_cli) end else Maj_Etat_Signal(signalCplx,violet); @@ -2715,7 +2749,7 @@ signalCplx:=316; if ( (aiguillage[5].position=2) and (aiguillage[3].position<>2) and (aiguillage[1].position<>2) ) or ( feux[index_feu(signalCplx)].check.checked) then begin - if detecteur[518] then Maj_Etat_Signal(signalCplx,blanc_cli) else Maj_Etat_Signal(signalCplx,blanc) ; + if detecteur[518].etat then Maj_Etat_Signal(signalCplx,blanc_cli) else Maj_Etat_Signal(signalCplx,blanc) ; end else begin @@ -3207,70 +3241,103 @@ end; // de la proc // pilotage d'un signal procedure envoi_signal(Adr : integer); -var i,adresse,a,aspect,x,y,x0,y0,TailleX,TailleY,Orientation : integer; +var i,adresse,det,a,b,aspect,x,y,x0,y0,TailleX,TailleY,Orientation : integer; ImageFeu : TImage; frX,frY : real; + s : string; begin i:=index_feu(Adr); - if feux[i].aspect<10 then - begin - // envoie la commande au décodeur - case feux[i].decodeur of - 0 : envoi_virtuel(Adr); - 1 : envoi_signalBahn(Adr); - 2 : envoi_CDF(Adr); - 3 : envoi_LDT(Adr); - 4 : envoi_LEB(Adr); - 5 : envoi_NMRA(Adr); - 6 : envoi_UniSemaf(Adr); - end; - - // allume les signaux du feu dans la fenêtre de droite - Dessine_feu_mx(Feux[i].Img.Canvas,0,0,1,1,adr,1); - - // allume les signaux du feu dans le TCO - if AvecTCO then + if (ancien_tablo_signalCplx[adr]<>EtatSignalCplx[adr]) then //*** + begin + if feux[i].aspect<10 then // si signal non directionnel begin - for y:=1 to NbreCellY do - for x:=1 to NbreCellX do - begin - if TCO[x,y].Bimage=30 then - begin - adresse:=TCO[x,y].adresse; // vérifie si le feu existe dans le TCO - a:=EtatsignalCplx[adresse]; // a = état binaire du feu - aspect:=TCO[x,y].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; - else ImageFeu:=Formprinc.Image3feux; - end; - x0:=(tco[x,y].x-1)*LargeurCell; // coordonnées XY du feu - y0:=(tco[x,y].y-1)*HauteurCell; - TailleY:=ImageFeu.picture.BitMap.Height; // taille du feu d'origine (verticale) - TailleX:=ImageFeu.picture.BitMap.Width; - Orientation:=TCO[x,y].FeuOriente; - // réduction variable en fonction de la taille des cellules - calcul_reduction(frx,fry,round(TailleX*LargeurCell/ZoomMax),round(tailleY*HauteurCell/ZoomMax),TailleX,TailleY); + // envoie la commande au décodeur + case feux[i].decodeur of + 0 : envoi_virtuel(Adr); + 1 : envoi_signalBahn(Adr); + 2 : envoi_CDF(Adr); + 3 : envoi_LDT(Adr); + 4 : envoi_LEB(Adr); + 5 : envoi_NMRA(Adr); + 6 : envoi_UniSemaf(Adr); + end; - // décalage en X pour mettre la tete du feu alignée sur le bord droit de la cellule pour les feux tournés à 90G - if orientation=2 then + // vérifier si on quitte le rouge + if Option_demarrage then + begin + a:=ancien_tablo_signalCplx[adr]; + b:=EtatSignalCplx[adr]; + if ((a=semaphore_F) or (a=carre_F) or (a=violet_F)) and ((b<>semaphore_F) and (b<>carre_F) and (b<>violet_F)) then + if not(Diffusion) then Affiche('On quitte le rouge du signal '+intToSTR(adr),clyellow); + // y a t il un train en face du signal + if cdm_connecte then + begin + det:=feux[i].Adr_det1; + if det<>0 then + begin + // test si train sur le détecteur det + if detecteur[det].etat then begin - if aspect=9 then x0:=x0+round(10*frX); - if aspect=7 then x0:=x0+round(10*frX); - if aspect=5 then begin x0:=x0+round(10*frX);y0:=y0+HauteurCell-round(tailleX*frY); end; - if aspect=4 then begin x0:=x0+round(10*frX);y0:=y0+HauteurCell-round(tailleX*frY); end; - if aspect=3 then begin x0:=x0+round(10*frX);y0:=y0+HauteurCell-round(tailleX*frY); end; - if aspect=2 then begin x0:=x0+round(10*frX);y0:=y0+HauteurCell-round(tailleX*frY); end; + detecteur[det].tempo:=20; // armer la tempo à 2s + // arreter le train + s:=detecteur[det].train; + Affiche('et son détecteur '+IntToSTR(det)+'=1 tempo démarrage '+s,clYellow); + s:=chaine_CDM_vitesse(1,s); // 0% + envoi_cdm(s); end; - // Dessine_feu_mx(PCanvasTCO,x0,y0,frx,fry,adresse,orientation); - Dessine_feu_mx(PCanvasTCO,tco[x,y].x,tco[x,y].y,frx,fry,adresse,orientation); end; - end; - end; + end; + end; + + ancien_tablo_signalCplx[adr]:=EtatSignalCplx[adr]; //*** + + // allume les signaux du feu dans la fenêtre de droite + Dessine_feu_mx(Feux[i].Img.Canvas,0,0,1,1,adr,1); + + // allume les signaux du feu dans le TCO + if AvecTCO then + begin + for y:=1 to NbreCellY do + for x:=1 to NbreCellX do + begin + if TCO[x,y].Bimage=30 then + begin + adresse:=TCO[x,y].adresse; // vérifie si le feu existe dans le TCO + a:=EtatsignalCplx[adresse]; // a = état binaire du feu + aspect:=TCO[x,y].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; + else ImageFeu:=Formprinc.Image3feux; + end; + x0:=(tco[x,y].x-1)*LargeurCell; // coordonnées XY du feu + y0:=(tco[x,y].y-1)*HauteurCell; + TailleY:=ImageFeu.picture.BitMap.Height; // taille du feu d'origine (verticale) + TailleX:=ImageFeu.picture.BitMap.Width; + Orientation:=TCO[x,y].FeuOriente; + // réduction variable en fonction de la taille des cellules + calcul_reduction(frx,fry,round(TailleX*LargeurCell/ZoomMax),round(tailleY*HauteurCell/ZoomMax),TailleX,TailleY); + + // décalage en X pour mettre la tete du feu alignée sur le bord droit de la cellule pour les feux tournés à 90G + if orientation=2 then + begin + if aspect=9 then x0:=x0+round(10*frX); + if aspect=7 then x0:=x0+round(10*frX); + if aspect=5 then begin x0:=x0+round(10*frX);y0:=y0+HauteurCell-round(tailleX*frY); end; + if aspect=4 then begin x0:=x0+round(10*frX);y0:=y0+HauteurCell-round(tailleX*frY); end; + if aspect=3 then begin x0:=x0+round(10*frX);y0:=y0+HauteurCell-round(tailleX*frY); end; + if aspect=2 then begin x0:=x0+round(10*frX);y0:=y0+HauteurCell-round(tailleX*frY); end; + end; + // Dessine_feu_mx(PCanvasTCO,x0,y0,frx,fry,adresse,orientation); + Dessine_feu_mx(PCanvasTCO,tco[x,y].x,tco[x,y].y,frx,fry,adresse,orientation); + end; + end; + end; + end; end; end; @@ -3469,7 +3536,8 @@ begin end; for i:=1 to 1024 do begin - Detecteur[i]:=false; + Detecteur[i].etat:=false; + Detecteur[i].train:='0'; Ancien_detecteur[i]:=false; end; //ChDir(s); @@ -4032,7 +4100,7 @@ begin repeat //Affiche('Boucle de direction',clyellow); //Affiche(s,clOrange); - if s[1]<>'A' then begin Affiche('Erreur a la ligne',clred);exit;end; + if s[1]<>'A' then begin Affiche('Erreur a la ligne '+s,clred);exit;end; delete(s,1,1); val(s,adr,erreur); // adresse c:=s[erreur]; // type @@ -4459,14 +4527,14 @@ end; // front descendant sur un détecteur function detecteur_0(adresse : integer) : boolean; begin - detecteur_0:=(Ancien_detecteur[adresse]=true) and ((detecteur[adresse])=false); - Ancien_detecteur[adresse]:=detecteur[adresse]; + detecteur_0:=(Ancien_detecteur[adresse]=true) and ((detecteur[adresse].etat)=false); + Ancien_detecteur[adresse]:=detecteur[adresse].etat; end; function detecteur_1(adresse : integer) : boolean; begin - detecteur_1:=(Ancien_detecteur[adresse]=false) and ((detecteur[adresse])=true); - Ancien_detecteur[adresse]:=detecteur[adresse]; + detecteur_1:=(Ancien_detecteur[adresse]=false) and ((detecteur[adresse].etat)=true); + Ancien_detecteur[adresse]:=detecteur[adresse].etat; end; function virgule_prec(sl : string;o : integer) : integer; @@ -5126,12 +5194,12 @@ end; // renvoie l'adresse du détecteur suivant des deux éléments contigus -// TypeElprec/actuel: 1= détecteur 2= aiguillage 3=bis 4=Buttoir +// TypeElprec/actuel: 1= détecteur 2= aiguillage 4=Buttoir function detecteur_suivant(prec : integer;TypeElPrec : integer;actuel : integer;TypeElActuel : integer) : integer ; var actuelCalc,PrecCalc,etat,i,j,AdrSuiv , TypeprecCalc,TypeActuelCalc : integer; begin - if NivDebug>=2 then AfficheDebug('cherche détecteur suivant aux '+IntToSTR(prec)+'/'+IntToSTR(typeElPrec)+' - '+intToSTR(actuel)+'/'+intToSTR(TypeElActuel),clyellow); + if NivDebug>=2 then AfficheDebug('Proc Detecteur_suivant '+IntToSTR(prec)+','+IntToSTR(typeElPrec)+'/'+intToSTR(actuel)+','+intToSTR(TypeElActuel),clyellow); j:=0; PrecCalc:=prec; @@ -5140,11 +5208,11 @@ begin TypeActuelCalc:=TypeELActuel; // étape 1 trouver le sens repeat - inc(j); + inc(j); AdrSuiv:=suivant_alg3(precCalc,TypeprecCalc,actuelCalc,TypeActuelCalc,1); if (typeGen=2) and false then // si le précédent est une TJD/S et le suivant aussi begin - if ((aiguillage[AdrSuiv].modele=2) or (aiguillage[AdrSuiv].modele=3)) and + if ((aiguillage[AdrSuiv].modele=2) or (aiguillage[AdrSuiv].modele=3)) and ((aiguillage[actuelCalc].modele=2) or (aiguillage[ActuelCalc].modele=3)) then begin if nivDebug=3 then AfficheDebug('501 - Détection Précédent=TJD/S Suivant=TJD/S',clyellow); @@ -5156,8 +5224,8 @@ begin TypeprecCalc:=TypeActuelCalc; actuelCalc:=AdrSuiv; TypeActuelCalc:=typeGen; - //Affiche('Suivant signalaig='+IntToSTR(AdrSuiv),clyellow); - until (j=10) or (typeGen=1) or (AdrSuiv=0) or (AdrSuiv>=9996); // arret si détecteur + //Affiche('Suivant signalaig='+IntToSTR(AdrSuiv),clyellow); + until (j=10) or (typeGen=1) or (AdrSuiv=0) or (AdrSuiv>=9996); // arret si détecteur // si trouvé le sens, trouver le suivant if AdrSuiv=actuel then begin @@ -5226,18 +5294,18 @@ begin end; // renvoie l'adresse du détecteur suivant des deux éléments -// El1 et El2 peuvent être séparés par des aiguillages -// en sortie : 9999= det1 ou det2 non trouvé -// 9996 : non trouvé +// El1 et El2 peuvent être séparés par des aiguillages, mais de pas plus de 3 détecteurs +// en sortie : 9999= det1 ou det2 non trouvé +// 9996 : non trouvé function detecteur_suivant_El(el1: integer;TypeDet1 : integer;el2 : integer;TypeDet2 : integer) : integer ; var IndexBranche_det1,IndexBranche_det2,branche_trouve_det1,branche_trouve_det2,i, - j,AdrPrec,Adr,AdrFonc,TypePrec,TypeFonc,i1,i2,index : integer; + j,AdrPrec,Adr,AdrFonc,TypePrec,TypeFonc,i1,i2,index,N_det : integer; Sortie : boolean; s : string; label reprise; - + begin - if NivDebug>=2 then + if NivDebug>=2 then AfficheDebug('Proc Detecteur_suivant_EL '+intToSTR(el1)+','+intToSTR(Typedet1)+'/'+intToSTR(el2)+','+intToSTR(Typedet2)+'-------------------------',clLime); if (el1>9000) or (el2>9000) then begin @@ -5294,49 +5362,19 @@ begin AdrFonc:=BrancheN[branche_trouve_det1,i1].adresse; typeFonc:=BrancheN[branche_trouve_det1,i1].Btype ; - - i:=0; + + i:=0;N_Det:=0; if AdrFonc<>El2 then // si pas déja trouvé le sens de progression - repeat - //AfficheDebug('Engage '+IntToSTR(AdrPrec)+','+IntToSTR(typePrec)+'/'+IntToSTR(AdrFonc)+','+IntToSTR(typeFonc),clyellow); - Adr:=suivant_alg3(AdrPrec,TypePrec,AdrFonc,TypeFonc,1); - //AfficheDebug('Sortie Alg3: '+IntToSTR(Adr)+'/'+intToSTR(typeGen),clyellow); - - if NivDebug=3 then - begin - s:='613 : trouvé='+intToSTR(Adr); - case typeGen of - 1 : s:=s+' detecteur'; - 2 : s:=s+' aiguillage'; - 3 : s:=s+' aiguillage bis'; - end; - AfficheDebug(s,clorange); - end; - - AdrPrec:=AdrFonc;TypePrec:=TypeFonc; - AdrFonc:=Adr;TypeFonc:=typeGen; - inc(i); - sortie:=((typeDet2=TypeGen) and (Adr=el2)) or (Adr=0) or (Adr>=9996) or (i=20); - until sortie - - else begin - // déja trouvé - adr:=el2;typeGen:=TypeDet2; - end; - - if (typeDet2=TypeGen) and (Adr=el2) then - begin - if Nivdebug=3 then AfficheDebug('614 : Trouvé '+intToSTR(el2),clYellow); - i:=0; repeat //AfficheDebug('Engage '+IntToSTR(AdrPrec)+','+IntToSTR(typePrec)+'/'+IntToSTR(AdrFonc)+','+IntToSTR(typeFonc),clyellow); + if nivDebug=3 then AfficheDebug('i='+IntToSTR(i)+' NDet='+IntToSTR(N_det),clyellow); Adr:=suivant_alg3(AdrPrec,TypePrec,AdrFonc,TypeFonc,1); //AfficheDebug('Sortie Alg3: '+IntToSTR(Adr)+'/'+intToSTR(typeGen),clyellow); - + if TypeGen=1 then inc(N_Det); if NivDebug=3 then begin - s:='614 : trouvé='+intToSTR(Adr); + s:='613 : trouvé='+intToSTR(Adr); case typeGen of 1 : s:=s+' detecteur'; 2 : s:=s+' aiguillage'; @@ -5344,15 +5382,49 @@ begin end; AfficheDebug(s,clorange); end; - - AdrPrec:=AdrFonc;TypePrec:=TypeFonc; - AdrFonc:=Adr;TypeFonc:=typeGen; + + AdrPrec:=AdrFonc;TypePrec:=TypeFonc; + AdrFonc:=Adr;TypeFonc:=typeGen; inc(i); - sortie:=(TypeGen=1) or (Adr=0) or (Adr>=9996) or (i=20); + sortie:=((typeDet2=TypeGen) and (Adr=el2)) or (Adr=0) or (Adr>=9996) or (i=15) or (N_Det=3); + until sortie ; + if (i=15) and (Nivdebug=3) then afficheDebug('Pas trouvé',clyellow); + if (N_det=3) and (Nivdebug=3) then afficheDebug('Détecteurs trop distants',clyellow); + end + + else + begin + // déja trouvé + adr:=el2;typeGen:=TypeDet2; + end; + + if (typeDet2=TypeGen) and (Adr=el2) then + begin + if Nivdebug=3 then AfficheDebug('614 : Trouvé '+intToSTR(el2),clYellow); + i:=0; + repeat + //AfficheDebug('Engage '+IntToSTR(AdrPrec)+','+IntToSTR(typePrec)+'/'+IntToSTR(AdrFonc)+','+IntToSTR(typeFonc),clyellow); + Adr:=suivant_alg3(AdrPrec,TypePrec,AdrFonc,TypeFonc,1); + //AfficheDebug('Sortie Alg3: '+IntToSTR(Adr)+'/'+intToSTR(typeGen),clyellow); + + if NivDebug=3 then + begin + s:='614 : trouvé='+intToSTR(Adr); + case typeGen of + 1 : s:=s+' detecteur'; + 2 : s:=s+' aiguillage'; + end; + AfficheDebug(s,clorange); + end; + + AdrPrec:=AdrFonc;TypePrec:=TypeFonc; + AdrFonc:=Adr;TypeFonc:=typeGen; + inc(i); + sortie:=(TypeGen=1) or (Adr=0) or (Adr>=9996) or (i=10); until sortie; if TypeGen=1 then begin - if NivDebug=3 then + if NivDebug=3 then begin AfficheDebug('le détecteur suivant est le '+IntToSTR(Adr),clyellow); affichedebug('------------------',clyellow); @@ -5360,8 +5432,8 @@ begin detecteur_suivant_el:=Adr; exit; end; - end; - if (i=20) then if NivDebug=3 then AfficheDebug('201 : Itération trop longue',clred); + end; + if (i=10) then if NivDebug=3 then AfficheDebug('201 : Itération trop longue',clred); inc(j); //AfficheDebug('j='+intToSTR(j),clyellow); until j=3; @@ -5370,6 +5442,7 @@ begin end; +// renvoie vrai si les aiguillages déclarés dans la définition du signal sont mal positionnés function cond_carre(adresse : integer) : boolean; var i,l,k,NCondCarre,adrAig : integer; resultatET,resultatOU: boolean; @@ -5380,7 +5453,7 @@ begin l:=1; resultatOU:=false; - + while NcondCarre<>0 do begin if Ncondcarre<>0 then dec(Ncondcarre); @@ -5397,13 +5470,13 @@ begin resultatOU:=resultatOU or resultatET; NCondCarre:=Length(feux[i].condcarre[l]); end; - //if resultatOU then Affiche('VRAI final',clyellow) else affiche('FAUX final',clred); - if NivDebug=3 then + //if resultatOU then Affiche('VRAI final',clyellow) else affiche('FAUX final',clred); + if NivDebug=3 then begin s:='Conditions de carré suivant aiguillages: '; if ResultatOU then s:=s+'vrai' else s:=s+'faux'; AfficheDebug(s,clyellow); - end; + end; cond_carre:=ResultatOU; end; @@ -5967,10 +6040,89 @@ begin test_route_valide:=10 ; end; +// présence train 3 détecteurs avant le feu +function PresTrainPrec(AdrFeu : integer) : boolean; +var PresTrain : boolean; + j,i,Det_initial,Adr_El_Suiv,Btype_el_suivant,DetPrec1,DetPrec2,DetPrec3,DetPrec4 : integer; +begin + if (AffSignal) or (NivDebug=3) then AfficheDebug('Le feu '+intToSTR(AdrFeu)+' est verrouillable au carré',clyellow); + // **** un feu peut être associé à 4 détecteurs (pour 4 voies convergentes) ***** + // il faut donc explorer les 4 détecteurs probables + PresTrain:=FALSE; + j:=1; + i:=index_feu(Adrfeu); + repeat + if NivDebug=3 then afficheDebug('Séquence '+IntToSTR(j)+' de recherche des 4 détecteurs précédents-----',clOrange); + if (j=1) then + begin + det_initial:=feux[i].Adr_det1;Adr_El_Suiv:=feux[i].Adr_el_suiv1; + if feux[i].Btype_suiv1=1 then Btype_el_suivant:=1; + if feux[i].Btype_suiv1=2 then Btype_el_suivant:=2; + if feux[i].Btype_suiv1=4 then Btype_el_suivant:=2; // BType_suiv: 1=détecteur 2=aig ou TJD ou TJS 4=tri + end; // Btye_el_suivant: 1= détecteur 2= aiguillage 4=Buttoir + if (j=2) then + begin + det_initial:=feux[i].Adr_det2;Adr_El_Suiv:=feux[i].Adr_el_suiv2; + if feux[i].Btype_suiv1=1 then Btype_el_suivant:=1; + if feux[i].Btype_suiv1=2 then Btype_el_suivant:=2; + if feux[i].Btype_suiv1=4 then Btype_el_suivant:=2; + end; + if (j=3) then + begin + det_initial:=feux[i].Adr_det3;Adr_El_Suiv:=feux[i].Adr_el_suiv3; + if feux[i].Btype_suiv1=1 then Btype_el_suivant:=1; + if feux[i].Btype_suiv1=2 then Btype_el_suivant:=2; + if feux[i].Btype_suiv1=4 then Btype_el_suivant:=2; + end; + if (j=4) then + begin + det_initial:=feux[i].Adr_det4;Adr_El_Suiv:=feux[i].Adr_el_suiv4; + if feux[i].Btype_suiv1=1 then Btype_el_suivant:=1; + if feux[i].Btype_suiv1=2 then Btype_el_suivant:=2; + if feux[i].Btype_suiv1=4 then Btype_el_suivant:=2; + end; + if (det_initial<>0) then + begin + DetPrec1:=detecteur_suivant(Adr_El_Suiv,Btype_el_suivant,det_initial,1); + if DetPrec1<9996 then // route bloquée par aiguillage mal positionné + begin + DetPrec2:=detecteur_suivant_El(det_initial,1,DetPrec1,1); + if DetPrec2<9996 then + begin + DetPrec3:=detecteur_suivant_El(DetPrec1,1,DetPrec2,1); + if DetPrec3<9996 then + begin + DetPrec4:=detecteur_suivant_El(DetPrec2,1,DetPrec3,1); + if AffSignal or (NivDebug=3) then AfficheDebug('les détecteurs précédents au feu '+IntToSTR(Adrfeu)+' sont:'+intToSTR(Det_initial)+' '+intToSTR(DetPrec1)+' '+intToSTR(DetPrec2)+' '+intToSTR(DetPrec3)+' '+intToSTR(DetPrec4),clyellow); + PresTrain:=MemZone[DetPrec4,detPrec3] or + MemZone[DetPrec3,detPrec2] or MemZone[DetPrec2,detPrec1] or MemZone[DetPrec1,Det_initial] or presTrain ; + if AffSignal or (NivDebug=3) then + begin + if MemZone[DetPrec4,detPrec3] then AfficheDebug('0.présence train '+IntToSTR(DetPrec4)+' '+IntToSTR(detPrec3),clyellow); + if MemZone[DetPrec3,detPrec2] then AfficheDebug('1.présence train '+IntToSTR(DetPrec3)+' '+IntToSTR(detPrec2),clyellow); + if MemZone[DetPrec2,detPrec1] then AfficheDebug('2.présence train '+IntToSTR(DetPrec2)+' '+IntToSTR(detPrec1),clyellow); + if MemZone[DetPrec1,det_initial] then AfficheDebug('3.présence train '+IntToSTR(DetPrec1)+' '+IntToSTR(det_Initial),clyellow); + //if PresTrain then AfficheDebug('présence train',clyellow) else afficheDebug('abscence train',clyellow); + end; + //if AffSignal then AfficheDebug('MemZone'+intToSTR(DetPrec3)+' '+IntToSTR(detPrec2) = '+MemZone[DetPrec3,detPrec2] + end; + end; + end; + end; + inc(j); + until (j>=5); + if presTrain or (NivDebug=3) then + begin + if AffSignal Then afficheDebug('présence train feu '+intToSTR(AdrFeu),clorange) + else AfficheDebug('Absence train feu '+intToSTR(AdrFeu),clorange); + end; + PresTrainPrec:=presTrain; +end; + // mise à jour de l'état d'un feu en fontion de son environnement et affiche le feu procedure Maj_Feu(Adrfeu : integer); -var i,j,k1,k2,BtypeSuiv,Adr_det,etat,Adr,Aig,DetPrec1,DetPrec2,Detprec3,Detprec4,Adr_El_Suiv, +var i,j,k1,k2,BtypeSuiv,Adr_det,etat,Adr,Aig,Adr_El_Suiv, Btype_el_suivant,det_initial,bt,el_suiv,modele : integer ; PresTrain,Aff_semaphore,car : boolean; code,combine : word; @@ -6049,75 +6201,8 @@ begin if (Feux[i].aspect>=3) and (EtatSignalCplx[AdrFeu]<>violet_F) then begin // détecteurs précédent le feu , pour déterminer si leurs mémoires de zones sont à 1 pour libérer le carré - if (Feux[i].VerrouCarre) and (Feux[i].aspect>=4) then - begin - if AffSignal then AfficheDebug('Le feu est verrouillable au carré',clyellow); - // **** un feu peut être associé à 4 détecteurs (pour 4 voies convergentes) ***** - // il faut donc explorer les 4 détecteurs probables - PresTrain:=FALSE; - - j:=1; - repeat - if NivDebug=3 then afficheDebug('Séquence '+IntToSTR(j)+' de recherche des 4 détecteurs précédents-----',clOrange); - if (j=1) then - begin det_initial:=feux[i].Adr_det1;Adr_El_Suiv:=feux[i].Adr_el_suiv1; - if feux[i].Btype_suiv1=1 then Btype_el_suivant:=1; - if feux[i].Btype_suiv1=2 then Btype_el_suivant:=2; - if feux[i].Btype_suiv1=5 then Btype_el_suivant:=3; // 1=détécteur 2=aig 5=bis - end; - if (j=2) then - begin - det_initial:=feux[i].Adr_det2;Adr_El_Suiv:=feux[i].Adr_el_suiv2; - if feux[i].Btype_suiv1=1 then Btype_el_suivant:=1; - if feux[i].Btype_suiv1=2 then Btype_el_suivant:=2; - if feux[i].Btype_suiv1=5 then Btype_el_suivant:=3; // 1=détécteur 2=aig 5=bis - end; - if (j=3) then - begin det_initial:=feux[i].Adr_det3;Adr_El_Suiv:=feux[i].Adr_el_suiv3; - if feux[i].Btype_suiv1=1 then Btype_el_suivant:=1; - if feux[i].Btype_suiv1=2 then Btype_el_suivant:=2; - if feux[i].Btype_suiv1=5 then Btype_el_suivant:=3; // 1=détécteur 2=aig 5=bis - end; - if (j=4) then - begin - det_initial:=feux[i].Adr_det4;Adr_El_Suiv:=feux[i].Adr_el_suiv4; - if feux[i].Btype_suiv1=1 then Btype_el_suivant:=1; - if feux[i].Btype_suiv1=2 then Btype_el_suivant:=2; - if feux[i].Btype_suiv1=5 then Btype_el_suivant:=3; // le type du feu 1=détécteur 2=aig 5=bis - end; - if (det_initial<>0) then - begin - DetPrec1:=detecteur_suivant(Adr_El_Suiv,Btype_el_suivant,det_initial,1); - if DetPrec1<9996 then // route bloquée par aiguillage mal positionné - begin - DetPrec2:=detecteur_suivant_El(det_initial,1,DetPrec1,1); - if DetPrec2<9996 then - begin - DetPrec3:=detecteur_suivant_El(DetPrec1,1,DetPrec2,1); - if DetPrec3<9996 then - begin - //DetPrec4:=detecteur_suivant_det(DetPrec2,DetPrec3); - if AffSignal then AfficheDebug('les détecteurs précédents au feu '+IntToSTR(Adrfeu)+' sont:'+intToSTR(Det_initial)+' '+intToSTR(DetPrec1)+' '+intToSTR(DetPrec2)+' '+intToSTR(DetPrec3)+' ',clyellow); - PresTrain:=//MemZone[DetPrec4,detPrec3] or - MemZone[DetPrec3,detPrec2] or MemZone[DetPrec2,detPrec1] or MemZone[DetPrec1,Det_initial] or presTrain ; - if AffSignal then - begin - if MemZone[DetPrec3,detPrec2] then AfficheDebug('1.présence train '+IntToSTR(DetPrec3)+' '+IntToSTR(detPrec2),clyellow); - if MemZone[DetPrec2,detPrec1] then AfficheDebug('2.présence train '+IntToSTR(DetPrec2)+' '+IntToSTR(detPrec1),clyellow); - if MemZone[DetPrec1,det_initial] then AfficheDebug('3.présence train '+IntToSTR(DetPrec1)+' '+IntToSTR(det_Initial),clyellow); - - //if PresTrain then AfficheDebug('présence train',clyellow) else afficheDebug('abscence train',clyellow); - end; - //if AffSignal then AfficheDebug('MemZone'+intToSTR(DetPrec3)+' '+IntToSTR(detPrec2) = '+MemZone[DetPrec3,detPrec2] - end; - end; - end; - end; - inc(j); - until (j>=5); - if presTrain and AffSignal Then afficheDebug('présence train feu '+intToSTR(AdrFeu),clorange); - end; - + if (Feux[i].VerrouCarre) and (Feux[i].aspect>=4) then presTrain:=PresTrainPrec(AdrFeu); + if AffSignal then afficheDebug('Fin de la recherche des 4 détecteurs précédents-----',clOrange); // si le signal peut afficher un carré et les aiguillages après le signal sont mal positionnées ou que pas présence train avant signal et signal // verrouillable au carré, afficher un carré @@ -6267,13 +6352,13 @@ begin for i:=1 to N_trains do begin Nbre:=event_det_train[i].NbEl ; // Nombre d'éléments du tableau courant exploré - if Nbre=2 then + if Nbre=2 then begin if TraceListe or (NivDebug=3) then AfficheDebug('traitement Train n°'+intToSTR(i)+' 2 détecteurs',clyellow); det1:=event_det_train[i].det[1]; det2:=event_det_train[i].det[2]; - resultat:=test_route_valide(det1,det2,det3); - if resultat=10 then + resultat:=test_route_valide(det1,det2,det3); + if resultat=10 then begin AdrSuiv:=detecteur_suivant_el(det2,1,det3,1); // ici on cherche le suivant à det2 det3 if (Adrsuiv>=9996) then @@ -6287,7 +6372,7 @@ begin FormDebug.MemoEvtDet.lines.add(s); if traceListe then AfficheDebug(s,clyellow); With FormDebug.RichEdit do - begin + begin s:='train '+IntToSTR(i)+' '+intToStr(det2)+' à '+intToStr(det3)+' => Mem '+IntToSTR(det3)+' à '+IntTOStr(AdrSuiv); Lines.Add(s); RE_ColorLine(FormDebug.RichEdit,lines.count-1,CouleurTrain[ ((i - 1) mod NbCouleurTrain) +1] ); @@ -6307,7 +6392,7 @@ begin lines.add('Nouveau Tampon train '+intToStr(i)+'--------'); lines.add(intToSTR(event_det_train[i].det[1])); lines.add(intToSTR(event_det_train[i].det[2])); - end; + end; if TraceListe then begin AfficheDebug('Nouveau Tampon train '+intToStr(i)+'--------',clyellow); @@ -6325,14 +6410,14 @@ begin exit; // sortir absolument end; end; - end; + end; end; // traiter pour les cas avec 1 élément for i:=1 to N_trains do begin Nbre:=event_det_train[i].NbEl ; // Nombre d'éléments du tableau courant exploré - if Nbre=1 then + if Nbre=1 then begin if traceListe then AfficheDebug('traitement Train n°'+intToSTR(i)+' 1 détecteur',clyellow); // vérifier si l'élément du tableau et le nouveau sont contigus @@ -6524,7 +6609,7 @@ begin end; // traitement sur les évènements détecteurs -procedure Event_Detecteur(Adresse : integer;etat : boolean); +procedure Event_Detecteur(Adresse : integer;etat : boolean;train : string); var i,AdrSuiv,AdrFeu,AdrDetfeu,TrainActuel,Etat01,typeSuiv,AdrPrec : integer; s : string; begin @@ -6546,7 +6631,7 @@ begin if AffAigDet then begin //s:='Evt Det '+intToSTR(adresse)+'='+intToSTR(etat01); - s:='Tick='+IntToSTR(tick)+' Det='+IntToSTR(adresse)+'='+intToSTR(etat01); + s:='Tick='+IntToSTR(tick)+' Evt Det='+IntToSTR(adresse)+'='+intToSTR(etat01); Affiche(s,clyellow); if not(TraceListe) then AfficheDebug(s,clyellow); @@ -6554,8 +6639,9 @@ begin //if etat then Mem[Adresse]:=true; // mémoriser l'état à 1 - ancien_detecteur[Adresse]:=detecteur[Adresse]; - detecteur[Adresse]:=etat; + ancien_detecteur[Adresse]:=detecteur[Adresse].etat; + detecteur[Adresse].etat:=etat; + detecteur[Adresse].train:=train; detecteur_chgt:=Adresse; // stocke les changements d'état des détecteurs dans le tableau chronologique @@ -6573,7 +6659,7 @@ begin // détection front montant - if not(ancien_detecteur[Adresse]) and detecteur[Adresse] then + if not(ancien_detecteur[Adresse]) and detecteur[Adresse].etat then begin // explorer les feux pour déverrouiller les feux dont le trajets viennent d'un buttoir pour changer le feu qd un train se présente // sur le détecteur @@ -6603,7 +6689,7 @@ begin end; // détection fronts descendants - if ancien_detecteur[Adresse] and not(detecteur[Adresse]) and (N_Event_detAdresse then @@ -6631,7 +6717,7 @@ begin end; end; - if (N_event_det>=Max_event_det) then + if (N_event_det>=Max_event_det) then begin Affiche('Débordement d''évènements FD - Raz tampon',clred); N_event_det:=0; @@ -6668,15 +6754,15 @@ begin N_Event_tick:=0; Affiche('Raz Evts détecteurs',clLime); end; - s:='Evt Aig '+intToSTR(adresse)+'='+intToSTR(pos); + s:='Tick='+IntToSTR(tick)+' Evt Aig '+intToSTR(adresse)+'='+intToSTR(pos); if pos=const_droit then s:=s+' droit' else s:=s+' dévié'; - if AffAigDet then + if AffAigDet then begin if objet<>0 then s:=s+' objet='+IntToSTR(objet); Affiche(s,clyellow); - AfficheDebug(s,clyellow); - end; - FormDebug.MemoEvtDet.lines.add(s) ; + AfficheDebug(s,clyellow); + end; + FormDebug.MemoEvtDet.lines.add(s) ; if (n_Event_tick mod 10) =0 then affiche_memoire; inc(N_Event_tick); event_det_tick[N_event_tick].tick:=tick; @@ -6689,7 +6775,7 @@ begin begin formTCO.Maj_TCO(Adresse); end; - + Maj_feux; end; @@ -6712,27 +6798,27 @@ begin begin // affecter l'état des détecteurs i:=adresse*8+8; - if detecteur[i]<>((valeur and $8) = $8) then // si changement de l'état du détecteur bit 7 + if detecteur[i].etat<>((valeur and $8) = $8) then // si changement de l'état du détecteur bit 7 begin - Event_detecteur(i,(valeur and $8) = $8); + Event_detecteur(i,(valeur and $8) = $8,''); // pas de train affecté sur le décodage de la rétrosignalisation end; i:=adresse*8+7; - if detecteur[i]<>((valeur and $4) = $4) then // si changement de l'état du détecteur bit 6 + if detecteur[i].etat<>((valeur and $4) = $4) then // si changement de l'état du détecteur bit 6 begin - Event_detecteur(i,(valeur and $4) = $4); + Event_detecteur(i,(valeur and $4) = $4,''); end; i:=adresse*8+6; - if detecteur[i]<>((valeur and $2) = $2) then // si changement de l'état du détecteur bit 5 + if detecteur[i].etat<>((valeur and $2) = $2) then // si changement de l'état du détecteur bit 5 begin - Event_detecteur(i,(valeur and $2) = $2); + Event_detecteur(i,(valeur and $2) = $2,''); end; i:=adresse*8+5; - if detecteur[i]<>((valeur and $1) = $1) then // si changement de l'état du détecteur bit 4 + if detecteur[i].etat<>((valeur and $1) = $1) then // si changement de l'état du détecteur bit 4 begin - Event_detecteur(i,(valeur and $1) = $1); + Event_detecteur(i,(valeur and $1) = $1,''); end; end; @@ -6770,26 +6856,26 @@ begin begin // affecter l'état des détecteurs i:=adresse*8+4; - if detecteur[i]<>((valeur and $8) = $8) then // si changement de l'état du détecteur bit 7 + if detecteur[i].etat<>((valeur and $8) = $8) then // si changement de l'état du détecteur bit 7 begin - Event_detecteur(i,(valeur and $8) = $8); + Event_detecteur(i,(valeur and $8) = $8,''); end; i:=adresse*8+3; - if detecteur[i]<>((valeur and $4) = $4) then // si changement de l'état du détecteur bit 6 + if detecteur[i].etat<>((valeur and $4) = $4) then // si changement de l'état du détecteur bit 6 begin - Event_detecteur(i,(valeur and $4) = $4); + Event_detecteur(i,(valeur and $4) = $4,''); end; i:=adresse*8+2; - if detecteur[i]<>((valeur and $2) = $2) then // si changement de l'état du détecteur bit 5 + if detecteur[i].etat<>((valeur and $2) = $2) then // si changement de l'état du détecteur bit 5 begin - Event_detecteur(i,(valeur and $2) = $2); + Event_detecteur(i,(valeur and $2) = $2,''); end; i:=adresse*8+1; - if detecteur[i]<>((valeur and $1) = $1) then // si changement de l'état du détecteur bit 4 + if detecteur[i].etat<>((valeur and $1) = $1) then // si changement de l'état du détecteur bit 4 begin - Event_detecteur(i,(valeur and $1) = $1); + Event_detecteur(i,(valeur and $1) = $1,''); end; end; @@ -7040,11 +7126,11 @@ begin With Formprinc.MSCommUSBLenz do begin i:=pos(':',portCom); - j:=pos(',',PortCom); + j:=pos(',',PortCom); j:=posEx(',',PortCom,j+1); j:=posEx(',',PortCom,j+1); j:=posEx(',',PortCom,j+1); - + confStCom:=copy(portCom,i+1,j-i-1); //Affiche(ConfStCom,clred); Settings:=ConfStCom; // COMx:vitesse,n,8,1 Affiche('Demande ouverture COM'+intToSTR(NumPort)+':'+ConfStCom+' protocole '+IntToSTR(protocole),CLYellow); @@ -7405,6 +7491,7 @@ begin DebugOuv:=True; AvecInit:=true; //&&&& + Option_demarrage:=false; Diffusion:=AvecInit; Application.processMessages; @@ -7619,7 +7706,7 @@ begin if tempsCli>0 then dec(tempsCli); if tempsCli=0 then begin - tempsCli:=5; + tempsCli:=4; clignotant:=not(clignotant); // inversion du clignotant //tester chaque feu pour voir s'il y a un code de clignotement for i:=1 to NbreFeux do @@ -7705,8 +7792,8 @@ begin //simulation if (index_simule<>0) then begin - if not(MsgSim) then - begin + if not(MsgSim) then + begin Affiche('Simulation en cours ',Cyan);MsgSim:=true; N_Event_tick:=0; N_event_det:=0; @@ -7726,7 +7813,7 @@ begin if Tablo_simule[i_simule].detecteur<>0 then begin s:='Simulation '+intToSTR(I_simule)+' Tick='+IntToSTR(tick)+' det='+intToSTR(Tablo_simule[i_simule].detecteur)+'='+IntToSTR(Tablo_simule[i_simule].etat); - Event_Detecteur(Tablo_simule[i_simule].detecteur, Tablo_simule[i_simule].etat=1); // créer évt détecteur + Event_Detecteur(Tablo_simule[i_simule].detecteur, Tablo_simule[i_simule].etat=1,''); // créer évt détecteur StaticText.caption:=s; end; @@ -7749,6 +7836,28 @@ begin StaticText.caption:=''; end; end; + + // temporisations de démarrage des trains au feux + if Option_demarrage then + for i:=1 to 1024 do + begin + if detecteur[i].tempo<>0 then + begin + dec(detecteur[i].tempo); + if detecteur[i].tempo=0 then + begin + //Affiche('tempo 0 Detecteur '+intToSTR(i),clyellow); + s:=detecteur[i].train; + Affiche('Tempo 0 timer train '+s,clOrange); + s:=chaine_CDM_vitesse(100,s); // 100% + envoi(s); + end; + end; + + end; + + + end; // bouton version centrale Lenz @@ -7949,8 +8058,10 @@ var j,adr,NBranche : integer; begin for j:=1 to NDetecteurs do begin - s:='Dét '+intToSTR(Adresse_detecteur[j])+'='; - if Detecteur[adresse_detecteur[j]] then s:=s+'1' else s:=s+'0'; + adr:=Adresse_detecteur[j]; + s:='Dét '+intToSTR(adr)+'='; + if Detecteur[adr].etat then s:=s+'1' else s:=s+'0'; + s:=s+' '+Detecteur[Adr].train; //s:=s+' Mem='; //if Mem[adresse_detecteur[j]] then s:=s+'1' else s:=s+'0'; Affiche(s,clYellow); @@ -8049,7 +8160,7 @@ begin end; procedure Interprete_trameCDM(recuCDM : string); -var i,objet,posST,posAC,posDT,posSG,posXY,k,l,erreur, adr,adr2,etat,etataig, +var i,j,objet,posST,posAC,posDT,posSG,posXY,k,l,erreur, adr,adr2,etat,etataig, vitesse,etatAig2,name,prv : integer ; x,y,x2,y2 : longint ; s,ss,train : string; @@ -8154,10 +8265,15 @@ begin begin i:=posEx('AD=',recuCDM,posDT);ss:=copy(recuCDM,i+3,10); val(ss,adr,erreur); + i:=posEx('TRAIN=',recuCDM,posDT); + j:=PosEx(';',recuCDM,i); + train:=copy(recuCDM,i+6,j-i-6); + //Affiche('Train=*'+Train+'*',clOrange); i:=posEx('STATE=',recuCDM,posDT);ss:=copy(recuCDM,i+6,10); - Delete(recuCDM,posDT,i+5-posDT); val(ss,etat,erreur); - Event_detecteur(Adr,etat=1); + Delete(recuCDM,posDT,i+5-posDT); + if (train='_NONE') then train:=detecteur[Adr].train; + Event_detecteur(Adr,etat=1,train); //Affiche(IntToSTR(adr)+' '+IntToSTR(etat),clyellow); if AfficheDet then Affiche('Rétro Détecteur '+intToSTR(adr)+'='+IntToStr(etat),clYellow); end ; diff --git a/UnitPrinc.~dfm b/UnitPrinc.~dfm new file mode 100644 index 0000000..eb39be6 --- /dev/null +++ b/UnitPrinc.~dfm @@ -0,0 +1,1609 @@ +object FormPrinc: TFormPrinc + Left = 12 + Top = 210 + Width = 1212 + Height = 664 + Caption = 'Client TCP-IP CDM Rail ou USB - syst'#232'me LENZ' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + Menu = MainMenu1 + OldCreateOrder = False + Position = poScreenCenter + Scaled = False + ShowHint = True + OnClose = FormClose + OnCreate = FormCreate + DesignSize = ( + 1196 + 606) + PixelsPerInch = 96 + TextHeight = 13 + object LabelTitre: TLabel + Left = 8 + Top = 16 + Width = 173 + Height = 18 + Caption = 'Signaux complexes GL' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Arial' + Font.Style = [fsBold, fsItalic] + ParentFont = False + end + object Image9feux: TImage + Left = 384 + Top = 0 + Width = 57 + Height = 105 + Picture.Data = { + 07544269746D6170B2160000424DB21600000000000036040000280000003200 + 00005B00000001000800000000007C120000C40E0000C40E0000000100000001 + 000000000000000080000080000000808000800000008000800080800000C0C0 + C000C0DCC000F0CAA6000020400000206000002080000020A0000020C0000020 + E00000400000004020000040400000406000004080000040A0000040C0000040 + E00000600000006020000060400000606000006080000060A0000060C0000060 + E00000800000008020000080400000806000008080000080A0000080C0000080 + E00000A0000000A0200000A0400000A0600000A0800000A0A00000A0C00000A0 + E00000C0000000C0200000C0400000C0600000C0800000C0A00000C0C00000C0 + E00000E0000000E0200000E0400000E0600000E0800000E0A00000E0C00000E0 + E00040000000400020004000400040006000400080004000A0004000C0004000 + E00040200000402020004020400040206000402080004020A0004020C0004020 + E00040400000404020004040400040406000404080004040A0004040C0004040 + E00040600000406020004060400040606000406080004060A0004060C0004060 + E00040800000408020004080400040806000408080004080A0004080C0004080 + E00040A0000040A0200040A0400040A0600040A0800040A0A00040A0C00040A0 + E00040C0000040C0200040C0400040C0600040C0800040C0A00040C0C00040C0 + E00040E0000040E0200040E0400040E0600040E0800040E0A00040E0C00040E0 + E00080000000800020008000400080006000800080008000A0008000C0008000 + E00080200000802020008020400080206000802080008020A0008020C0008020 + E00080400000804020008040400080406000804080008040A0008040C0008040 + E00080600000806020008060400080606000806080008060A0008060C0008060 + E00080800000808020008080400080806000808080008080A0008080C0008080 + E00080A0000080A0200080A0400080A0600080A0800080A0A00080A0C00080A0 + E00080C0000080C0200080C0400080C0600080C0800080C0A00080C0C00080C0 + E00080E0000080E0200080E0400080E0600080E0800080E0A00080E0C00080E0 + E000C0000000C0002000C0004000C0006000C0008000C000A000C000C000C000 + E000C0200000C0202000C0204000C0206000C0208000C020A000C020C000C020 + E000C0400000C0402000C0404000C0406000C0408000C040A000C040C000C040 + E000C0600000C0602000C0604000C0606000C0608000C060A000C060C000C060 + E000C0800000C0802000C0804000C0806000C0808000C080A000C080C000C080 + E000C0A00000C0A02000C0A04000C0A06000C0A08000C0A0A000C0A0C000C0A0 + E000C0C00000C0C02000C0C04000C0C06000C0C08000C0C0A000F0FBFF00A4A0 + A000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF + FF00FCFCFCFCFCFCFCFCFC0000000000000000FCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC0000FCFCFCFCFCFCFC000000 + 000000000000000000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFC0000FCFCFCFCFC0000000000FFFFFFFFFFFF0000000000FC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC0000FCFC + FCFC00000000FFFF000000000000FFFF00000000FCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC0000FCFCFC000000FFFF000000000000 + 00000000FFFF000000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFC0000FCFC000000FF0000000000000000000000000000FF000000FCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC0000FC000000FF00 + 000000000000000000000000000000FF000000FCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFC0000FC0000FF0000000000000052525252000000 + 00000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + 0000000000FF000000000000525252525252000000000000FF000000FCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF00000000000052 + 52525252525252000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFC00000000FF00000000000052525252525252520000000000 + 00FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000 + FF0000000000005252525252525252000000000000FF0000FCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF0000000000005252525252 + 525252000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFC00000000FF0000000000000052525252525200000000000000FF0000 + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF000000 + 0000000000525252520000000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFC00000000FF000000000000000000000000000000 + 0000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + 00000000FF0000000000000000000000000000000000000000FF0000FCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF00000000000000 + 00000000000000000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFC00000000FF00000000000000005252525200000000000000 + 00FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000 + FF0000000000000052525252525200000000000000FF0000FCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF0000000000005252525252 + 525252000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFC00000000FF0000000000005252525252525252000000000000FF0000 + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF000000 + 0000005252525252525252000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFC00000000FF000000000000525252525252525200 + 0000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + 00000000FF0000000000000052525252525200000000000000FF0000FCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF00000000000000 + 00525252520000000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFC00000000FF00000000000000000000000000000000000000 + 00FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000 + FF0000000000000000000000000000000000000000FF0000FCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF0000000000000000000000 + 000000000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFC00000000FF0000000000000000525252520000000000000000FF0000 + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF000000 + 0000000052525252525200000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFC00000000FF000000000000525252525252525200 + 0000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + 00000000FF0000000000005252525252525252000000000000FF0000FCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF00000000000052 + 52525252525252000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFC00000000FF00000000000052525252525252520000000000 + 00FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000 + FF0000000000000052525252525200000000000000FF0000FCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF0000000000000000525252 + 520000000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFC00000000FF0000000000000000000000000000000000000000FF0000 + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF000000 + 0000000000000000000000000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFC00000000FF000000000000000000000000000000 + 0000000000F60000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + 00000000FF0000000000000000525252520000000000000000FF000000000000 + 0000000000000000000000FCFCFCFCFCFCFCFCFC00000000FF00000000000000 + 52525252525200000000000000FF000000000000000000000000000000000000 + 00FCFCFCFCFCFCFC00000000FF00000000000052525252525252520000000000 + 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FCFCFCFCFC00000000 + FF00000000000052525252525252520000000000000000000000000000000000 + 000000000000FFFF00000000FCFCFCFC00000000FF0000000000005252525252 + 52525200000000000000000000000000000000000000000000000000FFFF0000 + 00FCFCFC00000000FF0000000000005252525252525252000000000000000000 + 000000000000000000000000000000000000FF000000FCFC00000000FF000000 + 0000000052525252525200000000000000000000000000000000000000000000 + 00000000000000FF000000FC00000000FF000000000000000052525252000000 + 00000000000000000000000000000000000000000000000000000000FF0000FC + 00000000FF000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FF00000000000000FF00000000000000 + 0000000000000000000000000000000000000000000000000052525252000000 + 0000000000FF000000000000FF00000000000000000000000000000000000000 + 00000000000000000000000052525252525200000000000000FF000000000000 + FF00000000000000005252525200000000000000000000000000000000000052 + 52525252525252000000000000FF000000000000FF0000000000000052525252 + 5252000000000000000000000000000000000052525252525252520000000000 + 00FF000000000000FF0000000000005252525252525252000000000000000000 + 000000000000005252525252525252000000000000FF000000000000FF000000 + 0000005252525252525252000000000000000000000000000000005252525252 + 525252000000000000FF000000000000FF000000000000525252525252525200 + 0000000000000000000000000000000052525252525200000000000000FF0000 + 00000000FF000000000000525252525252525200000000000000000000000000 + 0000000000525252520000000000000000FF000000000000FF00000000000000 + 5252525252520000000000000000000000000000000000000000000000000000 + 0000000000FF000000000000FF00000000000000005252525200000000000000 + 00000000000000000000000000000000000000000000000000FF000000000000 + FF00000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000FF000000000000FF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00FF000000000000FF0000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000000000FF000000 + 0000000000525252520000000000000000000000000000000000000000525252 + 520000000000000000FF000000000000FF000000000000005252525252520000 + 0000000000000000000000000000000052525252525200000000000000FF0000 + 00000000FF000000000000525252525252525200000000000000000000000000 + 0000005252525252525252000000000000FF000000000000FF00000000000052 + 5252525252525200000000000000000000000000000000525252525252525200 + 0000000000FF000000000000FF00000000000052525252525252520000000000 + 00000000000000000000005252525252525252000000000000FF000000000000 + FF00000000000052525252525252520000000000000000000000000000000052 + 52525252525252000000000000FF00000000000000FF00000000000052525252 + 5252000000000000000000000000000000000000525252525252000000000000 + 00FF00000000FC0000FF00000000000000525252520000000000000000000000 + 000000000000000000525252520000000000000000FF00000000FC000000FF00 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000FF00000000FCFC000000FF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000FF0000 + 0000FCFCFC000000FFFF00000000000000000000000000000000000000000000 + 0000000000000000000000000000000000FF00000000FCFCFCFC00000000FFFF + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000FF00000000FCFCFCFCFC0000000000FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFF0000000000000000000000000000000000000000FF00000000FCFC + FCFCFCFCFC00000000000000000000000000000000000000FF00000000000000 + 00525252520000000000000000FF00000000FCFCFCFCFCFCFCFCFC0000000000 + 000000000000000000000000FF00000000000000525252525252000000000000 + 00FF00000000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC0000 + FF0000000000005252525252525252000000000000FF00000000FCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC0000FF0000000000005252525252 + 525252000000000000FF00000000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFC0000FF0000000000005252525252525252000000000000FF0000 + 0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC0000FF000000 + 0000005252525252525252000000000000FF00000000FCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFC0000FF000000000000005252525252520000 + 0000000000FF00000000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFC000000FF000000000000005252525200000000000000FF0000000000FCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC0000FF000000000000 + 000000000000000000000000FF0000FC0000FCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFC000000FF00000000000000000000000000000000FF + 000000FC0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + 000000FF0000000000000000000000000000FF000000FCFC0000FCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC000000FFFF000000000000 + 00000000FFFF000000FCFCFC0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFC00000000FFFF000000000000FFFF00000000FCFCFCFC + 0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00 + 00000000FFFFFFFFFFFF0000000000FCFCFCFCFC0000FCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC0000000000000000000000 + 00FCFCFCFCFCFCFC0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFC0000000000000000FCFCFCFCFCFCFCFCFC0000} + Visible = False + end + object Image7feux: TImage + Left = 504 + Top = 8 + Width = 57 + Height = 105 + Picture.Data = { + 07544269746D6170DA130000424DDA1300000000000036040000280000003200 + 00004D0000000100080000000000A40F0000C40E0000C40E0000000100000001 + 000000000000000080000080000000808000800000008000800080800000C0C0 + C000C0DCC000F0CAA6000020400000206000002080000020A0000020C0000020 + E00000400000004020000040400000406000004080000040A0000040C0000040 + E00000600000006020000060400000606000006080000060A0000060C0000060 + E00000800000008020000080400000806000008080000080A0000080C0000080 + E00000A0000000A0200000A0400000A0600000A0800000A0A00000A0C00000A0 + E00000C0000000C0200000C0400000C0600000C0800000C0A00000C0C00000C0 + E00000E0000000E0200000E0400000E0600000E0800000E0A00000E0C00000E0 + E00040000000400020004000400040006000400080004000A0004000C0004000 + E00040200000402020004020400040206000402080004020A0004020C0004020 + E00040400000404020004040400040406000404080004040A0004040C0004040 + E00040600000406020004060400040606000406080004060A0004060C0004060 + E00040800000408020004080400040806000408080004080A0004080C0004080 + E00040A0000040A0200040A0400040A0600040A0800040A0A00040A0C00040A0 + E00040C0000040C0200040C0400040C0600040C0800040C0A00040C0C00040C0 + E00040E0000040E0200040E0400040E0600040E0800040E0A00040E0C00040E0 + E00080000000800020008000400080006000800080008000A0008000C0008000 + E00080200000802020008020400080206000802080008020A0008020C0008020 + E00080400000804020008040400080406000804080008040A0008040C0008040 + E00080600000806020008060400080606000806080008060A0008060C0008060 + E00080800000808020008080400080806000808080008080A0008080C0008080 + E00080A0000080A0200080A0400080A0600080A0800080A0A00080A0C00080A0 + E00080C0000080C0200080C0400080C0600080C0800080C0A00080C0C00080C0 + E00080E0000080E0200080E0400080E0600080E0800080E0A00080E0C00080E0 + E000C0000000C0002000C0004000C0006000C0008000C000A000C000C000C000 + E000C0200000C0202000C0204000C0206000C0208000C020A000C020C000C020 + E000C0400000C0402000C0404000C0406000C0408000C040A000C040C000C040 + E000C0600000C0602000C0604000C0606000C0608000C060A000C060C000C060 + E000C0800000C0802000C0804000C0806000C0808000C080A000C080C000C080 + E000C0A00000C0A02000C0A04000C0A06000C0A08000C0A0A000C0A0C000C0A0 + E000C0C00000C0C02000C0C04000C0C06000C0C08000C0C0A000F0FBFF00A4A0 + A000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF + FF00FCFCFCFCFCFCFCFCFC0000000000000000FCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC0000FCFCFCFCFCFCFC000000 + 000000000000000000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFC0000FCFCFCFCFC0000000000FFFFFFFFFFFF0000000000FC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC0000FCFC + FCFC00000000FFFF000000000000FFFF00000000FCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC0000FCFCFC000000FFFF000000000000 + 00000000FFFF000000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFC0000FCFC000000FF0000000000000000000000000000FF000000FCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC0000FC000000FF00 + 000000000000000000000000000000FF000000FCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFC0000FC0000FF0000000000000052525252000000 + 00000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + 0000000000FF000000000000525252525252000000000000FF000000FCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF00000000000052 + 52525252525252000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFC00000000FF00000000000052525252525252520000000000 + 00FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000 + FF0000000000005252525252525252000000000000FF0000FCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF0000000000005252525252 + 525252000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFC00000000FF0000000000000052525252525200000000000000FF0000 + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF000000 + 0000000000525B52520000000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFC00000000FF000000000000000000000000000000 + 0000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + 00000000FF0000000000000000000000000000000000000000FF0000FCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF00000000000000 + 00000000000000000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFC00000000FF00000000000000005252525200000000000000 + 00FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000 + FF0000000000000052525252525200000000000000FF0000FCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF0000000000005252525252 + 525252000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFC00000000FF0000000000005252525252525252000000000000FF0000 + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF000000 + 0000005252525252525252000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFC00000000FF000000000000525252525252525200 + 0000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + 00000000FF00000000000000525B5252525200000000000000FF0000FCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF00000000000000 + 00525252520000000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFC00000000FF00000000000000000000000000000000000000 + 00FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000 + FF0000000000000000000000000000000000000000FF0000FCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF0000000000000000000000 + 000000000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFC00000000FF0000000000000000525252520000000000000000FF0000 + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF000000 + 0000000052525252525200000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFC00000000FF000000000000525252525252525200 + 0000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + 00000000FF0000000000005252525252525252000000000000FF0000FCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF00000000000052 + 52525252525252000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFC00000000FF00000000000052525252525252520000000000 + 00FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000 + FF0000000000000052525252525200000000000000FF0000FCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF0000000000000000525252 + 520000000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFC00000000FF0000000000000000000000000000000000000000FF0000 + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF000000 + 0000000000000000000000000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFC00000000FF000000000000000000000000000000 + 0000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + 00000000FF0000000000000000525252520000000000000000FF0000FCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF00000000000000 + 525B5252525200000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFC00000000FF00000000000052525252525252520000000000 + 00FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000 + FF0000000000005252525252525252000000000000FF0000FCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF0000000000005252525252 + 525252000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFC00000000FF0000000000005252525252525252000000000000FF0000 + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF000000 + 0000000052525252525200000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFC00000000FF000000000000000052525252000000 + 0000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + 00000000FF0000000000000000000000000000000000000000FF0000FCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF00000000000000 + 00000000000000000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFC00000000FF00000000000000000000000000000000000000 + 00FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000 + FF0000000000000000525252520000000000000000FF0000FCFCFCFCFCFCFCFC + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF0000000000000052525252 + 525200000000000000FF0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC + FCFCFCFC00000000FF0000000000005252525252525252000000000000FF0000 + FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000FF000000 + 0000005252525252525252000000000000FF0000000000000000000000000000 + 000000FCFCFCFCFCFCFCFCFC00000000FF000000000000525252525252525200 + 0000000000FF00000000000000000000000000000000000000FCFCFCFCFCFCFC + 00000000FF0000000000005252525252525252000000000000FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF0000000000FCFCFCFCFC00000000FF00000000000000 + 525252525252000000000000000000000000000000000000000000000000FFFF + 00000000FCFCFCFC00000000FF00000000000000005252525200000000000000 + 0000000000000000000000000000000000000000FFFF000000FCFCFC00000000 + FF00000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FF000000FCFC00000000FF0000000000000000000000 + 00000000000000000000000000000000000000000000000000000000000000FF + 000000FC00000000FF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000FF0000FC00000000FF000000 + 0000000000525252520000000000000000000000000000000000000000525252 + 5200000000000000FF00000000000000FF000000000000005252525252520000 + 0000000000000000000000000000000052525252525200000000000000FF0000 + 00000000FF000000000000525252525252525200000000000000000000000000 + 0000005252525252525252000000000000FF000000000000FF00000000000052 + 5252525252525200000000000000000000000000000000525252525252525200 + 0000000000FF000000000000FF00000000000052525252525252520000000000 + 00000000000000000000005252525252525252000000000000FF000000000000 + FF00000000000052525252525252520000000000000000000000000000000052 + 52525252525252000000000000FF00000000000000FF00000000000052525252 + 5252000000000000000000000000000000000000525252525252000000000000 + FF0000000000FC0000FF00000000000000525252520000000000000000000000 + 0000000000000000005252525200000000000000FF0000FC0000FC000000FF00 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000FF000000FC0000FCFC000000FF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FF000000FCFC + 0000FCFCFC000000FFFF00000000000000000000000000000000000000000000 + 000000000000000000000000FFFF000000FCFCFC0000FCFCFCFC00000000FFFF + 000000000000000000000000000000000000000000000000000000000000FFFF + 00000000FCFCFCFC0000FCFCFCFCFC0000000000FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FCFCFCFCFC0000FCFC + FCFCFCFCFC000000000000000000000000000000000000000000000000000000 + 000000000000000000FCFCFCFCFCFCFC0000FCFCFCFCFCFCFCFCFC0000000000 + 000000000000000000000000000000000000000000000000000000FCFCFCFCFC + FCFCFCFC0000} + Visible = False + end + object Image5feux: TImage + Left = 280 + Top = 0 + Width = 41 + Height = 89 + Picture.Data = { + 07544269746D61706E0B0000424D6E0B00000000000036040000280000001A00 + 000042000000010008000000000038070000C40E0000C40E0000000100000001 + 000000000000000080000080000000808000800000008000800080800000C0C0 + C000C0DCC000F0CAA6000020400000206000002080000020A0000020C0000020 + E00000400000004020000040400000406000004080000040A0000040C0000040 + E00000600000006020000060400000606000006080000060A0000060C0000060 + E00000800000008020000080400000806000008080000080A0000080C0000080 + E00000A0000000A0200000A0400000A0600000A0800000A0A00000A0C00000A0 + E00000C0000000C0200000C0400000C0600000C0800000C0A00000C0C00000C0 + E00000E0000000E0200000E0400000E0600000E0800000E0A00000E0C00000E0 + E00040000000400020004000400040006000400080004000A0004000C0004000 + E00040200000402020004020400040206000402080004020A0004020C0004020 + E00040400000404020004040400040406000404080004040A0004040C0004040 + E00040600000406020004060400040606000406080004060A0004060C0004060 + E00040800000408020004080400040806000408080004080A0004080C0004080 + E00040A0000040A0200040A0400040A0600040A0800040A0A00040A0C00040A0 + E00040C0000040C0200040C0400040C0600040C0800040C0A00040C0C00040C0 + E00040E0000040E0200040E0400040E0600040E0800040E0A00040E0C00040E0 + E00080000000800020008000400080006000800080008000A0008000C0008000 + E00080200000802020008020400080206000802080008020A0008020C0008020 + E00080400000804020008040400080406000804080008040A0008040C0008040 + E00080600000806020008060400080606000806080008060A0008060C0008060 + E00080800000808020008080400080806000808080008080A0008080C0008080 + E00080A0000080A0200080A0400080A0600080A0800080A0A00080A0C00080A0 + E00080C0000080C0200080C0400080C0600080C0800080C0A00080C0C00080C0 + E00080E0000080E0200080E0400080E0600080E0800080E0A00080E0C00080E0 + E000C0000000C0002000C0004000C0006000C0008000C000A000C000C000C000 + E000C0200000C0202000C0204000C0206000C0208000C020A000C020C000C020 + E000C0400000C0402000C0404000C0406000C0408000C040A000C040C000C040 + E000C0600000C0602000C0604000C0606000C0608000C060A000C060C000C060 + E000C0800000C0802000C0804000C0806000C0808000C080A000C080C000C080 + E000C0A00000C0A02000C0A04000C0A06000C0A08000C0A0A000C0A0C000C0A0 + E000C0C00000C0C02000C0C04000C0C06000C0C08000C0C0A000F0FBFF00A4A0 + A000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF + FF00FCFCFCFCFCFCFCFCFC0000000000000000FCFCFCFCFCFCFCFCFC0000FCFC + FCFCFCFCFC000000000000000000000000FCFCFCFCFCFCFC0000FCFCFCFCFC00 + 00000000FFFFFFFFFFFF0000000000FCFCFCFCFC0000FCFCFCFC00000000FFFF + 000000000000FFFF00000000FCFCFCFC0000FCFCFC000000FFFF000000000000 + 00000000FFFF000000FCFCFC0000FCFC000000FF000000000000000000000000 + 0000FF000000FCFC0000FC000000FF00000000000000000000000000000000FF + 000000FC0000FC0000FF000000000000005252525200000000000000FF0000FC + 0000000000FF000000000000525252525252000000000000FF00000000000000 + FF0000000000005252525252525252000000000000FF000000000000FF000000 + 0000005252525252525252000000000000FF000000000000FF00000000000052 + 52525252525252000000000000FF000000000000FF0000000000005252525252 + 525252000000000000FF000000000000FF000000000000005252525252520000 + 0000000000FF000000000000FF00000000000000005252525200000000000000 + 00FF000000000000FF0000000000000000000000000000000000000000FF0000 + 00000000FF0000000000000000000000000000000000000000FF000000000000 + FF0000000000000000000000000000000000000000FF000000000000FF000000 + 0000000000525252520000000000000000FF000000000000FF00000000000000 + 52525252525200000000000000FF000000000000FF0000000000005252525252 + 525252000000000000FF000000000000FF000000000000525252525252525200 + 0000000000FF000000000000FF000000000000525252525B5252520000000000 + 00FF000000000000FF0000000000005252525252525252000000000000FF0000 + 00000000FF00000000000000525252525B5200000000000000FF000000000000 + FF0000000000000000525252520000000000000000FF000000000000FF000000 + 0000000000000000000000000000000000FF000000000000FF00000000000000 + 00000000000000000000000000FF000000000000FF0000000000000000000000 + 000000000000000000FF000000000000FF000000000000000052525252000000 + 0000000000FF000000000000FF00000000000000525252525252000000000000 + 00FF000000000000FF0000000000005252525252525252000000000000FF0000 + 00000000FF0000000000005252525252525252000000000000FF000000000000 + FF0000000000005252525252525252000000000000FF000000000000FF000000 + 00000052525252525B5252000000000000FF000000000000FF00000000000000 + 52525252525200000000000000FF000000000000FF0000000000000000525252 + 520000000000000000FF000000000000FF000000000000000000000000000000 + 0000000000FF000000000000FF00000000000000000000000000000000000000 + 00FF000000000000FF0000000000000000000000000000000000000000FF0000 + 00000000FF0000000000000000525252520000000000000000FF000000000000 + FF0000000000000052525252525200000000000000FF000000000000FF000000 + 0000005252525252525252000000000000FF000000000000FF00000000000052 + 52525252525252000000000000FF000000000000FF0000000000005252525252 + 525252000000000000FF000000000000FF000000000000525252525252525200 + 0000000000FF000000000000FF00000000000000525252525252000000000000 + 00FF000000000000FF0000000000000000525252520000000000000000FF0000 + 00000000FF0000000000000000000000000000000000000000FF000000000000 + FF0000000000000000000000000000000000000000FF000000000000FF000000 + 0000000000000000000000000000000000FF000000000000FF00000000000000 + 00525252520000000000000000FF000000000000FF0000000000000052525252 + 525200000000000000FF000000000000FF0000000000005252525B5252525200 + 0000000000FF000000000000FF00000000000052525252525252520000000000 + 00FF000000000000FF0000000000005B52525252525252000000000000FF0000 + 00000000FF0000000000005252525252525252000000000000FF000000000000 + 00FF000000000000525252525252000000000000F60000000000FC0000FF0000 + 00000000005252525200000000000000FF0000FC0000FC000000FF0000000000 + 0000000000000000000000FF000000FC0000FCFC000000FF0000000000000000 + 000000000000FF000000FCFC0000FCFCFC000000FFFF00000000000000000000 + FFFF000000FCFCFC0000FCFCFCFC00000000FFFF000000000000FFFF00000000 + FCFCFCFC0000FCFCFCFCFC0000000000FFFFFFFFFFFF0000000000FCFCFCFCFC + 0000FCFCFCFCFCFCFC000000000000000000000000FCFCFCFCFCFCFC0000FCFC + FCFCFCFCFCFCFC0000000000000000FCFCFCFCFCFCFCFCFC0000} + Visible = False + end + object Image4feux: TImage + Left = 240 + Top = 8 + Width = 41 + Height = 97 + Picture.Data = { + 07544269746D6170720A0000424D720A00000000000036040000280000001A00 + 00003900000001000800000000003C060000C40E0000C40E0000000100000001 + 000000000000000080000080000000808000800000008000800080800000C0C0 + C000C0DCC000F0CAA6000020400000206000002080000020A0000020C0000020 + E00000400000004020000040400000406000004080000040A0000040C0000040 + E00000600000006020000060400000606000006080000060A0000060C0000060 + E00000800000008020000080400000806000008080000080A0000080C0000080 + E00000A0000000A0200000A0400000A0600000A0800000A0A00000A0C00000A0 + E00000C0000000C0200000C0400000C0600000C0800000C0A00000C0C00000C0 + E00000E0000000E0200000E0400000E0600000E0800000E0A00000E0C00000E0 + E00040000000400020004000400040006000400080004000A0004000C0004000 + E00040200000402020004020400040206000402080004020A0004020C0004020 + E00040400000404020004040400040406000404080004040A0004040C0004040 + E00040600000406020004060400040606000406080004060A0004060C0004060 + E00040800000408020004080400040806000408080004080A0004080C0004080 + E00040A0000040A0200040A0400040A0600040A0800040A0A00040A0C00040A0 + E00040C0000040C0200040C0400040C0600040C0800040C0A00040C0C00040C0 + E00040E0000040E0200040E0400040E0600040E0800040E0A00040E0C00040E0 + E00080000000800020008000400080006000800080008000A0008000C0008000 + E00080200000802020008020400080206000802080008020A0008020C0008020 + E00080400000804020008040400080406000804080008040A0008040C0008040 + E00080600000806020008060400080606000806080008060A0008060C0008060 + E00080800000808020008080400080806000808080008080A0008080C0008080 + E00080A0000080A0200080A0400080A0600080A0800080A0A00080A0C00080A0 + E00080C0000080C0200080C0400080C0600080C0800080C0A00080C0C00080C0 + E00080E0000080E0200080E0400080E0600080E0800080E0A00080E0C00080E0 + E000C0000000C0002000C0004000C0006000C0008000C000A000C000C000C000 + E000C0200000C0202000C0204000C0206000C0208000C020A000C020C000C020 + E000C0400000C0402000C0404000C0406000C0408000C040A000C040C000C040 + E000C0600000C0602000C0604000C0606000C0608000C060A000C060C000C060 + E000C0800000C0802000C0804000C0806000C0808000C080A000C080C000C080 + E000C0A00000C0A02000C0A04000C0A06000C0A08000C0A0A000C0A0C000C0A0 + E000C0C00000C0C02000C0C04000C0C06000C0C08000C0C0A000F0FBFF00A4A0 + A000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF + FF00FCFCFCFCFCFCFCFCFC0000000000000000FCFCFCFCFCFCFCFCFC0000FCFC + FCFCFCFCFC000000000000000000000000FCFCFCFCFCFCFC0000FCFCFCFCFC00 + 00000000FFFFFFFFFFFF0000000000FCFCFCFCFC0000FCFCFCFC00000000FFFF + 000000000000FFFF00000000FCFCFCFC0000FCFCFC000000FFFF000000000000 + 00000000FFFF000000FCFCFC0000FCFC000000FF000000000000000000000000 + 0000FF000000FCFC0000FC000000FF00000000000000000000000000000000FF + 000000FC0000FC0000FF000000000000005252525200000000000000FF0000FC + 0000000000FF000000000000525252525252000000000000FF00000000000000 + FF0000000000005252525252525252000000000000FF000000000000FF000000 + 0000005252525252525252000000000000FF000000000000FF00000000000052 + 52525252525252000000000000FF000000000000FF0000000000005252525252 + 525252000000000000FF000000000000FF000000000000005252525252520000 + 0000000000FF000000000000FF00000000000000005252525200000000000000 + 00FF000000000000FF0000000000000000000000000000000000000000FF0000 + 00000000FF0000000000000000000000000000000000000000FF000000000000 + FF0000000000000000000000000000000000000000FF000000000000FF000000 + 0000000000525252520000000000000000FF000000000000FF00000000000000 + 52525252525200000000000000FF000000000000FF0000000000005252525252 + 525252000000000000FF000000000000FF000000000000525252525252525200 + 0000000000FF000000000000FF00000000000052525252525252520000000000 + 00FF000000000000FF0000000000005252525252525252000000000000FF0000 + 00000000FF0000000000000052525252525200000000000000FF000000000000 + FF0000000000000000525252520000000000000000FF000000000000FF000000 + 0000000000000000000000000000000000FF000000000000FF00000000000000 + 00000000000000000000000000FF000000000000FF0000000000000000000000 + 000000000000000000FF000000000000FF000000000000000052525252000000 + 0000000000FF000000000000FF00000000000000525252525252000000000000 + 00FF000000000000FF0000000000005252525252525252000000000000FF0000 + 00000000FF0000000000005252525252525252000000000000FF000000000000 + FF0000000000005252525252525252000000000000FF000000000000FF000000 + 0000005252525252525252000000000000FF000000000000FF00000000000000 + 52525252525200000000000000FF000000000000FF0000000000000000525252 + 520000000000000000FF000000000000FF000000000000000000000000000000 + 0000000000FF000000000000FF00000000000000000000000000000000000000 + 00FF000000000000FF0000000000000000000000000000000000000000FF0000 + 00000000FF0000000000000000000000000000000000000000FF000000000000 + FF0000000000000000000000000000000000000000FF000000000000FF000000 + 0000000000525252520000000000000000FF000000000000FF00000000000000 + 52525252525200000000000000FF000000000000FF0000000000005252525252 + 525252000000000000FF000000000000FF000000000000525252525252525200 + 0000000000FF000000000000FF00000000000052525252525252520000000000 + 00FF000000000000FF0000000000005252525252525252000000000000FF0000 + 0000000000FF000000000000525252525252000000000000FF0000000000FC00 + 00FF000000000000005252525200000000000000FF0000FC0000FC000000FF00 + 000000000000000000000000000000FF000000FC0000FCFC000000FF00000000 + 00000000000000000000FF000000FCFC0000FCFCFC000000FFFF000000000000 + 00000000FFFF000000FCFCFC0000FCFCFCFC00000000FFFF000000000000FFFF + 00000000FCFCFCFC0000FCFCFCFCFC0000000000FFFFFFFFFFFF0000000000FC + FCFCFCFC0000FCFCFCFCFCFCFC000000000000000000000000FCFCFCFCFCFCFC + 0000FCFCFCFCFCFCFCFCFC0000000000000000FCFCFCFCFCFCFCFCFC0000} + Visible = False + end + object Image3feux: TImage + Left = 600 + Top = 8 + Width = 33 + Height = 57 + Picture.Data = { + 07544269746D617006090000424D060900000000000036040000280000001A00 + 00002C0000000100080000000000D0040000C40E0000C40E0000000100000001 + 000000000000000080000080000000808000800000008000800080800000C0C0 + C000C0DCC000F0CAA6000020400000206000002080000020A0000020C0000020 + E00000400000004020000040400000406000004080000040A0000040C0000040 + E00000600000006020000060400000606000006080000060A0000060C0000060 + E00000800000008020000080400000806000008080000080A0000080C0000080 + E00000A0000000A0200000A0400000A0600000A0800000A0A00000A0C00000A0 + E00000C0000000C0200000C0400000C0600000C0800000C0A00000C0C00000C0 + E00000E0000000E0200000E0400000E0600000E0800000E0A00000E0C00000E0 + E00040000000400020004000400040006000400080004000A0004000C0004000 + E00040200000402020004020400040206000402080004020A0004020C0004020 + E00040400000404020004040400040406000404080004040A0004040C0004040 + E00040600000406020004060400040606000406080004060A0004060C0004060 + E00040800000408020004080400040806000408080004080A0004080C0004080 + E00040A0000040A0200040A0400040A0600040A0800040A0A00040A0C00040A0 + E00040C0000040C0200040C0400040C0600040C0800040C0A00040C0C00040C0 + E00040E0000040E0200040E0400040E0600040E0800040E0A00040E0C00040E0 + E00080000000800020008000400080006000800080008000A0008000C0008000 + E00080200000802020008020400080206000802080008020A0008020C0008020 + E00080400000804020008040400080406000804080008040A0008040C0008040 + E00080600000806020008060400080606000806080008060A0008060C0008060 + E00080800000808020008080400080806000808080008080A0008080C0008080 + E00080A0000080A0200080A0400080A0600080A0800080A0A00080A0C00080A0 + E00080C0000080C0200080C0400080C0600080C0800080C0A00080C0C00080C0 + E00080E0000080E0200080E0400080E0600080E0800080E0A00080E0C00080E0 + E000C0000000C0002000C0004000C0006000C0008000C000A000C000C000C000 + E000C0200000C0202000C0204000C0206000C0208000C020A000C020C000C020 + E000C0400000C0402000C0404000C0406000C0408000C040A000C040C000C040 + E000C0600000C0602000C0604000C0606000C0608000C060A000C060C000C060 + E000C0800000C0802000C0804000C0806000C0808000C080A000C080C000C080 + E000C0A00000C0A02000C0A04000C0A06000C0A08000C0A0A000C0A0C000C0A0 + E000C0C00000C0C02000C0C04000C0C06000C0C08000C0C0A000F0FBFF00A4A0 + A000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF + FF00FCFCFCFCFCFCFCFCFC0000000000000000FCFCFCFCFCFCFCFCFC0000FCFC + FCFCFCFCFC000000000000000000000000FCFCFCFCFCFCFC0000FCFCFCFCFC00 + 00000000FFFFFFFFFFFF0000000000FCFCFCFCFC0000FCFCFCFC00000000FFFF + 000000000000FFFF00000000FCFCFCFC0000FCFCFC000000FFFF000000000000 + 00000000FFFF000000FCFCFC0000FCFC000000FF000000000000000000000000 + 0000FF000000FCFC0000FC000000FF00000000000000000000000000000000FF + 000000FC0000FC0000FF000000000000005252525200000000000000FF0000FC + 0000000000FF000000000000525252525252000000000000FF00000000000000 + FF0000000000005252525252525252000000000000FF000000000000FF000000 + 0000005252525252525252000000000000FF000000000000FF00000000000052 + 52525252525252000000000000FF000000000000FF0000000000005252525252 + 525252000000000000FF000000000000FF000000000000005252525252520000 + 0000000000FF000000000000FF00000000000000005252525200000000000000 + 00FF000000000000FF0000000000000000000000000000000000000000FF0000 + 00000000FF0000000000000000000000000000000000000000FF000000000000 + FF0000000000000000000000000000000000000000FF000000000000FF000000 + 0000000000525252520000000000000000FF000000000000FF00000000000000 + 52525252525200000000000000FF000000000000FF0000000000005252525252 + 525252000000000000FF000000000000FF000000000000525252525252525200 + 0000000000FF000000000000FF00000000000052525252525252520000000000 + 00FF000000000000FF0000000000005252525252525252000000000000FF0000 + 00000000FF0000000000000052525252525200000000000000FF000000000000 + FF0000000000000000525252520000000000000000FF000000000000FF000000 + 0000000000000000000000000000000000FF000000000000FF00000000000000 + 00000000000000000000000000FF000000000000FF0000000000000000000000 + 000000000000000000FF000000000000FF000000000000000052525252000000 + 0000000000FF000000000000FF00000000000000525252525252000000000000 + 00FF000000000000FF0000000000005252525252525252000000000000FF0000 + 00000000FF0000000000005252525252525252000000000000FF000000000000 + FF0000000000005252525252525252000000000000FF000000000000FF000000 + 0000005252525252525252000000000000FF00000000000000FF000000000000 + 525252525252000000000000FF0000000000FC0000FF00000000000000525252 + 5200000000000000FF0000FC0000FC000000F600000000000000000000000000 + 000000FF000000FC0000FCFC000000FF0000000000000000000000000000FF00 + 0000FCFC0000FCFCFC000000FFFF00000000000000000000FFFF000000FCFCFC + 0000FCFCFCFC00000000FFFF000000000000FFFF00000000FCFCFCFC0000FCFC + FCFCFC0000000000FFFFFFFFFFFF0000000000FCFCFCFCFC0000FCFCFCFCFCFC + FC000000000000000000000000FCFCFCFCFCFCFC0000FCFCFCFCFCFCFCFCFC00 + 00000000000000FCFCFCFCFCFCFCFCFC0000} + Visible = False + end + object Image2feux: TImage + Left = 984 + Top = 128 + Width = 33 + Height = 57 + Picture.Data = { + 07544269746D617026080000424D260800000000000036040000280000001A00 + 0000240000000100080000000000F0030000C40E0000C40E0000000100000001 + 000000000000000080000080000000808000800000008000800080800000C0C0 + C000C0DCC000F0CAA6000020400000206000002080000020A0000020C0000020 + E00000400000004020000040400000406000004080000040A0000040C0000040 + E00000600000006020000060400000606000006080000060A0000060C0000060 + E00000800000008020000080400000806000008080000080A0000080C0000080 + E00000A0000000A0200000A0400000A0600000A0800000A0A00000A0C00000A0 + E00000C0000000C0200000C0400000C0600000C0800000C0A00000C0C00000C0 + E00000E0000000E0200000E0400000E0600000E0800000E0A00000E0C00000E0 + E00040000000400020004000400040006000400080004000A0004000C0004000 + E00040200000402020004020400040206000402080004020A0004020C0004020 + E00040400000404020004040400040406000404080004040A0004040C0004040 + E00040600000406020004060400040606000406080004060A0004060C0004060 + E00040800000408020004080400040806000408080004080A0004080C0004080 + E00040A0000040A0200040A0400040A0600040A0800040A0A00040A0C00040A0 + E00040C0000040C0200040C0400040C0600040C0800040C0A00040C0C00040C0 + E00040E0000040E0200040E0400040E0600040E0800040E0A00040E0C00040E0 + E00080000000800020008000400080006000800080008000A0008000C0008000 + E00080200000802020008020400080206000802080008020A0008020C0008020 + E00080400000804020008040400080406000804080008040A0008040C0008040 + E00080600000806020008060400080606000806080008060A0008060C0008060 + E00080800000808020008080400080806000808080008080A0008080C0008080 + E00080A0000080A0200080A0400080A0600080A0800080A0A00080A0C00080A0 + E00080C0000080C0200080C0400080C0600080C0800080C0A00080C0C00080C0 + E00080E0000080E0200080E0400080E0600080E0800080E0A00080E0C00080E0 + E000C0000000C0002000C0004000C0006000C0008000C000A000C000C000C000 + E000C0200000C0202000C0204000C0206000C0208000C020A000C020C000C020 + E000C0400000C0402000C0404000C0406000C0408000C040A000C040C000C040 + E000C0600000C0602000C0604000C0606000C0608000C060A000C060C000C060 + E000C0800000C0802000C0804000C0806000C0808000C080A000C080C000C080 + E000C0A00000C0A02000C0A04000C0A06000C0A08000C0A0A000C0A0C000C0A0 + E000C0C00000C0C02000C0C04000C0C06000C0C08000C0C0A000F0FBFF00A4A0 + A000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF + FF00FCFCFCFCFCFCFCFCFC0000000000000000FCFCFCFCFCFCFCFCFC0000FCFC + FCFCFCFCFC000000000000000000000000FCFCFCFCFCFCFC0000FCFCFCFCFC00 + 00000000FFFFFFFFFFFF0000000000FCFCFCFCFC0000FCFCFCFC00000000FFFF + 000000000000FFFF00000000FCFCFCFC0000FCFCFC000000FFFF000000000000 + 00000000FFFF000000FCFCFC0000FCFC000000FF000000000000000000000000 + 0000FF000000FCFC0000FC000000FF00000000000000000000000000000000FF + 000000FC0000FC0000FF000000000000005252525200000000000000FF0000FC + 0000000000FF000000000000525252525252000000000000FF00000000000000 + FF0000000000005252525252525252000000000000FF000000000000FF000000 + 0000005252525252525252000000000000FF000000000000FF00000000000052 + 52525252525252000000000000FF000000000000FF0000000000005252525252 + 525252000000000000FF000000000000FF000000000000005252525252520000 + 0000000000FF000000000000FF00000000000000005252525200000000000000 + 00FF000000000000FF0000000000000000000000000000000000000000FF0000 + 00000000FF0000000000000000000000000000000000000000FF000000000000 + FF0000000000000000000000000000000000000000FF000000000000FF000000 + 0000000000000000000000000000000000FF000000000000FF00000000000000 + 00000000000000000000000000FF000000000000FF0000000000000000000000 + 000000000000000000FF000000000000FF000000000000000052525252000000 + 0000000000FF000000000000FF00000000000000525252525252000000000000 + 00FF000000000000FF0000000000005252525252525252000000000000FF0000 + 00000000FF0000000000005252525252525252000000000000FF000000000000 + FF0000000000005252525252525252000000000000FF000000000000FF000000 + 0000005252525252525252000000000000FF00000000000000FF000000000000 + 525252525252000000000000FF0000000000FC0000FF00000000000000525252 + 5200000000000000FF0000FC0000FC000000FF00000000000000000000000000 + 000000FF000000FC0000FCFC000000FF0000000000000000000000000000FF00 + 0000FCFC0000FCFCFC000000FFFF00000000000000000000FFFF000000FCFCFC + 0000FCFCFCFC00000000FFFF000000000000FFFF00000000FCFCFCFC0000FCFC + FCFCFC0000000000FFFFFFFFF6FF0000000000FCFCFCFCFC0000FCFCFCFCFCFC + FC000000000000000000000000FCFCFCFCFCFCFC0000FCFCFCFCFCFCFCFCFC00 + 00000000000000FCFCFCFCFCFCFCFCFC0000} + Visible = False + end + object Image2Dir: TImage + Left = 936 + Top = 144 + Width = 41 + Height = 25 + Picture.Data = { + 07544269746D617046080000424D460800000000000036040000280000002500 + 00001A000000010008000000000010040000C40E0000C40E0000000100000001 + 0000000000000000800000800000008080008000000080008000808000008080 + 8000C0C0C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000C0C0C0C0C0C0C0C0000000000000000000000000000000000000000000C + 0C0C0C0C0C0C0C0000000C0C0C0C0C0C00000000000000000000000000000000 + 0000000000000000000C0C0C0C0C0C0000000C0C0C0C0C000000000F0F0F0F0F + 0F0F0F0F0F0F0F0F0F0F0F0F0F0F000000000C0C0C0C0C0000000C0C0C0C0000 + 000F0F000000000000000000000000000000000000000F0F0000000C0C0C0C00 + 00000C0C0C0000000F0000000000000000000000000000000000000000000000 + 0F0000000C0C0C0000000C0C0000000F00000000000000000000000000000000 + 0000000000000000000F0000000C0C0000000C0C00000F000000000000000000 + 0000000000000000000000000000000000000F00000C0C0000000C0000000F00 + 00000000000000000000000000000000000000000000000000000F0000000C00 + 00000C00000F0000000000000000000000000000000000000000000000000000 + 0000000F00000C0000000000000F000000000007070707000000000000000000 + 00000707070700000000000F00000000000000000F0000000000070707070707 + 00000000000000000007070707070700000000000F000000000000000F000000 + 000707070707070707000000000000000707070707070707000000000F000000 + 000000000F000000000707070707070707000000000000000707070707070707 + 000000000F000000000000000F00000000070707070707070700000000000000 + 0707070707070707000000000F000000000000000F0000000007070707070707 + 07000000000000000707070707070707000000000F000000000000000F000000 + 000007070707070700000000000000000007070707070700000000000F000000 + 00000000000F0000000000070707070000000000000000000000070707070000 + 0000000F0000000000000C00000F000000000000000000000000000000000000 + 00000000000000000000000F00000C0000000C0000000F000000000000000000 + 0000000000000000000000000000000000000F0000000C0000000C0C00000F00 + 00000000000000000000000000000000000000000000000000000F00000C0C00 + 00000C0C0000000F000000000000000000000000000000000000000000000000 + 000F0000000C0C0000000C0C0C0000000F000000000000000000000000000000 + 00000000000000000F0000000C0C0C0000000C0C0C0C0000000F0F0000000000 + 00000000000000000000000000000F0F0000000C0C0C0C0000000C0C0C0C0C00 + 0000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F000000000C0C0C0C0C00 + 00000C0C0C0C0C0C000000000000000000000000000000000000000000000000 + 000C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0000000000000000000000000000 + 000000000000000C0C0C0C0C0C0C0C000000} + Visible = False + end + object Image3Dir: TImage + Left = 768 + Top = 136 + Width = 49 + Height = 25 + Picture.Data = { + 07544269746D6170AE080000424DAE0800000000000036040000280000002C00 + 00001A000000010008000000000078040000C40E0000C40E0000000100000001 + 0000000000000000800000800000008080008000000080008000808000008080 + 8000C0C0C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000C0C0C0C0C0C0C0C00000000000000000000000000000000000000000000 + 0000000000000C0C0C0C0C0C0C0C0C0C0C0C0C0C000000000000000000000000 + 00000000000000000000000000000000000000000C0C0C0C0C0C0C0C0C0C0C00 + 0000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F000000 + 000C0C0C0C0C0C0C0C0C0000000F0F0000000000000000000000000000000000 + 0000000000000000000F0F0000000C0C0C0C0C0C0C0000000F00000000000000 + 00000000000000000000000000000000000000000000000F0000000C0C0C0C0C + 0000000F00000000000000000000000000000000000000000000000000000000 + 000000000F0000000C0C0C0C00000F0000000000000000000000000000000000 + 00000000000000000000000000000000000F00000C0C0C0000000F0000000000 + 00000000000000000000000000000000000000000000000000000000000F0000 + 000C0C00000F0000000000000000000000000000000000000000000000000000 + 000000000000000000000F00000C0000000F0000000000070707070000000000 + 000007070707000000000000000707070700000000000F00000000000F000000 + 0000070707070707000000000007070707070700000000000707070707070000 + 0000000F000000000F0000000007070707070707070000000707070707070707 + 0000000707070707070707000000000F000000000F0000000007070707070707 + 0700000007070707070707070000000707070707070707000000000F00000000 + 0F00000000070707070707070700000007070707070707070000000707070707 + 070707000000000F000000000F00000000070707070707070700000007070707 + 070707070000000707070707070707000000000F000000000F00000000000707 + 070707070000000000070707070707000000000007070707070700000000000F + 00000000000F0000000000070707070000000000000007070707000000000000 + 000707070700000000000F0000000C00000F0000000000000000000000000000 + 000000000000000000000000000000000000000000000F00000C0C0000000F00 + 0000000000000000000000000000000000000000000000000000000000000000 + 000F0000000C0C0C00000F000000000000000000000000000000000000000000 + 000000000000000000000000000F00000C0C0C0C0000000F0000000000000000 + 0000000000000000000000000000000000000000000000000F0000000C0C0C0C + 0C0000000F000000000000000000000000000000000000000000000000000000 + 0000000F0000000C0C0C0C0C0C0C0000000F0F00000000000000000000000000 + 000000000000000000000000000F0F0000000C0C0C0C0C0C0C0C0C000000000F + 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F000000000C0C0C + 0C0C0C0C0C0C0C0C000000000000000000000000000000000000000000000000 + 00000000000000000C0C0C0C0C0C0C0C0C0C0C0C0C0C00000000000000000000 + 0000000000000000000000000000000000000C0C0C0C0C0C0C0C} + Visible = False + end + object Image4Dir: TImage + Left = 816 + Top = 128 + Width = 57 + Height = 25 + Picture.Data = { + 07544269746D6170E6090000424DE60900000000000036040000280000003700 + 00001A0000000100080000000000B0050000C40E0000C40E0000000100000001 + 0000000000000000800000800000008080008000000080008000808000008080 + 8000C0C0C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000C0C0C0C0C0C0C0C00000000000000000000000000000000000000000000 + 00000000000000000000000000000000000C0C0C0C0C0C0C0C000C0C0C0C0C0C + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000C0C0C0C0C0C000C0C0C0C0C000000000F0F0F0F0F + 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F + 000000000C0C0C0C0C000C0C0C0C0000000F0F00000000000000000000000000 + 0000000000000000000000000000000000000000000000000F0F0000000C0C0C + 0C000C0C0C0000000F0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000F0000000C0C0C000C0C0000000F + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000F0000000C0C000C0C00000F000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000F00000C0C000C0000000F0000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000F000000 + 0C000C00000F0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000F00000C000000000F0000 + 0000000707070700000000000000070707070000000000000007070707000000 + 000000000707070700000000000F0000000000000F0000000000070707070707 + 0000000000070707070707000000000007070707070700000000000707070707 + 0700000000000F00000000000F00000000070707070707070700000007070707 + 0707070700000007070707070707070000000707070707070707000000000F00 + 000000000F000000000707070707070707000000070707070707070700000007 + 070707070707070000000707070707070707000000000F00000000000F000000 + 0007070707070707070000000707070707070707000000070707070707070700 + 00000707070707070707000000000F00000000000F0000000007070707070707 + 0700000007070707070707070000000707070707070707000000070707070707 + 0707000000000F00000000000F00000000000707070707070000000000070707 + 0707070000000000070707070707000000000007070707070700000000000F00 + 00000000000F0000000000070707070000000000000007070707000000000000 + 0007070707000000000000000707070700000000000F000000000C00000F0000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000F00000C000C0000000F000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000F0000000C000C0C00000F0000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000F00000C + 0C000C0C0000000F000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000F0000000C0C000C0C0C000000 + 0F00000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000F0000000C0C0C000C0C0C0C0000000F0F0000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0F0F0000000C0C0C0C000C0C0C0C0C000000000F0F0F0F0F0F0F0F0F0F0F0F0F + 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F000000000C0C0C0C + 0C000C0C0C0C0C0C000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000C0C0C0C0C0C000C0C0C0C0C0C + 0C0C000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000C0C0C0C0C0C0C0C00} + Visible = False + end + object Image5Dir: TImage + Left = 664 + Top = 120 + Width = 65 + Height = 25 + Picture.Data = { + 07544269746D61701E0B0000424D1E0B00000000000036040000280000004200 + 00001A0000000100080000000000E8060000C40E0000C40E0000000100000001 + 0000000000000000800000800000008080008000000080008000808000008080 + 8000C0C0C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000C0C0C0C0C0C0C0C00000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000C0C0C0C + 0C0C0C0C00000C0C0C0C0C0C0000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000C0C0C0C0C0C00000C0C0C0C0C000000000F0F0F0F0F0F0F0F0F0F0F0F0F + 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F + 0F0F0F000000000C0C0C0C0C00000C0C0C0C0000000F0F000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000F0F0000000C0C0C0C00000C0C0C0000000F00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000F0000000C0C0C00000C0C0000000F00000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000F0000000C0C00000C0C00000F00 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000F00000C0C00000C00 + 00000F0000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000F0000000C + 00000C00000F0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0F00000C00000000000F00000000000707070700000000000000070707070000 + 0000000000070707070000000000000007070707000000000000000707070700 + 000000000F000000000000000F00000000000707070707070000000000070707 + 0707070000000000070707070707000000000007070707070700000000000707 + 0707070700000000000F0000000000000F000000000707070707070707000000 + 0707070707070707000000070707070707070700000007070707070707070000 + 000707070707070707000000000F0000000000000F0000000007070707070707 + 0700000007070707070707070000000707070707070707000000070707070707 + 07070000000707070707070707000000000F0000000000000F00000000070707 + 0707070707000000070707070707070700000007070707070707070000000707 + 0707070707070000000707070707070707000000000F0000000000000F000000 + 0007070707070707070000000707070707070707000000070707070707070700 + 000007070707070707070000000707070707070707000000000F000000000000 + 0F00000000000707070707070000000000070707070707000000000007070707 + 07070000000000070707070707000000000007070707070700000000000F0000 + 00000000000F0000000000070707070000000000000007070707000000000000 + 0007070707000000000000000707070700000000000000070707070000000000 + 0F00000000000C00000F00000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000F00000C00000C0000000F0000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000F0000000C00000C0C00000F00000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000F00000C0C00000C0C0000000F0000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000F0000000C0C00000C0C0C0000000F000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000F0000000C0C0C00000C0C0C0C0000 + 000F0F0000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000F0F0000000C0C0C0C00000C0C + 0C0C0C000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F + 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F000000000C0C0C0C0C + 00000C0C0C0C0C0C000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000C0C + 0C0C0C0C00000C0C0C0C0C0C0C0C000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0C0C0C0C0C0C0C0C0000} + Visible = False + end + object Image6Dir: TImage + Left = 808 + Top = 152 + Width = 81 + Height = 25 + Picture.Data = { + 07544269746D6170560C0000424D560C00000000000036040000280000004D00 + 00001A000000010008000000000020080000C40E0000C40E0000000100000001 + 0000000000000000800000800000008080008000000080008000808000008080 + 8000C0C0C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000C0C0C0C0C0C0C0C00000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000C0C0C0C0C0C00 + 00000C0C0C0C0C000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F + 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F + 0F0F0F0F0F0F000000000C0C0C0C0C0000000C0C0C0C0000000F0F0000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000F0F0000000C0C0C0C00 + 00000C0C0C0000000F0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000F0000000C0C0C0000000C0C0000000F0000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000F0000000C0C00 + 00000C0C00000F00000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000F00000C0C0000000C0000000F000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000F0000000C00 + 00000C00000F0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000F00000C0000000000000F00000000000202050200 + 0000000000000202050200000000000000020205020000000000000002020502 + 0000000000000002020502000000000000000202050200000000000F00000000 + 000000000F000000000002050202050200000000000205020205020000000000 + 0205020205020000000000020502020502000000000002050202050200000000 + 0002050202050200000000000F000000000000000F0000000000070002050200 + 0200000000070002050200020000000007000205020002000000000700020502 + 000200000000070002050200020000000007000205020002000000000F000000 + 000000000F000000000202070002070502000000020207000207050200000002 + 0207000207050200000002020700020705020000000202070002070502000000 + 0202070002070502000000000F000000000000000F0000000005020007020002 + 0200000005020007020002020000000502000702000202000000050200070200 + 020200000005020007020002020000000502000702000202000000000F000000 + 000000000F000000000205020007000700000000020502000700070000000002 + 0502000700070000000002050200070007000000000205020007000700000000 + 0205020007000700000000000F000000000000000F0000000000020502070002 + 0000000000020502070002000000000002050207000200000000000205020700 + 020000000000020502070002000000000002050207000200000000000F000000 + 00000000000F0000000000020002070000000000000002000207000000000000 + 0002000207000000000000000200020700000000000000020002070000000000 + 00000200020700000000000F0000000000000C00000F00000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000F00000C00 + 00000C0000000F00000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000F0000000C0000000C0C00000F000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000F00000C0C00 + 00000C0C0000000F000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000F0000000C0C0000000C0C0C0000000F00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000F0000000C0C0C00 + 00000C0C0C0C0000000F0F000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000F0F0000000C0C0C0C0000000C0C0C0C0C000000000F0F0F0F0F + 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F + 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F000000000C0C0C0C0C00 + 00000C0C0C0C0C0C000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000C0C0C0C0C0C0000000C0C0C0C0C0C0C0C000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000C0C0C0C0C0C0C0C00 + 0000} + Visible = False + end + object LabelEtat: TLabel + Left = 439 + Top = 16 + Width = 152 + Height = 18 + Anchors = [akTop, akRight] + Caption = 'Initialisations en cours' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + end + object ListBox1: TListBox + Left = 8 + Top = 48 + Width = 616 + Height = 505 + Style = lbOwnerDrawFixed + Anchors = [akLeft, akTop, akRight, akBottom] + Color = clBlack + Font.Charset = ANSI_CHARSET + Font.Color = clBlue + Font.Height = 16 + Font.Name = 'Arial' + Font.Style = [] + ItemHeight = 16 + ParentFont = False + TabOrder = 0 + OnDrawItem = ListBox1DrawItem + end + object ScrollBox1: TScrollBox + Left = 631 + Top = 168 + Width = 537 + Height = 377 + HorzScrollBar.Smooth = True + HorzScrollBar.Tracking = True + VertScrollBar.Smooth = True + VertScrollBar.Tracking = True + Anchors = [akTop, akRight, akBottom] + Color = clWhite + ParentColor = False + TabOrder = 1 + end + object GroupBox1: TGroupBox + Left = 631 + Top = 0 + Width = 249 + Height = 129 + Anchors = [akTop, akRight] + Caption = 'Commande d'#39'accessoires' + TabOrder = 2 + object Label2: TLabel + Left = 7 + Top = 16 + Width = 58 + Height = 13 + Caption = 'adresse acc' + end + object Label3: TLabel + Left = 75 + Top = 16 + Width = 30 + Height = 13 + Caption = '1 ou 2' + end + object Label4: TLabel + Left = 133 + Top = 10 + Width = 85 + Height = 13 + Caption = '1=d'#233'vi'#233' 2=droit' + end + object EditAdresse: TEdit + Left = 8 + Top = 32 + Width = 57 + Height = 21 + Hint = 'Adresse accessoire ou de CV' + TabOrder = 0 + Text = '1' + end + object Editval: TEdit + Left = 72 + Top = 32 + Width = 41 + Height = 21 + Hint = 'Entrez 1 ou 2 pour un accessoire DCC et 1 '#224' 255 pour un CV' + TabOrder = 1 + Text = '1' + OnEnter = EditvalEnter + end + object ButtonEcrCV: TButton + Left = 8 + Top = 64 + Width = 225 + Height = 25 + Hint = 'Ecriture CV en mode direct sur voie de programmation' + Caption = 'Ecriture CV - 1 '#224' 255 par bus XpressNet' + TabOrder = 2 + WordWrap = True + OnClick = ButtonEcrCVClick + end + object ButtonLitCV: TButton + Left = 8 + Top = 96 + Width = 225 + Height = 25 + Hint = 'Lecture CV en mode direct sur voie de programmation' + Caption = 'Lecture CV - 1 '#224' 255 par le bus XpressNet' + Enabled = False + TabOrder = 3 + OnClick = ButtonLitCVClick + end + object ButtonCommande: TButton + Left = 124 + Top = 24 + Width = 109 + Height = 33 + Hint = 'Ecriture des accessoires DCC' + Caption = 'Envoi commande' + TabOrder = 4 + WordWrap = True + OnClick = ButtonCommandeClick + end + end + object StatusBar1: TStatusBar + Left = 0 + Top = 576 + Width = 1196 + Height = 30 + Panels = <> + SimplePanel = True + end + object MSCommUSBLenz: TMSComm + Left = 720 + Top = 144 + Width = 32 + Height = 32 + OnComm = MSCommUSBLenzComm + ControlData = { + 2143341208000000ED030000ED03000001568A64000006000000010000040000 + 00020000802500000000080000000000000000003F00000011000000} + end + object Panel1: TPanel + Left = 887 + Top = 5 + Width = 281 + Height = 129 + Anchors = [akTop, akRight] + TabOrder = 5 + object BoutonRaf: TButton + Left = 8 + Top = 8 + Width = 89 + Height = 33 + Caption = 'Rafraichissement' + TabOrder = 0 + OnClick = BoutonRafClick + end + object BoutVersion: TButton + Left = 102 + Top = 8 + Width = 83 + Height = 33 + Caption = 'Dem version' + TabOrder = 1 + OnClick = BoutVersionClick + end + object loco: TButton + Left = 190 + Top = 88 + Width = 83 + Height = 33 + Caption = 'loco' + TabOrder = 2 + OnClick = locoClick + end + object ButtonInfo: TButton + Left = 104 + Top = 48 + Width = 81 + Height = 33 + Caption = 'Informations' + TabOrder = 3 + OnClick = ButtonInfoClick + end + object ButtonReprise: TButton + Left = 190 + Top = 48 + Width = 83 + Height = 33 + Hint = + 'Relance du bus DCC apr'#232's une '#233'criture d'#39'un CV ou une mise hors t' + + 'ension de la centrale' + Caption = 'Reprise DCC' + TabOrder = 4 + OnClick = ButtonRepriseClick + end + object ButtonTest: TButton + Left = 8 + Top = 48 + Width = 89 + Height = 33 + Caption = 'Demande '#233'tat r'#233'trosignalisation' + TabOrder = 5 + WordWrap = True + OnClick = ButtonTestClick + end + object ButtonArretSimu: TButton + Left = 104 + Top = 88 + Width = 81 + Height = 33 + Caption = 'Arret simulation' + TabOrder = 6 + Visible = False + OnClick = ButtonArretSimuClick + end + object ButtonAffTCO: TButton + Left = 8 + Top = 88 + Width = 89 + Height = 33 + Caption = 'Affiche TCO' + TabOrder = 7 + OnClick = ButtonAffTCOClick + end + object ButtonLanceCDM: TButton + Left = 192 + Top = 8 + Width = 81 + Height = 33 + Caption = 'Lance CDM rail' + TabOrder = 8 + OnClick = ButtonLanceCDMClick + end + end + object Panel2: TPanel + Left = 631 + Top = 136 + Width = 153 + Height = 25 + Anchors = [akTop, akRight] + Caption = 'Panel2' + TabOrder = 6 + object Label1: TLabel + Left = 16 + Top = 4 + Width = 89 + Height = 13 + Caption = 'Nombre de trains : ' + end + object LabelNbTrains: TLabel + Left = 120 + Top = 2 + Width = 9 + Height = 19 + Caption = '0' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -16 + Font.Name = 'Arial' + Font.Style = [fsBold] + ParentFont = False + end + end + object StaticText: TStaticText + Left = 16 + Top = 560 + Width = 14 + Height = 17 + Anchors = [akLeft, akRight, akBottom] + Caption = 'xx' + TabOrder = 7 + end + object Timer1: TTimer + Interval = 100 + OnTimer = Timer1Timer + Left = 888 + Top = 80 + end + object ClientSocketLenz: TClientSocket + Active = False + ClientType = ctNonBlocking + Port = 0 + OnConnect = ClientSocketLenzConnect + OnDisconnect = ClientSocketLenzDisconnect + OnRead = ClientSocketLenzRead + OnError = ClientSocketLenzError + Left = 320 + end + object MainMenu1: TMainMenu + Left = 560 + object Afficher1: TMenuItem + Caption = 'Afficher' + object Etatdesdtecteurs1: TMenuItem + Caption = 'Etat des d'#233'tecteurs' + Hint = 'Affiche l'#39#233'tat des d'#233'tecteurs' + OnClick = AffEtatDetecteurs + end + object Etatdesaiguillages1: TMenuItem + Caption = 'Etat des aiguillages' + OnClick = Etatdesaiguillages1Click + end + object N3: TMenuItem + Caption = '-' + end + object Codificationdesaiguillages1: TMenuItem + Caption = 'Codification des aiguillages' + OnClick = Codificationdesaiguillages1Click + end + object Codificationdesfeux1: TMenuItem + Caption = 'Codification des feux' + OnClick = Codificationdesfeux1Click + end + object Codificationdesactionneurs1: TMenuItem + Caption = 'Codification des actionneurs' + OnClick = Codificationdesactionneurs1Click + end + object N5: TMenuItem + Caption = '-' + end + object Quitter1: TMenuItem + Caption = 'Quitter' + OnClick = Quitter1Click + end + end + object Interface1: TMenuItem + Caption = 'Interface' + object MenuConnecterUSB: TMenuItem + Caption = 'Connecter USB' + Hint = 'Connecter l'#39'interface en USB' + OnClick = MenuConnecterUSBClick + end + object DeconnecterUSB: TMenuItem + Caption = 'D'#233'connecter USB' + Hint = 'D'#233'connecter l'#39'interface USB' + OnClick = DeconnecterUSBClick + end + object N2: TMenuItem + Caption = '-' + end + object MenuConnecterEthernet: TMenuItem + Caption = 'Connecter Ethernet' + Hint = 'Connecter l'#39'interface par Ethernet' + OnClick = MenuConnecterEthernetClick + end + object MenuDeconnecterEthernet: TMenuItem + Caption = 'D'#233'connecter Ethernet' + Hint = 'D'#233'connecter l'#39'interface par Ethernet' + OnClick = MenuDeconnecterEthernetClick + end + object N4: TMenuItem + Caption = '-' + end + object ConnecterCDMrail: TMenuItem + Caption = 'Connecter CDM rail' + OnClick = ConnecterCDMrailClick + end + object DeconnecterCDMRail: TMenuItem + Caption = 'D'#233'connecter CDM rail' + OnClick = DeconnecterCDMRailClick + end + end + object Divers1: TMenuItem + Caption = 'Divers' + object Config: TMenuItem + Caption = 'Configuration' + Hint = 'Modifie les variables de configuration sans sauvegarde' + OnClick = ConfigClick + end + object FichierSimu: TMenuItem + Caption = 'Ouvrir un fichier de simulation' + Hint = + 'Ouvre un fichier de simulation des d'#233'tecteurs pour simuler un fo' + + 'nctionnement' + OnClick = FichierSimuClick + end + object OuvrirunfichiertramesCDM1: TMenuItem + Caption = 'Ouvrir un fichier trames CDM' + OnClick = OuvrirunfichiertramesCDM1Click + end + object Affichefentredebug1: TMenuItem + Caption = 'Affiche fen'#234'tre debug' + OnClick = Affichefentredebug1Click + end + object N1: TMenuItem + Caption = '-' + end + object LireunfichierdeCV1: TMenuItem + Caption = 'Lire un fichier de CV vers un accessoire' + Hint = + 'Ouvre un fichier de CV pour l'#39'envoyer vers un accessoire branch'#233 + + ' sur la voie de programmation' + OnClick = LireunfichierdeCV1Click + end + end + end + object ClientSocketCDM: TClientSocket + Active = False + ClientType = ctNonBlocking + Port = 0 + OnConnect = ClientSocketCDMConnect + OnDisconnect = ClientSocketCDMDisconnect + OnRead = ClientSocketCDMRead + OnError = ClientSocketCDMError + Left = 352 + end + object OpenDialog: TOpenDialog + Left = 888 + Top = 152 + end + object SaveDialog: TSaveDialog + Left = 888 + Top = 16 + end +end diff --git a/UnitPrinc.~pas b/UnitPrinc.~pas new file mode 100644 index 0000000..441f035 --- /dev/null +++ b/UnitPrinc.~pas @@ -0,0 +1,8649 @@ +Unit UnitPrinc; +(******************************************** + programme signaux complexes Graphique Lenz + delphi 7 + activeX Tmscomm + clientSocket + ******************************************** + note sur le pilotage des accessoires: + raquette octet sortie + + 2 = aiguillage droit = sortie 2 de l'adresse d'accessoire + - 1 = aiguillage dévié = sortie 1 de l'adresse d'accessoire +*) + +// en mode simulation run, CDM ne renvoie pas les détecteurs au départ du RUN. + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, OleCtrls, ExtCtrls, jpeg, ComCtrls, ShellAPI, TlHelp32, + ImgList, ScktComp, StrUtils, Menus, ActnList, MSCommLib_TLB , unitConfig ; + +type + TFormPrinc = class(TForm) + ListBox1: TListBox; + Timer1: TTimer; + LabelTitre: TLabel; + ScrollBox1: TScrollBox; + ClientSocketLenz: TClientSocket; + GroupBox1: TGroupBox; + EditAdresse: TEdit; + Label2: TLabel; + Editval: TEdit; + Label3: TLabel; + MainMenu1: TMainMenu; + Interface1: TMenuItem; + MenuConnecterUSB: TMenuItem; + DeconnecterUSB: TMenuItem; + N2: TMenuItem; + MenuConnecterEthernet: TMenuItem; + MenuDeconnecterEthernet: TMenuItem; + StatusBar1: TStatusBar; + Label4: TLabel; + MSCommUSBLenz: TMSComm; + Afficher1: TMenuItem; + Etatdesdtecteurs1: TMenuItem; + Etatdesaiguillages1: TMenuItem; + N3: TMenuItem; + Codificationdesaiguillages1: TMenuItem; + Image9feux: TImage; + Image7feux: TImage; + Image5feux: TImage; + Image4feux: TImage; + Image3feux: TImage; + Image2feux: TImage; + N4: TMenuItem; + ConnecterCDMrail: TMenuItem; + DeconnecterCDMRail: TMenuItem; + Image2Dir: TImage; + Image3Dir: TImage; + Image4Dir: TImage; + Image5Dir: TImage; + Image6Dir: TImage; + Codificationdesfeux1: TMenuItem; + Divers1: TMenuItem; + ClientSocketCDM: TClientSocket; + FichierSimu: TMenuItem; + ButtonEcrCV: TButton; + OpenDialog: TOpenDialog; + N1: TMenuItem; + LireunfichierdeCV1: TMenuItem; + SaveDialog: TSaveDialog; + N5: TMenuItem; + Quitter1: TMenuItem; + Config: TMenuItem; + ButtonLitCV: TButton; + Codificationdesactionneurs1: TMenuItem; + OuvrirunfichiertramesCDM1: TMenuItem; + Panel1: TPanel; + BoutonRaf: TButton; + BoutVersion: TButton; + loco: TButton; + ButtonInfo: TButton; + ButtonReprise: TButton; + ButtonTest: TButton; + ButtonArretSimu: TButton; + ButtonCommande: TButton; + Panel2: TPanel; + Label1: TLabel; + LabelNbTrains: TLabel; + LabelEtat: TLabel; + ButtonAffTCO: TButton; + ButtonLanceCDM: TButton; + Affichefentredebug1: TMenuItem; + StaticText: TStaticText; + procedure FormCreate(Sender: TObject); + procedure MSCommUSBLenzComm(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure Timer1Timer(Sender: TObject); + procedure BoutVersionClick(Sender: TObject); + procedure ButtonCommandeClick(Sender: TObject); + procedure EditvalEnter(Sender: TObject); + procedure ListBox1DrawItem(Control: TWinControl; Index: Integer; + Rect: TRect; State: TOwnerDrawState); + procedure BoutonRafClick(Sender: TObject); + procedure ClientSocketLenzError(Sender: TObject; Socket: TCustomWinSocket; + ErrorEvent: TErrorEvent; var ErrorCode: Integer); + procedure ClientSocketLenzRead(Sender: TObject; Socket: TCustomWinSocket); + procedure ButtonTestClick(Sender: TObject); + procedure ButtonInfoClick(Sender: TObject); + procedure MenuConnecterUSBClick(Sender: TObject); + procedure DeconnecterUSBClick(Sender: TObject); + procedure MenuConnecterEthernetClick(Sender: TObject); + procedure MenuDeconnecterEthernetClick(Sender: TObject); + procedure locoClick(Sender: TObject); + procedure AffEtatDetecteurs(Sender: TObject); + procedure Etatdesaiguillages1Click(Sender: TObject); + procedure Codificationdesaiguillages1Click(Sender: TObject); + procedure ClientSocketCDMError(Sender: TObject; + Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; + var ErrorCode: Integer); + procedure ClientSocketLenzConnect(Sender: TObject; + Socket: TCustomWinSocket); + procedure ClientSocketCDMConnect(Sender: TObject; + Socket: TCustomWinSocket); + procedure ClientSocketCDMRead(Sender: TObject; + Socket: TCustomWinSocket); + procedure ConnecterCDMrailClick(Sender: TObject); + procedure DeconnecterCDMRailClick(Sender: TObject); + procedure ClientSocketCDMDisconnect(Sender: TObject; + Socket: TCustomWinSocket); + procedure Codificationdesfeux1Click(Sender: TObject); + procedure ClientSocketLenzDisconnect(Sender: TObject; + Socket: TCustomWinSocket); + procedure FichierSimuClick(Sender: TObject); + procedure ButtonEcrCVClick(Sender: TObject); + procedure ButtonRepriseClick(Sender: TObject); + procedure LireunfichierdeCV1Click(Sender: TObject); + procedure Quitter1Click(Sender: TObject); + procedure ConfigClick(Sender: TObject); + procedure ButtonLitCVClick(Sender: TObject); + procedure Codificationdesactionneurs1Click(Sender: TObject); + procedure ButtonArretSimuClick(Sender: TObject); + procedure OuvrirunfichiertramesCDM1Click(Sender: TObject); + procedure ButtonAffTCOClick(Sender: TObject); + procedure ButtonLanceCDMClick(Sender: TObject); + procedure Affichefentredebug1Click(Sender: TObject); + private + { Déclarations privées } + procedure DoHint(Sender : Tobject); + public + { Déclarations publiques } + Procedure ImageOnClick(Sender : TObject); + procedure proc_checkBoxFB(Sender : Tobject); + end; + + +const +titre='Signaux complexes GL '; +tempoFeu=100; +MaxAcc=2048; +LargImg=50;HtImg=91; +const_droit=2;const_devie=1; // positions aiguillages transmises par la centrale LENZ +const_devieG_CDM=3; // positions aiguillages transmises par cdm +const_devieD_CDM=2; // positions aiguillages transmises par cdm +const_droit_CDM=0; // positions aiguillages transmises par cdm +ClBleuClair=$FF7070 ; +Cyan=$FFA0A0; +clviolet=$FF00FF; +GrisF=$414141; +clOrange=$0077FF; +Feu_X=50;Feu_Y=91; +Max_Simule=10000; +NbCouleurTrain=8; +couleurTrain : array[1..NbCouleurTrain] of Tcolor = (clYellow,clLime,clOrange,clAqua,clFuchsia,clLtGray,clred,clWhite); +EtatSign : array[0..13] of string[20] =('carré','sémaphore','sémaphore cli','vert','vert cli','violet', + 'blanc','blanc cli','jaune','jaune cli','ral 30','ral 60','rappel 30','rappel 60'); +NbDecodeur = 7; +decodeur : array[0..NbDecodeur-1] of string[20] =('rien','digital Bahn','CDF','LDT','LEB','NMRA','Unisemaf'); + +type TBranche = record + BType : integer ; // 1= détecteur 2= aiguillage 4=Buttoir + Adresse : integer ; // adresse du détecteur ou de l'aiguillage + end; + + Taiguillage = record + objet : integer; // objet dans CDM rail + modele : integer; // 0=n'existe pas 1=aiguillage 2=TJD 3=TJS 4=aiguillage triple + position, // position actuelle : 1=dévié 2=droit (positions centrale lenz) + Adrtriple, // 2eme adresse pour un aiguillage triple + temps, // temps de pilotage (durée de l'impulsion en x 100 ms) + inversion : integer; // pilotage inversé pour la commande (en mode sans CDM) 0=normal 1=inversé (positionné dans fichier config_gl section_init + InversionCDM : integer ; // inversion pour les aiguillages en lecture (paramètre I) + vitesse : integer; // vitesse de franchissement de l'aiguillage en position déviée (60 ou 90) + + ADroit : integer ; // (TJD:identifiant extérieur) connecté sur la position droite en talon + ADroitB : char ; // id de branche pour TJD + + ADevie : integer ; // (TJD:identifiant extérieur) adresse de l'élément connecté en position déviée + ADevieB : char; // caractère (D ou S)si aiguillage de l'élément connecté en position déviée + + APointe : integer; // adresse de l'élément connecté en position droite ; + APointeB : char; + + DDroit : integer; // destination de la TJD en position droite + DDroitB : char ; + + DDevie : integer; // destination de la TJD en position déviée + DDevieB : char ; + + + tjsint : integer; + tjsintb : char ; + + // éléments connectés sur la branche déviée 2 (cas d'un aiguillage triple) + Adevie2 : integer; + Adevie2B : char ; + + // modifié + modifie : boolean ; + end; + +Taccessoire = (aig,feu); +TMA = (valide,devalide); + +var ancien_tablo_signalCplx,EtatsignalCplx : array[0..MaxAcc] of word; + AvecInitAiguillages,tempsCli,NbreFeux,pasreponse,AdrDevie,fenetre, + NombreImages,signalCpx,branche_trouve,Indexbranche_trouve,Actuel,Signal_suivant, + Nbre_recu_cdm,Tempo_chgt_feux,Adj1,Adj2,NbrePN,ServeurInterfaceCDM, + ServeurRetroCDM,TailleFonte : integer; + + Hors_tension2,traceSign,TraceZone,Ferme,parSocket,ackCdm,PremierFD, + NackCDM,MsgSim,succes,recu_cv,AffActionneur,AffAigDet, + TraceListe,clignotant,nack,Maj_feux_cours,configNulle,LanceCDM : boolean; + + CDMhd : THandle; + branche : array [1..100] of string; + + FormPrinc: TFormPrinc; + ack,portCommOuvert,trace,AffMem,AfficheDet,CDM_connecte,SocketCDM_connecte, + DebugOuv,Raz_Acc_signaux,AvecInit,AvecTCO,terminal,Srvc_Aig,Srvc_Det,Srvc_Act, + Srvc_PosTrain,Srvc_Sig : boolean; + tablo : array of byte; // tableau rx usb + Enregistrement,chaine_Envoi,chaine_recue,Id_CDM,Af, + entete,suffixe,ConfStCom,LAY : string; + maxaiguillage,detecteur_chgt,Temps,Tempo_init,Suivant,TypeGen, + NbreImagePligne,NbreBranches,Index2_det,Index2_aig,branche_det,Index_det, + I_simule,maxTablo_act,NbreVoies,AdresseFeuSuivant,El_suivant : integer; + Ancien_detecteur,detecteur : array[0..1024] of boolean; // anciens état des détecteurs et adresses des détecteurs et leur état + Adresse_detecteur : array[0..60] of integer; // adresses des détecteurs par index + mem : array[0..1024] of boolean ; // mémoire des états des détecteurs + MemZone : array[0..1024,0..1024] of boolean ; // mémoires de zones + Tablo_actionneur : array[1..100] of + record + actionneur,etat,fonction,tempo, + accessoire,sortie : integer; + Raz : boolean; + train : string; + end; + KeyInputs: array of TInput; + Tablo_PN : array[1..20] of + record + AdresseFerme : integer; // adresse de pilotage DCC pour la fermeture + commandeFerme : integer; // commande de fermeture (1 ou 2) + AdresseOuvre : integer; // adresse de pilotage DCC pour l'ouverture + commandeOuvre : integer; // commande d'ouverture (1 ou 2) + NbVoies : integer; // Nombre de voies du PN + Voie : array [1..10] of record + ActFerme,ActOuvre : integer ; // actionneurs provoquant la fermeture et l'ouverture + PresTrain : boolean; // mémoire de présence de train sur la voie + end; + end; + Tablo_Simule : array[0..Max_Simule] of + record + tick : longint; + Detecteur,Aiguillage,etat : integer ; + end; + TempoAct,RangActCours,N_Cv,index_simule,NDetecteurs,N_Trains,N_routes : integer; + tablo_CV : array [1..255] of integer; + couleur : Tcolor; + fichier : text; + tick,Premier_tick : longint; + // modélisations des fichiers config + mod_branches,mod_act : array[1..100] of string; + // l'indice du tableau aiguillage est son adresse + aiguillage : array[0..MaxAcc] of Taiguillage; + // signaux de la fenêtre de droite - L'index du tableau n'est pas l'adresse du feu + feux : array[1..MaxAcc] of record + adresse, aspect : integer; // adresse du feu, aspect (2 feux..9 feux 12=direction 2 feux .. 16=direction 6 feux) + Img : TImage; // Pointeur sur structure TImage du feu + Lbl : TLabel; // pointeur sur structure Tlabel du feu + check : TCheckBox; // pointeur sur structure Checkbox avec feu blanc + FeuBlanc : boolean ; // avec checkbox ou pas + decodeur : integer; // type du décodeur + Adr_det1 : integer; // adresse du détecteur1 sur lequel il est implanté + Adr_det2 : integer; // adresse du détecteur2 sur lequel il est implanté (si un signal est pour plusieurs voies) + Adr_det3 : integer; // adresse du détecteur3 sur lequel il est implanté (si un signal est pour plusieurs voies) + Adr_det4 : integer; // adresse du détecteur4 sur lequel il est implanté (si un signal est pour plusieurs voies) + Adr_el_suiv1 : integer; // adresse de l'élément1 suivant + Adr_el_suiv2 : integer; // adresse de l'élément2 suivant (si un signal est pour plusieurs voies) + Adr_el_suiv3 : integer; // adresse de l'élément3 suivant (si un signal est pour plusieurs voies) + Adr_el_suiv4 : integer; // adresse de l'élément4 suivant (si un signal est pour plusieurs voies) + Btype_suiv1 : integer ; // type de l'élément suivant (1=détecteur 2=aig ou TJD ou TJS 4=tri + Btype_suiv2 : integer ; // type de l'élément suivant (1=détecteur 2=aig ou TJD ou TJS 4=tri + Btype_suiv3 : integer ; // type de l'élément suivant (1=détecteur 2=aig ou TJD ou TJS 4=tri + Btype_suiv4 : integer ; // type de l'élément suivant (1=détecteur 2=aig ou TJD ou TJS 4=tri + VerrouCarre : boolean ; // si vrai, le feu se verrouille au carré si pas de train avant le signal + modifie : boolean; // feu modifié + EtatSignal : word ; // comme EtatSignalCplx + UniSemaf : integer ; // définition supplémentaire de la cible pour les décodeurs UNISEMAF + AigDirection : array[1..6] of array of record // pour les signaux directionnels : contient la liste des aiguillages associés + Adresse : integer; // 6 feux max associés à un tableau dynamique décrivant les aiguillages + posAig : char; + end; + CondCarre : array[1..6] of array of record // conditions supplémentaires d'aiguillages en position pour le carré + Adresse : integer; // aiguillage + posAig : char; + end; + end; + Fimage : Timage; + BrancheN : array[1..100,1..200] of TBranche; // + +{$R *.dfm} + +// utilisation des procédures et fonctions dans les autres unités +function Index_feu(adresse : integer) : integer; +procedure dessine_feu2(Acanvas : Tcanvas;x,y : integer;frX,frY : real;EtatSignal : word;orientation : integer); +procedure dessine_feu3(Acanvas : Tcanvas;x,y : integer;frX,frY : real;EtatSignal : word;orientation : integer); +procedure dessine_feu4(Acanvas : Tcanvas;x,y : integer;frX,frY : real;EtatSignal : word;orientation : integer); +procedure dessine_feu5(Acanvas : Tcanvas;x,y : integer;frX,frY : real;EtatSignal : word;orientation : integer); +procedure dessine_feu7(Acanvas : Tcanvas;x,y : integer;frX,frY : real;EtatSignal : word;orientation : integer); +procedure dessine_feu9(Acanvas : Tcanvas;x,y : integer;frX,frY : real;etatsignal : word;orientation : integer); +procedure dessine_dir2(Acanvas : Tcanvas;EtatSignal : word); +procedure dessine_dir3(Acanvas : Tcanvas;EtatSignal : word); +procedure dessine_dir4(Acanvas : Tcanvas;EtatSignal : word); +procedure dessine_dir5(Acanvas : Tcanvas;EtatSignal : word); +procedure dessine_dir6(Acanvas : Tcanvas;EtatSignal : word); +procedure Maj_Etat_Signal(adresse,aspect : integer); +procedure Affiche(s : string;lacouleur : TColor); +procedure envoi_signal(Adr : integer); +procedure pilote_direction(Adr,nbre : integer); +procedure connecte_USB; +procedure deconnecte_usb; +function IsWow64Process: Boolean; +procedure Dessine_feu_mx(CanvasDest : Tcanvas;x,y : integer;FrX,frY : real;adresse : integer;orientation : integer); +procedure pilote_acc(adresse : integer;octet : byte;Acc : TAccessoire); +function etat_signal_suivant(Adresse,rang : integer) : integer; +function suivant_alg3(prec : integer;typeELprec : integer;var actuel : integer;typeElActuel : integer;alg : integer) : integer; +function detecteur_suivant_El(el1: integer;TypeDet1 : integer;el2 : integer;TypeDet2 : integer) : integer ; +function test_memoire_zones(adresse : integer) : boolean; + +implementation + +uses UnitDebug, verif_version, UnitPilote, UnitSimule, UnitTCO; + +procedure menu_interface(MA : TMA); +var val : boolean; +begin + val:=MA=valide; + with formprinc do + begin + MenuConnecterUSB.enabled:=val; + DeConnecterUSB.enabled:=val; + MenuConnecterEthernet.enabled:=val; + MenuDeConnecterEthernet.enabled:=val; + end; +end; + +procedure Tformprinc.DoHint(Sender : Tobject); +begin + StatusBar1.Simpletext:=Application.Hint; +end; + +// renvoie le 1er numéro de bit à 1 +// ex BitNum(4)=2 +Function BitNum(n : word) : integer; +var i : integer; + trouve : boolean; +begin + i:=0; + repeat + trouve:=(n and 1)=1 ; + if not(trouve) then inc(i); + n:=n shr 1; + until (i=16) or trouve; + BitNum:=i; +end; + +// conversion du motif de bits (codebin) de la configuration du signal complexe en deux mots: +// en sortie : +// premierBit : code de la signalisation +// Combine = code de la signalisation combinée +// Exemple code_to_aspect(10001000000000) renvoie premierBit=jaune_cli (9) et Combine=rappel 60 (13) +procedure code_to_aspect(codebin : word;var premierbit,combine : word) ; +var i,mot : word; +begin + premierBit:=BitNum(CodeBin and $3ff); + combine:=BitNum(CodeBin and $fc00); +end; + +procedure Xcode_to_aspect(codebin : word;var premierbit,combine : word) ; +var i,mot : word; +begin + mot:=codebin; + i:=0;premierbit:=0;Combine:=0; + + while (i<15) do + begin + if (mot and 1)=1 then // si bit 0 du mot est à 1 + begin + if (premierbit=0) then premierbit:=i+1 else Combine:=i+1; + end; + mot:=mot shr 1; //décaler à droite + inc(i); + end; +end; + +// dessine un cercle plein dans le feu +procedure cercle(ACanvas : Tcanvas;x,y,rayon : integer;couleur : Tcolor); +begin + with Acanvas do + begin + brush.Color:=couleur; + Pen.Color:=clBlack; + Ellipse(x-rayon,y-rayon,x+rayon,y+rayon); + end; + //Affiche(IntToSTR(y),clyellow); +end; + +// dessine les feux sur une cible à 2 feux +// x,y : offset en pixels du coin supérieur gauche du feu +// frX, frY : facteurs de réduction +procedure dessine_feu2(Acanvas : Tcanvas;x,y : integer;frX,frY : real;EtatSignal : word;orientation : integer); +var Temp,rayon,xViolet,YViolet,xBlanc,yBlanc, + LgImage,HtImage : integer; + ech : real; + code,combine : word; +begin + code_to_aspect(Etatsignal,code,combine); // et aspect + rayon:=round(6*frX); + + // récupérer les dimensions de l'image d'origine du feu + LgImage:=Formprinc.Image2feux.Picture.Bitmap.Width; + HtImage:=Formprinc.Image2feux.Picture.Bitmap.Height; + + XBlanc:=13; YBlanc:=11; + xViolet:=13; yViolet:=23; + + if (orientation=2) then + begin + //rotation 90° vers la gauche des feux + ech:=frY;frY:=frX;FrX:=ech; + Temp:=HtImage-yViolet;YViolet:=XViolet;XViolet:=Temp; + Temp:=HtImage-yBlanc;YBlanc:=XBlanc;XBlanc:=Temp; + end; + + if (orientation=3) then + begin + //rotation 90° vers la droite des feux + // calcul des facteurs de réduction pour la rotation + ech:=frY;frY:=frX;FrX:=ech; + Temp:=LgImage-XBlanc;Xblanc:=Yblanc;Yblanc:=Temp; + Temp:=LgImage-Xviolet;Xviolet:=Yviolet;Yviolet:=Temp; + end; + + XBlanc:=round(xBlanc*Frx)+x; YBlanc:=round(Yblanc*Fry)+Y; + XViolet:=round(XViolet*FrX)+x; YViolet:=round(YViolet*FrY)+Y; + + // extinctions + if not((code=blanc_cli) and clignotant) then cercle(ACanvas,xBlanc,yBlanc,rayon,GrisF); + cercle(ACanvas,xViolet,yViolet,rayon,GrisF); + + // allumages + if ((code=blanc_cli) and (clignotant)) or (code=blanc) then cercle(ACanvas,xBlanc,yBlanc,rayon,clWhite); + if code=violet then cercle(ACanvas,xViolet,yViolet,rayon,clviolet); +end; + +// dessine les feux sur une cible à 3 feux +procedure dessine_feu3(Acanvas : Tcanvas;x,y : integer;frX,frY : real;EtatSignal : word;orientation : integer); +var Temp,rayon,xSem,Ysem,xJaune,Yjaune,Xvert,Yvert, + LgImage,HtImage : integer; + s : string; + ech : real; + code,combine : word; +begin + code_to_aspect(Etatsignal,code,combine); + rayon:=round(6*frX); + + LgImage:=Formprinc.Image3feux.Picture.Bitmap.Width; + HtImage:=Formprinc.Image3feux.Picture.Bitmap.Height; + + Xvert:=13; Yvert:=11; + xSem:=13; ySem:=22; + xJaune:=13; yJaune:=33; + + if (orientation=2) then + begin + ech:=frY;frY:=frX;FrX:=ech; + Temp:=HtImage-yjaune;YJaune:=XJaune;Xjaune:=Temp; + Temp:=HtImage-ySem;YSem:=XSem;XSem:=Temp; + Temp:=HtImage-yvert;Yvert:=Xvert;Xvert:=Temp; + end; + + if (orientation=3) then + begin + //rotation 90° vers la droite des feux + ech:=frY;frY:=frX;FrX:=ech; + Temp:=LgImage-Xjaune;XJaune:=YJaune;Yjaune:=Temp; + Temp:=LgImage-XSem;XSem:=YSem;YSem:=Temp; + Temp:=LgImage-Xvert;Xvert:=Yvert;Yvert:=Temp; + end; + + XJaune:=round(Xjaune*Frx)+x; YJaune:=round(Yjaune*Fry)+Y; + Xvert:=round(Xvert*FrX)+x; Yvert:=round(Yvert*FrY)+Y; + XSem:=round(XSem*FrX)+x; YSem:=round(YSem*FrY)+Y; + + // extinctions + if not((code=jaune_cli) and clignotant) then cercle(ACanvas,xJaune,yJaune,rayon,GrisF); + if not((code=vert_cli) and clignotant) then cercle(ACanvas,xVert,yVert,rayon,GrisF); + if not((code=semaphore_cli) and clignotant) then cercle(ACanvas,xSem,ySem,rayon,GrisF); + + // allumages + if ((code=vert_cli) and (clignotant)) or (code=vert) then cercle(ACanvas,xVert,yVert,rayon,clGreen); + if ((code=jaune_cli) and (clignotant)) or (code=jaune) then cercle(Acanvas,xJaune,yJaune,rayon,clOrange); + if ((code=semaphore_cli) and (clignotant)) or (code=semaphore) then cercle(ACanvas,xSem,ySem,rayon,clRed); +end; + +// dessine les feux sur une cible à 4 feux +// orientation=1 vertical +procedure dessine_feu4(Acanvas : Tcanvas;x,y : integer;frX,frY : real;EtatSignal : word;orientation : integer); +var Temp,rayon,xSem,Ysem,xJaune,Yjaune,Xcarre,Ycarre,Xvert,Yvert, + LgImage,HtImage : integer; + ech : real; + code,combine : word; +begin + code_to_aspect(Etatsignal,code,combine); // et aspect + rayon:=round(6*frX); + + LgImage:=Formprinc.Image4feux.Picture.Bitmap.Width; + HtImage:=Formprinc.Image4feux.Picture.Bitmap.Height; + + Xcarre:=13; ycarre:=11; + Xvert:=13; Yvert:=22; + xSem:=13; ySem:=33; + xJaune:=13; yJaune:=44; + + if (orientation=2) then + begin + //rotation 90° vers la gauche des feux + ech:=frY;frY:=frX;FrX:=ech; + Temp:=HtImage-yjaune; YJaune:=XJaune;Xjaune:=Temp; + Temp:=HtImage-ycarre; Ycarre:=Xcarre;Xcarre:=Temp; + Temp:=HtImage-ySem; YSem:=XSem;XSem:=Temp; + Temp:=HtImage-yvert; Yvert:=Xvert;Xvert:=Temp; + end; + + if (orientation=3) then + begin + //rotation 90° vers la droite des feux + // calcul des facteurs de réduction pour la rotation + ech:=frY;frY:=frX;FrX:=ech; + Temp:=LgImage-Xjaune;XJaune:=YJaune;Yjaune:=Temp; + Temp:=LgImage-XSem;XSem:=YSem;YSem:=Temp; + Temp:=LgImage-Xvert;Xvert:=Yvert;Yvert:=Temp; + Temp:=LgImage-Xcarre;Xcarre:=Ycarre;Ycarre:=Temp; + end; + + XJaune:=round(Xjaune*Frx)+x; YJaune:=round(Yjaune*Fry)+Y; + Xvert:=round(Xvert*FrX)+x; Yvert:=round(Yvert*FrY)+Y; + XSem:=round(XSem*FrX)+x; YSem:=round(YSem*FrY)+Y; + Xcarre:=round(Xcarre*FrX)+x; Ycarre:=round(Ycarre*FrY)+Y; + + //extinctions + cercle(ACanvas,Xcarre,yCarre,rayon,GrisF); + if not((code=semaphore_cli) and clignotant) then cercle(ACanvas,Xsem,Ysem,rayon,GrisF); + if not((code=vert_cli) and clignotant) then cercle(ACanvas,Xvert,yvert,rayon,GrisF); + if not((code=jaune_cli) and clignotant) then cercle(ACanvas,Xjaune,YJaune,rayon,GrisF); + + // allumages + if ((code=vert_cli) and (clignotant)) or (code=vert) then cercle(ACanvas,xVert,yVert,rayon,clGreen); + if ((code=jaune_cli) and (clignotant)) or (code=jaune) then cercle(Acanvas,Xjaune,yJaune,rayon,clOrange); + if ((code=semaphore_cli) and (clignotant)) or (code=semaphore) then cercle(ACanvas,xSem,ySem,rayon,clRed); + if code=carre then + begin + cercle(ACanvas,xSem,Ysem,rayon,clRed); + cercle(ACanvas,xCarre,yCarre,rayon,clRed); + end; +end; + +// dessine les feux sur une cible à 5 feux +procedure dessine_feu5(Acanvas : Tcanvas;x,y : integer;frX,frY : real;EtatSignal : word;orientation : integer); +var XBlanc,Yblanc,xJaune,yJaune,Xsem,YSem,Xvert,YVert,Xcarre,Ycarre, + Temp,rayon,LgImage,HtImage : integer; + ech : real; + code,combine : word; +begin + code_to_aspect(Etatsignal,code,combine); // et aspect + rayon:=round(6*frX); + XBlanc:=13; YBlanc:=22; + xJaune:=13; yJaune:=55; + Xcarre:=13; Ycarre:=11; + XSem:=13; Ysem:=44; + XVert:=13; YVert:=33; + + LgImage:=Formprinc.Image5feux.Picture.Bitmap.Width; + HtImage:=Formprinc.Image5feux.Picture.Bitmap.Height; + + if (orientation=2) then + begin + //rotation 90° vers la gauche des feux + // calcul des facteurs de réduction pour la rotation + ech:=frY;frY:=frX;FrX:=ech; + Temp:=HtImage-yjaune;YJaune:=XJaune;Xjaune:=Temp; + Temp:=HtImage-yBlanc;YBlanc:=XBlanc;XBlanc:=Temp; + Temp:=HtImage-ycarre;Ycarre:=Xcarre;Xcarre:=Temp; + Temp:=HtImage-ySem;YSem:=XSem;XSem:=Temp; + Temp:=HtImage-yvert;Yvert:=Xvert;Xvert:=Temp; + end; + + if (orientation=3) then + begin + //rotation 90° vers la droite des feux + // calcul des facteurs de réduction pour la rotation + ech:=frY;frY:=frX;FrX:=ech; + Temp:=LgImage-Xjaune;XJaune:=YJaune;Yjaune:=Temp; + Temp:=LgImage-XSem;XSem:=YSem;YSem:=Temp; + Temp:=LgImage-Xvert;Xvert:=Yvert;Yvert:=Temp; + Temp:=LgImage-Xcarre;Xcarre:=Ycarre;Ycarre:=Temp; + Temp:=LgImage-Xblanc;Xblanc:=Yblanc;Yblanc:=Temp; + end; + + XJaune:=round(Xjaune*Frx)+x; YJaune:=round(Yjaune*Fry)+Y; + Xblanc:=round(XBlanc*FrX)+x; YBlanc:=round(YBlanc*FrY)+Y; + Xvert:=round(Xvert*FrX)+x; Yvert:=round(Yvert*FrY)+Y; + XSem:=round(XSem*FrX)+x; YSem:=round(YSem*FrY)+Y; + Xcarre:=round(Xcarre*FrX)+x; Ycarre:=round(Ycarre*FrY)+Y; + + // extinctions + if not((code=blanc_cli) and clignotant) then cercle(ACanvas,xBlanc,yBlanc,rayon,GrisF); + cercle(ACanvas,xcarre,ycarre,rayon,GrisF); + if not((code=vert_cli) and clignotant) then cercle(ACanvas,xvert,yvert,rayon,GrisF); + if not((code=semaphore_cli) and clignotant) then cercle(ACanvas,xSem,ySem,rayon,GrisF); + if not((code=jaune_cli) and clignotant) then cercle(ACanvas,xjaune,yjaune,rayon,GrisF); + + //allumages + if ((code=semaphore_cli) and (clignotant)) or (code=semaphore) then cercle(ACanvas,xsem,ysem,rayon,clRed); + if ((code=blanc_cli) and (clignotant)) or (code=blanc) then cercle(ACanvas,xblanc,yblanc,rayon,clWhite); + if (code=violet) then cercle(ACanvas,xblanc,yblanc,rayon,clViolet); + if code=carre then + begin + cercle(ACanvas,xcarre,ycarre,rayon,clRed); + cercle(ACanvas,xsem,ysem,rayon,clRed); + end; + if ((code=vert_cli) and (clignotant)) or (code=vert) then cercle(ACanvas,xvert,yVert,rayon,clGreen); + if ((code=jaune_cli) and (clignotant)) or (code=jaune) then cercle(ACanvas,xJaune,yjaune,rayon,clorange); +end; + + +// dessine les feux sur une cible à 7 feux +procedure dessine_feu7(Acanvas : Tcanvas;x,y : integer;frX,frY : real;EtatSignal : word;orientation : integer); +var XBlanc,Yblanc,xJaune,yJaune,Xsem,YSem,Xvert,YVert,Xcarre,Ycarre,Xral1,Yral1,Xral2,YRal2, + Temp,rayon,LgImage,HtImage : integer; + ech : real; + code,combine : word; +begin + code_to_aspect(Etatsignal,code,combine); // et combine + rayon:=round(6*frX); + XBlanc:=13; YBlanc:=23; + Xral1:=13; YRal1:=11; + Xral2:=37; YRal2:=11; + xJaune:=13; yJaune:=66; + Xcarre:=13; Ycarre:=35; + XSem:=13; Ysem:=56; + XVert:=13; YVert:=45; + + LgImage:=Formprinc.Image7feux.Picture.Bitmap.Width; + HtImage:=Formprinc.Image7feux.Picture.Bitmap.Height; + + if (orientation=2) then + begin + //rotation 90° vers la gauche des feux + // calcul des facteurs de réduction pour la rotation + ech:=frY;frY:=frX;FrX:=ech; + Temp:=HtImage-yjaune;YJaune:=XJaune;Xjaune:=Temp; + Temp:=HtImage-yBlanc;YBlanc:=XBlanc;XBlanc:=Temp; + Temp:=HtImage-yRal1;YRal1:=XRal1;XRal1:=Temp; + Temp:=HtImage-yRal2;YRal2:=XRal2;XRal2:=Temp; + Temp:=HtImage-ycarre;Ycarre:=Xcarre;Xcarre:=Temp; + Temp:=HtImage-ySem;YSem:=XSem;XSem:=Temp; + Temp:=HtImage-yvert;Yvert:=Xvert;Xvert:=Temp; + end; + + if (orientation=3) then + begin + //rotation 90° vers la droite des feux + // calcul des facteurs de réduction pour la rotation + ech:=frY;frY:=frX;FrX:=ech; + Temp:=LgImage-Xjaune;XJaune:=YJaune;Yjaune:=Temp; + Temp:=LgImage-XSem;XSem:=YSem;YSem:=Temp; + Temp:=LgImage-Xvert;Xvert:=Yvert;Yvert:=Temp; + Temp:=LgImage-Xcarre;Xcarre:=Ycarre;Ycarre:=Temp; + Temp:=LgImage-Xblanc;Xblanc:=Yblanc;Yblanc:=Temp; + Temp:=LgImage-Xral1;Xral1:=Yral1;Yral1:=Temp; + Temp:=LgImage-Xral2;Xral2:=Yral2;Yral2:=Temp; + end; + + XJaune:=round(Xjaune*Frx)+x; YJaune:=round(Yjaune*Fry)+Y; + Xblanc:=round(XBlanc*FrX)+x; YBlanc:=round(YBlanc*FrY)+Y; + XRal1:=round(XRal1*FrX)+x; YRal1:=round(YRal1*FrY)+Y; + XRal2:=round(XRal2*FrX)+x; YRal2:=round(YRal2*FrY)+Y; + Xvert:=round(Xvert*FrX)+x; Yvert:=round(Yvert*FrY)+Y; + XSem:=round(XSem*FrX)+x; YSem:=round(YSem*FrY)+Y; + Xcarre:=round(Xcarre*FrX)+x; Ycarre:=round(Ycarre*FrY)+Y; + + // effacements + if not((code=blanc_cli) and clignotant) then cercle(ACanvas,xBlanc,yBlanc,rayon,grisF); + if not((code=ral_60) and clignotant) or not((combine=ral_60) and clignotant) then + begin + cercle(ACanvas,Xral1,Yral1,rayon,grisF);cercle(ACanvas,Xral2,Yral2,rayon,GrisF); + end; + if not((code=vert_cli) and clignotant) then cercle(ACanvas,xVert,yVert,rayon,GrisF); + cercle(ACanvas,xcarre,yCarre,rayon,GrisF);cercle(ACanvas,xSem,ySem,rayon,GrisF); + if not((code=jaune_cli) and clignotant) then cercle(ACanvas,xJaune,yJaune,rayon,GrisF); + if not((code=semaphore_cli) and clignotant) then cercle(ACanvas,xSem,ySem,rayon,GrisF); + + // Allumages + if (code=ral_30) or (combine=ral_30) or ((code=ral_60) or (combine=ral_60)) and clignotant then + begin + cercle(ACanvas,xRal1,yRal1,rayon,clOrange);cercle(ACanvas,xRal2,yRal2,Rayon,clOrange); + end; + if (code=jaune) or ((code=jaune_cli) and clignotant) then cercle(Acanvas,xjaune,yjaune,rayon,clOrange); + if ((code=semaphore_cli) and (clignotant)) or (code=semaphore) then cercle(ACanvas,xsem,ysem,rayon,clRed); + if ((code=vert_cli) and (clignotant)) or (code=vert) then cercle(ACanvas,xVert,yVert,rayon,clGreen); + if ((code=blanc_cli) and (clignotant)) or (code=blanc) then cercle(ACanvas,xBlanc,yBlanc,rayon,clWhite); + if (code=violet) then cercle(ACanvas,xblanc,yblanc,rayon,clViolet); + if code=carre then + begin + cercle(ACanvas,xCarre,yCarre,rayon,clRed); + cercle(ACanvas,xSem,ySem,rayon,clRed); + end; +end; + +// dessine les feux sur une cible à 9 feux +procedure dessine_feu9(Acanvas : Tcanvas;x,y : integer;frX,frY : real;etatsignal : word;orientation : integer); +var rayon, + XBlanc,Yblanc,xJaune,yJaune,Xsem,YSem,Xvert,YVert,Xcarre,Ycarre,Xral1,Yral1,Xral2,YRal2, + Xrap1,Yrap1,Xrap2,Yrap2,Temp : integer; + LgImage,HtImage,xt,yt : integer; + ech : real; + code,combine : word; +begin + rayon:=round(6*frX); + code_to_aspect(Etatsignal,code,combine); // et aspect + // mise à l'échelle des coordonnées des feux en fonction du facteur de réduction frX et frY et x et y (offsets) + + XBlanc:=13; YBlanc:=36; + Xral1:=13; YRal1:=24; + Xral2:=37; YRal2:=24; + xJaune:=13; yJaune:=80; + xRap1:=37; yRap1:=12; + xrap2:=37; yRap2:=37; + Xcarre:=13; Ycarre:=47; + XSem:=13; Ysem:=69; + XVert:=13; YVert:=58; + + LgImage:=Formprinc.Image9feux.Picture.Bitmap.Width; + HtImage:=Formprinc.Image9feux.Picture.Bitmap.Height; + + if (orientation=2) then + begin + //rotation 90° vers la gauche des feux + ech:=frY;frY:=frX;FrX:=ech; + Temp:=HtImage-yjaune;YJaune:=XJaune;Xjaune:=Temp; + Temp:=HtImage-yBlanc;YBlanc:=XBlanc;XBlanc:=Temp; + Temp:=HtImage-yRal1;YRal1:=XRal1;XRal1:=Temp; + Temp:=HtImage-yRal2;YRal2:=XRal2;XRal2:=Temp; + Temp:=HtImage-ycarre;Ycarre:=Xcarre;Xcarre:=Temp; + Temp:=HtImage-ySem;YSem:=XSem;XSem:=Temp; + Temp:=HtImage-yvert;Yvert:=Xvert;Xvert:=Temp; + Temp:=HtImage-yRap1;YRap1:=XRap1;XRap1:=Temp; + Temp:=HtImage-yRap2;YRap2:=XRap2;XRap2:=Temp; + end; + + if (orientation=3) then + begin + //rotation 90° vers la droite des feux + ech:=frY;frY:=frX;FrX:=ech; + Temp:=LgImage-Xjaune;XJaune:=YJaune;Yjaune:=Temp; + Temp:=LgImage-XSem;XSem:=YSem;YSem:=Temp; + Temp:=LgImage-Xvert;Xvert:=Yvert;Yvert:=Temp; + Temp:=LgImage-Xcarre;Xcarre:=Ycarre;Ycarre:=Temp; + Temp:=LgImage-Xblanc;Xblanc:=Yblanc;Yblanc:=Temp; + Temp:=LgImage-Xral1;Xral1:=Yral1;Yral1:=Temp; + Temp:=LgImage-Xral2;Xral2:=Yral2;Yral2:=Temp; + Temp:=LgImage-Xrap1;Xrap1:=Yrap1;Yrap1:=Temp; + Temp:=LgImage-Xrap2;Xrap2:=Yrap2;Yrap2:=Temp; + end; + + XJaune:=round(Xjaune*Frx)+x; YJaune:=round(Yjaune*Fry)+Y; + Xblanc:=round(XBlanc*FrX)+x; YBlanc:=round(YBlanc*FrY)+Y; + XRal1:=round(XRal1*FrX)+x; YRal1:=round(YRal1*FrY)+Y; + XRal2:=round(XRal2*FrX)+x; YRal2:=round(YRal2*FrY)+Y; + Xvert:=round(Xvert*FrX)+x; Yvert:=round(Yvert*FrY)+Y; + XSem:=round(XSem*FrX)+x; YSem:=round(YSem*FrY)+Y; + Xcarre:=round(Xcarre*FrX)+x; Ycarre:=round(Ycarre*FrY)+Y; + XRap1:=round(XRap1*FrX)+x; YRap1:=round(YRap1*FrY)+Y; + XRap2:=round(XRap2*FrX)+x; YRap2:=round(YRap2*FrY)+Y; + + // extinctions + if not((code=blanc_cli) and clignotant) then cercle(ACanvas,xBlanc,yBlanc,Rayon,grisF); + if not((code=ral_60) and clignotant) or not((combine=ral_60) and clignotant) then + begin + cercle(ACanvas,Xral1,Yral1,rayon,grisF);cercle(ACanvas,xRal2,yRal2,rayon,grisF); + end; + if not((code=jaune_cli) and clignotant) then cercle(ACanvas,xJaune,yJaune,rayon,grisF); + if not((code=rappel_60) and clignotant) or not((combine=rappel_60) and clignotant) then + begin + cercle(ACanvas,xrap1,yrap1,rayon,grisF);cercle(ACanvas,xrap2,yrap2,rayon,grisF); + end; + cercle(ACanvas,xcarre,Ycarre,rayon,grisF); // carré supérieur + if not((code=semaphore_cli) and clignotant) then cercle(ACanvas,xSem,ySem,rayon,grisF); + if not((code=vert_cli) and clignotant) then cercle(ACanvas,xvert,yvert,rayon,grisF); + + // allumages + if ((code=ral_60) and clignotant) or (code=ral_30) or + ((combine=ral_60) and clignotant) or (combine=ral_30) then + begin + cercle(ACanvas,Xral1,yRal1,rayon,clOrange);cercle(ACanvas,xral2,yral2,rayon,clOrange); + end; + + if ((code=rappel_60) and clignotant) or (code=rappel_30) or + ((combine=rappel_60) and clignotant) or (combine=rappel_30) then + begin + cercle(ACanvas,xrap1,yrap1,rayon,clOrange);cercle(ACanvas,xrap2,yrap2,rayon,clOrange); + end; + if ((code=jaune_cli) and clignotant) or (code=jaune) then cercle(Acanvas,xjaune,yjaune,rayon,clOrange); + if ((code=semaphore_cli) and clignotant) or (code=semaphore) then cercle(ACanvas,Xsem,ySem,rayon,clRed); + if ((code=vert_cli) and clignotant) or (code=vert) then cercle(ACanvas,xvert,yvert,rayon,clGreen); + if ((code=blanc_cli) and clignotant) or (code=blanc) then cercle(ACanvas,xBlanc,yBlanc,rayon,clWhite); + if (code=violet) then cercle(ACanvas,xblanc,yblanc,rayon,clViolet); + + if code=carre then + begin + cercle(ACanvas,xcarre,yCarre,rayon,clRed); + cercle(ACanvas,xsem,ysem,rayon,clRed); + end; +end; + + +// dessine les feux sur une cible directionnelle à 2 feux +procedure dessine_dir3(Acanvas : Tcanvas;EtatSignal : word); +begin + if EtatSignal=0 then + begin + cercle(ACanvas,11,13,6,GrisF); + cercle(ACanvas,22,13,6,GrisF); + cercle(ACanvas,33,13,6,GrisF); + end; + if EtatSignal=1 then + begin + cercle(ACanvas,11,13,6,clWhite); + cercle(ACanvas,22,13,6,GrisF); + cercle(ACanvas,33,13,6,grisF); + end; + if EtatSignal=2 then + begin + cercle(ACanvas,11,13,6,clWhite); + cercle(ACanvas,22,13,6,clWhite); + cercle(ACanvas,33,13,6,grisF); + end; + if EtatSignal=3 then + begin + cercle(ACanvas,11,13,6,clWhite); + cercle(ACanvas,22,13,6,clWhite); + cercle(ACanvas,33,13,6,clWhite); + end; +end; + +// dessine les feux sur une cible directionnelle à 4 feux +procedure dessine_dir4(Acanvas : Tcanvas;EtatSignal : word); +begin + if EtatSignal=0 then + begin + cercle(ACanvas,11,13,6,GrisF); + cercle(ACanvas,22,13,6,GrisF); + cercle(ACanvas,33,13,6,GrisF); + cercle(ACanvas,43,13,6,GrisF); + end; + if EtatSignal=1 then + begin + cercle(ACanvas,11,13,6,clWhite); + cercle(ACanvas,22,13,6,GrisF); + cercle(ACanvas,33,13,6,grisF); + cercle(ACanvas,43,13,6,GrisF); + end; + if EtatSignal=2 then + begin + cercle(ACanvas,11,13,6,clWhite); + cercle(ACanvas,22,13,6,clWhite); + cercle(ACanvas,33,13,6,grisF); + cercle(ACanvas,43,13,6,GrisF); + end; + if EtatSignal=3 then + begin + cercle(ACanvas,11,13,6,clWhite); + cercle(ACanvas,22,13,6,clWhite); + cercle(ACanvas,33,13,6,clWhite); + cercle(ACanvas,43,13,6,GrisF); + end; + if EtatSignal=4 then + begin + cercle(ACanvas,11,13,6,clWhite); + cercle(ACanvas,22,13,6,clWhite); + cercle(ACanvas,33,13,6,clWhite); + cercle(ACanvas,43,13,6,clWhite); + end; + if EtatSignal=5 then + begin + cercle(ACanvas,11,13,6,clWhite); + cercle(ACanvas,22,13,6,clWhite); + cercle(ACanvas,33,13,6,clWhite); + cercle(ACanvas,43,13,6,clWhite); + cercle(ACanvas,53,13,6,clWhite); + end; +end; + +procedure dessine_dir5(Acanvas : Tcanvas;EtatSignal : word); +begin + if EtatSignal=0 then + begin + cercle(ACanvas,11,13,6,GrisF); + cercle(ACanvas,22,13,6,GrisF); + cercle(ACanvas,33,13,6,GrisF); + cercle(ACanvas,43,13,6,GrisF); + cercle(ACanvas,53,13,6,GrisF); + end; + if EtatSignal=1 then + begin + cercle(ACanvas,11,13,6,clWhite); + cercle(ACanvas,22,13,6,GrisF); + cercle(ACanvas,33,13,6,grisF); + cercle(ACanvas,43,13,6,GrisF); + cercle(ACanvas,53,13,6,GrisF); + end; + if EtatSignal=2 then + begin + cercle(ACanvas,11,13,6,clWhite); + cercle(ACanvas,22,13,6,clWhite); + cercle(ACanvas,33,13,6,grisF); + cercle(ACanvas,43,13,6,GrisF); + cercle(ACanvas,53,13,6,GrisF); + end; + if EtatSignal=3 then + begin + cercle(ACanvas,11,13,6,clWhite); + cercle(ACanvas,22,13,6,clWhite); + cercle(ACanvas,33,13,6,clWhite); + cercle(ACanvas,43,13,6,GrisF); + cercle(ACanvas,53,13,6,GrisF); + end; + if EtatSignal=4 then + begin + cercle(ACanvas,11,13,6,clWhite); + cercle(ACanvas,22,13,6,clWhite); + cercle(ACanvas,33,13,6,clWhite); + cercle(ACanvas,43,13,6,clWhite); + cercle(ACanvas,53,13,6,GrisF); + end; + if EtatSignal=5 then + begin + cercle(ACanvas,11,13,6,clWhite); + cercle(ACanvas,22,13,6,clWhite); + cercle(ACanvas,33,13,6,clWhite); + cercle(ACanvas,43,13,6,clWhite); + cercle(ACanvas,53,13,6,clWhite); + end; +end; + +procedure dessine_dir6(Acanvas : Tcanvas;EtatSignal : word); +begin + if EtatSignal=0 then + begin + cercle(ACanvas,11,13,6,GrisF); + cercle(ACanvas,22,13,6,GrisF); + cercle(ACanvas,33,13,6,GrisF); + cercle(ACanvas,43,13,6,GrisF); + cercle(ACanvas,53,13,6,GrisF); + cercle(ACanvas,63,13,6,GrisF); + end; + if EtatSignal=1 then + begin + cercle(ACanvas,11,13,6,clWhite); + cercle(ACanvas,22,13,6,GrisF); + cercle(ACanvas,33,13,6,grisF); + cercle(ACanvas,43,13,6,GrisF); + cercle(ACanvas,53,13,6,GrisF); + cercle(ACanvas,63,13,6,GrisF); + end; + if EtatSignal=2 then + begin + cercle(ACanvas,11,13,6,clWhite); + cercle(ACanvas,22,13,6,clWhite); + cercle(ACanvas,33,13,6,grisF); + cercle(ACanvas,43,13,6,GrisF); + cercle(ACanvas,53,13,6,GrisF); + cercle(ACanvas,63,13,6,GrisF); + end; + if EtatSignal=3 then + begin + cercle(ACanvas,11,13,6,clWhite); + cercle(ACanvas,22,13,6,clWhite); + cercle(ACanvas,33,13,6,clWhite); + cercle(ACanvas,43,13,6,GrisF); + cercle(ACanvas,53,13,6,GrisF); + cercle(ACanvas,63,13,6,GrisF); + end; + if EtatSignal=4 then + begin + cercle(ACanvas,11,13,6,clWhite); + cercle(ACanvas,22,13,6,clWhite); + cercle(ACanvas,33,13,6,clWhite); + cercle(ACanvas,43,13,6,clWhite); + cercle(ACanvas,53,13,6,GrisF); + cercle(ACanvas,63,13,6,GrisF); + end; + if EtatSignal=5 then + begin + cercle(ACanvas,11,13,6,clWhite); + cercle(ACanvas,22,13,6,clWhite); + cercle(ACanvas,33,13,6,clWhite); + cercle(ACanvas,43,13,6,clWhite); + cercle(ACanvas,53,13,6,clWhite); + cercle(ACanvas,63,13,6,GrisF); + end; + if EtatSignal=6 then + begin + cercle(ACanvas,11,13,6,clWhite); + cercle(ACanvas,22,13,6,clWhite); + cercle(ACanvas,33,13,6,clWhite); + cercle(ACanvas,43,13,6,clWhite); + cercle(ACanvas,53,13,6,clWhite); + cercle(ACanvas,63,13,6,clWhite); + end; +end; + + +// dessine les feux sur une cible directionnelle à 2 feux +procedure dessine_dir2(Acanvas : Tcanvas;EtatSignal : word); +begin + if EtatSignal=0 then + begin + cercle(ACanvas,12,13,6,GrisF); + cercle(ACanvas,25,13,6,GrisF); + end; + if EtatSignal=1 then + begin + cercle(ACanvas,12,13,6,clWhite); + cercle(ACanvas,25,13,6,GrisF); + end; + if EtatSignal=2 then + begin + cercle(ACanvas,12,13,6,clWhite); + cercle(ACanvas,25,13,6,clWhite); + end; + +end; + + +// affiche un texte dans la fenêtre +procedure Affiche(s : string;lacouleur : TColor); +begin + couleur:=lacouleur; + with formprinc.ListBox1 do + begin + Items.addObject(s,pointer(lacouleur)); + TopIndex:= Items.Count - 1; + end; +end; + + +// renvoie l'index du feu dans le tableau feux[] en fonction de son adresse +//si pas de feu renvoie 0 +function Index_feu(adresse : integer) : integer; +var i : integer; + trouve : boolean; +begin +i:=1; + repeat + trouve:=feux[i].adresse=adresse; + if not(trouve) then inc(i); + until (trouve) or (i>=100); + if trouve then Index_feu:=i else Index_feu:=0 ; +end; + +// dessine l'aspect du feu en fonction de son adresse dans la partie droite de droite +procedure Dessine_feu_mx(CanvasDest : Tcanvas;x,y : integer;FrX,frY : real;adresse : integer;orientation : integer); +var i : integer; +begin + i:=Index_feu(adresse); + if i<>0 then + case feux[i].aspect of + // feux de signalisation + 2 : dessine_feu2(CanvasDest,x,y,frx,fry,EtatSignalCplx[adresse],orientation); + 3 : dessine_feu3(CanvasDest,x,y,frx,fry,EtatSignalCplx[adresse],orientation); + 4 : dessine_feu4(CanvasDest,x,y,frx,fry,EtatSignalCplx[adresse],orientation); + 5 : dessine_feu5(CanvasDest,x,y,frx,fry,EtatSignalCplx[adresse],orientation); + 7 : dessine_feu7(CanvasDest,x,y,frx,fry,EtatSignalCplx[adresse],orientation); + 9 : dessine_feu9(CanvasDest,x,y,frx,fry,EtatSignalCplx[adresse],orientation); + // indicateurs de direction + 12 : dessine_dir2(CanvasDest,EtatSignalCplx[adresse]); + 13 : dessine_dir3(CanvasDest,EtatSignalCplx[adresse]); + 14 : dessine_dir4(CanvasDest,EtatSignalCplx[adresse]); + 15 : dessine_dir5(CanvasDest,EtatSignalCplx[adresse]); + 16 : dessine_dir6(CanvasDest,EtatSignalCplx[adresse]); + end; +end; + +Procedure TFormprinc.ImageOnClick(Sender : Tobject); +var s : string; + P_image_pilote : Timage; + i,erreur : integer; + +begin + P_image_pilote:=Sender as TImage; // récupérer l'objet image de la forme pilote + s:=P_Image_pilote.Hint; + //Affiche(s,clyellow); + i:=pos('@',s); if i<>0 then delete(s,i,1); + i:=pos('=',s); if i<>0 then delete(s,i,1); + i:=pos(' ',s); + if i<>0 then s:=copy(s,1,i-1); + val(s,AdrPilote,erreur); + i:=Index_feu(AdrPilote); + + with Formpilote do + begin + TFormPilote.Create(Self); + show; + + ImagePilote.top:=40;ImagePilote.left:=220; + ImagePilote.Parent:=FormPilote; + ImagePilote.Picture.Bitmap.TransparentMode:=tmAuto; + ImagePilote.Picture.Bitmap.TransparentColor:=clblue; + ImagePilote.Transparent:=true; + ImagePilote.Picture.BitMap:=Feux[i].Img.Picture.Bitmap; + LabelTitrePilote.Caption:='Pilotage du signal '+intToSTR(AdrPilote); + EtatSignalCplx[0]:=EtatSignalCplx[AdrPilote]; + if feux[i].aspect>10 then + begin + GroupBox1.Visible:=false; + GroupBox2.Visible:=false; + LabelNbFeux.Visible:=true; + EditNbreFeux.Visible:=true; + EditNbreFeux.Text:='1'; + end + else + begin + LabelNbFeux.Visible:=False; + EditNbreFeux.Visible:=false; + GroupBox1.Visible:=true; + GroupBox2.Visible:=true; + end; + end; +end; + +// créée une image dynamiquement pour un nouveau feu déclaré dans le fichier de config +procedure cree_image(rang : integer); +var TypeFeu : integer; + s : string; +const espY = 15;//40; // espacement Y entre deux lignes de feux +begin + TypeFeu:=feux[rang].aspect; + Feux[rang].Img:=Timage.create(Formprinc.ScrollBox1); + with Feux[rang].Img do + begin + Parent:=Formprinc.ScrollBox1; // dire que l'image est dans la scrollBox1 + Top:=(HtImg+espY+20)*((rang-1) div NbreImagePLigne); // détermine les dimensions + Left:=10+ (LargImg+5)*((rang-1) mod (NbreImagePLigne)); + //Left:=10+(LargImg+10)*((rang-1) mod (NbreImagePLigne)); + s:='@='+inttostr(feux[rang].Adresse)+' Decodeur='+intToSTR(feux[rang].Decodeur)+' Adresse détecteur associé='+intToSTR(feux[rang].Adr_det1)+ + ' Adresse élement suivant='+intToSTR(feux[rang].Adr_el_suiv1); + if feux[rang].Btype_suiv1=2 then s:=s+' (aig)'; + Hint:=s; + onClick:=Formprinc.Imageonclick; + //width:=100; + //Height:=100; + Picture.Bitmap.TransparentMode:=tmAuto; + Picture.Bitmap.TransparentColor:=clblue; + Transparent:=true; + + case TypeFeu of // charger le bit map depuis le fichier + 2 : picture.bitmap:=Formprinc.Image2feux.picture.Bitmap; + 3 : picture.bitmap:=Formprinc.Image3feux.picture.Bitmap; + 4 : picture.bitmap:=Formprinc.Image4feux.picture.Bitmap; + 5 : picture.bitmap:=Formprinc.Image5feux.picture.Bitmap; + 7 : picture.bitmap:=Formprinc.Image7feux.picture.Bitmap; + 9 : picture.bitmap:=Formprinc.Image9feux.picture.Bitmap; + + 12 : picture.bitmap:=Formprinc.Image2Dir.picture.Bitmap; + 13 : picture.bitmap:=Formprinc.Image3Dir.picture.Bitmap; + 14 : picture.bitmap:=Formprinc.Image4Dir.picture.Bitmap; + 15 : picture.bitmap:=Formprinc.Image5Dir.picture.Bitmap; + 16 : picture.bitmap:=Formprinc.Image6Dir.picture.Bitmap; + end; + + // mettre rouge par défaut + if TypeFeu=2 then EtatSignalCplx[feux[rang].adresse]:=violet_F; + if TypeFeu=3 then EtatSignalCplx[feux[rang].adresse]:=semaphore_F; + if (TypeFeu>3) and (TypeFeu<10) then EtatSignalCplx[feux[rang].adresse]:=carre_F; + if TypeFeu>10 then EtatSignalCplx[feux[rang].adresse]:=0; + + dessine_feu_mx(Feux[rang].Img.Canvas,0,0,1,1,feux[rang].adresse,1); + //if feux[rang].aspect=5 then cercle(Picture.Bitmap.Canvas,13,22,6,ClYellow); + end; + + // créée le label pour afficher son adresse + Feux[rang].Lbl:=Tlabel.create(Formprinc.ScrollBox1); + with Feux[rang].Lbl do + begin + caption:='@'+IntToSTR(Feux[rang].adresse); + Parent:=Formprinc.ScrollBox1; + width:=100;height:=20; + Top:=HtImg+((HtImg+EspY+20)*((rang-1) div NbreImagePLigne)); + Left:=10+ (LargImg+5)*((rang-1) mod (NbreImagePLigne)); + BringToFront; + end; + + // créée le checkBox si un feu blanc est déclaré sur ce feu + if feux[rang].FeuBlanc then + begin + Feux[rang].check:=TCheckBox.create(Formprinc.ScrollBox1); // ranger l'adresse de la Checkbox dans la structure du feu + Feux[rang].check.onClick:=formprinc.proc_checkBoxFB; // affecter l'adresse de la procédure de traitement quand on clique dessus + Feux[rang].check.Hint:=intToSTR(rang); // affecter l'index du feu dans le HINT pour pouvoir le retrouver plus tard + + with Feux[rang].Check do + begin + caption:='dem FB'; + Parent:=Formprinc.ScrollBox1; + width:=100;height:=15; + Top:=HtImg+15+((HtImg+EspY+20)*((rang-1) div NbreImagePLigne)); + Left:=10+ (LargImg+5)*((rang-1) mod (NbreImagePLigne)); + BringToFront; + end; + end; +end; + +// calcule le checksum d'une trame +Function Checksum(s : string) : string; +var i : integer; + check : byte; +begin + check:=0; + for i:=1 to length(s) do + begin + check:=check xor ord(s[i]); + end; + checksum:=s+char(check); +end; + +// renvoie une chaine ASCI Hexa affichable à partir d'une chaîne +function chaine_HEX(s: string) : string; +var i : integer; + sa_hex: string; +begin + sa_hex:=''; + for i:=1 to length(s) do + begin + sa_hex:=sa_hex+IntToHex(ord(s[i]),2)+' '; + end; + chaine_HEX:=sa_hex; +end; + +// Affiche une chaîne en Hexa Ascii +procedure affiche_chaine_hex(s : string;couleur : Tcolor); +begin + if trace then Affiche(chaine_HEX(s),couleur); +end; + +// temporisation en x 100 ms (0,1 s) +procedure Tempo(ValTemps : integer); +begin + temps:=Valtemps; + repeat + Application.ProcessMessages; + until (temps<=0); +end; + + +// envoi d'une chaîne à la centrale par USBLenz ou socket, n'attend pas l'ack +// ici on envoie pas à CDM +procedure envoi_ss_ack(s : string); +var i,timeout,valto : integer; +begin +// com:=formprinc.MSCommUSBLenz; + s:=entete+s+suffixe; + if Trace then Affiche('Tick='+IntToSTR(tick)+'/Env '+chaine_Hex(s),ClGreen); + // par port com-usb + + if portCommOuvert then + begin + if (protocole=4) then // le protocole 4 contrôle simplement la ligne CTS avant de transmettre et temporise octet par octet + begin + i:=1; + valto:=10; + //Affiche('envoi en tenant compte cts',clyellow); + repeat + timeout:=0; + repeat + //Application.ProcessMessages; + inc(timeout); + Sleep(20); + until (Formprinc.MSCommUSBLenz.CTSHolding=true) or (timeout>valto); + if timeout<=valto then + begin + //if formprinc.MSCommUSBLenz.CTSHolding then sa:='CTS=1 ' else sa:='CTS=0 '; + FormPrinc.MSCommUSBLenz.Output:=s[i]; + //if terminal then Affiche(sa+s[i],clyellow) else Affiche(sa+chaine_hex(s[i]),clyellow); + inc(i); + end; + until (i=length(s)+1) or (timeout>valto); + if timeout>valto then affiche('Erreur attente interface trop longue',clred); + end; + // protocole Rts Cts ou sans temporisation + if (protocole=2) or (tempoOctet=0) then begin FormPrinc.MSCommUSBLenz.Output:=s;exit;end; + // sans procotole ou xon xoff ou xon-rts + if (protocole=0) or (protocole=1) or (protocole=3) then + begin + for i:=1 to length(s) do + begin + FormPrinc.MSCommUSBLenz.Output:=s[i]; + //if terminal then Affiche(s[i],clyellow) else Affiche(chaine_hex(s[i]),clyellow); + Application.ProcessMessages; + Sleep(TempoOctet); + end; + end; + end; + + // par socket (ethernet) + if parSocket then Formprinc.ClientSocketLenz.Socket.SendText(s); +end; + +// envoi d'une chaîne à la centrale Lenz par USBLenz ou socket, puis attend l'ack ou le nack +function envoi(s : string) : boolean; +var temps : integer; +begin + if Hors_tension2=false then + begin + envoi_ss_ack(s); + // attend l'ack + ack:=false;nack:=false; + if portCommOuvert or ParSocket then + begin + temps:=0; + repeat + Application.processMessages; + inc(temps);Sleep(100); + until ferme or ack or nack or (temps>TimoutMaxInterface); // l'interface répond < 5s en mode normal et 1,5 mn en mode programmation + if not(ack) or nack then + begin + Affiche('Pas de réponse de l''interface',clRed);inc(pasreponse); + // &&&&if pasreponse>3 then hors_tension2:=true; + end; + if ack then begin pasreponse:=0;hors_tension2:=false;end; + end; + end; + envoi:=ack; +end; + +Function chaine_CDM_Func(fonction,etat : integer;train : string) : string; +var so,sx,s : string; +begin + { exemple de commande envoyée au serveur pour une fonction + C-C-00-0002-CMDTRN-DCCSF|029|03|NAME=nomdutrain;CSTEP=0;FXnumfonction=etat; + + C-C-00-0002-CMDTRN-DCCSF|029|03|NAME=train;CSTEP=0;FX0=0; + C-C-00-0002-CMDTRN-DCCSF|029|03|NAME=train;CSTEP=0;FX1=0; + C-C-00-0002-CMDTRN-DCCSF|047|06|NAME=train;CSTEP=0;FX0=1;FX1=1;FX2=1;FX3=1; + maxi=C-C-00-0002-CMDTRN-DCCSF|111|16|NAME=train;CSTEP=0;FX0=1;FX1=1;FX2=1;FX3=1;FX4=0;FX5=0;FX6=0;FX7=0;FX8=0;FX9=0;FX10=0;FX11=0;FX12=0;FX13=0; + } + so:=place_id('C-C-01-0004-CMDTRN-DCCSF'); + s:=s+'NAME='+train+';'; + s:=s+'CSTEP=0;'; + s:=s+'FX'+intToSTR(fonction)+'='+intToSTR(etat)+';'; + sx:=format('%.*d',[2,3])+'|'; // 3 paramètres + so:=so+ '|'+format('%.*d',[3,length(s)+length(sx)])+'|'+sx; + chaine_CDM_Func:=so+s; +end; + +// prépare la chaîne de commande pour un accessoire via CDM +Function chaine_CDM_Acc(adresse,etat1 : integer) : string; +var so,sx,s : string; +begin + { exemple de commande envoyée au serveur pour un manoeuvrer accessoire + C-C-00-0004-CMDACC-DCCAC|018|02|AD=100;STATE=1; + " NAME : nom de l'aiguille + " OBJ: numéro CDM-Rail de l'aiguille (index) + " AD: adresse (DCC) de l'aiguille + " AD2: adresse #2 (DCC) de l'aiguille (TJD bi-moteurs ou aiguille triples) + " STATE: état de l'aiguille + o 0: position droite (non déviée) + o 1: dévié (TJD, bretelles doubles) + o 2: dévié droit + o 3: dévié gauche + o 4: pos. droite #2 (TJD 4 états) + o 5: pos. déviée #2 (TJD 4 états) + } + so:=place_id('C-C-01-0004-CMDACC-DCCAC'); + s:=s+'AD='+format('%.*d',[1,adresse])+';'; + s:=s+'STATE='+format('%.*d',[1,etat1])+';'; + + sx:=format('%.*d',[2,2])+'|'; // 2 paramètres + so:=so+ '|'+format('%.*d',[3,length(s)+length(sx)])+'|'+sx; + + chaine_CDM_Acc:=so+s; +end; + +procedure envoie_fonction_CDM(fonction,etat : integer;train : string); +var s : string; +begin + s:=chaine_CDM_Func(fonction,etat,train); + envoi_cdm(s); +end; + + +// active ou désactive une sortie par xpressnet. Une adresse comporte deux sorties identifiées par "octet" +// Adresse : adresse de l'accessoire +// octet : numéro (1-2) de la sortie à cette adresse +// etat : false (désactivé) true (activé) +procedure pilote_direct(adresse:integer;octet : byte;etat : boolean); +var groupe : integer ; + fonction : byte; + s : string; +begin + groupe:=(adresse-1) div 4; + fonction:=((adresse-1) mod 4)*2 + (octet-1); + // pilotage + if etat then + s:=#$52+Char(groupe)+char(fonction or $80) + else + s:=#$52+Char(groupe)+char(fonction or $88); + + s:=checksum(s); + envoi(s); // envoi de la trame et attente Ack +end; + +procedure pilote_direct01(adresse:integer;octet:integer); +var groupe : integer ; + fonction : byte; + s : string; +begin + if octet=0 then octet:=2; + groupe:=(adresse-1) div 4; + fonction:=((adresse-1) mod 4)*2 + (octet-1); + // pilotage + if octet=2 then + s:=#$52+Char(groupe)+char(fonction or $80) + else + s:=#$52+Char(groupe)+char(fonction or $88); + + s:=checksum(s); + if envoi(s) then exit else envoi(s); // envoi de la trame et attente Ack sinon renvoyer +end; + + +// pilotage d'un accessoire (décodeur d'aiguillage, de signal) +// octet = 0 ou 1 ou 2 +// la sortie "octet" est mise à 1 puis à 0 +// acc = aig ou feu +procedure pilote_acc(adresse : integer;octet : byte;Acc : TAccessoire); +var groupe,temps : integer ; + fonction : byte; + s : string; +begin + //Affiche(IntToSTR(adresse)+' '+intToSTr(octet),clYellow); + // pilotage par CDM rail + if CDM_connecte then + begin + //AfficheDebug(intToSTR(adresse),clred); + if debug_dec_sig and (acc=feu) then AfficheDebug('Tick='+IntToSTR(Tick)+' signal '+intToSTR(adresse)+' '+intToSTR(octet),clorange); + s:=chaine_CDM_Acc(adresse,octet); + envoi_CDM(s); + if (acc=feu) and not(Raz_Acc_signaux) then exit; + if debug_dec_sig and (acc=feu) then AfficheDebug('Tick='+IntToSTR(Tick)+' signal '+intToSTR(adresse)+' '+intToSTR(octet),clorange); + s:=chaine_CDM_Acc(adresse,0); + envoi_CDM(s); + exit; + end; + + // pilotage par USB ou par réseau de la centrale + // test si pilotage inversé + // Affiche('Accessoire '+intToSTR(adresse),clLime); + if hors_tension2=false then + begin + if aiguillage[adresse].inversion=1 then + begin + if octet=1 then octet:=2 else octet:=1; + end; + + if (octet=0) or (octet>2) then exit; + //if (octet>2) then exit; + groupe:=(adresse-1) div 4; + fonction:=((adresse-1) mod 4)*2 + (octet-1); + // pilotage à 1 + s:=#$52+Char(groupe)+char(fonction or $88); // activer la sortie + s:=checksum(s); + if debug_dec_sig and (acc=feu) then AfficheDebug('Tick='+IntToSTR(Tick)+' signal '+intToSTR(adresse)+' '+intToSTR(octet),clorange); + envoi(s); // envoi de la trame et attente Ack + // si l'accessoire est un feu et sans raz des signaux, sortir + if (acc=feu) and not(Raz_Acc_signaux) then exit; + + + // si aiguillage, faire une temporisation + //if (index_feu(adresse)=0) or (Acc=aig) then + if Acc=Aig then + begin + temps:=aiguillage[adresse].temps;if temps=0 then temps:=4; + if portCommOuvert or ParSocket then tempo(temps); + end; + sleep(50); + + // pilotage à 0 pour éteindre le pilotage de la bobine du relais + s:=#$52+Char(groupe)+char(fonction or $80); // désactiver la sortie + s:=checksum(s); + if debug_dec_sig and (acc=feu) then AfficheDebug('Tick='+IntToSTR(Tick)+' signal '+intToSTR(adresse)+' 0',clorange); + envoi(s); // envoi de la trame et attente Ack + end; +end; + +// pilote accessoire en entrée 0->2 1->1 +procedure pilote_acc01(adresse : integer;octet : byte); +var groupe : integer ; + fonction : byte; + s : string; +begin + // test si pilotage inversé + if octet=0 then octet:=2; + if aiguillage[adresse].inversion=1 then + begin + if octet=1 then octet:=2 else octet:=1; + end; + if (octet=0) or (octet>2) then exit; + groupe:=(adresse-1) div 4; + fonction:=((adresse-1) mod 4)*2 + (octet-1); + // pilotage à 1 + s:=#$52+Char(groupe)+char(fonction or $88); // activer la sortie + s:=checksum(s); + envoi(s); // envoi de la trame et attente Ack + sleep(10); // temps minimal pour ne pas avoir le défaut station occupée qd on pilote un signal leb + //temps:=aiguillage[adresse].temps;if temps=0 then temps:=4; + // si l'accessoire est un feu, fixer l tempo à 1 + //if index_feu(adresse)<>0 then temps:=1; + + //if portCommOuvert or ParSocket then tempo(temps); + // pilotage à 0 pour éteindre le pilotage de la bobine du relais + s:=#$52+Char(groupe)+char(fonction or $80); // désactiver la sortie + s:=checksum(s); + envoi(s); // envoi de la trame et attente Ack +end; + +procedure vitesse_loco(loco : integer;vitesse : integer;sens : boolean); +var s : string; +begin + if sens then vitesse:=vitesse or 128; + s:=#$e4+#$13+#$0+char(loco)+char(vitesse); + s:=checksum(s); + envoi(s); +end; + +// fonctions sur les bits +function testBit(n : word;position : integer) : boolean; +begin + testBit:=n and (1 shl position) = (1 shl position); +end; + +Function RazBit(n : word;position : integer) : word; +begin + RazBit:=n and not(1 shl position); +end; + +Function SetBit(n : word;position : integer) : word; +begin + SetBit:=n or (1 shl position); +end; + + + +// renvoie la chaîne de l'état du signal +function chaine_signal(etat : word) : string; +var aspect,combine : word; + s : string; +begin + code_to_aspect(etat,aspect,combine); + s:=''; + if aspect=16 then s:='' else s:=etatSign[aspect]; + if combine<>16 then + begin + if aspect<>16 then s:=s+'+'; + s:=s+etatSign[combine]; + end; + chaine_signal:=s; +end; + +// mise à jour état signal complexe dans le tableau de bits du signal EtatSignalCplx */ +// adresse : adresse du signal complexe +// Aspect : code représentant l'état du signal de 0 à 15 +procedure Maj_Etat_Signal(adresse,aspect : integer); +var i : integer; +begin + if testBit((EtatSignalCplx[adresse]),aspect)=false then // si le bit dans l'état du signal n'est pas allumé, procéder. + begin + // effacement du motif de bits en fonction du nouvel état demandé suivant la règle des signaux complexes + if (aspect<=blanc_cli) then + begin + EtatSignalCplx[adresse]:=0; //Tout aspect <=7 efface les autres + end; + if (aspect=jaune) then // jaune + begin + EtatSignalCplx[adresse]:=RazBit(EtatSignalCplx[adresse],jaune_cli); // cas du jaune: efface le bit du jaune clignotant (bit 9) + EtatSignalCplx[adresse]:=RazBit(EtatSignalCplx[adresse],ral_30); // cas du jaune: efface le bit du ral_30 (bit 10) + EtatSignalCplx[adresse]:=RazBit(EtatSignalCplx[adresse],ral_60); // cas du jaune: efface le bit du ral_60 (bit 11) + EtatSignalCplx[adresse]:=EtatSignalCplx[adresse] and not($00FF); // et effacer les bits 0 à 7 + end; + if (aspect=jaune_cli) then // jaune clignotant + begin + EtatSignalCplx[adresse]:=RazBit(EtatSignalCplx[adresse],jaune); // cas du jaunecli: efface le bit du jaune (bit 8) + EtatSignalCplx[adresse]:=EtatSignalCplx[adresse] and $FF00; // et effacer les bits 0 à 7 + end; + if (aspect=ral_30) then // ralentissement 30 + begin + EtatSignalCplx[adresse]:=EtatSignalCplx[adresse] and not($3BFF); // cas du ral 30: efface les bits 0 1 2 3 4 5 6 7 8 9 11 12 et 13 : 11 1000 1111 1111 + end; + if (aspect=ral_60) then // ralentissement 60 + begin + EtatSignalCplx[adresse]:=EtatSignalCplx[adresse] and not($35FF); // cas du ral 60: efface les bits 8 10 12 et 13 et de 0 à 7 : 11 0100 1111 1111 + end; + if (aspect=rappel_30) then // rappel 30 + begin + EtatSignalCplx[adresse]:=EtatSignalCplx[adresse] and not($2cff); // cas du rappel 30: efface les bits 0 1 2 3 4 5 6 7 10 11 et 13 : 10 1100 1111 0000 + end; + if (aspect=rappel_60) then // rappel 60 + begin + EtatSignalCplx[adresse]:=EtatSignalCplx[adresse] and not($1Cff); // cas du rappel 60: efface les bits 0 1 2 3 4 5 6 7 10 11 et 12 1 1100 1111 0000 + end; + if (aspect=aspect8) then // ral_60_jaune_cli décodeur LDT + begin + EtatSignalCplx[adresse]:=jaune_cli_F or ral_60_F; // cas du ralentissement 60 + avertissement clignotant : efface les bits 10 11 et 12 + end; + if (aspect<>aspect8) then + begin + EtatSignalCplx[adresse]:=SetBit(EtatSignalCplx[adresse],aspect); // allume le numéro du bit de la fonction du signal + // Affiche(IntToSTR(EtatSignalCplx[adresse]),clyellow); + end; + end; + // mise à jour de l'état du signal dans le tableau Feux + i:=Index_feu(adresse); + feux[i].EtatSignal:=EtatSignalCplx[adresse]; +end; + + +{============================================= +envoie les données au décodeur digital bahn équipé du logiciel "led_schalten" +sur un panneau directionnel - adresse : adresse du signal - code de 1 à 3 pour allumer +; le panneau directionnel à 1, 2 ou 3 leds. +============================================== } +procedure envoi_directionBahn(adr : integer;code : integer); +var i : integer; +begin + if (EtatSignalCplx[adr]<>code) then + begin + if (traceSign) then Affiche('Signal directionnel: ad'+IntToSTR(adr)+'='+intToSTR(code),clOrange); + if AffSignal then AfficheDebug('Signal directionnel: ad'+IntToSTR(adr)+'='+intToSTR(code),clOrange); + + case code of + 0 : begin pilote_acc(adr,1,feu); // sortie 1 à 0 + sleep(tempoFeu); + pilote_acc(adr+1,1,feu); // sortie 2 à 0 + sleep(Tempofeu); + pilote_acc(adr+2,1,feu); // sortie 3 à 0 + sleep(TempoFeu); + end; + 1 : begin pilote_acc(adr,2,feu); // sortie 1 à 1 + sleep(tempoFeu); + pilote_acc(adr+1,1,feu); // sortie 2 à 0 + sleep(Tempofeu); + pilote_acc(adr+2,1,feu); // sortie 3 à 0 + sleep(TempoFeu); + end; + 2 : begin pilote_acc(adr,2,feu); // sortie 1 à 1 + sleep(tempoFeu); + pilote_acc(adr+1,2,feu); // sortie 2 à 1 + sleep(Tempofeu); + pilote_acc(adr+2,1,feu); // sortie 3 à 0 + sleep(TempoFeu); + end; + 3 : begin pilote_acc(adr,2,feu); // sortie 1 à 1 + sleep(tempoFeu); + pilote_acc(adr+1,2,feu); // sortie 2 à 1 + sleep(Tempofeu); + pilote_acc(adr+2,2,feu); // sortie 3 à 1 + sleep(TempoFeu); + end; + end; + EtatSignalCplx[adr]:=code; + Dessine_feu_mx(Feux[Index_Feu(adr)].Img.Canvas,0,0,1,1,adr,1); + end; +end; + + +{ ============================================= +envoie les données au signal de direction pour un décodeur CDF +adresse : adresse du signal - code de 1 à 3 pour allumer +le panneau directionnel à 1, 2, 3 ou 4 leds. +============================================== } +procedure envoi_directionCDF(adr : integer;code : integer); +begin + if (EtatSignalCplx[adr]<>code) then + begin + if traceSign then Affiche('signal directionnel CDF: '+IntToSTR(adr)+' '+intToSTR(code),ClOrange); + if AffSignal then AfficheDebug('signal directionnel CDF: '+IntToSTR(adr)+' '+intToSTR(code),ClOrange); + + case code of + // éteindre toutes les leds + 0 : + begin + pilote_acc(adr,1,feu) ; + sleep(200); + end; + // code 1 : allume le feu le plus à gauche + 1 : + begin + pilote_acc(adr,2,feu) ; + sleep(200); + end; + 2 : //allume 2 feux + begin + pilote_acc(adr+1,1,feu) ; + sleep(200); + end; + // code 3 : allume 3 feux + 3 : + begin + pilote_acc(adr+1,2,feu) ; + sleep(200); + end; + end; + EtatSignalCplx[adr]:=code; + end; +end; + +procedure Envoi_DirectionLEB(Adr : integer;code : integer); +begin + if (EtatSignalCplx[adr]<>code) then + begin + if traceSign then Affiche('signal directionnel LEB: '+IntToSTR(adr)+' '+intToSTR(code),ClOrange); + if aFFsIGNAL then AfficheDebug('signal directionnel LEB: '+IntToSTR(adr)+' '+intToSTR(code),ClOrange); + + case code of + 0 : begin pilote_acc(adr+5,2,feu) ; pilote_acc(adr+6,2,feu) ;end; //00 + 1 : begin pilote_acc(adr+5,1,feu) ; pilote_acc(adr+6,2,feu) ;end; //10 + 2 : begin pilote_acc(adr+5,2,feu) ; pilote_acc(adr+6,1,feu) ;end; //01 + 3 : begin pilote_acc(adr+5,1,feu) ; pilote_acc(adr+6,1,feu) ;end; //11 + end; + EtatSignalCplx[adr]:=code; + end; +end; + +{========================================================================== +envoie les données au décodeur CDF pour un signal +===========================================================================*} +procedure envoi_CDF(adresse : integer); +var index : integer; + code,aspect,combine : word; + s : string; +begin + if (ancien_tablo_signalCplx[adresse]<>EtatSignalCplx[adresse]) then //; && (stop_cmd==FALSE)) + begin + ancien_tablo_signalCplx[adresse]:=EtatSignalCplx[adresse]; + code:=EtatSignalCplx[adresse]; + code_to_aspect(code,aspect,combine); + s:='Signal CDF: ad'+IntToSTR(adresse)+'='+chaine_signal(code); + if traceSign then affiche(s,clOrange); + if Affsignal then afficheDebug(s,clOrange); + + if (aspect=carre) then pilote_acc(adresse,2,feu) ; + if (aspect=semaphore) then pilote_acc(adresse,1,feu) ; + if (aspect=vert) then pilote_acc(adresse+1,1,feu) ; + if (aspect=jaune) then pilote_acc(adresse+1,2,feu); + // signalisation non combinée rappel 30 seul + if (aspect=rappel_30) then pilote_acc(adresse+1,1,feu); + + // signalisation combinée - rappel 30 + avertissement - à tester...... + if (Combine=0) then pilote_acc(adresse+2,1,feu) ; // éteindre rappel 30 + if (Combine=rappel_30) then pilote_acc(adresse+2,2,feu) ; // allumer rappel 30 + end; +end; + +{========================================================================== +envoie les données au décodeur LEB pour un signal +===========================================================================*} +procedure envoi_LEB(adresse : integer); +var code,aspect,combine : word; + s : string; + procedure envoi5_LEB(selection :byte); + var i : integer; + begin + s:=''; + for i:=0 to 4 do + begin + if (testBit(selection,i)) then begin pilote_acc(adresse+i,1,feu);s:=s+'1';end + else begin pilote_acc(adresse+i,2,feu) ; s:=s+'0';end; + //if (testBit(selection,i)) then begin pilote_acc(adresse+i,1);s:=s+'1';end + //else begin pilote_acc(adresse+i,2) ; s:=s+'0';end; + //Sleep(60); + end; + //Affiche(inttoStr(selection),clOrange); + //Affiche(s,clOrange); + end; +begin + +if (ancien_tablo_signalCplx[adresse]<>EtatSignalCplx[adresse]) then //; && (stop_cmd==FALSE)) +begin + ancien_tablo_signalCplx[adresse]:=EtatSignalCplx[adresse]; + code:=EtatSignalCplx[adresse]; + code_to_aspect(code,aspect,combine); + s:='Signal LEB: ad'+IntToSTR(adresse)+'='+chaine_signal(code); + if traceSign then affiche(s,clOrange); + if Affsignal then afficheDebug(s,clOrange); + + Sleep(60); // si le feu se positionne à la suite d'un positionnement d'aiguillage, on peut avoir le message station occupée + //Affiche(IntToSTR(aspect)+' '+inttoSTR(combine),clOrange); + if (Combine=16) then + begin + if (aspect=carre) then envoi5_LEB(0); + if (aspect=violet) then envoi5_LEB(1); + if (aspect=blanc_cli) then envoi5_LEB(2); + if (aspect=blanc) then envoi5_LEB(3); + if (aspect=semaphore) then envoi5_LEB(4); + if (aspect=semaphore_cli) then envoi5_LEB(5); + if (aspect=jaune) then envoi5_LEB(8); + if (aspect=jaune_cli) then envoi5_LEB($a); + if (aspect=vert_cli) then envoi5_LEB($c); + if (aspect=vert) then envoi5_LEB($d); + if (aspect=rappel_30) then envoi5_LEB(6); + if (aspect=rappel_60) then envoi5_LEB(7); + if (aspect=ral_30) then envoi5_LEB(9); + if (aspect=ral_60) then envoi5_LEB($b); + end; + if (aspect=16) then + begin + if (Combine=rappel_30) then envoi5_LEB(6); + if (Combine=rappel_60) then envoi5_LEB(7); + if (Combine=ral_30) then envoi5_LEB(9); + if (Combine=ral_60) then envoi5_LEB($b); + end; + if ((Combine=rappel_30) and (aspect=jaune)) then envoi5_LEB($e); + if ((Combine=rappel_30) and (aspect=jaune_cli)) then envoi5_LEB($f); + if ((Combine=rappel_60) and (aspect=jaune)) then envoi5_LEB($10); + if ((Combine=rappel_60) and (aspect=jaune_cli)) then envoi5_LEB($11); + if ((Combine=ral_60) and (aspect=jaune_cli)) then envoi5_LEB($12); + end; + +end; + +(*========================================================================== +envoie les données au décodeur NMRA étendu + adresse=adresse sur le BUS DCC + code=code d'allumage : +0. Carré +1. Sémaphore +2. Sémaphore clignotant +3. Vert +4. Vert clignotant +5. Carré violet +6. Blanc +7. Blanc clignotant +8. Avertissement +9. Avertissement clignotant +10. Ralentissement 30 +11. Ralentissement 60 +12. Ralentissement 60 + avertissement clignotant +13. Rappel 30 +14. Rappel 60 +15. Rappel 30 + avertissement +16. Rappel 30 + avertissement clignotant +17. Rappel 60 + avertissement +18. rappel 60 + avertissement clignotant + +/*===========================================================================*) +procedure envoi_NMRA(adresse: integer); +var valeur : integer ; + aspect,combine,code : word; + s : string; +begin + //index:=Index_feu(adresse); // tranforme l'adresse du feu en index tableau + //code:=feux[index].aspect; // aspect du feu; + + if (ancien_tablo_signalCplx[adresse]<>EtatSignalCplx[adresse]) then + begin + ancien_tablo_signalCplx[adresse]:=EtatSignalCplx[adresse]; + code:=EtatSignalCplx[adresse]; + code_to_aspect(code,aspect,combine); + s:='Signal NMRA: ad'+IntToSTR(adresse)+'='+chaine_signal(code); + if traceSign then affiche(s,clOrange); + if Affsignal then afficheDebug(s,clOrange); + + case aspect of + carre : valeur:=0; + semaphore : valeur:=1; + semaphore_cli : valeur:=2; + vert : valeur:=3; + vert_cli : valeur:=4; + violet : valeur:=5; + blanc : valeur:=6; + blanc_cli : valeur:=7; + jaune : valeur:=8; + jaune_cli : valeur:=9; + end; + case combine of + ral_30 : valeur:=10; + ral_60 : valeur:=11; + rappel_30 : valeur:=13; + rappel_60 : valeur:=14; + end; + + if (Combine=ral_60) and (aspect=jaune_cli) then valeur:=12; + if (Combine=rappel_30) and (aspect=jaune) then valeur:=15; + if (Combine=rappel_30) and (aspect=jaune_cli) then valeur:=16; + if (Combine=rappel_60) and (aspect=jaune) then valeur:=17; + if (Combine=rappel_60) and (aspect=jaune_cli) then valeur:=18; + + pilote_acc(adresse,valeur,feu); + end; +end; + +// décodeur unisemaf (paco) +procedure envoi_UniSemaf(adresse: integer); +var modele,index: integer ; + s : string; + code,aspect,combine : word; +begin + index:=Index_feu(adresse); // tranforme l'adresse du feu en index tableau + + if (ancien_tablo_signalCplx[adresse]<>EtatSignalCplx[adresse]) then + begin + ancien_tablo_signalCplx[adresse]:=EtatSignalCplx[adresse]; + code:=EtatSignalCplx[adresse]; + code_to_aspect(code,aspect,combine); + s:='Signal Unisemaf: ad'+IntToSTR(adresse)+'='+chaine_signal(code); + if traceSign then affiche(s,clOrange); + if Affsignal then afficheDebug(s,clOrange); + + // pour Unisemaf, la cible est définie dans le champ Unisemaf de la structure feux + + modele:=feux[index].Unisemaf; + //Affiche('Adresse='+intToSTR(Adresse)+' code='+intToSTR(code)+' combine'+intToSTR(combine),clyellow); + if modele=2 then // 2 feux + begin + if aspect=blanc then pilote_acc(adresse,1,feu); + if aspect=blanc_cli then pilote_acc(adresse,1,feu); + if aspect=violet then pilote_acc(adresse,2,feu); + end; + + if modele=3 then // 3 feux + begin + if aspect=vert then pilote_acc(adresse,1,feu); + if aspect=vert_cli then pilote_acc(adresse,1,feu); + + if aspect=semaphore then pilote_acc(adresse,2,feu); + if aspect=semaphore_cli then pilote_acc(adresse,2,feu); + + if aspect=jaune then pilote_acc(adresse+1,1,feu); + if aspect=jaune_cli then pilote_acc(adresse+1,1,feu); + end; + + if modele=4 then + begin + case aspect of + vert : pilote_acc(adresse,1,feu); + vert_cli : pilote_acc(adresse,1,feu); + jaune : pilote_acc(adresse,2,feu); + jaune_cli : pilote_acc(adresse,2,feu); + semaphore : pilote_acc(adresse+1,1,feu); + semaphore_cli : pilote_acc(adresse+1,1,feu); + carre : pilote_acc(adresse+1,2,feu); + end; + end; + // 51=carré + blanc + if modele=51 then + begin + case aspect of + vert : pilote_acc(adresse,1,feu); + vert_cli : pilote_acc(adresse,1,feu); + jaune : pilote_acc(adresse,2,feu); + jaune_cli : pilote_acc(adresse,2,feu); + semaphore : pilote_acc(adresse+1,1,feu); + semaphore_cli : pilote_acc(adresse+1,1,feu); + carre : pilote_acc(adresse+1,2,feu); + blanc : pilote_acc(adresse+2,1,feu); + blanc_cli : pilote_acc(adresse+2,1,feu); + end; + end; + // 52=VJR + blanc + violet + if modele=52 then + begin + case aspect of + vert : pilote_acc(adresse,1,feu); + vert_cli : pilote_acc(adresse,1,feu); + jaune : pilote_acc(adresse,2,feu); + jaune_cli : pilote_acc(adresse,2,feu); + semaphore : pilote_acc(adresse+1,1,feu); + semaphore_cli : pilote_acc(adresse+1,1,feu); + violet : pilote_acc(adresse+2,1,feu); + blanc : pilote_acc(adresse+1,2,feu); + blanc_cli : pilote_acc(adresse+1,2,feu); + end; + end; + // 71=VJR + ralentissement 30 + if modele=71 then + begin + case aspect of + vert : pilote_acc(adresse,1,feu); + vert_cli : pilote_acc(adresse,1,feu); + jaune : pilote_acc(adresse,2,feu); + jaune_cli : pilote_acc(adresse,2,feu); + semaphore : pilote_acc(adresse+1,1,feu); + semaphore_cli : pilote_acc(adresse+1,1,feu); + end; + if combine=ral_30 then pilote_acc(adresse+1,2,feu); + end; + // 72=VJR + carré + ralentissement 30 + if modele=72 then + begin + case aspect of + vert : pilote_acc(adresse,1,feu); + vert_cli : pilote_acc(adresse,1,feu); + jaune : pilote_acc(adresse,2,feu); + jaune_cli : pilote_acc(adresse,2,feu); + semaphore : pilote_acc(adresse+1,1,feu); + semaphore_cli : pilote_acc(adresse+1,1,feu); + carre : pilote_acc(adresse+1,2,feu); + end; + if combine=ral_30 then pilote_acc(adresse+2,1,feu); + end; + // 73=VJR + carré + ralentissement 60 + if modele=73 then + begin + case aspect of + vert : pilote_acc(adresse,1,feu); + vert_cli : pilote_acc(adresse,1,feu); + jaune : pilote_acc(adresse,2,feu); + jaune_cli : pilote_acc(adresse,2,feu); + semaphore : pilote_acc(adresse+1,1,feu); + semaphore_cli : pilote_acc(adresse+1,1,feu); + carre : pilote_acc(adresse+1,2,feu); + end; + if combine=ral_60 then pilote_acc(adresse+2,1,feu); + end; + // 91=VJR + carré + rappel 30 + if modele=91 then + begin + case aspect of + vert : pilote_acc(adresse,1,feu); + vert_cli : pilote_acc(adresse,1,feu); + jaune : pilote_acc(adresse,2,feu); + jaune_cli : pilote_acc(adresse,2,feu); + semaphore : pilote_acc(adresse+1,1,feu); + semaphore_cli : pilote_acc(adresse+1,1,feu); + carre : pilote_acc(adresse+1,2,feu); + end; + if combine=rappel_30 then pilote_acc(adresse+2,1,feu); + end; + + // 92=VJR + carré + rappel 60 + if modele=92 then + begin + case aspect of + vert : pilote_acc(adresse,1,feu); + vert_cli : pilote_acc(adresse,1,feu); + jaune : pilote_acc(adresse,2,feu); + jaune_cli : pilote_acc(adresse,2,feu); + semaphore : pilote_acc(adresse+1,1,feu); + semaphore_cli : pilote_acc(adresse+1,1,feu); + carre : pilote_acc(adresse+1,2,feu); + end; + if combine=rappel_60 then pilote_acc(adresse+2,1,feu); + end; + + // 93=VJR + carré + ral30 + rappel 30 + if modele=93 then + begin + if combine=16 then //pas de sig combinée + begin + if aspect=vert then pilote_acc(adresse,1,feu); + if aspect=vert_cli then pilote_acc(adresse,1,feu); + if aspect=jaune then pilote_acc(adresse,2,feu); + if aspect=jaune_cli then pilote_acc(adresse,2,feu); + if aspect=semaphore then pilote_acc(adresse+1,1,feu); + if aspect=semaphore_cli then pilote_acc(adresse+1,1,feu); + if aspect=carre then pilote_acc(adresse+1,2,feu); + end; + if combine=ral_30 then pilote_acc(adresse+2,1,feu); + if combine=rappel_30 then pilote_acc(adresse+2,2,feu); + if (aspect=jaune) and (combine=rappel_30) then pilote_acc(adresse+3,1,feu); + end; + + // 94=VJR + carré + ral60 + rappel60 + if modele=94 then + begin + if combine=16 then + begin + if aspect=vert then pilote_acc(adresse,1,feu); + if aspect=vert_cli then pilote_acc(adresse,1,feu); + if aspect=jaune then pilote_acc(adresse,2,feu); + if aspect=jaune_cli then pilote_acc(adresse,2,feu); + if aspect=semaphore then pilote_acc(adresse+1,1,feu); + if aspect=semaphore_cli then pilote_acc(adresse+1,1,feu); + if aspect=carre then pilote_acc(adresse+1,2,feu); + end; + if combine=ral_60 then pilote_acc(adresse+2,1,feu); + if combine=rappel_60 then pilote_acc(adresse+2,2,feu); + if (aspect=jaune) and (combine=rappel_60) then pilote_acc(adresse+3,1,feu); + end; + + // 95=VJR + carré + ral30 + rappel 60 + if modele=95 then + begin + if combine=16 then + begin + if aspect=vert then pilote_acc(adresse,1,feu); + if aspect=vert_cli then pilote_acc(adresse,1,feu); + if aspect=jaune then pilote_acc(adresse,2,feu); + if aspect=jaune_cli then pilote_acc(adresse,2,feu); + if aspect=semaphore then pilote_acc(adresse+1,1,feu); + if aspect=semaphore_cli then pilote_acc(adresse+1,1,feu); + if aspect=carre then pilote_acc(adresse+1,2,feu); + end; + if combine=ral_30 then pilote_acc(adresse+2,1,feu); + if combine=rappel_60 then pilote_acc(adresse+2,2,feu); + if (aspect=jaune) and (combine=rappel_60) then pilote_acc(adresse+3,1,feu); + end; + // 96=VJR + blanc + carré + ral30 + rappel30 + if modele=96 then + begin + if combine=16 then + begin + if aspect=vert then pilote_acc(adresse,1,feu); + if aspect=vert_cli then pilote_acc(adresse,1,feu); + if aspect=jaune then pilote_acc(adresse,2,feu); + if aspect=jaune_cli then pilote_acc(adresse,2,feu); + if aspect=semaphore then pilote_acc(adresse+1,1,feu); + if aspect=semaphore_cli then pilote_acc(adresse+1,1,feu); + if aspect=carre then pilote_acc(adresse+1,2,feu); + if aspect=blanc then pilote_acc(adresse+3,2,feu); + if aspect=blanc_cli then pilote_acc(adresse+3,2,feu); + end; + if combine=ral_30 then pilote_acc(adresse+2,1,feu); + if combine=rappel_30 then pilote_acc(adresse+2,2,feu); + if (aspect=jaune) and (combine=rappel_30) then pilote_acc(adresse+3,1,feu); + end; + + // 97=VJR + blanc + carré + ral30 + rappel60 + if modele=97 then + begin + if combine=16 then + begin + if aspect=vert then pilote_acc(adresse,1,feu); + if aspect=vert_cli then pilote_acc(adresse,1,feu); + if aspect=jaune then pilote_acc(adresse,2,feu); + if aspect=jaune_cli then pilote_acc(adresse,2,feu); + if aspect=semaphore then pilote_acc(adresse+1,1,feu); + if aspect=semaphore_cli then pilote_acc(adresse+1,1,feu); + if aspect=carre then pilote_acc(adresse+1,2,feu); + if aspect=blanc then pilote_acc(adresse+3,2,feu); + if aspect=blanc_cli then pilote_acc(adresse+3,2,feu); + end; + if combine=ral_30 then pilote_acc(adresse+2,1,feu); + if combine=rappel_60 then pilote_acc(adresse+2,2,feu); + if (aspect=jaune) and (combine=rappel_60) then pilote_acc(adresse+3,1,feu); + end; + + // 98=VJR + blanc + violet + ral30 + rappel30 + if modele=98 then + begin + if combine=16 then + begin + if aspect=vert then pilote_acc(adresse,1,feu); + if aspect=vert_cli then pilote_acc(adresse,1,feu); + if aspect=jaune then pilote_acc(adresse,2,feu); + if aspect=jaune_cli then pilote_acc(adresse,2,feu); + if aspect=semaphore then pilote_acc(adresse+1,1,feu); + if aspect=semaphore_cli then pilote_acc(adresse+1,1,feu); + if aspect=violet then pilote_acc(adresse+1,2,feu); + if aspect=blanc then pilote_acc(adresse+3,2,feu); + if aspect=blanc_cli then pilote_acc(adresse+3,2,feu); + end; + if (aspect=jaune) and (combine=rappel_30) then pilote_acc(adresse+3,1,feu); + if combine=ral_30 then pilote_acc(adresse+2,1,feu); + if combine=rappel_30 then pilote_acc(adresse+2,2,feu); + end; + + // 99=VJR + blanc + violet + ral30 + rappel60 + if modele=99 then + begin + if combine=16 then + begin + if aspect=vert then pilote_acc(adresse,1,feu); + if aspect=vert_cli then pilote_acc(adresse,1,feu); + if aspect=jaune then pilote_acc(adresse,2,feu); + if aspect=jaune_cli then pilote_acc(adresse,2,feu); + if aspect=semaphore then pilote_acc(adresse+1,1,feu); + if aspect=semaphore_cli then pilote_acc(adresse+1,1,feu); + if aspect=violet then pilote_acc(adresse+1,2,feu); + if aspect=blanc then pilote_acc(adresse+3,2,feu); + if aspect=blanc_cli then pilote_acc(adresse+3,2,feu); + end; + if (aspect=jaune) and (combine=rappel_60) then pilote_acc(adresse+3,1,feu); + if combine=ral_30 then pilote_acc(adresse+2,1,feu); + if combine=rappel_60 then pilote_acc(adresse+2,2,feu); + end; + end; +end; + +{========================================================================== +envoie les données au décodeur LDT + adresse=adresse sur le BUS DCC + code=code d'allumage selon l'adressage (ex carre, vert, rappel_30 ..). + mode=mode du décodeur adressé, de 1 à 2 + un décodeur occupe 8 adresses + Le mode 1 permet la commande des signaux de 2, 3 et 4 feux + Le mode 2 permet la commande de signaux de plus de 4 feux +===========================================================================} +procedure envoi_LDT(adresse : integer); +var code,aspect,combine,mode : word; + s : string; +begin + //***if (ancien_tablo_signalCplx[adresse]<>EtatSignalCplx[adresse]) then //; && (stop_cmd==FALSE)) + begin + //***ancien_tablo_signalCplx[adresse]:=EtatSignalCplx[adresse]; + code:=EtatSignalCplx[adresse]; + code_to_aspect(code,aspect,combine); + s:='Signal LDT: ad'+IntToSTR(adresse)+'='+chaine_signal(code); + if traceSign then affiche(s,clOrange); + if Affsignal then afficheDebug(s,clOrange); + + if (aspect=semaphore) or (aspect=vert) or (aspect=carre) or (aspect=jaune) then mode:=1 else mode:=2; + + if aspect>carre then mode:=2 else mode:=1; + case mode of + // pour les décodeurs en mode 0, il faut écrire la routine vous même car le pilotage dépend du cablage + // sauf pour le sémaphore, vert et jaune fixe + 1 : // mode 1: feux 2 3 & 4 feux + begin + if (aspect=semaphore) then pilote_acc(adresse,1,feu); + if (aspect=vert) then pilote_acc(adresse,2,feu); + if (aspect=carre) then pilote_acc(adresse+1,1,feu); + if (aspect=jaune) then pilote_acc(adresse+1,2,feu); + end; + 2 : // mode 2: plus de 4 feux + begin + if (aspect=semaphore) then begin pilote_acc(adresse+2,1,feu);sleep(tempoFeu);pilote_acc(adresse,1,feu);end; + if (aspect=vert) then begin pilote_acc(adresse+2,1,feu);sleep(tempoFeu);pilote_acc(adresse,2,feu);end; + if (aspect=carre) then begin pilote_acc(adresse+2,1,feu);sleep(tempoFeu);pilote_acc(adresse+1,1,feu);end; + if (aspect=jaune) then begin pilote_acc(adresse+2,1,feu);sleep(tempoFeu);pilote_acc(adresse+1,2,feu);end; + if (aspect=violet) then begin pilote_acc(adresse+2,2,feu);sleep(tempoFeu);pilote_acc(adresse,1,feu);end; + if (aspect=blanc) then begin pilote_acc(adresse+2,2,feu);sleep(tempoFeu);pilote_acc(adresse,2,feu);end; + if (aspect=semaphore) then begin pilote_acc(adresse+2,2,feu);sleep(tempoFeu);pilote_acc(adresse+1,1,feu);end; + if (combine=aspect8) then begin pilote_acc(adresse+2,2,feu);sleep(tempoFeu);pilote_acc(adresse+1,2,feu);end; + if (combine=ral_60_jaune_cli) then begin pilote_acc(adresse+3,1,feu);sleep(tempoFeu);pilote_acc(adresse,1,feu);end; // demande groupe 3 + if (aspect=vert_cli) then begin pilote_acc(adresse+3,1,feu);sleep(tempoFeu);pilote_acc(adresse,2,feu);end; // demande groupe 3 + if (combine=Disque_D) then begin pilote_acc(adresse+3,1,feu);sleep(tempoFeu);pilote_acc(adresse+1,1,feu);end;// demande groupe 3 + if (aspect=jaune_cli) then begin pilote_acc(adresse+3,1,feu);sleep(tempoFeu);pilote_acc(adresse+1,2,feu);end; + if (combine=ral_30) then begin pilote_acc(adresse+3,2,feu);sleep(tempoFeu);pilote_acc(adresse,1,feu);end; + if (combine=ral_60) then begin pilote_acc(adresse+3,2,feu);sleep(tempoFeu);pilote_acc(adresse,2,feu);end; + if (combine=rappel_30) then begin pilote_acc(adresse+3,2,feu);sleep(tempoFeu);pilote_acc(adresse+1,1,feu);end; + if (combine=rappel_60) then begin pilote_acc(adresse+3,2,feu);sleep(tempoFeu);pilote_acc(adresse+1,2,feu);end; + end; + end; + end; +end; + + +procedure envoi_virtuel(adresse : integer); +var + combine,aspect,code : word; + s : string; +begin + code:=etatsignalcplx[adresse]; + if (ancien_tablo_signalCplx[adresse]<>EtatSignalCplx[adresse]) then //; && (stop_cmd==FALSE)) + begin + ancien_tablo_signalCplx[adresse]:=EtatSignalCplx[adresse]; + code:=EtatSignalCplx[adresse]; + code_to_aspect(code,aspect,combine); + s:='Signal virtuel: ad'+IntToSTR(adresse)+'='+chaine_signal(code); + if traceSign then affiche(s,clOrange); + if Affsignal then afficheDebug(s,clOrange); + end; +end; + +(*========================================================================== +envoie les données au décodeur digitalbahn équipé du logiciel "led_signal_10" + adresse=adresse sur le BUS DCC + codebin=motif de bits représentant l'état des feux L'allumage est fait en + adressant l'une des 14 adresses pour les 14 leds possibles du feu. + Ici on met le bit 1 à 1 (état "vert" du programme hexmanipu +===========================================================================*) +procedure envoi_signalBahn(adresse : integer); +var aspect,code,combine : word; + ralrap, jau ,Ancralrap,Ancjau : boolean; + s : string; +begin + //***if (ancien_tablo_signalCplx[adresse]<>EtatSignalCplx[adresse]) then //; && (stop_cmd==FALSE)) + begin + + code:=EtatSignalCplx[adresse]; + code_to_aspect(code,aspect,combine); + s:='Signal Bahn: ad'+IntToSTR(adresse)+'='+chaine_signal(code); + if traceSign then affiche(s,clOrange); + if Affsignal then afficheDebug(s,clOrange); + //Affiche(IntToSTR(aspect)+' '+inttoSTR(combine),clOrange); + + // spécifique au décodeur digital bahn: + // si le signal affichait un signal combiné, il faut éteindre le signal avec un sémaphore + // avant d'afficher le nouvel état non combiné + Ancralrap:=(TestBit(ancien_tablo_signalCplx[adresse],ral_30)) or (TestBit(ancien_tablo_signalCplx[adresse],ral_60)) or + (TestBit(ancien_tablo_signalCplx[adresse],rappel_30)) or (TestBit(ancien_tablo_signalCplx[adresse],rappel_60)) ; + // si ancien état du signal=jaune ou jaune cli + Ancjau:=(TestBit(ancien_tablo_signalCplx[adresse],jaune)) or (TestBit(ancien_tablo_signalCplx[adresse],jaune_cli)) ; + + //***ancien_tablo_signalCplx[adresse]:=EtatSignalCplx[adresse]; + + // si état demandé du signal=ralentissement ou rappel + ralrap:=(TestBit(code,ral_30)) or (TestBit(code,ral_60)) or + (TestBit(code,rappel_30)) or (TestBit(code,rappel_60)) ; + // si état demandé du signal=jaune ou cli + jau:=TestBit(code,jaune) or TestBit(code,jaune_cli) ; + + //effacement du signal combiné par sémaphore suivant condition + if (((Ancralrap and not(ralrap)) or (Ancjau and not(jau))) and (aspect>=8)) then + begin + Sleep(40); + pilote_acc(adresse+semaphore,2,feu) ; + // dessine_feu(adresse); + end; + + sleep(40); // les commandes entre 2 feux successifs doivent être séparées au minimum de 100 ms + // affichage du premier aspect du signal(1er bit à 1 dans codebin + if aspect<>16 then pilote_acc(adresse+aspect,2,feu) ; + + // affichage de la signalisation combinée (2ème bit à 1 dans codebin) + if (Combine<>16) then + begin + sleep(40); + pilote_ACC(adresse+Combine,2,feu) ; + end; + + end; +end; + +//évaluation des signaux ancienne version==================================================================*/ +procedure signaux; +var Num_voie,signalCplx,i : integer; + PresTrain,a,b,c : boolean; +begin +// signal 176 =========================================================*/ +signalCplx:=176; +a:=MemZone[524,521] and (aiguillage[8].position=2); +b:=MemZone[514,522] and (aiguillage[8].position<>2); +PresTrain:=MemZone[527,520] or ((aiguillage[7].position<>2) and ( a or b or MemZone[521,527] or MemZone[522,527])); +if (((aiguillage[20].position<>2) and (aiguillage[12].position<>2)) or (PresTrain=FALSE)) then + Maj_Etat_Signal(signalCplx,carre) +else +begin + // si train quitte zone de détection du signal + if ( (MemZone[520,530] and (aiguillage[20].position=2) and (aiguillage[26].position=2)) or + (MemZone[520,529] and (aiguillage[20].position=2) and (aiguillage[26].position<>2)) or + (MemZone[520,517] and (aiguillage[20].position<>2)) ) then + begin + if testBit(EtatSignalCplx[signalCplx],carre)=FALSE then Maj_Etat_Signal(signalCplx,semaphore); + end + else + begin // 26==0 : voie droite <>0 : voie gauche + a:=((aiguillage[20].position<>2) and (testBit(EtatSignalCplx[358],carre)) or (testbit(EtatSignalCplx[358],semaphore))); + b:=((aiguillage[20].position=2) and (testBit(EtatSignalCplx[420],carre)) or (testbit(EtatSignalCplx[420], semaphore))); + + if (a or b) then + begin // si signal complexe suivant est au carré ou sémaphore + Maj_Etat_Signal(signalCplx,jaune); // afficher un avertissement + end + else + begin + if ((aiguillage[11].position<>2) and (aiguillage[20].position<>2) + and (aiguillage[12].position=2) and (aiguillage[18].position<>2)) then // si aiguille suivante prise en pointe est déviée + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + Maj_Etat_Signal(signalCplx,ral_30); // afficher ralentissement + end + else + begin + a:=(aiguillage[20].position<>2) and testbit(EtatSignalCplx[358],jaune); + b:=((aiguillage[20].position=2) and testbit(EtatSignalCplx[420],jaune)); + if (a or b) then // si signal cplx suivant est jaune + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + Maj_Etat_Signal(signalCplx,jaune_cli); // afficher un avertissement clignotant sur le signal complexe + end + else Maj_Etat_Signal(signalCplx,vert); // sinon afficher un feu vert + end; + end; + end; +end; + +// signal 190 ================================================================ */ +signalCplx:=190; +if memZone[523,526]=true then // si train quite zone de détection du signal + begin + Maj_Etat_Signal(signalCplx,semaphore); // mettre un sémaphore} + end + else + begin + if testBit(EtatSignalCplx[302],carre) or testBit(EtatSignalCplx[302],semaphore) then // si signal complexe suivant= carré ou sémaphore + // Maj_Etat_Signal(signalCplx,jaune); // + Maj_Etat_Signal(signalCplx,semaphore_cli) + else + begin + if (aiguillage[9].position<>2) then // si aiguille suivante déviée? + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + if testBit(EtatSignalCplx[302],jaune) then // si signal suivant jaune ? + Maj_Etat_Signal(signalCplx,jaune_cli); + Maj_Etat_Signal(signalCplx,ral_60); // afficher ralentissement + end + else // aiguille 9 droite + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + if testBit(EtatSignalCplx[302],jaune_F) then // si signal cplx suivant est jaune + Maj_Etat_Signal(signalCplx,jaune_cli) + else Maj_Etat_Signal(signalCplx,vert); + end; + end; + end; + + +// signal 204 ============================================================*/ + signalCplx:=204; + PresTrain:=(aiguillage[8].position=2) and (MemZone[521,527] or MemZone[524,521]) + or ((aiguillage[8].position<>2) and (MemZone[522,527] or MemZone[514,522] or MemZone[518,514])); + if (PresTrain=FALSE) then Maj_Etat_Signal(signalCplx,carre) // si pas de train avant le signal, mettre au carré + else + begin + if ( (MemZone[527,520] and (aiguillage[7].position<>2)) or + (MemZone[527,519] and (aiguillage[7].position=2)) ) then // si train quitte détection signal + begin + if (TestBit(EtatSignalCplx[signalCplx],carre)=FALSE) then Maj_Etat_Signal(signalCplx,semaphore); + end + else + begin + if (aiguillage[7].position<>2) then // aiguille locale prise en pointe déviée? + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + Maj_Etat_Signal(signalCplx,rappel_30); // afficher rappel ralentissement + if (TestBit(EtatSignalCplx[176],carre)) or (testBit(EtatSignalCplx[176],semaphore)) then // si signal complexe suivant rouge + Maj_Etat_Signal(signalCplx,jaune) + else + if TestBit(EtatSignalCplx[176],jaune) then // si signal complexe suivant est jaune + Maj_Etat_Signal(signalCplx,jaune_cli); + end + else // pas aiguille locale déviée + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + // si signal suivant est rouge + if TestBit(EtatSignalCplx[330],carre) or testBit(EtatSignalCplx[330],semaphore) then Maj_Etat_Signal(signalCplx,jaune) + else + begin + if TestBit(EtatSignalCplx[330],jaune) or TestBit(EtatSignalCplx[330],ral_30) + or TestBit(EtatSignalCplx[330],ral_60) then // si signal suivant est jaune ou ral_30 ou 60 + Maj_Etat_Signal(signalCplx,jaune_cli) + else Maj_Etat_Signal(signalCplx,vert); + end; + end; + end; + end; + +// signal 218 ============================================================*/ +signalCplx:=218; +if MemZone[525,528] or MemZone[525,535] then Maj_Etat_Signal(signalCplx,semaphore) // si train quitte zone détection du signal +else + // si signal suivant est rouge + begin + a:=(testBit(EtatSignalCplx[344],carre) or testBit(EtatSignalCplx[344],semaphore)) and (aiguillage[17].position<>2); + b:=(testBit(EtatSignalCplx[392],carre) or testBit(EtatSignalCplx[392],semaphore)) and (aiguillage[17].position=2); + if (a or b) then + begin + Maj_Etat_Signal(signalCplx,jaune); + end + else + begin + // si aiguille distante déviée + if ( ((aiguillage[19].position<>2) or ((aiguillage[19].position=2) and (aiguillage[22].position<>2))) and (aiguillage[17].position<>2) ) then + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + Maj_Etat_Signal(signalCplx,ral_30); + end + else + begin + // si signal suivant jaune + EtatSignalCplx[signalCplx]:=0; // raz état du signal + a:=testBit(EtatSignalCplx[344],jaune) and (aiguillage[17].position<>2); + b:=testBit(EtatSignalCplx[392],jaune) and (aiguillage[17].position=2); + if (a or b) then + begin + Maj_Etat_Signal(signalCplx,jaune_cli); + end + else + begin + Maj_Etat_Signal(signalCplx,vert); + end; + end; + end; + end; + +// signal 232 ============================================================*/ +signalCplx:=232; +if ((aiguillage[1].position<>2) and (aiguillage[3].position=2) and (aiguillage[4].position=2) and (aiguillage[6].position<>0)) then +begin + if detecteur[516] then Maj_Etat_Signal(signalCplx,blanc) + else Maj_Etat_Signal(signalCplx,blanc_cli) +end +else Maj_Etat_Signal(signalCplx,violet); + +// signal 260 ============================================================*/ +signalCplx:=260; +// aiguilles vers manoeuvre +//i:=index_feu(SignalCplx); +//a:=(feux[i].check.checked=true) and (aiguillage[1].position<>2) and (aiguillage[3].position<>2) and (aiguillage[5].position=2) and detecteur[518]; +//b:=(aiguillage[1].position<>2) and (aiguillage[3].position=2) and (aiguillage[4].position=2) and (aiguillage[6].position<>2); +//if (a or b) then Maj_Etat_Signal(signalCplx,blanc) // feu blanc +//else + begin + // équations de présence train avant signal + a:= MemZone[525,528] and (aiguillage[17].position<>2) and (aiguillage[10].position<>2); + b:= MemZone[526,513] and (aiguillage[10].position<>2); + PresTrain:=(a or b or MemZone[513,518] or MemZone[528,518]) and (aiguillage[19].position<>2); + + // équations d'aiguillages prises en talon mal positionnées + a:=((aiguillage[1].position<>2) and (aiguillage[3].position<>2) and (aiguillage[5].position<>2)); + b:=((aiguillage[1].position<>2) and (aiguillage[3].position=2) and (aiguillage[4].position=2) and (aiguillage[6].position=2)); + a:=false;b:=false;prestrain:=true; + if (a or b or (PresTrain=FALSE)) then maj_Etat_Signal(signalCplx,carre) + else + begin //si train quitte zone 518 + a:=((MemZone[518,523] and (aiguillage[1].position=2)) or + (MemZone[518,515] and (aiguillage[1].position<>2) and (aiguillage[3].position<>2)) or + (MemZone[518,514] or MemZone[514,522]) and ((aiguillage[1].position<>2) and (aiguillage[3].position=2) and (aiguillage[4].position<>2))); + if a then + begin + if testBit(EtatSignalCplx[signalCplx],carre)=FALSE then Maj_Etat_Signal(signalCplx,semaphore); + end + else + begin + if feux[index_feu(signalCplx)].check.checked then Maj_Etat_Signal(signalCplx,blanc) + else + begin + if (aiguillage[1].position<>2) then // aiguille locale prise en pointe déviée? + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + Maj_Etat_Signal(signalCplx,rappel_30); // afficher rappel ralentissement + a:=((aiguillage[1].position<>2) and (aiguillage[3].position=2) and (aiguillage[4].position<>2)) // vers voie 514 + and (testBit(EtatSignalCplx[288],carre) or testBit(EtatSignalCplx[288],semaphore)) ; // si signal complexe suivant rouge + b:=((aiguillage[1].position<>2) and (aiguillage[3].position=2) and (aiguillage[4].position=2)) ; //ou voie en buttoir + if (a or b) then + Maj_Etat_Signal(signalCplx,jaune) + else + begin + if testBit(EtatSignalCplx[288],jaune) then // si signal complexe suivant est jaune + Maj_Etat_Signal(signalCplx,jaune_cli); + end; + end + else // pas aiguille locale déviée + begin + // si signal suivant est rouge + EtatSignalCplx[signalCplx]:=0; // raz état du signal + a:=(aiguillage[1].position=2) and testBit(EtatSignalCplx[190],semaphore) or testBit(EtatSignalCplx[190],semaphore_cli) or testbit(EtatSignalCplx[190],carre); + //a:=a or (aiguillage[1].position<>2) and (aiguillage[3].position=2) and (aiguillage[4].position=2) and (aiguillage[6].position<>2); + //a:=a or (aiguillage[1].position<>2) and (aiguillage[3].position=2) and (aiguillage[4].position<>2) and TestBit(EtatSignalCplx[288],semaphore) or testBit(EtatSignalCplx[288],carre); + if a then Maj_Etat_Signal(signalCplx,jaune) + else + begin + if testBit(EtatSignalCplx[190],jaune) or testBit(EtatSignalCplx[190],ral_30) + or testBit(EtatSignalCplx[190],ral_60) then // si signal cplx suivant est jaune ou ral_30 ou 60 + Maj_Etat_Signal(signalCplx,jaune_cli) + else + begin + i:=Index_feu(signalCplx); + if feux[i].FeuBlanc then + begin + if feux[i].check.Checked then + Maj_etat_signal(signalCplx,blanc) else Maj_etat_signal(signalCplx,vert); + end + else Maj_etat_signal(signalCplx,vert); + end; + end; + end; + end; + end; + end; + end; + +// signal 274 ============================================================*/ + signalCplx:=274; + if MemZone[524,521] then // si train quite détection du signal + Maj_Etat_Signal(signalCplx,semaphore) + else + begin + if TestBit(EtatSignalCplx[600],carre) or testBit(EtatSignalCplx[600],semaphore) then + Maj_Etat_Signal(signalCplx,jaune) + else + begin + if testBit(EtatSignalCplx[600],ral_30) or testBit(EtatSignalCplx[600],jaune) then Maj_Etat_Signal(signalCplx,jaune_cli) + else + Maj_Etat_Signal(signalCplx,vert); + end; + end; + +// signal 288 =========================================================*/ +signalCplx:=288; +PresTrain:=MemZone[513,531] or MemZone[528,531] or MemZone[524,531] or MemZone[518,514] or MemZone[531,518] ; +//PresTrain:=(PresTrain and (aiguillage[1].position<>2) and (aiguillage[3].position=2) and (aiguillage[4].position<>2) ); +PresTrain:=PresTrain or MemZone[514,522]; + +if ((PresTrain=FALSE) or (aiguillage[8].position=2)) then Maj_Etat_Signal(signalCplx,carre) +else +begin + if MemZone[522,527] then + begin + if TestBit(EtatSignalCplx[signalCplx],carre)=FALSE then Maj_Etat_Signal(signalCplx,semaphore); // sinon mettre un sémaphore} + end + else + begin + if TestBit(EtatSignalCplx[204],carre) or testBit(EtatSignalCplx[204],semaphore) then // si signal complexe suivant est au carré ou sémaphore + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + Maj_Etat_Signal(signalCplx,jaune); // afficher un avertissement + end + else + begin + if (aiguillage[7].position<>2) then // si aiguille suivante prise en pointe est déviée + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + Maj_Etat_Signal(signalCplx,ral_30); // afficher ralentissement + end + else + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + if testBit(EtatSignalCplx[204],jaune) then // si signal suivant est jaune + Maj_Etat_Signal(signalCplx,jaune_cli) // afficher un avertissement clignotant sur le signal complexe + else Maj_Etat_Signal(signalCplx,vert); // sinon afficher un feu vert + end; + end; + end; +end; + +// signal 302 ============================================================*/ +signalCplx:=302; +PresTrain:=((MemZone[513,518] or MemZone[528,518] or MemZone[524,518]) and (aiguillage[1].position=2)) or MemZone[518,523] or MemZone[523,526] ; +if PresTrain=FALSE then Maj_Etat_Signal(signalCplx,carre) +else +begin + if (MemZone[526,513] and (aiguillage[9].position=2)) or + (MemZone[526,515] and (aiguillage[9].position<>2)) then // si train quitte zone de détection du signal + begin + if testBit(EtatSignalCplx[signalCplx],carre)=FALSE then + Maj_Etat_Signal(signalCplx,semaphore); + end + else + begin + if (aiguillage[9].position<>2) then // si aiguille locale déviée + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + Maj_Etat_Signal(signalCplx,rappel_60); // afficher rappel ralentissement + if (testBit(EtatSignalCplx[316],carre) or testBit(EtatSignalCplx[316],semaphore )) then // si signal suivant rouge + Maj_Etat_Signal(signalCplx,jaune); + // signal suivant jaune avec aiguille locale déviée + if testBit(EtatSignalCplx[316],jaune) then // si signal cplx suivant est jaune + Maj_Etat_Signal(signalCplx,jaune_cli); + end + else // si aiguille locale non déviée + begin + // si signal suivant rouge + if testBit(EtatSignalCplx[462],semaphore) or testBit(EtatSignalCplx[462],carre) then + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + Maj_Etat_Signal(signalCplx,jaune); + end + else + begin + // si aiguille suivante prise en pointe déviée + if ((aiguillage[19].position<>2) or ((aiguillage[19].position=2) and (aiguillage[22].position<>2))) then + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + Maj_Etat_Signal(signalCplx,jaune); // le ral30 est remplacé par avertissement sur ce signal + end + else + // si signal suivant est jaune ou ralentissement 30 + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + if (testBit(EtatSignalCplx[462],jaune) or testBit(EtatSignalCplx[462],ral_30)) then + Maj_Etat_Signal(signalCplx,jaune_cli) + else + Maj_Etat_Signal(signalCplx,vert); + end; + end; + end; + end; +end; + +// signal 316 ============================================================*/ +signalCplx:=316; +// aiguillages vers voies de garage +if ( (aiguillage[5].position=2) and (aiguillage[3].position<>2) and (aiguillage[1].position<>2) ) or + ( feux[index_feu(signalCplx)].check.checked) then + begin + if detecteur[518] then Maj_Etat_Signal(signalCplx,blanc_cli) else Maj_Etat_Signal(signalCplx,blanc) ; + end +else +begin + PresTrain:=MemZone[526,515] or (((MemZone[518,523] and (aiguillage[1].position=2)) or MemZone[523,526]) and (aiguillage[9].position<>2)) ; + // équations d'aiguillages mal positionnés + + a:=((aiguillage[5].position=2) and (aiguillage[3].position=2)) or + ((aiguillage[5].position=2) and (aiguillage[1].position=2)) or + ((aiguillage[5].position<>2) and (aiguillage[2].position=2)) or + ((aiguillage[5].position<>2) and (aiguillage[2].position<>2) and (aiguillage[12].position=2)) ; + if a or (PresTrain=FALSE) then Maj_Etat_Signal(signalCplx,carre) + else + begin // train quitte zone de détection du signal + if ( (MemZone[515,517] and (aiguillage[5].position<>2)) or + (MemZone[515,518] and (aiguillage[5].position=2)) ) then + begin + if TestBit(EtatSignalCplx[signalCplx],carre)=false then Maj_Etat_Signal(signalCplx,semaphore); + end + else + begin + if feux[index_feu(signalCplx)].check.checked then Maj_Etat_Signal(signalCplx,blanc) + else + begin + if ( ((aiguillage[5].position<>2) and (aiguillage[2].position<>2)) and + (testBit(EtatSignalCplx[358],carre) or testBit(EtatSignalCplx[358],semaphore)) ) then // si signalCplx suivant est carré + Maj_Etat_Signal(signalCplx,jaune) + else + if ( ((aiguillage[5].position=2) and (aiguillage[3].position<>2) and (aiguillage[1].position<>2)) and // si signal suivant est rouge + (testBit(EtatSignalCplx[497],carre) or testBit(EtatSignalCplx[497],semaphore)) ) then + Maj_Etat_Signal(signalCplx,jaune) + else + begin + if (((aiguillage[11].position<>2) and (aiguillage[5].position<>2)) or + ((aiguillage[10].position<>2) and (aiguillage[5].position=2)) ) then + // si aiguille suivante prise en pointe est déviée + Maj_Etat_Signal(signalCplx,ral_30) // afficher ralentissement + + else + begin + // si aiguille suivante en pointe est déviée + if ((aiguillage[29].position<>2) and (aiguillage[5].position=2)) then// si aiguille suivante prise en pointe est déviée + begin + Maj_Etat_Signal(signalCplx,ral_60); // afficher ralentissement 60 + end + else + begin + // si signal suivant est jaune + if ( ((aiguillage[5].position=2) and (aiguillage[3].position<>2) and (aiguillage[1].position<>2)) and + (testBit(EtatSignalCplx[497],jaune)) ) then + Maj_Etat_Signal(signalCplx,jaune_cli) + else + if ( ((aiguillage[5].position<>2) and (aiguillage[2].position<>2)) and + (testBit(EtatSignalCplx[358],jaune)) ) then + Maj_Etat_Signal(signalCplx,jaune_cli) + else + Maj_Etat_Signal(signalCplx,vert); + end; + end; + end; + end; + end; + end; +end; + + +signalCplx:=330; //-------------------------------------------------------------------- +a:=MemZone[521,527] or MemZone[524,521] ; // and (aiguillage[8].position=0)) ; +b:=MemZone[522,527] or MemZone[514,522] or MemZone[518,514] or MemZone[514,522]; // and (aiguillage[8].position=0)) ; ///à voirrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +PresTrain:=MemZone[527,519] or ( (aiguillage[7].position=2) and (a or b)); + +// aiguilles 2 et 12 mal positionnées ou pas de train + if (aiguillage[2].position=1) or (aiguillage[12].position=2) or (PresTrain=FALSE) then + Maj_Etat_Signal(signalCplx,carre) // mettre un carré} + else + begin + //if (Mem_519_517=true) then + if MemZone[519,517] then + begin + if (testbit(EtatSignalCplx[signalCplx],carre)=FALSE) then Maj_Etat_Signal(signalCplx,semaphore); // sinon mettre un sémaphore} + end + else + begin + if (testbit(EtatSignalCplx[358],carre)) or (testbit(EtatSignalCplx[358],semaphore)) then // si signal complexe suivant est au carré ou sémaphore + Maj_Etat_Signal(signalCplx,jaune) // afficher un avertissement + else + begin + if (aiguillage[11].position<>2) then // si aiguille suivante prise en pointe est déviée + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + Maj_Etat_Signal(signalCplx,ral_30); // afficher ralentissement + end + else + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + if testbit(EtatSignalCplx[358],jaune) then // si signal suivant est jaune + Maj_Etat_Signal(signalCplx,jaune_cli) // afficher un avertissement clignotant sur le signal complexe + else Maj_Etat_Signal(signalCplx,vert); // sinon afficher un feu vert + end; + end; + end; + end; + + +// signal 344============================================================*/ +signalCplx:=344; +PresTrain:=(MemZone[525,528] or MemZone[517,525] or MemZone[534,525] or MemZone[538,525]) and (aiguillage[17].position<>2); + +if (((aiguillage[10].position=2) or (aiguillage[10].position<>2) and (aiguillage[19].position=2) and + (aiguillage[22].position<>2) and (aiguillage[24].position<>2)) + or (PresTrain=FALSE) ) then // si aiguillage 10 non dévié ou pas de train avant signal + Maj_Etat_Signal(signalCplx,carre) // mettre un carré} +else +begin + if ( (MemZone[528,518] and (aiguillage[19].position<>2)) or + (MemZone[528,537] and (aiguillage[19].position=2) and (aiguillage[22].position=2)) or + (MemZone[528,538] and (aiguillage[19].position=2) and (aiguillage[22].position<>2)) ) then + begin + if (testbit(EtatSignalCplx[signalCplx],carre)=FALSE) then Maj_Etat_Signal(signalCplx,semaphore); + end + else + begin + if ((aiguillage[19].position<>2) or (aiguillage[22].position<>2)) then // aiguilles locales déviées + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + Maj_Etat_Signal(signalCplx,rappel_30); + // si aiguilles distantes déviée ou signal distant rouge -> avertissement + a:=((aiguillage[19].position<>2) and ((aiguillage[1].position<>2) or testBit(EtatSignalCplx[260],semaphore) or testBit(EtatSignalCplx[260],carre))) ; + b:=((aiguillage[22].position<>2) and ((aiguillage[11].position<>2) or testBit(EtatSignalCplx[477],semaphore) or testBit(EtatSignalCplx[477],carre))) ; + if a or b then begin Maj_Etat_Signal(signalCplx,jaune);end + else + begin + // si signal suivant est jaune + a:=((aiguillage[19].position<>2) and testbit(EtatSignalCplx[260],jaune)) ; + b:=(((aiguillage[19].position=2) and (aiguillage[22].position=2)) and testBit(EtatSignalCplx[420],jaune)) ; + c:=(((aiguillage[19].position=2) and (aiguillage[22].position<>2)) and testBit(EtatSignalCplx[476],jaune)) ; + if (a or b or c) then begin Maj_Etat_Signal(signalCplx,jaune_cli);end; // si signal complexe suivant = jaune + end; + end + else + begin // aiguilles locales non déviées + EtatSignalCplx[signalCplx]:=0; // raz état du signal + a:=((aiguillage[19].position<>2) and (testBit(EtatSignalCplx[260],carre) or testBit(EtatSignalCplx[260],semaphore))) ; + b:=(((aiguillage[19].position=2) and (aiguillage[22].position=2)) and (testBit(EtatSignalCplx[420],carre) or testBit(EtatSignalCplx[434],semaphore))) ; + c:=(((aiguillage[19].position=2) and (aiguillage[22].position<>2)) and (testBit(EtatSignalCplx[476],carre) or testBit(EtatSignalCplx[476],semaphore))) ; + if (a or b or c) then // si signalCplx suivant au rouge + Maj_Etat_Signal(signalCplx,jaune) + else + begin + if aiguillage[11].position<>2 then // avant : 11 si aiguille suivante prise en pointe est déviée + begin + Maj_Etat_Signal(signalCplx,ral_30); // afficher ralentissement + end + else + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + a:=((aiguillage[19].position<>2) and testBit(EtatSignalCplx[260],jaune)) ; + b:=((aiguillage[19].position=2) and (aiguillage[22].position=2) and testBit(EtatSignalCplx[420],jaune) ) ; + c:=((aiguillage[19].position=2) and (aiguillage[22].position<>2) and testBit(EtatSignalCplx[476],jaune) ) ; + if (a or b or c) then // si signal suivant est jaune + Maj_Etat_Signal(signalCplx,jaune_cli) + else Maj_Etat_Signal(signalCplx,vert); + end; + end; + end; + end; +end; + +// signal 358============================================================*/ + signalCplx:=358; + PresTrain:=MemZone[519,517] or MemZone[515,517] or MemZone[520,517] or MemZone[521,527] or MemZone[522,527] or + (MemZone[527,519] and (aiguillage[7].position=2)) or + (MemZone[526,515] and (aiguillage[9].position<>2)) or + (MemZone[527,520] and (aiguillage[7].position<>2) and (aiguillage[20].position<>2) and (aiguillage[12].position=2)) ; + if ((PresTrain=FALSE) or (aiguillage[18].position=2)) then Maj_Etat_Signal(signalCplx,carre) + else + begin + if MemZone[517,524] or MemZone[517,525] then + begin + if (testBit(EtatSignalCplx[signalCplx],carre)=FALSE) then // si train quite zone de détection du signal + Maj_Etat_Signal(signalCplx,semaphore); + end + else + begin + if (aiguillage[11].position<>2) then // si aiguille locale déviée + begin + EtatSignalCplx[signalCplx]:=0; + Maj_Etat_Signal(signalCplx,rappel_30); // afficher rappel ralentissement + if testBit(EtatSignalCplx[218],semaphore) then // si signal suivant rouge + Maj_Etat_Signal(signalCplx,jaune); + if testBit(EtatSignalCplx[218],jaune) then // si signal suivant est jaune + Maj_Etat_Signal(signalCplx,jaune_cli); + end + else + begin + EtatSignalCplx[signalCplx]:=0; + if testBit(EtatSignalCplx[274],semaphore) or testBit(EtatSignalCplx[274],carre) then // si signal suivant est jaune + Maj_Etat_Signal(signalCplx,jaune) + else + begin + if TestBit(EtatSignalCplx[274],jaune) then + Maj_Etat_Signal(signalCplx,jaune_cli) + else Maj_Etat_Signal(signalCplx,vert); + end; + end; + end; + end; + +// signal 392 ============================================================*/ +signalCplx:=392; +if MemZone[535,533] then // si train quite détection du signal + Maj_Etat_Signal(signalCplx,semaphore) +else + if testBit(EtatSignalCplx[448],carre) or testBit(EtatSignalCplx[448],semaphore) then Maj_Etat_Signal(signalCplx,jaune) + else + if testBit(EtatSignalCplx[448],ral_30) or testBit(EtatSignalCplx[448],jaune) then Maj_Etat_Signal(signalCplx,jaune_cli) + else + Maj_Etat_Signal(signalCplx,vert_cli); + + + +// signal 420 =================================================================== +// signal regroupant 3 voies à revoir +// numéro de la voie en fonction de le position de l'aiguillage +if (aiguillage[25].position=2) then num_voie:=1 else + if (aiguillage[27].position=2) then num_voie:=2 else num_voie:=3; +signalCplx:=420; + +PresTrain:=(num_voie<=2) and MemZone[527,520] and (aiguillage[7].position<>2); +PresTrain:=((num_voie=1) and MemZone[520,529]) or PresTrain; +PresTrain:=((num_voie=2) and MemZone[520,530]) or PresTrain; +PresTrain:=((MemZone[521,527] or MemZone[522,527]) and (aiguillage[7].position<>2)) or PresTrain; +PresTrain:=((num_voie=3) and (MemZone[513,537] or (MemZone[526,513] and (aiguillage[10].position=2) and (aiguillage[19].position=2) and (aiguillage[22].position=2)) or MemZone[528,537] or MemZone[524,537])) or PresTrain; + +//if (((Mem_520_529) &&(num_voie!=1)) || ((Mem_520_530) && (num_voie!=2)) || +// ((Mem_528_537 || Mem_513_537 || Mem_524_537) &&(num_voie!=3)) +// && (aiguillage[31]!=0) || +if (PresTrain=FALSE) then Maj_Etat_Signal(signalCplx,carre) +else +begin + if ( ((num_voie=1) and MemZone[529,534]) or + ((num_voie=2) and MemZone[530,534]) or + ((num_voie=3) and MemZone[537,534]) ) then + begin + if TestBit(EtatSignalCplx[signalCplx],carre)=FALSE then Maj_Etat_Signal(signalCplx,semaphore); + end + else + begin + if testBit(EtatSignalCplx[406],semaphore) or testBit(EtatSignalCplx[406],carre) then // si signal cplx suivant est rouge Maj_Etat_Signal(signalCplx,jaune); + else + begin + if aiguillage[11].position<>2 then // si aiguille suivante est déviée + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + Maj_Etat_Signal(signalCplx,ral_30) ; + end + else + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + if testBit(EtatSignalCplx[406],jaune_F) or testBit(EtatSignalCplx[406],ral_60_F) then //si signal cplx suivant est jaune ou ralentissement----------- Maj_Etat_Signal(signalCplx,jaune_cli); + else Maj_Etat_Signal(signalCplx,vert); + end; + end; + end; +end; + + +// signal 448 =================================================================== + signalCplx:=448; + PresTrain:=(MemZone[517,525] and (aiguillage[17].position=2)) or MemZone[525,535] or MemZone[535,533]; + if (aiguillage[24].position=2) or (PresTrain=FALSE) then Maj_Etat_Signal(signalCplx,carre) + else + begin + if MemZone[533,538] then //si train quitte zone de détection du signal + begin + if testBit(EtatSignalCplx[signalCplx],carre)=FALSE then Maj_Etat_Signal(signalCplx,semaphore); + end + else + begin + if testBit(EtatSignalCplx[476],carre) or testBit(EtatSignalCplx[476],semaphore) then // si signal suivant rouge + begin + Maj_Etat_Signal(signalCplx,jaune); + end + else + begin + if (aiguillage[11].position<>2) then // si aiguille suivante prise en pointe est déviée + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + Maj_Etat_Signal(signalCplx,ral_30); // afficher ralentissement + end + else + begin // cas si aiguille suivante prise en pointe pas déviée + EtatSignalCplx[signalCplx]:=0; // raz état du signal + if testBit(EtatSignalCplx[476],jaune) then //si signal suivant est jaune----------- + Maj_Etat_Signal(signalCplx,jaune_cli) + else Maj_Etat_Signal(signalCplx,vert); + end; + end; + end; +end; + +// signal 462 ============================================================*/ +signalCplx:=462; +PresTrain:=MemZone[526,513] or ((MemZone[523,526] or MemZone[518,523]) and (aiguillage[9].position=2)) ; +// si aiguillages pris en talon mal positionnés ou pas de train avant signal +if (aiguillage[10].position<>2) or (aiguillage[29].position<>2) or (PresTrain=FALSE) then + Maj_Etat_Signal(signalCplx,carre) // mettre un carré} +else +begin + // si présence train après le signal (3 directions à tester) et signal <> carré + if ( MemZone[513,518] and (aiguillage[19].position<>2)) or + ( MemZone[513,537] and (aiguillage[19].position=2) and (aiguillage[22].position=2)) or + ( MemZone[513,538] and (aiguillage[19].position=2) and (aiguillage[22].position<>2)) then + begin + if TestBit(EtatSignalCplx[signalCplx],carre)=FALSE then Maj_Etat_Signal(signalCplx,semaphore); + end + else + begin + if (aiguillage[19].position<>0) or (aiguillage[22].position<>2) then // si aiguilles locales déviées + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + Maj_Etat_Signal(signalCplx,rappel_30); + // si aiguilles distantes déviées ou signal distant rouge -> avertissement + a:=(aiguillage[19].position<>2) and ((aiguillage[1].position<>2) or testBit(EtatSignalCplx[260],semaphore) or testBit(EtatSignalCplx[260],carre)); + b:=(aiguillage[22].position<>2) and ((aiguillage[11].position<>2) or testBit(EtatSignalCplx[477],semaphore) or testBit(EtatSignalCplx[477],carre)); + if (a or b) then + Maj_Etat_Signal(signalCplx,jaune) + else + begin // si signal distant est jaune + a:=((aiguillage[19].position<>2) and testBit(EtatSignalCplx[260],jaune)) ; + b:=(((aiguillage[19].position=2) and (aiguillage[22].position=2)) and testbit(EtatSignalCplx[420],jaune)) ; + c:=(((aiguillage[19].position=2) and (aiguillage[22].position<>2)) and testbit(EtatSignalCplx[476],jaune)) ; + if (a or b or c) then Maj_Etat_Signal(signalCplx,jaune_cli); // si signal complexe suivant = jaune + end; + end + else + begin // aiguilles locales en position droite + EtatSignalCplx[signalCplx]:=0; // raz état du signal + a:=((aiguillage[19].position<>0) and testBit(EtatSignalCplx[260],carre) or TestBit(EtatSignalCplx[260],semaphore)) ; + b:=(((aiguillage[19].position<>0) and (aiguillage[22].position=2)) and TestBit(EtatSignalCplx[420],carre) or TestBit(EtatSignalCplx[434],semaphore)) ; + c:=(((aiguillage[19].position=2) and (aiguillage[22].position<>0)) and testbit(EtatSignalCplx[476],carre) or TestBit(EtatSignalCplx[476],semaphore)) ; + if (a or b or c) then // si signalCplx suivant au rouge + Maj_Etat_Signal(signalCplx,jaune) + else + begin + // aiguilles locales en position droite + if (aiguillage[11].position<>2) then // si aiguille suivante prise en pointe est déviée + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + Maj_Etat_Signal(signalCplx,ral_30); // afficher ralentissement + end + else + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + a:=((aiguillage[19].position<>2) and TestBit(EtatSignalCplx[260],jaune)) ; + b:=((aiguillage[19].position=2) and (aiguillage[22].position=2) and TestBit(EtatSignalCplx[420],jaune) ) ; + c:=((aiguillage[19].position=2) and (aiguillage[22].position<>2) and TestBit(EtatSignalCplx[476],jaune) ) ; + if (a or b or c) then // si signal CDM suivant est jaune + Maj_Etat_Signal(signalCplx,jaune_cli) + else Maj_Etat_Signal(signalCplx,vert); + end; + end; + end; + end; +end; + +// signal 476 ============================================================*/ + signalCplx:=476; + PresTrain:=MemZone[533,538] or MemZone[535,533] or MemZone[525,535]; + PresTrain:=MemZone[528,538] or MemZone[513,538] or MemZone[524,538] or PresTrain; + + if ((((aiguillage[23].position<>2) or (aiguillage[18].position<>2)) or + ((aiguillage[30].position<>2) or (aiguillage[11].position=2) or (aiguillage[23].position=2)) ) or (PresTrain=FALSE)) then Maj_Etat_Signal(signalCplx,carre) + else + begin + if MemZone[538,524] or MemZone[538,525] then //si train quitte signal + begin + if testBit(EtatSignalCplx[signalCplx],carre)=FALSE then Maj_Etat_Signal(signalCplx,semaphore); + end + else + begin + if (aiguillage[11].position<>2) then // si aiguille locale déviée + begin + EtatSignalCplx[signalCplx]:=0; // raz état complet + Maj_Etat_Signal(signalCplx,rappel_30); // afficher rappel ralentissement + if testBit(EtatSignalCplx[218],semaphore) then // si signal suivant rouge + Maj_Etat_Signal(signalCplx,jaune) + else + begin + if testbit(EtatSignalCplx[218],jaune) or testBit(EtatSignalCplx[218],ral_30) then // si signal suivant est jaune ou ral30 begin Maj_Etat_Signal(signalCplx,jaune_cli);end; + end; + end + else + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + if testbit(EtatSignalCplx[274],jaune) then // si signal suivant est jaune + Maj_Etat_Signal(signalCplx,jaune_cli) + else Maj_Etat_Signal(signalCplx,vert); + end; + end; + end ; + + // signal 497 ============================================================*/ + signalCplx:=497; + //memZone[523,518]:=true; + PresTrain:=MemZone[518,531] or MemZone[523,518] or MemZone[515,518] or MemZone[514,518] or + MemZone[526,523]; + //PresTrain:=true; + //if PresTrain then Affiche('prestrain',clorange); + // équations aiguillages mal positionnés + if ((aiguillage[19].position<>1) or // 1 = dévié + ((aiguillage[19].position=1) and (aiguillage[10].position=2) and (aiguillage[29].position=1) and (aiguillage[30].position<>1)) or + (PresTrain=FALSE)) then + Maj_Etat_Signal(signalCplx,carre) + else + begin + if MemZone[531,528] or MemZone[531,528] or MemZone[531,513] or MemZone[531,524] then //si train quitte signal + begin + if testBit(EtatSignalCplx[signalCplx],carre)=FALSE then Maj_Etat_Signal(signalCplx,semaphore); + end + else + begin + if (aiguillage[10].position<>2) then // si aiguille locale déviée + begin + EtatSignalCplx[signalCplx]:=0; // raz état complet + Maj_Etat_Signal(signalCplx,rappel_30); // afficher rappel ralentissement + //if testBit(EtatSignalCplx[xx],semaphore) then // si signal suivant rouge + // Maj_Etat_Signal(signalCplx,jaune) + //else + //begin + // if testbit(EtatSignalCplx[218],jaune) or testBit(EtatSignalCplx[218],ral_30) then // si signal suivant est jaune ou ral30 // begin Maj_Etat_Signal(signalCplx,jaune_cli);end; + //end; + end + else + if (aiguillage[29].position<>2) then + begin + EtatSignalCplx[signalCplx]:=0; // raz état complet + Maj_Etat_Signal(signalCplx,rappel_60); // afficher rappel ralentissement + if testBit(EtatSignalCplx[274],semaphore) then // si signal suivant rouge + Maj_Etat_Signal(signalCplx,jaune) + else if testbit(EtatSignalCplx[274],jaune) then // si signal suivant est jaune ou ral30 + begin Maj_Etat_Signal(signalCplx,jaune_cli);end; + end + else + begin // aiguilles locales non déviées + //EtatSignalCplx[xx]:=0; // raz état du signal + //if testbit(EtatSignalCplx[xx],jaune) then // si signal suivant est jaune + // Maj_Etat_Signal(signalCplx,jaune_cli) + //else + Maj_Etat_Signal(signalCplx,vert); + end; + end; + end ; + + +// signal 600 =====================================================*/ +signalCplx:=600; +PresTrain:=MemZone[524,521] or MemZone[517,524] or MemZone[538,524] or MemZone[534,524]; + +//if ((aiguillage[8].position<>2) or (PresTrain=FALSE)) then Maj_Etat_Signal(signalCplx,carre) +//else + begin + if MemZone[521,527] then + begin + if (testBit(EtatSignalCplx[signalCplx],carre)=FALSE) then Maj_Etat_Signal(signalCplx,semaphore); + end + else + begin + if testBit(EtatSignalCplx[204],semaphore) or testBit(EtatSignalCplx[204],carre) then // si signal cplx suivant est rouge + Maj_Etat_Signal(signalCplx,jaune) + else + begin + if (aiguillage[7].position<>2) then// si aiguille suivante est déviée + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + Maj_Etat_Signal(signalCplx,ral_30) ; + end + else + begin + EtatSignalCplx[signalCplx]:=0; // raz état du signal + if TestBit(EtatSignalCplx[204],jaune) or testBit(EtatSignalCplx[204],ral_60) then //si signal cplx suivant est jaune ou ralentissement----------- + Maj_Etat_Signal(signalCplx,jaune_cli) + else Maj_Etat_Signal(signalCplx,vert); + end; + end; + end; + end; + +end; // de la procédure pilote signaux + +// pilotage d'un signal +procedure envoi_signal(Adr : integer); +var i,adresse,a,aspect,x,y,x0,y0,TailleX,TailleY,Orientation : integer; + ImageFeu : TImage; + frX,frY : real; +begin + i:=index_feu(Adr); + if (ancien_tablo_signalCplx[adr]<>EtatSignalCplx[adr]) then //*** + begin + if feux[i].aspect<10 then // si signal non directionnel + begin + // envoie la commande au décodeur + case feux[i].decodeur of + 0 : envoi_virtuel(Adr); + 1 : envoi_signalBahn(Adr); + 2 : envoi_CDF(Adr); + 3 : envoi_LDT(Adr); + 4 : envoi_LEB(Adr); + 5 : envoi_NMRA(Adr); + 6 : envoi_UniSemaf(Adr); + end; + + ancien_tablo_signalCplx[adr]:=EtatSignalCplx[adr]; //*** + + // allume les signaux du feu dans la fenêtre de droite + Dessine_feu_mx(Feux[i].Img.Canvas,0,0,1,1,adr,1); + + // allume les signaux du feu dans le TCO + if AvecTCO then + begin + for y:=1 to NbreCellY do + for x:=1 to NbreCellX do + begin + if TCO[x,y].Bimage=30 then + begin + adresse:=TCO[x,y].adresse; // vérifie si le feu existe dans le TCO + a:=EtatsignalCplx[adresse]; // a = état binaire du feu + aspect:=TCO[x,y].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; + else ImageFeu:=Formprinc.Image3feux; + end; + x0:=(tco[x,y].x-1)*LargeurCell; // coordonnées XY du feu + y0:=(tco[x,y].y-1)*HauteurCell; + TailleY:=ImageFeu.picture.BitMap.Height; // taille du feu d'origine (verticale) + TailleX:=ImageFeu.picture.BitMap.Width; + Orientation:=TCO[x,y].FeuOriente; + // réduction variable en fonction de la taille des cellules + calcul_reduction(frx,fry,round(TailleX*LargeurCell/ZoomMax),round(tailleY*HauteurCell/ZoomMax),TailleX,TailleY); + + // décalage en X pour mettre la tete du feu alignée sur le bord droit de la cellule pour les feux tournés à 90G + if orientation=2 then + begin + if aspect=9 then x0:=x0+round(10*frX); + if aspect=7 then x0:=x0+round(10*frX); + if aspect=5 then begin x0:=x0+round(10*frX);y0:=y0+HauteurCell-round(tailleX*frY); end; + if aspect=4 then begin x0:=x0+round(10*frX);y0:=y0+HauteurCell-round(tailleX*frY); end; + if aspect=3 then begin x0:=x0+round(10*frX);y0:=y0+HauteurCell-round(tailleX*frY); end; + if aspect=2 then begin x0:=x0+round(10*frX);y0:=y0+HauteurCell-round(tailleX*frY); end; + end; + // Dessine_feu_mx(PCanvasTCO,x0,y0,frx,fry,adresse,orientation); + Dessine_feu_mx(PCanvasTCO,tco[x,y].x,tco[x,y].y,frx,fry,adresse,orientation); + end; + end; + end; + end; +end; +end; + +// pilotage des signaux +procedure envoi_signauxCplx; +var i,signalCplx : integer; +begin + //Affiche('Envoi des signaux (envoi_signaixCplx)',ClGreen); + //chaque signal doit être appellé en fonction de sa procédure suivant le décodeur + for i:=1 to NbreFeux do + begin + signalCplx:=feux[i].adresse; + if not(ferme) and (signalCplx<>0) then envoi_signal(signalCplx); + end; +end; + +function virgule_suiv(sl : string;o : integer) : integer; +var k : integer; +begin + o:=o+1; + for k:=o to length(sl) do + begin + // Affiche(sl[k],clGreen); + if sl[k]=',' then begin result:=k;exit;end; + end; + result:=0; +end; + + +// trouve l'enregistrement suivant après l'offset dans une branche +// en sortie : trouve_enregistrement= nouvel offset, enregistrement +// si 0 en sortie: fin de ligne +function trouve_enregistrement_suiv(num_branche : integer;offset : integer) : integer; +var j : integer; + ss : string; +begin + //Affiche(branche[num_branche],clWhite); + j:=virgule_suiv(branche[Num_Branche],offset); // pointe sur la virgule suivante + //Affiche('virgule suivante j='+IntToStr(j),ClOrange); + //Affiche(' j='+IntToStr(j),ClOrange); + if j<>0 then ss:=copy(branche[Num_Branche],offset,j-offset) // champ suivant + else ss:=copy(branche[Num_Branche],offset,length(branche[Num_Branche])-offset+1); // si j=0 c'est la fin de la chaîne + //affiche(ss,clGreen); + enregistrement:=ss; + if j=0 then result:=0 else result:=j+1; +end; + +// trouve l'index d'un détecteur dans une branche +// si pas trouvé, renvoie 0 +function index_detecteur(det,Num_branche : integer) : integer; +var i,adr : integer; + trouve : boolean; + procedure recherche; + begin + repeat + adr:=BrancheN[Num_Branche,i].adresse; + trouve:=(det=adr) and ((BrancheN[Num_Branche,i].Btype=1) or (BrancheN[Num_branche,i].BType=4)); // cherche un détecteur + //Affiche('cherche='+intToSTR(det)+'/explore='+intToSTR(adr)+' Branche='+intToStr(Num_branche)+' index='+intToStr(i),ClWhite); + if not(trouve) then inc(i); + //if trouve then Affiche('Trouvé en branche'+IntToSTR(Num_branche)+' index='+IntToSTR(i),clGreen); + until trouve or (adr=0) ; + end; +begin + i:=1;index2_det:=0; + recherche; + if trouve then result:=i else result:=0; + //affiche(inttostr(ai+1),clOrange); + i:=2; // à voir + //affiche('------------------------',clWhite); + recherche; + //affiche('------------------------',clGreen); + if trouve then index2_det:=i else index2_det:=0; + //affiche('index2='+IntToSTR(index2_det),clWhite); +end; + +// trouve l'index d'un aiguillage dans une branche +// si pas trouvé, renvoie 0 +function index_aiguillage(AdrAig,Num_branche : integer) : integer; +var i,adr : integer; + trouve : boolean; + procedure recherche; + begin + repeat + adr:=BrancheN[Num_Branche,i].adresse; + trouve:=(AdrAig=adr) and ((BrancheN[Num_Branche,i].Btype=2) or (BrancheN[Num_branche,i].BType=3)); // cherche un aiguillage + //Affiche('cherche='+intToSTR(det)+'/explore='+intToSTR(adr)+' Branche='+intToStr(Num_branche)+' index='+intToStr(i),ClWhite); + if not(trouve) then inc(i); + //if trouve then Affiche('Trouvé en branche'+IntToSTR(Num_branche)+' index='+IntToSTR(i),clGreen); + until trouve or (adr=0) ; + end; +begin + i:=1;index2_aig:=0; + recherche; + if trouve then result:=i else result:=0; + //affiche(inttostr(ai+1),clOrange); + i:=2; // à voir + //affiche('------------------------',clWhite); + recherche; + //affiche('------------------------',clGreen); + if trouve then index2_aig:=i else index2_aig:=0; + //affiche('index2='+IntToSTR(index2_det),clWhite); +end; + +// si pas trouvé, IndexBranche_trouve=0 +procedure trouve_detecteur(detecteur : integer); +var NBranche,i : integer; +begin + Nbranche:=1; + i:=1; + repeat + i:=index_detecteur(detecteur,Nbranche); + if i=0 then inc(NBranche); + until (Nbranche>NbreBranches) or (i<>0); + // if (i<>0) and traceDet then Affiche('Détecteur trouvé en branche '+intToSTR(NBranche)+' index='+IntToSTR(i),clYellow); + branche_trouve:=NBranche; + IndexBranche_trouve:=i; +end; + +// si pas trouvé, IndexBranche_trouve=0 +procedure trouve_aiguillage(adresse : integer); +var NBranche,i : integer; +begin + Nbranche:=1; + i:=1; + repeat + i:=index_aiguillage(Adresse,Nbranche); + if i=0 then inc(NBranche); + until (Nbranche>NbreBranches) or (i<>0); + //if (i<>0) then Affiche('aiguillage '+IntToSTR(adresse)+' trouvé en branche '+intToSTR(NBranche)+' index='+IntToSTR(i),clYellow); + branche_trouve:=NBranche; + IndexBranche_trouve:=i; +end; + + + +procedure lit_config; +var s,sa,chaine,SOrigine: string; + c,paig : char; + tec,tjd,tjs,s2,trouve,triple,debugConfig,multiple,fini,finifeux : boolean; + bd,virgule,i_detect,i,erreur,aig,aig2,detect,offset,index, adresse,j,position,temporisation,invers,indexPointe,indexDevie,indexDroit, + ComptEl,Compt_IT,Num_Element,k,modele,adr,adr2,erreur2,l,t,Nligne,postriple, + postjd,postjs,nv,it : integer; + function lit_ligne : string ; + begin + repeat + readln(fichier,s); + s:=uppercase(s); + if length(s)>0 then c:=s[1]; + until ((c<>'/') and (s<>'')) or eof(fichier) ; + lit_ligne:=s; + //Affiche(s,clWhite); + end; + procedure compile_section_init; + begin + //initialisation aiguillages + repeat + s:=lit_ligne; + j:=pos(',',s); + if j>1 then + begin + begin + adresse:=StrToINT(copy(s,1,j-1));Delete(s,1,j); // adresse aiguillage + if (adresse>0) and (AvecInitAiguillages=1) then + begin + j:=pos(',',s); + position:=StrToInt(copy(s,1,j-1));Delete(S,1,j);// position aiguillage + if (position<1) or (position>2) then position:=1; + aiguillage[adresse].position:=position; + + // temporisation aiguillage + j:=pos(',',s);if j=0 then j:=length(s); + val(s,temporisation,erreur);Delete(S,1,j); + if (temporisation<0) or (temporisation>10) then temporisation:=5; + aiguillage[adresse].temps:=temporisation; + + val(s,invers,erreur); + if (invers<0) or (invers>1) then invers:=0; // inversion commande + aiguillage[adresse].inversion:=invers; + end; + end; + end; + until (adresse=0); + end; + +begin + debugConfig:=false; + // initialisation des aiguillages avec des valeurs par défaut + for i:=1 to MaxAcc do + begin + Aiguillage[i].modele:=0 ; // sans existence + Aiguillage[i].position:=9; // position inconnue + Aiguillage[i].temps:=5 ; + Aiguillage[i].inversion:=0; + Aiguillage[i].inversionCDM:=0; + Aiguillage[i].objet:=0; + end; + for i:=1 to 1024 do + begin + Detecteur[i]:=false; + Ancien_detecteur[i]:=false; + end; + //ChDir(s); + Affiche('lecture du fichier de configuration client-GL.cfg',clyellow); + {$I-} + try + assign(fichier,'client-GL.cfg'); + reset(fichier); + except + Affiche('Fichier client-gl.cfg non trouvé',clred); + end; + {$I+} + nv:=0; it:=0; + {lecture du fichier de configuration} + // taille de fonte + repeat + s:=lit_ligne; + //affiche(s,cllime); + sa:='FONTE='; + i:=pos(sa,s); + if i<>0 then + begin + inc(nv); + delete(s,i,length(sa)); + TailleFonte:=StrToINT(s); + with FormPrinc.ListBox1 do + begin + Font.Height:=TailleFonte; + ItemHeight:=TailleFonte+1; + end; + end; + + // adresse ip et port de CDM + sa:='IPV4_PC='; + i:=pos(sa,s); + if i<>0 then + begin + inc(nv); + delete(s,i,length(sa)); + i:=pos(':',s); + if i<>0 then begin adresseIPCDM:=copy(s,1,i-1);Delete(s,1,i);portCDM:=StrToINT(s);end; + end; + + // adresse ip et port de la centrale + // AfficheDet:=true; + sa:='IPV4_INTERFACE='; + i:=pos(sa,s); + if i<>0 then + begin + inc(nv); + delete(s,i,length(sa)); + i:=pos(':',s); + if i<>0 then begin adresseIP:=copy(s,1,i-1);Delete(s,1,i);port:=StrToINT(s);end + else begin adresseIP:='0';parSocket:=false;end; + end; + + // configuration du port com + sa:='PROTOCOLE_SERIE='; + i:=pos(sa,s); + if i<>0 then + begin + inc(nv); + delete(s,i,length(sa)); + if not(config_com(s)) then Affiche('Erreur port com mal déclaré : '+s,clred); + portcom:=s; + end; + + // temporisation entre 2 caractères + sa:='INTER_CAR='; + i:=pos(sa,s); + if i<>0 then + begin + inc(nv); + delete(s,i,length(sa)); + val(s,TempoOctet,erreur); + if erreur<>0 then Affiche('Erreur temporisation entre 2 octets',clred); + end; + + // temporisation attente maximale interface + sa:='TEMPO_MAXI='; + i:=pos(sa,s); + if i<>0 then + begin + inc(nv); + delete(s,i,length(sa)); + val(s,TimoutMaxInterface,erreur); + if erreur<>0 then Affiche('Erreur temporisation maximale interface',clred); + end; + + // entete + sa:='ENTETE='; + i:=pos(sa,s); + if i<>0 then + begin + inc(nv); + delete(s,i,length(sa)); + val(s,Valeur_entete,erreur); + entete:=''; + case Valeur_entete of + 0 : begin entete:='';suffixe:='';end; + 1 : begin entete:=#$FF+#$FE;suffixe:='';end; + 2 : begin entete:=#228;suffixe:=#13+#13+#10;end; + end; + if (erreur<>0) or (valeur_entete>2) then Affiche('Erreur déclaration variable entete',clred); + end; + + // avec ou sans initialisation des aiguillages + sa:='INIT_AIG='; + i:=pos(sa,s); + if i<>0 then + begin + inc(nv); + delete(s,i,length(sa)); + AvecInitAiguillages:=StrToINT(s); + end; + + sa:='FENETRE='; + i:=pos(sa,s); + if i<>0 then + begin + inc(nv); + delete(s,i,length(sa)); + val(s,fenetre,erreur); + if fenetre=1 then Formprinc.windowState:=wsMaximized; + end; + + sa:='SECTION_INIT'; + i:=pos(sa,s); + if i<>0 then + begin + inc(nv); + compile_section_init; + end; + + sa:='VERIF_VERSION='; + i:=pos(sa,s); + if i<>0 then + begin + inc(nv); + delete(s,i,length(sa)); + // vérification de la version au démarrage + verifVersion:=true; + val(s,i,erreur); + if erreur=0 then verifVersion:=i=1; + end; + + sa:='NOTIF_VERSION='; + i:=pos(sa,s); + if i<>0 then + begin + inc(nv); + delete(s,i,length(sa)); + // vérification de la version au démarrage + i:=0; + val(s,i,erreur); + notificationVersion:=i=1; + end; + + sa:='TCO='; + i:=pos(sa,s); + if i<>0 then + begin + inc(nv); + delete(s,i,length(sa)); + // vérification de la version au démarrage + i:=0; + val(s,i,erreur); + AvecTCO:=i=1; + end; + + sa:='CDM='; + i:=pos(sa,s); + if i<>0 then + begin + inc(nv); + delete(s,i,length(sa)); + // vérification de la version au démarrage + i:=0; + val(s,i,erreur); + LanceCDM:=i=1; + end; + + sa:='LAY='; + i:=pos(sa,s); + if i<>0 then + begin + inc(nv); + delete(s,i,length(sa)); + lay:=s; + end; + + sa:='SERVEUR_INTERFACE='; + i:=pos(sa,s); + if i<>0 then + begin + inc(nv); + delete(s,i,length(sa)); + i:=0; + val(s,i,erreur); + ServeurInterfaceCDM:=i; + end; + + sa:='RETRO='; + i:=pos(sa,s); + if i<>0 then + begin + inc(nv); + delete(s,i,length(sa)); + i:=0; + val(s,i,erreur); + ServeurRetroCDM:=i; + end; + + inc(it); + + until (Nv>=17) or (it>30); + //affiche(IntToSTR(Nv)+' variables',clblue); + if it>30 then + begin affiche('ERREUR: manque variables dans config-gl.cfg',clred);exit;end; + //Affiche('Valeurs d''initialisation des aiguillages',clyellow); + + closefile(fichier); + + Affiche('lecture du fichier de configuration config.cfg',clyellow); + try + assign(fichier,'config.cfg'); + reset(fichier); + except + Affiche('Fichier config.cfg non trouvé',clred); + end; + + s:=Lit_ligne; //variable log non utilisée + s:=Lit_ligne; // trace_det + s:=Lit_ligne; // raz signaux + Raz_Acc_signaux:=pos('1',s)<>0; + if Raz_Acc_signaux then Affiche('Avec Raz commande signaux',clYellow); + Affiche('Définition des aiguillages',clyellow); + + // définition des aiguillages + maxaiguillage:=0; + Nligne:=1; + repeat + s:=lit_ligne;sOrigine:=s;inc(Nligne); + //Affiche(s,ClLime); + //chaine:=s; + if debugconfig then Affiche(s,ClLime); + if (s<>'0') then + begin + virgule:=pos(',',s); + enregistrement:=copy(s,1,virgule-1); // adresse de l'aiguillage [TRI] + delete(s,1,virgule); + postriple:=pos('TRI',enregistrement);triple:=postriple<>0;if triple then delete(enregistrement,postriple,3); + postjd:=pos('TJD',enregistrement);tjd:=postjd<>0;if tjd then delete(enregistrement,postjd,3); + postjs:=pos('TJS',enregistrement);tjs:=postjs<>0;if tjs then delete(enregistrement,postjs,3); + + // adresse de l'aiguillage + Val(enregistrement,aig,erreur); // aig = adresse de l'aiguillage + if erreur<>0 then Affiche('Erreur aiguillage '+intToSTR(aig)+' ; caractère '+enregistrement[erreur]+' inconnu',clred); + if aig>maxaiguillage then maxaiguillage:=aig; + if debugConfig then Affiche('Adresse='+IntToSTR(aig)+' enregistrement='+Enregistrement,clyellow); + + aiguillage[aig].AdroitB:='Z'; aiguillage[aig].AdevieB:='Z'; + aiguillage[aig].DdroitB:='Z'; aiguillage[aig].DdevieB:='Z'; + + aiguillage[aig].ApointeB:='Z'; + aiguillage[aig].Adevie2B:='Z'; + + if (triple) then aiguillage[aig].modele:=4; + if (tjs) then + begin + aiguillage[aig].modele:=3 + end; + if (tjd) then + begin + aiguillage[aig].modele:=2 ; + end; + if not(tjs) and not(tjd) and not(triple) then + begin + aiguillage[aig].modele:=1; + end; + //if debugConfig then Affiche(s,clyellow); + + if (triple) then + begin + Val(s,aig2,erreur); // aig = 2eme adresse de l'aiguillage + aiguillage[aig].AdrTriple:=aig2; + virgule:=pos(',',s); + delete(s,1,virgule); + end; + ComptEl:=0;Compt_It:=0;Num_element:=Num_element+1; + // préparer l'enregistrement pour la boucle de ligne + virgule:=pos(',',s); + if tjd then enregistrement:=s else + begin + enregistrement:=copy(s,1,virgule-1); + delete(s,1,virgule); + end; + + //Affiche('S='+s,clyellow); + //debugconfig:=true; + + repeat // parcoure la ligne + if (debugConfig) then Affiche('boucle de ligne: '+s,clYellow); + if (length(enregistrement)<>0) then + if (enregistrement[1]='P') then + begin + if tjd then begin affiche('Erreur P interdit dans une TJD : '+sOrigine,clred);closefile(fichier);exit; end; + if debugconfig then Affiche('Section P - enregistrement='+enregistrement,clYellow); + ComptEl:=ComptEl+1; + decodeAig(enregistrement,detect,c); + if c='' then c:='Z'; + aiguillage[aig].Apointe:=detect; + aiguillage[aig].ApointeB:=c; + + virgule:=pos(',',s);if virgule=0 then virgule:=length(s)+1; + enregistrement:=copy(s,1,virgule-1); + delete(s,1,virgule); + + end; + + if (length(enregistrement)<>0) then // section droite + if (enregistrement[1]='D') then + begin + if debugconfig then Affiche('Section D - enregistrement='+enregistrement,clYellow); + ComptEl:=ComptEl+1; + + if tjd then + begin + s:=Enregistrement; + Delete(s,1,2); + decodeAig(s,detect,c); + aiguillage[aig].Adroit:=detect; + aiguillage[aig].AdroitB:=c; + i:=pos(',',s);Delete(s,1,i); + decodeAig(s,detect,c); + aiguillage[aig].DDroit:=detect; + aiguillage[aig].DdroitB:=c; + i:=pos(')',enregistrement);if i=0 then begin Affiche('Erreur de syntaxe ligne '+SOrigine,clred);closefile(fichier);exit;end; + Delete(enregistrement,1,i+1); + i:=pos(')',s); delete(s,1,i); + // mettre en forme s + i:=pos(')',s); delete(s,1,i); + i:=pos(',',s); delete(s,1,i); + + //Affiche(enregistrement,clBlue); + end + else + begin + decodeAig(enregistrement,detect,c); + if c='' then c:='Z'; + aiguillage[aig].Adroit:=detect; + aiguillage[aig].AdroitB:=c; + + virgule:=pos(',',s);if virgule=0 then virgule:=length(s)+1; + enregistrement:=copy(s,1,virgule-1); + delete(s,1,virgule); + end; + end; + + if (length(enregistrement)<>0) then + if (enregistrement[1]='S') then + begin + if debugconfig then Affiche('Section S - enregistrement='+enregistrement,clYellow); + ComptEl:=ComptEl+1; + + if tjd then + begin + Delete(enregistrement,1,2); + decodeAig(enregistrement,detect,c); + aiguillage[aig].Adevie:=detect; + aiguillage[aig].AdevieB:=c; + i:=pos(',',enregistrement);Delete(enregistrement,1,i); + decodeAig(enregistrement,detect,c); + aiguillage[aig].DDevie:=detect; + aiguillage[aig].DDevieB:=c; + i:=pos(')',enregistrement);if i=0 then begin Affiche('Erreur de syntaxe ligne '+SOrigine,clred);closefile(fichier);exit;end; + Delete(enregistrement,1,i+1); + // mettre en forme s + i:=pos(')',s); delete(s,1,i); + i:=pos(',',s); delete(s,1,i); + + //Affiche(enregistrement,clBlue); + end + else + begin + delete(enregistrement,1,1); // supprime le S + erreur:=pos('2-',enregistrement); + S2:=erreur<>0; + if (S2) then delete(enregistrement,erreur,2); + + erreur:=pos('S2',enregistrement); // description d'un rattachement à la branche S2 d'un aiguillage triple + tec:=erreur<>0; // ne supprimer que le 2 + if (tec) then delete(enregistrement,erreur+1,1); + + val(enregistrement,detect,erreur); // extraction de l'adresse + //if ((detect=0) and (erreur=0)) then Affiche('Erreur pas d''adresse dans section S: '+s,clred); + c:='Z'; + if (erreur<>0) then begin delete(enregistrement,1,erreur-1);c:=enregistrement[1];end; + + if not(S2) and not(tec) then begin aiguillage[aig].Adevie:=detect;aiguillage[aig].AdevieB:=c;end; + if S2 and not(tec) then begin aiguillage[aig].Adevie2:=detect;aiguillage[aig].Adevie2B:=c;end; + if S2 and tec then begin aiguillage[aig].Adevie2:=detect;aiguillage[aig].Adevie2B:='T';end; + + virgule:=pos(',',s);if virgule=0 then virgule:=length(s)+1; + enregistrement:=copy(s,1,virgule-1); + delete(s,1,virgule); + end; + end; + + if (length(enregistrement)<>0) then + if (enregistrement[1]='I') then + begin + delete(enregistrement,1,1); + Val(enregistrement,adr,erreur); + enregistrement:=''; + //Affiche(intTostr(adr),clblue); + Aiguillage[aig].inversionCDM:=adr; + end; + + //Affiche(s+'/'+Enregistrement,clLime); + // si vitesse définie + Val(enregistrement,adr,erreur); + if erreur=0 then + begin + //Affiche('section vitesse définie aig='+intToSTR(aig)+'/'+intToSTR(adr),clyellow); + aiguillage[aig].vitesse:=adr; + enregistrement:=''; + virgule:=pos(',',s);if virgule=0 then virgule:=length(s)+1; + enregistrement:=copy(s,1,virgule-1); + delete(s,1,virgule); + s:='';enregistrement:=''; + end; + + until enregistrement='' ; + end; + // Affiche(s,clLime); + until (s='0'); + //Affiche(IntToSTR(maxaiguillage)+' Aiguillages',clYellow); + + + Affiche('définition des branches',clyellow); + // branches de réseau + NDetecteurs:=0; Nligne:=1; + i:=1;i_detect:=1; + repeat + s:=lit_ligne; + mod_Branches[Nligne]:=s;inc(Nligne); + //Affiche(s,clWhite); + //adresse:=pos('0',s); + //s:='A16B,557,0' ; + if s<>'0' then + begin + branche[i]:=s; + j:=1;offset:=1; + repeat + BrancheN[i,j].adresse:=0; // préparer le suivant à 0 + offset:=trouve_enregistrement_suiv(i,offset) ; + // décoder l'enregistrement + // si c'est un détecteur, fini trouvé + //affiche(enregistrement,clred); + Val(enregistrement,detect,erreur); // détermine si le champ est numérique ou pas (cad si aiguillage) + //Affiche(enregistrement+'detect='+intToSTR(detect),clyellow); + + // il y a un aiguillage ou un espace après le champ....en fin de ligne + if erreur<>0 then + begin + c:=enregistrement[1]; + delete(enregistrement,1,1); + if c='A' then + begin + Val(enregistrement,adresse,erreur2); + //Affiche(IntToSTR(adresse),clyellow); + BrancheN[i,j].adresse:=adresse; + k:=pos('B',enregistrement); + if k=0 then BrancheN[i,j].btype:=2 else BrancheN[i,j].btype:=3; // ident aiguillage + end + else erreur:=0; // forcer erreur à 0 pour obliger à passer sur un détecteur + end; + + // détecteur + if erreur=0 then + begin + //Affiche(IntToSTR(detect),clyellow); + //Affiche(s,clorange); Affiche(IntToStr(detect),clorange); + BrancheN[i,j].adresse:=detect; // adresse + BrancheN[i,j].btype:=1;// ident détecteur + if detect=0 then begin BrancheN[i,j].btype:=4;end; // buttoir + //if j=1 then Affiche('Erreur la ligne doit commencer par un aiguillage: '+s,clred); + //if (offset=-1) then Affiche('Erreur la ligne soit se terminer par un aiguillage:'+s,clred); + // vérifier si le détecteur est déja stocké + bd:=0; + repeat + inc(bd); + trouve:=Adresse_detecteur[bd]=detect; + until ((bd=NDetecteurs+1) or trouve) ; + if not(trouve) then + begin + Adresse_detecteur[bd]:=detect; + NDetecteurs:=bd; + end; + end; + inc(j); + BrancheN[i,j].adresse:=0; // préparer le suivant à 0 + //Affiche('branche '+intToSTR(i)+' index='+intToStr(j),clGreen); + until (offset=0); + inc(i); + end; + until (s='0'); + NbreBranches:=i-1; + // Affiche(IntToSTR(NbreBranches)+' branches',clYellow); + + // feux + Affiche('Définition des feux',clyellow); + i:=1;Nligne:=1; + repeat + s:=lit_ligne; + if s<>'0' then + begin + chaine:=s; inc(Nligne); + //Affiche(s,clYellow); + finifeux:=s[1]='0'; + if not(finifeux) then + begin + chaine:=s; + j:=pos(',',s); + if j>1 then + begin + adresse:=StrToINT(copy(s,1,j-1));Delete(s,1,j); // adresse de feu + feux[i].adresse:=adresse; + j:=pos(',',s); + if j>1 then + begin + sa:=copy(s,1,j-1); + if sa[1]='D' then + // feu directionnel ------------------------------------------ + begin + delete(sa,1,1); + j:=pos(',',s); + l:=StrToInt(sa); // nombre de feux du signal directionnel + if l>6 then + begin + Affiche('Ligne '+s+' 6 feux maximum pour un panneau directionnel',clred); + exit; + end; + feux[i].aspect:=l+10;Delete(s,1,j); + // décodeur + val(s,adr,erreur); + Feux[i].decodeur:=adr; + j:=pos(',',s);Delete(s,1,j); + //Affiche(s,clYellow); + //s:='(A19D,A22D)(A19D,A22S)'; + // liste des aiguillages + k:=1; // numéro de feu directionnel + repeat + // boucle de direction + delete(s,1,1); // supprimer ( ou le , + j:=1; // Nombre de descriptions d'aiguillages dans le feu + //Affiche('Boucle de Ligne',clyellow); + //Affiche(s,clOrange); + repeat + //Affiche('Boucle de direction',clyellow); + //Affiche(s,clOrange); + if s[1]<>'A' then begin Affiche('Erreur a la ligne',clred);exit;end; + delete(s,1,1); + val(s,adr,erreur); // adresse + c:=s[erreur]; // type + setlength(feux[i].AigDirection[k],j+1); // augmenter le tableau dynamique + feux[i].AigDirection[k][j].PosAig:=c; + feux[i].AigDirection[k][j].Adresse:=adr; + + // Affiche(intToSTR(Adr)+c,clyellow); + // Affiche(intToSTR(erreur),clOrange); + delete(s,1,erreur); // supprime jusque S + //Affiche(s,clLime); + if s[1]=',' then delete(s,1,1); + inc(j); + until s[1]=')'; + delete(s,1,1); + inc(k); + until length(s)<1; + dec(k); + if k<>l+1 then + begin + Affiche('Ligne '+chaine,clred); + Affiche('Nombre incorrect de description des aiguillages: '+intToSTR(k)+' pour '+intToSTR(l)+' feux directionnels',clred); + end; + + end + else + // feu de signalisation--------------------------------- + begin + k:=StrToInt(sa); //aspect + feux[i].aspect:=k;Delete(s,1,j); + if (k=0) or (k=6) or (k>9) then + Affiche('Fichier config.cfg: configuration aspect ('+intToSTR(k)+') feu incorrecte à la ligne '+chaine,clRed); + j:=pos(',',s); + if j>1 then begin Feux[i].FeuBlanc:=(copy(s,1,j-1))='1';delete(s,1,j);end; + j:=pos(',',s); + if j=0 then begin Feux[i].decodeur:=StrToInt(s);end else begin Feux[i].decodeur:=StrToInt(copy(s,1,j-1));delete(s,1,j);end; + feux[i].Adr_el_suiv1:=0;feux[i].Adr_el_suiv2:=0;feux[i].Adr_el_suiv3:=0;feux[i].Adr_el_suiv4:=0; + feux[i].Btype_Suiv1:=0;feux[i].Btype_Suiv2:=0;feux[i].Btype_Suiv3:=0;feux[i].Btype_Suiv4:=0; + feux[i].Adr_det1:=0;feux[i].Adr_det2:=0;feux[i].Adr_det3:=0;feux[i].Adr_det4:=0; + // éléments optionnels des voies supplémentaires + if j<>0 then + begin + //Affiche('Entrée:s='+s,clyellow); + sa:=s; + multiple:=s[1]='('; + if multiple then + begin + delete(s,1,1); + j:=0; + repeat + k:=pos(',',s); + if k>1 then + begin + val(s,adr,erreur); // extraire l'adresse + Delete(s,1,k); + end; + //Affiche('Adr='+IntToSTR(adr)+' ' +intToSTR(erreur),clyellow); + //Affiche('S avec premier champ supprimé='+s,clyellow); + inc(j); + if (j=1) then feux[i].Adr_det1:=adr; + if (j=2) then feux[i].Adr_det2:=adr; + if (j=3) then feux[i].Adr_det3:=adr; + if (j=4) then feux[i].Adr_det4:=adr; + //type de l'élément suivant (1=détecteur 2=aig ou TJD ou TJS 4=tri + t:=0; + if s[1]='A' then + begin + t:=2; + //Affiche('détecté aiguillage',clyellow); + if (j=1) then feux[i].Btype_Suiv1:=2; + if (j=2) then feux[i].Btype_Suiv2:=2; + if (j=3) then feux[i].Btype_Suiv3:=2; + if (j=4) then feux[i].Btype_Suiv4:=2; + delete(s,1,1); + end; + l:=pos('TRI',s); + if l<>0 then + begin + t:=4; + delete(s,l,3); + //Affiche('détecté aiguillage tri',clyellow); + if (j=1) then feux[i].Btype_Suiv1:=4; + if (j=2) then feux[i].Btype_Suiv2:=4; + if (j=3) then feux[i].Btype_Suiv3:=4; + if (j=4) then feux[i].Btype_Suiv4:=4; + end; + + if t=0 then //détecteur + begin + if (j=1) then feux[i].Btype_Suiv1:=1; + if (j=2) then feux[i].Btype_Suiv2:=1; + if (j=3) then feux[i].Btype_Suiv3:=1; + if (j=4) then feux[i].Btype_Suiv4:=1; + end; + Val(s,adr,erreur); + //Affiche('Adr='+IntToSTR(Adr),clyellow); + if (j=1) then feux[i].Adr_el_suiv1:=Adr; + if (j=2) then feux[i].Adr_el_suiv2:=Adr; + if (j=3) then feux[i].Adr_el_suiv3:=Adr; + if (j=4) then feux[i].Adr_el_suiv4:=Adr; + delete(s,1,erreur-1); + if s[1]=',' then delete(s,1,1); + //Affiche('S en fin de traitement s='+s,clyellow); + fini:=s[1]=')'; + until (fini) or (j>4); + //if fini then Affiche('fini',clyellow); + end; + end; + if (j>4) or (not(multiple)) then begin Affiche('Erreur: fichier de configuration ligne erronnée : '+chaine,clred); closefile(fichier);exit;end; + + k:=pos(',',s); + delete(s,1,k); + //Affiche('s='+s,clyellow); + feux[i].VerrouCarre:=s[1]='1'; + delete(s,1,1); + // si décodeur UniSemaf (6) champ supplémentaire + if Feux[i].decodeur=6 then + begin + k:=pos(',',s); + if k=0 then begin Affiche('Ligne '+chaine,clred);Affiche('Manque définition de la cible pour le décodeur UniSemaf',clred);end + else + begin + Delete(S,1,k); + Val(s,k,erreur); + Feux[i].UniSemaf:=k; + end; + end; + end; + // voir si conditions supplémentaires de carré + l:=1; // nombre de parenthèses + repeat + t:=pos('(',s); + if t<>0 then + begin + //Affiche('Conditions supplémentaires pour le feu '+IntToSTR(adresse)+' parenthèse '+intToSTR(l),clyellow); + k:=pos(')',s); + sa:=copy(s,t+1,k-t-1); // contient l'intérieur des parenthèses sans les parenthèses + //Affiche(sa,clLime); + delete(s,1,k);//Affiche(s,clYellow); + // boucle dans la parenthèse + bd:=0; + repeat + inc(bd); + setlength(feux[i].condCarre[l],bd+1); // une condition en plus + k:=pos(',',sa); + if k<>0 then + chaine:=copy(sa,1,k-1) + else + chaine:=sa; + + if chaine[1]='A' then + begin + delete(chaine,1,1); + //Affiche(chaine,ClOrange); + val(chaine,adresse,erreur); + feux[i].condCarre[l][bd].Adresse:=adresse; + if erreur<>0 then feux[i].condCarre[l][bd].PosAig:=chaine[erreur] else + Affiche('Définition du feu '+IntToSTR(feux[i].adresse)+': Manque D ou S dans les conditions de carré des aiguillages',clred); + end; + + k:=pos(',',sa);if k<>0 then delete(sa,1,k); + //Affiche(sa,clyellow); + until k=0; + //Affiche('Longueur tableau '+IntToSTR(l)+':'+intToSTR(length(feux[i].condCarre[l])),clyellow); + inc(l); + end; + until t=0; + end; + inc(i); + end; + end; + end; + until (finifeux) or (s='0'); + NbreFeux:=i-1; if NbreFeux<0 then NbreFeux:=0; + //Affiche('Nombre de feux='+IntToSTR(NbreFeux),clYellow); + + configNulle:=(maxAiguillage=0) and (NbreBranches=0) and (Nbrefeux=0); + if configNulle then Affiche('Fonctionnement en config nulle',ClYellow); + + // raz des actionneurs + for i:=1 to maxTablo_act do + begin + Tablo_actionneur[i].train:=''; + Tablo_actionneur[i].etat:=0; + Tablo_actionneur[i].actionneur:=0; + Tablo_actionneur[i].accessoire:=0; + Tablo_actionneur[i].sortie:=0; + end; + + // définition des actionneurs + maxTablo_act:=1; + NbrePN:=0;Nligne:=1; + repeat + s:=lit_ligne; + // vérifier si F ou A au 4eme champ + sa:=s; + i:=pos(',',sa); + if i>0 then delete(sa,1,i) else s:='0'; + i:=pos(',',sa); + if i>0 then delete(sa,1,i) else s:='0'; + i:=pos(',',sa); + if i>0 then delete(sa,1,i) else s:='0'; + + mod_act[Nligne]:=s;inc(Nligne); + + if length(sa)>1 then if (sa[1]='A') then + // -----------------accessoire + begin + // 815,1,CC406526,A600,1 + i:=pos(',',s); + if i<>0 then + begin + val(copy(s,1,i-1),j,erreur); + Tablo_actionneur[maxTablo_act].actionneur:=j; + Delete(s,1,i); + i:=pos(',',s); + if i<>0 then + begin + i:=pos(',',s); + val(copy(s,1,i-1),j,erreur); + Tablo_actionneur[maxTablo_act].etat:=j; + Delete(s,1,i); + + i:=pos(',',s); + Tablo_actionneur[maxTablo_act].train:=copy(s,1,i-1); + Delete(s,1,i); + + i:=pos('A',s); + if i<>0 then + begin + Delete(s,1,1); + val(s,j,erreur); + Tablo_actionneur[maxTablo_act].Accessoire:=j; + + i:=pos(',',s); + if i<>0 then + begin + Delete(S,1,i); + val(s,j,erreur); + Tablo_actionneur[maxTablo_act].sortie:=j; + end; + + i:=pos(',',s); + if i<>0 then + begin + Delete(S,1,i); + Tablo_actionneur[maxTablo_act].RAZ:=s[1]='Z'; + inc(maxTablo_act); + end; + + end; + s:='';i:=0; + end; + end; + + end; + + if length(sa)>1 then if (sa[1]='F') then + // -----------------fonction + begin + // 815,1,CC406526,F2,450 + i:=pos(',',s); + if i<>0 then + begin + val(copy(s,1,i-1),j,erreur); + Tablo_actionneur[maxTablo_act].actionneur:=j; + Delete(s,1,i); + i:=pos(',',s); + if i<>0 then + begin + i:=pos(',',s); + val(copy(s,1,i-1),j,erreur); + Tablo_actionneur[maxTablo_act].etat:=j; + Delete(s,1,i); + + i:=pos(',',s); + Tablo_actionneur[maxTablo_act].train:=copy(s,1,i-1); + Delete(s,1,i); + + i:=pos('F',s); + if i<>0 then + begin + Delete(s,1,1); + val(s,j,erreur); + Tablo_actionneur[maxTablo_act].Fonction:=j; + + i:=pos(',',s); + if i<>0 then + begin + Delete(S,1,i); + val(s,j,erreur); + Tablo_actionneur[maxTablo_act].Tempo:=j; + inc(maxTablo_act); + end; + end; + s:='';i:=0; + end; + end; + end; + + // Passage à niveau + // (815,820),(830,810)...,PN(121+,121-) + // (815,809),PN(121+,121-) + if (pos('PN',s)<>0) then + begin + inc(NbrePN); + NbreVoies:=0; + repeat + inc(NbreVoies); + //Affiche('NbreVoies='+intToSTR(NbreVoies),clyellow); + //SetLength(Tablo_PN[1].Voie,1); + Delete(s,1,1); // supprime ( + val(s,j,erreur); + + Tablo_PN[NbrePN].voie[NbreVoies].ActFerme:=j; + + // Affiche('Ferme='+intToSTR(j),clyellow); + i:=pos(',',s);Delete(S,1,i); + val(s,j,erreur); + Tablo_PN[NbrePN].voie[NbreVoies].ActOuvre:=j; + // Affiche('Ouvre='+intToSTR(j),clyellow); + i:=pos(')',s);Delete(S,1,i); + i:=pos(',',s);Delete(S,1,i); + Tablo_PN[NbrePN].voie[NbreVoies].PresTrain:=false; + until (copy(s,1,2)='PN') or (NbreVoies=10); + + Tablo_PN[NbrePN].NbVoies:=NbreVoies; + Delete(s,1,3); // Supprime PN( + val(s,j,erreur); + Tablo_PN[NbrePN].Adresseferme:=j; + Delete(s,1,erreur-1); + if s[1]='+' then Tablo_PN[NbrePN].CommandeFerme:=2; + if s[1]='-' then Tablo_PN[NbrePN].CommandeFerme:=1; + Delete(s,1,2); // supprime +, + + val(s,j,erreur); + Tablo_PN[NbrePN].AdresseOuvre:=j; + Delete(s,1,erreur-1); + if s[1]='+' then Tablo_PN[NbrePN].CommandeOuvre:=2; + if s[1]='-' then Tablo_PN[NbrePN].CommandeOuvre:=1; + Delete(s,1,1); // supprime ) + inc(maxTablo_act); + i:=0; + end; + if pos('PN',s)<>0 then i:=0; + until (s='0'); + dec(maxTablo_act); + + closefile(fichier); + // vérification de la cohérence1 + // parcoure les branches jusqu'à trouver un aiguillage pour voir s'il a été décrit + for i:=1 to NbreBranches do + begin + j:=1; + repeat + detect:=BrancheN[i][j].Adresse; + modele:=BrancheN[i][j].BType; // 1= détecteur 2= aiguillage 3=bis 4=Buttoir + j:=j+1; + until ( (modele=1) or (modele=2) or (modele=3) or ((modele=0) and (detect=0))); + // trouvé un aiguillage et récupéré son adresse dans detect + //if (type!=1) Display("Erreur aucun détecteur dans la déclaration du réseau\r\n"); + if (modele=1) or (modele=2) or (modele=3) then + begin + modele:=aiguillage[detect].modele; + if (modele=0) then Affiche('Erreur 1: Aiguillage='+intToStr(detect)+' non décrit mais présent dans la description des branches '+intToStr(i)+'/'+intToSTR(j),clred); + end; + end; + + // vérification de la cohérence2 + // parcoure les aiguillages pour voir si les détecteurs sont en branches des détecteurs + // et les tjd pour voir si pb de cohérence + for aig:=1 to maxaiguillage do + begin + // tjd + if aiguillage[aig].modele=2 then + begin + if aiguillage[aig].Ddroit<>aiguillage[aig].Ddevie then + Affiche('Erreur 7: la TJD '+IntToStr(aig)+' a des adresses de destination différentes ('+intToSTR(aiguillage[aig].Ddroit)+' et '+intToSTR(aiguillage[aig].Ddevie)+')',clred); + // vérifier si son homologue est une tjd + adr2:=aiguillage[aig].Ddroit; + if aiguillage[adr2].modele<>2 then Affiche('Erreur 8: l''aiguillage '+intToStr(Adr2)+' n''est pas une TJD, mais apparait dans la TJD '+IntToSTR(aig),clred); + end; + // vérifier si l'aiguillage est dans les branches + if aiguillage[aig].modele<>0 then + begin + trouve_aiguillage(aig); + if (IndexBranche_trouve=0) then + Affiche('Erreur 6: aiguillage '+intToSTR(aig)+' décrit dans les aiguillages mais absent dans la description des branches',clred); + end; + adr:=aiguillage[aig].Adroit; + if (aiguillage[aig].AdroitB='Z') then + begin + trouve_detecteur(adr); // branche_trouve IndexBranche_trouve + if (IndexBranche_trouve=0) then + Affiche('Erreur 2: détecteur '+intToSTR(adr)+' décrit dans l''aiguillage '+intToSTR(aig)+' mais absent dans la description des branches',clred); + end; + adr:=aiguillage[aig].Adevie; + if (aiguillage[aig].AdevieB='Z') then + begin + trouve_detecteur(adr); // branche_trouve IndexBranche_trouve + if (IndexBranche_trouve=0) then + Affiche('Erreur 3: détecteur '+intToSTR(adr)+' décrit dans l''aiguillage '+intToSTR(aig)+' mais absent dans la description des branches',clRed); + end; + adr:=aiguillage[aig].Apointe; + if ((aiguillage[aig].ApointeB='Z') and (aiguillage[aig].modele=1)) then + begin + trouve_detecteur(adr); // branche_trouve IndexBranche_trouve + if (IndexBranche_trouve=0) then + Affiche('Erreur 4 : détecteur '+intToSTR(adr)+' décrit dans l''aiguillage '+intToSTR(aig)+' mais absent dans la description des branches',clRed); + end; + if (aiguillage[aig].modele=4) then // aiguillage triple + begin + if (aiguillage[aig].Adevie2B='Z') then + begin + adr:=aiguillage[aig].Adevie2; + trouve_detecteur(adr); // branche_trouve IndexBranche_trouve + if (IndexBranche_trouve=0) then + Affiche('Erreur 5 : détecteur '+intToSTR(adr)+' décrit dans l''aiguillage '+intToSTR(aig)+' mais absent dans la description des branches',clRed); + end; + end; + end; +end; + +// front descendant sur un détecteur +function detecteur_0(adresse : integer) : boolean; +begin + detecteur_0:=(Ancien_detecteur[adresse]=true) and ((detecteur[adresse])=false); + Ancien_detecteur[adresse]:=detecteur[adresse]; +end; + +function detecteur_1(adresse : integer) : boolean; +begin + detecteur_1:=(Ancien_detecteur[adresse]=false) and ((detecteur[adresse])=true); + Ancien_detecteur[adresse]:=detecteur[adresse]; +end; + +function virgule_prec(sl : string;o : integer) : integer; +var k : integer; +begin + o:=o-1; + for k:=o downto 1 do + begin + //Affiche(intToSTR(k)+'/'+sl[k],clGreen); + if sl[k]=',' then begin result:=k;exit;end; + end; + result:=0; +end; + +// trouve un élément dans 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) +procedure trouve_element(el, TypeEl, Offset : integer); +var i,Btype,adr,Branche : integer ; + s : string; + sort : boolean; +begin + //Affiche('cherche'+IntToSTR(el)+'/'+IntToSTR(TypeEl),clred); + Branche:=Offset; + branche_trouve:=0; + IndexBranche_trouve:=0; + i:=1; + repeat + adr:=BrancheN[Branche,i].Adresse; + Btype:=BrancheN[Branche,i].BType; + //Affiche(IntToSTR(adr)+'/'+IntToSTR(BType),clred); + if ((adr=0) and (Btype=0)) then begin inc(Branche);i:=0;end; + inc(i); + sort:=(Branche>NbreBranches) or // 1= détecteur 2= aiguillage 3=bis 4=Buttoir + ((adr=el) and (TypeEl=4) and (Btype=2)) or //typeEl=4=aig triple + ((adr=el) and (TypeEl=3) and (Btype=3)) or + ((adr=el) and (TypeEl=2) and (Btype=2)) or + ((adr=el) and (TypeEl=1) and (Btype=1)) or + ((adr=el) and (TypeEl=1) and (Btype=4)) ; //buttoir + until (sort); + if (adr=el) then + begin + branche_trouve:=Branche; + IndexBranche_trouve:=i-1; + //Affiche('trouvé',clgreen); + end + else begin s:='Erreur 175 - élément '+intToSTR(el); + s:=s+' non trouvé';Affiche(s,clred); + branche_trouve:=0; IndexBranche_trouve:=0; + if NivDebug>=1 then AfficheDebug(s,clred); + end; +end; + + + +// renvoie élément suivant entre deux éléments quels qu'ils soient mais contigus +// et en variables globales: typeGen le type de l'élément +// s'ils ne sont pas contigus, on aura une erreur +// alg= algorithme : +// 1=arret sur suivant qu'il soit un détecteur ou un aiguillage +// 2=arret sur aiguillage en talon mal positionné +// 3=arret sur un aiguillage pris en pointe dévié et AdrDevie contient l'adresse de l'aiguillage dévié ainsi que typeGen +// code de sortie : élément suivant ou: +// 9999=erreur fatale ou itération trop longue +// 9998= arret sur aiguillage en talon mal positionnée +// 9997: arrêt sur aiguillage dévié +// 9996: arrêt sur position inconnue d'aiguillage +// 9995: TJD non résolue +// typeGen : 1=detecteur 2=aiguillage 3=aiguillage bis +function suivant_alg3(prec : integer;typeELprec : integer;var actuel : integer;typeElActuel : integer;alg : integer) : integer; +var Btype,Adr,AdrPrec,BtypePrec,indexBranche_prec,branche_trouve_prec,indexBranche_actuel,branche_trouve_actuel, + tjsc1,tjsc2,AdrTjdP,Adr2,TypeEl,N_iteration : integer; + tjscourbe1,tjscourbe2,tjd,tjs : boolean; + A,Aprec,tjsc1B,tjsc2B: char; + s : string; + + procedure substitue; + begin + if (typeGen=2) then // si le précédent est une TJD/S et le suivant aussi , substituer pointe (chgt de actuel en VAR dans la déclaration de alg3) + begin + if ((aiguillage[Adr].modele=2) or (aiguillage[Adr].modele=3)) and + ((aiguillage[Actuel].modele=2) or (aiguillage[Actuel].modele=3)) then + begin + if nivDebug=3 then AfficheDebug('500 - Détection Précédent=TJD/S Suivant=TJD/S',clyellow); + // subsituer la pointe + Actuel:=aiguillage[Actuel].APointe; + end; + end; + end; + + +label recommence; +begin + n_iteration:=0; + recommence: + if (prec=29) and (actuel=31) then NivDebug:=3; + if (TypeELPrec=0) or (typeElActuel=0) then + begin + s:='Erreur 800 - Types nuls : '+intToSTR(prec)+'/'+intToSTR(TypeElPrec)+' '+IntToSTr(actuel)+'/'+IntToSTR(typeElActuel) ; + Affiche(s,clred); + AfficheDebug(s,clred); + Suivant_alg3:=9999;exit; + end; + if NivDebug=3 then AfficheDebug('Alg3 précédent='+intToSTR(prec)+'/'+intToStr(TypeElprec)+' actuel='+intToSTR(actuel)+'/'+IntToSTR(typeElActuel),clyellow); + // trouver les éléments du précédent + trouve_element(prec,TypeELPrec,1); // branche_trouve IndexBranche_trouve + if IndexBranche_trouve=0 then + begin + if NivDebug=3 then AfficheDebug('Element '+intToSTR(prec)+' non trouvé',clred); + suivant_alg3:=9999;exit; + end; + + indexBranche_prec:=IndexBranche_trouve; + branche_trouve_prec:=branche_trouve; + BtypePrec:=BrancheN[branche_trouve_prec,indexBranche_prec].Btype; + // if BTypePrec=2 then aiguillage[prec].A + + trouve_element(actuel,typeElActuel,1); // branche_trouve IndexBranche_trouve + if IndexBranche_trouve=0 then + begin + if NivDebug=3 then AfficheDebug('Element '+intToSTR(actuel)+' non trouvé',clred); + suivant_alg3:=9999;exit; + end; + + indexBranche_actuel:=IndexBranche_trouve; + branche_trouve_actuel:=branche_trouve; + + Adr:=actuel; + Btype:=BrancheN[branche_trouve_actuel,indexBranche_actuel].Btype; + + //Affiche('Btype='+intToSTR(Btype)+' Actuel='+inTToSTR(actuel),clyellow); + + if Btype=1 then // l'élément actuel est un détecteur + begin + // on part de l'actuel pour retomber sur le précédent + if BrancheN[branche_trouve_actuel,indexBranche_actuel-1].Adresse=prec then // c'est l'autre sens + begin + if NivDebug=3 then AfficheDebug('40 - trouvé détecteur '+intToSTR(adr)+' en + ',clwhite); + Prec:=Adr; + Aprec:=a; + A:='Z'; + Adr:=BrancheN[branche_trouve_actuel,indexBranche_actuel+1].Adresse; + typeGen:=BrancheN[branche_trouve_actuel,indexBranche_actuel+1].Btype; + if NivDebug=3 then + begin + s:='41 - Le suivant est :'+intToSTR(adr); + AfficheDebug(s,clwhite); + end; + suivant_alg3:=adr; + exit; + end; + if BrancheN[branche_trouve_actuel,indexBranche_actuel+1].Adresse=prec then + begin + if NivDebug=3 then AfficheDebug('42 - trouvé détecteur '+intToSTR(adr)+' en - ',clwhite); + Prec:=Adr; + Aprec:=a; + A:='Z'; + Adr:=BrancheN[branche_trouve_actuel,indexBranche_actuel-1].Adresse; + typeGen:=BrancheN[branche_trouve_actuel,indexBranche_actuel-1].Btype; + if NivDebug=3 then + begin + s:='43 - Le suivant est :'+intToSTR(adr); + AfficheDebug(s,clwhite); + end; + suivant_alg3:=adr; + exit; + end; + // ici, les éléments sont non consécutifs. voir si l'un des deux est une TJD/TJS + if (btypePrec=2) or (btypePrec=3) then + begin + // changer l'adresse du précédent par l'autre adresse de la TJD/S + prec:=Aiguillage[prec].Ddroit; + if NivDebug=3 then AfficheDebug('Le précedent est une TJD/S - substitution du precédent par la pointe de la TJD qui est '+intToSTR(prec),clYellow); + inc(n_iteration); + if n_iteration>50 then + begin + s:='Erreur fatale 9999, trop d''itérations'; + Affiche(s,clRed); + AfficheDebug(s,clRed); + suivant_alg3:=9999; + exit; + end; + goto recommence; + end; + + Affiche('44 - éléments non consécutifs: Prec='+intToSTR(prec)+' Actuel='+intTostr(Actuel),clred); + if NivDebug=3 then AfficheDebug('44 - éléments non consécutifs: Prec='+intToSTR(prec)+' Actuel='+intTostr(Actuel),clred); + end; + + if (Btype>=2) then // aiguillage ou bis ou buttoir + begin + if (aiguillage[Adr].modele=1) and (Btype=2) then // aiguillage normal non bis + begin + // aiguillage pris en pointe + if (aiguillage[adr].Apointe=prec) then + begin + if aiguillage[Adr].position=const_droit then + begin + if NivDebug=3 then AfficheDebug('130 - aiguillage '+intToSTR(Adr)+' Pris en pointe droit',clyellow); + AdrPrec:=Adr; + if Adr=0 then + begin + Affiche('131 - Erreur fatale',clRed);suivant_alg3:=9999;exit; + end; + BtypePrec:=Btype; + Aprec:=a; + A:=aiguillage[Adr].AdroitB; + Adr:=aiguillage[Adr].Adroit; + if A='Z' then TypeEl:=1 else TypeEL:=2; //TypeEL=(1=détécteur 2=aig 3=aig Bis) + trouve_element(adr,typeEl,1); // branche_trouve IndexBranche_trouve + typeGen:=BrancheN[branche_trouve,IndexBranche_trouve].Btype; + suivant_alg3:=adr; + exit; + end; + if aiguillage[Adr].position<>const_droit then + begin + if NivDebug=3 then AfficheDebug('133 - aiguillage '+intToSTR(Adr)+' Pris en pointe dévié',clyellow); + AdrPrec:=Adr; + if alg=3 then // on demande d'arreter si l'aiguillage pris en pointe est dévié + begin + typeGen:=0; + AdrDevie:=Adr; + suivant_alg3:=9997;exit; + end; + if Adr=0 then + begin Affiche('134 - Erreur fatale',clRed); + if NivDebug>=1 then AfficheDebug('134 - Erreur fatale',clRed); + suivant_alg3:=9999;exit; + end; + BtypePrec:=Btype; + Aprec:=A; + A:=aiguillage[Adr].AdevieB; + Adr:=aiguillage[Adr].Adevie; + if A='Z' then TypeEl:=1 else TypeEL:=2; //TypeEL=(1=détécteur 2=aig 3=aig Bis) + trouve_element(adr,TypeEl,1); // branche_trouve IndexBranche_trouve + typeGen:=BrancheN[branche_trouve,IndexBranche_trouve].Btype; + suivant_alg3:=adr;exit; + end; + end + else + begin + if NivDebug=3 then AfficheDebug('135 - aiguillage '+intToSTR(Adr)+' Pris en talon',clyellow); + if alg=2 then // on demande d'arreter si l'aiguillage en talon est mal positionné + begin + if aiguillage[adr].position=const_droit then + begin + if prec<>aiguillage[Adr].Adroit then + begin + if NivDebug=3 then AfficheDebug('135.1 - Aiguillage '+intToSTR(adr)+' mal positionné',clyellow); + suivant_alg3:=9998;exit; + end + else + begin + if NivDebug=3 then AfficheDebug('135.2 - Aiguillage '+intToSTR(adr)+' bien positionné',clyellow); + end; + end + else + begin + if prec<>aiguillage[Adr].Adevie then + begin + if NivDebug=3 then AfficheDebug('135.3 Aiguillage '+intToSTR(adr)+' mal positionné',clyellow); + suivant_alg3:=9998;exit; + end + else + begin + if NivDebug=3 then AfficheDebug('135.4 Aiguillage '+intToSTR(adr)+' bien positionné',clyellow); + end; + end; + end; + + AdrPrec:=Adr; + if Adr=0 then + begin Affiche('136 - Erreur fatale',clRed); + if NivDebug>=1 then AfficheDebug('136 - Erreur fatale',clRed); + suivant_alg3:=9999;exit; + end; + BtypePrec:=Btype; + APrec:=A; + A:=aiguillage[Adr].ApointeB; + Adr:=aiguillage[Adr].Apointe; + // Affiche('trouvé '+intToSTR(adr),clyellow); + if A='Z' then TypeEl:=1 else TypeEL:=2; //TypeEL=(1=détécteur 2=aig 3=aig Bis) + trouve_element(adr,TypeEl,1); // branche_trouve IndexBranche_trouve + typeGen:=BrancheN[branche_trouve,IndexBranche_trouve].Btype; + suivant_alg3:=adr; + exit; + end; + Affiche('138 - Erreur fatale - Aucun cas Aiguillage',clred); + if NivDebug=3 then AfficheDebug('138 - Erreur fatale - Aucun cas Aiguillage',clred); + suivant_alg3:=9999;exit; + end; + + if (aiguillage[Adr].modele=2) or (aiguillage[Adr].modele=3) then // TJD ou TJS + begin + // récupérer les élements de la TJD/S + AdrTjdP:=aiguillage[Adr].Ddroit; // 2eme adresse de la TJD/S + tjd:=aiguillage[Adr].modele=2; + tjs:=aiguillage[Adr].modele=3; + tjsc1:=aiguillage[Adr].tjsint; // adresses de la courbe de la TJS + tjsc2:=aiguillage[AdrTjdP].tjsint; + tjsc1B:=aiguillage[Adr].tjsintB; + tjsc2B:=aiguillage[AdrTjdP].tjsintB; + if tjsc1<>0 then // si tjs + begin + tjscourbe1:=(aiguillage[Adr].tjsintB='S') and (aiguillage[tjsc1].position<>const_droit); + tjscourbe1:=((aiguillage[Adr].tjsintB='D') and (aiguillage[tjsc1].position=const_droit)) or tjscourbe1; + end; + if tjsc2<>0 then + begin + tjscourbe2:=(aiguillage[AdrTjdP].tjsintB='S') and (aiguillage[tjsc2].position<>const_droit); + tjscourbe2:=((aiguillage[AdrTjdP].tjsintB='D') and (aiguillage[tjsc2].position=const_droit)) or tjscourbe2; + end; + + + if NivDebug=3 then AfficheDebug('137 - TJD '+intToSTR(Adr)+'/'+IntToSTR(AdrTjdP),clYellow); + s:='adr='+IntToSTR(adr)+'='; + if aiguillage[Adr].position=const_droit then s:=s+'droit' + else if aiguillage[Adr].position=const_devie then s:=s+'dévié' + else s:=s+'inconnu' ; + s:=s+'/adrTjdP='+IntToSTR(adrTJDP)+'='; + if aiguillage[AdrTJDP].position=const_droit then s:=s+'droit' + else if aiguillage[AdrTJDP].position=const_devie then s:=s+'dévié' + else s:=s+'inconnu' ; + + + // rechercher le port de destination de la tjd + Adr2:=0;A:=#0; + if aiguillage[Adr].position=const_droit then + begin + A:=aiguillage[Adr].DDroitB; + adr2:=aiguillage[Adr].DDroit; + end; + if aiguillage[Adr].position=const_devie then + begin + A:=aiguillage[Adr].DDevieB; + adr2:=aiguillage[Adr].DDevie; + end; + if nivDebug=3 then Affichedebug('le port de destination de la tjd est '+IntToSTR(adr2)+a,clyellow); + + // extraire l'élément connecté au port de destination de la tjd + if A='S' then + begin + A:=aiguillage[adr2].AdevieB; + adr2:=aiguillage[adr2].Adevie; + //Affichedebug('element connecté:'+inttostr(adr)+A,clred); + end + else + if A='D' then + begin + A:=aiguillage[adr2].AdroitB; + adr2:=aiguillage[adr2].Adroit; + end + else + begin + s:='Erreur 1021 TJD '+intToSTR(adr)+' non résolue'; + affichedebug(s,clred); + affiche(s,clred); + suivant_alg3:=9996; + exit; + end; + + if nivDebug=3 then AfficheDebug('tjd: '+s+' Suiv='+intToSTR(adr2)+A,clYellow); + if A='Z' then typeGen:=1 else typeGen:=2; //TypeEL=(1=détécteur 2=aig 3=aig Bis) + suivant_alg3:=adr2; + exit; + + // determiner la position de la première section de la TJD (4 cas) + // cas 1 : droit droit + if (( aiguillage[AdrTJdP].position=const_droit) and + (aiguillage[Adr].position=const_droit) and tjd) then + begin + // d'où vient ton sur la tjd + if aiguillage[Adr].Adroit=prec then + begin + + A:=aiguillage[Adr].DdroitB; + Adr:=aiguillage[Adr].Ddroit; + if A='D' then + begin + Adr:=aiguillage[AdrTjDP].Adroit; + A:=aiguillage[AdrTjDP].AdroitB; + end; + if A='S' then + begin + Adr:=aiguillage[AdrTjDP].Adevie; + A:=aiguillage[AdrTjDP].AdevieB; + end; + if NivDebug=3 then AfficheDebug('cas1.1 tjd: '+s+' Adr='+intToSTR(adr)+A,clYellow); + if A='Z' then typeGen:=1 else typeGen:=2; //TypeEL=(1=détécteur 2=aig 3=aig Bis) + suivant_alg3:=adr; + substitue; + exit; + end; + if aiguillage[Adr].Adevie=prec then + begin + A:=aiguillage[AdrTjdP].AdroitB; + Adr:=aiguillage[AdrTjdP].Adroit; + if NivDebug=3 then AfficheDebug('cas1.2 tjd: '+s+' Suiv='+intToSTR(adr)+A,clYellow); + if A='Z' then typeGen:=1 else typeGen:=2; //TypeEL=(1=détécteur 2=aig 3=aig Bis) + suivant_alg3:=adr; + substitue; + exit; + end; + s:='Erreur 1021, TJD '+IntToSTR(Adr)+'/'+IntToSTR(AdrTjdP)+' mal positionnée'; + if nivDebug=3 then AfficheDebug(s,clred); + Affiche(s,clred); + Suivant_alg3:=9998;exit; + end; + // cas 2 TJD + if (aiguillage[Adr].position=const_devie) + and (aiguillage[AdrTjdP].position=const_droit) and tjd then + begin + if aiguillage[Adr].Adevie=prec then + begin + A:=aiguillage[AdrTjdP].AdroitB; + Adr:=aiguillage[AdrTJDP].Adroit; + if NivDebug=3 then AfficheDebug('cas2.1 tjd: '+s+' Suiv='+intToSTR(adr)+A,clYellow); + if A='Z' then typeGen:=1 else typeGen:=2; //TypeEL=(1=détécteur 2=aig 3=aig Bis) + substitue; + suivant_alg3:=adr; + exit; + end; + if (aiguillage[Adr].Adroit=prec) then + begin + A:=aiguillage[AdrTJDP].AdevieB; + Adr:=aiguillage[AdrTjdP].Adevie; + if NivDebug=3 then AfficheDebug('cas2.2 tjd: '+s+' Suiv='+intToSTR(adr)+A,clYellow); + + if A='Z' then typeGen:=1 else typeGen:=2; //TypeEL=(1=détécteur 2=aig 3=aig Bis) + substitue; + suivant_alg3:=adr; + exit; + end; + s:='Erreur 1022, TJD '+IntToSTR(Adr)+'/'+IntToSTR(AdrTjdP)+' mal positionnée'; + if nivDebug=3 then AfficheDebug(s,clred); + Affiche(s,clred); + Suivant_alg3:=9998;exit; + end; + // cas 3 TJD + if (aiguillage[Adr].position=const_droit) + and (aiguillage[AdrTjdP].position=const_devie) and tjd then + begin + // si on vient de + if (aiguillage[Adr].Adroit=prec) then + begin + if NivDebug=3 then AfficheDebug('cas3.1 tjd: '+s,clYellow); + A:=aiguillage[Adr].DdroitB; + Adr:=aiguillage[Adr].Ddroit; + if A='D' then + begin + Adr:=aiguillage[AdrTjDP].Adroit; + A:=aiguillage[AdrTjDP].AdroitB; + end; + if A='S' then + begin + Adr:=aiguillage[AdrTjDP].Adevie; + A:=aiguillage[AdrTjDP].AdevieB; + end; + + if A='Z' then typeGen:=1 else typeGen:=2; //TypeEL=(1=détécteur 2=aig 3=aig Bis) + //substitue; + suivant_alg3:=adr; + exit; + end; + // si on vient de + if (aiguillage[Adr].Adevie=prec) then + begin + A:=aiguillage[AdrTJDP].AdroitB; + Adr:=aiguillage[AdrTJDP].Adroit; + if NivDebug=3 then AfficheDebug('cas3.2 tjd: '+s+' Suiv='+intToSTR(adr)+A,clYellow); + if A='Z' then typeGen:=1 else typeGen:=2; //TypeEL=(1=détécteur 2=aig 3=aig Bis) + substitue; + suivant_alg3:=adr; + exit; + end; + s:='Erreur 1023, TJD '+IntToSTR(Adr)+'/'+IntToSTR(AdrTjdP)+' mal positionnée'; + if nivDebug=3 then AfficheDebug(s,clred); + Affiche(s,clred); + Suivant_alg3:=9998;exit; + end; + // cas 4 tjd + if (aiguillage[Adr].position=const_devie) + and (aiguillage[AdrTjdP].position=const_devie) then + begin + if aiguillage[Adr].Adevie=prec then + begin + A:=aiguillage[AdrtjdP].AdevieB; + Adr:=aiguillage[AdrtjdP].Adevie; + if NivDebug=3 then AfficheDebug('cas4.1 tjd: '+s+' Suiv='+intToSTR(adr)+A,clYellow); + if A='Z' then typeGen:=1 else typeGen:=2; //TypeEL=(1=détécteur 2=aig 3=aig Bis) + substitue; + suivant_alg3:=adr; + exit; + end; + if aiguillage[Adr].Adroit=prec then + begin + A:=aiguillage[AdrtjdP].AdevieB; + Adr:=aiguillage[AdrtjdP].Adevie; + if NivDebug=3 then AfficheDebug('cas4.2 tjd: '+s+' Suiv='+intToSTR(adr)+A,clYellow); + if A='Z' then typeGen:=1 else typeGen:=2; //TypeEL=(1=détécteur 2=aig 3=aig Bis) + substitue; + suivant_alg3:=adr; + exit; + end; + s:='Erreur 1024, TJD '+IntToSTR(Adr)+'/'+IntToSTR(AdrTjdP)+' mal positionnée'; + if nivDebug=3 then AfficheDebug(s,clred); + Affiche(s,clred); + Suivant_alg3:=9998; + exit; + end; + // cas TJS prise dans sa position courbe + if ((aiguillage[Adr].Adevie=Prec) and (aiguillage[Adr].AdevieB=Aprec) and (aiguillage[Adr].position<>const_droit) + and (aiguillage[AdrTjdP].position=const_droit) and (tjs) and tjscourbe1 and tjscourbe2) then + begin + if NivDebug=3 then AfficheDebug('cas tjs en courbe1',clYellow); + A:=aiguillage[AdrTjdP].AdevieB; + Adr:=aiguillage[AdrTjdP].Adevie; + if A='Z' then typeGen:=1 else typeGen:=2; //TypeEL=(1=détécteur 2=aig 3=aig Bis) + substitue; + suivant_alg3:=adr; + exit; + end; + // cas 3 TJS prise dans sa 2eme position courbe + if ((aiguillage[Adr].Adroit=Prec) and (aiguillage[Adr].AdroitB=Aprec) and (aiguillage[Adr].position=const_droit) + and (aiguillage[AdrTjdP].position<>const_droit) and (tjs) and tjscourbe1 and tjscourbe2 ) then + begin + if NivDebug=3 then AfficheDebug('cas1 tjs en courbe 2',clYellow); + A:=aiguillage[AdrTjdP].AdevieB; + Adr:=aiguillage[AdrTjdP].Adevie; + if A='Z' then typeGen:=1 else typeGen:=2; //TypeEL=(1=détécteur 2=aig 3=aig Bis) + suivant_alg3:=adr; + substitue; + exit; + end; + s:='1025 - Erreur fatale - position TJD/S '+IntToSTR(Adr)+'/'+intToSTR(AdrTJDP)+' inconnue'; + Affiche(s,clred); + AfficheDebug(s,clred); + suivant_alg3:=9999;exit; + end; + + if (aiguillage[Adr].modele=4) then // aiguillage triple + begin + Adr2:=aiguillage[Adr].AdrTriple; + if (aiguillage[adr].Apointe=prec) then + begin + // aiguillage triple pris en pointe + //Affiche('position='+intToSTR(aiguillage[Adr].position),clyellow); + if (aiguillage[Adr].position=const_droit) and (aiguillage[Adr2].position=const_droit) then + begin + if NivDebug=3 then AfficheDebug('Aiguillage triple pris en pointe droit',clYellow); + A:=aiguillage[Adr].AdroitB; + Adr:=aiguillage[Adr].Adroit; + if A='Z' then TypeEl:=1 else TypeEL:=2; //TypeEL=(1=détécteur 2=aig 3=aig Bis) + trouve_element(Adr,TypeEl,1); // branche_trouve IndexBranche_trouve + typeGen:=BrancheN[branche_trouve,IndexBranche_trouve].BType; + suivant_alg3:=adr;exit; + end; + if (aiguillage[Adr].position<>const_droit) and (aiguillage[Adr2].position=const_droit) then + begin + if NivDebug=3 then AfficheDebug('Aiguillage triple dévié1 (à gauche)',clYellow); + A:=aiguillage[Adr].AdevieB; + Adr:=aiguillage[Adr].Adevie; + if A='Z' then TypeEl:=1 else TypeEL:=2; //TypeEL=(1=détécteur 2=aig 3=aig Bis) + trouve_element(Adr,TypeEl,1); // branche_trouve IndexBranche_trouve + typeGen:=BrancheN[branche_trouve,IndexBranche_trouve].BType; + suivant_alg3:=adr;exit; + end; + if (aiguillage[Adr].position=const_droit) and (aiguillage[Adr2].position<>const_droit) then + begin + if NivDebug=3 then AfficheDebug('Aiguillage triple dévié2 (à droite)',clYellow); + A:=aiguillage[Adr].Adevie2B; + Adr:=aiguillage[Adr].Adevie2; + if A='Z' then TypeEl:=1 else TypeEL:=2; //TypeEL=(1=détécteur 2=aig 3=aig Bis) + trouve_element(Adr,TypeEl,1); // branche_trouve IndexBranche_trouve + typeGen:=BrancheN[branche_trouve,IndexBranche_trouve].BType; + suivant_alg3:=adr;exit; + end; + begin + if aiguillage[Adr].position=9 then begin suivant_alg3:=9996;exit;end; // pour échappement + s:='Aiguillage triple '+IntToSTR(Adr)+' : configuration des aiguilles interdite'; + if CDM_connecte then s:=s+': '+IntToSTR(aiguillage[Adr].position); + AfficheDebug(s,clYellow); + Affiche(s,clRed); + suivant_alg3:=9999; + exit; + end; + end + else + begin + if NivDebug=3 then AfficheDebug('Aiguillage triple pris en talon',clyellow); + if alg=2 then // on demande d'arreter si l'aiguillage en talon est mal positionné + begin + if (aiguillage[adr].position=const_droit) and (aiguillage[adr2].position=const_droit) then + begin + if prec<>aiguillage[Adr].Adroit then + begin + if NivDebug=3 then AfficheDebug('135.3 - Aiguillage '+intToSTR(adr)+'triple mal positionné',clyellow); + suivant_alg3:=9998;exit; + end + else + begin + if NivDebug=3 then AfficheDebug('135.4 - Aiguillage '+intToSTR(adr)+'triple bien positionné',clyellow); + end; + end; + if (aiguillage[adr].position<>const_droit) and (aiguillage[adr2].position=const_droit) then + begin + if prec<>aiguillage[Adr].Adevie then + begin + if NivDebug=3 then AfficheDebug('135.3 - Aiguillage '+intToSTR(adr)+'triple mal positionné',clyellow); + suivant_alg3:=9998;exit; + end + else + begin + if NivDebug=3 then AfficheDebug('135.4 - Aiguillage '+intToSTR(adr)+'triple bien positionné',clyellow); + end; + end; + if (aiguillage[adr].position=const_droit) and (aiguillage[adr2].position<>const_droit) then + begin + if prec<>aiguillage[Adr].Adevie2 then + begin + if NivDebug=3 then AfficheDebug('135.3 - Aiguillage '+intToSTR(adr)+'triple mal positionné',clyellow); + suivant_alg3:=9998;exit; + end + else + begin + if NivDebug=3 then AfficheDebug('135.4 - Aiguillage '+intToSTR(adr)+'triple bien positionné',clyellow); + end; + end; + end; + A:=aiguillage[Adr].ApointeB; + Adr:=aiguillage[Adr].Apointe; + if A='Z' then TypeEl:=1 else TypeEL:=2; //TypeEL=(1=détécteur 2=aig 3=aig Bis) + trouve_element(Adr,TypeEl,1); // branche_trouve IndexBranche_trouve + typeGen:=BrancheN[branche_trouve,IndexBranche_trouve].BType; + suivant_alg3:=Adr;exit; + end; + end; + end; + suivant_alg3:=adr; +end; + +// trouve l'index du feu associé au détecteur adr +function index_feu_det(adr : integer) : integer ; + var i : integer; + trouve,trouve1,trouve2,trouve3,trouve4 : boolean; +begin + i:=1; + repeat + trouve1:=feux[i].Adr_det1=adr; + trouve2:=feux[i].Adr_det2=adr; + trouve3:=feux[i].Adr_det3=adr; + trouve4:=feux[i].Adr_det4=adr; + trouve:=trouve1 or trouve2 or trouve3 or trouve4; + if not(trouve) then inc(i); + until (trouve) or (i>=100); + if trouve then Index_feu_det:=i else Index_feu_det:=0; +end; + + +// renvoie l'adresse du détecteur suivant des deux éléments contigus +// TypeElprec/actuel: 1= détecteur 2= aiguillage 3=bis 4=Buttoir +function detecteur_suivant(prec : integer;TypeElPrec : integer;actuel : integer;TypeElActuel : integer) : integer ; +var actuelCalc,PrecCalc,etat,i,j,AdrSuiv , + TypeprecCalc,TypeActuelCalc : integer; +begin + if NivDebug>=2 then AfficheDebug('cherche détecteur suivant aux '+IntToSTR(prec)+'/'+IntToSTR(typeElPrec)+' - '+intToSTR(actuel)+'/'+intToSTR(TypeElActuel),clyellow); + j:=0; + + PrecCalc:=prec; + TypeprecCalc:=TypeElprec; + ActuelCalc:=actuel; + TypeActuelCalc:=TypeELActuel; + // étape 1 trouver le sens + repeat + inc(j); + AdrSuiv:=suivant_alg3(precCalc,TypeprecCalc,actuelCalc,TypeActuelCalc,1); + if (typeGen=2) and false then // si le précédent est une TJD/S et le suivant aussi + begin + if ((aiguillage[AdrSuiv].modele=2) or (aiguillage[AdrSuiv].modele=3)) and + ((aiguillage[actuelCalc].modele=2) or (aiguillage[ActuelCalc].modele=3)) then + begin + if nivDebug=3 then AfficheDebug('501 - Détection Précédent=TJD/S Suivant=TJD/S',clyellow); + // subsituer la pointe + actuelCalc:=aiguillage[ActuelCalc].APointe; + end; + end; + precCalc:=actuelCalc; + TypeprecCalc:=TypeActuelCalc; + actuelCalc:=AdrSuiv; + TypeActuelCalc:=typeGen; + //Affiche('Suivant signalaig='+IntToSTR(AdrSuiv),clyellow); + until (j=10) or (typeGen=1) or (AdrSuiv=0) or (AdrSuiv>=9996); // arret si détecteur + // si trouvé le sens, trouver le suivant + if AdrSuiv=actuel then + begin + AdrSuiv:=suivant_alg3(prec,TypeElPrec,actuel,TypeElActuel,1); + {if (typeGen=2) then // si le précédent est une TJD/S et le suivant aussi + begin + if ((aiguillage[AdrSuiv].modele=2) or (aiguillage[AdrSuiv].modele=3)) and + ((aiguillage[actuel].modele=2) or (aiguillage[Actuel].modele=3)) then + begin + if nivDebug=3 then AfficheDebug('501 - Détection Précédent=TJD/S Suivant=TJD/S',clyellow); + // subsituer la pointe + actuel:=aiguillage[Actuel].APointe; + end; + end; + } + end; + if NivDebug=3 then AfficheDebug('Le suivant est le '+intToSTR(AdrSuiv),clYellow); + detecteur_suivant:=AdrSuiv; +end; + +// renvoie les adresses des détecteurs adjacents au détecteur "adresse" +// résultat dans adj1 et adj2 +procedure Det_Adj(adresse : integer); +var Adr,BtypePrec,AdrFonc,Branche,BtypeFonc,AdrPrec,IndexBranche,i,Dir : integer; + sortie : boolean; +begin + trouve_element(adresse,1,1); // branche_trouve IndexBranche_trouve + if (IndexBranche_trouve=0) then + begin + Affiche('Erreur 380 : élément '+IntToSTR(adresse)+' non trouvé',clred); + exit; + end; + IndexBranche:=IndexBranche_trouve; + branche:=branche_trouve; + Dir:=1 ; //test direction + + repeat + if (Dir=1) then i:=IndexBranche-1 else i:=IndexBranche+1; + + AdrPrec:=Adresse; + BtypePrec:=1; + + AdrFonc:=BrancheN[branche,i].Adresse; + BtypeFonc:=BrancheN[branche,i].BType; + + i:=0; + repeat + if BtypeFonc<>1 then + begin + Adr:=suivant_alg3(AdrPrec,BtypePrec,AdrFonc,BtypeFonc,2); // élément suivant mais arret sur aiguillage en talon mal positionnée + end + + else + begin Adr:=AdrFonc;TypeGen:=BtypeFonc;end; + if Adr>9990 then typeGen:=1; + if (NivDebug=3) then AfficheDebug('trouvé '+intToSTR(Adr)+' '+intToSTR(typeGen),clorange); + AdrPrec:=AdrFonc;BtypePrec:=BtypeFonc; + AdrFonc:=Adr;BtypeFonc:=typeGen; + i:=i+1; + sortie:=(i=20) or (Adr=0) or (Adr>=9996) or (TypeGen=1); + until (sortie) ; // boucle de parcours + if (typeGen=1) and (Dir=1) then begin Adj1:=Adr;end; + if (typeGen=1) and (Dir=2) then begin Adj2:=Adr;end; + inc(dir); + until dir=3; +end; + +// renvoie l'adresse du détecteur suivant des deux éléments +// El1 et El2 peuvent être séparés par des aiguillages +// en sortie : 9999= det1 ou det2 non trouvé +// 9996 : non trouvé +function detecteur_suivant_El(el1: integer;TypeDet1 : integer;el2 : integer;TypeDet2 : integer) : integer ; +var IndexBranche_det1,IndexBranche_det2,branche_trouve_det1,branche_trouve_det2,i, + j,AdrPrec,Adr,AdrFonc,TypePrec,TypeFonc,i1,i2,index : integer; + Sortie : boolean; + s : string; + label reprise; + +begin + if NivDebug>=2 then + AfficheDebug('Proc Detecteur_suivant_EL '+intToSTR(el1)+','+intToSTR(Typedet1)+'/'+intToSTR(el2)+','+intToSTR(Typedet2)+'-------------------------',clLime); + if (el1>9000) or (el2>9000) then + begin + if NivDebug=3 then AfficheDebug('paramètres incorrects >9000',clred); + detecteur_suivant_El:=9999; + end; + + // trouver détecteur 1 + trouve_element(el1,Typedet1,1); // branche_trouve IndexBranche_trouve + if (IndexBranche_trouve=0) then + begin + if NivDebug=3 then + begin + s:='611. '+IntToSTR(el1)+' non trouvé'; + AfficheDebug(s,clred); + AfficheDebug(s,clOrange); + end; + detecteur_suivant_El:=9999;exit; + end; + IndexBranche_det1:=IndexBranche_trouve; + branche_trouve_det1:=branche_trouve; + + // trouver détecteur 2 + trouve_element(el2,Typedet2,1); // branche_trouve IndexBranche_trouve + if (IndexBranche_trouve=0) then + begin + if NivDebug=3 then + begin + s:='612. '+IntToSTR(el2)+' non trouvé'; + AfficheDebug(s,clred); + AfficheDebug(s,clOrange); + end; + detecteur_suivant_El:=9999;exit; + end; + IndexBranche_det2:=IndexBranche_trouve; + branche_trouve_det2:=branche_trouve; + j:=1; // J=1 test en incrément J=2 test en décrément + + // étape 1 : trouver le sens de progression (en incrément ou en décrément) + + repeat + //préparer les variables + AdrPrec:=el1;TypePrec:=typeDet1; + if j=1 then i1:=IndexBranche_det1+1; + if j=2 then i1:=IndexBranche_det1-1; + if NivDebug=3 then + begin + s:='Test 1 en '; + if (j=1) then s:=s+'incrément ' else s:=s+'décrément '; + s:=s+'- départ depuis élément '+IntToSTR(el1)+' trouvé en index='+intToSTR(IndexBranche_det1)+' Branche='+intToSTR(branche_trouve_det1); + AfficheDebug(s,clyellow); + end; + + AdrFonc:=BrancheN[branche_trouve_det1,i1].adresse; + typeFonc:=BrancheN[branche_trouve_det1,i1].Btype ; + + + i:=0; + if AdrFonc<>El2 then // si pas déja trouvé le sens de progression + repeat + //AfficheDebug('Engage '+IntToSTR(AdrPrec)+','+IntToSTR(typePrec)+'/'+IntToSTR(AdrFonc)+','+IntToSTR(typeFonc),clyellow); + Adr:=suivant_alg3(AdrPrec,TypePrec,AdrFonc,TypeFonc,1); + //AfficheDebug('Sortie Alg3: '+IntToSTR(Adr)+'/'+intToSTR(typeGen),clyellow); + + if NivDebug=3 then + begin + s:='613 : trouvé='+intToSTR(Adr); + case typeGen of + 1 : s:=s+' detecteur'; + 2 : s:=s+' aiguillage'; + 3 : s:=s+' aiguillage bis'; + end; + AfficheDebug(s,clorange); + end; + + AdrPrec:=AdrFonc;TypePrec:=TypeFonc; + AdrFonc:=Adr;TypeFonc:=typeGen; + inc(i); + sortie:=((typeDet2=TypeGen) and (Adr=el2)) or (Adr=0) or (Adr>=9996) or (i=20); + until sortie + + else + begin + // déja trouvé + adr:=el2;typeGen:=TypeDet2; + end; + + if (typeDet2=TypeGen) and (Adr=el2) then + begin + if Nivdebug=3 then AfficheDebug('614 : Trouvé '+intToSTR(el2),clYellow); + i:=0; + repeat + //AfficheDebug('Engage '+IntToSTR(AdrPrec)+','+IntToSTR(typePrec)+'/'+IntToSTR(AdrFonc)+','+IntToSTR(typeFonc),clyellow); + Adr:=suivant_alg3(AdrPrec,TypePrec,AdrFonc,TypeFonc,1); + //AfficheDebug('Sortie Alg3: '+IntToSTR(Adr)+'/'+intToSTR(typeGen),clyellow); + + if NivDebug=3 then + begin + s:='614 : trouvé='+intToSTR(Adr); + case typeGen of + 1 : s:=s+' detecteur'; + 2 : s:=s+' aiguillage'; + 3 : s:=s+' aiguillage bis'; + end; + AfficheDebug(s,clorange); + end; + + AdrPrec:=AdrFonc;TypePrec:=TypeFonc; + AdrFonc:=Adr;TypeFonc:=typeGen; + inc(i); + sortie:=(TypeGen=1) or (Adr=0) or (Adr>=9996) or (i=20); + until sortie; + if TypeGen=1 then + begin + if NivDebug=3 then + begin + AfficheDebug('le détecteur suivant est le '+IntToSTR(Adr),clyellow); + affichedebug('------------------',clyellow); + end; + detecteur_suivant_el:=Adr; + exit; + end; + end; + if (i=20) then if NivDebug=3 then AfficheDebug('201 : Itération trop longue',clred); + inc(j); + //AfficheDebug('j='+intToSTR(j),clyellow); + until j=3; + detecteur_suivant_el:=9996; + if NivDebug=3 then affichedebug('------------------',clyellow); +end; + + +function cond_carre(adresse : integer) : boolean; +var i,l,k,NCondCarre,adrAig : integer; + resultatET,resultatOU: boolean; + s : string; +begin + i:=index_feu(adresse); + NCondCarre:=Length(feux[i].condcarre[1]); + + l:=1; + resultatOU:=false; + + while NcondCarre<>0 do + begin + if Ncondcarre<>0 then dec(Ncondcarre); + resultatET:=true; + for k:=1 to NcondCarre do + begin + //s2:=s2+'A'+IntToSTR(feux[i].condcarre[l][k].Adresse)+feux[i].condcarre[l][k].PosAig+' '; + AdrAig:=feux[i].condcarre[l][k].Adresse; + resultatET:=((aiguillage[AdrAig].position=const_devie) and (feux[i].condcarre[l][k].PosAig='S') or (aiguillage[AdrAig].position=const_droit) and (feux[i].condcarre[l][k].PosAig='D')) + and resultatET; + end; + //if resultatET then Affiche('VRAI',clyellow) else affiche('FAUX',clred); + inc(l); + resultatOU:=resultatOU or resultatET; + NCondCarre:=Length(feux[i].condcarre[l]); + end; + //if resultatOU then Affiche('VRAI final',clyellow) else affiche('FAUX final',clred); + if NivDebug=3 then + begin + s:='Conditions de carré suivant aiguillages: '; + if ResultatOU then s:=s+'vrai' else s:=s+'faux'; + AfficheDebug(s,clyellow); + end; + cond_carre:=ResultatOU; +end; + +// renvoi vrai si les aiguillages au delà du signal sont mal positionnés +function carre_signal(adresse : integer) : boolean; +var + i,j,prec,AdrFeu,AdrSuiv,actuel,TypeELPrec,TypeElActuel : integer; + multi, sort : boolean; + s : string; +begin + if (NivDebug>=1) then AfficheDebug('Test si signal '+IntToSTR(adresse)+' doit afficher un carré si aiguillage avals mal positionnés',clyellow); + + i:=Index_feu(adresse); + j:=0; + prec:=feux[i].Adr_det1; + TypeElPrec:=1; + actuel:=feux[i].Adr_el_suiv1; + if feux[i].Btype_suiv1=1 then TypeElActuel:=1; + if feux[i].Btype_suiv1=2 then TypeElActuel:=2; + if feux[i].Btype_suiv1=5 then TypeElActuel:=3; // le type du feu 1=détécteur 2=aig 5=bis + multi:=feux[i].Adr_det2<>0; + // trouver si une des voies présente un train + if (multi) then + begin + carre_signal:=FALSE; // pour l'instant verrouillé + exit; + end; + + //Affiche(IntToSTR(actuel),clyellow); + repeat + inc(j); + AdrSuiv:=suivant_alg3(prec,typeElPrec,actuel,typeELActuel,2); + {if (typeGen=2) then // si le précédent est une TJD/S et le suivant aussi + begin + if ((aiguillage[AdrSuiv].modele=2) or (aiguillage[AdrSuiv].modele=3)) and + ((aiguillage[actuel].modele=2) or (aiguillage[actuel].modele=3)) then + begin + if nivDebug=3 then AfficheDebug('505 - Détection Précédent=TJD/S Suivant=TJD/S',clyellow); + // subsituer la pointe + actuel:=aiguillage[actuel].APointe; + end; + end; } + + + if (AdrSuiv=9999) or (AdrSuiv=9996) then // élément non trouvé ou position aiguillage inconnu + begin + carre_signal:=true; + exit; + end; + if (AdrSuiv<>9998) then // arret sur aiguillage en talon mal positionnée + begin + prec:=actuel; + TypeElPrec:=TypeElActuel; + actuel:=AdrSuiv; + TypeElActuel:=typeGen; + end; + // si le suivant est un détecteur comporte t-il un signal? + AdrFeu:=0; + if (AdrSuiv>500) then + begin + AdrFeu:=index_feu_det(AdrSuiv); + //Affiche(IntToSTR(AdrFeu),clOrange); + end; + sort:=(j=10) or (AdrFeu<>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é 9998, aiguillages mal positionnés + if (NivDebug=3) then + begin + if (AdrSuiv=9998) then AfficheDebug('Le signal '+intToSTR(adresse)+' doit afficher un carré car l''aiguillage pris en talon '+IntToSTR(actuel)+' est mal positionné',clYellow) + else AfficheDebug('Le signal '+IntToSTR(adresse)+' ne doit pas être au carré',clYellow); + end; + carre_signal:=AdrSuiv=9998; +end; + + + +// renvoie l'état du signal suivant +// si renvoie 0, pas trouvé le signal suivant. +// rang=1 pour feu suivant, 2 pour feu suivant le 1, etc +// Dans AdresseFeuSuivant : adresse du feu suivant (variable globale) +function etat_signal_suivant(adresse,rang : integer) : integer ; +var num_feu,AdrDet,etat,AdrFeu,i,j,prec,AdrSuiv : integer; + aspect,combine : word; + TypePrec,TypeActuel : integer; + s : string; +begin + //traceDet:=true; + if NivDebug>=2 then AfficheDebug('Cherche état du signal suivant au '+IntToSTR(adresse),clyellow); + i:=Index_feu(adresse); + if feux[i].aspect>10 then + begin + s:='La demande de l''état du signal suivant depuis un feu directionnel '+IntToSTR(Adresse)+' est irrecevable'; + Affiche(s,clred); + AfficheDebug(s,clred); + etat_signal_suivant:=0; + exit; + end; + + if i=0 then + begin + Affiche('Erreur 600 - feu '+IntToSTR(adresse)+' non trouvé',clred); + if NivDebug=3 then AfficheDebug('Erreur 600 - feu '+IntToSTR(adresse)+' non trouvé',clred); + etat_signal_suivant:=0; + AdresseFeuSuivant:=0; + exit; + end; + Etat:=0; + j:=0; + num_feu:=0; + prec:=Feux[i].Adr_det1; // détecteur sur le courant + + if prec=0 then + begin + Affiche('Msg 601 - feu '+intToSTR(adresse)+' non renseigné ',clOrange); + if NivDebug=3 then AfficheDebug('Msg 601 - feu '+intToSTR(adresse)+' non renseigné ',clOrange); + etat_signal_suivant:=0; + AdresseFeuSuivant:=0; + exit; + end; + TypePrec:=1; // détecteur + actuel:=feux[i].Adr_el_suiv1; + if nivDebug=3 then AfficheDebug('Actuel ='+IntToSTR(actuel),clyellow); + if feux[i].Btype_suiv1=1 then TypeActuel:=1; + if feux[i].Btype_suiv1=2 then TypeActuel:=2; + if feux[i].Btype_suiv1=4 then TypeActuel:=2; // aiguillage triple + if feux[i].Btype_suiv1=5 then TypeActuel:=3; // le type du feu 1=détécteur 2=aig 5=bis + + repeat + inc(j); + if nivDebug=3 then AfficheDebug('Itération '+IntToSTR(j),clyellow); + + // à la première itération, si "actuel" est déja un détecteur, ne pas faire de recherche sur le suivant + if (j=1) and (TypeActuel=1) then + begin + // AdrSuiv:=actuel; + // actuel:=prec; + // TypeActuel:=1; + // TypePrec:=1; + // if nivDebug=3 then AfficheDebug('Substitution precedent='+intToSTR(prec)+' Actuel='+IntToSTR(actuel),clyellow); + end + else + begin + //if nivDebug=3 then AfficheDebug('Engagement j='+IntToSTR(j)+' '+IntToSTR(prec)+'/'+IntToSTR(actuel),clyellow); + AdrSuiv:=suivant_alg3(prec,TypePrec,actuel,TypeActuel,1); + {if (typeGen=2) then // si le précédent est une TJD/S et le suivant aussi + begin + if ((aiguillage[Adrsuiv].modele=2) or (aiguillage[AdrSuiv].modele=3)) and + ((aiguillage[actuel].modele=2) or (aiguillage[actuel].modele=3)) then + begin + if nivDebug=3 then AfficheDebug('507 - Détection Précédent=TJD/S Suivant=TJD/S',clyellow); + // subsituer la pointe + Actuel:=aiguillage[Actuel].APointe; + end; + end; } + + + if Nivdebug=3 then AfficheDebug('Suivant='+intToSTR(AdrSuiv),clyellow); + prec:=actuel;TypePrec:=TypeActuel; + actuel:=AdrSuiv;TypeActuel:=typeGen; + + if (AdrSuiv=9999) or (AdrSuiv=9996) then + begin + Etat_signal_suivant:=0; + AdresseFeuSuivant:=0; + exit; + end; + if (AdrSuiv=0) then + begin + if NivDebug=3 then AfficheDebug(intToSTR(j)+' Le suivant est un buttoir',clyellow); + Etat_signal_suivant:=carre_F; // faire comme si c'était un signal au carré + AdresseFeuSuivant:=0; + exit; + end; + end; + + // si le suivant est un détecteur comporte t-il un signal? + + AdrFeu:=0; + if (TypeActuel=1) then // détecteur? + begin + i:=Index_feu_det(Actuel); + AdrFeu:=Feux[i].Adresse; + if adrFeu<>0 then + begin + if nivdebug=3 then afficheDebug('Détecteur='+IntToSTR(AdrSuiv)+' AdrFeu='+IntToSTR(AdrFeu)+' prec='+IntToSTR(prec),clyellow ); + if (adrFeu=Adresse) then // si on ne reboucle sur le même signal dont on cherche le suivant + begin + AdrFeu:=0;j:=10; // on ne trouve pas de suivant + end; + + if (AdrFeu<>0) then // si l'adresse est <>0 + begin + if (Feux[i].Adr_el_suiv1<>prec) then // le feu est-il dans le bon sens de progression? + begin + // oui + inc(num_feu); + Etat:=EtatSignalCplx[AdrFeu]; + code_to_aspect(Etat,aspect,combine); + Signal_suivant:=AdrFeu; + if NivDebug=3 then AfficheDebug('Trouvé feu suivant Adr='+IntToSTR(AdrFeu)+': '+IntToSTR(etat)+'='+EtatSign[aspect]+' '+EtatSign[combine],clorange); + end + else + begin + if NivDebug=3 then AfficheDebug('Trouvé feu '+intToSTR(AdrFeu)+' mais dans le mauvais sens',clOrange); + AdrFeu:=0; + end; + end + end + else if nivDebug=3 then AfficheDebug('Pas de feu pour le det '+IntToSTR(AdrSuiv),clyellow); + end; + until (j=10) or ((AdrFeu<>0) and (num_feu=rang)); + if etat=0 then Signal_Suivant:=0; + etat_signal_suivant:=Etat; + AdresseFeuSuivant:=Signal_suivant; + if (NivDebug=3) and (adrFeu=0) then AfficheDebug('Pas Trouvé de feu suivant au feu Adr='+IntToSTR(ADresse),clOrange); + //TraceDet:=false; +end; + + +// renvoie l'adresse de l'aiguille si elle est déviée après le signal et ce jusqu'au prochain signal +// sinon renvoie 0 +// adresse=adresse du signal +function Aiguille_deviee(adresse : integer) : integer ; +var AdrDet,AdrFeu,etat,i,j,prec,AdrSuiv,Actuel : integer; + TypePrec,TypeActuel : integer; + s : string; +begin + //traceDet:=true; + if NivDebug>=2 then AfficheDebug('test si aiguille déviée après signal '+IntToSTR(Adresse),clyellow); + j:=0; + i:=Index_feu(adresse); + prec:=feux[i].Adr_det1; + TypePrec:=1; + actuel:=feux[i].Adr_el_suiv1; + if feux[i].Btype_suiv1=1 then TypeActuel:=1; + if feux[i].Btype_suiv1=2 then TypeActuel:=2; + if feux[i].Btype_suiv1=5 then TypeActuel:=3; // le type du feu 1=détécteur 2=aig 5=bis + + //Affiche(IntToSTR(actuel),clyellow); + AdrFeu:=0; + AdrDevie:=0; + if (TypeActuel=2) or (TypeActuel=3) then // aiguillage + begin + if (aiguillage[actuel].Apointe=prec) and (aiguillage[actuel].position<>const_droit) then Aiguille_deviee:=actuel; + end; + + repeat + inc(j); + // 3=demande si le suivant est un aiguillage en pointe dévié oui si AdrSuiv=9997 + // dans ce cas la variable globale AdrDevie est mise à jour + AdrSuiv:=suivant_alg3(prec,TypePrec,actuel,TypeActuel,3); + + if NivDebug=3 then AfficheDebug('701 - Suivant signalaig='+IntToSTR(AdrSuiv),clyellow); + if ADrSuiv<>9997 then + begin + prec:=actuel;TypePrec:=TypeActuel; + actuel:=AdrSuiv;TypeActuel:=typeGen; + // si le suivant est un détecteur comporte t-il un signal? + AdrFeu:=0; + if (TypeActuel=1) then // détecteur + begin + i:=Index_feu_det(AdrSuiv); + AdrFeu:=Feux[i].Adresse; + if NivDebug=3 then AfficheDebug('trouvé signal '+intToSTR(AdrFeu)+' associé au détecteur '+IntToSTR(AdrSuiv),clyellow); + end; + end; + until (j=10) or (AdrSuiv>=9996) or (AdrFeu<>0) ; + if (AdrSuiv=9997) then + begin + s:='le signal '+intToSTR(adresse)+' doit afficher un rappel car l''aiguillage '+intToSTR(AdrDevie); + if (typeGen=3) then s:=s+'bis'; + s:=s+' est dévié'; + if NivDebug=3 then AfficheDebug(s,clYellow); + end; + if ((AdrSuiv<>9997) or (j=10)) and (NivDebug=3) then + begin + S:='le signal '+intToSTR(adresse)+' ne doit pas afficher de rappel car '; + if j<>10 then s:=s+'trouvé un autre signal suivant et pas d''aiguillage dévié' + else s:=s+' signal trop éloigné'; + AfficheDebug(s,clYellow); + end; + Aiguille_deviee:=AdrDevie; +end; + +procedure pilote_direction(Adr,nbre : integer); +var i,j : integer; +begin + i:=index_feu(Adr); + j:=feux[i].decodeur; + case j of + // 0 : envoi_directionvirtuel(Adr,nbre); + 1 : envoi_DirectionBahn(Adr,nbre); + 2 : envoi_DirectionCDF(Adr,nbre); + //3 : envoi_DirectionLDT(Adr,nbre); + 4 : envoi_DirectionLEB(Adr,nbre); + //5 : envoi_DirectionNMRA(Adr,nbre); + end; +end; + +procedure Signal_direction(Adr : integer); +var NAig,i,id,j,NfeuxDir,AdrAigFeu,Position : integer; + PosAigFeu : char; + Positionok : boolean; +begin + id:=Index_feu(Adr); + NfeuxDir:=feux[id].aspect-10; + //Affiche(IntToSTR(NfeuxDir),clyellow); + i:=1; // i=1 position éteinte du feu ; pour les autres valeurs de i : nombre de feux allumés + repeat + NAig:=length(feux[id].AigDirection[i])-1; + if i=1 then positionok:=false else positionok:=true; + for j:=1 to Naig do + begin + // vérifier la position déclarée des aiguillages pour chaque feu + AdrAigFeu:=feux[id].AigDirection[i][j].Adresse; + PosAigFeu:=feux[id].AigDirection[i][j].posAig; + position:=aiguillage[AdrAigFeu].position; + // + if i=1 then positionok:=((position=const_droit) and (posAigFeu='D')) or ((position<>const_droit) and (posAigFeu='S')) or positionok; + if i>1 then positionok:=((position=const_droit) and (posAigFeu='D')) or ((position<>const_droit) and (posAigFeu='S')) and positionok; + + end; + //if positionok then Affiche('Signal directionnel '+IntToSTR(Adr)+' Position Ok sur feu '+intToSTR(i-1),clyellow); + inc(i); + until (i>NFeuxDir+1) or positionok; + + if positionok then + begin + // Affiche('i='+intToSTR(i),clyellow); + dec(i,2); // i correspond au nombre de feux à allumer + pilote_direction(Adr,i); + end; + +end; + +// renvoie vrai si une mémoire de zone est occupée du signal courant au signal suivant +// adresse=adresse du signal +function test_memoire_zones(adresse : integer) : boolean; +var + AdrSuiv,prec,TypePrec,TypeActuel,ife,actuel,AdrDet,Etat,AdrFeu,i,j,PresTrain01,PrecInitial : integer; + Pres_train,sort : boolean; + s : string; +begin + if NivDebug>=1 then AfficheDebug('Proc test_memoire_zones - Cherche mémoire à 1 du signal '+intToSTR(adresse)+' au signal suivant ',clyellow); + i:=Index_feu(adresse); + if (i=0) then + begin + Affiche('Erreur 650 - feu non trouvé',clred); + AfficheDebug('Erreur 650 - feu non trouvé',clred); + test_memoire_zones:=false; + end; + + Pres_train:=FALSE; + ife:=1; // index feu de 1 à 4 pour explorer les 4 détecteurs d'un feu + repeat + j:=0; + if NivDebug=3 then AfficheDebug('Boucle de test feu '+intToSTR(ife)+'/4',clred); + if (ife=1) then + begin + prec:=feux[i].Adr_det1; + actuel:=feux[i].Adr_el_suiv1; + if feux[i].Btype_suiv1=1 then TypeActuel:=1; + if feux[i].Btype_suiv1=2 then TypeActuel:=2; + if feux[i].Btype_suiv1=4 then TypeActuel:=2; // aiguillage triple + if feux[i].Btype_suiv1=5 then TypeActuel:=3; // le type du feu 1=détecteur 2=aig 5=bis + end; //détecteur sur le signal courant + if (ife=2) then + begin + prec:=feux[i].Adr_det2;actuel:=feux[i].Adr_el_suiv2; + if feux[i].Btype_suiv2=1 then TypeActuel:=1; + if feux[i].Btype_suiv2=2 then TypeActuel:=2; + if feux[i].Btype_suiv2=4 then TypeActuel:=2; // aiguillage triple + if feux[i].Btype_suiv2=5 then TypeActuel:=3; // le type du feu 1=détecteur 2=aig 5=bis + end; // détecteur sur le signal courant + if (ife=3) then + begin + prec:=feux[i].Adr_det3; + actuel:=feux[i].Adr_el_suiv3; + if feux[i].Btype_suiv3=1 then TypeActuel:=1; + if feux[i].Btype_suiv3=2 then TypeActuel:=2; + if feux[i].Btype_suiv3=4 then TypeActuel:=2; // aiguillage triple + if feux[i].Btype_suiv3=5 then TypeActuel:=3; // le type du feu 1=détecteur 2=aig 5=bis + end; // détecteur sur le signal courant + if (ife=4) then + begin + prec:=feux[i].Adr_det4; + actuel:=feux[i].Adr_el_suiv4; + if feux[i].Btype_suiv4=1 then TypeActuel:=1; + if feux[i].Btype_suiv4=2 then TypeActuel:=2; + if feux[i].Btype_suiv4=4 then TypeActuel:=2; // aiguillage triple + if feux[i].Btype_suiv4=5 then TypeActuel:=3; // le type du feu 1=détecteur 2=aig 5=bis + end; // détecteur sur le signal courant + + TypePrec:=1; + if (prec=0) then + begin + // sortie si aucun détecteur déclaré sur le feu + test_memoire_zones:=Pres_train; + exit; + end; + + PrecInitial:=Prec; + repeat + inc(j); + // à la première itération, si "actuel" est déja un détecteur, ne pas faire de recherche sur le suivant + // et chaîner mémoire de zone + if (j=1) and (Typeactuel=1) then // si détecteur + begin + Pres_train:=MemZone[Prec,actuel]; + if Pres_Train and (NivDebug=3) then Affiche('Présence train de '+intToSTR(prec)+' à '+intToSTR(actuel),clyellow); + end + else + begin + AdrSuiv:=suivant_alg3(prec,TypePrec,actuel,TypeActuel,1); + + prec:=actuel;TypePrec:=TypeActuel; + actuel:=AdrSuiv;TypeActuel:=typeGen; + if AdrSuiv>9990 then + begin + test_memoire_zones:=false;exit; + end; + + end; + + if NivDebug=3 then AfficheDebug('130 - suivant='+IntToSTR(adrsuiv),clred); + if actuel=0 then + begin + // si c'est un buttoir + test_memoire_zones:=false; + if NivDebug=3 then AfficheDebug('sortie car buttoir',clyellow); + exit; + end; + // si le suivant est un détecteur ; contrôler mémoire de zone et comporte t-il un signal? + AdrFeu:=0; + if (TypeActuel=1) then // détecteur + begin + if (NivDebug=3) and MemZone[PrecInitial][actuel] then AfficheDebug('Présence train de '+intToSTR(PrecInitial)+' à '+intToSTR(actuel),clyellow); + + Pres_train:=MemZone[PrecInitial][actuel] or Pres_train; // mémoire de zone + if Pres_Train then PresTrain01:=1 else PresTrain01:=0; + if NivDebug=3 then AfficheDebug('de '+IntToSTR(PrecInitial)+' à '+intToSTR(actuel)+'='+IntToSTR(PresTrain01),clyellow); + precInitial:=actuel; // pour préparer le suivant + + i:=index_feu_det(AdrSuiv); // renvoie l'index du signal se trouvant au détecteur "AdrSuiv": il peut y avoir 4 détecteurs par signal + AdrFeu:=feux[i].adresse; // adresse du feu + if (AdrFeu=adresse) then // si on ne reboucle sur le même signal dont on cherche le suivant + begin + AdrFeu:=0;j:=10; // on ne trouve pas de suivant + end; + if (AdrFeu<>0) then // si l'adresse est <>0 + begin + if (feux[i].Adr_el_suiv1<>prec) then // le feu est-il dans le bon sens de progression? + begin + s:='Trouvé feu '+IntToSTR(AdrFeu); + if (NivDebug=3) And Pres_Train then AfficheDebug(s+' et sortie proced:Mémoire de zone à 1',clyellow); + if (NivDebug=3) And (not(Pres_Train)) then AfficheDebug(s+' et sortie proced:Mémoire de zone à 0',clyellow); + test_memoire_zones:=Pres_train;exit; + + end + else + begin + if NivDebug=3 then AfficheDebug('Trouvé feu '+intToSTR(AdrFeu)+' mais dans le mauvais sens',clOrange); + AdrFeu:=0; + end; + end + else + begin + //if (traceDet) {sprintf(Affiche,"Trouvé détecteur %d mais sans signal\r\n",AdrSuiv,Etat);Display(Affiche); + AdrFeu:=0; + end; + end + else + begin + if (NivDebug=3) then AfficheDebug('Trouvé aiguillage '+intToSTR(AdrSuiv),clyellow); + end; + sort:=(j=10) or (AdrFeu<>0) ; + until (sort); // on arrete jusqu'à trouver un signal ou si on va trop loin (10 itérations) + inc(ife); + until ife>=5; + if (NivDebug=3) and (Etat=0) then AfficheDebug('Pas trouvé de signal suivant au '+intToSTR(adresse),clyellow); + test_memoire_zones:=Pres_train; +end; + + +Procedure affiche_Event_det; +var i : integer; +begin + with FormDebug.MemoEvtDet do + begin + //lines.clear; + lines.add('-------------'); + for i:=1 to N_event_det do + begin + lines.add(intToSTR(event_det[i])); + if traceListe then AfficheDebug(intToSTR(event_det[i]),clyellow); + end; + end; +end; + + +// supprime un évènement détecteur dans la liste Event_det[] +procedure supprime_event(i : integer); +var l : integer; +begin + for l:=i to N_Event_det do event_det[l]:=event_det[l+1]; + dec(N_event_det); +end; + +// trouve adresse d'un détecteur à "etat" avant "index" dans le tableau chrono +function trouve_index_det_chrono(Adr,etat,index : integer) : integer; +var i : integer; + trouve : boolean; +begin + if index<=0 then + begin + affiche('Erreur 784 index détecteur invalide',clred); + AfficheDebug('Erreur 784 index détecteur invalide',clred); + exit; + end; + i:=index; + if i>N_Event_tick then begin trouve_index_det_chrono:=0;exit; end; + inc(i); + repeat + dec(i); + trouve:=(event_det_tick[i].etat=etat) and (event_det_tick[i].detecteur=Adr) ; + until (trouve or (i=0)); + if trouve then + begin + trouve_index_det_chrono:=i;exit; + end; + trouve_index_det_chrono:=0; +end; + +// teste si la route est valide de det1, det2 à det3 +// les détecteurs doivent être consécutifs +// trouve le détecteur suivant de det1 à det2 si la route est correcte. (détecteurs en entrée obligatoires) +// transmis dans le tableau Event_det +// Résultat: +// si >=9996 : pas de route +// si 10 : ok route trouvée +function test_route_valide(det1,det2,det3 : integer) : integer; +var det_suiv,resultat : integer; +begin + if TraceListe then AfficheDebug('test route valide '+IntToSTR(det1)+' '+IntToSTR(det2)+' vers '+IntToSTR(det3)+' ',clyellow); + det_suiv:=detecteur_suivant_el(det1,1,det2,1); + if det_suiv=det3 then begin test_route_valide:=10;exit;end; + + test_route_valide:=9999; + exit; + + if (det_suiv>=9996) or (det3<>det_suiv) then begin resultat:=0; NivDebug:=0;end; + // test sens inverse.... + if resultat=0 then + begin + test_route_valide:=0;exit; + // si manipulation proche aiguillage + det_suiv:=detecteur_suivant_el(det3,1,det2,1); + if (det_suiv>=9996) or (det1<>det_suiv) then begin test_route_valide:=0; NivDebug:=0;exit;end; + end; + test_route_valide:=10 ; +end; + + +// mise à jour de l'état d'un feu en fontion de son environnement et affiche le feu +procedure Maj_Feu(Adrfeu : integer); +var i,j,k1,k2,BtypeSuiv,Adr_det,etat,Adr,Aig,DetPrec1,DetPrec2,Detprec3,Detprec4,Adr_El_Suiv, + Btype_el_suivant,det_initial,bt,el_suiv,modele : integer ; + PresTrain,Aff_semaphore,car : boolean; + code,combine : word; + s : string; +begin + s:='Traitement du feu '+intToSTR(Adrfeu)+'------------------------------------'; + //if adrfeu=197 then affsignal:=true else affsignal:=false; + if AffSignal then AfficheDebug(s,clOrange); + i:=index_feu(Adrfeu); + if AdrFeu<>0 then + begin + modele:=Feux[i].aspect; + + Adr_det:=Feux[i].Adr_det1; // détecteur sur le signal + Adr_El_Suiv:=Feux[i].Adr_el_suiv1; // adresse élément suivant au feu + Btype_el_suivant:=Feux[i].Btype_suiv1; + + // signal directionnel ? + if (modele>10) then + begin + //Affiche('Signal directionnel '+IntToSTR(AdrFeu),clyellow); + Signal_direction(AdrFeu); + exit; + end; + + // signal non directionnel + etat:=etat_signal_suivant(AdrFeu,1) ; // état du signal suivant + adresse du signal suivant dans Signal_Suivant + if AffSignal then + begin + code_to_aspect(etat,code,combine); + s:='Etat signal suivant ('+intToSTR(AdresseFeuSuivant)+') est '; + s:=s+' à '+etatSign[code]; + if Combine<>0 then s:=s+' + '+etatSign[combine]; + AfficheDebug(s,clyellow); + end; + + // signaux traités spécifiquement + { + if (AdrFeu=201) then + begin + if ((aiguillage[28].position<>const_droit) and (aiguillage[29].position<>const_droit) and + (aiguillage[31].position=2)) then // attention spécial + Maj_Etat_Signal(AdrFeu,blanc) else Maj_Etat_Signal(AdrFeu,violet); + envoi_LEB(AdrFeu); + exit; + end; + if (AdrFeu=217) then + begin + if ((aiguillage[24].position<>const_droit) and (aiguillage[26].position<>const_droit)) then + Maj_Etat_Signal(AdrFeu,blanc) else Maj_Etat_Signal(AdrFeu,violet); + envoi_LEB(AdrFeu); + exit; + end; + } + + // signal à 2 feux = carré violet+blanc + if (Feux[i].aspect=2) then //or (feux[i].check<>nil) then // si carré violet + begin + // si aiguillage après signal mal positionnées + if carre_signal(AdrFeu) then + begin + Maj_Etat_Signal(AdrFeu,violet); + Envoi_signauxCplx; + exit; + end + else + begin + Maj_Etat_Signal(AdrFeu,blanc); + Envoi_signauxCplx; + exit; + end; + end; + + //if AffSignal then AfficheDebug('Debut du traitement général',clYellow); + // traitement des feux >3 feux différents de violet (cas général) + if (Feux[i].aspect>=3) and (EtatSignalCplx[AdrFeu]<>violet_F) then + begin + // détecteurs précédent le feu , pour déterminer si leurs mémoires de zones sont à 1 pour libérer le carré + if (Feux[i].VerrouCarre) and (Feux[i].aspect>=4) then + begin + if AffSignal then AfficheDebug('Le feu est verrouillable au carré',clyellow); + // **** un feu peut être associé à 4 détecteurs (pour 4 voies convergentes) ***** + // il faut donc explorer les 4 détecteurs probables + PresTrain:=FALSE; + + j:=1; + repeat + if NivDebug=3 then afficheDebug('Séquence '+IntToSTR(j)+' de recherche des 4 détecteurs précédents-----',clOrange); + if (j=1) then + begin det_initial:=feux[i].Adr_det1;Adr_El_Suiv:=feux[i].Adr_el_suiv1; + if feux[i].Btype_suiv1=1 then Btype_el_suivant:=1; + if feux[i].Btype_suiv1=2 then Btype_el_suivant:=2; + if feux[i].Btype_suiv1=5 then Btype_el_suivant:=3; // 1=détécteur 2=aig 5=bis + end; + if (j=2) then + begin + det_initial:=feux[i].Adr_det2;Adr_El_Suiv:=feux[i].Adr_el_suiv2; + if feux[i].Btype_suiv1=1 then Btype_el_suivant:=1; + if feux[i].Btype_suiv1=2 then Btype_el_suivant:=2; + if feux[i].Btype_suiv1=5 then Btype_el_suivant:=3; // 1=détécteur 2=aig 5=bis + end; + if (j=3) then + begin det_initial:=feux[i].Adr_det3;Adr_El_Suiv:=feux[i].Adr_el_suiv3; + if feux[i].Btype_suiv1=1 then Btype_el_suivant:=1; + if feux[i].Btype_suiv1=2 then Btype_el_suivant:=2; + if feux[i].Btype_suiv1=5 then Btype_el_suivant:=3; // 1=détécteur 2=aig 5=bis + end; + if (j=4) then + begin + det_initial:=feux[i].Adr_det4;Adr_El_Suiv:=feux[i].Adr_el_suiv4; + if feux[i].Btype_suiv1=1 then Btype_el_suivant:=1; + if feux[i].Btype_suiv1=2 then Btype_el_suivant:=2; + if feux[i].Btype_suiv1=5 then Btype_el_suivant:=3; // le type du feu 1=détécteur 2=aig 5=bis + end; + if (det_initial<>0) then + begin + DetPrec1:=detecteur_suivant(Adr_El_Suiv,Btype_el_suivant,det_initial,1); + if DetPrec1<9996 then // route bloquée par aiguillage mal positionné + begin + DetPrec2:=detecteur_suivant_El(det_initial,1,DetPrec1,1); + if DetPrec2<9996 then + begin + DetPrec3:=detecteur_suivant_El(DetPrec1,1,DetPrec2,1); + if DetPrec3<9996 then + begin + //DetPrec4:=detecteur_suivant_det(DetPrec2,DetPrec3); + if AffSignal then AfficheDebug('les détecteurs précédents au feu '+IntToSTR(Adrfeu)+' sont:'+intToSTR(Det_initial)+' '+intToSTR(DetPrec1)+' '+intToSTR(DetPrec2)+' '+intToSTR(DetPrec3)+' ',clyellow); + PresTrain:=//MemZone[DetPrec4,detPrec3] or + MemZone[DetPrec3,detPrec2] or MemZone[DetPrec2,detPrec1] or MemZone[DetPrec1,Det_initial] or presTrain ; + if AffSignal then + begin + if MemZone[DetPrec3,detPrec2] then AfficheDebug('1.présence train '+IntToSTR(DetPrec3)+' '+IntToSTR(detPrec2),clyellow); + if MemZone[DetPrec2,detPrec1] then AfficheDebug('2.présence train '+IntToSTR(DetPrec2)+' '+IntToSTR(detPrec1),clyellow); + if MemZone[DetPrec1,det_initial] then AfficheDebug('3.présence train '+IntToSTR(DetPrec1)+' '+IntToSTR(det_Initial),clyellow); + + //if PresTrain then AfficheDebug('présence train',clyellow) else afficheDebug('abscence train',clyellow); + end; + //if AffSignal then AfficheDebug('MemZone'+intToSTR(DetPrec3)+' '+IntToSTR(detPrec2) = '+MemZone[DetPrec3,detPrec2] + end; + end; + end; + end; + inc(j); + until (j>=5); + if presTrain and AffSignal Then afficheDebug('présence train feu '+intToSTR(AdrFeu),clorange); + end; + + if AffSignal then afficheDebug('Fin de la recherche des 4 détecteurs précédents-----',clOrange); + // si le signal peut afficher un carré et les aiguillages après le signal sont mal positionnées ou que pas présence train avant signal et signal + // verrouillable au carré, afficher un carré + car:=carre_signal(AdrFeu); + // conditions supplémentaires de carré en fonction des aiguillages décrits + car:=cond_carre(AdrFeu) or car; + if AffSignal and car then AfficheDebug('le signal a des aiguilles en talon aval mal positionnées',clYellow); + if (NivDebug>=1) and car then AfficheDebug('le signal a des aiguilles en talon aval mal positionnées',clYellow); + if (Feux[i].aspect>=4) and ( (not(PresTrain) and Feux[i].VerrouCarre) or car) then Maj_Etat_Signal(AdrFeu,carre) + else + begin + // si on quitte le détecteur on affiche un sémaphore : attention tester le sens de circulation + // pour ne pas passer au rouge un feu à contresens. + // trouver la mémoire de zone MemZone[Adr_det,?] qui a déclenché le feu rouge + //if adrFeu=197 then NivDebug:=3; + if AffSignal then AfficheDebug('test du sémaphore',clYellow); + Aff_semaphore:=test_memoire_zones(AdrFeu); // test si présence train après signal + //Nivdebug:=0; + if Aff_Semaphore then + begin + if AffSignal then AfficheDebug('Présence train après signal'+intToSTR(AdrFeu)+' -> sémaphore ou carré',clYellow); + if testBit(EtatSignalCplx[Adrfeu],carre)=FALSE then Maj_Etat_Signal(AdrFeu,semaphore); + end + else + begin + // si aiguille locale déviée + Aig:=Aiguille_deviee(Adrfeu); + if (aig<>0) and (feux[i].aspect>=9) then // si le signal peut afficher un rappel et aiguille déviée + begin + if AffSignal then AfficheDebug('Aiguille '+intToSTR(aig)+' déviée',clYellow); + EtatSignalCplx[AdrFeu]:=0; + if (aiguillage[aig].vitesse=30) or (aiguillage[aig].vitesse=0) then Maj_Etat_Signal(AdrFeu,rappel_30); + if aiguillage[aig].vitesse=60 then Maj_Etat_Signal(AdrFeu,rappel_60); + + // si signal suivant affiche rappel ou rouge + if (TestBit(etat,rappel_60)) or (testBit(etat,rappel_30)) or (testBit(etat,carre)) or (testBit(etat,semaphore)) + then Maj_Etat_Signal(AdrFeu,jaune) + else + begin + // sinon si signal suivant=jaune + if (TestBit(etat,jaune)) then Maj_Etat_Signal(AdrFeu,jaune_cli); + end; + end + else + // aiguille locale non déviée ou aspect feu<9 + // si le signal suivant est rouge + begin + if AffSignal then AfficheDebug('pas d''aiguille déviée',clYellow); + if TestBit(etat,carre) or testBit(etat,semaphore) or testBit(etat,semaphore_cli )then Maj_Etat_Signal(AdrFeu,jaune) + else + begin + // si signal suivant affiche rappel + if TestBit(etat,rappel_30) or TestBit(etat,rappel_60) then + begin + EtatSignalCplx[AdrFeu]:=0; + if TestBit(etat,rappel_30) then Maj_Etat_Signal(AdrFeu,ral_30); + if TestBit(etat,rappel_60) then + begin + 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); + end; + end + else + // si le signal suivant est jaune + if TestBit(etat,jaune) then Maj_Etat_Signal(AdrFeu,jaune_cli) + else Maj_Etat_Signal(AdrFeu,vert) + end; + end; + end; + end; + end; + end; + envoi_signauxCplx; +end; + +Procedure Maj_feux; +var i : integer; +begin + Maj_feux_cours:=TRUE; + for i:=1 to NbreFeux do + begin + Maj_feu(Feux[i].Adresse); + end; + Maj_feux_cours:=FALSE; +end; + + +procedure rafraichit; +begin + //Affiche('Procédure rafraichit',cyan); + begin + Maj_feux; + //Maj_feux; + end +end; + +// trouve l'index d'un détecteur dans une branche depuis la fin de la branche +// si pas trouvé, renvoie 0 +function index_detecteur_fin(det,Num_branche : integer) : integer; +var dernier,i,j : integer; + trouve : boolean; + procedure recherche; + begin + repeat + if BrancheN[Num_Branche,i].Btype=1 then // cherche un détecteur + begin + j:=BrancheN[Num_Branche,i].adresse; + trouve:=det=j; + end; + if not(trouve) then dec(i); + until trouve or (j=0) + end; +begin + // déterminer la fin de la branche + i:=1; + repeat + inc(i); + until (BrancheN[Num_Branche,i].adresse=0) and (BrancheN[Num_Branche,i].btype=0); + dernier:=i-1; + // Affiche('dernier'+intToSTR(dernier),clwhite); + // rechercher le détecteur depuis l'index i + i:=dernier;index2_det:=0; + recherche; + if trouve then result:=i else result:=0; + //affiche(inttostr(ai+1),clOrange); + + //affiche('------------------------',clWhite); + recherche; + //affiche('------------------------',clGreen); + if trouve then index2_det:=i else index2_det:=0; + //affiche('index2='+IntToSTR(index2_det),clWhite); +end; + +// calcul des zones depuis le tableau des fronts descendants des évènements détecteurs +// transmis dans le tableau Event_det +procedure calcul_zones; +var AdrFeu,AdrDetFeu,Nbre,Nouveau_Det,i,resultat,det1,det2,det3,AdrSuiv,TypeSuiv,AdrPrec : integer ; + creer_tableau : boolean; + s : string; +begin + creer_tableau:=false; + det3:=event_det[N_event_det]; // c'est le nouveau détecteur + FormDebug.MemoEvtDet.lines.add('Le nouveau détecteur est '+IntToSTR(det3)) ; + if TraceListe then AfficheDebug('Le nouveau détecteur est '+IntToSTR(det3),clyellow) ; + + // évaluer d'abord la route du nouveau détecteur sur tous les tableau déja rempli de 2 éléments + for i:=1 to N_trains do + begin + Nbre:=event_det_train[i].NbEl ; // Nombre d'éléments du tableau courant exploré + if Nbre=2 then + begin + if TraceListe or (NivDebug=3) then AfficheDebug('traitement Train n°'+intToSTR(i)+' 2 détecteurs',clyellow); + det1:=event_det_train[i].det[1]; + det2:=event_det_train[i].det[2]; + resultat:=test_route_valide(det1,det2,det3); + if resultat=10 then + begin + AdrSuiv:=detecteur_suivant_el(det2,1,det3,1); // ici on cherche le suivant à det2 det3 + if (Adrsuiv>=9996) then + begin + Affiche('Erreur 1500 : pas de suivant sur la route de '+intToSTR(det2)+' à '+intToSTR(det3),clRed); + if NivDebug=3 then AfficheDebug('Erreur 1500 : pas de suivant sur la route de '+intToSTR(det2)+' à '+intToSTR(det3),clRed); + end + else + begin + s:='route traitée de '+intToSTR(det2)+' à '+IntToSTR(det3)+' Mem '+intToSTR(det3)+' à '+IntToSTR(Adrsuiv); + FormDebug.MemoEvtDet.lines.add(s); + if traceListe then AfficheDebug(s,clyellow); + With FormDebug.RichEdit do + begin + s:='train '+IntToSTR(i)+' '+intToStr(det2)+' à '+intToStr(det3)+' => Mem '+IntToSTR(det3)+' à '+IntTOStr(AdrSuiv); + Lines.Add(s); + RE_ColorLine(FormDebug.RichEdit,lines.count-1,CouleurTrain[ ((i - 1) mod NbCouleurTrain) +1] ); + end; + if TraceListe then AfficheDebug(s,clyellow); + Affiche(s,clyellow); + if AffAigDet then AfficheDebug(s,clyellow); + + MemZone[det2,det3]:=FALSE; // efface zone précédente + MemZone[det3,AdrSuiv]:=TRUE; // valide la nouveau zone + // supprimer le 1er et décaler + event_det_train[i].det[1]:=event_det_train[i].det[2]; + event_det_train[i].det[2]:=det3; + event_det_train[i].NbEl:=2; + with FormDebug.MemoEvtDet do + begin + lines.add('Nouveau Tampon train '+intToStr(i)+'--------'); + lines.add(intToSTR(event_det_train[i].det[1])); + lines.add(intToSTR(event_det_train[i].det[2])); + end; + if TraceListe then + begin + AfficheDebug('Nouveau Tampon train '+intToStr(i)+'--------',clyellow); + AfficheDebug(intToSTR(event_det_train[i].det[1]),clyellow); + AfficheDebug(intToSTR(event_det_train[i].det[2]),clyellow); + end; + rafraichit; + rafraichit; + rafraichit; + if avecTCO then + begin + zone_TCO(det2,det3,0); // désactivation + zone_TCO(det3,AdrSuiv,1); // activation + end; + exit; // sortir absolument + end; + end; + end; + end; + + // traiter pour les cas avec 1 élément + for i:=1 to N_trains do + begin + Nbre:=event_det_train[i].NbEl ; // Nombre d'éléments du tableau courant exploré + if Nbre=1 then + begin + if traceListe then AfficheDebug('traitement Train n°'+intToSTR(i)+' 1 détecteur',clyellow); + // vérifier si l'élément du tableau et le nouveau sont contigus + det1:=event_det_train[i].det[1]; + Det_Adj(det1); // renvoie les adresses des détecteurs adjacents au détecteur "det1" résultat dans adj1 et adj2 + if (Adj1=det3) or (Adj2=det3) then + begin + event_det_train[i].det[2]:=det3; + event_det_train[i].NbEl:=2; + with FormDebug.MemoEvtDet do + begin + lines.add('Nouveau Tampon train '+intToStr(i)+'--------'); + lines.add(intToSTR(event_det_train[i].det[1])); + lines.add(intToSTR(event_det_train[i].det[2])); + end; + if TraceListe then + begin + AfficheDebug('Nouveau Tampon train '+intToStr(i)+'--------',clyellow); + AfficheDebug(intToSTR(event_det_train[i].det[1]),clyellow ); + AfficheDebug(intToSTR(event_det_train[i].det[2]),clyellow ); + end; + exit; // sortir absolument + end; + end; + end; + + // créer un train, donc un tableau + if N_Trains>=Max_Trains then + begin + Affiche('Erreur nombre de train maximal atteint',clRed); + end; + Inc(N_trains); + + // vérifier si le détecteur du nouveau train est associé à un feu vers un buttoir + for i:=1 to NbreFeux do + begin + AdrFeu:=Feux[i].Adresse; + AdrDetfeu:=Feux[i].Adr_Det1; + if (AdrDetFeu=Det3) and (feux[i].aspect<10) then + begin + AdrSuiv:=Feux[i].Adr_el_suiv1;TypeSuiv:=Feux[i].Btype_suiv1; + AdrPrec:=detecteur_suivant(AdrSuiv,typeSuiv,AdrDetFeu,1) ; // détecteur précédent le feu + if AdrPrec=0 then + begin + if TraceListe then Affiche('FD - Le feu '+IntToSTR(AdrFeu)+' est précédé d''un buttoir',clyellow); + MemZone[0,AdrDetFeu]:=false; + //NivDebug:=3; + AffSignal:=true; + maj_feu(AdrFeu); + end; + end; + end; + + if TraceListe then AfficheDebug('Création Train n°'+intToSTR(i),clyellow); + Formprinc.LabelNbTrains.caption:=IntToSTR(N_trains); + event_det_train[N_trains].det[1]:=det3; + event_det_train[N_trains].NbEl:=1; + with FormDebug.MemoEvtDet do + begin + lines.add('Nouveau Tampon train '+intToStr(N_trains)+'--------'); + lines.add(intToSTR(event_det_train[N_trains].det[1])); + end; + if TraceListe then + begin + AfficheDebug('Nouveau Tampon train '+intToStr(N_trains)+'--------',clyellow); + AfficheDebug(intToSTR(event_det_train[N_trains].det[1]),clyellow ); + end; +end; + + + +// demande l'état d'un accessoire à la centrale. Le résultat sera réceptionné sur réception des informations +// de rétrosignalisation. +procedure demande_info_acc(adresse : integer); +var s : string; + n : integer; +begin + // uniquement si connecté directement à la centrale + if portCommOuvert or ParSocket then + begin + // envoyer 2 fois la commande, une fois avec N=0 pour récupérer le nibble bas, + // une autre fois avec N=1 pour récupérer le nibble haut + s:=#$42+char((adresse-1) div 4); + n:=$80+((adresse-1) mod 4) div 2; + s:=s+char(n); // N=0 (bit 0) + s:=checksum(s); + envoi(s); + + s:=#$42+char((adresse-1) div 4); + n:=$80+((adresse-1) mod 4) div 2; + s:=s+char(n or 1); // N=1 (bit 0) + s:=checksum(s); + envoi(s); + end; +end; + +// demande l'état de tous les accessoires par l'interface +procedure demande_etat_acc; +var i : integer; +begin + Affiche('Demande état des aiguillages',ClYellow); + for i:=1 to maxaiguillage do + begin + demande_info_acc(i); + end; +end; + + +// traitement des évènements actionneurs +procedure Event_act(adr,etat : integer;train : string); +var i,v,va,j,etatAct,Af,Ao,Access,sortie : integer; + s : string; + presTrain_PN : boolean; + Ts : TAccessoire; +begin + // vérifier si l'actionneur en évènement a été déclaré pour réagir + if AffActionneur then Affiche('Actionneur '+intToSTR(Adr)+'='+intToSTR(etat),clyellow); + + for i:=1 to maxTablo_act do + begin + s:=Tablo_actionneur[i].train; + etatAct:=Tablo_actionneur[i].etat ; + // actionneur pour fonction train + if (Tablo_actionneur[i].actionneur=adr) and (Tablo_actionneur[i].fonction<>0) and ((s=train) or (s='X')) and (etatAct=etat) then + begin + Affiche('Actionneur '+intToSTR(adr)+' Train='+train+' F'+IntToSTR(Tablo_actionneur[i].fonction)+':'+intToSTR(etat),clyellow); + // exécutione la fonction F vers CDM + envoie_fonction_CDM(Tablo_actionneur[i].fonction,etat,train); + TempoAct:=tablo_actionneur[i].Tempo div 100; + RangActCours:=i; + end; + // actionneur pour accessoire + if (Tablo_actionneur[i].actionneur=adr) and (Tablo_actionneur[i].accessoire<>0) and ((s=train) or (s='X')) and (etatAct=etat) then + begin + access:=Tablo_actionneur[i].accessoire; + sortie:=Tablo_actionneur[i].sortie; + + Affiche('Actionneur '+intToSTR(adr)+' Train='+train+' Accessoire '+IntToSTR(access)+':'+intToSTR(sortie),clyellow); + // exécution la fonction accessoire vers CDM + if Tablo_actionneur[i].RAZ then Ts:=aig else Ts:=Feu; + pilote_acc(access,sortie,Ts); // sans RAZ + RangActCours:=i; + end; + + + end; + + + + // dans le tableau des PN + for i:=1 to NbrePN do + begin + for v:=1 to Tablo_PN[i].nbvoies do + begin + aO:=Tablo_PN[i].voie[v].actOuvre; + aF:=Tablo_PN[i].voie[v].actFerme; + + if (aO=adr) and (etat=0) then // actionneur d'ouverture + begin + Tablo_PN[i].voie[v].PresTrain:=false; + // vérifier les présences train sur les autres voies du PN + presTrain_PN:=false; + for va:=1 to Tablo_PN[i].nbvoies do + begin + presTrain_PN:=presTrain_PN or Tablo_PN[i].voie[va].PresTrain; + end; + if not(presTrain_PN) then + begin + Affiche('Ouverture PN'+intToSTR(i),clOrange); + pilote_acc(Tablo_PN[i].AdresseOuvre,Tablo_PN[i].CommandeOuvre,Aig); + end; + end; + + if (aF=adr) and (etat=1) then // actionneur de fermeture + begin + Tablo_PN[i].voie[v].PresTrain:=true; + Affiche('Fermeture PN'+IntToSTR(i)+' (train voie '+IntToSTR(v)+')',clOrange); + pilote_acc(Tablo_PN[i].AdresseFerme,Tablo_PN[i].CommandeFerme,Aig); + end; + end; + end; +end; + +Procedure affiche_memoire; +var s: string; +begin + s:='Mémoire évènements '+IntToSTR( 100*N_Event_tick div Max_Event_det_tick)+' %'; + Formprinc.statictext.caption:=s; +end; + +// traitement sur les évènements détecteurs +procedure Event_Detecteur(Adresse : integer;etat : boolean); +var i,AdrSuiv,AdrFeu,AdrDetfeu,TrainActuel,Etat01,typeSuiv,AdrPrec : integer; + s : string; +begin + if Etat then Etat01:=1 else Etat01:=0; + + // vérifier si l'état du détecteur est déja stocké, car on peut reçevoir plusieurs évènements pour le même détecteur dans le même état + // on reçoit un doublon dans deux index consécutifs. +(* + if N_Event_tick>=1 then + begin + if (event_det_tick[N_event_tick].etat=etat01) and (event_det_tick[N_event_tick].detecteur=Adresse) then + begin + //Affiche(IntToSTR(Adresse)+' déja stocké',clorange); + exit; // déja stocké + end; + end; + *) + if Traceliste then AfficheDebug('--------------------- détecteur '+intToSTR(Adresse)+' à '+intToSTR(etat01)+'-----------------------------',clOrange); + if AffAigDet then + begin + //s:='Evt Det '+intToSTR(adresse)+'='+intToSTR(etat01); + s:='Tick='+IntToSTR(tick)+' Det='+IntToSTR(adresse)+'='+intToSTR(etat01); + + Affiche(s,clyellow); + if not(TraceListe) then AfficheDebug(s,clyellow); + end; + + //if etat then Mem[Adresse]:=true; // mémoriser l'état à 1 + + ancien_detecteur[Adresse]:=detecteur[Adresse]; + detecteur[Adresse]:=etat; + detecteur_chgt:=Adresse; + + // stocke les changements d'état des détecteurs dans le tableau chronologique + if (N_Event_tick>=Max_Event_det_tick) then + begin + N_Event_tick:=0; + Affiche('Raz Evts détecteurs',clLime); + end; + inc(N_Event_tick); + event_det_tick[N_event_tick].tick:=tick; + event_det_tick[N_event_tick].detecteur:=Adresse; + event_det_tick[N_event_tick].etat:=etat01; + if (n_Event_tick mod 10) =0 then affiche_memoire; + // Affiche('stockage de '+intToSTR(N_event_tick)+' '+IntToSTR(Adresse)+' à '+intToSTR(etat01),clyellow); + + + // détection front montant + if not(ancien_detecteur[Adresse]) and detecteur[Adresse] then + begin + // explorer les feux pour déverrouiller les feux dont le trajets viennent d'un buttoir pour changer le feu qd un train se présente + // sur le détecteur + for i:=1 to NbreFeux do + begin + AdrFeu:=Feux[i].Adresse; + AdrDetfeu:=Feux[i].Adr_Det1; + if (AdrDetFeu=Adresse) and (feux[i].aspect<10) then + begin + AdrSuiv:=Feux[i].Adr_el_suiv1;TypeSuiv:=Feux[i].Btype_suiv1; + if AffSignal then AfficheDebug('Pour Feu '+intToSTR(AdrFeu)+' detecteursuivant('+intToSTR(AdrSuiv)+','+IntToSTR(typeSuiv)+','+intToSTR(AdrDetFeu)+',1)',clyellow); + AdrPrec:=detecteur_suivant(AdrSuiv,typeSuiv,AdrDetFeu,1) ; // détecteur précédent le feu + if AdrPrec=0 then + begin + If traceListe then AfficheDebug('Le feu '+IntToSTR(AdrFeu)+' est précédé d''un buttoir',clyellow); + MemZone[0,AdrDetFeu]:=true; + //NivDebug:=3; + // AffSignal:=true; + // Aiguillage[20].position:=const_devie; + // Aiguillage[7].position:=const_droit; + maj_feu(AdrFeu); + end; + end; + + end; + + end; + + // détection fronts descendants + if ancien_detecteur[Adresse] and not(detecteur[Adresse]) and (N_Event_detAdresse then + begin + if AffFD then AfficheDebug('index='+intToSTR(N_event_tick)+' FD '+intToSTR(Adresse),clyellow); + inc(N_event_det); + event_det[N_event_det]:=Adresse; + // vérification de la connaissance de la position de tous les aiguillages au premier évènement FD détecteur + if not(PremierFD) then + begin + for i:=1 to MaxAiguillage do + begin + if aiguillage[i].modele<>0 then + begin + if aiguillage[i].position=9 then + begin + Affiche('Attention : position de l''aiguillage '+IntToSTR(i)+' inconnue',clred); + AfficheDebug('Attention : position de l''aiguillage '+IntToSTR(i)+' inconnue',clred); + end; + end; + end; + end; + premierFD:=True; + if not(configNulle) then calcul_zones; // en avant les calculs + end; + end; + + if (N_event_det>=Max_event_det) then + begin + Affiche('Débordement d''évènements FD - Raz tampon',clred); + N_event_det:=0; + FormDebug.MemoEvtDet.lines.add('Raz sur débordement'); + end; + + // attention à partir de cette section le code est susceptible de ne pas être exécuté + + // Mettre à jour le TCO + if AvecTCO then + begin + formTCO.Maj_TCO(Adresse); + end; +end; + +// évènement d'aiguillage +procedure Event_Aig(adresse,pos,objet : integer); +var s: string; +begin + // ------------------- traitement du numéro d'objet ------------------------- + // init objet + if aiguillage[adresse].objet=0 then + begin + aiguillage[adresse].objet:=objet; + //affiche('stockage Aiguillage '+intToSTR(adresse)+' objet='+intToSTR(objet),clYellow); + end; + + aiguillage[adresse].position:=pos; + + + // ------------- stockage évènement aiguillage dans tampon event_det_tick ------------------------- + if (N_Event_tick>=Max_Event_det_tick) then + begin + N_Event_tick:=0; + Affiche('Raz Evts détecteurs',clLime); + end; + s:='Evt Aig '+intToSTR(adresse)+'='+intToSTR(pos); + if pos=const_droit then s:=s+' droit' else s:=s+' dévié'; + if AffAigDet then + begin + if objet<>0 then s:=s+' objet='+IntToSTR(objet); + Affiche(s,clyellow); + AfficheDebug(s,clyellow); + end; + FormDebug.MemoEvtDet.lines.add(s) ; + if (n_Event_tick mod 10) =0 then affiche_memoire; + inc(N_Event_tick); + event_det_tick[N_event_tick].tick:=tick; + event_det_tick[N_event_tick].aiguillage:=adresse; + event_det_tick[N_event_tick].etat:=pos; + event_det_tick[N_event_tick].objet:=objet; + + // Mettre à jour le TCO + if AvecTCO then + begin + formTCO.Maj_TCO(Adresse); + end; + +end; + + +// le décodage de la rétro est appellée sur une réception d'une trame de la rétrosignalisation de la centrale. +// On déclenche ensuite les évènements détecteurs ou aiguillages. +procedure decode_retro(adresse,valeur : integer); +var s : string; + adraig,bitsITT,i : integer; +begin + //affiche(IntToSTR(adresse)+intToSTR(valeur),clorange); + bitsITT:=(valeur and $E0); + // bit à 010X XXXX = c'est un module de rétrosignalisation (pas un aiguillage) + // doc LENZ Xpressnet protocol description page 31 + detecteur_chgt:=0; + if (valeur and $10)=$10 then // si bit N=1, les 4 bits de poids faible sont les 4 bits de poids fort du décodeur + begin + // détermine le détecteur qui a changé d'état + // -------état du détecteur + if bitsITT=$40 then // module de rétro = détecteur + begin + // affecter l'état des détecteurs + i:=adresse*8+8; + if detecteur[i]<>((valeur and $8) = $8) then // si changement de l'état du détecteur bit 7 + begin + Event_detecteur(i,(valeur and $8) = $8); + end; + + i:=adresse*8+7; + if detecteur[i]<>((valeur and $4) = $4) then // si changement de l'état du détecteur bit 6 + begin + Event_detecteur(i,(valeur and $4) = $4); + end; + + i:=adresse*8+6; + if detecteur[i]<>((valeur and $2) = $2) then // si changement de l'état du détecteur bit 5 + begin + Event_detecteur(i,(valeur and $2) = $2); + end; + + i:=adresse*8+5; + if detecteur[i]<>((valeur and $1) = $1) then // si changement de l'état du détecteur bit 4 + begin + Event_detecteur(i,(valeur and $1) = $1); + end; + end; + + // état de l'aiguillage + if bitsITT=$00 then // module d'aiguillages, N=1 + begin + adraig:=((adresse * 4)+1 ); // *4 car N=1, c'est le "poids fort" + if (valeur and $C)=$8 then + begin + Event_Aig(adraig+3,const_droit,0); + if trace then begin s:='accessoire '+intToSTR(adraig+3)+'=2';Affiche(s,clYellow);end; + end; + if (valeur and $C)=$4 then + begin + Event_Aig(adraig+3,const_devie,0); + if trace then begin s:='accessoire '+intToSTR(adraig+3)+'=1';Affiche(s,clYellow);end; + end; + if (valeur and $3)=$2 then + begin + Event_Aig(adraig+2,const_droit,0); + if trace then begin s:='accessoire '+intToSTR(adraig+2)+'=2';Affiche(s,clYellow);end; + end; + if (valeur and $3)=$1 then + begin + Event_Aig(adraig+2,const_devie,0); + if trace then begin s:='accessoire '+intToSTR(adraig+2)+'=1';Affiche(s,clYellow);end; + end; + end; + end; + + if (valeur and $10)=$00 then // si bit N=0, les 4 bits de poids faible sont les 4 bits de poids faible du décodeur + begin + //Affiche('N=0',clYellow); + if bitsITT=$40 then // module de rétro + begin + // affecter l'état des détecteurs + i:=adresse*8+4; + if detecteur[i]<>((valeur and $8) = $8) then // si changement de l'état du détecteur bit 7 + begin + Event_detecteur(i,(valeur and $8) = $8); + end; + i:=adresse*8+3; + if detecteur[i]<>((valeur and $4) = $4) then // si changement de l'état du détecteur bit 6 + begin + Event_detecteur(i,(valeur and $4) = $4); + end; + + i:=adresse*8+2; + if detecteur[i]<>((valeur and $2) = $2) then // si changement de l'état du détecteur bit 5 + begin + Event_detecteur(i,(valeur and $2) = $2); + end; + + i:=adresse*8+1; + if detecteur[i]<>((valeur and $1) = $1) then // si changement de l'état du détecteur bit 4 + begin + Event_detecteur(i,(valeur and $1) = $1); + end; + + end; + if bitsITT=$00 then // module d'aiguillages + begin + adraig:=(adresse * 4)+1; + if (valeur and $C)=$8 then + begin + Event_Aig(adraig+1,const_droit,0); + if trace then begin s:='accessoire '+intToSTR(adraig+1)+'=2';Affiche(s,clYellow);end; + end; + if (valeur and $C)=$4 then + begin + Event_Aig(adraig+1,const_devie,0); + if trace then begin s:='accessoire '+intToSTR(adraig+1)+'=1';Affiche(s,clYellow);end; + end; + if (valeur and $3)=$2 then + begin + Event_Aig(adraig,const_droit,0); + if trace then begin s:='accessoire '+intToSTR(adraig)+'=2';Affiche(s,clYellow);end; + end; + if (valeur and $3)=$1 then + begin + Event_Aig(adraig,const_devie,0); + if trace then begin s:='accessoire '+intToSTR(adraig)+'=1';Affiche(s,clYellow);end; + end; + end; + end; +end; + + +// décodage d'une chaine simple de la rétrosignalisation de la centrale +function decode_chaine_retro(chaineINT : string) : string ; +var msg : string; + i,cvLoc : integer; +begin + //affiche(chaine_hex(chaine),clyellow); + msg:=''; + ack:=true;nack:=false; + // décodage du 3eme octet de la chaîne + if chaineINT[1]=#1 then + begin + case chaineINT[2] of // page 13 doc XpressNet + #1 : begin nack:=true;msg:='erreur timout transmission';end; + #2 : begin nack:=true;msg:='erreur timout centrale';end; + #3 : begin nack:=true;msg:='erreur communication inconnue';end; + #4 : begin succes:=true;msg:='succès';end; + #5 : begin nack:=true;msg:='plus de time slot';end; + #6 : begin nack:=true;msg:='débordement tampon LI100';end; + end; + if trace and (chaineINT[2]=#4) then Affiche(msg,clYellow); + if trace and (chaineINT[2]<>#4) then Affiche(msg,clRed); + delete(chaineINT,1,3); + decode_chaine_retro:=chaineINT; + exit; + end; + + if chaineINT[1]=#2 then + begin + msg:='Version matérielle '+intTohex(ord(chaineINT[2]),2)+' - Version soft '+intToHex(ord(chaineINT[3]),2); + Affiche(msg,clYellow); + delete(chaineINT,1,2); + decode_chaine_retro:=chaineINT; + exit; + end; + + if chaineINT[1]=#$61 then + begin + delete(chaineInt,1,1); + case chaineINT[1] of + #$00 : begin ack:=true;msg:='Voie hors tension';end; + #$01 : begin ack:=true;msg:='Reprise';end; + + #$02 : begin ack:=true;msg:='Mode programmation ';end; + + #$80 : begin nack:=true;msg:='erreurs de transferts- Voir doc XpressNet p29';end; + #$81 : begin nack:=true;msg:='Station occupée - Voir doc XpressNet p29';end; + #$82 : begin nack:=true;msg:='Commande non implantée';end; + else begin nack:=true;msg:='Réception inconnue';end; + end; + if nack then affiche(msg,clred) else affiche(msg,clyellow); + delete(chaineINT,1,2); + decode_chaine_retro:=chaineINT; + exit; + end; + + if ((chaineINT[1]=#$63) and (chaineINT[2]=#$14)) then // V3.6 uniquement + begin + // réception d'un CV. DocXpressNet p26 63 14 01 03 chk + + delete(chaineInt,1,2); + cvLoc:=ord(chaineINT[1]); + //Affiche('Réception CV'+IntToSTR(cvLoc)+' à '+IntToSTR(ord(chaineINT[2])),clyellow); + if cvLoc>255 then Affiche('Erreur Recu CV>255',clRed) + else + begin + tablo_cv[cvLoc]:=ord(chaineINT[2]); + inc(N_Cv); // nombre de CV recus + end; + recu_cv:=true; + delete(chaineInt,1,3); + decode_chaine_retro:=chaineINT; + exit; + end; + + if chaineINT[1]=#$42 then + begin + delete(chaineInt,1,1); + decode_retro(ord(chaineInt[1]),ord(chaineInt[2])); + delete(chaineInt,1,3); + decode_chaine_retro:=chaineINT; + exit; + end; + + if chaineINT[1]=#$81 then + begin + delete(chaineInt,1,2); + Affiche('Voie hors tension msg1',clRed); + Hors_tension2:=true; + decode_chaine_retro:=chaineINT; + exit; + end; + + if chaineINT[1]=#$61 then + begin + delete(chaineInt,1,2); + Affiche('Voie hors tension msg2',clRed); + Hors_tension2:=false; + decode_chaine_retro:=chaineINT; + exit; + end; + + if chaineINT[1]=#$46 then + begin + //FF FD 46 43 40 41 40 40 49 4D non documentée + //FF FD 46 43 50 41 50 40 50 54 non documentée + Affiche('Chaine non documentée recue: '+chaine_HEX(chaineINT),clred); + delete(chaineInt,1,8); + Hors_tension2:=false; + decode_chaine_retro:=chaineINT; + exit; + end; + + i:=pos(#$46+#$43+#$50,chaineInt); + if (i<>0) and (length(chaineInt)>=3) then + begin + delete(chaineInt,1,3); + Affiche('Reprise msg 2',clOrange); + Hors_tension2:=false; + decode_chaine_retro:=chaineINT; + exit; + end; + + if chaineInt[1]=#$81 then + begin + delete(chaineInt,1,2); + Affiche('Court circuit msg 1',clRed); + decode_chaine_retro:=chaineINT; + exit; + end; + + ack:=false; + nack:=true; + affiche('Erreur 7, chaîne rétrosig. inconnue recue:'+chaine_HEX(chaineINT),clred); + decode_chaine_retro:=''; +end; + +// procédure appellée après réception sur le port USB ou socket +procedure interprete_reponse(chaine : string); +var chaineInt,msg : string; + i,cv : integer; + +begin + chaineINT:=chaine; + + while length(chaineINT)>=3 do + begin + if length(chaineINT)>4 then + begin + // supprimer l'entete éventuelle + if (chaineINT[1]=#$ff) and (chaineINT[2]=#$fe) then Delete(chaineINT,1,2); + if (chaineINT[1]=#$ff) and (chaineINT[2]=#$fd) then Delete(chaineINT,1,2); + end; + chaineINT:=decode_chaine_retro(chaineINT); + end; + +end; + +function HexToStr(s: string) : string ; +// transforme une chaîne 0A FF CA.. en chaine d'octets +var i,long,erreur : integer; + st : string; + v : byte; +begin + long:=length(s); + st:=''; + i:=1; + repeat + val('$'+copy(s,i,2),v,erreur); + st:=st+char(v); + inc(i,3); + until (i>=long); + HexToStr:=st; +end; + + +procedure deconnecte_CDM; +begin + with Formprinc do + begin + ClientSocketCDM.close; + end; +end; + + +{$J+} +// vérifie si version OS32 bits ou OS64 bits +function IsWow64Process: Boolean; +type + TIsWow64Process=function(hProcess: THandle; var Wow64Process: Boolean): Boolean; stdcall; +var + DLL: THandle; + pIsWow64Process: TIsWow64Process; +const + IsWow64: Boolean=False; +begin + IsWow64:=false; + DLL:=LoadLibrary('kernel32.dll'); + if (DLL<>0) then + begin + pIsWow64Process:=GetProcAddress(DLL,'IsWow64Process'); + if (Assigned(pIsWow64Process)) then + begin + pIsWow64Process(GetCurrentProcess,IsWow64); + end; + FreeLibrary(DLL); + end; + Result:=IsWow64; +end; +{$J-} + +// initialisation de la comm USB +procedure connecte_USB; +var i,j : integer; +begin + if NumPort<>0 then + begin + With Formprinc.MSCommUSBLenz do + begin + i:=pos(':',portCom); + j:=pos(',',PortCom); + j:=posEx(',',PortCom,j+1); + j:=posEx(',',PortCom,j+1); + j:=posEx(',',PortCom,j+1); + + confStCom:=copy(portCom,i+1,j-i-1); //Affiche(ConfStCom,clred); + Settings:=ConfStCom; // COMx:vitesse,n,8,1 + Affiche('Demande ouverture COM'+intToSTR(NumPort)+':'+ConfStCom+' protocole '+IntToSTR(protocole),CLYellow); + if protocole>=4 then Handshaking:=0 {0=aucun 1=Xon-Xoff 2=cts 3=RTS-Xon-Xoff 4=5=protocoles "maison"} + else Handshaking:=protocole; + + SThreshold:=1; + RThreshold:=1; + CommPort:=NumPort; + DTREnable:=True; + if protocole=4 then RTSEnable:=True //pour la genli + else RTSenable:=False; + + InputMode:=comInputModeBinary; + end; + portCommOuvert:=true; + try + Formprinc.MSCommUSBLenz.portopen:=true; + except + portCommOuvert:=false; + end; + end + else + begin + portCommOuvert:=false; + Affiche('Port Com nul dans le fichier de configuration',clyellow); + end; + + if portCommOuvert then + begin + affiche('port COM'+intToSTR(NumPort)+' ouvert',clGreen); + With Formprinc do + begin + LabelTitre.caption:=titre+' Interface connectée au COM'+IntToSTR(NumPort); + MenuConnecterUSB.enabled:=false; + DeConnecterUSB.enabled:=true; + ConnecterCDMRail.enabled:=false; + DeConnecterCDMRail.enabled:=false; + end; + end + else + begin + Affiche('port COM'+intToSTR(NumPort)+' NON ouvert',clOrange) ; + end; +end; + + +Function GetWindowFromID(ProcessID : Cardinal): THandle; +Var TestID : Cardinal; + TestHandle : Thandle; +Begin + Result:=0; + TestHandle:=FindWindowEx(GetDesktopWindow,0,Nil,Nil); + while TestHandle>0 do + begin + if GetParent(TestHandle)=0 then GetWindowThreadProcessId(TestHandle,@TestID); + if TestID=ProcessID then + begin + Result:=TestHandle; + exit; + end; + TestHandle:=GetWindow(TestHandle,GW_HWNDNEXT) + end; +end; + +// renvoie si un process EXE tourne. Renvoie le Handle du process dans CDMHd et l'Id du process dans ProcessID +// sExeName : Nom de l'EXE sans le chemin, et sans EXE } +function ProcessRunning(sExeName: String) : Boolean; +var + hSnapShot : THandle; + ProcessEntry32 : TProcessEntry32; // pointeur sur la structure ProcessEntry32 + processID : DWord; +begin + Result:=false; + + hSnapShot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); + Win32Check(hSnapShot <> INVALID_HANDLE_VALUE); + + sExeName:=LowerCase (sExeName); + + FillChar(ProcessEntry32,SizeOf(TProcessEntry32),#0); + ProcessEntry32.dwSize:=SizeOf(TProcessEntry32); // contient la structure de tous les process + + if (Process32First(hSnapShot,ProcessEntry32)) then + repeat + //Affiche(ProcessEntry32.szExeFile,ClYellow); + if (Pos(sExeName,LowerCase(ProcessEntry32.szExeFile))=1) then + begin + processID:=ProcessEntry32.th32ProcessID; + CDMhd:=GetWindowFromID(processID); + Affiche('CDM rail processID='+IntToSTR(ProcessID)+' handle='+IntToSTR(CDMhd),clOrange); + Result:=true; + Break; + end; + until (Process32Next(hSnapShot,ProcessEntry32)=false); + CloseHandle(hSnapShot); +end; + + +// préparation du tampon pour SendInput +procedure KeybdInput(VKey: Byte; Flags: DWORD); +begin + SetLength(KeyInputs, Length(KeyInputs)+1); + KeyInputs[high(KeyInputs)].Itype := INPUT_KEYBOARD; + with KeyInputs[high(KeyInputs)].ki do + begin + wVk:=VKey; + wScan:=MapVirtualKey(wVk, 0); + dwFlags:=Flags; + end; +end; + + + +procedure SendKey(Wnd,VK : Cardinal; Ctrl,Alt,Shift : Boolean); +var + MC,MA,MS : Boolean; +begin + // Etats des touches spéciales + MC:=Hi(GetAsyncKeyState(VK_CONTROL))>127; + MA:=Hi(GetAsyncKeyState(VK_MENU))>127; + MS:=Hi(GetAsyncKeyState(VK_SHIFT))>127; + + // Simulation des touches de contrôle + if Ctrl<>MC then keybd_event(VK_CONTROL,0,Byte(MC)*KEYEVENTF_KEYUP,0); + if Alt<>MA then keybd_event(VK_MENU,0,Byte(MA)*KEYEVENTF_KEYUP,0); + if Shift<>MS then keybd_event(VK_SHIFT,0,Byte(MS)*KEYEVENTF_KEYUP,0); + + // Appui sur les touches + keybd_event(VK,0,0,0); + keybd_event(VK,0,KEYEVENTF_KEYUP,0); + +// keybd_event(MapVirtualKeyA(VK,0),0,0,0); +// keybd_event(MapVirtualKeyA(VK,0),0,KEYEVENTF_KEYUP,0); + + // Relâchement des touches si nécessaire + if Ctrl<>MC then keybd_event(VK_CONTROL,0,Byte(Ctrl)*KEYEVENTF_KEYUP,0); + if Alt<>MA then keybd_event(VK_MENU,0,Byte(Alt)*KEYEVENTF_KEYUP,0); + if Shift<>MS then keybd_event(VK_SHIFT,0,Byte(Shift)*KEYEVENTF_KEYUP,0); +end; + +// conversion d'une chaine standard en chaîne VK (virtual key) pour envoyer des évènements clavier +// 112=F1 .. 135=F20 136 à 143 rien 145 à 159 : spécifique ou non utilisé +// $A0 .. $B0 : contrôles curseur +// $BA : spécifique au pays +// $6A à $6F * + espace - . / +// BB à BE + - . attention la description diffère +function convert_VK(LAY : string) : string; +var i : integer; + s : string; +begin + s:=''; + for i:=1 to Length(Lay) do + begin + case Lay[i] of + '0' : s:=s+#96 ; + '1' : s:=s+'a'; + '2' : s:=s+'b'; + '3' : s:=s+'c'; + '4' : s:=s+'d'; + '5' : s:=s+'e'; + '6' : s:=s+'f'; + '7' : s:=s+'g'; + '8' : s:=s+'h'; + '9' : s:=s+'i'; + '*' : s:=s+#$6a; + '+' : s:=s+#$6b; + // ' ' : s:=s+#$6c; + '-' : s:=s+#$6d; + '.' : s:=s+#$6e; + '/' : s:=s+#$6f; + '_' : s:=s+'{8}'; + // '\' : s:=s+#$e2; + 'a'..'z' : s:=s+Upcase(lay[i]); + ' ','A'..'Z',#8..#$D : s:=s+lay[i]; + else Affiche('Erreur de conversion VK : '+lay,clred); + end; + end; + convert_VK:=s; +end; + +// Lance et connecte CDM rail. en sortie si CDM est lancé Lance_CDM=true, +function Lance_CDM : boolean; +var i : integer; + s : string; + cdm_lanceLoc : boolean; +begin + s:='CDR'; + if (ProcessRunning(s)) then + begin + // CDM déja lancé; + Lance_CDM:=true; + if CDM_connecte then exit; + deconnecte_USB; + connecte_CDM; + exit; + end; + + Affiche('Lancement de CDM '+lay,clyellow); + cdm_lanceLoc:=false; + // lancement depuis le répertoire 32 bits d'un OS64 + if ShellExecute(Formprinc.Handle, + 'open',PChar('C:\Program Files (x86)\CDM-Rail\cdr.exe'), + Pchar('-f '+lay), // paramètre + + PChar('C:\Program Files (x86)\CDM-Rail\') // répertoire + ,SW_SHOWNORMAL)>32 then + begin + cdm_lanceLoc:=true; + //Affiche('lancé1',clyellow); + end; + + if not(cdm_lanceLoc) then + begin + // si çà marche pas essayer depuis le répertoire de base sur un OS32 + Affiche('2eme lancement',clyellow); + if ShellExecute(Formprinc.Handle, + 'open',PChar('C:\Program Files\CDM-Rail\cdr.exe'), + Pchar('-f '+lay), // paramètre + PChar('C:\Program Files\CDM-Rail\') // répertoire + ,SW_SHOWNORMAL)<=32 then + begin + ShowMessage('répertoire CDM rail introuvable'); + lance_CDM:=false;exit; + end; + cdm_lanceLoc:=false; + end; + + if cdm_lanceLoc then + begin + Formprinc.caption:=af+' - '+lay; + // On a lancé CDM, déconnecter l'USB + deconnecte_USB; + Affiche('lance les fonctions automatiques de CDM',clyellow); + Sleep(3000); + ProcessRunning(s); // récupérer le handle de CDM + SetForegroundWindow(CDMhd); + Application.ProcessMessages; + + // démarre le serveur IP ------------------------------------ + KeybdInput(VK_MENU,0); // enfonce Alt + KeybdInput(Ord('C'),0); // enfonce C + KeybdInput(Ord('C'),KEYEVENTF_KEYUP); // relache C + + KeybdInput(VK_MENU,KEYEVENTF_KEYUP); // relache ALT + + KeybdInput(Ord('C'),0); + KeybdInput(Ord('C'),KEYEVENTF_KEYUP); + + KeybdInput(VK_RETURN,0); + KeybdInput(VK_RETURN,KEYEVENTF_KEYUP); + KeybdInput(VK_RETURN,0); + KeybdInput(VK_RETURN,KEYEVENTF_KEYUP); + + i:=SendInput(Length(KeyInputs),KeyInputs[0],SizeOf(KeyInputs[0]));SetLength(KeyInputs,0); // la fenetre serveur démarré est affichée + Sleep(300); + + KeybdInput(VK_RETURN,0); + KeybdInput(VK_RETURN,KEYEVENTF_KEYUP); + SendInput(Length(KeyInputs),KeyInputs[0],SizeOf(KeyInputs[0]));SetLength(KeyInputs,0); //fermer la fenetre + Sleep(500); + + connecte_CDM; + Sleep(400); + Application.processMessages; + + // Serveur d'interface -------------------------------------- + if ServeurInterfaceCDM>0 then + begin + KeybdInput(VK_MENU,0); // enfonce ALT + KeybdInput(Ord('I'),0); // I + KeybdInput(Ord('I'),KEYEVENTF_KEYUP); + + KeybdInput(VK_MENU,KEYEVENTF_KEYUP); // relache ALT + KeybdInput(Ord('I'),0); + KeybdInput(Ord('I'),KEYEVENTF_KEYUP); + + KeybdInput(VK_RETURN,0); + KeybdInput(VK_RETURN,KEYEVENTF_KEYUP); + KeybdInput(VK_RETURN,0); + KeybdInput(VK_RETURN,KEYEVENTF_KEYUP); + SendInput(Length(KeyInputs), KeyInputs[0], SizeOf(KeyInputs[0]));SetLength(KeyInputs,0); // affiche la fenetre d'interface + Sleep(300); + + // descendre le curseur n fois pour sélectionner le serveur + for i:=1 to ServeurInterfaceCDM-1 do + begin + KeybdInput(VK_DOWN, 0); + KeybdInput(VK_DOWN, KEYEVENTF_KEYUP); + end; + // 2x TAB pour pointer sur OK + KeybdInput(VK_TAB, 0);KeybdInput(VK_TAB, KEYEVENTF_KEYUP); + KeybdInput(VK_TAB, 0);KeybdInput(VK_TAB, KEYEVENTF_KEYUP); + KeybdInput(VK_SPACE, 0);KeybdInput(VK_SPACE, KEYEVENTF_KEYUP); + SendInput(Length(KeyInputs), KeyInputs[0], SizeOf(KeyInputs[0]));SetLength(KeyInputs,0); + Sleep(200); + + // Interface + if (ServeurInterfaceCDM=1) or (ServeurInterfaceCDM=7) then + begin + for i:=1 to ServeurRetroCDM-1 do + begin + KeybdInput(VK_DOWN,0);KeybdInput(VK_DOWN,KEYEVENTF_KEYUP); + SendInput(Length(KeyInputs),KeyInputs[0],SizeOf(KeyInputs[0]));SetLength(KeyInputs,0); + end; + // 2x TAB pour pointer sur OK + KeybdInput(VK_TAB,0);KeybdInput(VK_TAB, KEYEVENTF_KEYUP); + KeybdInput(VK_TAB,0);KeybdInput(VK_TAB, KEYEVENTF_KEYUP); + KeybdInput(VK_SPACE,0);KeybdInput(VK_SPACE, KEYEVENTF_KEYUP); // valide la fenetre d'interface + SendInput(Length(KeyInputs), KeyInputs[0], SizeOf(KeyInputs[0]));SetLength(KeyInputs,0); + + Sleep(200); + KeybdInput(VK_RETURN,0);KeybdInput(VK_RETURN, KEYEVENTF_KEYUP); // valide la fenetre finale + SendInput(Length(KeyInputs), KeyInputs[0], SizeOf(KeyInputs[0]));SetLength(KeyInputs,0); + end; + end; + end; + Lance_CDM:=true; +end; + + +procedure TFormPrinc.FormCreate(Sender: TObject); +var + i,j : integer; + s,s2,Url,LocalFile : string; + trouve,AvecMaj : Boolean; + V_utile : real; + CibleHandle : Thandle; +begin + //AvecMaj:=false; + TraceSign:=True; + PremierFD:=false; + // services commIP CDM + Srvc_Aig:=true; + Srvc_Det:=true; + Srvc_Act:=true; + Srvc_PosTrain:=false; + Srvc_sig:=false; + + AF:='Client TCP-IP CDM Rail ou USB - système LENZ - Version '+Version; + Caption:=AF; + Application.onHint:=doHint; + + // version d'OS pour info + if IsWow64Process then s:='OS 64 Bits' else s:='OS 32 Bits'; + s:=DateToStr(date)+' '+TimeToStr(Time)+' '+s; + Affiche(s,clLime); + LabelEtat.Caption:='Initialisations en cours'; + + //Menu_interface(devalide); + + // créée la fenetre debug + FormDebug:=TFormDebug.Create(Self); + FormDebug.Caption:=AF+' debug'; + N_Trains:=0; + NivDebug:=0; + TempoAct:=0; + DebugOuv:=True; + + AvecInit:=true; //&&&& + Diffusion:=AvecInit; + + Application.processMessages; + // créée la fenetre vérification de version + FormVersion:=TformVersion.Create(Self); + + ferme:=false; + CDM_connecte:=false; + pasreponse:=0; + Nbre_recu_cdm:=0; + AffMem:=true; + N_routes:=0; + N_trains:=0; + Application.HintHidePause:=30000; + + // Train[1].index:=0; + + // lecture fichiers de configuration client_GL.cfg et config.cfg + lit_config; + Application.processMessages; + + // lancer CDM rail et le connecte si on le demande + if LanceCDM then Lance_CDM; + ButtonAffTCO.visible:=AvecTCO; + Loco.Visible:=not(Diffusion); + + // tenter la liaison vers CDM rail + if not(CDM_connecte) then connecte_CDM; + + // si CDM n'est pas connecté, on ouvre la liaison vers la centrale + if not(CDM_connecte) then + begin + Affiche('CDM absent - Ouverture liaison vers centrale Lenz',clYellow); + // ouverture par USB + Affiche('demande connexion à la centrale Lenz par USB',clyellow); + connecte_USB; + if not(portCommOuvert) then + begin + // sinon ouvrir socket vers la centrale + // Initialisation de la comm socket LENZ + if AdresseIP<>'0' then + begin + Affiche('demande connexion à la centrale Lenz par Ethernet',clyellow); + ClientSocketLenz.port:=port; + ClientSocketLenz.Address:=AdresseIP; + ClientSocketLenz.Open; + end + end; + end; + + if portCommOuvert or parsocket then + With Formprinc do + begin + ButtonEcrCV.Enabled:=true; + LireunfichierdeCV1.enabled:=true; + ButtonLitCV.Enabled:=true; + end + else + With Formprinc do + begin + ButtonEcrCV.Enabled:=false; + ButtonLitCV.Enabled:=false; + LireunfichierdeCV1.enabled:=false; + end ; + + // Initialisation des images des signaux + NbreImagePLigne:=Formprinc.ScrollBox1.Width div (largImg+5); + + if not(diffusion) then LireunfichierdeCV1.enabled:=true; + + // ajoute une image dynamiquement + for i:=1 to NbreFeux do + begin + cree_image(i); // et initialisation tableaux signaux + end; + Tempo_init:=10; // démarre les initialisation des signaux et des aiguillages dans 1 s + + // initialisation de la chronologie des évènements détecteurs + for i:=0 to Max_Event_det_tick do + begin + event_det_tick[i].aiguillage:=-1; + //for j:=1 to 1100 do + //event_det_tick[i].detecteur[j]:=-1; // initialiser les détecteurs à -1 + event_det_tick[i].detecteur:=-1; + event_det_tick[i].etat:=-1; + event_det_tick[i].aiguillage:=-1; + event_det_tick[i].actionneur:=-1; + event_det_tick[i].traite:=false ; // non traité + end; + + I_Simule:=0; + tick:=0; + + N_Event_tick:=0 ; // dernier index + NombreImages:=0; + + // TCO + if avectco then + begin + //créée la fenêtre TCO non modale + FormTCO:=TformTCO.Create(nil); + FormTCO.show; + end; + + //essai &&&&&&&&&& + Affiche('Fin des initialisations',clyellow); + LabelEtat.Caption:=' '; + Affiche_memoire; + //--------------------------------- + { + aiguillage[20].position:=const_droit; + aiguillage[21].position:=const_droit; + + + NivDebug:=3; + FormDebug.show; + //i:=Detecteur_suivant_El(591,1,602,1); + //i:=Detecteur_suivant_El(597,1,601,1); + // posent pb: + // i:=Detecteur_suivant_El(598,1,599,1); + i:=Detecteur_suivant_El(520,1,20,2); + // AfficheDebug(IntToSTR(i),clyellow); + } + +end; + + +// évènement réception d'une trame sur le port COM USB (centrale Lenz) +procedure TFormPrinc.MSCommUSBLenzComm(Sender: TObject); +var i : integer; +begin + if MSCommUSBLenz.commEvent=comEvReceive then + begin + tablo:=MSCommUSBLenz.Input; + for i:=0 to length(tablo)-1 do + begin + chaine_recue:=chaine_recue+char(tablo[i]); + end; + if trace then Affiche('Tick='+IntToSTR(tick)+'/Rec '+chaine_Hex(chaine_recue),Clwhite); + if terminal then Affiche(chaine_recue,clLime); + interprete_reponse(chaine_recue); + chaine_recue:=''; + end; +end; + +procedure TFormPrinc.FormClose(Sender: TObject; var Action: TCloseAction); +begin + Ferme:=true; + if portCommOuvert then begin portCommOuvert:=false;MSCommUSBLenz.Portopen:=false; end; + portCommOuvert:=false; + ClientSocketCDM.close; + ClientSocketLenz.close; + if TCO_modifie then + if MessageDlg('Le TCO a été modifié. Voulez vous le sauvegarder ?',mtConfirmation,[mbYes,mbNo],0)=mrYes then + sauve_fichier_tco; +end; + + +procedure init_aiguillages; +var i,pos : integer; + s : string; +begin + Affiche('Positionnement aiguillages',cyan); + for i:=1 to maxaiguillage do + begin + if aiguillage[i].modele<>0 then // si l'aiguillage existe + begin + pos:=aiguillage[i].position; + s:='Init aiguillage '+intToSTR(i)+'='+intToSTR(pos); + if pos=1 then s:=s+' (dévié)' else s:=s+' (droit)'; + Affiche(s,cyan); + pilote_acc(i,pos,aig); + application.processMessages; + end; + end; + with formprinc do + begin + //Menu_interface(valide); + end; + +end; + +// timer à 100 ms +procedure TFormPrinc.Timer1Timer(Sender: TObject); +var index,aspect,i,a,x,y,x0,y0,Bimage,adresse,TailleX,TailleY,orientation : integer; + imageFeu : Timage; + frx,fry : real; + s : string; +begin + inc(tick); + if Tempo_init>0 then dec(Tempo_init); + if (Tempo_init=1) and AvecInit then + begin + if not(ConfigNulle) then Affiche('Positionnement des feux',clYellow); + if not(ferme) and not(ConfigNulle) then envoi_signauxCplx; // initialisation des feux + if not(ConfigNulle) and not(ferme) and (AvecInitAiguillages=1) then + begin + Affiche('Positionnement des aiguillages',clYellow); + init_aiguillages; // initialisation des aiguillages + end; + if (AvecInitAiguillages=0) and not(ferme) and (parSocket or portCommOuvert) then + begin + demande_etat_acc; // demande l'état des accessoires (position des aiguillages) + end; + LabelEtat.Caption:=' '; + Menu_interface(valide); + end; + + if temps>0 then dec(temps); + + // gestion du clignotant des feux de la page principale + if tempsCli>0 then dec(tempsCli); + if tempsCli=0 then + begin + tempsCli:=5; + clignotant:=not(clignotant); // inversion du clignotant + //tester chaque feu pour voir s'il y a un code de clignotement + for i:=1 to NbreFeux do + begin + adresse:=feux[i].adresse; + a:=EtatsignalCplx[adresse]; // a = état binaire du feu + 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 + begin + //Affiche(IntToSTR(adresse),clOrange); + Dessine_feu_mx(Feux[i].Img.Canvas,0,0,1,1,adresse,1); + end; + end; + + // feux du TCO + if avecTCO then + begin + // parcourir les feux du TCO + for y:=1 to NbreCellY do + for x:=1 to NbreCellX do + begin + PcanvasTCO.pen.mode:=pmCOpy; + BImage:=TCO[x,y].bImage; + if Bimage=30 then + begin + adresse:=TCO[x,y].adresse; + a:=EtatsignalCplx[adresse]; // a = état binaire du feu + 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 + begin + aspect:=TCO[x,y].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; + else ImageFeu:=Formprinc.Image3feux; + end; + + TailleY:=ImageFeu.picture.BitMap.Height; // taille du feu d'origine (verticale) + TailleX:=ImageFeu.picture.BitMap.Width; + Orientation:=TCO[x,y].FeuOriente; + // réduction variable en fonction de la taille des cellules + calcul_reduction(frx,fry,round(TailleX*LargeurCell/ZoomMax),round(tailleY*HauteurCell/ZoomMax),TailleX,TailleY); + Dessine_feu_mx(PCanvasTCO,tco[x,y].x,tco[x,y].y,frx,fry,adresse,orientation); + end; + end; + end; + end; + + // fenêtre de pilotage manuel du feu + if AdrPilote<>0 then + begin + a:=EtatsignalCplx[0]; + 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_pilote; // dessiner le feu en fonction du bit "clignotant" + end; + end; + + if (not(Maj_feux_cours) and (Tempo_chgt_feux=1)) then Maj_feux(); // mise à jour des feux sur chgt aiguillage + + if (not(Maj_feux_cours) and (Tempo_chgt_feux>0)) then dec(Tempo_chgt_feux); + + // tempo retombée actionneur + if TempoAct<>0 then + begin + dec(tempoAct); + if tempoAct=0 then + begin + A:=Tablo_actionneur[RangActCours].actionneur; + s:=Tablo_actionneur[RangActCours].train; + Affiche('Actionneur '+intToSTR(a)+' F'+IntToSTR(Tablo_actionneur[RangActCours].fonction)+':0',clyellow); + envoie_fonction_CDM(Tablo_actionneur[RangActCours].fonction,0,s); + end; + end; + + //simulation + if (index_simule<>0) then + begin + if not(MsgSim) then + begin + Affiche('Simulation en cours ',Cyan);MsgSim:=true; + N_Event_tick:=0; + N_event_det:=0; + N_trains:=0; + for i:=1 to Max_Trains do Event_det_Train[i].NbEl:=0; + i_simule:=0; + FormDebug.MemoEvtDet.Clear; + FormDebug.Richedit.Clear; + // AffTickSimu:=true; + end; + while tick=Tablo_simule[i_simule+1].tick do + //while i_simule0 then + begin + s:='Simulation '+intToSTR(I_simule)+' Tick='+IntToSTR(tick)+' det='+intToSTR(Tablo_simule[i_simule].detecteur)+'='+IntToSTR(Tablo_simule[i_simule].etat); + Event_Detecteur(Tablo_simule[i_simule].detecteur, Tablo_simule[i_simule].etat=1); // créer évt détecteur + StaticText.caption:=s; + end; + + // evt aiguillage ? + if Tablo_simule[i_simule].aiguillage<>0 then + begin + s:='Simulation '+intToSTR(I_simule)+' Tick='+IntToSTR(tick)+' aig='+intToSTR(Tablo_simule[i_simule].aiguillage)+'='+IntToSTR(Tablo_simule[i_simule].etat); + Event_Aig(Tablo_simule[i_simule].Aiguillage,Tablo_simule[i_simule].etat,0); // créer évt aiguillage + StaticText.caption:=s; + end; + + end; + + if i_Simule>=Index_simule then + begin + Index_Simule:=0; // fin de simulation + I_Simule:=0; + MsgSim:=false; + Affiche('Fin de simulation',Cyan); + StaticText.caption:=''; + end; + end; +end; + +// bouton version centrale Lenz +procedure TFormPrinc.BoutVersionClick(Sender: TObject); +var s : string; +begin + s:=#$f0; + s:=checksum(s); + envoi(s); +end; + +// bouton de commande d'un accessoire +procedure TFormPrinc.ButtonCommandeClick(Sender: TObject); +var adr,valeur,erreur : integer; +begin + val(EditAdresse.text,adr,erreur); + if (erreur<>0) or (adr<1) or (adr>2048) then + begin + EditAdresse.text:='1'; + exit; + end; + + val(EditVal.Text,valeur,erreur); + if (erreur<>0) or (valeur<0) or (valeur>255) then + begin + EditVal.text:='1'; + exit; + end; + + pilote_acc(adr,valeur,aig); +end; + +procedure TFormPrinc.EditvalEnter(Sender: TObject); +begin + if (Editval.Text<>'1') and (Editval.Text<>'2') then editval.text:='1'; +end; + +// gestion de la couleur des textes de la list box +procedure TFormPrinc.ListBox1DrawItem(Control: TWinControl; Index: Integer; + Rect: TRect; State: TOwnerDrawState); +begin + //with control as Tlistbox do + with listbox1.Canvas do + begin + Font.color:=Tcolor(ListBox1.Items.Objects[index]); + TextOut(Rect.Left,Rect.Top+4,ListBox1.Items[index]); + end; +end; + +procedure TFormPrinc.BoutonRafClick(Sender: TObject); +begin + rafraichit; +end; + +// erreur sur socket +procedure TFormPrinc.ClientSocketLenzError(Sender: TObject; + Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; + var ErrorCode: Integer); +var s : string; +begin + s:='Erreur '+IntToSTR(ErrorCode)+' socket IP Lenz'; + case ErrorCode of + 10053 : s:=s+': Connexion avortée - Timeout'; + 10054 : s:=s+': Connexion avortée par tiers'; + 10060 : s:=s+': Timeout'; + 10061 : s:=s+': Connexion refusée'; + 10065 : s:=s+': Port non connecté'; + end; + affiche(s,clOrange); + if nivDebug=3 then afficheDebug(s,clOrange); + parSocket:=false; + ErrorCode:=0; +end; + + +procedure TFormPrinc.ClientSocketCDMError(Sender: TObject; + Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); + var s : string; +begin + s:='Erreur '+IntToSTR(ErrorCode)+' socket IP CDM Rail'; + case ErrorCode of + 10053 : s:=s+': Connexion avortée - Timeout'; + 10054 : s:=s+': Connexion avortée par tiers'; + 10060 : s:=s+': Timeout'; + 10061 : s:=s+': Connexion refusée'; + 10065 : s:=s+': Port non connecté'; + end; + affiche(s,ClOrange); + afficheDebug(s,ClOrange); + CDM_connecte:=false; + if (portCommOuvert=false) and (parsocket=false) then LabelTitre.caption:=titre; + caption:=AF; + ErrorCode:=0; +end; + +// lecture depuis socket +procedure TFormPrinc.ClientSocketLenzRead(Sender: TObject; + Socket: TCustomWinSocket); +var s : string; +begin + s:=ClientSocketLenz.Socket.ReceiveText; + if trace then affiche(chaine_hex(s),clWhite); + interprete_reponse(s); +end; + +procedure TFormPrinc.ButtonTestClick(Sender: TObject); +begin + demande_etat_acc; +end; + +// procédure Event appelée si on clique sur un checkbox des images des feux +procedure TFormprinc.proc_checkBoxFB(Sender : Tobject); +var Index,adr : integer; + coche : boolean; +begin + Maj_feux ; // évalue l'état des signaux +end; + + +procedure TFormPrinc.ButtonInfoClick(Sender: TObject); +begin + Affiche('Ce programme pilote des signaux complexes de façon autonome ou avec CDM rail ',ClYellow); + Affiche('En fonction des détecteurs mis à 1 ou 0 par des locomotives',ClYellow); + Affiche('en circulation sur le réseau',ClYellow); + Affiche('Il est nécessaire de renseigner le fichier config.cfg',ClOrange); + Affiche('En vert : Trames envoyées à l''interface',ClWhite); + Affiche('En blanc : Trames reçues de l''interface',ClWhite); + Affiche('En violet : Trames brutes reçues de l''interface',ClWhite); + Affiche('En rouge : erreurs et défauts',ClWhite); + Affiche('En orange : pilotage des signaux / erreurs mineures',ClWhite); + Affiche('En bleu : pilotage des aiguillages',ClWhite); + Affiche('En jaune : rétrosignalisation reçue depuis l''interface',ClWhite); +end; + +procedure TFormPrinc.MenuConnecterUSBClick(Sender: TObject); +begin + Hors_tension2:=false; + connecte_USB; +end; + +procedure deconnecte_usb; +begin + if portCommOuvert then + begin + portCommOuvert:=false; + Formprinc.MSCommUSBLenz.Portopen:=false; + Affiche('Port USB déconnecté',clyellow); + end; + + portCommOuvert:=false; + with formprinc do + begin + ClientSocketLenz.close; + MenuConnecterUSB.enabled:=true; + DeConnecterUSB.enabled:=false; + ConnecterCDMRail.enabled:=true; + DeConnecterCDMRail.enabled:=false; + end; +end; + +procedure TFormPrinc.DeconnecterUSBClick(Sender: TObject); +begin + deconnecte_usb; +end; + +procedure TFormPrinc.MenuConnecterEthernetClick(Sender: TObject); +begin +if AdresseIP<>'0' then + begin + ClientSocketLenz.port:=port; + ClientSocketLenz.Address:=AdresseIP; + ClientSocketLenz.Open; + Hors_tension2:=false; + end; +end; + +procedure TFormPrinc.MenuDeconnecterEthernetClick(Sender: TObject); +begin + ClientSocketLenz.Close; +end; + +function cde_cdm(s : string) : string; +var i : integer; +begin + i:=length(s)-1; + cde_cdm:='0'+IntToSTR(i)+s; +end; + +procedure TFormPrinc.locoClick(Sender: TObject); +begin + // vitesse et direction 18 pas + vitesse_loco(3,20,true); +end; + +procedure TFormPrinc.AffEtatDetecteurs(Sender: TObject); +var j,adr,NBranche : integer; + s : string; +begin + for j:=1 to NDetecteurs do + begin + s:='Dét '+intToSTR(Adresse_detecteur[j])+'='; + if Detecteur[adresse_detecteur[j]] then s:=s+'1' else s:=s+'0'; + //s:=s+' Mem='; + //if Mem[adresse_detecteur[j]] then s:=s+'1' else s:=s+'0'; + Affiche(s,clYellow); + end; +end; + +procedure TFormPrinc.Etatdesaiguillages1Click(Sender: TObject); +var i,j,model,objet : integer; + s : string; +begin + for i:=1 to MaxAcc do + begin + model:=aiguillage[i].modele ; + if model<>0 then + begin + s:='Aiguillage '+IntToSTR(i)+' : '+intToSTR(aiguillage[i].position); + if aiguillage[i].position=const_devie then s:=s+' (dévié)' ; + if aiguillage[i].position=const_droit then s:=s+' (droit)'; + if aiguillage[i].position=9 then s:=s+' inconnue'; + + objet:=aiguillage[i].objet; + if objet<>0 then s:=s+' objet='+intToSTR(objet); + if model=4 then // aig triple + begin + j:=aiguillage[i].AdrTriple; + s:=s+' Aig '+IntToSTR(j)+': '+intToSTR(aiguillage[j].position); + if aiguillage[j].position=1 then s:=s+' (dévié)' else s:=s+' (droit)'; + end; + Affiche(s,clWhite); + end; + end; +end; + +procedure TFormPrinc.Codificationdesaiguillages1Click(Sender: TObject); +var i : integer ; + s : string; +begin + Affiche('Codification interne des aiguillages',Cyan); + Affiche('D=position droite S=position déviée P=pointe Z=détecteur',Cyan); + for i:=1 to MaxAiguillage do + begin + s:=IntToSTR(i); + if aiguillage[i].modele<>0 then + begin + if aiguillage[i].modele=1 then s:=s+' Pointe='; + if aiguillage[i].modele=2 then + begin + s:=s+' TJD:'; + if aiguillage[i].inversionCDM=1 then s:=s+'(INV) '; + end; + if aiguillage[i].modele=3 then s:=s+' TJS:'; + if aiguillage[i].modele=4 then s:=s+' Triple: Pointe='; + + if (aiguillage[i].modele=1) or (aiguillage[i].modele=4) then s:=s+IntToSTR(aiguillage[i].APointe)+aiguillage[i].APointeB; + s:=s+' Dévie='+IntToSTR(aiguillage[i].ADevie)+aiguillage[i].ADevieB+ + ' Droit='+IntToSTR(aiguillage[i].ADroit)+aiguillage[i].ADroitB; + if aiguillage[i].modele=2 then + begin + s:=s+' DestDroit='+intToSTR(aiguillage[i].Ddroit)+aiguillage[i].DdroitB; + s:=s+' DestDévié='+intToSTR(aiguillage[i].DDevie)+aiguillage[i].DdevieB; + end; + if aiguillage[i].modele=4 then s:=s+' Dévié2='+intToSTR(aiguillage[i].ADevie2)+aiguillage[i].ADevie2B; + if aiguillage[i].vitesse<>0 then s:=s+' Vitesse déviée='+intToSTR(aiguillage[i].vitesse); + if aiguillage[i].inversion<>0 then s:=s+' pilotage inversé'; + + Affiche(s,clYellow); + end; + end; + +end; + + +procedure TFormPrinc.ClientSocketLenzConnect(Sender: TObject;Socket: TCustomWinSocket); +begin + Affiche('Lenz connecté ',clYellow); + AfficheDebug('Lenz connecté ',clYellow); + parSocket:=True; + ButtonEcrCV.Enabled:=true; + ButtonLitCV.Enabled:=true; + LireunfichierdeCV1.enabled:=true; + LabelTitre.caption:=titre+' Interface connectée par Ethernet'; +end; + +procedure TFormPrinc.ClientSocketCDMConnect(Sender: TObject;Socket: TCustomWinSocket); +var s : string; +begin + s:='Socket CDM rail connecté'; + LabelTitre.caption:=titre+' '+s; + Affiche(s,clYellow); + AfficheDebug(s,clYellow); + SocketCDM_connecte:=True; + MenuConnecterUSB.enabled:=false; + DeConnecterUSB.enabled:=false; + ConnecterCDMRail.enabled:=false; + DeConnecterCDMRail.enabled:=true; +end; + +procedure Interprete_trameCDM(recuCDM : string); +var i,objet,posST,posAC,posDT,posSG,posXY,k,l,erreur, adr,adr2,etat,etataig, + vitesse,etatAig2,name,prv : integer ; + x,y,x2,y2 : longint ; + s,ss,train : string; + traite,sort : boolean; +begin + //recuCDM:='S-E-08-0530-CMDTRN-SPDXY|063|07|NAME=BB16024;AD=3;SPEED=120;X=10521;Y=2867;X2=18915;Y2=3202;S-E-08-0531-CMDGEN-_STOP|000|'; + + AckCDM:=recuCDM<>''; + if pos('ACK',recuCDM)=0 then + begin + if pos('ERR=200',recuCDM)<>0 then Affiche('Erreur CDM : réseau non chargé',clred); + end; + k:=0; + repeat + // Affiche('K='+intToSTR(k)+' longueur='+intToSTR(length(recuCDM)),clyellow); + // évènement aiguillage. Le champ AD2 n'est pas forcément présent + posST:=pos('CMDACC-ST_TO',recuCDM); + if posST<>0 then + begin + //Affiche(recuCDM,cllime); + objet:=0; + i:=posEx('OBJ=',recuCDM,posST);ss:=copy(recuCDM,i+4,10); + if i<>0 then val(ss,objet,erreur) else Affiche('Erreur pas d''objet ',clred); + + i:=posEx('AD=',recuCDM,posST);ss:=copy(recuCDM,i+3,10); //Affiche('j='+IntToSTR(j)+' i='+intToSTR(i),clred); + if i0 then begin Delete(recuCDM,posST,i+5-posST) ;end else + begin + s:='Erreur 95 posST='+IntToSTR(posST)+' i='+intToSTR(i); + Affiche(s,clred); + Nbre_recu_cdm:=0; + Affiche(recuCDM,clred); + exit; + end; + val(ss,etat,erreur); + //Affiche('Aiguillage CDM '+intToSTR(adr)+'='+IntToStr(etat)+' objet='+intToSTR(objet),clLime); + // conversion en position : + // CDM: 0=droit 1=droite 3=gauche + // logiciel : 1=dévié 2=droit + + // aiguillage normal + if aiguillage[adr].modele=1 then + begin + //Affiche('Normal',clyellow); + if etat=0 then etatAig:=2 else etatAig:=1; + Event_Aig(adr,etatAig,objet); + end; + // TJD TJS + if (aiguillage[adr].modele=2) or (aiguillage[adr].modele=3) then + begin + //Affiche('TJD/S',clyellow); + //adr2:=aiguillage[adr].Apointe; // 2eme adresse de la TJD + case etat of + 1 : begin etatAig:=1;EtatAig2:=2;end; + 4 : begin etatAig:=1;EtatAig2:=1;end; + 5 : begin etatAig:=2;EtatAig2:=1;end; + 0 : begin etatAig:=2;EtatAig2:=2;end; + end; + if (aiguillage[adr].inversionCDM=1) or (aiguillage[adr2].inversionCDM=1) then + begin + //Affiche('inverse',clyellow); + prv:=adr; + adr:=adr2; + adr2:=prv; + end; + Event_Aig(adr,etatAig,objet); + Event_Aig(adr2,etatAig2,objet); + end; + if aiguillage[adr].modele=4 then // aiguillage triple + begin + //Affiche('Triple',clyellow); + // état de l'aiguillage 1 + if (etat=0) or (etat=2) then etatAig:=2; + if etat=3 then etatAig:=1; + // état de l'aiguillage 2 + adr2:=aiguillage[adr].AdrTriple; + if (etat=0) or (etat=3) then etatAig2:=2; + if etat=2 then etatAig2:=1; + Event_Aig(adr,etatAig,objet); + Event_Aig(adr2,etatAig2,objet); + end; + + Tempo_chgt_feux:=10; // demander la mise à jour des feux + + //Affiche(recuCDM,CLOrange); + //if length(recuCDM)>80 then Affiche(copy(recuCDM,80,length(recuCDM)-80),clOrange); + end; + + // évènement détecteur + posDT:=pos('CMDACC-ST_DT',recuCDM); + if posDT<>0 then + begin + i:=posEx('AD=',recuCDM,posDT);ss:=copy(recuCDM,i+3,10); + val(ss,adr,erreur); + i:=posEx('STATE=',recuCDM,posDT);ss:=copy(recuCDM,i+6,10); + Delete(recuCDM,posDT,i+5-posDT); + val(ss,etat,erreur); + Event_detecteur(Adr,etat=1); + //Affiche(IntToSTR(adr)+' '+IntToSTR(etat),clyellow); + if AfficheDet then Affiche('Rétro Détecteur '+intToSTR(adr)+'='+IntToStr(etat),clYellow); + end ; + + // évènement signal - non stocké ni interprété + posSG:=pos('CMDACC-ST_SG',recuCDM); + if posSG<>0 then + begin + i:=posEx('AD=',recuCDM,posDT);ss:=copy(recuCDM,i+3,10); + val(ss,adr,erreur); + i:=posEx('STATE=',recuCDM,posSG);ss:=copy(recuCDM,i+6,10); + Delete(recuCDM,posSG,i+5-posSG); + val(ss,etat,erreur); + //Affiche('SignalCDM '+intToSTR(adr)+'='+IntToStr(etat),clYellow); + end ; + + // évènement actionneur + // attention un actionneur qui repasse à 0 ne contient pas de nom de train + //S-E-03-0157-CMDACC-ST_AC|049|05|NAME=0;OBJ=7101;AD=815;TRAIN=CC406526;STATE=1; + posAC:=pos('CMDACC-ST_AC',recuCDM); + if posAC<>0 then + begin + i:=posEx('AD=',recuCDM,posAC);ss:=copy(recuCDM,i+3,10); + val(ss,adr,erreur); + i:=posEx('NAME=',recuCDM,posAC);ss:=copy(recuCDM,i+5,10); + val(ss,name,erreur); + i:=posEx('TRAIN=',recuCDM,posAC);l:=PosEx(';',recuCDM,i); + train:=copy(recuCDM,i+6,l-i-6); + i:=posEx('STATE=',recuCDM,posAC);ss:=copy(recuCDM,i+6,10); + val(ss,etat,erreur); + Delete(recuCDM,posAC,i-posAC); + i:=pos(';',recuCDM); + if i<>0 then Delete(recuCDM,1,i); + if AfficheDet then + Affiche('Actionneur AD='+intToSTR(adr)+' Nom='+intToSTR(name)+' Train='+train+' Etat='+IntToSTR(etat),clyellow); + Event_act(adr,etat,train); // déclenche évent actionneur + end; + + // évènement position des trains - non stocké ni interprété + posXY:=pos('CMDTRN-SPDXY',recuCDM); + if posXY<>0 then + begin + i:=posEx('AD=',recuCDM,posXY);l:=posEx(';',recuCDM,i); + ss:=copy(recuCDM,i+3,10); + val(ss,adr,erreur); + //Affiche('AD='+IntToSTR(adr),clyellow); + Delete(recuCDM,i,l-i+1); + + i:=posEx('NAME=',recuCDM,posXY);l:=posEx(';',recuCDM,i); + train:=copy(recuCDM,i+5,l-i-5); + //Affiche('Train='+train,clyellow); + Delete(recuCDM,i,l-i+1); + + i:=posEx('SPEED=',recuCDM,posXY);l:=posEx(';',recuCDM,i); + ss:=copy(recuCDM,i+6,10); + val(ss,vitesse,erreur); + //Affiche('Vitesse='+intToSTR(vitesse),clyellow); + Delete(recuCDM,i,l-i+1); + + i:=posEx('X=',recuCDM,posXY);l:=posEx(';',recuCDM,i); + ss:=copy(recuCDM,i+2,10); + val(ss,x,erreur); + //Affiche('X='+IntTostr(x),clyellow); + Delete(recuCDM,i,l-i+1); + + i:=posEx('Y=',recuCDM,posXY);l:=posEx(';',recuCDM,i); + ss:=copy(recuCDM,i+2,10); + val(ss,y,erreur); + //Affiche('Y='+IntTostr(y),clyellow);; + Delete(recuCDM,i,l-i+1); + + i:=posEx('X2=',recuCDM,posXY);l:=posEx(';',recuCDM,i); + ss:=copy(recuCDM,i+3,10); + val(ss,x2,erreur); + //Affiche('X2='+IntTostr(x2),clyellow); + Delete(recuCDM,i,l-i+1); + + i:=posEx('Y2=',recuCDM,posXY);l:=posEx(';',recuCDM,i); + ss:=copy(recuCDM,i+3,10); + val(ss,y2,erreur); + //Affiche('Y2='+IntTostr(y2),clyellow); + Delete(recuCDM,i,l-i+1); + + Delete(recuCDM,posXY,12); + end; + + inc(k); + sort:=(k>200) or (posST=0) and (posDT=0) and (posAC=0) and (posSG=0); + until (sort); + + //Affiche('Ligne traitée'+recuCDM,clLime); + if k>=200 then begin Affiche('Erreur 90 : Longrestante='+IntToSTR(length(recuCDM)),clred); Affiche(recuCDM,clred); end; + Nbre_recu_cdm:=0; +end; + +// réception d'un message de CDM rail +procedure TFormPrinc.ClientSocketCDMRead(Sender: TObject;Socket: TCustomWinSocket); + var i,j,k,l,erreur, adr,adr2,etat,etataig,etatAig2,name : integer ; + s,ss,train : string; + traite,sort : boolean; +begin + inc(Nbre_recu_cdm); + recuCDM:=ClientSocketCDM.Socket.ReceiveText; + if trace then begin Affiche('recu de CDM:',clWhite);Affiche(recuCDM,clWhite);end; + Interprete_trameCDM(recuCDM); +end; + + +procedure TFormPrinc.ConnecterCDMrailClick(Sender: TObject); +begin + connecte_CDM; +end; + +procedure TFormPrinc.DeconnecterCDMRailClick(Sender: TObject); +begin + deconnecte_CDM; +end; + +procedure TFormPrinc.ClientSocketCDMDisconnect(Sender: TObject; Socket: TCustomWinSocket); +begin + LabelTitre.caption:=Titre; + Affiche('CDM rail déconnecté',Cyan); + AfficheDebug('CDM rail déconnecté',Cyan); + caption:=AF; + CDM_connecte:=False; + SocketCDM_connecte:=false; + MenuConnecterUSB.enabled:=true; + DeConnecterUSB.enabled:=true; + ConnecterCDMRail.enabled:=true; +end; + + +procedure TFormPrinc.Codificationdesfeux1Click(Sender: TObject); +var i,j,k,l,CondCarre,NfeuxDir,adresse : integer; + s,s2 : string; +begin + Affiche('Codification interne des feux',Cyan); + + for i:=1 to NbreFeux do + begin + // feu de signalisation + s:=IntToSTR(i)+' Adr='+IntToSTR(feux[i].Adresse); + s:=s+' décodeur='+IntToStr(feux[i].decodeur); + + if feux[i].aspect<10 then + begin + s:=s+' SIG Nbre de feux='+IntToSTR(feux[i].aspect)+' '; + s:=s+' El_Suivant1='+IntToSTR(feux[i].Adr_el_suiv1)+' Type suivant1='+intToSTR(feux[i].Btype_suiv1); + case feux[i].Btype_suiv1 of + 1 : s:=s+' (détecteur)'; + 2 : s:=s+' (aiguillage ou TJD-S)'; + 4 : s:=s+' (aiguillage triple)'; + 5 : s:=s+' (aiguillage bis)'; + end; + if feux[i].decodeur=6 then + s:=s+' Cible unisemaf='+intToSTR(feux[i].Unisemaf); + + // conditions sur carré + CondCarre:=Length(feux[i].condcarre[1]); + l:=1; + s2:=''; + while condCarre<>0 do + begin + if condcarre<>0 then dec(condcarre); + for k:=1 to condCarre do + begin + s2:=s2+'A'+IntToSTR(feux[i].condcarre[l][k].Adresse)+feux[i].condcarre[l][k].PosAig+' '; + end; + s2:=s2+'/'; + inc(l); + CondCarre:=Length(feux[i].condcarre[l]); + end; + + end + else + // feu directionnel + begin + s:=s+' DIR Nbre de feux='+IntToSTR(feux[i].aspect-10)+' '; + NfeuxDir:=feux[i].aspect-10; + for j:=1 to NfeuxDir+1 do + begin + s:=s+'('; + for k:=1 to Length(feux[i].AigDirection[j])-1 do + begin + s:=s+IntToSTR(feux[i].AigDirection[j][k].adresse) + feux[i].AigDirection[j][k].posaig+' '; + end; + s:=s+')'; + end; + end; + Affiche(s,clYellow); + if s2<>'' then Affiche('Conditions de carré : '+s2,clYellow); + end; +end; + + +procedure TFormPrinc.ClientSocketLenzDisconnect(Sender: TObject; + Socket: TCustomWinSocket); +begin + parSocket:=False; +end; + + +procedure TFormPrinc.FichierSimuClick(Sender: TObject); +begin + FormSimulation.showModal; +end; + +procedure TFormPrinc.ButtonEcrCVClick(Sender: TObject); +var adr,valeur,erreur : integer; + s : string; +begin + // doc XpressNet page 55 + val(EditAdresse.text,adr,erreur); + if (erreur<>0) or (Adr>255) or (Adr<0) then + begin + EditAdresse.Text:='1'; + exit; + end; + + val(EditVal.Text,valeur,erreur); + if (erreur<>0) or (valeur<0) or (valeur>255) then + begin + EditAdresse.text:='1'; + exit; + end; + + //s:=#$ff+#$fe+#$23+#$1e+Char(adr)+Char(valeur); //CV de 512 à 767 V3.4 + //s:=#$ff+#$fe+#$23+#$1d+Char(adr)+Char(valeur); //CV de 256 à 511 V3.4 + s:=#$23+#$16+Char(adr)+Char(valeur); //CV de 1 à 256 + + s:=checksum(s); + envoi(s); // envoi de la trame et attente Ack + // la centrale passe en mode service (p23) + Affiche('CV'+intToSTR(Adr)+'='+intToSTR(valeur),clyellow); + +end; + +procedure TFormPrinc.ButtonRepriseClick(Sender: TObject); +var s : string; +begin + s:=#$21+#$81; + s:=checksum(s); + envoi(s); // envoi de la trame et attente Ack + +end; + +// lit un fichier de CV vers un accessoire +procedure Lire_fichier_CV; +var s: string; + fte : textfile; + cv,valeur,erreur : integer; +begin + s:=GetCurrentDir; + //s:='C:\Program Files (x86)\Borland\Delphi7\Projects\Signaux_complexes_GL'; + with FormPrinc do + begin + OpenDialog.InitialDir:=s; + OpenDialog.DefaultExt:='txt'; + OpenDialog.Filter:='Fichiers texte (*.txt)|*.txt|Tous fichiers (*.*)|*.*'; + if openDialog.Execute then + begin + s:=openDialog.FileName; + assignFile(fte,s); + reset(fte); + while not(eof(fte)) do + begin + readln(fte,s); + val(s,cv,erreur); + + if (cv<>0) then + begin + delete(s,1,erreur); + val(s,valeur,erreur); + Affiche('CV='+intToSTR(cv)+' Valeur='+IntToSTR(valeur),clLime); + if cv>255 then Affiche('Erreur CV '+IntToSTR(cv)+'>255',clred); + if valeur>255 then Affiche('Erreur valeur '+IntToSTR(valeur)+'>255',clred); + + if (cv<=255) and (valeur<=255) then + begin + s:=#$23+#$16+Char(cv)+Char(valeur); //CV de 1 à 256 + s:=checksum(s); + envoi(s); // envoi de la trame et attente Ack, la premiere trame fait passer la centrale en mode programmation (service) + tempo(5); + end; + end; + + end; + closeFile(fte); + end; + end; +end; + + +procedure TFormPrinc.LireunfichierdeCV1Click(Sender: TObject); +begin + Lire_fichier_CV; +end; + +procedure TFormPrinc.ButtonLitCVClick(Sender: TObject); +var s,sa: string; + fte : textfile; + i,cv,valeur,erreur : integer; +begin + s:=GetCurrentDir; + //s:='C:\Program Files (x86)\Borland\Delphi7\Projects\Signaux_complexes_GL'; + N_Cv:=0; // nombre de CV recus à 0 + sa:=''; + Affiche('Lecture CV',clyellow); + + val(EditAdresse.Text,cv,erreur); + if (erreur<>0) or (cv>255) or (cv<0) then + begin + EditAdresse.Text:='1'; + exit; + end; + //trace:=true; + + + s:=#$22+#$15+Char(cv); //CV de 1 à 256 (V3.0) + //s:=#$22+#$18+Char(cv); //CV de 1 à 255 + 1024 (V3.6) + s:=checksum(s); + // envoi de la trame : fait passer la centrale en mode programmation (service) + envoi_ss_ack(s); + + // attendre la trame 01 04 05 (env 1s) + succes:=false;i:=0; + repeat + Application.processMessages; + Sleep(100); + inc(i); + until succes or (i>20); + + if succes then + begin + recu_cv:=false; + //Affiche('reçu trame succes',clyellow); + s:=#$21+#$10; // demande d'envoi du résultat du mode service + s:=checksum(s); + //envoi(s); + envoi_ss_ack(s); + Tempo(1); + // attente de la réponse de la centrale + i:=0; + repeat + Tempo(2); // attend 200 ms + inc(i); + until recu_cv or (i>4); + if (i>4) then + begin + Affiche('Erreur attente trop longue CV',clred); + exit; + end; + sa:=sa+'Cv'+IntToSTR(cv)+'='+IntToSTR(Tablo_cv[cv])+' '; + Affiche(sa,clyellow);sa:=''; + end + else + Affiche('Pas de réponse de l''interface après demande de passage en mode prog',clOrange); +end; + + +procedure TFormPrinc.Quitter1Click(Sender: TObject); +begin + close; +end; + +procedure TFormPrinc.ConfigClick(Sender: TObject); +begin + Tformconfig.create(nil); + formconfig.showmodal; + formconfig.close; +end; + + +procedure TFormPrinc.Codificationdesactionneurs1Click(Sender: TObject); +var i,adract,etatAct,fonction,v,acc,aO,aF,accessoire,sortie : integer; + s,s2 : string; +begin + if (maxTablo_act=0) and (NbrePN=0) then + begin + Affiche('Aucun actionneur déclaré',clYellow); + exit; + end; + + for i:=1 to maxTablo_act do + begin + s:=Tablo_actionneur[i].train; + etatAct:=Tablo_actionneur[i].etat ; + AdrAct:=Tablo_actionneur[i].actionneur; + s2:=Tablo_actionneur[i].train; + acc:=Tablo_actionneur[i].accessoire; + sortie:=Tablo_actionneur[i].sortie; + fonction:=Tablo_actionneur[i].fonction; + if (s2<>'') then + begin + if fonction<>0 then + s:='FonctionF Actionneur='+intToSTR(adrAct)+':'+intToSTR(etatAct)+' Train='+s2+' F'+IntToSTR(fonction)+ + ' Temporisation='+intToSTR(tablo_actionneur[i].Tempo); + if acc<>0 then + s:='Accessoire Actionneur='+intToSTR(adrAct)+':'+intToSTR(etatAct)+' Train='+s2+' A'+IntToSTR(acc)+ + ' sortie='+intToSTR(sortie); + Affiche(s,clYellow); + end; + end; + + // dans le tableau des PN + for i:=1 to NbrePN do + begin + s:='PN'+intToSTR(i)+' Adresse fermeture PN='+IntToSTR(Tablo_PN[i].AdresseFerme); + s:=s+' Adresse ouverture PN='+IntToSTR(Tablo_PN[i].AdresseOuvre); + Affiche(s,clyellow); + s:=' Commande fermeture='+intToSTR(Tablo_PN[i].commandeFerme); + s:=s+' Commande ouverture='+intToSTR(Tablo_PN[i].commandeOuvre); + s:=s+' Nbre de voies='+intToSTR(Tablo_PN[i].nbVoies); + Affiche(s,clyellow); + for v:=1 to Tablo_PN[i].nbvoies do + begin + s:=' Voie '+IntToSTR(v)+': Actionneur de fermeture='+intToSTR(Tablo_PN[i].voie[v].ActFerme); + s:=s+' Actionneur d''ouverture='+intToSTR(Tablo_PN[i].voie[v].ActOuvre); + Affiche(s,clyellow); + end; + end; +end; + +procedure TFormPrinc.ButtonArretSimuClick(Sender: TObject); +begin + Index_Simule:=0; // fin de simulation + I_Simule:=0; + MsgSim:=false; + Affiche('Fin de simulation',Cyan); +end; + +procedure TFormPrinc.OuvrirunfichiertramesCDM1Click(Sender: TObject); +var s : string; + fte : textFile; +begin + s:=GetCurrentDir; + s:='C:\Program Files (x86)\Borland\Delphi7\Projects\Signaux_complexes_GL'; + OpenDialog.InitialDir:=s; + OpenDialog.DefaultExt:='txt'; + OpenDialog.Filter:='Fichiers texte (*.txt)|*.txt|Tous fichiers (*.*)|*.*'; + if openDialog.Execute then + begin + s:=openDialog.FileName; + assignFile(fte,s); + reset(fte); + while not(eof(fte)) do + begin + readln(fte,s); + Affiche(s,clLime); + Interprete_trameCDM(s); + end; + closeFile(fte); + end; + +end; + +procedure TFormPrinc.ButtonAffTCOClick(Sender: TObject); +var hd : THandle; +begin + formTCO.windowState:=wsNormal; //Maximized; + formTCO.BringToFront; +end; + + +procedure TFormPrinc.ButtonLanceCDMClick(Sender: TObject); +begin + + // ButtonArretSimu.Setfocus; + Lance_CDM ; +// ButtonLanceCDM.unfocused; + +end; + +procedure TFormPrinc.Affichefentredebug1Click(Sender: TObject); +begin + formDebug.show; +end; + +begin + + + +end. diff --git a/UnitSimule.dcu b/UnitSimule.dcu index c02a334e597eb6de0240c48535a3320697ab5825..b1b277e38ed42f2675b9050f7086284f1ee12297 100644 GIT binary patch delta 20 bcmeCS?Y8B<&%nUnEyuucupw$AcY_=NK=1}A delta 20 bcmeCS?Y8B<&%nUnEyuv%8Ir$|yFm^BJqZPw diff --git a/UnitTCO.dcu b/UnitTCO.dcu index 4c5e4ef3ca87bcd6ce5af4c005a4e961a8b14ac2..24690439873a81d308ecf83552470b744b4970aa 100644 GIT binary patch delta 1302 zcmZ9~UrZE77y$77X7~2)kUw|Ao!s@VaCnCx2un2-tWe;*2Qb85D`|a@)PQMuz#z(l zEvV3v2Ki&?L`R6UwM2 z63TBC+>|@eh8<1mv46V-zn8v6zTqCg~#-MGP1i+6jRFT&mij~AZHr#}23DPj^h zu5v@FY)Qn@LpP3XearME$8qgKL92zzo!QfbYg#>cXIl|||GExOw7!cL0gqjA;Q2m5 zxAH)zMz7$yww>s2z#(~ye78;K0waDpc--$Vvx`b_w}$DazNk!G|E3%zOt)u{kIQSq)affp!aVC|fWI$;26iB*;+; zf>6flE(}8gBq`qxL(vX?dP7fEXW^o{`1}dvMT^(W9O8Vb0fvE0K7lohSh|_zGW?9< zj6)2O%svGdh$MOr?5Scq%UPsOhE3{HD|*;mDqUvyrE6-A_~#(jA_iFykVY6o(ofpf z$vL=0FSO39_vXw)35`C{_(j9Epe8Fd22_-_1;|FUG;2{k_>M-M2GO{s@rTB`M#3}o zK%qv3MzcoWGdKwb;#z_$lpmKMlXh5Mf^(G5mLbz2HpbJB&&_YvXkp~#cQQos+cFfJ zjlw+^nco~|yphI})D=kKdtXE3ZMs0mvdG6P;6h#Nq=&}lT;6A+g-}q+nEqE!eqW(& zlL@~{t6`9&uR=DzwLl;ht8nIY#c4juP76nh%#6_@i-wbNk9RQ^ic%SAnBT$ld$Sm2 z-dx7CQD3PmbK8*f~~gLk`)~k*a%&KX=~#^(KH#+C2k2(Gr5@Zb)m^R zVUdfDiXkUjWHS*7S!T8>>&m;J&4Pv{GvR`Z#z3%(__allV%UJ`I?o4Lc41EP|KM?3Q{7$I<*!l>gVVhBGd#q$~xsxXsRpSC2vvHzjQV>;?xB<$`c2i*1@J05li;B4a5TgS^_k^Fup zY&?e$8Z=WueGM4x{vb-G7oU(8R4YJW>M?TgOO-zv34+Ez$7ZY6Np0ya`|IZBq}MdV_}z}G01Ru)vQolVT(B87?c&V32EGEuG{ zr^`S5cZsRRV=!)93YYpYLNLvgKks`HxqjM*m8XtCummb%UEOdRYLty`Xp*U|JqgPi zzd9+qAQ{u21UIeu!>|l~#eE81*u^>`Fa+MIGcfG6JFtzO7JBOQP1uWz>0xf4)MP4G z;?oes;D~K}3uQ%hxE>d4izORAAenHTWRM&&PYTMQPI)l}ZP+PhnRtJV)`XwK4tjRH zWYX78LndT)qNku^9+2bO2~ z+(TJtp^gY-1U&1!*eh_2L&^Ue>M)HyyTKb@7Z?yYFK|QPPXYZMo~#lG3G@hjETG(h z_vp;(yD&lV<6Wqt&}_m-6tPXHvY~z}UEbF;AP`|_Y#L@jvE@x@EP@tNjE#Tv|My3OSAUDlS#{wa4+L)#SN4aTdIv?oZ<^f8yntjQfw51dc_1Gu3B=fd)RZLXh5hrC~xOUj?$GISQE9=*&dut4n%tzWUAg)ICiVXT^l^VQ diff --git a/UnitTCO.pas b/UnitTCO.pas index c5e7549..8631bee 100644 --- a/UnitTCO.pas +++ b/UnitTCO.pas @@ -552,7 +552,7 @@ begin Adr:=TCO[x,y].adresse; if Adr<>0 then begin - if detecteur[Adr] then + if detecteur[Adr].etat then begin Brush.Color:=clAllume; pen.color:=clAllume; @@ -1066,7 +1066,7 @@ begin Adr:=TCO[x,y].adresse; if Adr<>0 then begin - if detecteur[Adr] then + if detecteur[Adr].etat then begin Brush.Color:=clAllume; pen.color:=clAllume; @@ -1114,7 +1114,7 @@ begin Adr:=TCO[x,y].adresse; if Adr<>0 then begin - if detecteur[Adr] then + if detecteur[Adr].etat then begin Brush.Color:=clAllume; pen.color:=clAllume; @@ -1652,7 +1652,7 @@ begin Adr:=TCO[x,y].adresse; if Adr<>0 then begin - if detecteur[Adr] then + if detecteur[Adr].etat then begin Brush.Color:=clAllume; pen.color:=clAllume; @@ -4028,14 +4028,14 @@ end; procedure TFormTCO.Button1Click(Sender: TObject); begin - Detecteur[569]:=true; + Detecteur[569].etat:=true; Maj_tco(569); end; procedure TFormTCO.Button2Click(Sender: TObject); begin - Detecteur[569]:=false; + Detecteur[569].etat:=false; Maj_tco(569); end; diff --git a/page.txt b/page.txt index e2e639d..6803315 100644 --- a/page.txt +++ b/page.txt @@ -77,7 +77,7 @@ - + @@ -167,7 +167,7 @@
    -
    +
    @@ -176,11 +176,11 @@

    Messagepar gily » 20 Janvier 2020, 21:25

    -
    Bonjour

    attention ne gère plus les aiguillages BIS qui sont problématiques.
    attention nécessite de nommer les variables du fichier config-gl.cfg - voir le fichier
    attention changement de paramétrage des TJD

    Version 2.1 du 22/10/2020
    Vous trouverez ici la version graphique du programme signaux_complexes_GL, client de CDM rail mais qui fonctionne aussi de façon autonome si vous disposez d'une centrale LENZ ou compatible. Il permet également de piloter des fonctions F de locomotives et des passages à niveaux à plusieurs voies d'après des actionneurs. Il gère un TCO et peut lancer CDM rail automatiquement avec votre LAY et l'interface choisie. :mrgreen:

    Ce logiciel nécessite une installation : faire clic droit en sélectionnant "exécuter en tant qu'administrateur" sur installeur.exe.
    Vous pouvez voir les nouveautés de chaque version dans le fichier versions.txt.

    Pour une mise à jour n'oubliez pas de sauvegarder vos deux fichiers de config (.cfg) avant de copier la nouvelle version ; vous pouvez ne copier que le fichier signaux_complexes_GL.exe.

    Elle est téléchargeable depuis ce lien (droits en contrôle total)
    -
    signaux_complexes_V2.1.zip
    -
    (737.11 Kio) Téléchargé 11 fois
    +
    Bonjour

    attention ne gère plus les aiguillages BIS qui sont problématiques.
    attention nécessite de nommer les variables du fichier config-gl.cfg - voir le fichier
    attention changement de paramétrage des TJD

    Version 2.11 du 15/11/2020
    Vous trouverez ici la version graphique du programme signaux_complexes_GL, client de CDM rail mais qui fonctionne aussi de façon autonome si vous disposez d'une centrale LENZ ou compatible. Il permet également de piloter des fonctions F de locomotives et des passages à niveaux à plusieurs voies d'après des actionneurs. Il gère un TCO et peut lancer CDM rail automatiquement avec votre LAY et l'interface choisie. :mrgreen:

    Ce logiciel nécessite une installation : faire clic droit en sélectionnant "exécuter en tant qu'administrateur" sur installeur.exe.
    Vous pouvez voir les nouveautés de chaque version dans le fichier versions.txt.

    Pour une mise à jour n'oubliez pas de sauvegarder vos deux fichiers de config (.cfg) avant de copier la nouvelle version ; vous pouvez ne copier que le fichier signaux_complexes_GL.exe.

    Elle est téléchargeable depuis ce lien (droits en contrôle total)
    +
    signaux_complexes_V2.11.zip
    +
    (728.73 Kio) Jamais téléchargé
    -


    Notice: (cliquer dessus lance le téléchargement automatiquement)
    https://github.com/f1iwq2/Signaux_complexes_GL/raw/master/Notice%20d'utilisation%20des%20signaux_complexes_GL_V2.1.pdf

    Pour les programmeurs, le zip suivant contient les fichiers source en Delphi, une notice avancée et l'installeur.
    https://github.com/f1iwq2/Signaux_complexes_GL/archive/master.zip

    A bientot

    +


    Notice: (cliquer dessus lance le téléchargement automatiquement)
    https://github.com/f1iwq2/Signaux_complexes_GL/raw/master/Notice%20d'utilisation%20des%20signaux_complexes_GL_V2.11.pdf

    Pour les programmeurs, le zip suivant contient les fichiers source en Delphi, une notice avancée et l'installeur.
    https://github.com/f1iwq2/Signaux_complexes_GL/archive/master.zip

    A bientot

    scgl.jpg


    @@ -188,7 +188,7 @@
    -
    Dernière édition par gily le 05 Novembre 2020, 18:51, édité 104 fois au total.
    +
    Dernière édition par gily le 15 Novembre 2020, 10:46, édité 105 fois au total.
    @@ -199,7 +199,7 @@
     
    -
    Messages: 754
    Inscrit le: 25 Juillet 2014, 14:32
    Localisation: nord
    +
    Messages: 755
    Inscrit le: 25 Juillet 2014, 14:32
    Localisation: nord
    @@ -238,7 +238,7 @@

    -
    +
    @@ -259,7 +259,7 @@
     
    -
    Messages: 754
    Inscrit le: 25 Juillet 2014, 14:32
    Localisation: nord
    +
    Messages: 755
    Inscrit le: 25 Juillet 2014, 14:32
    Localisation: nord
    @@ -349,7 +349,7 @@
     
    -
    Messages: 592
    Inscrit le: 10 Avril 2017, 22:34
    +
    Messages: 593
    Inscrit le: 10 Avril 2017, 22:34
    @@ -358,7 +358,7 @@

    -
    +
    @@ -379,7 +379,7 @@
     
    -
    Messages: 754
    Inscrit le: 25 Juillet 2014, 14:32
    Localisation: nord
    +
    Messages: 755
    Inscrit le: 25 Juillet 2014, 14:32
    Localisation: nord
    @@ -448,7 +448,7 @@

    -
    +
    @@ -469,7 +469,7 @@
     
    -
    Messages: 754
    Inscrit le: 25 Juillet 2014, 14:32
    Localisation: nord
    +
    Messages: 755
    Inscrit le: 25 Juillet 2014, 14:32
    Localisation: nord
    @@ -508,7 +508,7 @@ - + diff --git a/verif_version.dcu b/verif_version.dcu index 2b1049ab8de9a0caed23dde743d6a2ee9ec78b14..1f73817ea182b6e005f9094dcb9a5984f3ca0447 100644 GIT binary patch delta 72 zcmez4`OlO4J_7^)KNSXs*S&=kxn-Fj^cHT^4ipgT+*#5f!zA$^2$&fd7>x9cHunkq b;bt_N+%2QRXta5QOgTIAWDlmv8Y))+@t+za delta 70 zcmez8`Nxy{J_7^)9~A}$uaNwS+_KDNO`#jL0|kUSc9t~AFiHFe0%isV1|vPg&3yuY ZxET#6cgv_S8gAYoQ_jw)GFeOI3IK1z7xw@F diff --git a/verif_version.pas b/verif_version.pas index 51c76cd..c4ba71a 100644 --- a/verif_version.pas +++ b/verif_version.pas @@ -23,7 +23,7 @@ var Lance_verif : integer; verifVersion,notificationVersion : boolean; -Const Version='2.11'; // sert à la comparaison de la version publiée +Const Version='2.2'; // sert à la comparaison de la version publiée implementation diff --git a/verif_version.~dfm b/verif_version.~dfm new file mode 100644 index 0000000..b01d0ea --- /dev/null +++ b/verif_version.~dfm @@ -0,0 +1,35 @@ +object FormVersion: TFormVersion + Left = 500 + Top = 341 + Width = 468 + Height = 194 + Caption = 'V'#233'rification de version' + Color = clBtnFace + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -16 + Font.Name = 'Arial Narrow' + Font.Style = [] + OldCreateOrder = False + Position = poScreenCenter + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 20 + object Memo1: TMemo + Left = 16 + Top = 32 + Width = 425 + Height = 105 + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -13 + Font.Name = 'Arial Narrow' + Font.Style = [] + ParentFont = False + ScrollBars = ssVertical + TabOrder = 0 + end + object TimerVerif: TTimer + OnTimer = TimerVerifTimer + end +end diff --git a/verif_version.~pas b/verif_version.~pas new file mode 100644 index 0000000..51c76cd --- /dev/null +++ b/verif_version.~pas @@ -0,0 +1,210 @@ +unit verif_version; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls , ComCtrls ,WinInet, ExtCtrls; + +type + TFormVersion = class(TForm) + TimerVerif: TTimer; + Memo1: TMemo; + procedure FormCreate(Sender: TObject); + procedure TimerVerifTimer(Sender: TObject); + private + { Déclarations privées } + public + { Déclarations publiques } + end; + +var + FormVersion: TFormVersion; + Lance_verif : integer; + verifVersion,notificationVersion : boolean; + +Const Version='2.11'; // sert à la comparaison de la version publiée + +implementation + +uses UnitPrinc; + +{$R *.dfm} + +Procedure Aff(s : string); +begin + FormVersion.Memo1.lines.add(s); +end; + +function GetCurrentProcessEnvVar(const VariableName: string): string; +var + nSize: DWord; +begin + nSize:=0; + nSize:=GetEnvironmentVariable(PChar(VariableName), nil, nSize); + if nSize=0 then + begin + result:=''; + end + else + begin + SetLength(result,nSize-1); + if GetEnvironmentVariable(PChar(VariableName), PChar(result), nSize) <> nSize - 1 then + raise Exception.Create(SysErrorMessage(GetlastError)) + end; +end; + + +// téléchargement d'une page internet sans cache dans un fichier +function DownloadURL_NOCache(aUrl: string;s : string): Boolean; +var + hSession: HINTERNET; + hService: HINTERNET; + Fs:TFileStream; + lpBuffer: array[0..1024 + 1] of byte; + dwBytesRead: DWORD; + dwTimeout : integer; +begin + Result:=False; + DeleteFile(s); + Try Fs:=TFileStream.Create(s,fmCreate,fmShareDenyNone); + hSession:=InternetOpen('MyApp',INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); + try + if Assigned(hSession) then + begin + // fonction longue + dwTimeout:=2000; //2s + InternetSetOption(hSession,INTERNET_OPTION_CONNECT_TIMEOUT,@dwTimeOut, SizeOf(dwTimeOut)); + hService:=InternetOpenUrl(hSession, PChar(aUrl), nil, 0, INTERNET_FLAG_RELOAD, 0); + if Assigned(hService) then + try + while True do + begin + dwBytesRead:=1024; + InternetReadFile(hService,@lpBuffer,1024,dwBytesRead); + fs.WriteBuffer(lpBuffer,dwBytesRead); + if dwBytesRead=0 then break; + end; + Result:=True; + finally + InternetCloseHandle(hService); + end; + end; + finally + InternetCloseHandle(hSession); + end; + finally + fs.Free; + end; +end; + +procedure verifie_version; +var s,s2,s3,Version_p,Url,LocalFile : string; + trouve_version,trouve_zip : boolean; + fichier : text; + i,j,erreur : integer; + V_publie,V_utile : real; +begin + //Affiche('vérifie version',clLime); + if not(AvecInit) then exit ; + if not(verifVersion) then exit; + Url:='http://cdmrail.free.fr/ForumCDR/viewtopic.php?f=77&t=3906#p50499'; + LocalFile:='page.txt'; + trouve_version:=false; + trouve_zip:=false; + if DownloadURL_NOCache(Url,localFile) then + begin + AssignFile(fichier,LocalFile); + reset(fichier); + while not(eof(fichier)) and (not(trouve_version) or not(trouve_zip)) do + begin + readln(fichier,s); + s:=LowerCase(s); + if not(trouve_version) then + begin + i:=pos('version ',s); + trouve_version:=i<>0; + if trouve_version then s2:=s; + end; + if not(trouve_zip) then + begin + i:=pos('.zip',s); + trouve_zip:=i<>0; + if trouve_zip then s3:=s; + end; + // Aff(s) + end; + closefile(fichier); + if trouve_version then + begin + // isoler le champ version + i:=pos('version ',s2); + delete(s2,1,i+7); + j:=pos(' ',s2); + Version_p:=copy(s2,1,j-1); // version dans version_p + // isoler l'url du zip + i:=pos('href="',s3); + delete(s3,1,i+5); + j:=pos('"',s3); + s3:=copy(s3,1,j-1); + i:=pos('.',s3); + if i<>0 then delete(s3,i,1); // supprimer le . + s3:='http://cdmrail.free.fr/ForumCDR'+s3 ; + aff(s3); // lien dans s3 + + // changer le . en , + s:=Version_p; + // i:=pos('.',s);if i<>0 then s[i]:=','; + s2:=version; + // i:=pos('.',s2);if i<>0 then s2[i]:=','; + + val(s,V_publie,erreur); if erreur<>0 then exit; + val(s2,V_utile,erreur); if erreur<>0 then exit; + + if V_utile0 then dec(lance_verif); + if lance_verif=1 then verifie_version; +end; + +end. diff --git a/versions.txt b/versions.txt index cc48a2e..4e56777 100644 --- a/versions.txt +++ b/versions.txt @@ -38,6 +38,10 @@ version 2.1 : Possibilit Correction d'un bug sur l'écriture du fichier config-gl.cfg lors de la modification de la configuration. version 2.11 : Suppression du message d'erreur "Element 9999 non trouvé" Ajout de l'option fenêtre étendue dans le panneau de configuration +Version 2.2 : Correction d'un bug sur le verrouillage des signaux au carré sur les trains en approche. + Mise à jour du fichier de config.cfg si modification des signaux dans la configuration. + +
  • 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 z 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�cvUT)S{*@e+>4+oJ_7H0XaKB<|pMPZK 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