This commit is contained in:
f1iwq2
2020-12-28 11:07:33 +01:00
parent db036a7bd8
commit 344b86a9c5
17 changed files with 579 additions and 9212 deletions
+1 -1
View File
@@ -6,7 +6,7 @@
-$F- -$F-
-$G+ -$G+
-$H+ -$H+
-$I+ -$I-
-$J- -$J-
-$K- -$K-
-$L+ -$L+
+1 -1
View File
@@ -9,7 +9,7 @@ E=0
F=0 F=0
G=1 G=1
H=1 H=1
I=1 I=0
J=0 J=0
K=0 K=0
L=1 L=1
BIN
View File
Binary file not shown.
+23 -6
View File
@@ -1,12 +1,12 @@
object FormConfig: TFormConfig object FormConfig: TFormConfig
Left = 266 Left = 194
Top = 160 Top = 249
Hint = Hint =
'Modifie les fichiers de configuration selon les s'#233'lections chois' + 'Modifie les fichiers de configuration selon les s'#233'lections chois' +
'ies' 'ies'
BorderStyle = bsDialog BorderStyle = bsDialog
Caption = 'Configuration g'#233'n'#233'rale' Caption = 'Configuration g'#233'n'#233'rale'
ClientHeight = 495 ClientHeight = 501
ClientWidth = 858 ClientWidth = 858
Color = clBtnFace Color = clBtnFace
Font.Charset = DEFAULT_CHARSET Font.Charset = DEFAULT_CHARSET
@@ -1776,7 +1776,7 @@ object FormConfig: TFormConfig
Top = 8 Top = 8
Width = 585 Width = 585
Height = 441 Height = 441
ActivePage = TabSheetAct ActivePage = TabSheetBranches
Font.Charset = DEFAULT_CHARSET Font.Charset = DEFAULT_CHARSET
Font.Color = clBackground Font.Color = clBackground
Font.Height = -11 Font.Height = -11
@@ -2120,7 +2120,7 @@ object FormConfig: TFormConfig
ImageIndex = 1 ImageIndex = 1
object Label9: TLabel object Label9: TLabel
Left = 8 Left = 8
Top = 352 Top = 384
Width = 297 Width = 297
Height = 13 Height = 13
Caption = 'Ces param'#232'tres sont utilis'#233's en fonctionnement sans CDM Rail' Caption = 'Ces param'#232'tres sont utilis'#233's en fonctionnement sans CDM Rail'
@@ -2335,7 +2335,7 @@ object FormConfig: TFormConfig
Left = 8 Left = 8
Top = 296 Top = 296
Width = 297 Width = 297
Height = 41 Height = 81
Caption = 'Divers' Caption = 'Divers'
TabOrder = 7 TabOrder = 7
object CheckBoxRazSignaux: TCheckBox object CheckBoxRazSignaux: TCheckBox
@@ -2349,6 +2349,19 @@ object FormConfig: TFormConfig
ShowHint = True ShowHint = True
TabOrder = 0 TabOrder = 0
end end
object CheckBoxInitAig: TCheckBox
Left = 8
Top = 32
Width = 281
Height = 33
Caption =
'Initialisation des aiguillages suivant liste dans fichier client' +
'-gl.cfg [section init]'
ParentShowHint = False
ShowHint = False
TabOrder = 1
WordWrap = True
end
end end
end end
object TabSheetAig: TTabSheet object TabSheetAig: TTabSheet
@@ -2582,6 +2595,7 @@ object FormConfig: TFormConfig
Height = 17 Height = 17
Caption = 'Inversion de l'#39#233'tat CDM' Caption = 'Inversion de l'#39#233'tat CDM'
TabOrder = 7 TabOrder = 7
OnClick = CheckInverseClick
end end
end end
object Edit_HG: TEdit object Edit_HG: TEdit
@@ -2591,6 +2605,7 @@ object FormConfig: TFormConfig
Height = 21 Height = 21
TabOrder = 1 TabOrder = 1
Text = 'EditPointe' Text = 'EditPointe'
OnChange = Edit_HGChange
end end
object RichAig: TRichEdit object RichAig: TRichEdit
Left = 0 Left = 0
@@ -2877,6 +2892,7 @@ object FormConfig: TFormConfig
Color = clBlack Color = clBlack
Lines.Strings = ( Lines.Strings = (
'RichSig') 'RichSig')
ReadOnly = True
ScrollBars = ssBoth ScrollBars = ssBoth
TabOrder = 1 TabOrder = 1
WordWrap = False WordWrap = False
@@ -3202,6 +3218,7 @@ object FormConfig: TFormConfig
Width = 289 Width = 289
Height = 369 Height = 369
Color = clBlack Color = clBlack
ReadOnly = True
ScrollBars = ssVertical ScrollBars = ssVertical
TabOrder = 1 TabOrder = 1
OnMouseDown = RichActMouseDown OnMouseDown = RichActMouseDown
+47 -3
View File
@@ -185,6 +185,7 @@ type
EditNbDetDist: TEdit; EditNbDetDist: TEdit;
Label31: TLabel; Label31: TLabel;
RichAct: TRichEdit; RichAct: TRichEdit;
CheckBoxInitAig: TCheckBox;
procedure ButtonAppliquerEtFermerClick(Sender: TObject); procedure ButtonAppliquerEtFermerClick(Sender: TObject);
procedure Button2Click(Sender: TObject); procedure Button2Click(Sender: TObject);
procedure FormActivate(Sender: TObject); procedure FormActivate(Sender: TObject);
@@ -221,6 +222,8 @@ type
procedure EditEtatFoncSortieChange(Sender: TObject); procedure EditEtatFoncSortieChange(Sender: TObject);
procedure EditTempoChange(Sender: TObject); procedure EditTempoChange(Sender: TObject);
procedure CheckRAZClick(Sender: TObject); procedure CheckRAZClick(Sender: TObject);
procedure Edit_HGChange(Sender: TObject);
procedure CheckInverseClick(Sender: TObject);
private private
{ Déclarations privées } { Déclarations privées }
public public
@@ -254,7 +257,7 @@ var
AdresseIPCDM,AdresseIP,PortCom,recuCDM,residuCDM : string; AdresseIPCDM,AdresseIP,PortCom,recuCDM,residuCDM : string;
portCDM,TempoOctet,TimoutMaxInterface,Valeur_entete,Port,protocole,NumPort, portCDM,TempoOctet,TimoutMaxInterface,Valeur_entete,Port,protocole,NumPort,
LigneCliquee,AncLigneCliquee : integer; LigneCliquee,AncLigneCliquee : integer;
ack_cdm,clicliste : boolean; ack_cdm,clicliste,entreeTCO : boolean;
function config_com(s : string) : boolean; function config_com(s : string) : boolean;
function envoi_CDM(s : string) : boolean; function envoi_CDM(s : string) : boolean;
@@ -265,7 +268,7 @@ procedure sauve_config;
implementation implementation
uses UnitDebug,UnitPrinc; uses UnitDebug,UnitPrinc, UnitTCO;
{$R *.dfm} {$R *.dfm}
@@ -656,7 +659,8 @@ begin
copie_commentaire; copie_commentaire;
// avec ou sans initialisation des aiguillages // avec ou sans initialisation des aiguillages
writeln(fichierN,Init_Aig_ch+'=',IntToSTR(AvecInitAiguillages)); if AvecInitAiguillages then s:='1' else s:='0';
writeln(fichierN,Init_Aig_ch+'='+s);
copie_commentaire; copie_commentaire;
// plein écran // plein écran
@@ -927,6 +931,8 @@ begin
Srvc_PosTrain:=CheckServPosTrains.checked; Srvc_PosTrain:=CheckServPosTrains.checked;
Srvc_Sig:=CheckBoxSrvSig.checked; Srvc_Sig:=CheckBoxSrvSig.checked;
Raz_Acc_signaux:=CheckBoxRazSignaux.checked; Raz_Acc_signaux:=CheckBoxRazSignaux.checked;
AvecInitAiguillages:=CheckBoxInitAig.Checked;
end; end;
if change_srv then services_CDM; if change_srv then services_CDM;
@@ -940,6 +946,13 @@ procedure TFormConfig.ButtonAppliquerEtFermerClick(Sender: TObject);
begin begin
Sauve_config; Sauve_config;
formConfig.close; formConfig.close;
// TCO
if avectco and not(entreeTCO) then
begin
//créée la fenêtre TCO non modale
FormTCO:=TformTCO.Create(nil);
FormTCO.show;
end;
end; end;
procedure TFormConfig.Button2Click(Sender: TObject); procedure TFormConfig.Button2Click(Sender: TObject);
@@ -997,6 +1010,7 @@ begin
CheckInfoVersion.Checked:=notificationVersion; CheckInfoVersion.Checked:=notificationVersion;
CheckLanceCDM.Checked:=LanceCDM; CheckLanceCDM.Checked:=LanceCDM;
CheckAvecTCO.checked:=avecTCO; CheckAvecTCO.checked:=avecTCO;
entreeTCO:=avecTCO;
EditNomLay.Text:=Lay; EditNomLay.Text:=Lay;
RadioButton4.Checked:=ServeurInterfaceCDM=0; RadioButton4.Checked:=ServeurInterfaceCDM=0;
RadioButton5.Checked:=ServeurInterfaceCDM=1; RadioButton5.Checked:=ServeurInterfaceCDM=1;
@@ -1020,6 +1034,7 @@ begin
CheckBoxServAct.checked:=Srvc_Act; CheckBoxServAct.checked:=Srvc_Act;
CheckServPosTrains.checked:=Srvc_PosTrain; CheckServPosTrains.checked:=Srvc_PosTrain;
CheckBoxRazSignaux.checked:=Raz_Acc_signaux; CheckBoxRazSignaux.checked:=Raz_Acc_signaux;
CheckBoxInitAig.checked:=AvecInitAiguillages;
EditDroit_BD.Text:=''; EditDroit_BD.Text:='';
EditPointe_BG.Text:=''; EditPointe_BG.Text:='';
@@ -1628,6 +1643,12 @@ begin
clicliste:=false; clicliste:=false;
end; end;
// on change la valeur de la description du champ HG pour les TJD
procedure change_HG ;
begin
if clicliste then exit;
end;
// on change la valeur de la description de la pointe de l'aiguillage // on change la valeur de la description de la pointe de l'aiguillage
procedure change_Pointe; procedure change_Pointe;
var AdrAig,adr,erreur : integer; var AdrAig,adr,erreur : integer;
@@ -1823,6 +1844,11 @@ begin
change_pointe; change_pointe;
end; end;
procedure TFormConfig.Edit_HGChange(Sender: TObject);
begin
change_HG;
end;
procedure TFormConfig.EditDevie_HDChange(Sender: TObject); procedure TFormConfig.EditDevie_HDChange(Sender: TObject);
begin begin
Change_devie; Change_devie;
@@ -1838,6 +1864,21 @@ begin
Change_s2; Change_s2;
end; end;
procedure TFormConfig.CheckInverseClick(Sender: TObject);
var s : string;
adrAig,erreur : integer;
begin
// récupérer l'adresse de l'aiguillage cliqué
s:=formconfig.RichAig.Lines[lignecliquee];
Val(s,adrAig,erreur);
if checkInverse.Checked then aiguillage[adraig].InversionCDM:=1 else aiguillage[adraig].InversionCDM:=0;
// réencoder la ligne
s:=encode_aig(AdrAig);
formconfig.RichAig.Lines[lignecliquee]:=s;
labelLigne.Caption:=s;
end;
procedure TFormConfig.RadioButtonsansClick(Sender: TObject); procedure TFormConfig.RadioButtonsansClick(Sender: TObject);
var AdrAig,erreur : integer; var AdrAig,erreur : integer;
s : string; s : string;
@@ -2318,6 +2359,9 @@ begin
end; end;
end; end;
end. end.
BIN
View File
Binary file not shown.
+74 -32
View File
@@ -1,8 +1,8 @@
object FormDebug: TFormDebug object FormDebug: TFormDebug
Left = 329 Left = 192
Top = 122 Top = 290
Width = 855 Width = 855
Height = 762 Height = 817
Caption = 'Fen'#234'tre de d'#233'bug' Caption = 'Fen'#234'tre de d'#233'bug'
Color = clWindow Color = clWindow
TransparentColorValue = clTeal TransparentColorValue = clTeal
@@ -16,7 +16,7 @@ object FormDebug: TFormDebug
OnCreate = FormCreate OnCreate = FormCreate
DesignSize = ( DesignSize = (
839 839
724) 779)
PixelsPerInch = 96 PixelsPerInch = 96
TextHeight = 13 TextHeight = 13
object Label1: TLabel object Label1: TLabel
@@ -49,24 +49,6 @@ object FormDebug: TFormDebug
Font.Style = [fsBold, fsItalic] Font.Style = [fsBold, fsItalic]
ParentFont = False ParentFont = False
end end
object Label3: TLabel
Left = 485
Top = 160
Width = 99
Height = 185
Anchors = [akTop, akRight]
AutoSize = False
Caption = 'Label3'
Color = clGray
Font.Charset = ANSI_CHARSET
Font.Color = clWindow
Font.Height = -13
Font.Name = 'Arial Narrow'
Font.Style = []
ParentColor = False
ParentFont = False
WordWrap = True
end
object EditNivDebug: TEdit object EditNivDebug: TEdit
Left = 767 Left = 767
Top = 2 Top = 2
@@ -85,7 +67,7 @@ object FormDebug: TFormDebug
end end
object MemoEvtDet: TMemo object MemoEvtDet: TMemo
Left = 591 Left = 591
Top = 344 Top = 320
Width = 239 Width = 239
Height = 225 Height = 225
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
@@ -99,12 +81,14 @@ object FormDebug: TFormDebug
'Tableau des '#233'v'#232'nements ' 'Tableau des '#233'v'#232'nements '
'fronts descendants d'#233'tecteurs') 'fronts descendants d'#233'tecteurs')
ParentFont = False ParentFont = False
ReadOnly = True
ScrollBars = ssVertical ScrollBars = ssVertical
TabOrder = 1 TabOrder = 1
OnChange = MemoEvtDetChange
end end
object ButtonEcrLog: TButton object ButtonEcrLog: TButton
Left = 487 Left = 487
Top = 464 Top = 312
Width = 97 Width = 97
Height = 29 Height = 29
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
@@ -114,7 +98,7 @@ object FormDebug: TFormDebug
end end
object ButtonRazTampon: TButton object ButtonRazTampon: TButton
Left = 487 Left = 487
Top = 536 Top = 344
Width = 97 Width = 97
Height = 33 Height = 33
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
@@ -125,7 +109,7 @@ object FormDebug: TFormDebug
end end
object ButtonCherche: TButton object ButtonCherche: TButton
Left = 487 Left = 487
Top = 432 Top = 280
Width = 97 Width = 97
Height = 25 Height = 25
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
@@ -135,7 +119,7 @@ object FormDebug: TFormDebug
end end
object ButtonAffEvtChrono: TButton object ButtonAffEvtChrono: TButton
Left = 487 Left = 487
Top = 392 Top = 240
Width = 97 Width = 97
Height = 33 Height = 33
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
@@ -146,7 +130,7 @@ object FormDebug: TFormDebug
end end
object ButtonCop: TButton object ButtonCop: TButton
Left = 487 Left = 487
Top = 344 Top = 192
Width = 97 Width = 97
Height = 41 Height = 41
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
@@ -165,7 +149,7 @@ object FormDebug: TFormDebug
Left = 591 Left = 591
Top = 160 Top = 160
Width = 239 Width = 239
Height = 185 Height = 153
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
Font.Charset = DEFAULT_CHARSET Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite Font.Color = clWhite
@@ -175,12 +159,14 @@ object FormDebug: TFormDebug
HideScrollBars = False HideScrollBars = False
ParentFont = False ParentFont = False
PopupMenu = PopupMenuRE PopupMenu = PopupMenuRE
ReadOnly = True
ScrollBars = ssVertical ScrollBars = ssVertical
TabOrder = 7 TabOrder = 7
OnChange = RichEditChange
end end
object ButtonRazLog: TButton object ButtonRazLog: TButton
Left = 487 Left = 487
Top = 496 Top = 384
Width = 97 Width = 97
Height = 33 Height = 33
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
@@ -191,7 +177,7 @@ object FormDebug: TFormDebug
end end
object GroupBox1: TGroupBox object GroupBox1: TGroupBox
Left = 485 Left = 485
Top = 576 Top = 608
Width = 353 Width = 353
Height = 145 Height = 145
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
@@ -453,15 +439,71 @@ object FormDebug: TFormDebug
Left = 8 Left = 8
Top = 8 Top = 8
Width = 470 Width = 470
Height = 705 Height = 743
Anchors = [akLeft, akTop, akRight, akBottom] Anchors = [akLeft, akTop, akRight, akBottom]
Lines.Strings = ( Lines.Strings = (
'RichDebug') 'RichDebug')
PopupMenu = PopupMenuRD PopupMenu = PopupMenuRD
ReadOnly = True
ScrollBars = ssBoth ScrollBars = ssBoth
TabOrder = 11 TabOrder = 11
OnChange = RichDebugChange OnChange = RichDebugChange
end end
object GroupBox5: TGroupBox
Left = 487
Top = 552
Width = 345
Height = 49
Anchors = [akTop, akRight]
Caption = 'Simulation d'#233'tecteur'
Color = cl3DLight
Font.Charset = DEFAULT_CHARSET
Font.Color = clNavy
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentColor = False
ParentFont = False
TabOrder = 12
object EditSimuDet: TEdit
Left = 8
Top = 16
Width = 73
Height = 21
Hint = 'Adresse d'#39'un d'#233'tecteur'
ParentShowHint = False
ShowHint = True
TabOrder = 0
end
object ButtonSimuDet0: TButton
Left = 120
Top = 16
Width = 75
Height = 25
Caption = 'D'#233'tecteur '#224' 0'
TabOrder = 1
OnClick = ButtonSimuDet0Click
end
object ButtonSimuDet1: TButton
Left = 232
Top = 16
Width = 75
Height = 25
Caption = 'D'#233'tecteur '#224' 1'
TabOrder = 2
OnClick = ButtonSimuDet1Click
end
end
object ButtonRazTout: TButton
Left = 488
Top = 160
Width = 97
Height = 25
Anchors = [akTop, akRight]
Caption = 'RAZ tous trains'
TabOrder = 13
OnClick = ButtonRazToutClick
end
object SaveDialog: TSaveDialog object SaveDialog: TSaveDialog
Left = 768 Left = 768
Top = 488 Top = 488
+61 -4
View File
@@ -14,7 +14,6 @@ type
Label2: TLabel; Label2: TLabel;
SaveDialog: TSaveDialog; SaveDialog: TSaveDialog;
ButtonEcrLog: TButton; ButtonEcrLog: TButton;
Label3: TLabel;
ButtonRazTampon: TButton; ButtonRazTampon: TButton;
ButtonCherche: TButton; ButtonCherche: TButton;
ButtonAffEvtChrono: TButton; ButtonAffEvtChrono: TButton;
@@ -46,6 +45,11 @@ type
RichDebug: TRichEdit; RichDebug: TRichEdit;
PopupMenuRD: TPopupMenu; PopupMenuRD: TPopupMenu;
Copier2: TMenuItem; Copier2: TMenuItem;
GroupBox5: TGroupBox;
ButtonSimuDet0: TButton;
ButtonSimuDet1: TButton;
EditSimuDet: TEdit;
ButtonRazTout: TButton;
procedure FormCreate(Sender: TObject); procedure FormCreate(Sender: TObject);
procedure ButtonEcrLogClick(Sender: TObject); procedure ButtonEcrLogClick(Sender: TObject);
procedure EditNivDebugKeyPress(Sender: TObject; var Key: Char); procedure EditNivDebugKeyPress(Sender: TObject; var Key: Char);
@@ -69,6 +73,11 @@ type
procedure Button2Click(Sender: TObject); procedure Button2Click(Sender: TObject);
procedure Copier2Click(Sender: TObject); procedure Copier2Click(Sender: TObject);
procedure RichDebugChange(Sender: TObject); procedure RichDebugChange(Sender: TObject);
procedure ButtonSimuDet0Click(Sender: TObject);
procedure ButtonSimuDet1Click(Sender: TObject);
procedure ButtonRazToutClick(Sender: TObject);
procedure RichEditChange(Sender: TObject);
procedure MemoEvtDetChange(Sender: TObject);
private private
{ Déclarations privées } { Déclarations privées }
public public
@@ -109,6 +118,7 @@ var
procedure AfficheDebug(s : string;lacouleur : TColor); procedure AfficheDebug(s : string;lacouleur : TColor);
Procedure Raz_tout;
procedure RE_ColorLine(ARichEdit: TRichEdit; ARow: Integer; AColor: TColor); procedure RE_ColorLine(ARichEdit: TRichEdit; ARow: Integer; AColor: TColor);
implementation implementation
@@ -134,16 +144,27 @@ begin
RE_ColorLine(FormDebug.RichDebug,FormDebug.RichDebug.lines.count-1,lacouleur); RE_ColorLine(FormDebug.RichDebug,FormDebug.RichDebug.lines.count-1,lacouleur);
end; end;
Procedure Raz_tout;
var i : integer;
begin
N_Event_tick:=0;
N_event_det:=0;
N_trains:=0;
Formprinc.LabelNbTrains.caption:=IntToSTR(N_trains);
for i:=1 to Max_Trains do Event_det_Train[i].NbEl:=0;
i_simule:=0;
FormDebug.MemoEvtDet.Clear;
FormDebug.Richedit.Clear;
end;
procedure TFormDebug.FormCreate(Sender: TObject); procedure TFormDebug.FormCreate(Sender: TObject);
var s: string; var s: string;
i : integer;
begin begin
EditNivDebug.Text:='0'; EditNivDebug.Text:='0';
s:='Cette fenêtre permet d''afficher des informations sur le '; s:='Cette fenêtre permet d''afficher des informations sur le ';
s:=s+'comportement du programme. Positionner le niveau de 1 à 3 pour'; s:=s+'comportement du programme. Positionner le niveau du débug de 1 à 3 pour';
s:=s+' afficher des informations plus ou moins détaillées.'; s:=s+' afficher des informations plus ou moins détaillées.';
Label3.caption:=s; RichEdit.Lines.add(s);
RichDebug.WordWrap:=false; // interdit la coupure des chaînes en limite du composant RichDebug.WordWrap:=false; // interdit la coupure des chaînes en limite du composant
RichDebug.color:=$33; RichDebug.color:=$33;
initform:=false; initform:=false;
@@ -393,4 +414,40 @@ begin
SendMessage(RichDebug.handle, WM_VSCROLL, SB_BOTTOM, 0); SendMessage(RichDebug.handle, WM_VSCROLL, SB_BOTTOM, 0);
end; end;
procedure TFormDebug.ButtonSimuDet0Click(Sender: TObject);
var det,erreur : integer;
begin
val(EditSimuDet.Text,det,erreur);
if erreur=0 then
begin
Event_Detecteur(det,false,'');
end;
end;
procedure TFormDebug.ButtonSimuDet1Click(Sender: TObject);
var det,erreur : integer;
begin
val(EditSimuDet.Text,det,erreur);
if erreur=0 then
begin
Event_Detecteur(det,true,'');
end;
end;
procedure TFormDebug.ButtonRazToutClick(Sender: TObject);
begin
Raz_tout;
end;
procedure TFormDebug.RichEditChange(Sender: TObject);
begin
SendMessage(RichEdit.handle, WM_VSCROLL, SB_BOTTOM, 0);
end;
procedure TFormDebug.MemoEvtDetChange(Sender: TObject);
begin
SendMessage(MemoEvtDet.handle, WM_VSCROLL, SB_BOTTOM, 0);
end;
end. end.
BIN
View File
Binary file not shown.
+120 -86
View File
@@ -1,6 +1,6 @@
object FormPrinc: TFormPrinc object FormPrinc: TFormPrinc
Left = 1296 Left = 44
Top = 222 Top = 270
Width = 1212 Width = 1212
Height = 664 Height = 664
Caption = 'Client TCP-IP CDM Rail ou USB - syst'#232'me LENZ' Caption = 'Client TCP-IP CDM Rail ou USB - syst'#232'me LENZ'
@@ -24,7 +24,7 @@ object FormPrinc: TFormPrinc
TextHeight = 13 TextHeight = 13
object LabelTitre: TLabel object LabelTitre: TLabel
Left = 8 Left = 8
Top = 16 Top = 8
Width = 173 Width = 173
Height = 18 Height = 18
Caption = 'Signaux complexes GL' Caption = 'Signaux complexes GL'
@@ -1203,9 +1203,9 @@ object FormPrinc: TFormPrinc
end end
object ScrollBox1: TScrollBox object ScrollBox1: TScrollBox
Left = 631 Left = 631
Top = 168 Top = 176
Width = 537 Width = 546
Height = 377 Height = 385
HorzScrollBar.Smooth = True HorzScrollBar.Smooth = True
HorzScrollBar.Tracking = True HorzScrollBar.Tracking = True
VertScrollBar.Smooth = True VertScrollBar.Smooth = True
@@ -1218,96 +1218,61 @@ object FormPrinc: TFormPrinc
object GroupBox1: TGroupBox object GroupBox1: TGroupBox
Left = 631 Left = 631
Top = 5 Top = 5
Width = 249 Width = 266
Height = 129 Height = 52
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
Caption = 'Commande d'#39'accessoires' Caption = 'Commande d'#39'accessoires'
TabOrder = 1 TabOrder = 1
object Label2: TLabel object Label2: TLabel
Left = 7 Left = 7
Top = 16 Top = 24
Width = 58 Width = 58
Height = 13 Height = 13
Caption = 'adresse acc' Caption = 'adresse acc'
end 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 object EditAdresse: TEdit
Left = 8 Left = 72
Top = 32 Top = 24
Width = 57 Width = 49
Height = 21 Height = 21
Hint = 'Adresse accessoire ou de CV' Hint = 'Adresse accessoire ou de CV'
TabOrder = 0 TabOrder = 0
Text = '1' Text = '1'
end end
object Editval: TEdit object ButtonDroit: TButton
Left = 72 Left = 132
Top = 32 Top = 16
Width = 41 Width = 53
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 Height = 25
Hint = 'Ecriture CV en mode direct sur voie de programmation' Hint = 'Ecriture des accessoires DCC'
Caption = 'Ecriture CV - 1 '#224' 255 par bus XpressNet' Caption = 'droit'
TabOrder = 1
WordWrap = True
OnClick = ButtonDroitClick
end
object ButtonDevie: TButton
Left = 192
Top = 16
Width = 57
Height = 25
Hint = 'Ecriture des accessoires DCC'
Caption = 'devi'#233
TabOrder = 2 TabOrder = 2
WordWrap = True WordWrap = True
OnClick = ButtonEcrCVClick OnClick = ButtonDevieClick
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
end end
object StatusBar1: TStatusBar object StatusBar1: TStatusBar
Left = 0 Left = 0
Top = 576 Top = 584
Width = 1196 Width = 1196
Height = 30 Height = 22
Panels = <> Panels = <>
SimplePanel = True SimplePanel = True
end end
object MSCommUSBLenz: TMSComm object MSCommUSBLenz: TMSComm
Left = 720 Left = 1160
Top = 144 Top = 192
Width = 32 Width = 32
Height = 32 Height = 32
OnComm = MSCommUSBLenzComm OnComm = MSCommUSBLenzComm
@@ -1316,10 +1281,10 @@ object FormPrinc: TFormPrinc
00020000802500000000080000000000000000003F00000011000000} 00020000802500000000080000000000000000003F00000011000000}
end end
object Panel1: TPanel object Panel1: TPanel
Left = 887 Left = 903
Top = 5 Top = 5
Width = 281 Width = 282
Height = 129 Height = 132
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
TabOrder = 4 TabOrder = 4
object BoutonRaf: TButton object BoutonRaf: TButton
@@ -1385,19 +1350,20 @@ object FormPrinc: TFormPrinc
OnClick = ButtonTestClick OnClick = ButtonTestClick
end end
object ButtonArretSimu: TButton object ButtonArretSimu: TButton
Left = 104 Left = 8
Top = 88 Top = 88
Width = 81 Width = 89
Height = 33 Height = 33
Caption = 'Arret simulation' Caption = 'Arret simulation'
TabOrder = 6 TabOrder = 6
Visible = False Visible = False
WordWrap = True
OnClick = ButtonArretSimuClick OnClick = ButtonArretSimuClick
end end
object ButtonAffTCO: TButton object ButtonAffTCO: TButton
Left = 8 Left = 104
Top = 88 Top = 88
Width = 89 Width = 81
Height = 33 Height = 33
Caption = 'Affiche TCO' Caption = 'Affiche TCO'
TabOrder = 7 TabOrder = 7
@@ -1415,12 +1381,11 @@ object FormPrinc: TFormPrinc
end end
end end
object Panel2: TPanel object Panel2: TPanel
Left = 631 Left = 904
Top = 136 Top = 144
Width = 153 Width = 281
Height = 25 Height = 25
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
Caption = 'Panel2'
TabOrder = 5 TabOrder = 5
object Label1: TLabel object Label1: TLabel
Left = 16 Left = 16
@@ -1430,7 +1395,7 @@ object FormPrinc: TFormPrinc
Caption = 'Nombre de trains : ' Caption = 'Nombre de trains : '
end end
object LabelNbTrains: TLabel object LabelNbTrains: TLabel
Left = 120 Left = 248
Top = 2 Top = 2
Width = 9 Width = 9
Height = 19 Height = 19
@@ -1445,7 +1410,7 @@ object FormPrinc: TFormPrinc
end end
object StaticText: TStaticText object StaticText: TStaticText
Left = 16 Left = 16
Top = 560 Top = 565
Width = 14 Width = 14
Height = 17 Height = 17
Anchors = [akLeft, akRight, akBottom] Anchors = [akLeft, akRight, akBottom]
@@ -1454,9 +1419,9 @@ object FormPrinc: TFormPrinc
end end
object FenRich: TRichEdit object FenRich: TRichEdit
Left = 8 Left = 8
Top = 48 Top = 32
Width = 617 Width = 617
Height = 497 Height = 529
Anchors = [akLeft, akTop, akRight, akBottom] Anchors = [akLeft, akTop, akRight, akBottom]
Color = clBlack Color = clBlack
Font.Charset = DEFAULT_CHARSET Font.Charset = DEFAULT_CHARSET
@@ -1471,11 +1436,73 @@ object FormPrinc: TFormPrinc
TabOrder = 7 TabOrder = 7
OnChange = FenRichChange OnChange = FenRichChange
end end
object GroupBox2: TGroupBox
Left = 632
Top = 64
Width = 265
Height = 105
Anchors = [akTop, akRight]
Caption = 'Variables CV'
TabOrder = 8
object Label3: TLabel
Left = 208
Top = 34
Width = 14
Height = 13
Caption = 'CV'
WordWrap = True
end
object LabelVCV: TLabel
Left = 208
Top = 55
Width = 47
Height = 13
Caption = 'Valeur CV'
WordWrap = True
end
object ButtonEcrCV: TButton
Left = 8
Top = 16
Width = 153
Height = 33
Hint = 'Ecriture CV en mode direct sur voie de programmation'
Caption = 'Ecriture CV - 1 '#224' 255 par bus XpressNet'
TabOrder = 0
WordWrap = True
OnClick = ButtonEcrCVClick
end
object ButtonLitCV: TButton
Left = 8
Top = 64
Width = 153
Height = 33
Hint = 'Lecture CV en mode direct sur voie de programmation'
Caption = 'Lecture CV - 1 '#224' 255 par le bus XpressNet'
Enabled = False
TabOrder = 1
WordWrap = True
OnClick = ButtonLitCVClick
end
object EditCV: TEdit
Left = 168
Top = 32
Width = 33
Height = 21
TabOrder = 2
end
object EditVal: TEdit
Left = 168
Top = 52
Width = 33
Height = 21
TabOrder = 3
end
end
object Timer1: TTimer object Timer1: TTimer
Interval = 100 Interval = 100
OnTimer = Timer1Timer OnTimer = Timer1Timer
Left = 888 Left = 1168
Top = 80 Top = 224
end end
object ClientSocketLenz: TClientSocket object ClientSocketLenz: TClientSocket
Active = False Active = False
@@ -1596,6 +1623,13 @@ object FormPrinc: TFormPrinc
' sur la voie de programmation' ' sur la voie de programmation'
OnClick = LireunfichierdeCV1Click OnClick = LireunfichierdeCV1Click
end end
object N6: TMenuItem
Caption = '-'
end
object Apropos1: TMenuItem
Caption = 'A propos'
OnClick = Apropos1Click
end
end end
end end
object ClientSocketCDM: TClientSocket object ClientSocketCDM: TClientSocket
+233 -150
View File
@@ -27,8 +27,6 @@ type
GroupBox1: TGroupBox; GroupBox1: TGroupBox;
EditAdresse: TEdit; EditAdresse: TEdit;
Label2: TLabel; Label2: TLabel;
Editval: TEdit;
Label3: TLabel;
MainMenu1: TMainMenu; MainMenu1: TMainMenu;
Interface1: TMenuItem; Interface1: TMenuItem;
MenuConnecterUSB: TMenuItem; MenuConnecterUSB: TMenuItem;
@@ -37,7 +35,6 @@ type
MenuConnecterEthernet: TMenuItem; MenuConnecterEthernet: TMenuItem;
MenuDeconnecterEthernet: TMenuItem; MenuDeconnecterEthernet: TMenuItem;
StatusBar1: TStatusBar; StatusBar1: TStatusBar;
Label4: TLabel;
MSCommUSBLenz: TMSComm; MSCommUSBLenz: TMSComm;
Afficher1: TMenuItem; Afficher1: TMenuItem;
Etatdesdtecteurs1: TMenuItem; Etatdesdtecteurs1: TMenuItem;
@@ -62,7 +59,6 @@ type
Divers1: TMenuItem; Divers1: TMenuItem;
ClientSocketCDM: TClientSocket; ClientSocketCDM: TClientSocket;
FichierSimu: TMenuItem; FichierSimu: TMenuItem;
ButtonEcrCV: TButton;
OpenDialog: TOpenDialog; OpenDialog: TOpenDialog;
N1: TMenuItem; N1: TMenuItem;
LireunfichierdeCV1: TMenuItem; LireunfichierdeCV1: TMenuItem;
@@ -70,7 +66,6 @@ type
N5: TMenuItem; N5: TMenuItem;
Quitter1: TMenuItem; Quitter1: TMenuItem;
Config: TMenuItem; Config: TMenuItem;
ButtonLitCV: TButton;
Codificationdesactionneurs1: TMenuItem; Codificationdesactionneurs1: TMenuItem;
OuvrirunfichiertramesCDM1: TMenuItem; OuvrirunfichiertramesCDM1: TMenuItem;
Panel1: TPanel; Panel1: TPanel;
@@ -81,7 +76,7 @@ type
ButtonReprise: TButton; ButtonReprise: TButton;
ButtonTest: TButton; ButtonTest: TButton;
ButtonArretSimu: TButton; ButtonArretSimu: TButton;
ButtonCommande: TButton; ButtonDroit: TButton;
Panel2: TPanel; Panel2: TPanel;
Label1: TLabel; Label1: TLabel;
LabelNbTrains: TLabel; LabelNbTrains: TLabel;
@@ -94,12 +89,22 @@ type
PopupMenuFenRich: TPopupMenu; PopupMenuFenRich: TPopupMenu;
Copier1: TMenuItem; Copier1: TMenuItem;
Etatdessignaux1: TMenuItem; Etatdessignaux1: TMenuItem;
N6: TMenuItem;
Apropos1: TMenuItem;
ButtonDevie: TButton;
GroupBox2: TGroupBox;
ButtonEcrCV: TButton;
ButtonLitCV: TButton;
EditCV: TEdit;
Label3: TLabel;
LabelVCV: TLabel;
EditVal: TEdit;
procedure FormCreate(Sender: TObject); procedure FormCreate(Sender: TObject);
procedure MSCommUSBLenzComm(Sender: TObject); procedure MSCommUSBLenzComm(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Timer1Timer(Sender: TObject); procedure Timer1Timer(Sender: TObject);
procedure BoutVersionClick(Sender: TObject); procedure BoutVersionClick(Sender: TObject);
procedure ButtonCommandeClick(Sender: TObject); procedure ButtonDroitClick(Sender: TObject);
procedure EditvalEnter(Sender: TObject); procedure EditvalEnter(Sender: TObject);
procedure BoutonRafClick(Sender: TObject); procedure BoutonRafClick(Sender: TObject);
procedure ClientSocketLenzError(Sender: TObject; Socket: TCustomWinSocket; procedure ClientSocketLenzError(Sender: TObject; Socket: TCustomWinSocket;
@@ -147,6 +152,8 @@ type
procedure FenRichChange(Sender: TObject); procedure FenRichChange(Sender: TObject);
procedure Copier1Click(Sender: TObject); procedure Copier1Click(Sender: TObject);
procedure Etatdessignaux1Click(Sender: TObject); procedure Etatdessignaux1Click(Sender: TObject);
procedure Apropos1Click(Sender: TObject);
procedure ButtonDevieClick(Sender: TObject);
private private
{ Déclarations privées } { Déclarations privées }
procedure DoHint(Sender : Tobject); procedure DoHint(Sender : Tobject);
@@ -166,6 +173,7 @@ const_droit=2;const_devie=1; // positions aiguillages transmises par la central
const_devieG_CDM=3; // positions aiguillages transmises par cdm const_devieG_CDM=3; // positions aiguillages transmises par cdm
const_devieD_CDM=2; // positions aiguillages transmises par cdm const_devieD_CDM=2; // positions aiguillages transmises par cdm
const_droit_CDM=0; // positions aiguillages transmises par cdm const_droit_CDM=0; // positions aiguillages transmises par cdm
const_inconnu=9; // position inconnue
ClBleuClair=$FF7070 ; ClBleuClair=$FF7070 ;
Cyan=$FF6060; Cyan=$FF6060;
clviolet=$FF00FF; clviolet=$FF00FF;
@@ -226,14 +234,14 @@ TMA = (valide,devalide);
var var
ancien_tablo_signalCplx,EtatsignalCplx : array[0..MaxAcc] of word; ancien_tablo_signalCplx,EtatsignalCplx : array[0..MaxAcc] of word;
AvecInitAiguillages,tempsCli,NbreFeux,pasreponse,AdrDevie,fenetre, tempsCli,NbreFeux,pasreponse,AdrDevie,fenetre,
NombreImages,signalCpx,branche_trouve,Indexbranche_trouve,Actuel,Signal_suivant, NombreImages,signalCpx,branche_trouve,Indexbranche_trouve,Actuel,Signal_suivant,
Nbre_recu_cdm,Tempo_chgt_feux,Adj1,Adj2,NbrePN,ServeurInterfaceCDM, Nbre_recu_cdm,Tempo_chgt_feux,Adj1,Adj2,NbrePN,ServeurInterfaceCDM,
ServeurRetroCDM,TailleFonte,Nb_Det_Dist : integer; ServeurRetroCDM,TailleFonte,Nb_Det_Dist : integer;
Hors_tension2,traceSign,TraceZone,Ferme,parSocketLenz,ackCdm,PremierFD, Hors_tension2,traceSign,TraceZone,Ferme,parSocketLenz,ackCdm,PremierFD,
NackCDM,MsgSim,succes,recu_cv,AffActionneur,AffAigDet,Option_demarrage, NackCDM,MsgSim,succes,recu_cv,AffActionneur,AffAigDet,Option_demarrage,
TraceListe,clignotant,nack,Maj_feux_cours,configNulle,LanceCDM : boolean; TraceListe,clignotant,nack,Maj_feux_cours,configNulle,LanceCDM,AvecInitAiguillages : boolean;
CDMhd : THandle; CDMhd : THandle;
branche : array [1..100] of string; branche : array [1..100] of string;
@@ -360,6 +368,7 @@ function test_memoire_zones(adresse : integer) : boolean;
function PresTrainPrec(AdrFeu : integer) : boolean; function PresTrainPrec(AdrFeu : integer) : boolean;
function cond_carre(adresse : integer) : boolean; function cond_carre(adresse : integer) : boolean;
function carre_signal(adresse : integer) : boolean; function carre_signal(adresse : integer) : boolean;
procedure Event_Detecteur(Adresse : integer;etat : boolean;train : string);
implementation implementation
@@ -1468,70 +1477,6 @@ begin
end; 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)+' 0',clorange);
s:=chaine_CDM_Acc(adresse,0);
envoi_CDM(s);
exit;
end;
// pilotage par USB ou par éthernet de la centrale
// Affiche('Accessoire '+intToSTR(adresse),clLime);
if (hors_tension2=false) and (portCommOuvert or parSocketLenz) then
begin
// test si pilotage aiguillage inversé
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 parSocketLenz 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 // pilote accessoire en entrée 0->2 1->1
procedure pilote_acc01(adresse : integer;octet : byte); procedure pilote_acc01(adresse : integer;octet : byte);
@@ -3486,7 +3431,7 @@ var s,sa,chaine,SOrigine: string;
begin begin
begin begin
adresse:=StrToINT(copy(s,1,j-1));Delete(s,1,j); // adresse aiguillage adresse:=StrToINT(copy(s,1,j-1));Delete(s,1,j); // adresse aiguillage
if (adresse>0) and (AvecInitAiguillages=1) then if (adresse>0) and (AvecInitAiguillages) then
begin begin
j:=pos(',',s); j:=pos(',',s);
position:=StrToInt(copy(s,1,j-1));Delete(S,1,j);// position aiguillage position:=StrToInt(copy(s,1,j-1));Delete(S,1,j);// position aiguillage
@@ -3534,7 +3479,7 @@ begin
for i:=1 to MaxAcc do for i:=1 to MaxAcc do
begin begin
Aiguillage[i].modele:=0 ; // sans existence Aiguillage[i].modele:=0 ; // sans existence
Aiguillage[i].position:=9; // position inconnue Aiguillage[i].position:=const_inconnu; // position inconnue
Aiguillage[i].temps:=5 ; Aiguillage[i].temps:=5 ;
Aiguillage[i].inversion:=0; Aiguillage[i].inversion:=0;
Aiguillage[i].inversionCDM:=0; Aiguillage[i].inversionCDM:=0;
@@ -3664,7 +3609,7 @@ begin
trouve_init_aig:=true; trouve_init_aig:=true;
inc(nv); inc(nv);
delete(s,i,length(sa)); delete(s,i,length(sa));
AvecInitAiguillages:=StrToINT(s); AvecInitAiguillages:=s='1';
end; end;
sa:=uppercase(fenetre_ch)+'='; sa:=uppercase(fenetre_ch)+'=';
@@ -4763,9 +4708,9 @@ begin
if NivDebug=3 then AfficheDebug('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; end;
if (Btype>=2) then // aiguillage ou bis ou buttoir if (Btype>=2) then // aiguillage ou buttoir
begin begin
if (aiguillage[Adr].modele=1) and (Btype=2) then // aiguillage normal non bis if (aiguillage[Adr].modele=1) and (Btype=2) then // aiguillage normal
begin begin
// aiguillage pris en pointe // aiguillage pris en pointe
if (aiguillage[adr].Apointe=prec) then if (aiguillage[adr].Apointe=prec) then
@@ -4816,10 +4761,12 @@ begin
else else
begin begin
if NivDebug=3 then AfficheDebug('135 - aiguillage '+intToSTR(Adr)+' Pris en talon',clyellow); 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é if (alg=2) then // on demande d'arreter si l'aiguillage en talon est mal positionné
begin begin
if aiguillage[adr].position=const_droit then if aiguillage[adr].position=const_droit then
begin begin
// si TJD (modele=2) sur le précédent, alors substituer avec la 2eme adresse de la TJD
if aiguillage[prec].modele=2 then prec:=aiguillage[prec].DDroit;
if prec<>aiguillage[Adr].Adroit then if prec<>aiguillage[Adr].Adroit then
begin begin
if NivDebug=3 then AfficheDebug('135.1 - Aiguillage '+intToSTR(adr)+' mal positionné',clyellow); if NivDebug=3 then AfficheDebug('135.1 - Aiguillage '+intToSTR(adr)+' mal positionné',clyellow);
@@ -5155,7 +5102,7 @@ begin
suivant_alg3:=adr;exit; suivant_alg3:=adr;exit;
end; end;
begin begin
if aiguillage[Adr].position=9 then begin suivant_alg3:=9996;exit;end; // pour échappement if aiguillage[Adr].position=const_inconnu then begin suivant_alg3:=9996;exit;end; // pour échappement
s:='Aiguillage triple '+IntToSTR(Adr)+' : configuration des aiguilles interdite'; s:='Aiguillage triple '+IntToSTR(Adr)+' : configuration des aiguilles interdite';
if CDM_connecte then s:=s+': '+IntToSTR(aiguillage[Adr].position); if CDM_connecte then s:=s+': '+IntToSTR(aiguillage[Adr].position);
AfficheDebug(s,clYellow); AfficheDebug(s,clYellow);
@@ -5397,6 +5344,10 @@ begin
AdrPrec:=el1;TypePrec:=typeDet1; AdrPrec:=el1;TypePrec:=typeDet1;
if j=1 then i1:=IndexBranche_det1+1; if j=1 then i1:=IndexBranche_det1+1;
if j=2 then i1:=IndexBranche_det1-1; if j=2 then i1:=IndexBranche_det1-1;
// les suivants dansla branche sont:
AdrFonc:=BrancheN[branche_trouve_det1,i1].adresse;
typeFonc:=BrancheN[branche_trouve_det1,i1].Btype ;
if NivDebug=3 then if NivDebug=3 then
begin begin
s:='Test en '; s:='Test en ';
@@ -5405,17 +5356,17 @@ begin
AfficheDebug(s,clyellow); AfficheDebug(s,clyellow);
end; end;
AdrFonc:=BrancheN[branche_trouve_det1,i1].adresse;
typeFonc:=BrancheN[branche_trouve_det1,i1].Btype ;
i:=0;N_Det:=0; i:=0;N_Det:=0;
if AdrFonc<>El2 then // si pas déja trouvé le sens de progression if AdrFonc<>El2 then // si pas déja trouvé le sens de progression
begin begin
repeat repeat
//AfficheDebug('Engage '+IntToSTR(AdrPrec)+','+IntToSTR(typePrec)+'/'+IntToSTR(AdrFonc)+','+IntToSTR(typeFonc),clyellow); //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 nivDebug=3 then AfficheDebug('i='+IntToSTR(i)+' NDet='+IntToSTR(N_det),clyellow);
Adr:=suivant_alg3(AdrPrec,TypePrec,AdrFonc,TypeFonc,1); if (AdrFonc<>0) or (TypeFonc<>0) then Adr:=suivant_alg3(AdrPrec,TypePrec,AdrFonc,TypeFonc,1) else
begin
Adr:=9999;
end;
//AfficheDebug('Sortie Alg3: '+IntToSTR(Adr)+'/'+intToSTR(typeGen),clyellow); //AfficheDebug('Sortie Alg3: '+IntToSTR(Adr)+'/'+intToSTR(typeGen),clyellow);
if TypeGen=1 then inc(N_Det); if TypeGen=1 then inc(N_Det);
if NivDebug=3 then if NivDebug=3 then
@@ -5594,7 +5545,7 @@ begin
until (sort); until (sort);
// si trouvé un feu ou j=10, les aiguillages sont bien positionnés // si trouvé un feu ou j=10, les aiguillages sont bien positionnés
// si trouvé 9998, aiguillages mal positionnés // si trouvé 9998, aiguillages mal positionnés
if (NivDebug=3) then if (NivDebug>=1) then
begin 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) 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); else AfficheDebug('Le signal '+IntToSTR(adresse)+' ne doit pas être au carré',clYellow);
@@ -5851,7 +5802,8 @@ end;
// adresse=adresse du signal // adresse=adresse du signal
function test_memoire_zones(adresse : integer) : boolean; function test_memoire_zones(adresse : integer) : boolean;
var var
AdrSuiv,prec,TypePrec,TypeActuel,ife,actuel,AdrDet,Etat,AdrFeu,i,j,PresTrain01,PrecInitial : integer; AdrSuiv,prec,TypePrec,TypeActuel,ife,actuel,AdrDet,Etat,AdrFeu,i,j,PresTrain01,PrecInitial,
N_Det : integer;
Pres_train,sort : boolean; Pres_train,sort : boolean;
s : string; s : string;
begin begin
@@ -5868,6 +5820,7 @@ begin
ife:=1; // index feu de 1 à 4 pour explorer les 4 détecteurs d'un feu ife:=1; // index feu de 1 à 4 pour explorer les 4 détecteurs d'un feu
repeat repeat
j:=0; j:=0;
N_Det:=0;
if NivDebug=3 then AfficheDebug('Boucle de test feu '+intToSTR(ife)+'/4',clOrange); if NivDebug=3 then AfficheDebug('Boucle de test feu '+intToSTR(ife)+'/4',clOrange);
if (ife=1) then if (ife=1) then
begin begin
@@ -5926,7 +5879,7 @@ begin
else else
begin begin
AdrSuiv:=suivant_alg3(prec,TypePrec,actuel,TypeActuel,1); AdrSuiv:=suivant_alg3(prec,TypePrec,actuel,TypeActuel,1);
if Typegen=1 then inc(N_Det);
prec:=actuel;TypePrec:=TypeActuel; prec:=actuel;TypePrec:=TypeActuel;
actuel:=AdrSuiv;TypeActuel:=typeGen; actuel:=AdrSuiv;TypeActuel:=typeGen;
if AdrSuiv>9990 then if AdrSuiv>9990 then
@@ -5936,7 +5889,7 @@ begin
end; end;
if NivDebug=3 then AfficheDebug('132 - suivant='+IntToSTR(adrsuiv),clYellow); if NivDebug=3 then AfficheDebug('132 - suivant='+IntToSTR(adrsuiv)+'/'+IntToSTR(TypeGen),clYellow);
if actuel=0 then if actuel=0 then
begin begin
// si c'est un buttoir // si c'est un buttoir
@@ -5948,7 +5901,7 @@ begin
AdrFeu:=0; AdrFeu:=0;
if (TypeActuel=1) then // détecteur if (TypeActuel=1) then // détecteur
begin begin
if (NivDebug=3) and MemZone[PrecInitial][actuel] then AfficheDebug('Présence train de '+intToSTR(PrecInitial)+' à '+intToSTR(actuel),clyellow); if (NivDebug>0) 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 Pres_train:=MemZone[PrecInitial][actuel] or Pres_train; // mémoire de zone
if Pres_Train then PresTrain01:=1 else PresTrain01:=0; if Pres_Train then PresTrain01:=1 else PresTrain01:=0;
@@ -5966,8 +5919,8 @@ begin
if (feux[i].Adr_el_suiv1<>prec) then // le feu est-il dans le bon sens de progression? if (feux[i].Adr_el_suiv1<>prec) then // le feu est-il dans le bon sens de progression?
begin begin
s:='Trouvé feu '+IntToSTR(AdrFeu); 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>0) 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); if (NivDebug>0) And (not(Pres_Train)) then AfficheDebug(s+' et sortie proced:Mémoire de zone à 0',clyellow);
test_memoire_zones:=Pres_train;exit; test_memoire_zones:=Pres_train;exit;
end end
@@ -5987,11 +5940,11 @@ begin
begin begin
if (NivDebug=3) then AfficheDebug('Trouvé aiguillage '+intToSTR(AdrSuiv),clyellow); if (NivDebug=3) then AfficheDebug('Trouvé aiguillage '+intToSTR(AdrSuiv),clyellow);
end; end;
sort:=(j=10) or (AdrFeu<>0) ; sort:=(j=10) or (AdrFeu<>0) or (N_Det>=Nb_det_dist);
until (sort); // on arrete jusqu'à trouver un signal ou si on va trop loin (10 itérations) until (sort); // on arrete jusqu'à trouver un signal ou si on va trop loin (10 itérations)
inc(ife); inc(ife);
until ife>=5; until ife>=5;
if (NivDebug=3) and (Etat=0) then AfficheDebug('Pas trouvé de signal suivant au '+intToSTR(adresse),clyellow); if (NivDebug>0) and (Etat=0) then AfficheDebug('Pas trouvé de signal suivant au '+intToSTR(adresse),clyellow);
test_memoire_zones:=Pres_train; test_memoire_zones:=Pres_train;
end; end;
@@ -6127,18 +6080,22 @@ begin
if (det_initial<>0) then 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é 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é if DetPrec1<1024 then // route bloquée par aiguillage mal positionné
begin begin
DetPrec2:=detecteur_suivant_El(det_initial,1,DetPrec1,1); if detPrec1<>0 then DetPrec2:=detecteur_suivant_El(det_initial,1,DetPrec1,1) else DetPrec2:=0;
if nivdebug=3 then afficheDebug('detPrec2='+intToSTR(DetPrec2),clorange);
if DetPrec2<1024 then if DetPrec2<1024 then
begin begin
DetPrec3:=detecteur_suivant_El(DetPrec1,1,DetPrec2,1); if detPrec2<>0 then DetPrec3:=detecteur_suivant_El(DetPrec1,1,DetPrec2,1) else DetPrec3:=0;
if nivdebug=3 then afficheDebug('detPrec3='+intToSTR(DetPrec3),clorange);
if DetPrec3<1024 then if DetPrec3<1024 then
begin begin
DetPrec4:=detecteur_suivant_El(DetPrec2,1,DetPrec3,1); if detPrec3<>0 then DetPrec4:=detecteur_suivant_El(DetPrec2,1,DetPrec3,1) else DetPrec4:=0;
if nivdebug=3 then afficheDebug('detPrec4='+intToSTR(DetPrec4),clorange);
if DetPrec4<1024 then if DetPrec4<1024 then
begin begin
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); if AffSignal or (NivDebug>=2) 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 PresTrain:=MemZone[DetPrec4,detPrec3] or
MemZone[DetPrec3,detPrec2] or MemZone[DetPrec2,detPrec1] or MemZone[DetPrec1,Det_initial] or presTrain ; MemZone[DetPrec3,detPrec2] or MemZone[DetPrec2,detPrec1] or MemZone[DetPrec1,Det_initial] or presTrain ;
if AffSignal or (NivDebug=3) then if AffSignal or (NivDebug=3) then
@@ -6175,7 +6132,7 @@ var i,j,k1,k2,BtypeSuiv,Adr_det,etat,Adr,Aig,Adr_El_Suiv,
s : string; s : string;
begin begin
s:='Traitement du feu '+intToSTR(Adrfeu)+'------------------------------------'; s:='Traitement du feu '+intToSTR(Adrfeu)+'------------------------------------';
//if adrfeu=197 then affsignal:=true else affsignal:=false;
if AffSignal then AfficheDebug(s,clOrange); if AffSignal then AfficheDebug(s,clOrange);
i:=index_feu(Adrfeu); i:=index_feu(Adrfeu);
if AdrFeu<>0 then if AdrFeu<>0 then
@@ -6227,6 +6184,7 @@ begin
// signal à 2 feux = carré violet+blanc // signal à 2 feux = carré violet+blanc
if (Feux[i].aspect=2) then //or (feux[i].check<>nil) then // si carré violet if (Feux[i].aspect=2) then //or (feux[i].check<>nil) then // si carré violet
begin begin
//AfficheDebug('Feux à 2 feux',CLOrange);
// si aiguillage après signal mal positionnées // si aiguillage après signal mal positionnées
if carre_signal(AdrFeu) then if carre_signal(AdrFeu) then
begin begin
@@ -6236,7 +6194,9 @@ begin
end end
else else
begin begin
Maj_Etat_Signal(AdrFeu,blanc); if test_memoire_zones(AdrFeu) then Maj_Etat_Signal(AdrFeu,violet) // test si présence train après signal
else Maj_Etat_Signal(AdrFeu,blanc);
Envoi_signauxCplx; Envoi_signauxCplx;
exit; exit;
end; end;
@@ -6385,6 +6345,16 @@ begin
//affiche('index2='+IntToSTR(index2_det),clWhite); //affiche('index2='+IntToSTR(index2_det),clWhite);
end; end;
// trouve si le détecteur adr est contigu à un buttoir
function buttoir_adjacent(adr : integer) : boolean;
begin
trouve_element(adr,1,1); // branche_trouve IndexBranche_trouve
if Branche_trouve=0 then begin buttoir_adjacent:=false;exit;end;
buttoir_adjacent:=( (BrancheN[branche_trouve,IndexBranche_trouve+1].Adresse=0) and (BrancheN[branche_trouve,IndexBranche_trouve+1].BType=4) or
(BrancheN[branche_trouve,IndexBranche_trouve-1].Adresse=0) and (BrancheN[branche_trouve,IndexBranche_trouve-1].BType=4) )
end;
// calcul des zones depuis le tableau des fronts descendants des évènements détecteurs // calcul des zones depuis le tableau des fronts descendants des évènements détecteurs
// transmis dans le tableau Event_det // transmis dans le tableau Event_det
procedure calcul_zones; procedure calcul_zones;
@@ -6494,13 +6464,15 @@ begin
end; end;
end; end;
// créer un train, donc un tableau // Nombre d'éléments à 0 : ici c'est un nouveau train donc créer un train, donc un tableau
if N_Trains>=Max_Trains then if N_Trains>=Max_Trains then
begin begin
Affiche('Erreur nombre de train maximal atteint',clRed); Affiche('Erreur nombre de train maximal atteint',clRed);
end; end;
Inc(N_trains); Inc(N_trains);
// vérifier si le détecteur du nouveau train est associé à un feu vers un buttoir // vérifier si le détecteur du nouveau train est associé à un feu vers un buttoir
for i:=1 to NbreFeux do for i:=1 to NbreFeux do
begin begin
@@ -6515,7 +6487,7 @@ begin
if TraceListe then Affiche('FD - Le feu '+IntToSTR(AdrFeu)+' est précédé d''un buttoir',clyellow); if TraceListe then Affiche('FD - Le feu '+IntToSTR(AdrFeu)+' est précédé d''un buttoir',clyellow);
MemZone[0,AdrDetFeu]:=false; MemZone[0,AdrDetFeu]:=false;
//NivDebug:=3; //NivDebug:=3;
AffSignal:=true; //AffSignal:=true;
maj_feu(AdrFeu); maj_feu(AdrFeu);
end; end;
end; end;
@@ -6523,6 +6495,23 @@ begin
if TraceListe then AfficheDebug('Création Train n°'+intToSTR(i),clyellow); if TraceListe then AfficheDebug('Création Train n°'+intToSTR(i),clyellow);
Formprinc.LabelNbTrains.caption:=IntToSTR(N_trains); Formprinc.LabelNbTrains.caption:=IntToSTR(N_trains);
// si on démarre d'un buttoir
if buttoir_adjacent(det3) then
begin
if TraceListe then AfficheDebug('detection démarrage depuis détecteur '+IntToSTR(det3)+' buttoir',clyellow);
event_det_train[N_trains].det[1]:=0;
event_det_train[N_trains].det[2]:=det3;
event_det_train[N_trains].NbEl:=2;
with FormDebug.MemoEvtDet do
begin
lines.add('Nouveau Tampon train '+intToStr(N_Trains)+'--------');
lines.add(intToSTR(event_det_train[N_Trains].det[1]));
lines.add(intToSTR(event_det_train[N_Trains].det[2]));
end;
end
else
begin
event_det_train[N_trains].det[1]:=det3; event_det_train[N_trains].det[1]:=det3;
event_det_train[N_trains].NbEl:=1; event_det_train[N_trains].NbEl:=1;
with FormDebug.MemoEvtDet do with FormDebug.MemoEvtDet do
@@ -6535,6 +6524,7 @@ begin
AfficheDebug('Nouveau Tampon train '+intToStr(N_trains)+'--------',clyellow); AfficheDebug('Nouveau Tampon train '+intToStr(N_trains)+'--------',clyellow);
AfficheDebug(intToSTR(event_det_train[N_trains].det[1]),clyellow ); AfficheDebug(intToSTR(event_det_train[N_trains].det[1]),clyellow );
end; end;
end;
end; end;
@@ -6759,7 +6749,7 @@ begin
begin begin
if aiguillage[i].modele<>0 then if aiguillage[i].modele<>0 then
begin begin
if aiguillage[i].position=9 then if aiguillage[i].position=const_inconnu then
begin begin
Affiche('Attention : position de l''aiguillage '+IntToSTR(i)+' inconnue',clred); Affiche('Attention : position de l''aiguillage '+IntToSTR(i)+' inconnue',clred);
AfficheDebug('Attention : position de l''aiguillage '+IntToSTR(i)+' inconnue',clred); AfficheDebug('Attention : position de l''aiguillage '+IntToSTR(i)+' inconnue',clred);
@@ -6789,18 +6779,18 @@ begin
end; end;
// évènement d'aiguillage // évènement d'aiguillage
procedure Event_Aig(adresse,pos,objet : integer); procedure Event_Aig(adresse,pos : integer);
var s: string; var s: string;
faire_event: boolean; faire_event: boolean;
begin begin
// ------------------- traitement du numéro d'objet ------------------------- // ------------------- traitement du numéro d'objet -------------------------
// init objet { init objet
if aiguillage[adresse].objet=0 then if aiguillage[adresse].objet=0 then
begin begin
aiguillage[adresse].objet:=objet; aiguillage[adresse].objet:=objet;
//affiche('stockage Aiguillage '+intToSTR(adresse)+' objet='+intToSTR(objet),clYellow); //affiche('stockage Aiguillage '+intToSTR(adresse)+' objet='+intToSTR(objet),clYellow);
end; end;
}
// ne pas faire l'évaluation si l'ancien état de l'aiguillage est indéterminée (9) // ne pas faire l'évaluation si l'ancien état de l'aiguillage est indéterminée (9)
// car le RUN vient de démarrer // car le RUN vient de démarrer
faire_event:=aiguillage[adresse].position<>9; faire_event:=aiguillage[adresse].position<>9;
@@ -6816,7 +6806,7 @@ begin
if pos=const_droit then s:=s+' droit' else s:=s+' dévié'; if pos=const_droit then s:=s+' droit' else s:=s+' dévié';
if AffAigDet then if AffAigDet then
begin begin
if objet<>0 then s:=s+' objet='+IntToSTR(objet); //if objet<>0 then s:=s+' objet='+IntToSTR(objet);
Affiche(s,clyellow); Affiche(s,clyellow);
AfficheDebug(s,clyellow); AfficheDebug(s,clyellow);
end; end;
@@ -6826,7 +6816,7 @@ begin
event_det_tick[N_event_tick].tick:=tick; event_det_tick[N_event_tick].tick:=tick;
event_det_tick[N_event_tick].aiguillage:=adresse; event_det_tick[N_event_tick].aiguillage:=adresse;
event_det_tick[N_event_tick].etat:=pos; event_det_tick[N_event_tick].etat:=pos;
event_det_tick[N_event_tick].objet:=objet; //event_det_tick[N_event_tick].objet:=objet;
// Mettre à jour le TCO // Mettre à jour le TCO
if AvecTCO then if AvecTCO then
@@ -6838,6 +6828,75 @@ begin
if faire_event then evalue; if faire_event then evalue;
end; 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)+' 0',clorange);
s:=chaine_CDM_Acc(adresse,0);
envoi_CDM(s);
exit;
end;
// pilotage par USB ou par éthernet de la centrale
// Affiche('Accessoire '+intToSTR(adresse),clLime);
if (hors_tension2=false) and (portCommOuvert or parSocketLenz) then
begin
// test si pilotage aiguillage inversé
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 parSocketLenz 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
exit;
end;
// pas de centrale et pas CDM connecté: on change la position de l'aiguillage
if acc=aig then event_aig(adresse,octet);
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. // 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. // On déclenche ensuite les évènements détecteurs ou aiguillages.
@@ -6888,22 +6947,22 @@ begin
adraig:=((adresse * 4)+1 ); // *4 car N=1, c'est le "poids fort" adraig:=((adresse * 4)+1 ); // *4 car N=1, c'est le "poids fort"
if (valeur and $C)=$8 then if (valeur and $C)=$8 then
begin begin
Event_Aig(adraig+3,const_droit,0); Event_Aig(adraig+3,const_droit);
if traceTrames then begin s:='accessoire '+intToSTR(adraig+3)+'=2';AfficheDebug(s,clYellow);end; if traceTrames then begin s:='accessoire '+intToSTR(adraig+3)+'=2';AfficheDebug(s,clYellow);end;
end; end;
if (valeur and $C)=$4 then if (valeur and $C)=$4 then
begin begin
Event_Aig(adraig+3,const_devie,0); Event_Aig(adraig+3,const_devie);
if traceTrames then begin s:='accessoire '+intToSTR(adraig+3)+'=1';AfficheDebug(s,clYellow);end; if traceTrames then begin s:='accessoire '+intToSTR(adraig+3)+'=1';AfficheDebug(s,clYellow);end;
end; end;
if (valeur and $3)=$2 then if (valeur and $3)=$2 then
begin begin
Event_Aig(adraig+2,const_droit,0); Event_Aig(adraig+2,const_droit);
if traceTrames then begin s:='accessoire '+intToSTR(adraig+2)+'=2';AfficheDebug(s,clYellow);end; if traceTrames then begin s:='accessoire '+intToSTR(adraig+2)+'=2';AfficheDebug(s,clYellow);end;
end; end;
if (valeur and $3)=$1 then if (valeur and $3)=$1 then
begin begin
Event_Aig(adraig+2,const_devie,0); Event_Aig(adraig+2,const_devie);
if traceTrames then begin s:='accessoire '+intToSTR(adraig+2)+'=1';AfficheDebug(s,clYellow);end; if traceTrames then begin s:='accessoire '+intToSTR(adraig+2)+'=1';AfficheDebug(s,clYellow);end;
end; end;
end; end;
@@ -6944,22 +7003,22 @@ begin
adraig:=(adresse * 4)+1; adraig:=(adresse * 4)+1;
if (valeur and $C)=$8 then if (valeur and $C)=$8 then
begin begin
Event_Aig(adraig+1,const_droit,0); Event_Aig(adraig+1,const_droit);
if traceTrames then begin s:='accessoire '+intToSTR(adraig+1)+'=2';AfficheDebug(s,clYellow);end; if traceTrames then begin s:='accessoire '+intToSTR(adraig+1)+'=2';AfficheDebug(s,clYellow);end;
end; end;
if (valeur and $C)=$4 then if (valeur and $C)=$4 then
begin begin
Event_Aig(adraig+1,const_devie,0); Event_Aig(adraig+1,const_devie);
if traceTrames then begin s:='accessoire '+intToSTR(adraig+1)+'=1';AfficheDebug(s,clYellow);end; if traceTrames then begin s:='accessoire '+intToSTR(adraig+1)+'=1';AfficheDebug(s,clYellow);end;
end; end;
if (valeur and $3)=$2 then if (valeur and $3)=$2 then
begin begin
Event_Aig(adraig,const_droit,0); Event_Aig(adraig,const_droit);
if traceTrames then begin s:='accessoire '+intToSTR(adraig)+'=2';AfficheDebug(s,clYellow);end; if traceTrames then begin s:='accessoire '+intToSTR(adraig)+'=2';AfficheDebug(s,clYellow);end;
end; end;
if (valeur and $3)=$1 then if (valeur and $3)=$1 then
begin begin
Event_Aig(adraig,const_devie,0); Event_Aig(adraig,const_devie);
if traceTrames then begin s:='accessoire '+intToSTR(adraig)+'=1';AfficheDebug(s,clYellow);end; if traceTrames then begin s:='accessoire '+intToSTR(adraig)+'=1';AfficheDebug(s,clYellow);end;
end; end;
end; end;
@@ -7621,7 +7680,7 @@ begin
if not(diffusion) then LireunfichierdeCV1.enabled:=true; if not(diffusion) then LireunfichierdeCV1.enabled:=true;
// ajoute une image dynamiquement // ajoute les images des feux dynamiquement
for i:=1 to NbreFeux do for i:=1 to NbreFeux do
begin begin
cree_image(i); // et initialisation tableaux signaux cree_image(i); // et initialisation tableaux signaux
@@ -7653,14 +7712,20 @@ begin
FormTCO.show; FormTCO.show;
end; end;
//essai &&&&&&&&&&
Affiche('Fin des initialisations',clyellow); Affiche('Fin des initialisations',clyellow);
LabelEtat.Caption:=' '; LabelEtat.Caption:=' ';
Affiche_memoire; Affiche_memoire;
//--------------------------------- //---------------------------------
{ {
aiguillage[20].position:=const_droit; aiguillage[6].position:=const_devie;
aiguillage[21].position:=const_droit; aiguillage[4].position:=const_droit;
aiguillage[3].position:=const_droit;
aiguillage[1].position:=const_devie;
aiguillage[26].position:=const_droit;
aiguillage[28].position:=const_devie;
if buttoir_adjacent(515) then affiche('oui',clred);
NivDebug:=3; NivDebug:=3;
FormDebug.show; FormDebug.show;
@@ -7740,13 +7805,13 @@ begin
if Tempo_init>0 then dec(Tempo_init); if Tempo_init>0 then dec(Tempo_init);
if (Tempo_init=1) and AvecInit then if (Tempo_init=1) and AvecInit then
begin begin
if not(ConfigNulle) and not(ferme) and (AvecInitAiguillages=1) then if not(ConfigNulle) and not(ferme) and (AvecInitAiguillages) then
begin begin
Affiche('Positionnement des feux',clYellow); Affiche('Positionnement des feux',clYellow);
envoi_signauxCplx; // initialisation des feux envoi_signauxCplx; // initialisation des feux
init_aiguillages; // initialisation des aiguillages init_aiguillages; // initialisation des aiguillages
end; end;
if (AvecInitAiguillages=0) and not(ferme) and (parSocketLenz or portCommOuvert) then if not(AvecInitAiguillages) and not(ferme) and (parSocketLenz or portCommOuvert) then
begin begin
demande_etat_acc; // demande l'état des accessoires (position des aiguillages) demande_etat_acc; // demande l'état des accessoires (position des aiguillages)
end; end;
@@ -7827,9 +7892,9 @@ begin
end; end;
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=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); //if (not(Maj_feux_cours) and (Tempo_chgt_feux>0)) then dec(Tempo_chgt_feux);
// tempo retombée actionneur // tempo retombée actionneur
if TempoAct<>0 then if TempoAct<>0 then
@@ -7850,13 +7915,7 @@ begin
if not(MsgSim) then if not(MsgSim) then
begin begin
Affiche('Simulation en cours ',Cyan);MsgSim:=true; Affiche('Simulation en cours ',Cyan);MsgSim:=true;
N_Event_tick:=0; Raz_tout;
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; // AffTickSimu:=true;
end; end;
while tick=Tablo_simule[i_simule+1].tick do while tick=Tablo_simule[i_simule+1].tick do
@@ -7876,7 +7935,7 @@ begin
if Tablo_simule[i_simule].aiguillage<>0 then if Tablo_simule[i_simule].aiguillage<>0 then
begin begin
s:='Simulation '+intToSTR(I_simule)+' Tick='+IntToSTR(tick)+' aig='+intToSTR(Tablo_simule[i_simule].aiguillage)+'='+IntToSTR(Tablo_simule[i_simule].etat); 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 Event_Aig(Tablo_simule[i_simule].Aiguillage,Tablo_simule[i_simule].etat); // créer évt aiguillage
StaticText.caption:=s; StaticText.caption:=s;
end; end;
@@ -7892,7 +7951,7 @@ begin
end; end;
end; end;
// temporisations de démarrage des trains au feux // temporisations de démarrage des trains au feux pas encore au point
if Option_demarrage then if Option_demarrage then
for i:=1 to 1024 do for i:=1 to 1024 do
begin begin
@@ -7925,8 +7984,9 @@ begin
end; end;
// bouton de commande d'un accessoire // bouton de commande d'un accessoire
procedure TFormPrinc.ButtonCommandeClick(Sender: TObject); procedure TFormPrinc.ButtonDroitClick(Sender: TObject);
var adr,valeur,erreur : integer; var adr,erreur : integer;
s : string;
begin begin
val(EditAdresse.text,adr,erreur); val(EditAdresse.text,adr,erreur);
if (erreur<>0) or (adr<1) or (adr>2048) then if (erreur<>0) or (adr<1) or (adr>2048) then
@@ -7935,14 +7995,26 @@ begin
exit; exit;
end; end;
val(EditVal.Text,valeur,erreur); pilote_acc(adr,const_droit,aig);
if (erreur<>0) or (valeur<0) or (valeur>255) then s:='accessoire '+IntToSTR(adr)+' droit';
Affiche(s,clyellow);
end;
procedure TFormPrinc.ButtonDevieClick(Sender: TObject);
var adr,erreur : integer;
s : string;
begin
val(EditAdresse.text,adr,erreur);
if (erreur<>0) or (adr<1) or (adr>2048) then
begin begin
EditVal.text:='1'; EditAdresse.text:='1';
exit; exit;
end; end;
pilote_acc(adr,valeur,aig); pilote_acc(adr,const_devie,aig);
s:='accessoire '+IntToSTR(adr)+' dévié';
Affiche(s,clyellow);
end; end;
procedure TFormPrinc.EditvalEnter(Sender: TObject); procedure TFormPrinc.EditvalEnter(Sender: TObject);
@@ -8120,7 +8192,7 @@ begin
s:='Aiguillage '+IntToSTR(i)+' : '+intToSTR(aiguillage[i].position); s:='Aiguillage '+IntToSTR(i)+' : '+intToSTR(aiguillage[i].position);
if aiguillage[i].position=const_devie then s:=s+' (dévié)' ; 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=const_droit then s:=s+' (droit)';
if aiguillage[i].position=9 then s:=s+' inconnue'; if aiguillage[i].position=const_inconnu then s:=s+' inconnue';
objet:=aiguillage[i].objet; objet:=aiguillage[i].objet;
if objet<>0 then s:=s+' objet='+intToSTR(objet); if objet<>0 then s:=s+' objet='+intToSTR(objet);
@@ -8303,7 +8375,7 @@ begin
begin begin
//Affiche('Normal',clyellow); //Affiche('Normal',clyellow);
if etat=0 then etatAig:=2 else etatAig:=1; if etat=0 then etatAig:=2 else etatAig:=1;
Event_Aig(adr,etatAig,objet); Event_Aig(adr,etatAig);
end; end;
// TJD TJS // TJD TJS
if (aiguillage[adr].modele=2) or (aiguillage[adr].modele=3) then if (aiguillage[adr].modele=2) or (aiguillage[adr].modele=3) then
@@ -8323,8 +8395,8 @@ begin
adr:=adr2; adr:=adr2;
adr2:=prv; adr2:=prv;
end; end;
Event_Aig(adr,etatAig,objet); Event_Aig(adr,etatAig);
Event_Aig(adr2,etatAig2,objet); Event_Aig(adr2,etatAig2);
end; end;
if aiguillage[adr].modele=4 then // aiguillage triple if aiguillage[adr].modele=4 then // aiguillage triple
begin begin
@@ -8336,8 +8408,8 @@ begin
adr2:=aiguillage[adr].AdrTriple; adr2:=aiguillage[adr].AdrTriple;
if (etat=0) or (etat=3) then etatAig2:=2; if (etat=0) or (etat=3) then etatAig2:=2;
if etat=2 then etatAig2:=1; if etat=2 then etatAig2:=1;
Event_Aig(adr,etatAig,objet); Event_Aig(adr,etatAig);
Event_Aig(adr2,etatAig2,objet); Event_Aig(adr2,etatAig2);
end; end;
// Tempo_chgt_feux:=10; // demander la mise à jour des feux // Tempo_chgt_feux:=10; // demander la mise à jour des feux
end; end;
@@ -8598,17 +8670,17 @@ var adr,valeur,erreur : integer;
s : string; s : string;
begin begin
// doc XpressNet page 55 // doc XpressNet page 55
val(EditAdresse.text,adr,erreur); val(EditCV.text,adr,erreur);
if (erreur<>0) or (Adr>255) or (Adr<0) then if (erreur<>0) or (Adr>255) or (Adr<0) then
begin begin
EditAdresse.Text:='1'; EditCV.Text:='1';
exit; exit;
end; end;
val(EditVal.Text,valeur,erreur); val(EditVal.Text,valeur,erreur);
if (erreur<>0) or (valeur<0) or (valeur>255) then if (erreur<>0) or (valeur<0) or (valeur>255) then
begin begin
EditAdresse.text:='1'; EditVal.text:='1';
exit; exit;
end; end;
@@ -8695,10 +8767,10 @@ begin
sa:=''; sa:='';
Affiche('Lecture CV',clyellow); Affiche('Lecture CV',clyellow);
val(EditAdresse.Text,cv,erreur); val(EditCV.Text,cv,erreur);
if (erreur<>0) or (cv>255) or (cv<0) then if (erreur<>0) or (cv>255) or (cv<0) then
begin begin
EditAdresse.Text:='1'; EditCV.Text:='1';
exit; exit;
end; end;
//trace:=true; //trace:=true;
@@ -8904,8 +8976,19 @@ begin
end; end;
end; end;
procedure TFormPrinc.Apropos1Click(Sender: TObject);
begin
Affiche(' ',clyellow);
Affiche('Signaux complexes GL version '+version+' (C) 2020 F1IWQ Gily TDR',clWhite);
Affiche('http://cdmrail.free.fr/ForumCDR/viewtopic.php?f=77&t=3906',clWhite);
Affiche('https://github.com/f1iwq2/Signaux_complexes_GL',clWhite);
Affiche(' ',clyellow);
end;
begin begin
end. end.
-8911
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+1 -1
View File
@@ -23,7 +23,7 @@ var
Lance_verif : integer; Lance_verif : integer;
verifVersion,notificationVersion : boolean; verifVersion,notificationVersion : boolean;
Const Version='2.3'; // sert à la comparaison de la version publiée Const Version='2.31'; // sert à la comparaison de la version publiée
implementation implementation
+1
View File
@@ -44,6 +44,7 @@ version 2.21 : Param
Correction d'un bug de la 2.2 Correction d'un bug de la 2.2
version 2.3 : Changement de la méthode de réception des trames du protocole IPC de CDM-Rail version 2.3 : Changement de la méthode de réception des trames du protocole IPC de CDM-Rail
Affichage au démarrage des variables manquantes du fichier config-gl.cfg Affichage au démarrage des variables manquantes du fichier config-gl.cfg
version 2.31 : Amélioration calcul des routes depuis buttoir