This commit is contained in:
f1iwq2
2021-08-05 11:48:19 +02:00
parent ba7be100e6
commit ed7a721910
15 changed files with 789 additions and 544 deletions
+2 -2
View File
@@ -10,5 +10,5 @@ Fichiers sources.
:lien: http://cdmrail.free.fr/ForumCDR/viewtopic.php?f=77&t=3906#p50499
:cdm: http://cdmrail.free.fr/SiteCDR/index.html
* {lien} [Lien vers le fil] -- Forum de CDM rail
* {cdm} [Lin vers CDM rail] -- Site de CDM rail
* {lien}[Lien vers le fil] -- Forum de CDM rail
* {cdm}[Lien vers CDM rail] -- Site de CDM rail
BIN
View File
Binary file not shown.
+133 -146
View File
@@ -1,6 +1,6 @@
object FormConfig: TFormConfig
Left = 285
Top = 127
Left = 277
Top = 203
Hint =
'Modifie les fichiers de configuration selon les s'#233'lections chois' +
'ies'
@@ -17,6 +17,7 @@ object FormConfig: TFormConfig
OldCreateOrder = False
Position = poScreenCenter
OnActivate = FormActivate
OnClose = FormClose
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
@@ -1528,13 +1529,6 @@ object FormConfig: TFormConfig
Height = 13
Caption = 'Element suivant'
end
object Label20: TLabel
Left = 24
Top = 160
Width = 50
Height = 13
Caption = 'LabelTrain'
end
object Label10: TLabel
Left = 80
Top = 120
@@ -1769,13 +1763,14 @@ object FormConfig: TFormConfig
Height = 25
Caption = 'Fermer sans enregistrer la configuration'
TabOrder = 1
OnClick = Button2Click
end
object PageControl: TPageControl
Left = 8
Top = 8
Width = 633
Height = 457
ActivePage = TabSheetCDM
ActivePage = TabSheetAutonome
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -11
@@ -1783,7 +1778,6 @@ object FormConfig: TFormConfig
Font.Style = []
ParentFont = False
TabOrder = 2
OnChange = PageControlChange
object TabSheetCDM: TTabSheet
Caption = 'CDM Rail'
object GroupBox1: TGroupBox
@@ -2104,6 +2098,13 @@ object FormConfig: TFormConfig
Height = 13
Caption = 'Seuil du nombre de d'#233'tecteurs trop distants'
end
object Label41: TLabel
Left = 8
Top = 36
Width = 188
Height = 13
Caption = 'Taille de la fonte de la fen'#234'tre principale'
end
object EditNbDetDist: TEdit
Left = 232
Top = 12
@@ -2112,6 +2113,14 @@ object FormConfig: TFormConfig
TabOrder = 0
Text = 'EditNbDetDist'
end
object EditFonte: TEdit
Left = 232
Top = 32
Width = 25
Height = 21
ReadOnly = True
TabOrder = 1
end
end
end
object TabSheetAutonome: TTabSheet
@@ -2358,10 +2367,8 @@ object FormConfig: TFormConfig
Left = 8
Top = 32
Width = 281
Height = 33
Caption =
'Initialisation des aiguillages suivant liste dans fichier client' +
'-gl.cfg [section init]'
Height = 25
Caption = 'Initialisation des aiguillages '
ParentShowHint = False
ShowHint = False
TabOrder = 1
@@ -2396,20 +2403,6 @@ object FormConfig: TFormConfig
Height = 13
Caption = 'LabelTJD1'
end
object Label35: TLabel
Left = 0
Top = 56
Width = 134
Height = 13
Caption = 'Configuration des aiguillages'
end
object Label36: TLabel
Left = 232
Top = 56
Width = 86
Height = 13
Caption = 'Liste d'#39'initialisation'
end
object GroupBox11: TGroupBox
Left = 328
Top = 32
@@ -2430,20 +2423,6 @@ object FormConfig: TFormConfig
Font.Style = [fsBold]
ParentFont = False
end
object LabelLigne: TLabel
Left = 16
Top = 42
Width = 104
Height = 16
Alignment = taCenter
Caption = ' - '
Font.Charset = ANSI_CHARSET
Font.Color = clBlack
Font.Height = -13
Font.Name = 'Arial'
Font.Style = []
ParentFont = False
end
object GroupBox10: TGroupBox
Left = 8
Top = 88
@@ -2484,7 +2463,10 @@ object FormConfig: TFormConfig
Top = 269
Width = 137
Height = 17
Hint = 'Cocher si l'#39'aiguillage est invers'#233' dans CDM rail'
Caption = 'Inversion de l'#39#233'tat CDM'
ParentShowHint = False
ShowHint = True
TabOrder = 1
OnClick = CheckInverseClick
end
@@ -2494,7 +2476,7 @@ object FormConfig: TFormConfig
Width = 33
Height = 21
TabOrder = 2
OnChange = EditAdrAigChange
OnKeyPress = EditAdrAigKeyPress
end
object ComboBoxAig: TComboBox
Left = 8
@@ -2520,7 +2502,7 @@ object FormConfig: TFormConfig
TabOrder = 4
object LabelHG: TLabel
Left = 10
Top = 17
Top = 21
Width = 9
Height = 16
Caption = 'D'
@@ -2590,27 +2572,40 @@ object FormConfig: TFormConfig
ParentFont = False
end
object LabelTJD1: TLabel
Left = 96
Left = 80
Top = 76
Width = 52
Height = 13
Caption = 'LabelTJD1'
end
object LabelTJD2: TLabel
Left = 168
Left = 176
Top = 76
Width = 52
Height = 13
Caption = 'LabelTJD1'
end
object LabelL: TLabel
Left = 10
Top = 69
Width = 8
Height = 16
Caption = 'L'
Font.Charset = ANSI_CHARSET
Font.Color = clBlack
Font.Height = -13
Font.Name = 'Arial'
Font.Style = [fsBold]
ParentFont = False
Visible = False
end
object Edit_HG: TEdit
Left = 24
Top = 20
Width = 41
Height = 21
TabOrder = 0
Text = 'EditPointe'
OnChange = Edit_HGChange
OnKeyPress = Edit_HGKeyPress
end
object EditPointe_BG: TEdit
Left = 24
@@ -2618,8 +2613,7 @@ object FormConfig: TFormConfig
Width = 41
Height = 21
TabOrder = 1
Text = 'EditPointe_BG'
OnChange = EditPointe_BGChange
OnKeyPress = EditPointe_BGKeyPress
end
object EditP1: TEdit
Left = 88
@@ -2627,8 +2621,7 @@ object FormConfig: TFormConfig
Width = 33
Height = 21
TabOrder = 2
Text = 'EditDDroit'
OnChange = EditP1Change
OnKeyPress = EditP1KeyPress
end
object EditP2: TEdit
Left = 88
@@ -2636,8 +2629,7 @@ object FormConfig: TFormConfig
Width = 33
Height = 21
TabOrder = 3
Text = 'EditDdevie'
OnChange = EditP2Change
OnKeyPress = EditP2KeyPress
end
object EditP3: TEdit
Left = 160
@@ -2645,8 +2637,7 @@ object FormConfig: TFormConfig
Width = 33
Height = 21
TabOrder = 4
Text = 'EditDDroit'
OnChange = EditP3Change
OnKeyPress = EditP3KeyPress
end
object EditP4: TEdit
Left = 160
@@ -2654,8 +2645,7 @@ object FormConfig: TFormConfig
Width = 33
Height = 21
TabOrder = 5
Text = 'EditDDroit'
OnChange = EditP4Change
OnKeyPress = EditP4KeyPress
end
object EditDevie_HD: TEdit
Left = 232
@@ -2663,8 +2653,7 @@ object FormConfig: TFormConfig
Width = 33
Height = 21
TabOrder = 6
Text = 'EditDevie_HD'
OnChange = EditDevie_HDChange
OnKeyPress = EditDevie_HDKeyPress
end
object EditDroit_BD: TEdit
Left = 232
@@ -2672,8 +2661,7 @@ object FormConfig: TFormConfig
Width = 33
Height = 21
TabOrder = 7
Text = 'EditDroit_BD'
OnChange = EditDroit_BDChange
OnKeyPress = EditDroit_BDKeyPress
end
object EditDevieS2: TEdit
Left = 232
@@ -2681,8 +2669,16 @@ object FormConfig: TFormConfig
Width = 33
Height = 21
TabOrder = 8
Text = 'EditDevie_HD'
OnChange = EditDevieS2Change
OnKeyPress = EditDevieS2KeyPress
end
object EditL: TEdit
Left = 40
Top = 68
Width = 25
Height = 21
TabOrder = 9
Visible = False
OnChange = EditLChange
end
end
object ButtonRestaureAig: TButton
@@ -2706,7 +2702,7 @@ object FormConfig: TFormConfig
Height = 21
TabOrder = 6
Visible = False
OnChange = EditAigTripleChange
OnKeyPress = EditAigTripleKeyPress
end
object GroupBox21: TGroupBox
Left = 8
@@ -2717,7 +2713,7 @@ object FormConfig: TFormConfig
TabOrder = 7
object Label37: TLabel
Left = 8
Top = 26
Top = 18
Width = 66
Height = 13
Caption = 'D'#233'vi'#233' ou droit'
@@ -2729,44 +2725,46 @@ object FormConfig: TFormConfig
Height = 13
Caption = 'Temporisation (1/10'#232'me s)'
end
object LabelDevie: TLabel
Left = 200
Top = 24
Width = 3
Height = 13
end
object EditDevDroit: TEdit
Left = 152
Top = 18
Width = 41
Height = 21
TabOrder = 0
OnChange = EditDevDroitChange
end
object EditTempo10: TEdit
Left = 152
Left = 160
Top = 40
Width = 41
Height = 21
TabOrder = 1
OnChange = EditTempo10Change
TabOrder = 0
OnKeyPress = EditTempo10KeyPress
end
object CheckInvInit: TCheckBox
Left = 8
Top = 64
Width = 153
Height = 17
Hint = 'Inverse le pilotage de l'#39'aiguillage'
Caption = 'Pilotage invers'#233
TabOrder = 2
ParentShowHint = False
ShowHint = True
TabOrder = 1
OnClick = CheckInvInitClick
end
object ComboBoxDD: TComboBox
Left = 160
Top = 16
Width = 97
Height = 21
ItemHeight = 13
TabOrder = 2
OnChange = ComboBoxDDChange
Items.Strings = (
'D'#233'vi'#233
'Droit'
'Non positionn'#233)
end
end
end
object RichAig: TRichEdit
Left = 0
Top = 72
Width = 233
Height = 353
Top = 56
Width = 321
Height = 369
Color = clBlack
Font.Charset = DEFAULT_CHARSET
Font.Color = clYellow
@@ -2807,23 +2805,6 @@ object FormConfig: TFormConfig
TabOrder = 4
OnClick = ButtonAjSupClick
end
object RichInitAig: TRichEdit
Left = 232
Top = 72
Width = 89
Height = 353
Color = clBlack
Font.Charset = DEFAULT_CHARSET
Font.Color = clYellow
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
ReadOnly = True
ScrollBars = ssBoth
TabOrder = 5
WordWrap = False
end
end
object TabSheetBranches: TTabSheet
Caption = 'Branches'
@@ -2922,9 +2903,9 @@ object FormConfig: TFormConfig
end
object GroupBox12: TGroupBox
Left = 336
Top = 40
Top = 32
Width = 281
Height = 385
Height = 393
Caption = 'Description du signal'
TabOrder = 0
object ImageSignal: TImage
@@ -2969,7 +2950,7 @@ object FormConfig: TFormConfig
end
object Label17: TLabel
Left = 8
Top = 248
Top = 264
Width = 228
Height = 26
Caption =
@@ -3046,11 +3027,11 @@ object FormConfig: TFormConfig
end
object MemoCarre: TMemo
Left = 8
Top = 280
Top = 296
Width = 265
Height = 89
ScrollBars = ssBoth
TabOrder = 0
TabOrder = 12
WordWrap = False
OnChange = MemoCarreChange
end
@@ -3068,80 +3049,77 @@ object FormConfig: TFormConfig
Top = 120
Width = 41
Height = 21
TabOrder = 2
Text = 'EditDet1'
OnChange = EditDet1Change
TabOrder = 3
OnKeyPress = EditDet1KeyPress
end
object EditSuiv1: TEdit
Left = 184
Top = 120
Width = 41
Height = 21
TabOrder = 3
Text = 'EditSuiv1'
OnChange = EditSuiv1Change
TabOrder = 4
OnKeyPress = EditSuiv1KeyPress
end
object EditDet2: TEdit
Left = 120
Top = 144
Width = 41
Height = 21
TabOrder = 4
Text = 'Edit1'
OnChange = EditDet2Change
TabOrder = 5
OnKeyPress = EditDet2KeyPress
end
object EditSuiv2: TEdit
Left = 184
Top = 144
Width = 41
Height = 21
TabOrder = 5
Text = 'Edit2'
OnChange = EditSuiv2Change
TabOrder = 6
OnKeyPress = EditSuiv2KeyPress
end
object EditDet3: TEdit
Left = 120
Top = 168
Width = 41
Height = 21
TabOrder = 6
Text = 'Edit1'
OnChange = EditDet3Change
TabOrder = 7
OnKeyPress = EditDet3KeyPress
end
object EditSuiv3: TEdit
Left = 184
Top = 168
Width = 41
Height = 21
TabOrder = 7
Text = 'Edit2'
OnChange = EditSuiv3Change
TabOrder = 8
OnKeyPress = EditSuiv3KeyPress
end
object EditDet4: TEdit
Left = 120
Top = 192
Width = 41
Height = 21
TabOrder = 8
Text = 'Edit1'
OnChange = EditDet4Change
TabOrder = 9
OnKeyPress = EditDet4KeyPress
end
object EditSuiv4: TEdit
Left = 184
Top = 192
Width = 41
Height = 21
TabOrder = 9
Text = 'Edit2'
OnChange = EditSuiv4Change
TabOrder = 10
OnKeyPress = EditSuiv4KeyPress
end
object CheckVerrouCarre: TCheckBox
Left = 120
Top = 224
Width = 145
Height = 17
Hint =
'Passe le feu au carr'#233' ci aucun train n'#39'est pr'#233'sent 3 cantons ava' +
'nt le signal'
Caption = 'Verrouillable au carr'#233
TabOrder = 10
ParentShowHint = False
ShowHint = True
TabOrder = 11
OnClick = CheckVerrouCarreClick
end
object EditAdrSig: TEdit
@@ -3149,9 +3127,9 @@ object FormConfig: TFormConfig
Top = 18
Width = 33
Height = 21
TabOrder = 11
TabOrder = 0
Text = ' '
OnChange = EditAdrSigChange
OnKeyPress = EditAdrSigKeyPress
end
object ComboBoxAsp: TComboBox
Left = 144
@@ -3159,7 +3137,7 @@ object FormConfig: TFormConfig
Width = 129
Height = 21
ItemHeight = 13
TabOrder = 12
TabOrder = 2
OnChange = ComboBoxAspChange
Items.Strings = (
'2 feux'
@@ -3179,9 +3157,9 @@ object FormConfig: TFormConfig
Top = 176
Width = 33
Height = 21
TabOrder = 13
TabOrder = 14
Visible = False
OnChange = EditSpecUniChange
OnKeyPress = EditSpecUniKeyPress
end
object Buttonrestaure: TButton
Left = 8
@@ -3192,9 +3170,18 @@ object FormConfig: TFormConfig
Caption = 'Restaurer'
ParentShowHint = False
ShowHint = True
TabOrder = 14
TabOrder = 13
OnClick = ButtonrestaureClick
end
object CheckBoxFB: TCheckBox
Left = 120
Top = 240
Width = 153
Height = 17
Caption = 'Avec demande feu blanc'
TabOrder = 15
OnClick = CheckBoxFBClick
end
end
object RichSig: TRichEdit
Left = 0
@@ -3237,7 +3224,7 @@ object FormConfig: TFormConfig
object ButtonInsFeu: TButton
Left = 144
Top = 32
Width = 113
Width = 145
Height = 17
Caption = 'Ajouter le feu supprim'#233
TabOrder = 4
@@ -3274,8 +3261,8 @@ object FormConfig: TFormConfig
WordWrap = True
end
object GroupBoxPN: TGroupBox
Left = -32
Top = 24
Left = 16
Top = 16
Width = 225
Height = 289
Caption = 'Actionneurs gestion passage '#224' niveau'
@@ -3468,8 +3455,8 @@ object FormConfig: TFormConfig
end
end
object GroupBoxAct: TGroupBox
Left = 16
Top = 104
Left = 48
Top = 176
Width = 225
Height = 225
Caption = 'Actionneur fonction de locomotive '
+463 -284
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+15 -2
View File
@@ -1,6 +1,6 @@
object FormDebug: TFormDebug
Left = 192
Top = 290
Left = 203
Top = 155
Width = 855
Height = 817
Caption = 'Fen'#234'tre de d'#233'bug'
@@ -434,6 +434,19 @@ object FormDebug: TFormDebug
TabOrder = 6
OnClick = CheckBoxAffDebDecSigClick
end
object EditDebugSignal: TEdit
Left = 168
Top = 12
Width = 33
Height = 18
Hint =
'Adresse du signal seul '#224' surveiller ou si 0 surveille tous les s' +
'ignaux'
ParentShowHint = False
ShowHint = True
TabOrder = 7
OnChange = EditDebugSignalChange
end
end
object RichDebug: TRichEdit
Left = 8
+15 -6
View File
@@ -50,6 +50,7 @@ type
ButtonSimuDet1: TButton;
EditSimuDet: TEdit;
ButtonRazTout: TButton;
EditDebugSignal: TEdit;
procedure FormCreate(Sender: TObject);
procedure ButtonEcrLogClick(Sender: TObject);
procedure EditNivDebugKeyPress(Sender: TObject; var Key: Char);
@@ -78,6 +79,7 @@ type
procedure ButtonRazToutClick(Sender: TObject);
procedure RichEditChange(Sender: TObject);
procedure MemoEvtDetChange(Sender: TObject);
procedure EditDebugSignalChange(Sender: TObject);
private
{ Déclarations privées }
public
@@ -91,7 +93,7 @@ Max_Trains=50;
var
FormDebug: TFormDebug;
NivDebug : integer;
NivDebug,signalDebug : integer;
AffSignal,AffAffect,initform,AffFD,debug_dec_sig : boolean;
N_event_det : integer; // index du dernier évènement (de 1 à 20)
event_det : array[1..Max_event_det] of integer;
@@ -114,8 +116,6 @@ var
end;
procedure AfficheDebug(s : string;lacouleur : TColor);
Procedure Raz_tout;
procedure RE_ColorLine(ARichEdit: TRichEdit; ARow: Integer; AColor: TColor);
@@ -139,8 +139,11 @@ end;
procedure AfficheDebug(s : string;lacouleur : TColor);
begin
FormDebug.RichDebug.Lines.add(s);
RE_ColorLine(FormDebug.RichDebug,FormDebug.RichDebug.lines.count-1,lacouleur);
with FormDebug.RichDebug do
begin
Lines.add(s);
RE_ColorLine(FormDebug.RichDebug,FormDebug.RichDebug.lines.count-1,lacouleur);
end;
end;
Procedure Raz_tout;
@@ -361,7 +364,7 @@ begin
if s2[1]='A' then begin type2:=2;delete(s2,1,1);end else type2:=1;
Val(s1,prec,erreur); if erreur<>0 then exit;
Val(s2,Actuel,erreur); if erreur<>0 then exit;
Adr:=detecteur_suivant_El(prec,type1,actuel,type2);
Adr:=detecteur_suivant_El(prec,type1,actuel,type2,1);
if Adr<9996 then AfficheDebug('Le détecteur suivant aux éléments '+IntToSTR(prec)+'/'+IntToSTR(actuel)+' est '+IntToSTR(Adr),clyellow)
else AfficheDebug('Pas trouvé de détecteur suvant aux éléments '+IntToSTR(prec)+'/'+IntToSTR(actuel),clyellow);
NivDebug:=AncDebug;
@@ -449,4 +452,10 @@ begin
SendMessage(MemoEvtDet.handle, WM_VSCROLL, SB_BOTTOM, 0);
end;
procedure TFormDebug.EditDebugSignalChange(Sender: TObject);
var erreur : integer;
begin
val(EditDebugSignal.text,signalDebug,erreur);
end;
end.
BIN
View File
Binary file not shown.
+2 -2
View File
@@ -1,6 +1,6 @@
object FormPrinc: TFormPrinc
Left = 55
Top = 177
Left = 39
Top = 183
Width = 1212
Height = 664
Caption = 'Client TCP-IP CDM Rail ou USB - syst'#232'me LENZ'
+152 -96
View File
@@ -177,6 +177,7 @@ type
const
titre='Signaux complexes GL ';
const espY = 15;//40; // espacement Y entre deux lignes de feux
tempoFeu=100;
MaxAcc=2048; // et aussi adresse maxi d'accessoire
LargImg=50;HtImg=91; // Dimensions image des feux
@@ -208,7 +209,7 @@ type TBranche = record
Adresse : integer;
modele : integer; // 0=n'existe pas 1=aiguillage 2=TJD 3=TJS 4=aiguillage triple
position, // position actuelle : 1=dévié 2=droit (centrale LENZ)
posInit, // position d'initialisation
posInit, // position d'initialisation 1=dévié 2=droit 9=non positionné
Adrtriple, // 2eme adresse pour un aiguillage triple
temps, // temps de pilotage (durée de l'impulsion en x 100 ms)
inversion : integer; // positionné dans fichier config_gl section_init
@@ -245,7 +246,7 @@ TFeu = 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
check : TCheckBox; // pointeur sur structure Checkbox "demande 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é
@@ -349,8 +350,8 @@ var
aiguillage : array[0..MaxAcc] of Taiguillage;
// signaux - L'index du tableau n'est pas son adresse
feux : array[1..MaxAcc] of Tfeu;
Feu_supprime : Tfeu;
Aig_supprime : TAiguillage;
Feu_supprime,Feu_sauve : Tfeu;
Aig_supprime,Aig_sauve : TAiguillage;
Fimage : Timage;
BrancheN : array[1..100,1..200] of TBranche; //
@@ -383,7 +384,7 @@ procedure Pilote_acc0_X(adresse : integer;octet : byte);
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 detecteur_suivant_El(el1: integer;TypeDet1 : integer;el2 : integer;TypeDet2,alg : integer) : integer ;
function test_memoire_zones(adresse : integer) : boolean;
function PresTrainPrec(AdrFeu : integer) : boolean;
function cond_carre(adresse : integer) : boolean;
@@ -1097,9 +1098,6 @@ begin
begin
FenRich.lines.add(s);
RE_ColorLine(FenRich,FenRich.lines.count-1,lacouleur);
//FenRich.SetFocus;
//FenRich.SelStart := FenRich.GetTextLen;
//FenRich.Perform(EM_SCROLLCARET, 0, 0);
end;
end;
@@ -1257,9 +1255,9 @@ 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;
var TypeFeu,adresse : integer;
s : string;
const espY = 15;//40; // espacement Y entre deux lignes de feux
begin
TypeFeu:=feux[rang].aspect;
if typeFeu<=0 then exit;
@@ -1267,7 +1265,7 @@ begin
with Feux[rang].Img do
begin
Parent:=Formprinc.ScrollBox1; // dire que l'image est dans la scrollBox1
Name:='ImageFeu'+IntToSTR(rang); // nom de l'image - sert à identifier le composant si on fait clic droit.
//Name:='ImageFeu'+IntToSTR(rang); // nom de l'image - sert à identifier le composant si on fait clic droit.
Top:=(HtImg+espY+20)*((rang-1) div NbreImagePLigne); // détermine les points d'origine
Left:=10+ (LargImg+5)*((rang-1) mod (NbreImagePLigne));
width:=57;
@@ -1289,10 +1287,11 @@ begin
picture.Bitmap:=Select_dessin_feu(TypeFeu);
// 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;
adresse:=Feux[rang].adresse;
if TypeFeu=2 then EtatSignalCplx[adresse]:=violet_F;
if TypeFeu=3 then EtatSignalCplx[adresse]:=semaphore_F;
if (TypeFeu>3) and (TypeFeu<10) then EtatSignalCplx[adresse]:=carre_F;
if TypeFeu>10 then EtatSignalCplx[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);
@@ -1314,8 +1313,8 @@ begin
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
//Feux[rang].check.onClick:=formprinc.proc_checkBoxFB; // affecter l'adresse de la procédure de traitement quand on clique dessus non utilisé
Feux[rang].check.Hint:=intToSTR(adresse); // affecter l'adresse du feu dans le HINT pour pouvoir le retrouver plus tard
with Feux[rang].Check do
begin
@@ -1326,7 +1325,8 @@ begin
Left:=10+ (LargImg+5)*((rang-1) mod (NbreImagePLigne));
BringToFront;
end;
end;
end
else Feux[rang].check:=nil;
end;
// calcule le checksum d'une trame
@@ -2597,7 +2597,7 @@ begin
if (UniSem<>2) and (UniSem<>3) and (UniSem<>4) and (UniSem<>51) and (UniSem<>52) and (UniSem<>71) and (UniSem<>72) and (UniSem<>73) and
((UniSem<90) or (UniSem>99)) then begin verif_UniSemaf:=1;exit;end;
aspect:=feux[adresse].aspect;
aspect:=feux[index_feu(adresse)].aspect;
if ((aspect=2) and (UniSem=2)) or
((aspect=3) and (UniSem=3)) or
((aspect=4) and (UniSem=4)) or
@@ -2615,10 +2615,10 @@ var s,sa,chaine,SOrigine: string;
trouve_sec_init,trouve_init_aig,trouve_lay,trouve_IPV4_INTERFACE,trouve_PROTOCOLE_SERIE,trouve_INTER_CAR,
trouve_Tempo_maxi,trouve_Entete,trouve_tco,trouve_cdm,trouve_Serveur_interface,trouve_fenetre,
trouve_NOTIF_VERSION,trouve_verif_version,trouve_fonte,trouve_tempo_aig,trouve_raz,trouve_section_aig,
pds,trouve_section_branche,trouve_section_sig,trouve_section_act : boolean;
pds,trouve_section_branche,trouve_section_sig,trouve_section_act,compile_init_cfg : 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,itl,
postjd,postjs,nv,it,Num_Champ,asp : integer;
postjd,postjs,nv,it,Num_Champ,asp,inversion : integer;
label ici1,ici2,ici3,ici4 ;
function lit_ligne : string ;
@@ -2674,6 +2674,7 @@ var s,sa,chaine,SOrigine: string;
end;
begin
compile_init_cfg:=true;
debugConfig:=false;
trouve_NbDetDist:=false;
trouve_ipv4_PC:=false;
@@ -2975,6 +2976,28 @@ begin
virgule:=pos(',',enregistrement);if virgule=0 then virgule:=length(enregistrement)+1;
delete(enregistrement,1,virgule);
end;
// Init aiguillage
i:=pos('INIT(',enregistrement);
if i=1 then
begin
compile_init_cfg:=false; // ne pas compiler la section init du fichier config-gl.cfg
inc(num_champ);
delete(enregistrement,i,i+4);
Val(enregistrement,position,erreur);
i:=pos(',',enregistrement);
if i<>0 then delete(enregistrement,1,i);
Val(enregistrement,j,erreur);
i:=pos(',',enregistrement);
if i<>0 then delete(enregistrement,1,i);
Val(enregistrement,inversion,erreur);
aiguillage[maxaiguillage].temps:=j;
aiguillage[maxaiguillage].inversion:=inversion;
aiguillage[maxaiguillage].posinit:=position;
i:=pos(')',enregistrement);
delete(enregistrement,1,i);
end;
inc(itl);
until (enregistrement='') or (itl>3);
if itl>4 then begin Affiche('Erreur 400 ligne '+sOrigine,clred);closefile(fichier);exit;end;
@@ -3039,7 +3062,6 @@ begin
end;
until (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);
@@ -3259,11 +3281,9 @@ begin
inc(nv);
trouve_fonte:=true;
delete(s,i,length(sa));
TailleFonte:=StrToINT(s);
with FormPrinc.FenRich do
begin
Font.Size:=TailleFonte;
end;
val(s,TailleFonte,erreur);
if (TailleFonte<8) or (tailleFonte>25) then taillefonte:=10;
FormPrinc.FenRich.Font.Size:=TailleFonte;
end;
// adresse ip et port de CDM
@@ -3277,8 +3297,9 @@ begin
i:=pos(':',s);
if i<>0 then
begin
adresseIPCDM:=copy(s,1,i-1);Delete(s,1,i);portCDM:=StrToINT(s);
if portCDM=0 then affiche('Erreur port nul : '+s,clred);
adresseIPCDM:=copy(s,1,i-1);Delete(s,1,i);
val(s,portCDM,erreur);
if (portCDM=0) or (portCDM>65535) or (erreur<>0) then affiche('Erreur port CDM : '+s,clred);
end
else affiche('Erreur adresse ip cdm rail '+s,clred);
end;
@@ -3390,11 +3411,18 @@ begin
end;
i:=pos(uppercase(section_init),s);
if i<>0 then
if (i<>0) then
begin
inc(nv);
trouve_sec_init:=true;
compile_section_init;
if compile_init_cfg then
begin
trouve_sec_init:=true;
compile_section_init;
inc(nv);
Affiche('compilation de la section [init aig]',cllime);
end;
Affiche('Attention la section [init_aig] n''est plus gérée, elle est déplacée dans la configuration des aiguillages',clWhite);
Affiche('Veuillez regénérer les fichiers de configuration: ',clWhite);
Affiche('Menu Divers/configuration bouton "Enregistrement de la configuration et fermer"',clWhite);
end;
sa:=uppercase(verif_version_ch)+'=';
@@ -3491,30 +3519,27 @@ begin
end;
inc(it);
until (Nv>=19) or (it>30);
until ((Nv>=19) and compile_init_cfg) or ((Nv>=18) and not(compile_init_cfg)) or (it>30);
//affiche(IntToSTR(Nv)+' variables',cyan);
s:='';
if (nv<19) then s:='ERREUR: manque variables dans config-gl.cfg :';
if not(trouve_NbDetDist) then s:=s+' '+nb_det_dist_ch;
if not(trouve_ipv4_PC) then s:=s+' '+IpV4_PC_ch;
if not(trouve_retro) then s:=s+' '+retro_ch;
if not(trouve_sec_init) then s:=s+' '+section_init;
if not(trouve_init_aig) then s:=s+' '+INIT_AIG_ch;
if not(trouve_lay) then s:=s+' '+LAY_ch;
if not(trouve_INTER_CAR) then s:=s+' '+INTER_CAR_ch;
if not(trouve_Tempo_maxi) then s:=s+' '+Tempo_maxi_ch;
if not(trouve_Entete) then s:=s+' '+Entete_ch;
if not(trouve_TCO) then s:=s+' '+TCO_ch;
if not(trouve_CDM) then s:=s+' '+CDM_ch;
if not(trouve_Serveur_interface) then s:=s+' '+Serveur_interface_ch;
if not(trouve_fenetre) then s:=s+' '+fenetre_ch;
if not(trouve_tempo_aig) then s:=s+' '+tempo_aig_ch;
if not(trouve_NOTIF_VERSION) then s:=s+' '+NOTIF_VERSION_ch;
if not(trouve_verif_version) then s:=s+' '+verif_version_ch;
if not(trouve_fonte) then s:=s+' '+fonte_ch;
if s<>'' then affiche(s,clred);
s:='';//Affiche(intToSTR(Nv),clred);
if not(trouve_NbDetDist) then s:=nb_det_dist_ch;
if not(trouve_ipv4_PC) then s:=IpV4_PC_ch;
if not(trouve_retro) then s:=retro_ch;
//if not(trouve_sec_init) and compile_init_cfg then s:=section_init;
if not(trouve_init_aig) then s:=INIT_AIG_ch;
if not(trouve_lay) then s:=LAY_ch;
if not(trouve_INTER_CAR) then s:=INTER_CAR_ch;
if not(trouve_Tempo_maxi) then s:=Tempo_maxi_ch;
if not(trouve_Entete) then s:=Entete_ch;
if not(trouve_TCO) then s:=TCO_ch;
if not(trouve_CDM) then s:=CDM_ch;
if not(trouve_Serveur_interface) then s:=Serveur_interface_ch;
if not(trouve_fenetre) then s:=fenetre_ch;
if not(trouve_tempo_aig) then s:=tempo_aig_ch;
if not(trouve_NOTIF_VERSION) then s:=NOTIF_VERSION_ch;
if not(trouve_verif_version) then s:=verif_version_ch;
if not(trouve_fonte) then s:=fonte_ch;
if s<>'' then affiche('ERREUR: manque variables dans config-gl.cfg '+s,clred);
closefile(fichier);
verif_coherence;
@@ -3622,7 +3647,8 @@ begin
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);
if NivDebug=3 then
AfficheDebug('Alg3 précédent='+intToSTR(prec)+'/'+intToStr(TypeElprec)+' actuel='+intToSTR(actuel)+'/'+IntToSTR(typeElActuel)+' Alg='+intToSTr(alg),clyellow);
// trouver les éléments du précédent
trouve_element(prec,TypeELPrec,1); // branche_trouve IndexBranche_trouve
if IndexBranche_trouve=0 then
@@ -4187,9 +4213,10 @@ end;
// algo= type d'algorythme pour suivant_alg3
function detecteur_suivant(prec : integer;TypeElPrec : integer;actuel : integer;TypeElActuel,algo : integer) : integer ;
var actuelCalc,PrecCalc,j,AdrSuiv ,indexCalc,
TypeprecCalc,TypeActuelCalc : integer;
TypeprecCalc,TypeActuelCalc : integer;
begin
if NivDebug>=2 then AfficheDebug('Proc Detecteur_suivant '+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)+' Alg='+IntToSTR(algo),clyellow);
j:=0;
PrecCalc:=prec;
@@ -4199,7 +4226,7 @@ begin
// étape 1 trouver le sens
repeat
inc(j);
AdrSuiv:=suivant_alg3(precCalc,TypeprecCalc,actuelCalc,TypeActuelCalc,algo);
AdrSuiv:=suivant_alg3(precCalc,TypeprecCalc,actuelCalc,TypeActuelCalc,algo);
indexCalc:=index_aig(actuelCalc);
if (typeGen=2) and false then // si le précédent est une TJD/S et le suivant aussi
begin
@@ -4290,13 +4317,13 @@ end;
// 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 ;
function detecteur_suivant_El(el1: integer;TypeDet1 : integer;el2 : integer;TypeDet2,alg : integer) : integer ;
var IndexBranche_det1,IndexBranche_det2,branche_trouve_det1,branche_trouve_det2,i,
j,AdrPrec,Adr,AdrFonc,TypePrec,TypeFonc,i1,N_det : 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);
@@ -4362,7 +4389,7 @@ begin
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);
if (AdrFonc<>0) or (TypeFonc<>0) then Adr:=suivant_alg3(AdrPrec,TypePrec,AdrFonc,TypeFonc,1) else
if (AdrFonc<>0) or (TypeFonc<>0) then Adr:=suivant_alg3(AdrPrec,TypePrec,AdrFonc,TypeFonc,alg) else
begin
Adr:=9999;
end;
@@ -4401,7 +4428,7 @@ begin
i:=0;
repeat
//AfficheDebug('Engage '+IntToSTR(AdrPrec)+','+IntToSTR(typePrec)+'/'+IntToSTR(AdrFonc)+','+IntToSTR(typeFonc),clyellow);
Adr:=suivant_alg3(AdrPrec,TypePrec,AdrFonc,TypeFonc,1);
Adr:=suivant_alg3(AdrPrec,TypePrec,AdrFonc,TypeFonc,alg);
//AfficheDebug('Sortie Alg3: '+IntToSTR(Adr)+'/'+intToSTR(typeGen),clyellow);
if NivDebug=3 then
@@ -5006,7 +5033,7 @@ 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);
det_suiv:=detecteur_suivant_el(det1,1,det2,1,1);
if det_suiv=det3 then begin test_route_valide:=10;exit;end;
test_route_valide:=9999;
@@ -5018,7 +5045,7 @@ begin
begin
test_route_valide:=0;exit;
// si manipulation proche aiguillage
det_suiv:=detecteur_suivant_el(det3,1,det2,1);
det_suiv:=detecteur_suivant_el(det3,1,det2,1,1);
if (det_suiv>=9996) or (det1<>det_suiv) then begin test_route_valide:=0; NivDebug:=0;exit;end;
end;
test_route_valide:=10 ;
@@ -5075,20 +5102,20 @@ begin
if feux[i].Btype_suiv4=4 then Btype_el_suivant:=2;
end;
if (det_initial<>0) then
begin
begin
DetPrec1:=detecteur_suivant(Adr_El_Suiv,Btype_el_suivant,det_initial,1,2); // 2= algo2 = arret sur aiguillage en talon mal positionné
if nivdebug=3 then afficheDebug('detPrec1='+intToSTR(DetPrec1),clorange);
if DetPrec1<1024 then // route bloquée par aiguillage mal positionné
begin
if detPrec1<>0 then DetPrec2:=detecteur_suivant_El(det_initial,1,DetPrec1,1) else DetPrec2:=0;
if detPrec1<>0 then DetPrec2:=detecteur_suivant_El(det_initial,1,DetPrec1,1,2) else DetPrec2:=0;
if nivdebug=3 then afficheDebug('detPrec2='+intToSTR(DetPrec2),clorange);
if DetPrec2<1024 then
begin
if detPrec2<>0 then DetPrec3:=detecteur_suivant_El(DetPrec1,1,DetPrec2,1) else DetPrec3:=0;
if detPrec2<>0 then DetPrec3:=detecteur_suivant_El(DetPrec1,1,DetPrec2,1,2) else DetPrec3:=0;
if nivdebug=3 then afficheDebug('detPrec3='+intToSTR(DetPrec3),clorange);
if DetPrec3<1024 then
begin
if detPrec3<>0 then DetPrec4:=detecteur_suivant_El(DetPrec2,1,DetPrec3,1) else DetPrec4:=0;
if detPrec3<>0 then DetPrec4:=detecteur_suivant_El(DetPrec2,1,DetPrec3,1,2) else DetPrec4:=0;
if nivdebug=3 then afficheDebug('detPrec4='+intToSTR(DetPrec4),clorange);
if DetPrec4<1024 then
begin
@@ -5122,7 +5149,7 @@ 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,Adr_det,etat,Aig,Adr_El_Suiv,
var Adr_det,etat,Aig,Adr_El_Suiv,
Btype_el_suivant,modele,index : integer ;
PresTrain,Aff_semaphore,car : boolean;
code,combine : word;
@@ -5130,16 +5157,17 @@ var i,Adr_det,etat,Aig,Adr_El_Suiv,
begin
s:='Traitement du feu '+intToSTR(Adrfeu)+'------------------------------------';
if signalDebug=AdrFeu then AffSignal:=true;
if AffSignal then AfficheDebug(s,clOrange);
i:=index_feu(Adrfeu);
index:=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;
modele:=Feux[index].aspect;
Adr_det:=Feux[index].Adr_det1; // détecteur sur le signal
Adr_El_Suiv:=Feux[index].Adr_el_suiv1; // adresse élément suivant au feu
Btype_el_suivant:=Feux[index].Btype_suiv1;
// signal directionnel ?
if (modele>10) then
begin
@@ -5179,7 +5207,7 @@ begin
}
// signal à 2 feux = carré violet+blanc
if (Feux[i].aspect=2) then //or (feux[i].check<>nil) then // si carré violet
if (Feux[index].aspect=2) then //or (feux[i].check<>nil) then // si carré violet
begin
//AfficheDebug('Feux à 2 feux',CLOrange);
// si aiguillage après signal mal positionnées
@@ -5201,21 +5229,21 @@ begin
//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
if (Feux[index].aspect>=3) and (EtatSignalCplx[AdrFeu]<>violet_F) then
begin
PresTrain:=false;
// détecteurs précédent le feu , pour déterminer si leurs mémoires de zones sont à 1 pour libérer le carré
if (Feux[i].VerrouCarre) and (Feux[i].aspect>=4) then presTrain:=PresTrainPrec(AdrFeu);
if (Feux[index].VerrouCarre) and (Feux[index].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é
car:=carre_signal(AdrFeu);
// conditions supplémentaires de carré en fonction des aiguillages décrits
car:=cond_carre(AdrFeu) or car;
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)
if (Feux[index].aspect>=4) and ( (not(PresTrain) and Feux[index].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
@@ -5232,12 +5260,11 @@ begin
end
else
begin
// si aiguille locale déviée
Aig:=Aiguille_deviee(Adrfeu);
index:=index_aig(Aig);
if (aig<>0) and (feux[i].aspect>=9) then // si le signal peut afficher un rappel et aiguille déviée
// si aiguille locale déviée
if (aig<>0) and (feux[index].aspect>=9) then // si le signal peut afficher un rappel et aiguille déviée
begin
if AffSignal then AfficheDebug('Aiguille '+intToSTR(aig)+' déviée',clYellow);
if AffSignal then AfficheDebug('Aiguille '+intToSTR(AdrFeu)+' déviée',clYellow);
EtatSignalCplx[AdrFeu]:=0;
if (aiguillage[index].vitesse=30) or (aiguillage[index].vitesse=0) then Maj_Etat_Signal(AdrFeu,rappel_30);
if aiguillage[index].vitesse=60 then Maj_Etat_Signal(AdrFeu,rappel_60);
@@ -5275,7 +5302,15 @@ begin
else
// si le signal suivant est jaune
if TestBit(etat,jaune) then Maj_Etat_Signal(AdrFeu,jaune_cli)
else Maj_Etat_Signal(AdrFeu,vert)
else
begin
if feux[index].check<>nil then
begin
if feux[index].check.Checked then Maj_Etat_Signal(AdrFeu,blanc);
end
else
Maj_Etat_Signal(AdrFeu,vert);
end;
end;
end;
end;
@@ -5283,6 +5318,7 @@ begin
end;
end;
envoi_signauxCplx;
if signalDebug=AdrFeu then AffSignal:=false;
end;
Procedure Maj_feux;
@@ -5381,7 +5417,7 @@ begin
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
AdrSuiv:=detecteur_suivant_el(det2,1,det3,1,1); // ici on cherche le suivant à det2 det3, algo=1
if (Adrsuiv>=9996) then
begin
Affiche('Erreur 1500 : pas de suivant sur la route de '+intToSTR(det2)+' à '+intToSTR(det3),clRed);
@@ -5781,12 +5817,9 @@ var s: string;
faire_event,inv : boolean;
prov,i,index : integer;
begin
// vérifier que l'évènement accessoire vient bien d'un aiguillage et pas d'un feu
i:=0;
repeat
inc(i);
until (i>MaxAiguillage) or (i=adresse);
if i>MaxAiguillage then exit; // non ce n'est pas un aiguillage, on sort
// vérifier que l'évènement accessoire vient bien d'un aiguillage et pas d'un feu qu'on pilote (et que cdm renvoie)
index:=index_aig(adresse);
if index>MaxAiguillage then exit; // non ce n'est pas un aiguillage, on sort
// si l'aiguillage est inversé dans CDM et qu'on est en mode autonome, inverser sa position
inv:=false;
@@ -7081,10 +7114,33 @@ begin
demande_etat_acc;
end;
// procédure Event appelée si on clique sur un checkbox des images des feux
// procédure Event appelée si on clique sur un checkbox de demande de feu blanc des images des feux
// non utilisé
procedure TFormprinc.proc_checkBoxFB(Sender : Tobject);
var s : string;
Cb : TcheckBox;
etat,adresse,erreur : integer;
i : word;
coche : boolean;
begin
Maj_feux ; // évalue l'état des signaux
Cb:=Sender as TcheckBox;
coche:=cb.Checked; // état de la checkbox
s:=Cb.Hint;
val(s,adresse,erreur); // adresse du signal correspondant au checkbox cliqué
if erreur=0 then
begin
i:=index_feu(adresse);
etat:=feux[i].EtatSignal;
affiche(IntToSTR(etat),clyellow);
// si le feu est vert et que la coche est mise, substituer le blanc
if (etat=vert_F) and coche then
begin
Maj_Etat_Signal(Adresse,blanc);
Envoi_signauxCplx;
end;
// si pas coché, on revient en normal
if not(coche) then rafraichit;
end;
end;
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+3 -6
View File
@@ -2328,14 +2328,11 @@ begin
AdrSuiv:=BrancheN[IndexMax,i+1].Adresse;
index:=Index_aig(adresse);
// connecté sur position droite : la pointe est à gauche
if aiguillage[Index].Adroit=AdrSuiv then
Bimage:=3; // ou 4
if aiguillage[Index].Adroit=AdrSuiv then Bimage:=3; // ou 4
// connecté sur position déviée : la pointe est à gauche, mais il faut changer de ligne
if aiguillage[Index].Adevie=AdrSuiv then
Bimage:=4; // ou 4
if aiguillage[Index].Adevie=AdrSuiv then Bimage:=4; // ou 4
// connecté sur pointe : la pointe est à droite
if aiguillage[Index].Apointe=AdrSuiv then
Bimage:=5; // ou 2
if aiguillage[Index].Apointe=AdrSuiv then Bimage:=5; // ou 2
TCO[i,ligne].BImage:=Bimage;
end;
+4
View File
@@ -59,6 +59,10 @@ version 3.0 : Ajout des fonctions Nouveau / supprimer feu, accessoires dans le
version 3.1 : Renforcement de la vérification de la configuration.
Modification de la liste d'initialisation des aiguillages en mode autonome.
Indépendance des modifications entre les onglets du panneau de configuration.
Correction d'un bug sur l'affichage des rappels de ralentissement non présentés.
Correction d'un bug sur certains évènements aiguillages.
Correction d'un bug sur présence train avant signal sur aiguille en talon mal positionnée.