V2.5
This commit is contained in:
117
UnitPrinc.pas
117
UnitPrinc.pas
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user