Simulation d un programme automate sur Excel

bonjour a tous

je suis en train de bosser sur un automate et j ai un programme a faire, mais je bloque un peu

la machine est un plateau tournant, avec 10 encoches (demie sphere), ce plateau a un convoyeur en bordure, donc un coté les bouteilles vident arrivent, de l autre les bouteilles pleine repartent.

autour de cette table, j ai 3 modules fixé sur la table, une doseuse qui rempli la bouteille, un boucheuse, qui depose une pompe, et une visseuse qui la visse

on va dire que la doseuse est en module 0, la visseuse en module 2, et la visseuse en module 4

je n utilise que 1 seule capteur sur le module 0, qui detecte la presence d une bouteille ou non.

la table tourne en continue de 36°, puis une pause de 1 seconde, puis repart

des que une bouteille est detectée, la doseuse se met en route, une fois le cycle fini, la table tourne, si a nouveau une bouteille, on remplie a nouveau, si pas de bouteille, on tourne de 36 ° à nouveau.

ensuite une fois que la bouteille qui à été detecté au paravant passe devant le module 3, on declenche la boucheuse, et devant le module 5, on declenche la visseuse

on peut dire que a partir du module 6, l encoche se vide obligatoirement

le code de la doseuse est fait, le code de la table est fait, mais le code du tableau de mémoire, je galere complet

donc là j'ai fait un tableau et un bout de code a verifier complet, car j ai aucune confiance dans ce que j ai ecris

l idée c etait de faire un truc dynamique pour voir les valeur dans le tableau bouger en temps reel toutes les 2 secondes

apres je dois penser a la retranscription dans l automate, donc il faut eviter de faire des call sub(), par exemple, ca ne marchera pas

majoritairement je code en

do

if g1=0 then

action

end if

loop

merci de votre aide

156table-tournante.xlsm (22.73 Ko)

Bonsoir,

Tu veux simuler quoi au juste ? Parce que là ça ne ressemble à rien. Qu'est-ce que ton code doit produire une fois correctement écrit ?

regarde le fichier excel

feuil1 c est une simulation etape par etape de ce que je veux memorisé

en gros a chaque rotation je memorise si il y a une bouteille devant le module 0 ou non

j ai fais une macro tableau, que tu peux essaye et qui a priori marche, seulement j ai pas la main pour changer la cellule c16 pendant l execution de la macro

en gros, tu passe la valeur a 1, tu lance la macro, un cycle dure 2 seconde,

la doseuse se met en route de suite

puis 6 secondes apres (3 cycles), c est la boucheuse, car la bouteille detecter au premier cycle es arrivé devant

puis 8 secondes apres, c est la visseuse

c est un peu ce style:

https://www.youtube.com/watch?v=Hsf34Rd98fg

avec une seule sonde de detection, au niveau de la doseuse

107table-tournante.xlsm (24.65 Ko)

Je rejoins MFerrand, sans savoir le besoin final il est difficile de répondre à ta question! Pour ma part, j'ai déjà traduit un automate en VBA car j'en avais besoin pour une simulation numérique, là au final qu'es-ce que tu veux ressortir de ton programme?

Tu veux détecter des anomalies, rechercher des améliorations, simuler un rendement .... ?

Comme dit plus haut

Sur ma table j ai une seule sonde qui detecte la bouteille au module 0

L idee est de memoriser les boureilles dans la table pour declencher le module 3 et 5 au bon moment, quand la bouteille arrive devant

Je suid limite en nombre d entree sur mon automate donc du coup je dois limiter le nombre de sonde

Sinon le plus simple aursit ete une sonde devant chaque module

Tu souhaites surveiller ton automate avec un VBA Excel ?????

Non je suis cher moi et j ai pas l automate sous la main

Je veux tester le code

Une proposition.

116v-tec.xlsm (25.99 Ko)

J'ai fait quelques hypothèses, donc il y a des chances que ça ne fonctionne pas comme ça devrait, mais au moins ça fonctionne

Utilisation:

Cliquer sur "lancer machine", ce qui a pour effet d'amener 1 bouteille à l'entrée.

Puis cliquer sur "rotation machine" autant de fois que tu veux, ce qui aura pour effet de faire tourner ton plateau, bref 1 cycle.

le "lancer machine" est une sorte de "reset"

alors ca marche

apres il faudrait que l on puisse decidé de l etat de l encocher 0 (ou 1)

bouteille ou pas bouteille

et lancer une rotation, afin de voir le comportement de memorisation

a partir de là

lorsque une bouteille arrive devant un module (1/3 ou 5), on actionne le module en question, sinon rien

et passé l encoche 6, on vide forcement l encoche

Ok donc la base que je propose te convient?

apres il faudrait que l on puisse decidé de l etat de l encocher 0 (ou 1)

J'arrive pas trop à comprendre ce que tu veux dire par là. Si le module est allumé ou non?

Si on ajoute une bouteille ou non?

Là j'ai fait la simulation en partant de:

1 -> remplissage

3 -> bouchon

5 -> vissage

6-> 7 <=> sortie de bouteille

10 -> entrée d'une bouteille.

Tu veux pouvoir dire si on ajoute une bouteille ou non c'est ça?


Voilà un second fichier avec cette modification.

40v-tec.xlsm (26.52 Ko)

non je reexplique

le 1er module est le 0, c est le seul et unique module qui a une sonde pour detecter si il y a une bouteille ou non

donc si j ai une bouteille a l encoche 0 et au module 0 je conditionne, une fois fini

je tourne d une encoche

donc encoche 1 j ai une une bouteille

module 0, j ai pas de bouteille donc je fais rien

je tourne d une encoche

donc encoche 2 j ai une bouteille, mais pas en encoche 1

module 0 a nouveau une bouteille, donc je conditionne, une fois fini

je tourne d une encoche

donc encoche 3 j ai une bouteille, encoche 2, j ai pas de bouteille, et encoche 1 j ai une bouteille

comme encoche 3, j ai une bouteille, je met donc la boucheuse en route sinon rien, une fois fini

je tourne d une encoche

et ainsi de suite

le train de bouteille est aleatoire, bien sur en theorie il y aura des bouteilles non stop, mais on part du principe, qu il peut y avoir des trous, et je dois les gerer

Le train aléatoire de bouteilles, ma seconde proposition le gère (avec les 2 boutons).

Par contre pour moi tout se fait en même temps sur un cycle. ie une bouteille est remplie et en même temps une bouteille peut être bouchée et en même temps une bouteille peut être vissée.

(je tourne d'une encoche <=> un cycle pour moi)

la deuxieme version marche bien aussi (reponse en retard j avais pas vue la piece jointe)

supprime juste l encoche 10

part de 0 jusque 9

il n y a pas de bouteille vide, elle est directement detecté et rempli

si j ai une bouteille devant les modules 2/4, il n y a aucune action donc "-", et a partir de 6 jusque 9, l encoche perd sa bouteille donc plus de memorisation

Désolé je l'ai codé de 1 à 10 xD Sans prendre en considération ce que tu viens de dire, voilà une proposition graphique =)

69v-tec.xlsm (28.56 Ko)

tres sympa

alors maintenant on code a partir de 0, on remplace les phrase par des 0 ou 1

1= action dosage

2=bouchage

3=vissage

0= pas d action

pas d action si pas de bouteilles devant les module 0/3/5

pas action si les bouteilles sont devant les modules 1/2/4

et apres...

ba traduire ça en code simple pour l automate...


ps:

et au lieu de faire 3 boutons different

on en fait que 1 seul qui depend de l etait d une cellule 0 ou 1

et on ne fait pas plusieurs macro et sous macro, un seul code pour tout

pas de boucle while wend si possible, puisque au debut je faisait mais programme etape par etaper en while wend, mais comme, je gere plusieurs module en meme temps,et je dois surveiller les etats de plusieurs sondes a tout moment je ne peux pas rester bloquer dans un while wend

ca va deja plus ressembler à mon code final d automate

en fait ma facon de programmer est plustot simple

'initialisation

g1=0

'remise a 0 des variable

do

'porte de sortie de la boucle en cas d arret d urgence

if g1=0 then

action 1

g1=1

endif

if g1=1 then

action 2

g1=2

endif

if gi=2 then

action finale

g1=0

endif

loop

donc je dois pouvoir caler le tableau apres une action

exemple, je lance le mouvement, etape suivante, j attend que la table soit arreter, actiion suivante, pause de 1 seconde, action suivant, je relance un mouvement (si aucun module n est occupé)

saloute

j ai tenter des modifs dans ton code, tout a planté...

Désolé v tec mais tu as trop de contraintes et d'exigences pour le coup, je laisse la main.

(1 seul programme, pas de sous-procédure, pas de boucle while etc... c'est absolument pas comme ça que je code)

je sais bien désolé,mais je connais l automate, tout dois etre inclus dans 1 programme, il sait pas faire appel a des sous procedures

bon apres ça on peut y remedier en reecrivant la procedure

et concernant les while wend, je me suis deja fais avoir, autant dans un excel, c est pas trop grave, autant dans un automate ca pose des soucis

mais bon a la limite code comme tu le sens, je vais essayer une fois fini et en forme de l adapter, ce que je vouxdrais c est surtout comprendre ton code pour pouvoir le modifier/adapter sans le faire buger

là les seules truc qui me gene

il faudrait ça:

Private Const positionDoseuse As Integer = 0

Private Const positionBouchonneuse As Integer = 3

Private Const positionVisseuse As Integer = 5

Private Const positionEntree As Integer = 0

Private Const positionSortie As Integer = 6

et dans les action du tableau:

au lieu de faire

doser doser boucher boucher visser

est ce que ca n allegerait pas le code de faire par exemple

module 0 module 1 module 2 module 3 module 4 module 5 module 6

1 0 0 2 0 3 -

- pas de bouteilles

0 = pas d actions

1 =dosage si bouteille

2= bouchage si bouteille

3= vissage si bouteille

qu en pense tu?

c est plus simple pour moi de transformer une action unique en action sur l automate

en tout cas c est vraiment dommage de s arreter en si bonne route, et surtout pret de la fin

Rechercher des sujets similaires à "simulation programme automate"