cs_jfs59
Messages postés178Date d'inscriptionmardi 29 avril 2003StatutMembreDernière intervention 2 février 2010
-
13 août 2006 à 21:58
blueperfect
Messages postés234Date d'inscriptionmardi 13 novembre 2007StatutMembreDernière intervention21 novembre 2013
-
12 oct. 2008 à 12:28
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
blueperfect
Messages postés234Date d'inscriptionmardi 13 novembre 2007StatutMembreDernière intervention21 novembre 2013 12 oct. 2008 à 12:28
Si tu veux gérer ton scintillement, il y a la technique dîte du buffering :
Dans l'évènement OnPaint (ou en surchargeant Paint;), au lieu de dessiner sur le Canvas du TControl ou de la TForm, dessine le sur un TBitmap séparé, et ensuite dessine le TBitmap... : plus de scintillement !
cs_jfs59
Messages postés178Date d'inscriptionmardi 29 avril 2003StatutMembreDernière intervention 2 février 2010 14 août 2006 à 19:31
une petite idée de d'une des procédures réentrente de gestion du GRAFCET
Function TDrawGrafcet.ActiveSuivante(NCol,NRow,PCol,PRow :Integer):boolean;
var test1,test2 :boolean ; x,y: integer;
Begin
result := false;
Case TableauType[NCol,NRow].Gtype of
0: // Rien
result := false;
1..2: // Etape
Begin
TableauType[NCol,NRow].AActive := true;
result := true;
End;
3: // Transition
Begin
if ValideTransition(NCol,NRow)and (TableauType[NCol,NRow -1].Gtype < 16 )then result := ActiveSuivante(NCol,NRow+1,NCol,NRow) else if
ValideTransition(NCol,NRow)and (TableauType[NCol,NRow -1].Gtype > 15 )and VerifierPrecedentes(NCol,NRow-1,NCol,NRow-1)then result := ActiveSuivante(NCol,NRow+1,NCol,NRow) else result := false;
End;
4: // Depart
Begin
For x := 0 to ColCount - 1 do
for y := 0 to RowCount- 1 do
If ((TableauType[x,y].Gtype = 1) or (TableauType[x,y].Gtype = 2)) and (TableauType[x,y].Numero = TableauType[NCol,NRow].Numero) then
Begin
ActiveSuivante(x,y,NCol,NRow);
Result := true;
Exit;
End;
End;
5: // Arrivée
Begin
result := true;
End;
6: // Coude droit bas
Begin
if NCol = PCol Then result := ActiveSuivante(NCol+1,NRow,NCol,NRow)else if NRow = PRow
then result := ActiveSuivante(NCol,NRow +1,NCol,NRow);
End;
7: // Coude gauche bas
Begin
if NCol = PCol Then result := ActiveSuivante(NCol-1,NRow,NCol,NRow)else if NRow = PRow
then result := ActiveSuivante(NCol,NRow+1,NCol,NRow);
End;
8: // Coude droit haut
Begin
if NCol = PCol Then result := ActiveSuivante(NCol+1,NRow,NCol,NRow)else if NRow = PRow
then result := ActiveSuivante(NCol,NRow -1,NCol,NRow);
End;
9: // Coude gauche haut
Begin
if NCol = PCol Then result := ActiveSuivante(NCol-1,NRow,NCol,NRow)else if NRow = PRow
then result := ActiveSuivante(NCol,NRow-1,NCol,NRow);
End;
10: // Horizontale haut
Begin
if NRow > PRow Then
Begin
Test1 := (ActiveSuivante(NCol-1,NRow,NCol,NRow));
Result := (ActiveSuivante(NCol+1,NRow,NCol,NRow)) or Test1;
End Else
If PCol > NCol Then
Begin
result := (ActiveSuivante(NCol-1,NRow,NCol,NRow));
End Else
If PCol < NCol Then
Begin
result := (ActiveSuivante(NCol+1,NRow,NCol,NRow));
End;
end;
11: // Horizontale bas
Begin
If PCol > NCol Then
Begin
Test1 := (ActiveSuivante(NCol-1,NRow,NCol,NRow));
Result := (ActiveSuivante(NCol,NRow+1,NCol,NRow)) or Test1;
End Else
If PCol < NCol Then
Begin
Test1 := (ActiveSuivante(NCol+1,NRow,NCol,NRow));
Result := (ActiveSuivante(NCol,NRow+1,NCol,NRow)) or Test1;
End;
end;
12,13: // Simple descente et Simple montée
Begin
if NRow > PRow Then result := ActiveSuivante(NCol,NRow+1,NCol,NRow)else if NRow < PRow
then result := ActiveSuivante(NCol,NRow-1,NCol,NRow);
End;
14: // Branche Horizontale
Begin
if NRow > PRow Then
Begin
Test1 := (ActiveSuivante(NCol,NRow+1,NCol,NRow));
Result := (ActiveSuivante(NCol+1,NRow,NCol,NRow)) or Test1;
End
Else If PCol > NCol Then Result := (ActiveSuivante(NCol,NRow +1,NCol,NRow));
end;
15: // Horizontale simple
Begin
if NCol > PCol Then result := ActiveSuivante(NCol+1,NRow,NCol,NRow)else if NCol < PCol
then result := ActiveSuivante(NCol -1 ,NRow,NCol,NRow);
End;
16: // Double Centre
Begin
if NRow > PRow Then
Begin
Test1 := (ActiveSuivante(NCol-1,NRow,NCol,NRow));
Test2 := (ActiveSuivante(NCol,NRow+1,NCol,NRow));
Result := (ActiveSuivante(NCol+1,NRow,NCol,NRow)) or Test1 or test2;
End Else
If PCol > NCol Then
Begin
test1 := (ActiveSuivante(NCol,NRow+1,NCol,NRow));
result := (ActiveSuivante(NCol-1,NRow,NCol,NRow))or test1;
End Else
If PCol < NCol Then
Begin
test1 := (ActiveSuivante(NCol,NRow+1,NCol,NRow));
result := (ActiveSuivante(NCol+1,NRow,NCol,NRow)) or test1;
End;
end;
17: // Double Haut
Begin
if NRow > PRow Then
Begin
Test1 := (ActiveSuivante(NCol-1,NRow,NCol,NRow));
Result := (ActiveSuivante(NCol+1,NRow,NCol,NRow)) or Test1;
End Else
If PCol > NCol Then
Begin
result := (ActiveSuivante(NCol-1,NRow,NCol,NRow));
End Else
If PCol < NCol Then
Begin
result := (ActiveSuivante(NCol+1,NRow,NCol,NRow));
End;
end;
18: // Double Bas
Begin
If PCol > NCol Then
Begin
Test1 := (ActiveSuivante(NCol-1,NRow,NCol,NRow));
result := (ActiveSuivante(NCol,NRow+1,NCol,NRow))or test1;
End Else
If PCol < NCol Then
Begin
Test1 := (ActiveSuivante(NCol+1,NRow,NCol,NRow));
result := (ActiveSuivante(NCol,NRow+1,NCol,NRow))or test1;
End;
end;
Else result := false; // Autre valeur
End; // fin case of
End;
le nombre de possibilité est assez importants d'autant que
VerifierPrecedentes est aussi réentrentes comme plusieurs autres .. a la fin le cerveau commence a fumer ...
cs_jfs59
Messages postés178Date d'inscriptionmardi 29 avril 2003StatutMembreDernière intervention 2 février 2010 14 août 2006 à 19:17
donc pour revenir a nos moutons ...
des composants type interrupteur, lampe, moteurcontacteur etc ... peuvent se placer sur la feuille et on les connecte avec des fils ! quand on ferme l'inter la lampe s'allume ... pas trop difficile a faire sauf si on veut vraiment gerer tous les cas .. alors la l'intelligence de fonctionnement sera pas facile a ecrire ...
cs_jfs59
Messages postés178Date d'inscriptionmardi 29 avril 2003StatutMembreDernière intervention 2 février 2010 14 août 2006 à 19:13
oui j'ai ca dans la tete aussi .. j'ai fait un editeur de schema avec des composants electriques mais c'est juste pour faire du dessin .. d'ailleur c'est lié a un editeur de circuits imprimé multicouches (sans routeur celui que j'avais ecris faisait du tricotage ) mais la dedans rien ne bouge tout seul ...
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 14 août 2006 à 19:04
OH!
ça m'a l'air pas mal du tout! source interressante car j'ai en projet un editeur de shema electrique interactif ... ça pourrait etre lié.
cs_jfs59
Messages postés178Date d'inscriptionmardi 29 avril 2003StatutMembreDernière intervention 2 février 2010 14 août 2006 à 15:31
pour avoir une idée le programme est la avec un exemple de GRAFCET
cs_jfs59
Messages postés178Date d'inscriptionmardi 29 avril 2003StatutMembreDernière intervention 2 février 2010 14 août 2006 à 15:22
Pour résumé le tapis (avec sa bouteille et ses capteur) est un objet entier le portique , le vérin, et la station d'embouteillage le sont aussi avec des propriétés et des méthodes .... ca se rapprocherai plus de automation studio (qu'elle prétention) si on pouvait les disposer et les assembler sur une page .. mais ce n'est pas le cas! car pas le but recherché ...
cs_jfs59
Messages postés178Date d'inscriptionmardi 29 avril 2003StatutMembreDernière intervention 2 février 2010 14 août 2006 à 15:17
rien a voir avec turbocad ! les composants sont uniques et ne peuvent pas etre construits ou assemblés en partie .. ils bougent de maniere définie avec des directions et amplitudes imposées ! ce n'est pas un logiciel de dessin 2D ni 3D ... mais simplement des exemples d'automatismes pouvant etre commandé par un GRAFCET type PL7 que l'on peut ecrire soit même dans un editeur en enchainant des etapes transitions .. peu d'interet pour faire bouger un simple verin ! mais ecrire un GRAFCET pour la station d'embouteillage permettant de remplir les bouteilles poser les bouchons et remplir la palette la ca devient interessant en automatisme ! creer un GRAFCET de tache et / ou de surveillance du niveaux des cuves .. la aussi c'est pas donné au vulgum pecus et c'est un apprentissage ! mais la discution n'est pas la ! l'exemple montre (peut etre maladroitement) comment dessiner afficher et mettre a jour en l'animant un dessin ...
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 5 février 2015 14 août 2006 à 13:33
Salut,
aaah... encore quelque chose d'original !
un futur concurrent de Turbocad se prépare sur le site... ;)
cs_jfs59
Messages postés178Date d'inscriptionmardi 29 avril 2003StatutMembreDernière intervention 2 février 2010 13 août 2006 à 21:58
Seul le composant tapis a été mis dans le source ! si les autres vous semble interessant ca peux se faire mais le principe et toujours le même donc je vois pas trop l'interet ....surtout que c'est du spécifique pas forcément réutilisable !
12 oct. 2008 à 12:28
Dans l'évènement OnPaint (ou en surchargeant Paint;), au lieu de dessiner sur le Canvas du TControl ou de la TForm, dessine le sur un TBitmap séparé, et ensuite dessine le TBitmap... : plus de scintillement !
14 août 2006 à 19:31
Function TDrawGrafcet.ActiveSuivante(NCol,NRow,PCol,PRow :Integer):boolean;
var test1,test2 :boolean ; x,y: integer;
Begin
result := false;
Case TableauType[NCol,NRow].Gtype of
0: // Rien
result := false;
1..2: // Etape
Begin
TableauType[NCol,NRow].AActive := true;
result := true;
End;
3: // Transition
Begin
if ValideTransition(NCol,NRow)and (TableauType[NCol,NRow -1].Gtype < 16 )then result := ActiveSuivante(NCol,NRow+1,NCol,NRow) else if
ValideTransition(NCol,NRow)and (TableauType[NCol,NRow -1].Gtype > 15 )and VerifierPrecedentes(NCol,NRow-1,NCol,NRow-1)then result := ActiveSuivante(NCol,NRow+1,NCol,NRow) else result := false;
End;
4: // Depart
Begin
For x := 0 to ColCount - 1 do
for y := 0 to RowCount- 1 do
If ((TableauType[x,y].Gtype = 1) or (TableauType[x,y].Gtype = 2)) and (TableauType[x,y].Numero = TableauType[NCol,NRow].Numero) then
Begin
ActiveSuivante(x,y,NCol,NRow);
Result := true;
Exit;
End;
End;
5: // Arrivée
Begin
result := true;
End;
6: // Coude droit bas
Begin
if NCol = PCol Then result := ActiveSuivante(NCol+1,NRow,NCol,NRow)else if NRow = PRow
then result := ActiveSuivante(NCol,NRow +1,NCol,NRow);
End;
7: // Coude gauche bas
Begin
if NCol = PCol Then result := ActiveSuivante(NCol-1,NRow,NCol,NRow)else if NRow = PRow
then result := ActiveSuivante(NCol,NRow+1,NCol,NRow);
End;
8: // Coude droit haut
Begin
if NCol = PCol Then result := ActiveSuivante(NCol+1,NRow,NCol,NRow)else if NRow = PRow
then result := ActiveSuivante(NCol,NRow -1,NCol,NRow);
End;
9: // Coude gauche haut
Begin
if NCol = PCol Then result := ActiveSuivante(NCol-1,NRow,NCol,NRow)else if NRow = PRow
then result := ActiveSuivante(NCol,NRow-1,NCol,NRow);
End;
10: // Horizontale haut
Begin
if NRow > PRow Then
Begin
Test1 := (ActiveSuivante(NCol-1,NRow,NCol,NRow));
Result := (ActiveSuivante(NCol+1,NRow,NCol,NRow)) or Test1;
End Else
If PCol > NCol Then
Begin
result := (ActiveSuivante(NCol-1,NRow,NCol,NRow));
End Else
If PCol < NCol Then
Begin
result := (ActiveSuivante(NCol+1,NRow,NCol,NRow));
End;
end;
11: // Horizontale bas
Begin
If PCol > NCol Then
Begin
Test1 := (ActiveSuivante(NCol-1,NRow,NCol,NRow));
Result := (ActiveSuivante(NCol,NRow+1,NCol,NRow)) or Test1;
End Else
If PCol < NCol Then
Begin
Test1 := (ActiveSuivante(NCol+1,NRow,NCol,NRow));
Result := (ActiveSuivante(NCol,NRow+1,NCol,NRow)) or Test1;
End;
end;
12,13: // Simple descente et Simple montée
Begin
if NRow > PRow Then result := ActiveSuivante(NCol,NRow+1,NCol,NRow)else if NRow < PRow
then result := ActiveSuivante(NCol,NRow-1,NCol,NRow);
End;
14: // Branche Horizontale
Begin
if NRow > PRow Then
Begin
Test1 := (ActiveSuivante(NCol,NRow+1,NCol,NRow));
Result := (ActiveSuivante(NCol+1,NRow,NCol,NRow)) or Test1;
End
Else If PCol > NCol Then Result := (ActiveSuivante(NCol,NRow +1,NCol,NRow));
end;
15: // Horizontale simple
Begin
if NCol > PCol Then result := ActiveSuivante(NCol+1,NRow,NCol,NRow)else if NCol < PCol
then result := ActiveSuivante(NCol -1 ,NRow,NCol,NRow);
End;
16: // Double Centre
Begin
if NRow > PRow Then
Begin
Test1 := (ActiveSuivante(NCol-1,NRow,NCol,NRow));
Test2 := (ActiveSuivante(NCol,NRow+1,NCol,NRow));
Result := (ActiveSuivante(NCol+1,NRow,NCol,NRow)) or Test1 or test2;
End Else
If PCol > NCol Then
Begin
test1 := (ActiveSuivante(NCol,NRow+1,NCol,NRow));
result := (ActiveSuivante(NCol-1,NRow,NCol,NRow))or test1;
End Else
If PCol < NCol Then
Begin
test1 := (ActiveSuivante(NCol,NRow+1,NCol,NRow));
result := (ActiveSuivante(NCol+1,NRow,NCol,NRow)) or test1;
End;
end;
17: // Double Haut
Begin
if NRow > PRow Then
Begin
Test1 := (ActiveSuivante(NCol-1,NRow,NCol,NRow));
Result := (ActiveSuivante(NCol+1,NRow,NCol,NRow)) or Test1;
End Else
If PCol > NCol Then
Begin
result := (ActiveSuivante(NCol-1,NRow,NCol,NRow));
End Else
If PCol < NCol Then
Begin
result := (ActiveSuivante(NCol+1,NRow,NCol,NRow));
End;
end;
18: // Double Bas
Begin
If PCol > NCol Then
Begin
Test1 := (ActiveSuivante(NCol-1,NRow,NCol,NRow));
result := (ActiveSuivante(NCol,NRow+1,NCol,NRow))or test1;
End Else
If PCol < NCol Then
Begin
Test1 := (ActiveSuivante(NCol+1,NRow,NCol,NRow));
result := (ActiveSuivante(NCol,NRow+1,NCol,NRow))or test1;
End;
end;
Else result := false; // Autre valeur
End; // fin case of
End;
le nombre de possibilité est assez importants d'autant que
VerifierPrecedentes est aussi réentrentes comme plusieurs autres .. a la fin le cerveau commence a fumer ...
14 août 2006 à 19:17
des composants type interrupteur, lampe, moteurcontacteur etc ... peuvent se placer sur la feuille et on les connecte avec des fils ! quand on ferme l'inter la lampe s'allume ... pas trop difficile a faire sauf si on veut vraiment gerer tous les cas .. alors la l'intelligence de fonctionnement sera pas facile a ecrire ...
14 août 2006 à 19:13
14 août 2006 à 19:04
ça m'a l'air pas mal du tout! source interressante car j'ai en projet un editeur de shema electrique interactif ... ça pourrait etre lié.
14 août 2006 à 15:31
http://diva2440.free.fr/gp.rar
14 août 2006 à 15:22
14 août 2006 à 15:17
14 août 2006 à 13:33
aaah... encore quelque chose d'original !
un futur concurrent de Turbocad se prépare sur le site... ;)
13 août 2006 à 21:58