This commit is contained in:
f1iwq2
2021-06-24 09:35:45 +02:00
parent 8cea5ebd73
commit 985f7c10ae
18 changed files with 610 additions and 369 deletions

View File

@@ -198,8 +198,8 @@ type TBranche = record
position, // position actuelle : 1=dévié 2=droit (centrale LENZ)
Adrtriple, // 2eme adresse pour un aiguillage triple
temps, // temps de pilotage (durée de l'impulsion en x 100 ms)
inversion : integer; // pilotage inversé pour la commande (en mode sans CDM) 0=normal 1=inversé (positionné dans fichier config_gl section_init
InversionCDM : integer ; // inversion pour les aiguillages en lecture (paramètre I1)
inversion : integer; // positionné dans fichier config_gl section_init
InversionCDM : integer ; // pour les aiguillages déclarés inversés dans CDM, utilisé en mode autonome (paramètre I1)
vitesse : integer; // vitesse de franchissement de l'aiguillage en position déviée (60 ou 90)
ADroit : integer ; // (TJD:identifiant extérieur) connecté sur la position droite en talon
@@ -329,6 +329,7 @@ var
posAig : char;
end;
CondCarre : array[1..6] of array of record // conditions supplémentaires d'aiguillages en position pour le carré
// attention les données sont stockée en adresse 1 du tableau dynamique
Adresse : integer; // aiguillage
posAig : char;
end;
@@ -369,6 +370,8 @@ function PresTrainPrec(AdrFeu : integer) : boolean;
function cond_carre(adresse : integer) : boolean;
function carre_signal(adresse : integer) : boolean;
procedure Event_Detecteur(Adresse : integer;etat : boolean;train : string);
function verif_UniSemaf(adresse,UniSem : integer) : integer;
function Select_dessin_feu(TypeFeu : integer) : TBitmap;
implementation
@@ -1163,6 +1166,26 @@ begin
end;
end;
function Select_dessin_feu(TypeFeu : integer) : TBitmap;
var Bm : TBitMap;
begin
case TypeFeu of // charger le bit map depuis le fichier
2 : Bm:=Formprinc.Image2feux.picture.Bitmap;
3 : Bm:=Formprinc.Image3feux.picture.Bitmap;
4 : Bm:=Formprinc.Image4feux.picture.Bitmap;
5 : Bm:=Formprinc.Image5feux.picture.Bitmap;
7 : Bm:=Formprinc.Image7feux.picture.Bitmap;
9 : Bm:=Formprinc.Image9feux.picture.Bitmap;
12 : Bm:=Formprinc.Image2Dir.picture.Bitmap;
13 : Bm:=Formprinc.Image3Dir.picture.Bitmap;
14 : Bm:=Formprinc.Image4Dir.picture.Bitmap;
15 : Bm:=Formprinc.Image5Dir.picture.Bitmap;
16 : Bm:=Formprinc.Image6Dir.picture.Bitmap;
end;
Select_dessin_feu:=bm;
end;
// créée une image dynamiquement pour un nouveau feu déclaré dans le fichier de config
procedure cree_image(rang : integer);
var TypeFeu : integer;
@@ -1187,22 +1210,10 @@ begin
Picture.Bitmap.TransparentMode:=tmAuto;
Picture.Bitmap.TransparentColor:=clblue;
Transparent:=true;
// affecter le type d'image de feu dans l'image créée
picture.Bitmap:=Select_dessin_feu(TypeFeu);
case TypeFeu of // charger le bit map depuis le fichier
2 : picture.bitmap:=Formprinc.Image2feux.picture.Bitmap;
3 : picture.bitmap:=Formprinc.Image3feux.picture.Bitmap;
4 : picture.bitmap:=Formprinc.Image4feux.picture.Bitmap;
5 : picture.bitmap:=Formprinc.Image5feux.picture.Bitmap;
7 : picture.bitmap:=Formprinc.Image7feux.picture.Bitmap;
9 : picture.bitmap:=Formprinc.Image9feux.picture.Bitmap;
12 : picture.bitmap:=Formprinc.Image2Dir.picture.Bitmap;
13 : picture.bitmap:=Formprinc.Image3Dir.picture.Bitmap;
14 : picture.bitmap:=Formprinc.Image4Dir.picture.Bitmap;
15 : picture.bitmap:=Formprinc.Image5Dir.picture.Bitmap;
16 : picture.bitmap:=Formprinc.Image6Dir.picture.Bitmap;
end;
// mettre rouge par défaut
if TypeFeu=2 then EtatSignalCplx[feux[rang].adresse]:=violet_F;
if TypeFeu=3 then EtatSignalCplx[feux[rang].adresse]:=semaphore_F;
@@ -3369,6 +3380,27 @@ begin
repeat
i:=index_aiguillage(Adresse,Nbranche);
if i=0 then inc(NBranche);
until (Nbranche>NbreBranches) or (i<>0);
//if (i<>0) then Affiche('aiguillage '+IntToSTR(adresse)+' trouvé en branche '+intToSTR(NBranche)+' index='+IntToSTR(i),clYellow);
branche_trouve:=NBranche;
IndexBranche_trouve:=i;
end;
// si 0 = OK
// si 1 = erreur code Unisemaf
// si 2 = erreur cohérence entre code et aspect
function verif_UniSemaf(adresse,UniSem : integer) : integer;
var aspect : integer;
begin
if UniSem=0 then begin verif_unisemaf:=0;exit;end;
if (UniSem<>2) and (UniSem<>3) and (UniSem<>4) and (UniSem<>51) and (UniSem<>52) and (UniSem<>71) and (UniSem<>72) and (UniSem<>73) and
((UniSem<90) or (UniSem>99)) then begin verif_UniSemaf:=1;exit;end;
aspect:=feux[adresse].aspect;
if ((aspect=2) and (UniSem=2)) or
((aspect=3) and (UniSem=3)) or
((aspect=4) and (UniSem=4)) or
((aspect=5) and ((UniSem=51) or (UniSem=52))) or
((aspect=7) and ((UniSem=71) or (UniSem=72) or (UniSem=73))) or
((aspect=9) and ((UniSem>=90) or (UniSem<=99)))
then Verif_unisemaf:=0
@@ -3378,7 +3410,7 @@ var s,sa,chaine,SOrigine: string;
procedure lit_config;
var s,sa,chaine,SOrigine: string;
c,paig : char;
tec,tjd,tjs,s2,trouve,triple,debugConfig,multiple,fini,finifeux,trouve_NbDetDist,trouve_ipv4_PC,trouve_retro,
tec,tjd,tjs,s2,trouve,triple,debugConfig,multiple,fini,finifeux,trouve_NbDetDist,trouve_ipv4_PC,trouve_retro,
trouve_sec_init,trouve_init_aig,trouve_lay,trouve_IPV4_INTERFACE,trouve_PROTOCOLE_SERIE,trouve_INTER_CAR,
trouve_Tempo_maxi,trouve_Entete,trouve_tco,trouve_cdm,trouve_Serveur_interface,trouve_fenetre,
trouve_NOTIF_VERSION,trouve_verif_version,trouve_fonte,trouve_tempo_aig : boolean;
@@ -3499,7 +3531,12 @@ begin
// adresse ip et port de CDM
sa:=uppercase(IpV4_PC_ch)+'=';
i:=pos(sa,s);
if i<>0 then
if i<>0 then
begin
inc(nv);
trouve_ipv4_PC:=true;
delete(s,i,length(sa));
i:=pos(':',s);
if i<>0 then
begin
adresseIPCDM:=copy(s,1,i-1);Delete(s,1,i);portCDM:=StrToINT(s);
@@ -3512,7 +3549,11 @@ begin
// AfficheDet:=true;
sa:=uppercase(IPV4_INTERFACE_ch)+'=';
i:=pos(sa,s);
if i<>0 then
if i<>0 then
begin
inc(nv);
trouve_IPV4_INTERFACE:=true;
delete(s,i,length(sa));
i:=pos(':',s);
if i<>0 then
begin
@@ -3967,7 +4008,7 @@ begin
enregistrement:='';
virgule:=pos(',',s);if virgule=0 then virgule:=length(s)+1;
enregistrement:=copy(s,1,virgule-1);
delete(s,1,virgule);
delete(s,1,virgule);
s:='';//enregistrement:='';
end;
end;
@@ -4123,10 +4164,10 @@ begin
begin
Affiche('Ligne '+chaine,clred);
Affiche('Nombre incorrect de description des aiguillages: '+intToSTR(k)+' pour '+intToSTR(l)+' feux directionnels',clred);
end;
end
else
end;
end
else
// feu de signalisation---------------------------------
begin
asp:=StrToInt(sa); //aspect
@@ -4220,6 +4261,13 @@ begin
if Feux[i].decodeur=6 then
begin
k:=pos(',',s);
if k=0 then begin Affiche('Ligne '+chaine,clred);Affiche('Manque définition de la cible pour le décodeur UniSemaf',clred);end
else
begin
Delete(S,1,k);
Val(s,k,erreur);
Feux[i].UniSemaf:=k;
erreur:=verif_UniSemaf(i,k);
if erreur=1 then begin Affiche('Ligne '+chaine,clred);Affiche('Erreur code Unisemaf',clred);end;
if erreur=2 then
begin
@@ -4451,16 +4499,15 @@ begin
closefile(fichier);
// vérification de la cohérence1
// parcoure les branches jusqu'à trouver un aiguillage pour voir s'il a été décrit
// parcoure les branches jusqu'à trouver un aiguillage pour voir s'il a été décrit
for i:=1 to NbreBranches do
begin
j:=1;
repeat
detect:=BrancheN[i][j].Adresse;
modele:=BrancheN[i][j].BType; // 1= détecteur 2= aiguillage 4=Buttoir
if (modele=2) then
begin
j:=1;
repeat
detect:=BrancheN[i][j].Adresse;
modele:=BrancheN[i][j].BType; // 1= détecteur 2= aiguillage 3=bis 4=Buttoir
j:=j+1;
until ( (modele=1) or (modele=2) or (modele=3) or ((modele=0) and (detect=0)));
// trouvé un aiguillage et récupéré son adresse dans detect
begin
//affiche('trouvé aig '+intToSTR(detect),clyellow);
modele:=aiguillage[detect].modele;
if (modele=0) then Affiche('Erreur 1: Aiguillage '+intToStr(detect)+' non décrit mais présent en branche '+intToStr(i)+' pos. '+intToSTR(j),clred);
@@ -6797,7 +6844,7 @@ begin
// vérifier que l'évènement accessoire vient bien d'un aiguillage et pas d'un feu
i:=0;
repeat
inc(i);
inc(i);
until (i>MaxAiguillage) or (i=adresse);
if i>MaxAiguillage then exit; // non ce n'est pas un aiguillage, on sort