diff --git a/Notice d'utilisation des signaux_complexes_GL_V1.1.pdf b/Notice d'utilisation des signaux_complexes_GL_V1.11.pdf similarity index 77% rename from Notice d'utilisation des signaux_complexes_GL_V1.1.pdf rename to Notice d'utilisation des signaux_complexes_GL_V1.11.pdf index c18f3a0..1b1cb21 100644 Binary files a/Notice d'utilisation des signaux_complexes_GL_V1.1.pdf and b/Notice d'utilisation des signaux_complexes_GL_V1.11.pdf differ diff --git a/Signaux_complexes_GL.cfg b/Signaux_complexes_GL.cfg index 096ce3f..c22c47f 100644 --- a/Signaux_complexes_GL.cfg +++ b/Signaux_complexes_GL.cfg @@ -31,12 +31,12 @@ -M -$M16384,1048576 -K$00400000 --LE"c:\program files (x86)\borland\delphi7\Projects\Bpl" --LN"c:\program files (x86)\borland\delphi7\Projects\Bpl" --U"c:\program files (x86)\borland\delphi7\Lib\Debug" --O"c:\program files (x86)\borland\delphi7\Lib\Debug" --I"c:\program files (x86)\borland\delphi7\Lib\Debug" --R"c:\program files (x86)\borland\delphi7\Lib\Debug" +-LE"c:\program files\borland\delphi7\Projects\Bpl" +-LN"c:\program files\borland\delphi7\Projects\Bpl" +-U"c:\program files\borland\delphi7\Lib\Debug" +-O"c:\program files\borland\delphi7\Lib\Debug" +-I"c:\program files\borland\delphi7\Lib\Debug" +-R"c:\program files\borland\delphi7\Lib\Debug" -w-UNSAFE_TYPE -w-UNSAFE_CODE -w-UNSAFE_CAST diff --git a/UnitDebug.dcu b/UnitDebug.dcu index 9063b50..7bce6cf 100644 Binary files a/UnitDebug.dcu and b/UnitDebug.dcu differ diff --git a/UnitDebug.dfm b/UnitDebug.dfm index f610177..620c59e 100644 --- a/UnitDebug.dfm +++ b/UnitDebug.dfm @@ -1,8 +1,8 @@ object FormDebug: TFormDebug - Left = 313 - Top = 77 + Left = 514 + Top = 56 BorderStyle = bsSingle - Caption = 'FormDebug' + Caption = 'Fen'#234'tre de d'#233'bug' ClientHeight = 639 ClientWidth = 759 Color = clWhite @@ -47,16 +47,16 @@ object FormDebug: TFormDebug ParentFont = False end object Label3: TLabel - Left = 464 - Top = 200 + Left = 456 + Top = 88 Width = 265 - Height = 101 + Height = 73 AutoSize = False Caption = 'Label3' Color = clGray Font.Charset = ANSI_CHARSET Font.Color = clWindow - Font.Height = -15 + Font.Height = -13 Font.Name = 'Arial Narrow' Font.Style = [] ParentColor = False @@ -80,26 +80,27 @@ object FormDebug: TFormDebug end object MemoEvtDet: TMemo Left = 564 - Top = 308 + Top = 416 Width = 181 - Height = 281 + Height = 173 Color = clBlack - Font.Charset = DEFAULT_CHARSET + Font.Charset = ANSI_CHARSET Font.Color = clYellow Font.Height = -11 - Font.Name = 'MS Sans Serif' + Font.Name = 'Arial' Font.Style = [] Lines.Strings = ( - 'Tableau des '#233'v'#232'nements d'#233'tecteurs') + 'Tableau des '#233'v'#232'nements ' + 'd'#233'tecteurs') ParentFont = False TabOrder = 1 end object ButtonEcrLog: TButton Left = 448 - Top = 564 + Top = 560 Width = 97 - Height = 25 - Caption = 'Ecrire le log' + Height = 29 + Caption = 'Sauvegarder le log' TabOrder = 2 OnClick = ButtonEcrLogClick end @@ -128,8 +129,52 @@ object FormDebug: TFormDebug TabOrder = 4 OnClick = CheckAffSigClick end - object SaveDialog: TSaveDialog - Left = 480 + object ButtonRazTampon: TButton + Left = 448 + Top = 520 + Width = 97 + Height = 33 + Caption = 'Raz Tampon Ev'#232'nements' + TabOrder = 5 + WordWrap = True + OnClick = ButtonRazTamponClick + end + object ButtonCherche: TButton + Left = 448 + Top = 480 + Width = 97 + Height = 33 + Caption = 'Chercher erreurs' + TabOrder = 6 + OnClick = ButtonChercheClick + end + object MemoDet: TMemo + Left = 560 + Top = 176 + Width = 185 + Height = 225 + Color = clMaroon + Font.Charset = ANSI_CHARSET + Font.Color = clYellow + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + ScrollBars = ssVertical + TabOrder = 7 + end + object ButtonAffEvtChrono: TButton + Left = 448 Top = 440 + Width = 97 + Height = 33 + Caption = 'Affiche Evts chrono d'#233'tecteurs' + TabOrder = 8 + WordWrap = True + OnClick = ButtonAffEvtChronoClick + end + object SaveDialog: TSaveDialog + Left = 464 + Top = 336 end end diff --git a/UnitDebug.pas b/UnitDebug.pas index 9f941ee..2d0b1f2 100644 --- a/UnitDebug.pas +++ b/UnitDebug.pas @@ -17,26 +17,49 @@ type Label3: TLabel; MemoDebug: TMemo; CheckAffSig: TCheckBox; + ButtonRazTampon: TButton; + ButtonCherche: TButton; + MemoDet: TMemo; + ButtonAffEvtChrono: TButton; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCreate(Sender: TObject); procedure ButtonEcrLogClick(Sender: TObject); procedure EditNivDebugKeyPress(Sender: TObject; var Key: Char); procedure CheckAffSigClick(Sender: TObject); + procedure ButtonRazTamponClick(Sender: TObject); + procedure ButtonChercheClick(Sender: TObject); + procedure ButtonAffEvtChronoClick(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } end; +Const Max_Event_det_tick = 10000; + var FormDebug: TFormDebug; NivDebug : integer; AffSignal : boolean; + N_event_det : integer; // index du dernier évènement (de 1 à 20) + event_det : array[1..20] of integer; + // tick 1/10s,détecteur + N_Event_tick : integer ; // dernier index + event_det_tick : array[1..Max_Event_det_tick] of + record + tick : longint; + detecteur : array[1..1100] of integer; + end; + + + procedure AfficheDebug(s : string;lacouleur : TColor); implementation +uses UnitPrinc; + {$R *.dfm} procedure AfficheDebug(s : string;lacouleur : TColor); @@ -70,6 +93,8 @@ var s : string; begin s:=GetCurrentDir; SaveDialog.InitialDir:=s; + SaveDialog.DefaultExt:='txt'; + SaveDialog.Filter:='Fichiers texte (*.txt)|*.txt|Tous fichiers (*.*)|*.*'; if SaveDialog.Execute then begin s:=SaveDialog.FileName; @@ -92,16 +117,16 @@ begin begin Key := #0; // prevent beeping val(EditNivDebug.text,i,e); - if e=0 then + if e=0 then begin if (i>=0) and (i<=3) then NivDebug:=i else EditNivDebug.text:='3'; end else EditNivDebug.text:='0'; end; - MemoDebug.Lines.add('Niveau='+intToSTR(NivDebug)); + MemoDebug.Lines.add('Niveau='+intToSTR(NivDebug)); end; - + procedure TFormDebug.CheckAffSigClick(Sender: TObject); @@ -109,4 +134,53 @@ begin AffSignal:=checkAffSig.Checked; end; +procedure TFormDebug.ButtonRazTamponClick(Sender: TObject); +begin + N_event_det:=0; + Event_det[1]:=0; + MemoEvtDet.Clear; + memoEvtDet.Refresh; +end; + +procedure TFormDebug.ButtonChercheClick(Sender: TObject); +var i : integer; + trouve : boolean; +begin + + with MemoDebug do + begin + i:=0; + repeat + trouve:= pos('erreur',Lines[i])<>0; + inc(i); + until (i>=Lines.Count) or trouve; + if trouve then + begin + Lines.Add('trouvé en '+intToSTR(i)); + SelStart:=Perform(EM_LINEINDEX,5,0); + perform(EM_SCROLLCARET,0,0); + setfocus; + end; + end; +end; + + +procedure TFormDebug.ButtonAffEvtChronoClick(Sender: TObject); +var i,j,etat : integer; + s : string; + trouve : boolean; +begin + for i:=1 to N_Event_tick do + begin + s:=IntToSTR(i)+' Tick='+IntToSTR(event_det_tick[i].tick)+' Det='; + trouve:=false; + for j:=1 to 1100 do + begin + etat:=event_det_tick[i].detecteur[j]; + if etat<>-1 then begin s:=s+IntToSTR(j)+'='+intToSTR(etat);trouve:=true;end; + end; + if trouve then AfficheDebug(s,clyellow); + end; +end; + end. diff --git a/UnitPrinc.dcu b/UnitPrinc.dcu index 2028446..57b3a81 100644 Binary files a/UnitPrinc.dcu and b/UnitPrinc.dcu differ diff --git a/UnitPrinc.dfm b/UnitPrinc.dfm index 4d32b23..45cdc5b 100644 --- a/UnitPrinc.dfm +++ b/UnitPrinc.dfm @@ -1,6 +1,6 @@ object FormPrinc: TFormPrinc - Left = 14 - Top = 184 + Left = 172 + Top = 78 BorderStyle = bsSingle Caption = 'Client TCP-IP CDM Rail ou USB - syst'#232'me LENZ' ClientHeight = 607 @@ -1422,8 +1422,14 @@ object FormPrinc: TFormPrinc 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 ChronoDetect: TMenuItem + Caption = 'Chronologie des d'#233'tecteurs' + Hint = 'Affiche la chronologie des d'#233'tecteurs' + OnClick = ChronoDetectClick + end object Etatdesaiguillages1: TMenuItem Caption = 'Etat des aiguillages' OnClick = Etatdesaiguillages1Click @@ -1481,6 +1487,7 @@ object FormPrinc: TFormPrinc Caption = 'Divers' object Versions1: TMenuItem Caption = 'Versions' + Hint = 'Versions' OnClick = Versions1Click end end diff --git a/UnitPrinc.pas b/UnitPrinc.pas index 8a1a76d..8315f74 100644 --- a/UnitPrinc.pas +++ b/UnitPrinc.pas @@ -9,10 +9,8 @@ Unit UnitPrinc; - 1 = aiguillage dévié *) - interface - uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, ExtCtrls, jpeg, ComCtrls, @@ -76,6 +74,7 @@ type Codificationdesfeux1: TMenuItem; Divers1: TMenuItem; Versions1: TMenuItem; + ChronoDetect: TMenuItem; procedure FormCreate(Sender: TObject); procedure MSComm1Comm(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); @@ -118,6 +117,7 @@ type procedure Versions1Click(Sender: TObject); procedure ClientSocketLenzDisconnect(Sender: TObject; Socket: TCustomWinSocket); + procedure ChronoDetectClick(Sender: TObject); private { Déclarations privées } @@ -187,8 +187,7 @@ var ancien_tablo_signalCplx,EtatsignalCplx : array[0..MaxAcc] of word; dem_calcul_zone,Hors_tension2,traceSign,TraceZone,Ferme,ParUSB,parSocket,ackCdm, NackCDM : boolean; clignotant,nack,Maj_feux_cours,avecMSCom : boolean; - N_event_det : integer; // index du dernier évènement (de 1 à 20) - event_det : array[1..20] of integer; + branche : array [1..100] of string; parcours : array[1..MaxElParcours] of TBranche ; // parcours des locos en fonction des détecteurs @@ -217,7 +216,7 @@ var couleur : Tcolor; fichier : text; recuCDML : array of string; - + tick : longint; // l'indice du tableau aiguillage est son adresse aiguillage : array[0..MaxAcc] of Taiguillage; @@ -521,7 +520,7 @@ begin cercle(ACanvas,43,13,6,GrisF); cercle(ACanvas,53,13,6,GrisF); end; - if EtatSignal=4 then + if EtatSignal=4 then begin cercle(ACanvas,11,13,6,clWhite); cercle(ACanvas,22,13,6,clWhite); @@ -2923,7 +2922,7 @@ begin ItemHeight:=i+1; end; // adresse ip et port de CDM - // AfficheDet:=true; + s:=lit_ligne; i:=pos(':',s); if i<>0 then begin adresseIPCDM:=copy(s,1,i-1);Delete(s,1,i);portCDM:=StrToINT(s);end; @@ -3892,7 +3891,8 @@ begin exit; end; //Affiche('Erreur 1021 adrTJD='+IntToSTR(Adr)+' adrTJDPointe='+intToSTR(AdrTJDP)+' prec='+IntTOSTR(prec),clred); - Suivant_alg3:=9999;exit; + if nivDebug=3 then AfficheDebug('TJD mal positionnée',clred); + Suivant_alg3:=9998;exit; end; // cas 2 TJD if (aiguillage[Adr].position<>const_droit) @@ -3917,8 +3917,8 @@ begin if Abis=1 then typeGen:=3; suivant_alg3:=adr;exit; end; - //Affiche('Erreur 1022',clred); - Suivant_alg3:=9999;exit; + if nivDebug=3 then AfficheDebug('TJD mal positionnée',clred); + Suivant_alg3:=9998;exit; end; // cas 3 TJD if (aiguillage[Adr].position=const_droit) @@ -3943,8 +3943,8 @@ begin if Abis=1 then typeGen:=3; suivant_alg3:=adr;exit; end; - //Affiche('Erreur 1023',clred); - Suivant_alg3:=9999;exit; + if nivDebug=3 then AfficheDebug('TJD mal positionnée',clred); + Suivant_alg3:=9998;exit; end; // cas 4 tjd if (aiguillage[Adr].position<>const_droit) @@ -3969,8 +3969,8 @@ begin if Abis=1 then typeGen:=3; suivant_alg3:=adr;exit; end; - //Affiche('Erreur 1024',clred); - Suivant_alg3:=9999;exit; + if nivDebug=3 then AfficheDebug('TJD mal positionnée',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) @@ -4081,7 +4081,7 @@ begin actuelCalc:=AdrSuiv; BisActuelCalc:=typeGen; //Affiche('Suivant signalaig='+IntToSTR(AdrSuiv),clyellow); - until (j=10) or (AdrSuiv>512) or (AdrSuiv=0); // + until (j=10) or (typeGen=1) or (AdrSuiv=0) or (AdrSuiv>=9998); // arret si détecteur // si trouvé le sens, trouver le suivant if AdrSuiv=actuel then begin @@ -4092,7 +4092,7 @@ begin end; // renvoie l'adresse du détecteur suivant des deux éléments -// Det1 et Det2 peuvent être séparés par des aiguillages +// El1 et El2 peuvent être séparés par des aiguillages 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,Btype,BisPrec,BisFonc,BisSuiv : integer; @@ -4144,6 +4144,7 @@ begin if (el2<>Adr) then repeat Adr:=suivant_alg3(AdrPrec,BisPrec,AdrFonc,BisFonc,1); // donne l'élément suivant de AdrPrec à AdrFonc et dans Bis si c'est un aig bis + if (Adr>=9997) then begin detecteur_suivant_el:=Adr;exit;end; if (NivDebug=3) then AfficheDebug('trouvé '+intToSTR(Adr)+' '+intToSTR(typeGen),clorange); trouve_element(Adr,typeGen); Btype:=BrancheN[branche_trouve,IndexBranche_trouve].BType; @@ -4152,8 +4153,9 @@ begin AdrPrec:=AdrFonc;AdrFonc:=Adr; BisPrec:=BisFonc;BisFonc:=typeGen; i:=i+1; - sortie:=(Adr=El2) or (i=20) or (Adr=0) or ((Adr<>el2) and (btype=1)); + sortie:=(Adr=El2) or (i=20) or (Adr=0) or (Adr>9997) or ((Adr<>el2) and (btype=1)); until (sortie) ; // boucle de parcours + if (i=20) then begin Affiche('Erreur fatale 300 : Itération trop longue',clred); AfficheDebug('Erreur fatale 300 : Itération trop longue',clred); @@ -4183,6 +4185,11 @@ begin //typeGen:=0; //? repeat Adr:=suivant_alg3(AdrPrec,BisPrec,AdrFonc,BisFonc,1); + if Adr>9997 then + begin + detecteur_suivant_el:=Adr; + exit; + end; if NivDebug=3 then AfficheDebug('trouvé 2:'+intToSTR(Adr)+' '+intToSTR(typeGen),clorange); trouve_element(Adr,typeGen); Btype:=BrancheN[branche_trouve,IndexBranche_trouve].BType; @@ -4314,34 +4321,34 @@ begin repeat inc(j); // à 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 (actuel>512) then + if (j=1) and (bisActuel=1) then begin AdrSuiv:=actuel; - actuel:=prec; - BisPrec:=0; - BisActuel:=0; + actuel:=prec;BisActuel:=1; + BisPrec:=1; end else - AdrSuiv:=suivant_alg3(prec,BisPrec,actuel,BisActuel,1); - + begin + AdrSuiv:=suivant_alg3(prec,BisPrec,actuel,BisActuel,1); + prec:=actuel;BisPrec:=BisActuel; + actuel:=AdrSuiv;BisActuel:=typeGen; + end; if (AdrSuiv=9999) then begin Etat_signal_suivant:=0; exit; end; if (AdrSuiv=0) then - begin - if NivDebug=3 then AfficheDebug('Le suivant est un buttoir',clyellow); + begin + if NivDebug=3 then AfficheDebug('Le suivant est un buttoir',clyellow); Etat_signal_suivant:=carre_F; // faire comme si c'était un signal au carré exit; end; - - prec:=actuel;BisPrec:=BisActuel; - actuel:=AdrSuiv;BisActuel:=typeGen; + // si le suivant est un détecteur comporte t-il un signal? AdrFeu:=0; - if (AdrSuiv>512) then + if (bisACtuel=1) then // détecteur? begin i:=Index_feu_det(AdrSuiv); AdrFeu:=Feux[i].Adresse; @@ -4397,7 +4404,7 @@ begin //Affiche(IntToSTR(actuel),clyellow); AdrFeu:=0; AdrDevie:=0; - if (actuel<512) then + if (BisActuel=2) or (BisActuel=3) then // aiguillage begin if (aiguillage[actuel].Apointe=prec) and (aiguillage[actuel].position<>const_droit) then Aiguille_deviee:=actuel; end; @@ -4410,13 +4417,11 @@ begin if NivDebug=3 then AfficheDebug('701 - Suivant signalaig='+IntToSTR(AdrSuiv),clyellow); if ADrSuiv<>9997 then begin - prec:=actuel; - BisPrec:=BisActuel; - actuel:=AdrSuiv; - BisActuel:=typeGen; + prec:=actuel;BisPrec:=BisActuel; + actuel:=AdrSuiv;BisActuel:=typeGen; // si le suivant est un détecteur comporte t-il un signal? AdrFeu:=0; - if (AdrSuiv>512) then + if (BisActuel=1) then // détecteur begin i:=Index_feu_det(AdrSuiv); AdrFeu:=Feux[i].Adresse; @@ -4493,7 +4498,6 @@ begin end; // renvoie vrai si une mémoire de zone est occupée du signal courant au signal suivant -// a compléter par les 4 détecteurs.... function test_memoire_zones(adresse : integer) : boolean; var BisPrec,BisActuel,ife,Detecteur_precedent,actuel,AdrDet,Etat,AdrFeu,i,j,prec,AdrSuiv : integer; @@ -4519,27 +4523,33 @@ begin begin prec:=feux[i].Adr_det1;actuel:=feux[i].Adr_el_suiv1; if feux[i].Btype_suiv1=1 then BisActuel:=1; if feux[i].Btype_suiv1=2 then BisActuel:=2; - if feux[i].Btype_suiv1=5 then BisActuel:=3; // le type du feu 1=détécteur 2=aig 5=bis + if feux[i].Btype_suiv1=4 then BisActuel:=2; // aiguillage triple + if feux[i].Btype_suiv1=5 then BisActuel:=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_suiv1=1 then BisActuel:=1; - if feux[i].Btype_suiv1=2 then BisActuel:=2; - if feux[i].Btype_suiv1=5 then BisActuel:=3; // le type du feu 1=détécteur 2=aig 5=bis + if feux[i].Btype_suiv2=1 then BisActuel:=1; + if feux[i].Btype_suiv2=2 then BisActuel:=2; + if feux[i].Btype_suiv2=4 then BisActuel:=2; // aiguillage triple + if feux[i].Btype_suiv2=5 then BisActuel:=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_suiv1=1 then BisActuel:=1; - if feux[i].Btype_suiv1=2 then BisActuel:=2; - if feux[i].Btype_suiv1=5 then BisActuel:=3; // le type du feu 1=détécteur 2=aig 5=bis + prec:=feux[i].Adr_det3; + actuel:=feux[i].Adr_el_suiv3; + if feux[i].Btype_suiv3=1 then BisActuel:=1; + if feux[i].Btype_suiv3=2 then BisActuel:=2; + if feux[i].Btype_suiv3=4 then BisActuel:=2; // aiguillage triple + if feux[i].Btype_suiv3=5 then BisActuel:=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_suiv1=1 then BisActuel:=1; - if feux[i].Btype_suiv1=2 then BisActuel:=2; - if feux[i].Btype_suiv1=5 then BisActuel:=3; // le type du feu 1=détécteur 2=aig 5=bis + prec:=feux[i].Adr_det4; + actuel:=feux[i].Adr_el_suiv4; + if feux[i].Btype_suiv4=1 then BisActuel:=1; + if feux[i].Btype_suiv4=2 then BisActuel:=2; + if feux[i].Btype_suiv4=4 then BisActuel:=2; // aiguillage triple + if feux[i].Btype_suiv4=5 then BisActuel:=3; // le type du feu 1=détecteur 2=aig 5=bis end; // détecteur sur le signal courant Detecteur_precedent:=prec; @@ -4554,24 +4564,26 @@ begin 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 (actuel>512) then + if (j=1) and (Bisactuel=1) then // si détecteur begin + //AfficheDebug('C''est un détecteur',clred); AdrSuiv:=actuel; actuel:=prec; - BisPrec:=0; - BisActuel:=0; + BisPrec:=1; + BisActuel:=1; + //TypeGen:=1; Pres_train:=MemZone[prec,actuel]; if Pres_Train and (NivDebug=3) then Affiche('Présence train de '+intToSTR(prec)+' à '+intToSTR(actuel),clyellow); Detecteur_precedent:=actuel; end else - AdrSuiv:=suivant_alg3(prec,BisPrec,actuel,BisActuel,1); - - prec:=actuel; - BisPrec:=BisActuel; - actuel:=AdrSuiv; - BisActuel:=typeGen; - + begin + AdrSuiv:=suivant_alg3(prec,BisPrec,actuel,BisActuel,1); + //AfficheDebug('A:'+IntToSTR(BisActuel); + prec:=actuel;BisPrec:=BisActuel; + actuel:=AdrSuiv;BisActuel:=typeGen; + end; + //AfficheDebug('A suivant='+IntToSTR(adrsuiv),clred); if AdrSuiv=0 then begin // si c'est un buttoir @@ -4580,7 +4592,7 @@ begin end; // si le suivant est un détecteur comporte t-il un signal? AdrFeu:=0; - if (AdrSuiv>512) then + if (BisActuel=1) then // détecteur begin if (NivDebug=3) and MemZone[Detecteur_precedent][actuel] then AfficheDebug('Présence train de '+intToSTR(Detecteur_precedent)+' à '+intToSTR(actuel),clyellow); @@ -4626,30 +4638,49 @@ begin test_memoire_zones:=Pres_train; end; - +// trouve une séquence chronologique 010 sur un détecteur +function trouve_seq_chrono_010(Adresse : integer) : boolean; +var i,etat : integer; + etat0_seq1,etat1_seq2,etat0_seq3 : boolean; +begin + i:=N_Event_tick; + if i<2 then exit; + Affiche('test si seq 010 sur det '+intToSTR(Adresse),clyellow); + etat0_seq1:=false; etat1_seq2:=false; etat0_seq3:=false; + if (event_det_tick[i].detecteur[Adresse]=0) then begin etat0_seq1:=true;end; + repeat +// if (event_det_tick[i].detecteur[Adresse]=0) then etat0_seq1:=true; + + if (event_det_tick[i].detecteur[Adresse]=1) and etat0_seq1 then begin etat1_seq2:=true;end; + dec(i); // remonter le temps ... + until (i=0) or (etat1_seq2); + trouve_seq_chrono_010:=etat1_seq2; +end; // calcul des zones depuis le tableau des fronts descendants des évènements détecteurs +// 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 // Variable globale: El_suivant : adresse du détecteur suivant le détecteur "actuel" // Actuel,Suivant : nouveaux détecteurs du canton suivant // Résultat: -// si 0 : pas de route +// si 0 : pas de route // si 1 : détecteur det1 non trouvé // si 2 : détecteur det2 non trouvé // si 3 : erreur fatale // si 10 : ok route trouvée function calcul_zones_det(det1,det2 : integer) : integer; var - i,i1,i2,j,k, - IndexBranche_det1,IndexBranche_det2,index_i1,index_i2, - branche_trouve_det1,branche_trouve_det2,Adr,AdrPrec,position,Btype,BTypePrec, - AdrFonc,BisPrec,BisSuiv,BisFonc : integer; + i,i1,i2,j,k,IndexBranche_det1,IndexBranche_det2,index_i1,index_i2, + branche_trouve_det1,branche_trouve_det2,Adr,AdrPrec,position,Btype,BTypePrec, + AdrFonc,BisPrec,BisSuiv,BisFonc,AdrSuiv : integer; sortie : boolean; s : string; begin - // traceDet=TRUE; + // if trouve_seq_chrono_010(det1) then Affiche('trouvé séquence 010 sur détecteur '+intToSTR(det1),clyellow); + // if trouve_seq_chrono_010(det2) then Affiche('trouvé séquence 010 sur détecteur '+intToSTR(det2),clyellow); + // trouver détecteur 1 trouve_detecteur(det1); // branche_trouve IndexBranche_trouve if (IndexBranche_trouve=0) then @@ -4688,19 +4719,24 @@ begin AdrFonc:=Adr; Btype:=BrancheN[branche_trouve_det1,i].BType; // élément suivant/précédent BisFonc:=Btype; - i:=0; - if (det2<>Adr) then - repeat - Adr:=suivant_alg3(AdrPrec,BisPrec,AdrFonc,BisFonc,1); // donne l'élément suivant de AdrPrec à AdrFonc et dans Bis si c'est un aig bis - trouve_element(Adr,typeGen); - Btype:=BrancheN[branche_trouve,IndexBranche_trouve].BType; - BisSuiv:=Btype; // si aiguillage bis - //Affiche(intToSTR(adr)+'/'+intToStr(Btype),clorange); - AdrPrec:=AdrFonc;AdrFonc:=Adr; - BisPrec:=BisFonc;BisFonc:=typeGen; - i:=i+1; - sortie:=(Btype=1) or (Btype=4) or (i=20) or (Adr=0); - until (sortie) ; // boucle de parcours + + // si l'élémént suivant est un détecteur et il est différent de det2, c'est pas le bon sens : inutile de traiter le cas + if (Btype<>1) or (Adr=Det2) then + begin + i:=0; + if (det2<>Adr) then + repeat + Adr:=suivant_alg3(AdrPrec,BisPrec,AdrFonc,BisFonc,1); // donne l'élément suivant de AdrPrec à AdrFonc et dans Bis si c'est un aig bis + trouve_element(Adr,typeGen); + Btype:=BrancheN[branche_trouve,IndexBranche_trouve].BType; + BisSuiv:=Btype; // si aiguillage bis + //Affiche(intToSTR(adr)+'/'+intToStr(Btype),clorange); + AdrPrec:=AdrFonc;AdrFonc:=Adr; + BisPrec:=BisFonc;BisFonc:=typeGen; + i:=i+1; + sortie:=(Btype=1) or (Btype=4) or (i=20) or (Adr=0); + until (sortie) ; // boucle de parcours + end; if (i=20) then begin Affiche('Erreur fatale 200 : Itération trop longue',clred); AfficheDebug('Erreur fatale 200 : Itération trop longue',clred);calcul_zones_det:=3;end; @@ -4715,11 +4751,13 @@ begin if (NivDebug=3) then AfficheDebug('Pas de suivant sur séquence '+IntToSTR(det1)+' à '+intToStr(det2),clyellow); calcul_zones_det:=0;exit; end; + // étape 2 : on a trouvé le sens de progression, trouver le détecteur suivant if (Adr=det2) then begin // trouvé la route si j=2 : - si j=3 : + if (NivDebug=3) then AfficheDebug('Route trouvée',clyellow); + (* i:=0; AdrFonc:=Adr; BisFonc:=1; @@ -4737,23 +4775,29 @@ begin inc(i); sortie:=(Btype=1) or (Adr=0) or (i=20); until sortie; + if (i=20) then begin Affiche('Erreur fatale 201 : Itération trop longue',clred); AfficheDebug('Erreur fatale 201 : Itération trop longue',clred);calcul_zones_det:=3;end; + *) + AdrSuiv:=detecteur_suivant_El(det1,1,det2,1); + AdrPrec:=detecteur_suivant_El(det2,1,det1,1); + + //Mem[det2]:=true; // le train vient de det1, quitte det2 et va vers Adr - Mem[det1]:=false; - Mem[det2]:=true; - MemZone[det1,det2]:=FALSE; // efface canton précédent - MemZone[det2,Adr]:=TRUE; // valide le nouveau canton - precedent:=det1; - Actuel:=det2; - Suivant:=Adr; - //if (aff_det) then - //begin Affiche('MemZone '+intToStr(det1)+' 0',clyellow); Affiche('MemZone '+intToStr(det2)+' 1',clyellow); end; + if Mem[AdrPrec]=FALSE then begin calcul_zones_det:=10;exit; end; + Mem[AdrPrec]:=false; + + MemZone[det1,det2]:=FALSE; // efface zone précédente + MemZone[det2,AdrSuiv]:=TRUE; // valide la nouveau zone + With FormDebug.MemoDet do + begin + Lines.Add('route ok '+intToStr(det1)+' à '+intToStr(det2)); + s:='Mem '+IntToSTR(det2)+' à '+IntTOStr(AdrSuiv); + Lines.Add(s); + end; + Affiche(s,clyellow); - Affiche('Mem '+IntToSTR(det2)+' à '+IntTOStr(Adr),clyellow); - - //if (echoLog) then writeln(fichier,'itération '+intTOstr(iteration)+' - Mem '+IntToSTR(det2)+' à '+IntToSTR(Adr),clyellow); calcul_zones_det:=10; exit; // réussi end; @@ -4761,7 +4805,7 @@ end; // renvoie le détecteur de la zone mémoire si la mémoire MemZone[det,xxx] est à 1 -// exemple si MemZone[512,517]=true alors Test_mem_origine(512) renvoie 517, sinon 0 +// exemple si MemZone[513,517]=true alors Test_mem_origine(513) renvoie 517, sinon 0 function Test_mem_origine(det : integer) : integer ; var i : integer; trouve : boolean; @@ -4880,13 +4924,13 @@ begin if (det_initial<>0) then begin DetPrec1:=detecteur_suivant(Adr_El_Suiv,Btype_el_suivant,det_initial,1); - if DetPrec1<>9999 then // route bloquée par aiguillage mal positionné + if DetPrec1<9997 then // route bloquée par aiguillage mal positionné begin DetPrec2:=detecteur_suivant_El(det_initial,1,DetPrec1,1); - if DetPrec2<>9999 then + if DetPrec2<9997 then begin DetPrec3:=detecteur_suivant_El(DetPrec1,1,DetPrec2,1); - if DetPrec3<>9999 then + if DetPrec3<9997 then begin //DetPrec4:=detecteur_suivant_det(DetPrec2,DetPrec3); if AffSignal then Affiche('les détecteurs précédents au feu '+IntToSTR(Adrfeu)+' sont:'+intToSTR(Det_initial)+' '+intToSTR(DetPrec1)+' '+intToSTR(DetPrec2)+' '+intToSTR(DetPrec3)+' ',clyellow); @@ -5092,6 +5136,7 @@ begin if traceListe then for index_3:=1 to N_event_det do affiche(intToSTR(event_det[index_3]),clyellow); goto refaire; end; + if traceListe then Affiche('cherche '+intToSTR(det1)+' '+intToSTR(det2)+' '+intToSTR(index_1)+' '+intToSTR(index_2)+' '+intToSTR(N_event_det),clyellow); resultat:=calcul_zones_det(det1,det2); if resultat=10 then @@ -5153,6 +5198,20 @@ begin end; end; +// stocke les changements d'état des détecteurs dans le tableau chronologique +// et la mémoire de zone +procedure stocke_chrono_event_det(Adr,etat : integer); +begin + if (N_Event_tick((valeur and $4) = $4) then // si changement de l'état du détecteur bit 6 begin @@ -5299,6 +5367,8 @@ begin event_det[N_event_det]:=i; dem_calcul_zone:=true; end; + if ancien_detecteur[i] and not(detecteur[i]) then stocke_chrono_event_det(i,0); + if not(ancien_detecteur[i]) and (detecteur[i]) then stocke_chrono_event_det(i,1); if AfficheDet then begin s:='detecteur '+inttoSTR(i)+'=';if detecteur[i] then s:=s+'1' else s:=s+'0';Affiche(s,clYellow);end; end; @@ -5315,6 +5385,8 @@ begin event_det[N_event_det]:=i; dem_calcul_zone:=true; end; + if ancien_detecteur[i] and not(detecteur[i]) then stocke_chrono_event_det(i,0); + if not(ancien_detecteur[i]) and (detecteur[i]) then stocke_chrono_event_det(i,1); if AfficheDet then begin s:='detecteur '+inttoSTR(i)+'=';if detecteur[i] then s:=s+'1' else s:=s+'0';Affiche(s,clYellow);end; end; @@ -5331,6 +5403,8 @@ begin event_det[N_event_det]:=i; dem_calcul_zone:=true; end; + if ancien_detecteur[i] and not(detecteur[i]) then stocke_chrono_event_det(i,0); + if not(ancien_detecteur[i]) and (detecteur[i]) then stocke_chrono_event_det(i,1); if AfficheDet then begin s:='detecteur '+inttoSTR(i)+'=';if detecteur[i] then s:=s+'1' else s:=s+'0';Affiche(s,clYellow);end; end; @@ -5653,7 +5727,7 @@ end; procedure TFormPrinc.FormCreate(Sender: TObject); var - i : integer; + i,j : integer; s,s2,Url,LocalFile : string; trouve,AvecMaj : Boolean; V_utile,V_publie : real; @@ -5726,9 +5800,18 @@ begin begin cree_image(i); // et initialisation tableaux signaux end; - Tempo_init:=10; // démarre les initialisation des signaux et des aiguillages dans 1 s + for i:=1 to Max_Event_det_tick do + begin + for j:=1 to 1100 do + event_det_tick[i].detecteur[j]:=-1; + end; + tick:=0; + + + N_Event_tick:=0 ; // dernier index + NombreImages:=0; detect_Simule[1]:=519; @@ -5754,15 +5837,17 @@ begin //maj_feu(201); //etat_signal_suivant(201,1); //Aiguille_deviee(462); - formdebug.Show; - NivDebug:=3; - aiguillageB[1].Position:=1; - i:=suivant_alg3(553,1,1,3,1); - Affichedebug(intToSTr(i),clred); - //test_memoire_zones(274); + //NivDebug:=3; + //formdebug.Show; + //AfficheDet:=true; + //aiguillageB[1].Position:=1; + //i:=suivant_alg3(553,1,1,3,1); + //Affichedebug(intToSTr(i),clred); + //Affiche(IntToSTR(calcul_zones_det(522,514)),clyellow); + //test_memoire_zones(1011); //i:=detecteur_suivant_El(514,1,518,1); // donne l'élément suivant de AdrPrec à AdrFonc et dans Bis si c'est un aig bis - //i:=etat_signal_suivant(176,1); - //Affiche(IntToSTR(detecteur_suivant_El(531,false,518,false)),clyellow); + //i:=etat_signal_suivant(1001,1); + // Affiche(IntToSTR(detecteur_suivant(25,2,529,1)),clyellow); //i:=Aiguille_deviee(176); //signal_direction(372); Affiche('Fin des initialisations',clyellow); @@ -6006,6 +6091,8 @@ end; procedure TFormPrinc.Timer1Timer(Sender: TObject); var i,a : integer; begin + inc(tick); + if Tempo_init>0 then dec(Tempo_init); if Tempo_init=1 then begin @@ -6419,14 +6506,29 @@ begin ancien_detecteur[adr]:=detecteur[adr]; Detecteur[adr]:=etat=1; detecteur_chgt:=adr; - // mise a jour du tableau evt + // stockage du premier état du détecteur + //if N_Event_tick=0 then stocke_chrono_event_det(Adr,etat); + // front montant sur détecteur + if not(ancien_detecteur[adr]) and (detecteur[adr]) then + begin + FormDebug.MemoDet.Lines.Add(IntToSTR(adr)+' 1'); + stocke_chrono_event_det(Adr,1); + end; + // front descendant sur détecteur if ancien_detecteur[adr] and not(detecteur[adr]) and (N_Event_det<20) then begin - inc(N_event_det); - event_det[N_event_det]:=adr; - dem_calcul_zone:=true; + if N_Event_det<20 then + begin + inc(N_event_det); + event_det[N_event_det]:=adr; + dem_calcul_zone:=true; + FormDebug.MemoDet.Lines.Add(IntToSTR(adr)+' 0'); + end; + stocke_chrono_event_det(Adr,0); end; + if AfficheDet then Affiche('Rétro Détecteur '+intToSTR(adr)+'='+IntToStr(etat),clYellow); + end ; inc(k); @@ -6436,7 +6538,7 @@ begin //Affiche('Ligne traitée'+recuCDM,clLime); if k>=70 then begin Affiche('Erreur 90 : Longrestante='+IntToSTR(length(recuCDM)),clred); Affiche(recuCDM,clred); end; - if dem_calcul_zone then begin calcul_zones; end; // relance tout le calcul des routes + if dem_calcul_zone then calcul_zones; // relance tout le calcul des routes Nbre_recu_cdm:=0; end; @@ -6511,8 +6613,10 @@ begin Affiche('Version 1.02 : vérification automatique des versions',clLime); Affiche('Version 1.1 : gestion des tableaux indicateurs de direction',clLime); Affiche(' gestion du décodeur de signaux Unisemaf Paco (expérimental)',clLime); - Affiche(' changemennt dynamique des feux en cliquant sur son image',clLime); + Affiche(' changement dynamique des feux en cliquant sur son image',clLime); Affiche('Version 1.11 : compatibilité pour la rétrosignalisation non XpressNet (intellibox)',clLime); + Affiche(' verrouillages routes pour trains consécutifs',clLime); + end; procedure TFormPrinc.ClientSocketLenzDisconnect(Sender: TObject; @@ -6521,5 +6625,25 @@ begin parSocket:=False; end; + +procedure TFormPrinc.ChronoDetectClick(Sender: TObject); +var i,j,etat : integer; + s : string; + trouve : boolean; +begin + for i:=1 to N_Event_tick do + begin + s:=IntToSTR(i)+' Tick='+IntToSTR(event_det_tick[i].tick)+' Det='; + trouve:=false; + for j:=1 to 1100 do + begin + etat:=event_det_tick[i].detecteur[j]; + if etat<>-1 then begin s:=s+IntToSTR(j)+'='+intToSTR(etat);trouve:=true;end; + end; + if trouve then Affiche(s,clyellow); + end; + +end; + end. diff --git a/config.cfg b/config.cfg index 15fd99f..a2ee5a3 100644 --- a/config.cfg +++ b/config.cfg @@ -1,112 +1,115 @@ /****************************************** -/ fichier de configuration de signaux complexes -/ cap de bouheyre avec signaux - 2018 -/**************************************** +/ fichier de configuration de signaux_complexes +/ gily - f1iwq - 2018 +/****************************************** / Sans Log=0 / Avec Log=1 : génère un fichier log Log=0 / Affichage du débug du calcul des routes, et enregistrement dans le log si la variable précédente est à 1 TraceDet=0 -/ si 1 envoie un 0 après le pilotage des décodeurs LEB -RazSignaux=0 +/ Envoie un 0 après le pilotage des décodeurs +/ Mettre 1 si utilisation de décodeurs LEB +RazSignaux=1 / / modélisation des aiguillages : détermine les éléments connectés aux 3 branches des aiguilles (Pointe, Droit, Dévié (S) -/ adresse d'aiguillage[B],P=élément vers pointe D=élément vers Droit, S=élément vers dévié -/ B pour adresse d'aiguillage déja utilisée -/ Elément = détecteur (valeur uniquement numérique) ou aiguillage (adresse [TRI,TJS,TJD]+branche de connexion (P S ou D) -/ Exemples : 1,P518,D523,S3P signifie : définition de l'aiguillage @1 : sur pointe relié au détecteur 518 +/ adresse d'aiguillage,P=élément vers pointe D=élément vers Droit, S=élément vers dévié. +/ [60 ou 30 dans le cas d'un aiguillage en position déviée qui doit être fanchie à 30 ou 60] +/ Elément = détecteur (valeur uniquement numérique) ou aiguillage (adresse+branche de connexion (P S ou D) +/ Exemple : 1,P518,D523,S3P signifie : définition de l'aiguillage @1 : sur pointe relié au détecteur 518 / sur Droit relié au détecteur 518 / sur Dévié, relié à l'aiguillage 3 en pointe -/ Voir la documentation des signaux complexes pour une description complete +/ Pour une TJD : 26TJD,D530,S529,P28 +/ P désigne l'autre adresse de la TJD +/ Aiguillage triple +/ / S'il n'y a pas de détecteur connecté à une branche d'aiguillage, mettre 0. -1,P2P,D3P,S1BS -1B,P553,D16P,S1S -2,P1P,D4P,S2BS -2B,P521,D16D,S2S -3,P1D,D522,S5BP -4,P2D,D554,S6BP -5,P9P,S15P,D5BS -5B,P3S,S5D,D545 -6,P10P,S546,D6BS -6B,P4S,D545,S6D -7,P15S,D566,S565 -8,P20P,D566,S565 -9,P5P,D530,S17P -10,P6P,D530,S18P -13,P17S,D563,S564 -14,P18S,D563,S564 -15,P5S,D546,S7P -16,P1BD,S16BS,D2BD -16B,P0,S16S,D557 -17,P9S,D531,S13P -18,P10S,D562,S14P -20,P8P,D547,S0 -21,P25P,S537,D23S -22,P24P,S561,D25S -23,P569,S21D,D538 -24,P22P,S26P,D513 -25,P21P,S22D,D570 -26,P24S,S515,D514 -28,P30P,S29P,D570 -29,P28S,D516,S31P -30,P28P,D32S,S539 -31TRI,27,P28S,D518,S0,S2-517 -32,P571,D538,S30D +1,P518,S3P,D523,30 +2,P12S,S5S,D519 +3,P1S,S5D,D4P +4,P3D,S514,D6S +5,P515,S2S,D3S +6,P516,S4D,D0 +7,P527,S520,D519 +8,P527,S522,D521 +9,P526,S515,D513,60 +10,P19P,S528,D29P,30 +11,P18P,D30D,S525 +12,P517,D20S,S2P +17,P525,D535,S528 +18,P11P,S517,D23P +19,P10P,S531,D22P +20,P520,D21P,S12D +21,P20D,S28D,D28D +22,P19D,S538,D537 +23,P18D,S534,D538 +24,P538,S533,D32S +25,P31S,D529,S27P +26TJD,D530,S529,P28 +28TJD,D21D,S21S,P26 +27,P25S,D530,S537 +29,P10D,S30S,D513,60 +30,P524,S29D,D11D +31,P534,S25P,D0 +32,P22S,S24D,D0 0 // / modélisation du réseau par branche -/ 1 ligne par branche - le sens de parcours de la description n'a pas d'importance. -/ Chaque ligne (branche) doit comporter au moins un détecteur et au moins aiguillage +/ 1 ligne par branche - le sens de parcours de la branche est arbitraire. +/ Chaque ligne (branche) doit commmencer et finir par un aiguillage +/ Une ligne qui finit par un 0 signifie un heurtoir / @ détecteur A=@aiguillage -/ chaque ligne doit commencer par un aiguillage et se terminer par un aiguillage -/ Terminer par les brances par 0 -/ Exemple : 519 est un détecteur - A2 est l'aiguillage 2 - A1B est l'aiguillage 1bis +/ Terminer par 0 +/ Exemple : 519 est un détecteur - A2 est l'aiguillage 2 / -/ rouge - jaune -A20,547,561,A22,A24,A26,515,518,A31,A29,A28,A30,539,522,A3,A1,A2,A4,A6B,545,A5B,A3 -A26,514,517,A31 -A26,515,518,A31 -A24,513,516,A29 -/grande boucle extérieure départ de couche rouge: de 569 à 569 -A23,538,A32,571,553,A1B,A16,A2B,521,569,A23 -/ grande boucle intérieure -A21,A25,570,A28 -A4,554,537,A21 -/ couche jaune -A10,530,A9,A5,A15,546,A6 -A18,562,531,A17 -A14,563,A13 -A14,564,A13 -/ -A7,565,A8 -A7,566,A8 -A16B,557,0 +A2,A12,517,A18,A11,A30,524,521,A8,527,A7,519,A2 +A7,520,A20,A12 +A1,A3,A4,514,522,A8 +A1,523,526,A9,513,A29,A10,A19,531,518,A1 +A9,515,A5 +A11,525,A17,528,A10 +A17,535,533,A24,538,A23 +A7,520,A20,A21,A28,A26,530,A27,A25,A31,534,A23,A18 +A26,529,A25 +A22,537,A27 +A22,A32,A24 +A6,516,0 +A31,0 0 -/ -/ liste des signaux +/ liste des adresses des signaux et leur forme, pour affichage de l'image correspondante , +/ avec ou sans bouton de commande pour le feu blanc, type de décodeur [, type de cible (pour les décodeurs Unisemaf uniquement)] / la liste doit être terminée par une adresse à 0 -/ forme : 2=2 feux(carré violet/blanc) / 3=3 feux / 4=4 feux (carré) / 5=5 feux (carré + blanc) -/ 7=7 feux (carré+blanc + ralentissement / 9=9 feux (blanc ou violet + rappel ralentissement) -/ type de décodeur : 0=feu virtuel 1=digital Bahn 2=CDF 3=LDT 4=LEB -/ l'énumération des détecteurs ne nécessite pas de parenthèses si il est seul, mais il faut des parenthèses si -/ le signal concerne plusieurs voies (donc détecteurs) +/ forme : 2=2 feux(carré violet/blanc) / 3=3 feux / 4=4 feux / 5=5 feux (carré + blanc ou violet) +/ 7=7 feux (blanc ou violet + ralentissement / 9=9 feux (blanc ou violet + rappel ralentissement) +/ Dx : signal directionnel à x feux +/ type de décodeur : 1=digital Bahn 2=CDF 3=LDT 4=LEB 5=NMRA 6=Unisemaf / Notation de chaque ligne: -/ adresse de base du signal, forme, réserve, type de décodeur [, (détecteur,..detecteur , élément suivant ..) , -/ avec ou sans demande de verrouillage du feu au carré (0 ou 1)] -161,4,0,4,(538,A32),0 -169,9,0,4,(539,A30),0, -177,9,0,4,(569,A23),0 -185,4,0,4,(570,A25),0 -193,4,0,4,(516,A29),0 -201,2,0,4,(517,31TRI,518,31TRI),0 -209,9,0,4,(561,547),0 -217,2,0,4,(514,A26,515,A26),0 -225,9,0,4,(516,A29),0 -233,4,0,4,(547,A20),0 -1001,3,0,0,(537,554),0 -1003,3,0,0,(553,A1B),0 -1005,3,0,0,(571,553),0 -1007,3,0,0,(554,A4),0 -1009,3,0,0,(522,539),0 -1011,3,0,0,(521,569),0 -1013,3,0,0,(565,A7),0 +/ adresse de base du signal, forme, avec ou sans bouton de commande du feu blanc, type de décodeur [, détecteur (det2, det3, ...) , élément suivant , +/ avec ou sans demande de verrouillage du feu au carré] +/ +176,7,0,1,(520,A20),1 +190,7,0,1,(523,526),1 +204,9,0,1,(527,A7),1 +218,7,0,1,(525,A17),1 +232,2,1,1,(516,A6),1 +260,9,1,1,(518,A1),1 +274,3,0,1,(524,521),1 +288,7,0,1,(522,A8),1 +302,9,0,1,(526,A9),1 +316,7,1,1,(515,A5),1 +330,7,0,1,(519,A2),1 +344,9,0,1,(528,A10),1 +358,9,0,1,(517,A18),1 +372,D3,1,(A10D)(A19S)(A19D,A22D)(A19D,A22S) +382,D3,1,(A29S,A10S)(A19S)(A19D,A22D)(A19D,A22S) +392,3,0,1,(535,533),1 +420,7,0,1,(529,A25,530,A27,537,A27),1 +448,7,0,1,(533,A24),1 +462,9,0,1,(513,A29),1 +476,9,0,1,(538,A23),1 +497,9,0,4,(531,A19),1 +600,7,0,0,(521,A8),1 +610,9,0,6,(520,A20),0,7 0 +/ + + + diff --git a/verif_version.dcu b/verif_version.dcu index 76a1dd0..7c2be3b 100644 Binary files a/verif_version.dcu and b/verif_version.dcu differ diff --git a/verif_version.pas b/verif_version.pas index 731954b..d1087fc 100644 --- a/verif_version.pas +++ b/verif_version.pas @@ -26,6 +26,8 @@ Const Version='1.11';// sert implementation +uses UnitPrinc; + {$R *.dfm} Procedure Aff(s : string); @@ -172,7 +174,7 @@ begin else formVersion.Free; end; - //if V_utile=V_publie then Affiche('Version Actuelle=Version publiée : votre version est à jour',clLime); + if V_utile=V_publie then Formprinc.Hint:='Votre version '+Version_p+' est à jour'; end; end