This commit is contained in:
f1iwq2
2024-03-06 15:41:14 +01:00
parent 315b803e40
commit 81d5c007d4
25 changed files with 2640 additions and 1884 deletions

View File

@@ -1,8 +1,8 @@
// Unité pour la configuration du décodeur Stéphane Ravaux
// http://stephane.ravaut.free.fr/Train_miniature/Decodeurs/Decodeur_DCC_Signaux_complexes_SNCF.html
unit UnitSR;
interface
uses
@@ -17,14 +17,14 @@ type
Label1: TLabel;
Label2: TLabel;
ComboBoxAdr2: TComboBox;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label300: TLabel;
Label301: TLabel;
Label302: TLabel;
Shape1: TShape;
LabelAdrSR2: TLabel;
Label7: TLabel;
Label8: TLabel;
Label6: TLabel;
Label3: TLabel;
Label4: TLabel;
Label303: TLabel;
LabelCV1: TLabel;
LabelCV2: TLabel;
LabelCV3: TLabel;
@@ -37,8 +37,8 @@ type
LabelCV8: TLabel;
Shape2: TShape;
LabelAdrSR3: TLabel;
Label10: TLabel;
Label11: TLabel;
Label5: TLabel;
Label6: TLabel;
ComboBoxAdr5: TComboBox;
ComboBoxAdr6: TComboBox;
LabelCV9: TLabel;
@@ -47,8 +47,8 @@ type
LabelCV12: TLabel;
Shape3: TShape;
LabelAdrSR4: TLabel;
Label12: TLabel;
Label13: TLabel;
Label7: TLabel;
Label8: TLabel;
ComboBoxAdr7: TComboBox;
ComboBoxAdr8: TComboBox;
LabelCV13: TLabel;
@@ -57,8 +57,8 @@ type
LabelCV16: TLabel;
Shape4: TShape;
LabelAdrSR5: TLabel;
Label14: TLabel;
Label15: TLabel;
Label9: TLabel;
Label10: TLabel;
ComboBoxAdr9: TComboBox;
ComboBoxAdr10: TComboBox;
LabelCV17: TLabel;
@@ -67,8 +67,8 @@ type
LabelCV20: TLabel;
Shape5: TShape;
LabelAdrSR6: TLabel;
Label16: TLabel;
Label17: TLabel;
Label11: TLabel;
Label12: TLabel;
ComboBoxAdr11: TComboBox;
ComboBoxAdr12: TComboBox;
LabelCV21: TLabel;
@@ -77,8 +77,8 @@ type
LabelCV24: TLabel;
Shape6: TShape;
LabelAdrSR7: TLabel;
Label18: TLabel;
Label19: TLabel;
Label13: TLabel;
Label14: TLabel;
LabelCV25: TLabel;
LabelCV26: TLabel;
LabelCV27: TLabel;
@@ -87,8 +87,8 @@ type
ComboBoxAdr14: TComboBox;
Shape7: TShape;
LabelAdrSR8: TLabel;
Label20: TLabel;
Label21: TLabel;
Label15: TLabel;
Label16: TLabel;
LabelCV29: TLabel;
LabelCV30: TLabel;
LabelCV31: TLabel;
@@ -96,7 +96,10 @@ type
ComboBoxAdr15: TComboBox;
ComboBoxAdr16: TComboBox;
LabelErreur: TLabel;
BitBtnok: TBitBtn;
Label900: TLabel;
EditNEsignal: TEdit;
Button1: TButton;
Shape8: TShape;
procedure FormActivate(Sender: TObject);
procedure ComboBoxAdr1Change(Sender: TObject);
procedure ComboBoxAdr2Change(Sender: TObject);
@@ -115,7 +118,8 @@ type
procedure ComboBoxAdr15Change(Sender: TObject);
procedure ComboBoxAdr16Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BitBtnokClick(Sender: TObject);
procedure EditNEsignalChange(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
public
@@ -125,7 +129,7 @@ type
var
FormSR: TFormSR;
Adr,IndexSig : integer;
//etatsDefSR : array[1..16] of integer; // états par défaut du décodeur SR
procedure couleurs_SR;
implementation
@@ -133,10 +137,47 @@ implementation
{$R *.dfm}
// efface/affiche les composants en fonction du nombre d'adresses (de 1 à 8)
procedure efface(nadr : integer);
var i : integer;
c : tComboBox;
Lb : tLabel;
s : string;
begin
for i:=1 to 16 do
begin
s:='ComboBoxAdr'+intToSTR(i);
c:=formSR.findComponent(s) as tComboBox;
c.Visible:=(i-1)<2*nadr ;
s:='Label'+intToSTR(i);
Lb:=formSR.findComponent(s) as tLabel;
Lb.Visible:=i-1<2*nadr;
s:='LabelCV'+intToSTR(i*2-1);
Lb:=formSR.findComponent(s) as tLabel;
Lb.Visible:=i-1<2*nadr;
s:='LabelCV'+intToSTR(i*2);
Lb:=formSR.findComponent(s) as tLabel;
Lb.Visible:=i-1<2*nadr;
end;
for i:=1 to 8 do
begin
s:='LabelAdrSR'+intToSTR(i);
Lb:=formSR.findComponent(s) as tLabel;
Lb.visible:=(i-1)<nadr ;
end;
end;
// valeurs des CV du décodeur SR, uniquement pour l'affichage
procedure etat_SR(etat : integer;var etat1,etat2 : integer) ;
begin
// etat1 correspond à l'allumage des leds du 1er cycle clignotant
// etat2 correspond à l'allumage des leds du 2eme cycle clignotant
etat1:=0;
etat2:=0;
case etat of
// carré
1 : begin etat1:=$81;etat2:=$81;end;
@@ -180,99 +221,6 @@ begin
end;
procedure TFormSR.FormActivate(Sender: TObject);
var erreur,etat1,etat2 : integer;
begin
Val(FormConfig.EditAdrSig.text,Adr,erreur);
indexSig:=index_Signal(Adr);
if IndexSig=0 then LabelErreur.caption:='Erreur feu inexistant'
else
begin
LabelAdrSR1.caption:=intToSTR(Adr);
LabelAdrSR2.caption:=intToSTR(Adr+1);
LabelAdrSR3.caption:=intToSTR(Adr+2);
LabelAdrSR4.caption:=intToSTR(Adr+3);
LabelAdrSR5.caption:=intToSTR(Adr+4);
LabelAdrSR6.caption:=intToSTR(Adr+5);
LabelAdrSR7.caption:=intToSTR(Adr+6);
LabelAdrSR8.caption:=intToSTR(Adr+7);
ComboBoxAdr1.ItemIndex:=Signaux[indexSig].SR[1].sortie1;
ComboBoxAdr2.ItemIndex:=Signaux[indexSig].SR[1].sortie0;
ComboBoxAdr3.ItemIndex:=Signaux[indexSig].SR[2].sortie1;
ComboBoxAdr4.ItemIndex:=Signaux[indexSig].SR[2].sortie0;
ComboBoxAdr5.ItemIndex:=Signaux[indexSig].SR[3].sortie1;
ComboBoxAdr6.ItemIndex:=Signaux[indexSig].SR[3].sortie0;
ComboBoxAdr7.ItemIndex:=Signaux[indexSig].SR[4].sortie1;
ComboBoxAdr8.ItemIndex:=Signaux[indexSig].SR[4].sortie0;
ComboBoxAdr9.ItemIndex:=Signaux[indexSig].SR[5].sortie1;
ComboBoxAdr10.ItemIndex:=Signaux[indexSig].SR[5].sortie0;
ComboBoxAdr11.ItemIndex:=Signaux[indexSig].SR[6].sortie1;
ComboBoxAdr12.ItemIndex:=Signaux[indexSig].SR[6].sortie0;
ComboBoxAdr13.ItemIndex:=Signaux[indexSig].SR[7].sortie1;
ComboBoxAdr14.ItemIndex:=Signaux[indexSig].SR[7].sortie0;
ComboBoxAdr15.ItemIndex:=Signaux[indexSig].SR[8].sortie1;
ComboBoxAdr16.ItemIndex:=Signaux[indexSig].SR[8].sortie0;
etat_SR(Signaux[indexSig].SR[1].sortie1,etat1,etat2);
labelCV1.Caption:='CV='+IntToSTR(etat1);
labelCV2.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[1].sortie0,etat1,etat2);
labelCV3.Caption:='CV='+IntToSTR(etat1);
labelCV4.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[2].sortie1,etat1,etat2);
labelCV5.Caption:='CV='+IntToSTR(etat1);
labelCV6.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[2].sortie0,etat1,etat2);
labelCV7.Caption:='CV='+IntToSTR(etat1);
labelCV8.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[3].sortie1,etat1,etat2);
labelCV9.Caption:='CV='+IntToSTR(etat1);
labelCV10.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[3].sortie0,etat1,etat2);
labelCV11.Caption:='CV='+IntToSTR(etat1);
labelCV12.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[4].sortie1,etat1,etat2);
labelCV13.Caption:='CV='+IntToSTR(etat1);
labelCV14.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[4].sortie0,etat1,etat2);
labelCV15.Caption:='CV='+IntToSTR(etat1);
labelCV16.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[5].sortie1,etat1,etat2);
labelCV17.Caption:='CV='+IntToSTR(etat1);
labelCV18.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[5].sortie0,etat1,etat2);
labelCV19.Caption:='CV='+IntToSTR(etat1);
labelCV20.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[6].sortie1,etat1,etat2);
labelCV21.Caption:='CV='+IntToSTR(etat1);
labelCV22.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[6].sortie0,etat1,etat2);
labelCV23.Caption:='CV='+IntToSTR(etat1);
labelCV24.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[7].sortie1,etat1,etat2);
labelCV25.Caption:='CV='+IntToSTR(etat1);
labelCV26.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[7].sortie0,etat1,etat2);
labelCV27.Caption:='CV='+IntToSTR(etat1);
labelCV28.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[8].sortie1,etat1,etat2);
labelCV29.Caption:='CV='+IntToSTR(etat1);
labelCV30.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[8].sortie0,etat1,etat2);
labelCV31.Caption:='CV='+IntToSTR(etat1);
labelCV32.Caption:='CV='+IntToSTR(etat2);
end;
end;
procedure Maj_DB;
var s : string;
begin
@@ -481,9 +429,100 @@ begin
end;
procedure TFormSR.FormCreate(Sender: TObject);
var i : integer;
var i,y : integer;
c : tComboBox;
sh : tShape;
Lb : tLabel;
s : string;
begin
{
// états par défaut du décodeur SR , d'après le tableau Etats[] il y a 13 états valides.
// manque états 11: ralen30 - 12: ralen 60 - 13 rappel 30 - 14 rappel 60 - 15: ralen 60 + jaune cli - 17 : rappel 30 + jaune cli ??
// sortie 0
etatsDefSR[1]:=1; // carré - sortie 1
etatsDefSR[2]:=6; // violet - sortie 2
// sortie 1
etatsDefSR[3]:=2; // sémaphore - sortie 1
etatsDefSR[4]:=3; // sémaphore cli - sortie 2
// sortie 2
etatsDefSR[5]:=9; // jaune - sortie 1
etatsDefSR[6]:=10; // jaune cli - sortie 2
// sortie 3
etatsDefSR[7]:=4; // vert - sortie 1
etatsDefSR[8]:=5; // vert cli - sortie 2
// sortie 4
etatsDefSR[9]:=7; // blanc - sortie 1
etatsDefSR[10]:=8; // blanc cli - sortie 2
// sortie 5
etatsDefSR[11]:=0; // invalide- sortie 1
etatsDefSR[12]:=0; // invalide- sortie 2
// sortie 6
etatsDefSR[13]:=16; // jaune + rappel 30 - sortie 1
etatsDefSR[14]:=18; // jaune + rappel 60 - sortie 2
// sortie 7
etatsDefSR[15]:=19; // jaune cli + rappel 60 - sortie 1
etatsDefSR[16]:=0; // invalide - sortie 2
}
// ajustement des composants
for i:=1 to 16 do
begin
y:=(i-1)*30+30;
s:='ComboBoxAdr'+intToSTR(i);
c:=findComponent(s) as tcomboBox;
c.Top:=y;
s:='Label'+intToSTR(i);
Lb:=findComponent(s) as tLabel;
Lb.top:=y+4;
s:='LabelCV'+intToSTR(i*2-1);
Lb:=findComponent(s) as tLabel;
Lb.top:=y+4;
s:='LabelCV'+intToSTR(i*2);
Lb:=findComponent(s) as tLabel;
Lb.top:=y+4;
end;
for i:=1 to 8 do
begin
y:=(i-1)*60;
s:='Shape'+intToSTR(i);
sh:=findComponent(s) as tshape;
sh.top:=y+86;
end;
for i:=1 to 8 do
begin
y:=(i-1)*60;
s:='LabelAdrSR'+intToSTR(i);
Lb:=findComponent(s) as tLabel;
Lb.top:=y+48;
Lb.Font.Style:=[fsBold];
end;
position:=poMainFormCenter;
{
for i:=1 to 16 do
begin
ComboBoxAdr1.items.add('');
ComboBoxAdr2.items.add('');
ComboBoxAdr3.items.add('');
ComboBoxAdr4.items.add('');
ComboBoxAdr5.items.add('');
ComboBoxAdr6.items.add('');
ComboBoxAdr7.items.add('');
ComboBoxAdr8.items.add('');
ComboBoxAdr9.items.add('');
ComboBoxAdr10.items.add('');
ComboBoxAdr11.items.add('');
ComboBoxAdr12.items.add('');
ComboBoxAdr13.items.add('');
ComboBoxAdr14.items.add('');
ComboBoxAdr15.items.add('');
ComboBoxAdr16.items.add('');
}
for i:=0 to 19 do
begin
ComboBoxAdr1.items.add(etats[i]);
@@ -506,7 +545,159 @@ begin
couleurs_SR;
end;
procedure TFormSR.BitBtnokClick(Sender: TObject);
procedure TFormSR.FormActivate(Sender: TObject);
var erreur,etat1,etat2,ne : integer;
begin
Val(FormConfig.EditAdrSig.text,Adr,erreur);
indexSig:=index_Signal(Adr);
if IndexSig=0 then LabelErreur.caption:='Erreur 512 : signal '+intToSTR(Adr)+' inexistant'
else
begin
LabelAdrSR1.caption:=intToSTR(Adr);
LabelAdrSR2.caption:=intToSTR(Adr+1);
LabelAdrSR3.caption:=intToSTR(Adr+2);
LabelAdrSR4.caption:=intToSTR(Adr+3);
LabelAdrSR5.caption:=intToSTR(Adr+4);
LabelAdrSR6.caption:=intToSTR(Adr+5);
LabelAdrSR7.caption:=intToSTR(Adr+6);
LabelAdrSR8.caption:=intToSTR(Adr+7);
ComboBoxAdr1.ItemIndex:=Signaux[indexSig].SR[1].sortie1;
ComboBoxAdr2.ItemIndex:=Signaux[indexSig].SR[1].sortie0;
ComboBoxAdr3.ItemIndex:=Signaux[indexSig].SR[2].sortie1;
ComboBoxAdr4.ItemIndex:=Signaux[indexSig].SR[2].sortie0;
ComboBoxAdr5.ItemIndex:=Signaux[indexSig].SR[3].sortie1;
ComboBoxAdr6.ItemIndex:=Signaux[indexSig].SR[3].sortie0;
ComboBoxAdr7.ItemIndex:=Signaux[indexSig].SR[4].sortie1;
ComboBoxAdr8.ItemIndex:=Signaux[indexSig].SR[4].sortie0;
ComboBoxAdr9.ItemIndex:=Signaux[indexSig].SR[5].sortie1;
ComboBoxAdr10.ItemIndex:=Signaux[indexSig].SR[5].sortie0;
ComboBoxAdr11.ItemIndex:=Signaux[indexSig].SR[6].sortie1;
ComboBoxAdr12.ItemIndex:=Signaux[indexSig].SR[6].sortie0;
ComboBoxAdr13.ItemIndex:=Signaux[indexSig].SR[7].sortie1;
ComboBoxAdr14.ItemIndex:=Signaux[indexSig].SR[7].sortie0;
ComboBoxAdr15.ItemIndex:=Signaux[indexSig].SR[8].sortie1;
ComboBoxAdr16.ItemIndex:=Signaux[indexSig].SR[8].sortie0;
{
for i:=1 to 16 do
begin
ComboBoxAdr1.Items[i-1]:=etats[etatsDefSR[i]];
ComboBoxAdr2.Items[i-1]:=etats[etatsDefSR[i]];
ComboBoxAdr3.Items[i-1]:=etats[etatsDefSR[i]];
ComboBoxAdr4.Items[i-1]:=etats[etatsDefSR[i]];
ComboBoxAdr5.Items[i-1]:=etats[etatsDefSR[i]];
ComboBoxAdr6.Items[i-1]:=etats[etatsDefSR[i]];
ComboBoxAdr7.Items[i-1]:=etats[etatsDefSR[i]];
ComboBoxAdr8.Items[i-1]:=etats[etatsDefSR[i]];
ComboBoxAdr9.Items[i-1]:=etats[etatsDefSR[i]];
ComboBoxAdr10.Items[i-1]:=etats[etatsDefSR[i]];
ComboBoxAdr11.Items[i-1]:=etats[etatsDefSR[i]];
ComboBoxAdr12.Items[i-1]:=etats[etatsDefSR[i]];
ComboBoxAdr13.Items[i-1]:=etats[etatsDefSR[i]];
ComboBoxAdr14.Items[i-1]:=etats[etatsDefSR[i]];
ComboBoxAdr15.Items[i-1]:=etats[etatsDefSR[i]];
ComboBoxAdr16.Items[i-1]:=etats[etatsDefSR[i]];
end; }
ne:=Signaux[indexSig].Na; // nombre d'états du signal (2 à 19)
EditNESignal.Text:=intToSTr(ne);
if ne=2 then
begin
ComboBoxAdr3.Enabled:=false;
ComboBoxAdr4.Enabled:=false;
ComboBoxAdr5.Enabled:=false;
ComboBoxAdr6.Enabled:=false;
ComboBoxAdr7.Enabled:=false;
ComboBoxAdr8.Enabled:=false;
ComboBoxAdr9.Enabled:=false;
ComboBoxAdr10.Enabled:=false;
ComboBoxAdr11.Enabled:=false;
ComboBoxAdr12.Enabled:=false;
ComboBoxAdr13.Enabled:=false;
ComboBoxAdr14.Enabled:=false;
ComboBoxAdr15.Enabled:=false;
ComboBoxAdr16.Enabled:=false;
end;
etat_SR(Signaux[indexSig].SR[1].sortie1,etat1,etat2);
labelCV1.Caption:='CV='+IntToSTR(etat1);
labelCV2.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[1].sortie0,etat1,etat2);
labelCV3.Caption:='CV='+IntToSTR(etat1);
labelCV4.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[2].sortie1,etat1,etat2);
labelCV5.Caption:='CV='+IntToSTR(etat1);
labelCV6.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[2].sortie0,etat1,etat2);
labelCV7.Caption:='CV='+IntToSTR(etat1);
labelCV8.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[3].sortie1,etat1,etat2);
labelCV9.Caption:='CV='+IntToSTR(etat1);
labelCV10.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[3].sortie0,etat1,etat2);
labelCV11.Caption:='CV='+IntToSTR(etat1);
labelCV12.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[4].sortie1,etat1,etat2);
labelCV13.Caption:='CV='+IntToSTR(etat1);
labelCV14.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[4].sortie0,etat1,etat2);
labelCV15.Caption:='CV='+IntToSTR(etat1);
labelCV16.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[5].sortie1,etat1,etat2);
labelCV17.Caption:='CV='+IntToSTR(etat1);
labelCV18.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[5].sortie0,etat1,etat2);
labelCV19.Caption:='CV='+IntToSTR(etat1);
labelCV20.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[6].sortie1,etat1,etat2);
labelCV21.Caption:='CV='+IntToSTR(etat1);
labelCV22.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[6].sortie0,etat1,etat2);
labelCV23.Caption:='CV='+IntToSTR(etat1);
labelCV24.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[7].sortie1,etat1,etat2);
labelCV25.Caption:='CV='+IntToSTR(etat1);
labelCV26.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[7].sortie0,etat1,etat2);
labelCV27.Caption:='CV='+IntToSTR(etat1);
labelCV28.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[8].sortie1,etat1,etat2);
labelCV29.Caption:='CV='+IntToSTR(etat1);
labelCV30.Caption:='CV='+IntToSTR(etat2);
etat_SR(Signaux[indexSig].SR[8].sortie0,etat1,etat2);
labelCV31.Caption:='CV='+IntToSTR(etat1);
labelCV32.Caption:='CV='+IntToSTR(etat2);
end;
end;
procedure TFormSR.EditNEsignalChange(Sender: TObject);
var i,erreur : integer;
begin
val(EditNESignal.Text,i,erreur);
if (erreur<>0) or (i<1) or (i>8) then exit;
Signaux[ligneClicSig+1].na:=i;
maj_db;
efface(i);
end;
procedure TFormSR.Button1Click(Sender: TObject);
begin
close;
end;