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

Macros et VBA Excel Discussion :

Utilisation Simple contact sec sur Port com en VBA [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2016
    Messages : 12
    Par défaut Utilisation Simple contact sec sur Port com en VBA
    Bonjour a tous

    Ayant fouillé sur toute la toile afin d'y trouver mon bonheur en vain !
    Je me tourne vers vous concernant une question simple (enfin j'espère)
    J'ai choisi votre forum car c'est mon préféré ;-) (j'y trouve la plupart des réponses à mes questions existentielles !)


    Je doit utiliser le port com (RS232) d'un ordinateur afin d'y adjoindre un capteur (contact "sec" tout ou rien, un interrupteur quoi !)
    Et de récupérer via VBA l'état de cet inter (ouvert ou fermé)

    J'ai trouvé comment le faire sur le port imprimante (LPT)
    En mettant l'interrupteur entre le Pin(2) D0 et le pin(15) du "Error" de la DB25
    Puis en utilisant la DLL "InpOut32.dll"
    J'utilise la commande :
    z = INP(&H379) 'interrogation du port correspondant
    Quand l'interrupteur est :
    Ouvert => z = 120
    Fermé => z = 112
    Donc en 3 lignes de code je sais si mon interrupteur est ouvert ou fermé ...
    Je passe le chapitre de la lecture en boucle et tout le tintouin qui va avec ( c'est un autre pb)


    Je souhaite faire la même chose avec le port Com ( le PC que je doit utiliser n'a qu'un port com ! Les joies de l'évolution)
    Je ne suis pas obtus sur le nombre de lignes bien sûr,
    Dois-je utiliser le "Microsoft Comm Control " de VBA ?
    Beaucoup parlent de transfert de données, ce qui ne me sert pas !

    En résumé :
    quels fils je dois shunter (DTR-DSR-RTS-CTS) ?
    entre quels fils mettre mon inter (RX-TX) ?
    quelle DLL utiliser ?
    quel port à interroger pour récupérer l'état ($3FB-$3F8) ?

    entre () des indices que j'ai trouvé tans bien que mal !...

    Merci d'avance pour votre aide, ça fait 3 jours que je cherche en vain !...

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    sur un forum anglophone, je trouve ceci :
    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
    Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
     
    Sub Receive_COM5()
     
        Dim COM5file As Integer
        Dim timeout As Date
        Dim record As String * 11, emptyRecord As String * 11
        Dim recLen As Integer
        Dim inputByte As Integer
     
        recLen = Len(record)
     
        'Open COM5 port with baud rate 2400, No parity, 8 data bits and 1 stop bit
     
        COM5file = FreeFile
        Open "COM5:2400,N,8,1" For Random As #COM5file Len = recLen
     
        'Monitor port for 30 seconds
     
        timeout = Now + TimeValue("00:00:30")
     
        Debug.Print "Started"
     
        While Now < timeout
            Get #COM5file, , record
     
            If record <> emptyRecord Then
     
                Debug.Print Now; "<" & record & ">"
     
                'Display each byte
     
                For i = 1 To recLen
                    inputByte = Asc(Mid(record, i, 1))
                    If inputByte = 0 Then
                        'No character in this position
                    ElseIf inputByte >= 32 And inputByte <= 126 Then
                        'Printable character
                        Debug.Print "<" & inputByte & "> "; Chr(inputByte)
                    Else
                        'Non-printable character
                        Debug.Print "<" & inputByte & ">"
                    End If
                Next
            End If
     
            DoEvents
            Sleep 200
        Wend
     
        Close #COM5file
        Debug.Print "Finished"
     
    End Sub
    http://www.mrexcel.com/forum/excel-q...-com-port.html
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre habitué
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2016
    Messages : 12
    Par défaut Code
    Bonjour ou bonsoir

    Ce code a l'air bien
    mais il sous entend que c'est une chaine de caractères et un port com connecté à un appareil de mesures par exemple
    Dans mon cas ce n'est pas un caractère ni des données mais juste un contact sur des b roches de la DB9

    je note quand même le code ...

    PS : Au fait je parle de port com mais si cela est possible a moindre coût je peux utiliser le port USB
    Mais a ma faible connaissance qui dit USB dit circuit imprimé et plus ...
    Je ne peux pas mettre un inter entre le data+ et le data- de la prise USB ?...


    Merci de la prompte réponse !

    stef

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Le port rs232 fonctionne en courant constant différentiel.

    Non ce n'est pas la solution

    Je te conseil un arduino , c'est une carte électronique à base d'un microcontrôleur et lu gère le port usb!

    Tu peux télécharger sur internet de librairies pour ton application du genre lire un porte, allumer une LED etc...

    Un arduno dans le premier prix 6.90€.

  5. #5
    Membre habitué
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2016
    Messages : 12
    Par défaut
    bonsoir

    J'avais bien pensé à une carte arduino
    Malheureusement c'est dans le cadre de mon travail et je n’ai aucun budget ! seul mon temps est payable ! ...
    Sur le port imprimante ça fonctionne donc ça doit etre possible en port com ...ou le port USB ;-)

  6. #6
    Invité
    Invité(e)
    Par défaut
    Sur le port imprimante ça fonctionne donc ça doit etre possible en port com ...ou le port USB ;-)
    Ne confonds pas le port parallèle qui fonctionne en tout ou rien et le port seri qui vide le contenu d'un registre de 8bis sur deux fils à court différentiel!

    Tu avais l'intention d'utiliser le port imprimante sans le buffériser?

    Tu ne comptais ps protégé ton ordinateur?

    Sache que depuis xp il n'est plus possible de gérer l'adresse du port parallèle!

    J'ai moi même été obligé d'utiliser une librairies pour gérer le port parallèle afin d'administrer un carte électronique.

    Il faut compter des optocoupleurs et les résistance pour les polariser si tu veux protégé ta machine.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment détecter l'absence de connexion sur port COM ?
    Par nicoboud2 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 12/04/2006, 14h41
  2. Problème de lecture sur port COM
    Par Marthym dans le forum MFC
    Réponses: 10
    Dernier message: 11/04/2006, 15h36
  3. Capteur InfraRouge sur port com
    Par PoOky dans le forum Composants VCL
    Réponses: 12
    Dernier message: 12/01/2006, 15h31
  4. Write puis read sur port com
    Par chourmo dans le forum API, COM et SDKs
    Réponses: 34
    Dernier message: 21/06/2005, 17h36
  5. Problème de reception sur Port COM
    Par Revan777 dans le forum C
    Réponses: 9
    Dernier message: 19/04/2005, 21h55

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