Aide pour mon programme de hacheur pour moteur à CC

cs_looloo78 Messages postés 15 Date d'inscription vendredi 18 février 2005 Statut Membre Dernière intervention 26 novembre 2010 - 27 nov. 2008 à 19:27
cs_looloo78 Messages postés 15 Date d'inscription vendredi 18 février 2005 Statut Membre Dernière intervention 26 novembre 2010 - 27 nov. 2008 à 21:41
bonjour,

Dans le cadre de loisir je me suis mis au VB.
Actuellement je suis sur un petit projet de commande de moteur à cc, en gros un un hacheur (on hache de signal continu pour diminuer la tension efficaice), que je pilote via le port serie. ( pour info j'ai en sortie une petite carte 8 sortie analogique et je pilote un seule sortie en demandant une sortie avec mscomm.output =chr$(1)).

bref dans mon code j'ai une tempo , je n'ai pas utilisé le timer car ca ne marchait pas alors j'ai mis un for i=1 to x next i.

bref mon problème n'est pas la mais ceci : lors de l'execution de ma boucle infini do-loop la moindre interruption sur le hscroll (barre de regul de la vitesse) coupe momentanément ma boucle et mon moteur stoppe ou ralenti fortement un bref instant.

Ya t il la possibilité que cette action hscroll fasse sa tache et qu'elle n'intervienne pas sur ma boucle tempo.

pour plus de comprehension voici mon prog mercide votre aide:

*********************************
Dim arret As Boolean

Private Sub Command1_Click()



Command1.Enabled = True

If Command1.Enabled = True Then
Command1.Enabled = False
Command3.Enabled = False
End If


arret = True
MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.PortOpen = True
Dim x As Long
Dim y As Long



Do
HScroll1.Refresh
x = HScroll1.Value
X1 = 100 - x



MSComm1.Output = Chr$(255)
For i = 1 To x * 10000
i = i + 1
Next i



MSComm1.Output = Chr$(0)
For i = 1 To X1 * 10000
i = i + 1
Next i



If arret = False Then
Exit Do
End If
DoEvents



Loop


MSComm1.PortOpen = False
End Sub

Private Sub Command2_Click()
arret = False
Command1.Enabled = True
Command3.Enabled = True
End Sub



Private Sub Command3_Click()
Unload Me
End Sub










kix

4 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
27 nov. 2008 à 19:56
salut,

ce n'est pas qu'il sort de la boucle mais que les 2 actions se "bouffent" l'une l'autre.

l'évènement va prendre la main sur ta boucle donc le code de l'évènement va s'exécuter, puis le code va revenir là ou il était dans sa boucle.

il faudrait que ton code s'execute dans un thread séparé, ce qui n'est pas faisable en VB6. désolé....

le timer était pourtant une bonne idée, la scroll agissant alors uniquement sur son intervalle.
qu'est-ce qui ne fonctionnait pas dans cette méthode? intervalle "mini" trop long?

ps :

Private Sub Command1_Click()


Command1.Enabled = True <- si on est ici c'est forcément que le bouton était enabled

If Command1.Enabled = True Then <- forcément vrai, plutôt 2 fois qu'une ^^






++

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
0
cs_looloo78 Messages postés 15 Date d'inscription vendredi 18 février 2005 Statut Membre Dernière intervention 26 novembre 2010
27 nov. 2008 à 20:28
salut et merci,

pour tes commentaires j'en prends bonne note.

pour le timer j'ai bien essayé mais je n'avais pas d'action, c'etait bizarre.
ex: avec timer.interval=1000 je n'avis pas du tout 1secondes.
tout semblait simultané. alors ???

en tout cas avec mon code pourrais tu m'indiquer la marche à suivre pour mon timer?

merci de ton aide.

kix
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
27 nov. 2008 à 20:49
pas testé mais je dirai plus un truc dans ce genre :


<title>Coloration syntaxique, jeudi 27 novembre 2008 20:51</title>




Option Explicit




Private Sub 
Form_Load()

    Timer1.Enabled = False
    Timer1.Interval = 500
    
    HScroll1.Value = 500
    HScroll1.Min = 20
    HScroll1.Max = 3000
    
    MSComm1.CommPort = 1
    MSComm1.Settings = "9600,n,8,1"
    
    Command1.Enabled = True 'démarrer
    command2.Enabled = False 'arrêter
    command3.Enabled = True 'quitter
End Sub

Private Sub Command1_Click()
    Command1.Enabled = False
    command2.Enabled = True
    Timer1.Enabled = True
    MSComm1.PortOpen = True
End Sub

Private Sub Command2_Click()
    Timer1.Enabled = False
    MSComm1.PortOpen = False
    Command1.Enabled = True
    command2.Enabled = False
End Sub

Private Sub Command3_Click()
    Call Command2_Click
    DoEvents
    Unload Me
End Sub

Private Sub HScroll1_Change()
    Timer1.Interval = HScroll1.Value
End Sub

Private Sub Timer1_Timer()
    MSComm1.Output = Chr$(255)
    DoEvents
    
    MSComm1.Output = Chr$(0)
    DoEvents
End Sub





<small>
[../code.aspx?ID=39466 Coloration VB6, VBA,
VBS]
</small>












<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
0
cs_looloo78 Messages postés 15 Date d'inscription vendredi 18 février 2005 Statut Membre Dernière intervention 26 novembre 2010
27 nov. 2008 à 21:41
Private Sub Command1_Click()
    Command1.Enabled = False
    command2.Enabled = True
    Timer1.Enabled = True
    MSComm1.PortOpen = True
End Sub

Si je comprends bien avec cet evenement "démarrer" on appelle la tempo timer1

puis avec:

Private Sub Timer1_Timer()
    MSComm1.Output = Chr$(255)
    DoEvents
    
    MSComm1.Output = Chr$(0)
    DoEvents
End Sub


je ne comprends pas trop ce code
par contre avec un hacheur il me faudrait 2 timers, ou la meme avec une timer.value différente 2 fois.
0
Rejoignez-nous