lundi 22 septembre 2014

Panoramic et le Grafcet
Le grafcet et une représentation graphique utilisée pour créer
des automatismes comme l’organigramme et a l'informatique
il se compose d’étapes de transitions et de liaisons orientées
les étapes et leur actions associées
les transitions entre les étapes et leur réceptivité associées
les liaisons entre étapes transitions et étapes
et les liaisons-orientées
il existe deux formes de grafcet :
Niveau 1: Spécifications fonctionnelles–Utilisation du langage courant
Niveau 2: Spécifications technologiques –Utilisation de symboles voici un site web parmi tant d'autre qui vous expliquera
en détail le grafcet
===================================================
http://philippe.berger2.free.fr/automatique/cours/G7/le_grafcet.htm
===================================================
Avec Maître Google les articles sur le grafcet sont légions

Dans les automates les instructions du grafcet font parties du programme
les instructions du grafcet ne faisant pas partie de Panoramic il suffit de créer un grafcet dit ''sur mot'' on incrémente une variable en respectant les règles du grafcet
(une variable différente par branche, )

Règles d'évolution

  1. L'initialisation : une situation initiale est caractérisée par le fait qu'un certain nombre d'étapes sont actives au début du fonctionnement. Ces étapes sont repérées sur le grafcet par un double carré.
  2. Le franchissement d'une transition : une transition est soit validée soit non validée. Elle est validée lorsque toutes les étapes immédiatement précédentes sont actives (voir le tableau suivant). Elle ne peut être franchie :
    1. que lorsqu'elle est validée
    2. et que la réceptivité associée est vraie.
  3. L'évolution des étapes actives : le franchissement d'une transition entraîne l'activation de toutes les étapes immédiatement suivantes et la désactivation de toutes les étapes immédiatement précédentes.
  4. Évolution simultanée : plusieurs transitions simultanément franchissables sont simultanément franchies. Par exemple, sur la figure ci-contre, si la variable c est vraie, le grafcet va évoluer vers la désactivation simultanée des étapes 5 et 10 et l'activation simultanée des étapes 6 et 11.
  5. Activation et désactivation simultanées : si au cours du fonctionnement, une même étape doit être simultanément désactivée et activée, elle reste ACTIVE
Wikipédia l’encyclopédie libre Grafcet

pour la démo en Pamoramic j'utilise la progression binaire de 0 à 15 sur 4 bits
comme il faut appuyer sur plusieurs touches en même temps
les touches F1 F2 F3 F4 sont du style bistable par programme
un appui =1 un deuxième appui =0 pour la variable associée
__ __
F1 =1 F1=0 => Rappel F1=(F1 barre) ou (!F1=0) ou (/F1=0)

Code Binaire pur de 0 a 15


          D C B A                    D C B A
    0    0  0  0  0               8    1  0 0  0
    1    0  0  0  1               9    1  0 0  1
    2    0  0  1  0             10    1  0 1  0
    3    0  0  1  1             11    1  0 1  1
    4    0  1  0  0             12    1  1 0  0
    5    0  1  0  1             13    1   1 0 1
    6    0  1  1  0             14    1   1 1 0
    7    0  1  1  1             15    1   1 1 1
                                   (16)   0  0  0 0


Le grafcet











Code Panoramic



error_french
dim nobj,nob,hb
width 0,730:height 0,300: color 0,160,160,200: border_hide 0
  top 0,(screen_y-height(0))/2 :left 0,(screen_x-width(0))/2
label  sp_1,sp_fin,sp_72,sp_73,sp_form_help
label sp_fin_help,sp_help,sp_terminal,sp_0
label sp_b10,sp_b20,sp_b30,sp_b40,sp_grafcet,sp_raz_gracet,sp_efface_sortie,sp_var_sortie,sp_sortie,sp_key
dim  b0,b1,b2,b3,O0,O1,O2,O3,etp,metp
b0=0:b1=0:b2=0:b3=0:etp=0:metp=0:O0=0:O1=0:O2=0:O3=0
gosub sp_terminal
gosub sp_form_help
set_focus 0
on_click 101,sp_fin :on_close 0,sp_fin
on_click 111,sp_help :on_click 68,sp_1
on_click 72,sp_72:on_click 73,sp_73
on_double_click 200,sp_fin_help:on_close 200,sp_fin_help
on_click 0,sp_0:on_key_down 0,sp_key

' ========
   end
' ========
sp_0:
set_focus 0:return
' ========
sp_key:
 if key_down_code=115 then gosub sp_b10
 if key_down_code=114 then gosub sp_b20
 if key_down_code=113 then gosub sp_b30
 if key_down_code=112 then gosub sp_b40
return
'  =========================
sp_b10:
  b0=1-b0
  if b0=1
     color 57,0,250,0
  else
     color 57,200,180,180
  end_if
  gosub sp_grafcet
return
'  =========================
sp_b20:
  b1=1-b1
  if b1=1
     color 52,0,250,0
  else
     color 52,200,180,180
  end_if
  gosub sp_grafcet
return
' ===================
sp_b30:
  b2=1-b2
  if b2=1
     color 47,0,250,0
  else
     color 47,200,180,180
  end_if
  gosub sp_grafcet
return
' ========================
sp_b40:
  b3=1-b3
  if b3=1
     color 42,0,250,0
  else
     color 42,200,180,180
  end_if
  gosub sp_grafcet
return
' ==================
sp_grafcet:
  if etp=0 and b3=0 and b2=0 and b1=0 and b0=1 then etp=1
  if etp=1 and b3=0 and b2=0 and b1=1 and b0=0 then etp=2
  if etp=2 and b3=0 and b2=0 and b1=1 and b0=1 then etp=3
  if etp=3 and b3=0 and b2=1 and b1=0 and b0=0 then etp=4
  if etp=4 and b3=0 and b2=1 and b1=0 and b0=1 then etp=5
  if etp=5 and b3=0 and b2=1 and b1=1 and b0=0 then etp=6
  if etp=6 and b3=0 and b2=1 and b1=1 and b0=1 then etp=7
  if etp=7 and b3=1 and b2=0 and b1=0 and b0=0 then etp=8
  if etp=8 and b3=1 and b2=0 and b1=0 and b0=1 then etp=9
  if etp=9 and b3=1 and b2=0 and b1=1 and b0=0 then etp=10
  if etp=10 and b3=1 and b2=0 and b1=1 and b0=1 then etp=11
  if etp=11 and b3=1 and b2=1 and b1=0 and b0=0 then etp=12
  if etp=12 and b3=1 and b2=1 and b1=0 and b0=1 then etp=13
  if etp=13 and b3=1 and b2=1 and b1=1 and b0=0 then etp=14
  if etp=14 and b3=1 and b2=1 and b1=1 and b0=1 then etp=15
  if etp=15 and b3=0 and b2=1 and b1=1 and b0=0 then etp=0
  if metp <> etp
     metp=etp
     caption 67,"_"+right$(str$(1000+etp),2)+"_"
     gosub sp_efface_sortie
     gosub sp_var_sortie
     gosub sp_sortie
  end_if
return
' ========
sp_raz_gracet:
  etp=0:metp=0:caption 90,"Etape  "+str$(etp)
  gosub sp_efface_sortie
return
' ========
sp_efface_sortie:
  color 37,200,180,180:O0=0:color 32,200,180,180:O1=0
  color 27,200,180,180:O2=0:color 22,200,180,180:O3=0
return
' ========
sp_var_sortie:
  if etp=1 or etp=3 or etp=5 or etp=7  or etp=9 or etp=11 or etp=13 or etp=15  then O0=1
  if etp=2 or etp=3 or etp=6 or etp=7 or etp=10 or etp=11 or etp=14 or etp=15 then O1=1
  if etp=4 or etp=5 or etp=6 or etp=7 or etp=12 or etp=13 or etp=14 or etp=15 then O2=1
  if etp=8 or etp=9 or etp=10 or etp=11 or etp=12 or etp=13 or etp=14 or etp=15 then O3=1
return
' ========
sp_sortie:
  if O0=1 then color 37,0,250,0
  if O1=1 then color 32,0,250,0
  if O2=1 then color 27,0,250,0
  if O3=1 then color 22,0,250,0
return
' ====raz grafcet====
sp_1:
  show 70:return
' ====FIN=======
sp_fin:
  terminate:return

 ' ==============
sp_72:
  etp=0:metp=0:caption 67,"_00_"
  gosub sp_efface_sortie
  hide 70:return
' ==============
sp_73:
  hide 70:return
' =============
sp_help:
  show 200:return
' =============
sp_fin_help:
  hide 200:set_focus 0:return
' =============

REM ======SUB=============================================================

sub affichtxt(nxt,par,tpt,ltt,fsize,txt$)
  container nxt:parent nxt,par:top nxt,tpt:left nxt,ltt
  Alpha nxt+1:parent nxt+1,nxt:top nxt+1,10:left nxt+1,10
  font_bold nxt+1:font_size nxt+1,fsize:caption nxt+1,txt$
  width nxt,width(nxt+1)+20
  height nxt,height(nxt+1)+20
end_sub
' ============
sub button_container(nbc,par,tpc,ltc,txt$)
  container nbc:parent nbc,par:top nbc,tpc:left nbc, ltc
  caption nbc ,txt$
  button nbc+1:parent nbc+1,nbc:top nbc+1,30:left nbc+1,10
  width nbc+1,30:hint nbc+1,nbc+1
  width nbc,width(nbc+1)+20
  height nbc,height(nbc+1)+40
end_sub
' ======================
sub voyant_automate(ntp,par,ttp,ltp,txt$,etat)
  container ntp:parent ntp,par:top ntp,ttp:left ntp,ltp
  width ntp,80-20: height ntp,133-50
  font_size ntp,14:caption ntp,txt$
  alpha ntp+1:parent ntp+1,ntp:top ntp+1,48-20:left ntp+1,7
  width ntp+1,64-20: height ntp+1,44:color ntp+1,0,0,0
  alpha ntp+2:parent ntp+2,ntp:top ntp+2,52-20:left ntp+2,11
  width ntp+2,56-20: height ntp+2,36:'  min ntp+2,0:max ntp+2,1
  hint ntp+2,ntp+2
  if etat=0
     color ntp+2,200,180,180
  else
     color ntp+2,255,0,0
  end_if
end_sub
'================
sub compteur(nc,par,tpc,ltc,txt$)
  container nc:parent nc,par:top nc,tpc:left nc,ltc
  caption nc,txt$
  alpha nc+1:parent nc+1,nc:top nc+1,40:left nc+1,10
  color nc+1,0,0,0
  alpha nc+2:parent nc+2,nc:top nc+2,45:left nc+2,15
  color nc+2,0,250,0:font_size nc+2,20:caption nc+2,"_00_"
  height nc+1,height(nc+2)+10
  button nc+3 :parent nc+3,nc:top nc+3,45:left nc+3,width(nc+1)+20
  width nc+3 ,30:caption nc+3,"RAZ"
  width nc,width(nc+1)+width(nc+3)+30
  hint nc+3,nc+3: hint nc+2,nc+2
end_sub
' ==============fin==sub==============
sp_form_help:
  form 200:caption 200,"AIDE   Double click pour Quitter": hide 200
  width 200,416:height 200,312
  top 200,200 :left 200,(screen_x-width(200))/2
  memo 210:parent 210,200
  full_space 210
  item_add 210,""
  item_add 210,"          Le GRAFCET   "
  item_add 210,"   GRAphe Fonctionnel de Commande Etapes-Transitions "
  item_add 210,"   les graphismes permettant la représentation d'un systéme automatisé"
  item_add 210,"   étapes, liaisons, transitions"
  item_add 210,"   voici un exemple avec simulation  de l’état des entrées et sorties "
  item_add 210,"   tous ou rien (tor) "
  item_add 210,"   visualise le N°de l'étapes du grafcet et peu le reseter (RAZ grafcet)"
  item_add 210,"   le programme et construis avec un grafcet sur mots"
  item_add 210,"   en respectant les regles du grafcet "
  item_add 210,"   exemple et la progression binaire de 0 a 15."
  item_add 210,"   le terminal et écrit en Panoramic"
  item_add 210,"   les touches F1 F2 F3 F4 sont du style flipflop "
  item_add 210,"   un appui =1 un deuxieme appui =0 "
  item_add 210,"   "
  item_add 210,"   "
  item_add 210,"   avec Maître Google les articles sur "
  item_add 210,"   le grafcet  sont légions"
  inactive 210
return
' =========================
sp_terminal:
  nobj=10 :affichtxt(nobj,0,20,150,16,"  DEMO Terminal GRAFCET PANORAMIC  ")
  nobj=13 :affichtxt(nobj,0,210,510,12,"Entrées")
  nobj=16 :affichtxt(nobj,0,210,130,12,"Sorties")
' voyant entrees
  nobj=20: voyant_automate(nobj,0,120,50,"O.3",0)
  nobj=25:voyant_automate(nobj,0,120,110,"O.2",0)
  nobj=30:voyant_automate(nobj,0,120,170,"O.1",0)
  nobj=35:voyant_automate(nobj,0,120,230,"O.0",0)
' voyant sorties
  nobj=40: voyant_automate(nobj,0,120,50+383,"I.3-F1",0)
  nobj=45:voyant_automate(nobj,0,120,110+383,"I.2-F2",0)
  nobj=50:voyant_automate(nobj,0,120,170+383,"I.1-F3",0)
  nobj=55:voyant_automate(nobj,0,120,230+383,"I.0-F4",0)
  nobj=65:compteur(nobj,0,110,300,"Etape Grafcet")
  nobj=100: button_container(nobj,0,20,620,"F I N")
  nobj=110: button_container(nobj,0,10,50,"Aide")
  container 70:top 70,110:left 70,270:hide 70:caption 70,"Confirmation"
  alpha 71:top 71, 30:left 71,40:parent 71,70:caption 71,"INIT GRAFCET"
  button 72:top 72, 60:left 72,10:parent 72,70:caption 72,"OUI"
  button 73:top 73, 60:left 73,90:parent 73,70:caption 73,"NON"
return

' ==============================

        



Aucun commentaire:

Enregistrer un commentaire