Faire tourner trois boucle for next en même temps ...? - VB/VBA/VBS - Programmation
Marsh Posté le 16-02-2007 à 21:33:34
imbrique les
je vois pas le rapport avec une quelconque "précision", et surtout de quel "signal" tu parles
Marsh Posté le 16-02-2007 à 21:41:37
je vais vous expliquer...
Je doisi faire tourner 3 moteur spa sà pas via un ordinateur, pour le moment, le code est fonctionnel tel quel mais un par un.
Code :
|
je voudrais pouvoir programmer les 3 moteurs, et que tout se fasse.
je prend un exemple.
MOTEUR 1:
150Hz (1/T = 6.66ms)
500 pas (500impulsions FOR R=1 TO 500)
et des autres params peut importants
MOTEUR 2:
100Hz
45 pas (45impulsions FOR R=1 TO 500)
et des autres params peut importants
MOTEUR 3:
23Hz
98 pas (98impulsions FOR R=1 TO 500)
et des autres params peut importants
je voudrais crée de la 3 BFN afin de faire tourner les 3 moteur en même temps, sachant que si je let met "en série" (ce qui se passe actuellement) il faut attendre que le moteur 1 aie fini pour que le 2eme se mette en route etc....
Merci
Marsh Posté le 16-02-2007 à 21:59:25
VB est-il vraiment le language qu'il te faut ?
c'est pour une simulation je pense. je sais pas si tu peux faire des thread en java. pour l'automatisme de puissance il y a des modules spécialisés sinon
Marsh Posté le 16-02-2007 à 22:44:48
non, je dosi faire en basic, et ce n'est pas de la simulation, enfin je pense pas que ca s'appelle comme ça. MErci
Marsh Posté le 16-02-2007 à 23:01:55
je ne sais pas ce qu'on peut faire en basic,, mais en VISUAL basic, tu peux chercher à faire un test sur la clock de ta machine... Mais des milli secondes, c'est chaud cacao...
Marsh Posté le 16-02-2007 à 23:06:23
ca je sais faire, mais le problème ne se trouve pas là...
Marsh Posté le 17-02-2007 à 02:11:07
3 threads en parallèle ? Sinon "simuler" un mode parallèle en répartissant au mieux tes 3 codes dans une unique boucle ? (pour faire genre c'est en parallèle, ou presque )
Edit
Idée très très conne hein, c'était presque une blague... Faut du multithread et pis ché toute
Marsh Posté le 17-02-2007 à 02:25:20
A la tete du code posté, c'est pas du Vb, encore moins du Vb.net
AMHA c'est du QBasic. Tu vas en chier
Marsh Posté le 17-02-2007 à 10:01:55
THX, oui du basic
LKoLRn, c'est ce qu'on m'a conseillé (si je dois absolument faire ca en gardant le basic), car apparament le multi tasking n'est pas possible en Basic... mais ca ne sera jamais une fréquence juste, j'en parlerais avec mon prof.
qu'est-ce que le multithread ? Merci
Marsh Posté le 17-02-2007 à 10:07:01
Le multithread, en gros, consiste a créer des "sous-taches" qu'on appellera des threads ( justement ), et qui peuvent tourner en pseudo-simultanéité sur une machine. Pour simplifier, tu crées par exemple deux fonctions:
Fonction A:
Faire
Action_A_1;
Action_A_2;
Action_A_3;
Fin Faire
Fonction B:
Faire
Action_B_1;
Action_B_2;
Action_B_3;
Fin Faire
CréerThread ( avec Fonction A );
CréerThread ( avec Fonction B );
Et l'exécution produira un truc du style:
Action_A_1
Action_B_1
Action_B_2
Action_A_2
... etc
edit : tu noteras qu'a l'exécution, on ne peut pas garantir un partage "équitable" du temps d'exécution, à part sur un système temps-réel ( qnx et consorts ), mais c'est off-topic
Marsh Posté le 17-02-2007 à 10:10:39
Ah okay ... Peux tu me donner une ébauche de code, malheureusement, je ne vois pas d'aide dans le programme liberty basic concernant le multi thread. Merci
Marsh Posté le 17-02-2007 à 10:13:50
Désolé, mais dans l'implémentation du basic "basique ", je pense que ce n'est pas prévu. En visual basic tu utiliserais les "Timers", en quelque sorte des threads encapsulés.
Pour ton problème, il faut réussir à factoriser ton code dans une seule et unique boucle.
Marsh Posté le 17-02-2007 à 10:18:44
Code :
|
Marsh Posté le 17-02-2007 à 10:29:01
j'avais pensé plutot (une ébauche ca marchera srmt pas)
Code :
|
et je m'arrange pour que NBPASMOTEURx soit égal au nombre de pas entré + 1 (car on prends la valeur -1 car < )
Qu'en pense tu ?
Maintenant, j'aimerais faire ca aussi, mais je sais pas comemnt faire
Code :
|
donc deux conditions dans le if, c'est possible ?
Marsh Posté le 17-02-2007 à 10:32:30
ReplyMarsh Posté le 17-02-2007 à 10:33:49
apparament ca marche !!
Code :
|
si je met ARRET 1 à 0, bah ca arrete met rien, si je met à nimporte quoi, ca va jusque 5... Nickel koi
Marsh Posté le 17-02-2007 à 10:35:00
-ThX- a écrit : Si NBPASMOTEUR1 > NBPASMOTEUR2, tu boucles pour rien |
ouais, mais si NBPASMOTEUR1 vaut 5, et que NBPASLEPLUSGRAND (lol) vaut 40... si on est passé 5, ca fera plus rien niveau du moteur1...
Marsh Posté le 17-02-2007 à 10:37:24
Pour les IF avec plusieurs conditions, entoure les conditions avec des parentheses:
IF ( VARIABLE1 <> VALEUR1 ) AND ( VARIABLE2 = "CHOU FLEUR" )
Marsh Posté le 17-02-2007 à 10:39:38
ah ouais nickel, regarde
Code :
|
donne ceci à l'écran:
Citation : Premier moteur 1 |
Merci BCP !
Marsh Posté le 17-02-2007 à 10:42:31
oui ca je le sais, mais il adore ça (ou sais faire que ca ?), alors bon... puis il ne m'a appris que ca, j'ai pas le temps d'apprendre un nv language.
Marsh Posté le 17-02-2007 à 22:27:10
La preuve qu'une idée très très conne peut avoir du bon... Ca fait plaisir
Marsh Posté le 18-02-2007 à 11:49:12
J'avais deux heure à tuer, j'ai refait le programme avec cette optique, je vous épargne le développement de l'entré au clavier des données
Code :
|
aller, pour ceux que ca interesse, voici mon code:
Si éventuellement vous savez me faire part de modifications ... je suis prenneur
==> SURTOUT L 139 et 144
MERCI
Code :
|
Marsh Posté le 19-02-2007 à 14:45:49
hé bé...
On dit "recommencer" sans "a"
C'est tout ce que je comprends de ton programme (faut dire que j'ai pas cherché à comprendre )
Sinon, niveau algo, je dirais un truc du genre (pseudo code C#):
Code :
|
En te démerdant pour qu'un passage dans la boucle fasse exactement 1 / (cadencePremierMoteur * cadenceSecondMoteur * cadenceTroisiemeMoteur) secondes (sauf que ça en Basic je ne vois pas comment c'est possible )
Marsh Posté le 19-02-2007 à 17:59:19
mon programme fonctionne, donc je le laisse tel quel, je vais juste "l'améliorer"
Marsh Posté le 16-02-2007 à 21:28:46
Bonjour,
le titre ets je pense assez explicite, mais je vais développer.
Il faudrais que je puisse en basic faire 3 BFN (boucle for next) en même temps, avec le nombre d'état défférents [YY] (FOR X=1 TO YY) pour les 3, et ce qu'il y a dedans de totalement différent également... et que ca change pas sur la précision du signal envoyé en sortie
Merci beaucoup par avance.
Thibault
---------------
Du bist das Mädchen, dass zu mir gehört !