This commit is contained in:
f1iwq2
2024-01-21 11:03:12 +01:00
parent ed7935a641
commit 13b8f71a1b
14 changed files with 1566 additions and 736 deletions

View File

@@ -1041,6 +1041,8 @@ begin
if not(croi) then
begin
case aiguillage[index].vitesse of
0 : s:=s+',V0';
30 : s:=s+',V30';
60 : s:=s+',V60';
else begin
s:=s+',V'+formconfig.EditSpecifique.Text;
@@ -2669,7 +2671,7 @@ var s,sa,SOrigine: string;
delete(enregistrement,1,virgule);
end;
// si vitesse définie
// si vitesse définie
if (length(enregistrement)<>0) then
if enregistrement[1]='V' then
begin
@@ -2688,7 +2690,7 @@ var s,sa,SOrigine: string;
begin
if not(tjsC) then begin Affiche('Erreur paramètre L ligne: '+sOrigine,clred);exit;end;
inc(num_champ);
delete(enregistrement,1,1);
delete(enregistrement,1,1);
Val(enregistrement,adr,erreur);
aiguillage[maxaiguillage].tjsInt:=adr;
c:=#0;
@@ -2708,6 +2710,17 @@ var s,sa,SOrigine: string;
begin
inc(num_champ);
delete(enregistrement,i,i+4);
Val(enregistrement,position,erreur);
i:=pos(',',enregistrement);
if i<>0 then delete(enregistrement,1,i);
Val(enregistrement,j,erreur);
aiguillage[maxaiguillage].temps:=j;
aiguillage[maxaiguillage].posinit:=position;
i:=pos(')',enregistrement);
delete(enregistrement,1,i);
virgule:=pos(',',enregistrement);if virgule=0 then virgule:=length(enregistrement)+1;
delete(enregistrement,1,virgule);
end;
// nombre d'états de la TJD
if (length(enregistrement)<>0) then
@@ -5753,6 +5766,7 @@ begin
procedure Aff_champs_accPeriph_tablo(index : integer);
begin
if (index<1) or (index>NbPeriph) then exit;
clicliste:=true;
formConfig.EditNomPeriph.Text:=Tablo_periph[index].nom;
cb1.Checked:=Tablo_periph[index].ScvAig;
cb2.Checked:=Tablo_periph[index].ScvDet;
@@ -5760,7 +5774,7 @@ begin
cbVis.Checked:=Tablo_periph[index].ScvVis;
CheckBoxCR.Checked:=Tablo_periph[index].cr;
EditPortCde.text:=Tablo_periph[index].protocole;
EditPortCde.text:=Tablo_periph[index].protocole;
MemoPeriph.Clear;
clicliste:=false;
end;
@@ -5877,14 +5891,14 @@ begin
if (aiguillage[ind].EtatTJD=4) or tjs then
begin
// droit haut
EditDevie_HD.Text:=intToSTR(aiguillage[id2].Adevie)+aiguillage[id2].AdevieB;
EditDevie_HD.Text:=intToSTR(aiguillage[id2].Adevie)+aiguillage[id2].AdevieB;
EditDevie_HD.Hint:=TypeElAIg_to_char(aiguillage[id2].Adevie,aiguillage[id2].AdevieB);
LabelTJD1.Caption:=IntToSTR(adresse);
// droit bas
EditDroit_BD.Text:=intToSTR(aiguillage[id2].Adroit)+aiguillage[Id2].AdroitB;
EditDroit_BD.Hint:=TypeElAIg_to_char(aiguillage[id2].ADroit,aiguillage[Id2].AdroitB);
LabelTJD2.Caption:=IntToSTR(adr2);
LabelTJD2.Caption:=IntToSTR(adr2);
end;
if ((aiguillage[ind].EtatTJD=2) and tjd) or croi then
@@ -5971,6 +5985,11 @@ begin
if tri then
begin
ComboBoxAig.ItemIndex:=3; // index de la combobox 0=aiguillage 1=TJD 2=TJS 3=aiguillage triple
EditAigTriple.Visible:=true;
labelTJD1.Visible:=false;
LabelTJD2.Visible:=false;
EditPointe_BG.ReadOnly:=false;
labelBG.Caption:='P';
ImageAffiche.Picture.BitMap:=ImageTri.Picture.Bitmap;
EditDevieS2.Visible:=true;
Label18.Visible:=true;
@@ -9280,8 +9299,9 @@ begin
AncModel:=model;
model:=BrancheN[i][j].BType; // 1= détecteur 2= aiguillage 4=Buttoir
if (model=aig) then
if (model=aig) then
begin
//affiche('trouvé aig '+intToSTR(detect),clyellow);
modAig:=aiguillage[Index_Aig(detect)].modele;
if (modAig=rien) then
@@ -9296,6 +9316,7 @@ begin
Affiche('Erreur 3.2 branche '+intToSTR(i)+' : le dernier élément d''une branche doit être un buttoir ou un aiguillage',clred);
end;
if verif_extr_branches<>0 then ok:=false;
// vérification de la cohérence2
// parcoure les aiguillages pour voir si les détecteurs sont en branches des détecteurs
@@ -9307,100 +9328,119 @@ begin
if ((modAig=tjd) and (aiguillage[Indexaig].EtatTJD=4)) or (modAig=tjs) then
begin
if aiguillage[Indexaig].Ddroit<>aiguillage[Indexaig].Ddevie then
if aiguillage[Indexaig].Ddroit<>aiguillage[Indexaig].Ddevie then
begin
Affiche('Erreur 7: la TJD/S '+IntToStr(Indexaig)+' a des adresses de destination différentes ('+intToSTR(aiguillage[Indexaig].Ddroit)+' et '+intToSTR(aiguillage[Indexaig].Ddevie)+')',clred);
begin
Affiche('Erreur 7: la TJD/S '+IntToStr(Indexaig)+' a des adresses de destination différentes ('+intToSTR(aiguillage[Indexaig].Ddroit)+' et '+intToSTR(aiguillage[Indexaig].Ddevie)+')',clred);
ok:=false;
end;
// vérifier si son homologue est une tjd
end;
// vérifier si son homologue est une tjd
adr2:=aiguillage[Indexaig].Ddroit;
if (aiguillage[Index_Aig(adr2)].modele<>tjd) and (aiguillage[Index_Aig(adr2)].modele<>tjs) then
if (aiguillage[Index_Aig(adr2)].modele<>tjd) and (aiguillage[Index_Aig(adr2)].modele<>tjs) then
begin
Affiche('Erreur 8: l''aiguillage '+intToStr(Adr2)+' n''est pas une TJD/S ou n''existe pas, mais apparait dans la TJD/S '+IntToSTR(aiguillage[Indexaig].Adresse),clred);
ok:=false;
end;
end;
// vérifier si l'aiguillage est dans les branches inutile
{if aiguillage[Indexaig].modele<>rien then
begin
trouve_aiguillage(aiguillage[Indexaig].adresse); // passe l'adresse de l'aiguillage à trouver
if (IndexBranche_trouve=0) then
begin
Affiche('Avertissement 6: aiguillage '+intToSTR(aiguillage[Indexaig].adresse)+' décrit dans les aiguillages ; absent dans la description des branches',clOrange);
ok:=false;
end;
end;}
// vérifier si le détecteur sur la position droite est dans les branches
adr:=aiguillage[Indexaig].Adroit;
if (aiguillage[Indexaig].AdroitB='Z') or (aiguillage[Indexaig].AdroitB=#0) then
begin
trouve_detecteur(adr);
if IndexBranche_trouve=0 then
begin
Affiche('Erreur 21.1: détecteur '+intToSTR(adr)+' décrit dans l''aiguillage '+intToSTR(aiguillage[Indexaig].adresse)+' mais absent dans la description des branches',clred);
ok:=false;
end
else
begin
AdrAig:=aiguillage[IndexAig].Adresse;
det1br:=brancheN[branche_trouve,indexBranche_trouve-1].Adresse; // adresse avant détecteur
det2br:=brancheN[branche_trouve,indexBranche_trouve+1].Adresse; // adresse après détecteur
if (det1br<>AdrAig) and (det2br<>AdrAig) and (adr<>0) then
begin
Affiche('Erreur 21.2: Le détecteur '+intToSTR(adr)+' est décrit dans l''aiguillage '+intToSTR(aiguillage[Indexaig].adresse)+' mais déclaré dans la ',clred);
s:='branche '+intToSTR(Branche_trouve)+' entre';
if brancheN[branche_trouve,indexBranche_trouve-1].BType=aig then s:=s+' l''aiguillage ' else s:=s+' le détecteur ';
s:=s+intToSTR(det1br)+' et ';
if brancheN[branche_trouve,indexBranche_trouve+1].BType=aig then s:=s+' l''aiguillage ' else s:=s+' le détecteur ';
s:=s+intToSTR(det2br);
Affiche(s,clred);
ok:=false;
end;
end;
end;
// vérifier si le détecteur sur la position déviée est dans les branches
adr:=aiguillage[Indexaig].Adevie;
if (aiguillage[Indexaig].AdevieB='Z') or (aiguillage[Indexaig].AdevieB=#0) then
begin
trouve_detecteur(adr);
if IndexBranche_trouve=0 then
begin
Affiche('Erreur 22.1: détecteur '+intToSTR(adr)+' décrit dans l''aiguillage '+intToSTR(aiguillage[Indexaig].adresse)+' mais absent dans la description des branches',clRed);
ok:=false;
end
else
begin
AdrAig:=aiguillage[IndexAig].Adresse;
det1br:=brancheN[branche_trouve,indexBranche_trouve-1].Adresse; // adresse avant détecteur
det2br:=brancheN[branche_trouve,indexBranche_trouve+1].Adresse; // adresse après détecteur
if (det1br<>AdrAig) and (det2br<>AdrAig) and (adr<>0) then
begin
Affiche('Erreur 22.2: Le détecteur '+intToSTR(adr)+' est décrit dans l''aiguillage '+intToSTR(aiguillage[Indexaig].adresse)+' mais déclaré dans la ',clred);
s:='branche '+intToSTR(Branche_trouve)+' entre';
if brancheN[branche_trouve,indexBranche_trouve-1].BType=aig then s:=s+' l''aiguillage ' else s:=s+' le détecteur ';
s:=s+intToSTR(det1br)+' et ';
if brancheN[branche_trouve,indexBranche_trouve+1].BType=aig then s:=s+' l''aiguillage ' else s:=s+' le détecteur ';
s:=s+intToSTR(det2br);
Affiche(s,clred);
ok:=false;
end;
end;
end;
// vérifier si le détecteur sur la pointe est dans les branches
adr:=aiguillage[Indexaig].Apointe;
if ( ((aiguillage[Indexaig].ApointeB='Z') or (aiguillage[Indexaig].ApointeB=#0)) and (aiguillage[Indexaig].modele=aig) ) then
begin
trouve_detecteur(adr);
if IndexBranche_trouve=0 then
begin
Affiche('Erreur 23.1 : détecteur '+intToSTR(adr)+' décrit dans l''aiguillage '+intToSTR(aiguillage[Indexaig].adresse)+' mais absent dans la description des branches',clRed);
ok:=false;
begin
Affiche('Erreur 8: l''aiguillage '+intToStr(Adr2)+' n''est pas une TJD/S ou n''existe pas, mais apparait dans la TJD/S '+IntToSTR(aiguillage[Indexaig].Adresse),clred);
ok:=false;
AdrAig:=aiguillage[IndexAig].Adresse;
end;
end;
// vérifier si l'aiguillage est dans les branches inutile
{if aiguillage[Indexaig].modele<>rien then
begin
trouve_aiguillage(aiguillage[Indexaig].adresse); // passe l'adresse de l'aiguillage à trouver
if (IndexBranche_trouve=0) then
begin
Affiche('Avertissement 6: aiguillage '+intToSTR(aiguillage[Indexaig].adresse)+' décrit dans les aiguillages ; absent dans la description des branches',clOrange);
ok:=false;
end;
end;}
// exclure les TJD/S
if (modAig<>tjd) and (modAig<>tjs) then
begin
// vérifier si le détecteur sur la position droite est dans les branches
adr:=aiguillage[Indexaig].Adroit;
if (aiguillage[Indexaig].AdroitB='Z') or (aiguillage[Indexaig].AdroitB=#0) then
begin
trouve_detecteur(adr);
if IndexBranche_trouve=0 then
begin
Affiche('Erreur 21.1: détecteur '+intToSTR(adr)+' décrit dans l''aiguillage '+intToSTR(aiguillage[Indexaig].adresse)+' mais absent dans la description des branches',clred);
ok:=false;
end
else
begin
AdrAig:=aiguillage[IndexAig].Adresse;
if indexBranche_Trouve>1 then det1br:=brancheN[branche_trouve,indexBranche_trouve-1].Adresse // adresse avant détecteur
else det1br:=0;
det2br:=brancheN[branche_trouve,indexBranche_trouve+1].Adresse; // adresse après détecteur
if (det1br<>AdrAig) and (det2br<>AdrAig) and (adr<>0) then
begin
Affiche('Erreur 21.2: Le détecteur '+intToSTR(adr)+' est décrit dans l''aiguillage '+intToSTR(aiguillage[Indexaig].adresse)+' mais déclaré dans la ',clred);
s:='branche '+intToSTR(Branche_trouve)+' entre';
if indexBranche_trouve>1 then
if brancheN[branche_trouve,indexBranche_trouve-1].BType=aig then s:=s+' l''aiguillage ' else s:=s+' le détecteur ';
s:=s+intToSTR(det1br)+' et ';
if brancheN[branche_trouve,indexBranche_trouve+1].BType=aig then s:=s+' l''aiguillage ' else s:=s+' le détecteur ';
s:=s+intToSTR(det2br);
Affiche(s,clred);
ok:=false;
end;
end;
end;
// vérifier si le détecteur sur la position déviée est dans les branches
adr:=aiguillage[Indexaig].Adevie;
if (aiguillage[Indexaig].AdevieB='Z') or (aiguillage[Indexaig].AdevieB=#0) then
begin
trouve_detecteur(adr);
if IndexBranche_trouve=0 then
begin
Affiche('Erreur 22.1: détecteur '+intToSTR(adr)+' décrit dans l''aiguillage '+intToSTR(aiguillage[Indexaig].adresse)+' mais absent dans la description des branches',clRed);
ok:=false;
end
else
begin
AdrAig:=aiguillage[IndexAig].Adresse;
if indexBranche_trouve>1 then det1br:=brancheN[branche_trouve,indexBranche_trouve-1].Adresse // adresse avant détecteur
else det1br:=0;
det2br:=brancheN[branche_trouve,indexBranche_trouve+1].Adresse; // adresse après détecteur
if (det1br<>AdrAig) and (det2br<>AdrAig) and (adr<>0) then
begin
Affiche('Erreur 22.2: Le détecteur '+intToSTR(adr)+' est décrit dans l''aiguillage '+intToSTR(aiguillage[Indexaig].adresse)+' mais déclaré dans la ',clred);
s:='branche '+intToSTR(Branche_trouve)+' entre';
if indexBranche_trouve>1 then
if brancheN[branche_trouve,indexBranche_trouve-1].BType=aig then s:=s+' l''aiguillage ' else s:=s+' le détecteur ';
s:=s+intToSTR(det1br)+' et ';
if brancheN[branche_trouve,indexBranche_trouve+1].BType=aig then s:=s+' l''aiguillage ' else s:=s+' le détecteur ';
s:=s+intToSTR(det2br);
Affiche(s,clred);
ok:=false;
end;
end;
end;
// vérifier si le détecteur sur la pointe est dans les branches
adr:=aiguillage[Indexaig].Apointe;
if ( ((aiguillage[Indexaig].ApointeB='Z') or (aiguillage[Indexaig].ApointeB=#0)) and (aiguillage[Indexaig].modele=aig) ) then
begin
trouve_detecteur(adr);
if IndexBranche_trouve=0 then
begin
Affiche('Erreur 23.1 : détecteur '+intToSTR(adr)+' décrit dans l''aiguillage '+intToSTR(aiguillage[Indexaig].adresse)+' mais absent dans la description des branches',clRed);
ok:=false;
end
else
begin
AdrAig:=aiguillage[IndexAig].Adresse;
if indexBranche_trouve>1 then
begin
det1br:=brancheN[branche_trouve,indexBranche_trouve-1].Adresse; // adresse avant détecteur
model:=brancheN[branche_trouve,indexBranche_trouve-1].Btype;
end
else begin det1br:=0;model:=det;end;
det2br:=brancheN[branche_trouve,indexBranche_trouve+1].Adresse; // adresse après détecteur
model2:=brancheN[branche_trouve,indexBranche_trouve+1].Btype;
if (det1br<>AdrAig) and (model=det) and (det2br<>AdrAig) and (model2=det) and (adr<>0) then
begin
Affiche('Erreur 23.2: Le détecteur '+intToSTR(adr)+' est décrit dans l''aiguillage '+intToSTR(aiguillage[Indexaig].adresse)+' mais déclaré dans la ',clred);
s:='branche '+intToSTR(Branche_trouve)+' entre';
@@ -9735,20 +9775,20 @@ begin
begin
if (adr<>aiguillage[index2].Adevie) and (adr<>aiguillage[index2].ADroit) and
(adr<>aiguillage[index2].DDevie) and (adr<>aiguillage[index2].Ddroit) then
begin
begin
Affiche('Erreur 10.21: Discordance de déclaration aiguillages '+intToSTR(adr)+': '+intToSTR(adr2),clred);
ok:=false;
end;
end;
// tjs ou tjs à 4 états
if (((model2=tjs) or (model2=tjd)) and (aiguillage[index2].EtatTJD=4)) then
begin
adr3:=aiguillage[index2].Ddroit; // 2eme adresse de la TJD
index3:=index_aig(adr3);
index3:=index_aig(adr3);
if (adr<>aiguillage[index2].Adevie) and (adr<>aiguillage[index2].ADroit) and
(adr<>aiguillage[index3].ADevie) and (adr<>aiguillage[index3].Adroit) then
begin
begin
Affiche('Erreur 10.22: Discordance de déclaration aiguillages '+intToSTR(adr)+': '+intToSTR(adr2),clred);
ok:=false;
end;
@@ -9773,7 +9813,7 @@ begin
end;
end;
end;
end;
end;
adr2:=aiguillage[indexaig].Adevie; // adresse de ce qui est connecté sur la position déviée
c:=aiguillage[indexaig].AdevieB;
@@ -9784,7 +9824,7 @@ begin
model2:=aiguillage[index2].modele; // modèle de l'aiguillage connecté
if index2=0 then
begin
ok:=false;
ok:=false;
Affiche('Erreur 10.30: aiguillage '+intToSTR(adr)+': déclaration d''un aiguillage '+IntToSTR(adr2)+' inexistant',clred);
end
else
@@ -9799,17 +9839,17 @@ begin
ok:=false;
end;
end;
// tjs ou tjs à 4 états
if (((model2=tjs) or (model2=tjd)) and (aiguillage[index2].EtatTJD=4)) then
begin
adr3:=aiguillage[index2].Ddroit; // 2eme adresse de la TJD
index3:=index_aig(adr3);
index3:=index_aig(adr3);
if (adr<>aiguillage[index2].Adevie) and (adr<>aiguillage[index2].ADroit) and
(adr<>aiguillage[index3].ADevie) and (adr<>aiguillage[index3].Adroit) then
begin
(adr<>aiguillage[index3].ADevie) and (adr<>aiguillage[index3].Adroit) then
begin
Affiche('Erreur 10.32: Discordance de déclaration aiguillage '+intToSTR(adr)+': '+intToSTR(adr2),clred);
ok:=false;
ok:=false;
end;
end;
@@ -9827,7 +9867,7 @@ begin
end;
if c='P' then
begin
extr:=aiguillage[index2].APointe;
extr:=aiguillage[index2].APointe;
if adr<>extr then Affiche('Erreur 10.35: Discordance de déclaration aiguillages '+intToSTR(adr)+'S: '+intToSTR(adr2)+'P différent de '+intToSTR(extr),clred);
end;
end;
@@ -9840,23 +9880,23 @@ begin
begin
if adr2=adr then affiche('Erreur 10.2 : la pointe de l''aiguillage '+intToSTR(adr)+' pointe sur elle même',clred);
index2:=Index_aig(adr2); // adresse de l'aiguillage connecté
model2:=aiguillage[index2].modele; // modèle de l'aiguillage connecté
model2:=aiguillage[index2].modele; // modèle de l'aiguillage connecté
begin
// tjs ou tjs à 2 états ou croisement
if (((model2=tjs) or (model2=tjd)) and (aiguillage[index2].EtatTJD=2)) or (model2=crois) then
begin
if (adr<>aiguillage[index2].Adevie) and (adr<>aiguillage[index2].ADroit) and
(adr<>aiguillage[index2].DDevie) and (adr<>aiguillage[index2].Ddroit) then
(adr<>aiguillage[index2].DDevie) and (adr<>aiguillage[index2].Ddroit) then
begin
Affiche('Erreur 10.41: Discordance de déclaration aiguillage '+intToSTR(adr)+': '+intToSTR(adr2),clred);
ok:=false;
end;
// tjs ou tjs à 4 états
if (((model2=tjs) or (model2=tjd)) and (aiguillage[index2].EtatTJD=4)) then
begin
begin
adr3:=aiguillage[index2].Ddroit; // 2eme adresse de la TJD
index3:=index_aig(adr3);
index3:=index_aig(adr3);
if (adr<>aiguillage[index2].Adevie) and (adr<>aiguillage[index2].ADroit) and
(adr<>aiguillage[index3].ADevie) and (adr<>aiguillage[index3].Adroit) then
begin
@@ -12356,6 +12396,7 @@ begin
end;
end;
procedure TFormConfig.CheckBoxVersContrevoieClick(Sender: TObject);