This commit is contained in:
f1iwq2
2023-12-23 09:43:58 +01:00
parent e5f4920b6e
commit 5a440bb9cd
9 changed files with 289 additions and 312 deletions

View File

@@ -410,7 +410,6 @@ type
procedure ButtonConfigSRClick(Sender: TObject);
procedure EditDet1Change(Sender: TObject);
procedure EditSuiv1Change(Sender: TObject);
procedure EditAdrSigChange(Sender: TObject);
procedure EditDet2Change(Sender: TObject);
procedure EditSuiv2Change(Sender: TObject);
procedure EditDet3Change(Sender: TObject);
@@ -528,6 +527,7 @@ type
procedure RadioCdeDecClick(Sender: TObject);
procedure Toutslectionner1Click(Sender: TObject);
procedure ButtonChercheClick(Sender: TObject);
@@ -1218,7 +1218,7 @@ begin
AfficheDebug('Erreur 670 : index nul',clred);
exit;
end;
j:=pos(',',s);
s:=chaine_signal;
j:=pos(',',s);
if j>1 then
begin
@@ -1961,11 +1961,55 @@ begin
writeln(fichierN,'/------------');
writeln(fichierN,section_placement_ch);
for i:=1 to 6 do
s:=placement[i].train+','+inttoSTR(placement[i].detecteur)+',';
begin
if placement[i].inverse then s:=s+'1' else s:=s+'0';
s:=placement[i].train+','+inttoSTR(placement[i].detecteur)+',';
s:=s+intToSTR(placement[i].detdir)+',';
if placement[i].inverse then s:=s+'1' else s:=s+'0';
writeln(fichierN,s);
end;
writeln(fichierN,'0');
// périphériques comusb
writeln(fichierN,'/------------');
writeln(fichierN,section_accCOM_ch);
for i:=1 to NbPeriph do
begin
s:=encode_Periph(i);
writeln(fichierN,s);
end;
writeln(fichierN,'0');
closefile(fichierN);
end;
// trie les aiguillages
procedure trier_aig;
var i,j : integer;
temp : TAiguillage;
begin
for i:=1 to MaxAiguillage do
begin
for j:=i+1 to MaxAiguillage do
begin
if aiguillage[i].Adresse>aiguillage[j].adresse then
begin
temp:=aiguillage[i];
aiguillage[i]:=aiguillage[j];
aiguillage[j]:=temp;
end;
end;
end;
for i:=1 to MaxAiguillage do
index_accessoire[aiguillage[i].adresse]:=i;
end;
// trie les signaux
procedure trier_sig;
var i,j : integer;
temp : TSignal;
begin
for i:=1 to NbreFeux do
begin
for j:=i+1 to NbreFeux do
begin
if feux[i].Adresse>feux[j].adresse then
@@ -2369,8 +2413,7 @@ var s,sa,SOrigine: string;
begin
if MaxAiguillage>=NbreMaxiAiguillages then
begin
end
else
Affiche('Nombre maximal d''aiguillages atteint',clRed);
end
else
inc(maxaiguillage);
@@ -2874,28 +2917,10 @@ var s,sa,SOrigine: string;
Tablo_periph[NbPeriph].protocole:=sa;
i:=com_socket(NbPeriph);
if i=1 then
inc(NbPeriph_COMUSB);
Tablo_periph[NbPeriph].numComposant:=NbPeriph_COMUSB;
end;
if i=2 then
begin
inc(NbPeriph_socket);
Tablo_periph[NbPeriph].numComposant:=NbPeriph_socket;
end;
// extraire le numéro de com5:9600,n,8,1
i:=extract_int(sa);
if i=0 then Affiche('Erreur COM nul : '+sOrigine,clred);
Tablo_periph[NbPeriph].NumCom:=i;
Tablo_com_cde[NbPeriph].NumPeriph:=NbPeriph;
end;
until (sOrigine='0') or (NbPeriph>=NbMaxi_Periph);
end;
// trie les signaux
begin
inc(NbPeriph_COMUSB);
Tablo_periph[NbPeriph].numComposant:=NbPeriph_COMUSB;
end;
if i=2 then
begin
inc(NbPeriph_socket);
@@ -8014,41 +8039,6 @@ begin
end;
procedure TFormConfig.CheckRAZClick(Sender: TObject);
begin
if clicliste or (ligneclicAct<0) then exit;
if affevt then affiche('Evt CheckRaz Change',clyellow);
if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then
with Formconfig do
begin
if radioButtonAccess.Checked then
begin
tablo_actionneur[ligneClicAct+1].raz:=CheckRAZ.checked;
s:=encode_act_loc_son(ligneClicAct+1);
ListBoxAct.Items[ligneClicAct]:=s;
ListBoxAct.Selected[ligneClicAct]:=true;
end;
end;
end;
procedure TFormConfig.EditAdrSigChange(Sender: TObject);
var s : string;
i, erreur : integer;
begin
if clicliste then exit;
if affevt then Affiche('Evt adresse signal',clOrange);
// attention interférence avec clic droit propriétés sur un signal qui génère un evt sur ce contrôle
if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then
with Formconfig do
begin
s:=EditAdrSig.Text;
if (s='') or (ligneClicSig<0) then exit;
Val(s,i,erreur);
if (erreur<>0) or (i<=0) or (i>MaxAcc) then
begin
EditAdrSig.Color:=clred;
LabelInfo.caption:='Erreur adresse signal ';exit;
end;
if (index_Signal(i)<>0) then
var s : string;
begin
if clicliste or (ligneclicAct<0) then exit;
@@ -8626,26 +8616,6 @@ begin
selected[NbrePN-1]:=true;
perform(WM_VSCROLL,SB_BOTTOM,0);
end;
formconfig.GroupBoxRadio.Visible:=false;
formconfig.LabelInfo.caption:='';
LigneCliqueePN:=NbrePN-1;
AncLigneCliqueePN:=LigneCliqueePN;
tablo_PN[lignecliqueePN+1].Pulse:=1;
Aff_champs_PN(nbrePN);
clicliste:=false;
config_modifie:=true;
end;
procedure TFormConfig.ButtonNouvPNClick(Sender: TObject);
begin
ajoute_pn;
end;
// trie les aiguillages
procedure trier_aig;
var i,j : integer;
temp : TAiguillage;
formconfig.GroupBoxRadio.Visible:=false;
formconfig.LabelInfo.caption:='';
@@ -9830,58 +9800,62 @@ begin
end;
end;
end;
begin
Affiche('TCO: Erreur de proximité composants incompatibles: cellules TCO'+intToSTR(indexTCO)+' ['+intToSTR(x)+','+intToSTR(y)+'] ',clred);
if not(verif_cellule(indexTCO,x,y,i)) then
begin
end;
end;
end;
// 11 Divers
i:=pos(':',portcom);j:=pos(',',portcom);
val(copy(portcom,i+1,j-i),vitesse,l);
if (protocole=2) and (vitesse<>115200) then Affiche('La vitesse COM/USB en procotole DCC++ doit être de 115200 bauds',clred);
// si xpressnet, pas d'accesoires entre 257 à 272
AdrOk:=True;
if Verif_AdrXpressNet=1 then
Affiche('TCO: Erreur de proximité composants incompatibles: cellules TCO'+intToSTR(indexTCO)+' ['+intToSTR(x)+','+intToSTR(y)+'] ',clred);
ok:=false;
end;
end;
begin
adresse:=aiguillage[i].Adresse ;
if (adresse>=257) and (adresse<=272) then
begin
AdrOk:=false;
ok:=false;
Affiche('Erreur 13: l''aiguillage '+IntToSTR(adresse)+' se trouve dans la plage des accessoires DCC interdits (257-272) en Xpressnet',clred);
end;
end;
for i:=1 to NbreFeux do
begin
adresse:=feux[i].Adresse;
nc:=Nombre_adresses_signal(adresse);
end;
// 11 Divers
i:=pos(':',portcom);j:=pos(',',portcom);
val(copy(portcom,i+1,j-i),vitesse,l);
ok:=false;
Affiche('Erreur 14: le signal '+IntToSTR(adresse)+' se trouve dans la plage des accessoires DCC interdits (257-272)',clred);
if (protocole=2) and (vitesse<>115200) then Affiche('La vitesse COM/USB en procotole DCC++ doit être de 115200 bauds',clred);
// si xpressnet, pas d'accesoires entre 257 à 272
AdrOk:=True;
if Verif_AdrXpressNet=1 then
begin
for i:=1 to maxTablo_act do
begin
if Tablo_actionneur[i].act then
begin
for k:=1 to NDetecteurs do
begin
adr:=((adresse_detecteur[k]-1) div 2) +1; // transforme l'adresse du détecteur en accessoire (ex 513 devient 257
for i:=1 to maxaiguillage do
if (adresse>=257) and (adresse<=272) then
begin
adresse:=aiguillage[i].Adresse ;
if adresse=adr then
begin
AdrOk:=false;
ok:=false;
Affiche('Erreur 13: l''aiguillage '+IntToSTR(adresse)+' chevauche le détecteur '+intToSTR(adresse_detecteur[k]),clred);
end;
end;
for i:=1 to NbreFeux do
begin
adresse:=feux[i].Adresse;
nc:=Nombre_adresses_signal(adresse);
if (adresse=adr) or ((adresse+nc-1>=adr) and (adresse+nc<=adr)) then
begin
dec:=feux[i].decodeur;
AdrOk:=false;
ok:=false;
Affiche('Erreur 14: le signal '+IntToSTR(adresse)+' chevauche le détecteur '+intToStr(adresse_detecteur[k]),clred);
Affiche('en Xpressnet car son décodeur '+decodeur[dec]+' occupe '+intToSTR(nc)+' adresses de '+intToSTR(adresse)+' à '+intToSTR(adresse+nc-1),clred);
end;
end;
// actionneurs
for i:=1 to maxTablo_act do
begin
if Tablo_actionneur[i].act then
begin
adresse:=Tablo_actionneur[i].accessoire;
if (adresse=adr) then
begin
AdrOk:=false;
ok:=false;
Affiche('Erreur 15: l''actionneur '+IntToSTR(Tablo_actionneur[i].adresse)+' enclenche l''accessoire '+intToSTR(adresse),clred);
Affiche('et chevauche le détecteur '+intToStr(adresse_detecteur[k])+' interdit en XpressNet',clred);
end;
@@ -13196,6 +13170,43 @@ procedure TFormConfig.EditPortServeurChange(Sender: TObject);
var i,n,IndexListe : integer;
trouve : boolean;
Periph : Tperipherique;
begin
s : string;
begin
n:=ListBoxPeriph.Count;
if n<=1 then exit;
i:=0;
repeat
trouve:=ListBoxPeriph.Selected[i];
inc(i);
until (i=n) or trouve;
if not(trouve) then exit;
dec(i);
if i=n-1 then exit;
IndexListe:=i;
LabelNumeroP.caption:='';
// inverse les deux entrées de la listebox
s:=ListBoxPeriph.Items[i+1];
ListBoxPeriph.Items[i+1]:=ListBoxPeriph.Items[i];
ListBoxPeriph.Items[i]:=s;
inc(i);
// inverse les deux entrées des périphériques
Periph:=Tablo_periph[i+1];
Tablo_periph[i+1]:=Tablo_periph[i];
Tablo_periph[i]:=Periph;
for i:=0 to n-1 do
begin
ListBoxPeriph.Selected[i]:=false;
end;
ListBoxPeriph.Selected[IndexListe+1]:=true;
ligneClicAccPeriph:=IndexListe+1;
Aff_champs_accPeriph_tablo(indexListe+2);
// ancien1,ancien2,nouveau1,nouveau2
reaffecte_index_combos(indexListe+1,IndexListe+2,IndexListe+2,IndexListe+1);
fabrique_combos_periph;