IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Commander une carte relais à partir de VB


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 18
    Par défaut Commander une carte relais à partir de VB
    Bonjour,

    Dans le cadre d'un projet, je dois pouvoir commander une carte relay USB-RLY16 par le biais d'un ordinateur et donc d'un programme qui sera codé en vb.

    Le problème est que je n'arrive pas à envoyer des commandes à la carte pour pouvoir fermer les relais ou les ouvrir.

    Je vous joint mon code :

    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Form1.MSComm1.CommPort = 7
    Form1.MSComm1.Settings = "19200,n,8,2"    'Configuration des paramètres acceptés par la carte
     
     
    If Form1.MSComm1.PortOpen = True Then
        Form1.MSComm1.PortOpen = False
    End If
     
    Form1.MSComm1.PortOpen = True
     
     
     
    Form1.MSComm1.Output = "6E"    'Essaye d'envoyer la commande 6E ou 110
     
    Form1.MSComm1.PortOpen = False

    Le problème est que rien ne se passe, le programme tourne mais aucun relais ne se ferme ou ne s'ouvre. La commande 6E (hexa) ou 110 (décimale) devrait fermer tous les relais.

    Si quelqu'un pourrait m'aider

    Cordialement Pierre

  2. #2
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Salut
    Citation Envoyé par un site de vente sur le web
    Le Module de Relais USB-RLY16 à 8 Canaux, 16 Amp, Devantech est équipé de sorties de relais (contact libre) 8 V avec un courant nominal de jusqu'à 16 Amp chacune. Le processeur est alimenté et chargé à partir de n'importe quel port USB standard et l'énergie du relais est obtenue par l'adaptateur d'alimentation CC. Jack d'entrée CC de 2,1 mm avec polarité positive ; alimentation continue requise pour fournir au moins 500 mA à 12 Vcc. Les relais sont de type SPCO (Single Pole Change Over). Les contacts normalement ouverts, normalement fermés et communs sont tous disponibles sur les bornes à vis.
    • Code du fournisseur : USB-RLY16
    Donc tu ne peux utiliser un port COM pour faire fonctionner cette carte relais.
    Personnellement je ne sais pas converser avec le port USB, donc je ne pourrais pas t'aider.
    Bon chance pour la suite de tes recherches.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour avec ce code :

    Citation Envoyé par boboch Voir le message
    ...

    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    (...)
     
    Form1.MSComm1.Output = "6E"    'Essaye d'envoyer la commande 6E ou 110
    (..)

    (...)
    tu n’envoie pas la valeur 6E mais tu envoie la chaine de caractère "6E"


    essai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1.MSComm1.Output = Chr(&H6E)
    que tu peu aussi écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1.MSComm1.Output = "n"

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 18
    Par défaut
    Bonjour,
    J'ai réussi à ouvrir ou fermer les relais, il fallait juste envoyer un tableau contenant la valeur en décimal dans la premiere case comme ci-dessous :

    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SerBuf(0) = 110       ' number of command
    Form1.MSComm1.Output = SerBuf   ' send the command

    Mon nouveau problème est que je n'arrive pas à recevoir les informations que la carte me communique. Je m'explique, dans la data sheet, il y a deux lignes où il est écrit :

    Command 90 : Get software version - returns 2 bytes, the first being the Module ID which is 9, followed by the software version
    Command 91 : Get relay states - sends a single byte back to the controller, bit high meaning the corresponding relay is powered
    Le problème est que quand j'envoie la commande 90 ou 91 et que je fais une boucle pour permettre de récupérer la valeur, cela ne me retourne rien. La boucle utilisée est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        Do
            DoEvents
            i = i + 1
            Tampon = Tampon & Form1.MSComm1.Input
        Loop Until InStr(Tampon, vbLf) Or i > 30000
    Si quelqu'un aurait une idée de comment faire, je vous remercie d'avance

  5. #5
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Salut

    J'étais persuadé que tu voulais piloter la carte au port USB, en utilisant directement le protocole USB pour l'émission et ou la réception.
    Dans ces liens tout est indiqué:
    USB- RLY16
    USB-RLY16 L
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 18
    Par défaut
    Bonjour,

    Justement je me sers de cette page pour comprendre le fonctionnement le problème c'est qu'il ne parle pas de la programmation la dedans.

    J'arrive pas à utiliser la commande 91 et 90 du tableau qu'il y a présent sur cette page

  7. #7
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Avant d'écouter le port, il faut lui indiquer se que tu veux écouter en lui envoyant le code approprié.
    En reprenant une partie de ton code, j'essaierai comme cela
    Dim SerBuf As Integer un tableau DECIMALE me semble superflu, tu me diras si cela fonctionne avec ce type.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Option Explicit
     
    Private Sub Command1_Click()
    Dim T As Integer, Cpt As Integer
    Dim Tampon As String, Msg As String
    Dim SerBuf As Integer
     
    ' Obtenir la version du logiciel - renvoie 2 octets
    ' le premier étant l'ID du module, suivie par la version du logiciel
    SerBuf = 90
    Form1.MSComm1.Output = SerBuf   ' envoye la commande
     
    'ecoute le message en retour
    Tampon = "": T = 0: Cpt = 0: Msg = ""
    Do
        DoEvents
        T = T + 1
        Tampon = Form1.MSComm1.Input
        If Tampon <> "" Then
            Msg = Msg & Tampon & " "
            Cpt = Cpt + 1
            If Cpt = 2 Then Exit Do
            Tampon = ""
        End If
    Loop Until T > 30000
     
    If Trim(Msg) <> "" Then
        MsgBox Trim(Msg)
        Else
        MsgBox "Temps d'aquisition dépassé"
    End If
     
    '**************************************************************************************
     
    'Obtenir l'état des relais - envoie un seul octet retour vers le contrôleur
    'le bit de haute signification du relais correspondant est alimenté
    SerBuf = 91
    Form1.MSComm1.Output = SerBuf   ' envoye la commande
     
    'ecoute le message en retour
    Tampon = "": T = 0: Cpt = 0: Msg = ""
    Do
        DoEvents
        T = T + 1
        Tampon = Form1.MSComm1.Input
        If Tampon <> "" Then Msg =  Tampon: Exit Do
    Loop Until T > 30000
     
    If Trim(Msg) <> "" Then
        MsgBox Trim(Msg)
        Else
        MsgBox "Temps d'aquisition dépassé"
    End If
     
     
    End Sub
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

Discussions similaires

  1. import d'une carte a partir d'un map server
    Par freddy000 dans le forum SIG : Système d'information Géographique
    Réponses: 0
    Dernier message: 02/12/2010, 21h45
  2. [Win - visual] Commander une carte IEEE 488
    Par LaDy_JeDi dans le forum C++
    Réponses: 13
    Dernier message: 08/07/2008, 17h02
  3. Commander une carte d'aquistion 'port isa'
    Par samia_6 dans le forum MATLAB
    Réponses: 2
    Dernier message: 26/09/2006, 16h36
  4. Flasher une carte mère à partir d'une autre carte mère
    Par mbzhackers dans le forum Composants
    Réponses: 6
    Dernier message: 01/06/2006, 22h08
  5. commander une carte fax via access
    Par dpie dans le forum Access
    Réponses: 5
    Dernier message: 09/09/2005, 17h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo