Sous Access déclencher une relais 5V USB - Page 2
Répondre à la discussion
Page 2 sur 2 PremièrePremière 2
Affichage des résultats 31 à 60 sur 60

Sous Access déclencher une relais 5V USB



  1. #31
    vande545

    Re : Sous Access déclencher une relais 5V USB


    ------

    J'ai fait des recherches ce WE et :
    - le vieil ocx MSComm n'existe plus
    - la communication avec un port série ou USB «n'existerait pas» en natif dans les langages VB et VBNET. Il faut utiliser une librairie externe donc on reste sur le fonctionnement initial tel que je l'ai décrit [B]ici[/B] mais en remplaçant MSComm par une DLL telle que #USBLib (mais pas obligatoirement celle-là).

    Mes compétences s'arrêtent là car je n'ai jamais utilisé de telles librairies et il y a un travail préalable de documentation à faire à leur sujet.

    Sinon, on doit pouvoir contourner le problème en écrivant le programme dans un tout autre langage mieux documenté.
    Le bouton Access exécuterait alors ce programme annexe.

    -----

  2. #32
    umfred

    Re : Sous Access déclencher une relais 5V USB

    Citation Envoyé par adipie Voir le message
    Bonjour à tous,
    Ne pas tenir compte de mon Post #24.
    Je viens de constater que ce relais est commandé par :
    0xA0 0x1 0x1 0xA2 pour la fermeture et 0xA0 0x1 0x0 0xA1 pour l'ouverture.
    Il reste maintenant à trouver comment envoyer ces trames de Access vers un port COM virtuel du PC.
    Antonydu62, peux tu faire un test avec RealTerm pour vérifier que tu as le même relais ?
    Avec :
    Display sur Ascii
    Port Baud 9600
    Port ton port sur lequel est branché le relais.
    Validation par le bouton "Change"
    Send Tapper 0xA0 0x1 0x1 0xA2 dans la fenêtre puis le bouton send number, le relais doit se fermer.
    0xa0+0x1+0x1+0xa2 c'était pour le soft que tu avais et qu'il a récupéré, son module (si c'est bien celui du post #4 se commande avec 0xAA et 0xBB

  3. #33
    anthonydu62

    Re : Sous Access déclencher une relais 5V USB

    adipie

    Re : Sous Access déclencher une relais 5V USB
    Bonjour à tous,
    Ne pas tenir compte de mon Post #24.
    Je viens de constater que ce relais est commandé par :
    0xA0 0x1 0x1 0xA2 pour la fermeture et 0xA0 0x1 0x0 0xA1 pour l'ouverture.
    Il reste maintenant à trouver comment envoyer ces trames de Access vers un port COM virtuel du PC.
    Antonydu62, peux tu faire un test avec RealTerm pour vérifier que tu as le même relais ?
    Avec :
    Display sur Ascii
    Port Baud 9600
    Port ton port sur lequel est branché le relais.
    Validation par le bouton "Change"
    Send Tapper 0xA0 0x1 0x1 0xA2 dans la fenêtre puis le bouton send number, le relais doit se fermer.
    Bonjour Adipie, je viens de tester, le relais s’enclenche bien, par contre comment on fait pour le déactiver, car la je ne peux pas tester ce que Unfred a marqué, j'ai peur de faire une connerie en débranchant physiquement le relais.

  4. #34
    umfred

    Re : Sous Access déclencher une relais 5V USB

    la réponse est dans ta citation => 0xA0 0x1 0x0 0xA1 pour l'ouverture

  5. #35
    anthonydu62

    Re : Sous Access déclencher une relais 5V USB

    Re : Sous Access déclencher une relais 5V USB

    J'ai fait des recherches ce WE et :
    - le vieil ocx MSComm n'existe plus
    - la communication avec un port série ou USB «n'existerait pas» en natif dans les langages VB et VBNET. Il faut utiliser une librairie externe donc on reste sur le fonctionnement initial tel que je l'ai décrit ici mais en remplaçant MSComm par une DLL telle que #USBLib (mais pas obligatoirement celle-là).

    Mes compétences s'arrêtent là car je n'ai jamais utilisé de telles librairies et il y a un travail préalable de documentation à faire à leur sujet.

    Sinon, on doit pouvoir contourner le problème en écrivant le programme dans un tout autre langage mieux documenté.
    Le bouton Access exécuterait alors ce programme annexe.
    Bonjour Vande545, je viens de tester et ça ne fonctionne pas, je ne sais pas ou mettre l'instruction pour fermer ou ouvrir le relais.

  6. #36
    anthonydu62

    Re : Sous Access déclencher une relais 5V USB

    Re : Sous Access déclencher une relais 5V USB

    la réponse est dans ta citation => 0xA0 0x1 0x0 0xA1 pour l'ouverture
    Oups Unfred, j'avais pas vu

  7. #37
    umfred

    Re : Sous Access déclencher une relais 5V USB

    donc si je comprends bien: ton relais réagit aux commandes 0xA0+0x01+0x01(0x00)+0xA1(0xA2 ) et pas à 0xAA/0xBB ?

  8. #38
    anthonydu62

    Re : Sous Access déclencher une relais 5V USB

    Re : Sous Access déclencher une relais 5V USB

    pour ta compréhension quand on parle de 0xAA ça veut la valeur hexadécimale AA (0x indique qu'on parle d'une valeur hexadécimale); en VBA, on l'écrit &hAA, ce qui correspond à 170 en décimal
    la suite 160 +1 +1 +162 ça fonctionne pour le relais sélectionné par adipie et que ne se commande a priori pas comme le tiens (https://www.amazon.fr/dp/B075F6J6WL/...740131_TE_item)
    pour l'utilisation de realterm, dans l'onglet display, choisi Hex dans la liste "display as"; ensuite, va dans l'onglet "Port" choisi le numéro du port série, la vitesse (baud) à 9600, clic sur open; ensuite, va dans l'onglet send, tapes 160 (ou 0xAA), puis clic le bouton "send number" et ton relais devrait s'ouvrir
    Re : Sous Access déclencher une relais 5V USB

    donc si je comprends bien: ton relais réagit aux commandes 0xA0+0x01+0x01(0x00)+0xA1(0xA2 ) et pas à 0xAA/0xBB ?
    Effectivement, c'est bien cela. ne réagit pas en Hexdécimal.

  9. #39
    umfred

    Re : Sous Access déclencher une relais 5V USB

    je te propose donc cette ajustement de mon code précédent
    Code:
    Private Sub CommandButton1_Click()
        Call CommandeRelais(Array(&HA0, &H1, &H1, &HA2))
    End Sub
    
    Private Sub CommandeRelais(cmd As Variant)
        Dim intPortID As Integer ' Ex. 1, 2, 3, 4 for COM1 - COM4
        Dim lngStatus As Long
        Dim strError  As String
        Dim strData   As String
        Dim lngSize As Long
        Dim i As Long
        
        ' Numéro du port série du module (voir dans Gestionnaire des périphériques le port associé)
        intPortID = 1
        'on formate la donnée sous forme de chaine
        If IsArray(cmd) Then
            For i = LBound(cmd) To UBound(cmd)
            strData = strData & Chr(cmd(i))
            Next i
        ElseIf VarType(cmd) <> vbString Then
            strData = Chr(cmd)
        End If
        
        ' Initialize Communications (conformément
        lngStatus = CommOpen(intPortID, "COM" & CStr(intPortID), "baud=9600 parity=N data=8 stop=1")
        
        If lngStatus <> 0 Then
        ' Handle error.
            lngStatus = CommGetError(strError)
            MsgBox "COM Error: " & strError
            Exit Sub
        End If
    
        ' Set modem control lines. (lignes suivantes mises en commentaires, pas utiles je pense)
        'lngStatus = CommSetLine(intPortID, LINE_RTS, True)
        'lngStatus = CommSetLine(intPortID, LINE_DTR, True)
    
        ' Write data to serial port.
        lngSize = Len(strData)
        lngStatus = CommWrite(intPortID, strData)
        If lngStatus <> lngSize Then
        ' Handle error.
            lngStatus = CommGetError(strError)
            MsgBox "COM Error: " & strError
            'Exit Sub
        End If
    
        ' Dans notre cas, pas de lecture du port série
        ' Read maximum of 64 bytes from serial port.
        'lngStatus = CommRead(intPortID, strData, 64)
        'If lngStatus > 0 Then
        '    ' Process data.
        'ElseIf lngStatus < 0 Then
        '    ' Handle error.
        'End If
    
        ' Reset modem control lines. (lignes suivantes mises en commentaires, pas utiles je pense)
        'lngStatus = CommSetLine(intPortID, LINE_RTS, False)
        'lngStatus = CommSetLine(intPortID, LINE_DTR, False)
    
        ' Close communications.
        Call CommClose(intPortID)
    
    End Sub

  10. #40
    adipie

    Talking Re : Sous Access déclencher une relais 5V USB

    PAS DE PANIQUE !
    Citation Envoyé par anthonydu62 Voir le message
    Effectivement, c'est bien cela. ne réagit pas en Hexdécimal.
    Peux tu tester le fonctionnement du relais en utilisant les deux boutons Send numbers dans RealTerm .
    Nom : RelaisRs232.jpg
Affichages : 120
Taille : 15,4 Ko
    Si ça fonctionne, nous pouvons passer à la suite.

  11. #41
    anthonydu62

    Re : Sous Access déclencher une relais 5V USB

    umfred

    Re : Sous Access déclencher une relais 5V USB
    je te propose donc cette ajustement de mon code précédent
    Umfred, Nickel, le relais se ferme bien. Par contre comment faire pour l'ouvrir?
    J'ai essayer :

    Private Sub CommandButton1_Click()
    Call CommandeRelais(Array(&HA0, &H1, &H1, &HA1))
    End Sub

    Et
    ...
    ' Close communications.
    Call CommOpen(intPortID)
    End Sub
    Il annonce une erreur:
    Nom : Capture.JPG
Affichages : 117
Taille : 15,1 Ko

  12. #42
    anthonydu62

    Re : Sous Access déclencher une relais 5V USB

    PAS DE PANIQUE !
    Peux tu tester le fonctionnement du relais en utilisant les deux boutons Send numbers dans RealTerm .
    Si ça fonctionne, nous pouvons passer à la suite.
    Adipie, oui le relais réagit bien.

  13. #43
    anthonydu62

    Re : Sous Access déclencher une relais 5V USB

    Umfred,
    je pense que je me plante pour ouvrir le relais.
    Il faudra vraiment après que cela fonctionne que j'analyse tout pour bien comprendre ce que les ligne de programme font!

  14. #44
    umfred

    Re : Sous Access déclencher une relais 5V USB

    pour l'ouvrir, il faut reprendre les commandes que l'on a indiqué.
    donc faire un call commandeRelais(Array(&hA0,&h1, &h0,&A1)

    description (supposée) de la commande:
    1er caractère: &hA0 => commande relais
    2ème caractère: &h1 => numéro du relais (ici le 1er)
    3ème caractère &h0/&h1 => Etat du relais (0=ouvert; 1=Fermé)
    4ème caractère: &hA1 ou &hA2 pour nous => somme de contrôle simple de la trame (1er caractère + 2ème caractère + 3ème caractère)

    ' Close communications.
    Call CommOpen(intPortID)
    End Sub
    il ne faut pas modifier cet appel, c'est pour la gestion du port COM/série, il faut le fermer à cet endroit (CommOpen attend en plus plusieurs paramètres, cf quelques lignes plus haut), il faut donc laisser Call CommClose(intPortID) ici
    Dernière modification par umfred ; 23/11/2020 à 14h05.

  15. #45
    adipie

    Re : Sous Access déclencher une relais 5V USB

    Citation Envoyé par anthonydu62 Voir le message
    Umfred, Nickel, le relais se ferme bien. Par contre comment faire pour l'ouvrir?
    J'ai essayer :

    Private Sub CommandButton1_Click()
    Call CommandeRelais(Array(&HA0, &H1, &H1, &HA1))
    End Sub
    Essaye Call CommandeRelais(Array(&HA0, &H1, &H0, &HA1))

  16. #46
    anthonydu62

    Re : Sous Access déclencher une relais 5V USB

    Re : Sous Access déclencher une relais 5V USB

    pour l'ouvrir, il faut reprendre les commandes que l'on a indiqué.
    donc faire un call commandeRelais(Array(&hA0,&h1, &h0,&A1)

    description (supposée) de la commande:
    1er caractère: &hA0 => commande relais
    2ème caractère: &h1 => numéro du relais (ici le 1er)
    3ème caractère &h0/&h1 => Etat du relais (0=ouvert; 1=Fermé)
    4ème caractère: &hA1 ou &hA2 pour nous => somme de contrôle simple de la trame (1er caractère + 2ème caractère + 3ème caractère)

    ' Close communications.
    Call CommOpen(intPortID)
    End Sub
    il ne faut pas modifier cet appel, c'est pour la gestion du port COM/série, il faut le fermer à cet endroit (CommOpen attend en plus plusieurs paramètres, cf quelques lignes plus haut), il faut donc laisser Call CommClose(intPortID) ici
    Umfred, BRAVO ça marche nickel!

    Maintenant, si je veux faire la fonction numéro 3 avec la commande 0XCC?

  17. #47
    anthonydu62

    Re : Sous Access déclencher une relais 5V USB

    Re : Sous Access déclencher une relais 5V USB

    Citation Envoyé par anthonydu62 Voir le message
    Umfred, Nickel, le relais se ferme bien. Par contre comment faire pour l'ouvrir?
    J'ai essayer :

    Private Sub CommandButton1_Click()
    Call CommandeRelais(Array(&HA0, &H1, &H1, &HA1))
    End Sub
    Essaye Call CommandeRelais(Array(&HA0, &H1, &H0, &HA1))
    Merci Adapie, tu as eu le même raisonnement que Umfred

  18. #48
    adipie

    Re : Sous Access déclencher une relais 5V USB

    Je ne pense pas que 0xCC fonctionne avec ce relais.
    Tu peux faire:
    A0 1 1 A2, temporiser et A0 1 0 A1
    Ou utiliser Button.OnKeyDown pour la fermeture et Button.OnKeyUp pour l'ouverture.

  19. #49
    anthonydu62

    Re : Sous Access déclencher une relais 5V USB

    Adipie,
    un truc de ce type la:
    Code:
    Private Sub Commande1_Click()
    Call CommandeRelais(Array(&HA0, &H1, &H1, &HA2))
    Me.TimerInterval = 5000
    Call CommandeRelais(Array(&HA0, &H1, &H0, &HA1))
    End Sub
    Le problème, c'est que ça ne dure pas 5 secondes, sa ferme et ouvre tout de suite.

  20. #50
    umfred

    Re : Sous Access déclencher une relais 5V USB

    Citation Envoyé par anthonydu62 Voir le message
    Umfred, BRAVO ça marche nickel!

    Maintenant, si je veux faire la fonction numéro 3 avec la commande 0XCC?
    une réponse rapide serait d'enchainer les 2 commandes, avec une attente/pause entre les 2

    Code:
    Dim PauseTime, Start, Finish, TotalTime
    Call CommandeRelais(Array(&HA0, &H1, &H1, &HA2))
    PauseTime = 1    ' Set duration.
    Start = Timer    ' Set start time.
    Do While Timer < Start + PauseTime
        DoEvents    ' Yield to other processes.
    Loop
    Call CommandeRelais(Array(&HA0, &H1, &H0, &HA1))
    ou (à tester)
    Code:
    Call CommandeRelais(Array(&HA0, &H1, &H1, &HA2))
    Application.Wait now+timeserial("00:00:01")
    Call CommandeRelais(Array(&HA0, &H1, &H0, &HA1))
    Le 1er me semble préférable, il ne bloque pas totalement l'application

  21. #51
    anthonydu62

    Re : Sous Access déclencher une relais 5V USB

    MERCI, tout fonctionne.
    Merci Adipie
    Merci Umfred

  22. #52
    umfred

    Re : Sous Access déclencher une relais 5V USB

    peut-être indiquer dans les commentaires du produit que tu as acheté, les bonnes commandes pour commander le relais (et l'indiquer aussi au vendeur)
    Si on avait eu les bonnes commandes dès le début, on aurait peut-être moins galérer

  23. #53
    anthonydu62

    Re : Sous Access déclencher une relais 5V USB

    peut-être indiquer dans les commentaires du produit que tu as acheté, les bonnes commandes pour commander le relais (et l'indiquer aussi au vendeur)
    Si on avait eu les bonnes commandes dès le début, on aurait peut-être moins galérer
    C'est fait, mais vont ils réagir, c'est des chinois

  24. #54
    adipie

    Re : Sous Access déclencher une relais 5V USB

    Il faut se méfier de ces modules sans datasheet, car il existe les mêmes relais avec une liaison USB HID.
    Peux tu poster le code définitif, je souhaite faire un test sur Excel ?

  25. #55
    umfred

    Re : Sous Access déclencher une relais 5V USB

    en 1er lieu récupérer le module CommIO pour les fonctions de ports séries
    Citation Envoyé par umfred Voir le message
    Comme je l'ai supposé, c'est une communication série, donc utiliser la méthode décrite dans le lien que j'ai indiqué dans mon précédent post, ou importer directement le fichier modCom.bas du zip téléchargeable sur http://www.thescarms.com/vbasic/commio.aspx (a priori, ils sont identiques).
    Dans ton cas, tu n'as qu'un octet à envoyer, qu'il faudra transformer en chaine avant de l'envoyer (puisqu'on t'indique une valeur hexa pour la commande)
    CommWrite(PortID, Chr(&hAA)) pour envoyer 0xAA (ouverture continue du relais) au relais sur le port identifié par PortID (voir le fichier Sample.txt du zio du lien de ce post)
    ensuite ce code dans une feuille excel avec un bouton type activeX
    Citation Envoyé par umfred Voir le message
    je te propose donc cette ajustement de mon code précédent
    Code:
    Private Sub CommandButton1_Click()
        Call CommandeRelais(Array(&HA0, &H1, &H1, &HA2))
    End Sub
    
    Private Sub CommandeRelais(cmd As Variant)
        Dim intPortID As Integer ' Ex. 1, 2, 3, 4 for COM1 - COM4
        Dim lngStatus As Long
        Dim strError  As String
        Dim strData   As String
        Dim lngSize As Long
        Dim i As Long
        
        ' Numéro du port série du module (voir dans Gestionnaire des périphériques le port associé)
        intPortID = 1
        'on formate la donnée sous forme de chaine
        If IsArray(cmd) Then
            For i = LBound(cmd) To UBound(cmd)
            strData = strData & Chr(cmd(i))
            Next i
        ElseIf VarType(cmd) <> vbString Then
            strData = Chr(cmd)
        End If
        
        ' Initialize Communications (conformément
        lngStatus = CommOpen(intPortID, "COM" & CStr(intPortID), "baud=9600 parity=N data=8 stop=1")
        
        If lngStatus <> 0 Then
        ' Handle error.
            lngStatus = CommGetError(strError)
            MsgBox "COM Error: " & strError
            Exit Sub
        End If
    
        ' Set modem control lines. (lignes suivantes mises en commentaires, pas utiles je pense)
        'lngStatus = CommSetLine(intPortID, LINE_RTS, True)
        'lngStatus = CommSetLine(intPortID, LINE_DTR, True)
    
        ' Write data to serial port.
        lngSize = Len(strData)
        lngStatus = CommWrite(intPortID, strData)
        If lngStatus <> lngSize Then
        ' Handle error.
            lngStatus = CommGetError(strError)
            MsgBox "COM Error: " & strError
            'Exit Sub
        End If
    
        ' Dans notre cas, pas de lecture du port série
        ' Read maximum of 64 bytes from serial port.
        'lngStatus = CommRead(intPortID, strData, 64)
        'If lngStatus > 0 Then
        '    ' Process data.
        'ElseIf lngStatus < 0 Then
        '    ' Handle error.
        'End If
    
        ' Reset modem control lines. (lignes suivantes mises en commentaires, pas utiles je pense)
        'lngStatus = CommSetLine(intPortID, LINE_RTS, False)
        'lngStatus = CommSetLine(intPortID, LINE_DTR, False)
    
        ' Close communications.
        Call CommClose(intPortID)
    
    End Sub
    Dernière modification par umfred ; 23/11/2020 à 18h28.

  26. #56
    anthonydu62

    Re : Sous Access déclencher une relais 5V USB

    Umfred, Bonjour (vu l'heure)
    En tout cas tu es un Chef!!!

    J'ai parcouru, depuis que tu m'as "pondu" la solution, toutes les lignes de commande pour essayer de comprendre le cheminement.
    Mais là, je suis arrivé au bout de ma compréhension du VBA.
    Je pense et en suis sur, qu'il faut que je laisse aux pros leurs talents. Et heureusement qu'il y a des forum comme celui-ci qui permet de faire partager le savoir de tous.
    En tout cas un grand merci à toi pour ton aide.
    Et si un jour, tu passe par Béthune (62), fait le moi savoir, pour que je t'offre une bière. C'est le minimum que je puisse faire!
    Bien cordialement.
    Anthony un chti heureux du 62

  27. #57
    adipie

    Re : Sous Access déclencher une relais 5V USB

    Citation Envoyé par umfred Voir le message
    en 1er lieu récupérer le module CommIO pour les fonctions de ports séries
    ensuite ce code dans une feuille excel avec un bouton type activeX
    Bonjour et merci pour ton partage.
    Peux tu préciser où trouver le module CommIO et où le placer ?

  28. #58
    umfred

    Re : Sous Access déclencher une relais 5V USB

    j'avais repris le post où j'indiquais l'endroit où le récupérer ...
    sur le site http://www.thescarms.com/vbasic/commio.aspx, lien "download source code", qui va télécharger un projet VB, dedans il y a un fichier .bas, qu'il faut importer depuis l'éditeur VBA d'Excel; ça l'ajoutera directement au fichier Excel (penser à l'enregistrer ^^)

  29. #59
    adipie

    Re : Sous Access déclencher une relais 5V USB

    Merci pour l'aide.
    En variante j'ai trouvé une autre solution qui consiste à créer un petit exécutable qui gère la séquence On, tempo, Off et qui est lancé par le bouton coté Excel.

    Coté Excel :
    Nom : ModExel.jpg
Affichages : 79
Taille : 19,1 Ko

    Coté exécutable en Delphi :
    Code:
    unit u_Bt1;
    interface
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, CPort;
    type
      TForm1 = class(TForm)
        ComPort1: TComPort;
        procedure FormActivate(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
    var
      Form1: TForm1;
    implementation
    {$R *.dfm}
    procedure TForm1.FormActivate(Sender: TObject);
    begin
     Form1.Top:=-100;  //Cache la Form
     Form1.Left:=-100;
     Comport1.Open;
     Comport1.WriteStr(#160 + #1 + #1 +#162); //Relais On
     sleep(1000);    //Tempo 1 s.
     Comport1.WriteStr(#160 + #1 + #0 +#161); //Relais Off
     comport1.Close;
     Form1.Close;
     end;
    end.

  30. #60
    umfred

    Re : Sous Access déclencher une relais 5V USB

    dommage d'utiliser un exe à côté qui fait le même travail (surtout qu'il doit falloir avoir le composant Com de Delphi pour pouvoir l'utiliser) et surtout comment lui définir le port com à utiliser ?

    dans la macro excel, on aurait aussi pu utiliser la fonction Sleep
    Code:
    ' à mettre en début de macro
    Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
    [...]
    Sleep 1000 'Sleep calcule en millisecondes. Donc Sleep 1000 attendra 1 seconde

Page 2 sur 2 PremièrePremière 2

Discussions similaires

  1. Commande SQL sous ACCESS 2007
    Par inviteac48035e dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 03/10/2011, 11h50
  2. Requête sous ACCESS 2003
    Par julau dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 04/06/2010, 14h49
  3. Impulsion 12v de 5sec, déclencher un relais pendant 2sec
    Par invite356840e1 dans le forum Électronique
    Réponses: 20
    Dernier message: 12/09/2009, 04h38
  4. Problème sous access Help Please
    Par invite31fefc0e dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 23/12/2006, 20h16
  5. Ouvrir une application sous access ?
    Par invite31fefc0e dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 15/04/2006, 19h03