salut

je suis entrain de programmer un grafcet d'un PIC avec le logiciel miKroc.
avec simulation sur ISIS.
(machine à percer : rotation ,montée ,descente ,avec des capteurs haut et bas)

alors on a mis dans le programme les équations de sortie et d'entrée...

dans ce grafcet ,existe une temporisation, .(c'est ça mon probléme majeur , la machine doit s'arréter en bas pendant 10s)

dans un premier temps , je l'ai programmer avec un delay_ms(). mais on nous a dit que c'est de la programmation séquentielle ,par conséquent il faut oublier le DELAY_ms(), car il bloque le systéme entier .par suite , on a passer au TIMER1 du PIC.

alors mes question sont :

-> est ce que c'est vrai qu'il faut pas utiliser le delay_ms();
-> peut on mettre les equations d'entrée et de sortie en programme(comme dans un automate programmable) meme si on programme avec mikroc.
->le code est-il correct :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
 
int i=0;
void temps()
{
int w; ;
intcon.gie=0;
w=0x31;
option_reg=w;
 
 
 
{
   if(intcon.t0if=1)
  {intcon.t0if=0;
   i++;
  }
 
}
 
}
 
 
 
main()
{
int i,m0,m1,m2,m3,t,Sm0,Sm1,Sm2,Sm3,Rm0,Rm1,Rm2,Rm3,c,,h;
//initialisation
 
 
  TRISB=0;
  TRISA=1;
i=0;
m0=1;//etape0
m1=0;//etape1
m2=0;//etape2
m3=0;//etape3
portb.f0=0;//rotation
portb.f2=0;//montee
portb.f1=0;//descente
 
c=porta.f2;
while(!c)
{
 
 
 
 
//lecture
 
 
int a,b,c,d,e;
 
a=porta.f0;    //lecture de depart cycle
 
b=porta.f1;    //lecture arret cycle
 
c=porta.f2;    //lecture arret urgent
 
d=porta.f3;    //lecture capteur haut
 
e=porta.f4;    //lecture capteur bas
 
 
 
 
//traitement
 
 
Sm0=m3*d;     Rm0=m1;     m0=Sm0+(!Rm0*m0);
 
Sm1=m0*d*a;   Rm1=m2;     m1=Sm1+(!Rm1*m1);
 
Sm2=m1*e;     Rm2=m3;     m2=Sm2+(!Rm2*m2);
 
 
 
if(m2==1)
  {
     do
    {
 
     temps();
 
     }
    while(i<10) ;
 
  t=1;i=0;
 
 
 
  }
 
 
 Sm3=m2*t;     Rm3=m0 ;    m3=Sm3+(!Rm3*m3);
 
 
//affectation des sorties
 
portb.f1=m1;//descente
 
portb.f0=m1+m2+m3;//rotation
 
portb.f2=m3+m0*!d;//montée
 
}
}

merci