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

  1. #1
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

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

    Informations forums :
    Inscription : Novembre 2016
    Messages : 12
    Points : 3
    Points
    3
    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
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 257
    Points
    34 257
    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 :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

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

    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
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

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

    Informations forums :
    Inscription : Novembre 2016
    Messages : 12
    Points : 3
    Points
    3
    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
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

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

    Informations forums :
    Inscription : Novembre 2016
    Messages : 12
    Points : 3
    Points
    3
    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.

  7. #7
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

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

    Informations forums :
    Inscription : Novembre 2016
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par dysorthographie Voir le message

    Tu avais l'intention d'utiliser le port imprimante sans le buffériser?
    Je n'ai aucune notion d’électronique ni comment le pc fonctionne- autodidacte en programmation et tout le reste
    J'ai eu le schéma pour le port parallèle sur internet et il n'y avait que des ILS de branchés sans protection ni résistance

    Je suis preneur de toutes ces infos ! Ça ne m'en sera que profitable !
    Aurais tu un schema de principe à me montrer ?

  8. #8
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 950
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 950
    Points : 9 279
    Points
    9 279
    Par défaut
    hello,
    C'est possible d'utiliser le port série pour tester un contact "sec" en se servant des broches CTS - RTS ( 7 et 8 ) :
    Nom : RS-232_full_serial_port.png
Affichages : 3382
Taille : 8,6 Ko

    Il suffit de relier les broches 7 et 8 , d'activer le RTS du port série utilisé et de scruter ensuite l' Etat du CTS. Si les broches 7 et 8 sont reliées le CTS est à vrai , sinon il est à faux.

    Pour tester ceci j'ai généré un assemblage dotnet à interface COM (pour pouvoir l'utiliser dans VBA dans Références) et voici ce que cela donne :
    Nom : Excel-JPSerial.png
Affichages : 2842
Taille : 26,5 Ko

    Le premier test est fait avec les broches 7 et 8 de mon port série COM26 non reliées. : Résultat faux.
    Le deuxième test est fait avec les broches 7 et 8 de mon port série COM26 reliées : Résultat vrai.
    Le troisième test est fait avec les broches 7 et 8 de mon port série COM26 non reliées. : Résultat faux.

    Attention tester un contact sec avec un port série relève de la "bidouille" car il n' y a pas de protection du port (attention aux court-circuits), pas d'isolation et il faut voir aussi la longueur du câble jusqu'au contact sec.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  9. #9
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

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

    Informations forums :
    Inscription : Novembre 2016
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Whaooo ! ça ça me plais !... net clair concis !

    par contre là je pèche un peu !
    Citation Envoyé par jurassic pork Voir le message

    Pour tester ceci j'ai généré un assemblage dotnet à interface COM (pour pouvoir l'utiliser dans VBA dans Références)

    Ami calmant, J.P
    est-ce une dll à telecharger? Où je peux trouver cette reference (vue qu'elle s'appelle JpSerial j'ai une vague idée ... ;-)?

    Pour tester le JpSerial je fais
    if JpSerial = true ...? c'est ça ?

    Pour ce qui est des faux contacts et court-circuits un bouton poussoir est il dangereux ? (pas de source de courant supplémentaire)

    Là ça fais avancer le schmilblick je te remercie

    J'ai hâte de tester cela à mon taf !

  10. #10
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 950
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 950
    Points : 9 279
    Points
    9 279
    Par défaut
    hello,
    bonne nouvelle il existe un module vba (modComm) qui permet de manipuler les liaisons série en utilisant les API windows, une sorte de "Wrapper".
    Voici comment l'utiliser :
    1 - Télécharger les sources qui se trouvent ici (Download Source Code)
    2 - Du fichier Commio.zip extraire le fichier Commio.bas.
    3 - Modifier le fichier Private Const MAX_PORTS = 4 par Private Const MAX_PORTS = 40 (cela permet seulement d'avoir plus de ports disponibles.
    4 - Dans l'explorateur de projets de l'éditeur VBA pointer sur son fichier excel, cliquer droit et choisir importer un fichier.
    5 - Choisir son fichier commio.bas modifié et cliquer sur Ouvrir.
    6 - Normalement un module nommé modComm apparaît.

    Et voici comment l'utiliser dans notre cas de figure du test du contact sec :

    1 - Créer un module (ou utiliser un module existant)
    2 - Déclaration de variables globales au début du module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public intPortID As Integer ' Ex. 1, 2, 3, 4 pour COM1 - COM4
    Public lngStatus As Long
    Public strError  As String
    Public LineStatus As Boolean
    Public TimerON As Boolean
    3 - La procédure qui initialise le port série et lance un timer qui va scruter la ligne CTS toutes les secondes :
    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
    Sub InitTest()
        ' Initialiser les communications
        intPortID = 26 ' port COM26
        lngStatus = CommOpen(intPortID, "\\.\COM" & CStr(intPortID), _
            "baud=9600 parity=N data=8 stop=1")
        If lngStatus <> 0 Then
            ' Erreur d'ouverture du port COM
            lngStatus = CommGetError(strError)
            MsgBox "COM Erreur: " & strError
            Exit Sub
        End If
        ' Mettre le RTS à 1
        lngStatus = CommSetLine(intPortID, LINE_RTS, True)
        TimerON = True
        'démarrage du Timer qui lit le CTS toutes les secondes
        Application.OnTime EarliestTime:=Now + TimeValue("00:00:01"), _
                       Procedure:="TestCTS", Schedule:=TimerON
    La procédure de test du CTS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Sub TestCTS()
       On Error Resume Next
       ' Tester le CTS
       If TimerON Then
       lngStatus = CommGetLine(intPortID, LINE_CTS, LineStatus)
       Debug.Print LineStatus
       Else
        Call CommClose(intPortID)
       End If
        'on réarme le timer ou pas
       Application.OnTime EarliestTime:=Now + TimeValue("00:00:01"), _
                       Procedure:="TestCTS", Schedule:=TimerON
    End Sub
    et la procédure d'arrêt du test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [Sub FinTest()
    'Arrêt du Timer
    TimerON = False
    End Sub
    Si on veut un intervalle de test inférieur à la seconde , il faut utiliser un Timer windows (par API) mais attention il y a risque de crash d'Excel si on manipule les cellules pendant l'exécution de ce timer.

    Pour ce qui est des faux contacts et court-circuits un bouton poussoir est il dangereux ? (pas de source de courant supplémentaire)
    Non pas de danger , il faut seulement ne pas injecter de tension sur les fils. Pour le câblage , le mieux (si le connecteur de la liaison série est un DB9 mâle) c'est d'utiliser un connecteur femelle DB9 à souder et de souder les deux fils qui partent vers le contact sur les broches 7 et 8 de ce connecteur. Pour l'anti rebond tu peux utiliser un artifice logiciel (regarder si l'état du CTS change sur deux tests consécutifs). Tout cela dépend aussi du genre d'ouverture fermeture de contact que tu testes. Si c'est fugitif cela ne fonctionnera pas et si le contact change d'état pendant moins d'une seconde le Timer à une seconde risque de rater le phénomène.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  11. #11
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

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

    Informations forums :
    Inscription : Novembre 2016
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    bonjour,

    Ca commence a prendre forme !
    Il y a plus de lignes que sur ton premier exemple

    par contre j'ai un petit pb avec l'ouverture du port

    Nom : pb_port_com.jpg
Affichages : 3377
Taille : 18,2 Ko

    ?
    De quoi cela peut il venir ?
    J'utilise le com1 (changé dans le code)
    J'ai essayé le : CommClose pour refermer le port com mais pas mieux !

    pour ce qui est du temps de rafraichissement la seconde me va tres bien
    C'est pour voir la présence d'une pièce qu'un opérateur pose durant au moins 5s


    Merci pour ton aide
    Stef

  12. #12
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 950
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 950
    Points : 9 279
    Points
    9 279
    Par défaut
    sans doute une autre application qui utilise le port COM. J'ai le même message que toi si je lance une autre application qui utilise mon port COM avant de lancer la macro.


    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  13. #13
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

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

    Informations forums :
    Inscription : Novembre 2016
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    sans doute une autre application qui utilise le port COM. J'ai le même message que toi si je lance une autre application qui utilise mon port COM avant de lancer la macro.


    Ami calmant, J.P

    comment savoir quelle appli utilise le port com ?
    aucune autre appli n'est en route ...
    comment faire pour forcer le port com pour mon programme et deconnecter l'autre

  14. #14
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 950
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 950
    Points : 9 279
    Points
    9 279
    Par défaut
    hello,
    pour voir quel logiciel utilise un port série, tu peux utiliser l'utilitaire Handle de Microsoft/sysinternals disponible ici

    Dans une invite de commande lancer :
    handle -a \device\serial pour voir qui utilise les ports séries "natifs"
    Pour des ports séries plus exotiques du genre USB vers Série tu peux essayer :
    handle -a \device\VCP
    c'est ce qui marche chez moi avec mon adaptateur USB série :
    F:\sysinternals>handle -a \device\vcp

    Nthandle v4.1 - Handle viewer
    Copyright (C) 1997-2016 Mark Russinovich
    Sysinternals - www.sysinternals.com

    EXCEL.EXE pid: 6952 type: File 720: \Device\VCP2

    F:\sysinternals>
    Sinon tu fais handle -a \device et tu cherches dans la liste ce qui pourrait être un port série.

    Pour le câblage de test du CTS ce qui est préconisé est ceci (seulement si tu as des soucis avec le premier schéma car dans celui-ci l'entrée CTS est "en l'air" quand le contact est ouvert) :

    Nom : DB9-SW-schema.png
Affichages : 2618
Taille : 2,9 Ko

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  15. #15
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    je n'avais pas pensé à utiliser le pin 7 de la db9, bien vue Jurassic pork!


    maintenant tu peux utiliser un entirebon logiciel, mais il faut un échantillonnage plus serré!

    il existe le Control timer de Microsoft, mais le paradoxe c'est qu'il net pas possible de l'utiliser dans les application Microsoft, mais il est possible de créer son propre timer en utilisant le timer de Microsoft! c'est une bizarrerie de la loi enti trust américaine!

    j'ai donc créé mon propre timer, c'est juste un passe plat, il utilise le timer te Microsoft mais ce n'est pas le timer de Microsoft, l'avantage et qu'il descente à la milliseconde!

    une fois qu'on a dit ça comment ça marche en pratique! si je considère que l'appuis sur S1 n'est pas instantané et nous somme face à de rebond potentiel de S1, nous allons lire 20 fois le port en en 40 milliseconde , si S1 change d'état je remets le compteur à zéro des que le compteur atteint 20 je génaire l'evenement traitement et je remet le compteur = zéro!

    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
    Private S1 As Boolean
    Private Sub antiFebond_Timer()
    Static compteur As Integer
    compteur = compteur + 1
    If S1 <> lecturePort Then mompteur = 0
    S1 = lecturePort
    If compteur = 20 Then mompteur = 0: traitement
    End Sub
    Private Sub traitement()
     
     
    End Sub
     
     
    Private Sub UserForm_Initialize()
    Me.antiFebond.Intervale = 2
    End Sub
    Control Timer
    Dernière modification par Invité ; 14/11/2016 à 16h03.

  16. #16
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

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

    Informations forums :
    Inscription : Novembre 2016
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    bonjour,

    Dès que je suis au travail je testerais avec le pc du boulot qui vas servir a l'application

    Pour la DB9 je vais utiliser une prise a câbler (petit bornier dessus sans soudure)

    je vais plancher sur le code demain

    Merci a vous deux

  17. #17
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

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

    Informations forums :
    Inscription : Novembre 2016
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Salut

    En fait pour ce message :

    Citation Envoyé par mehari2000 Voir le message
    bonjour,


    Nom : pb_port_com.jpg
Affichages : 3377
Taille : 18,2 Ko

    ?
    De quoi cela peut il venir ?
    Stef
    En fait ça fonctionne bien la première fois que je lance la macro (en mode débogage)
    En boucle no pb mais des que j'arrete le fonctionnement en boucle ça plante après !
    Je pense que la fermeture ne se fait pas bien ou JE ne le fais pas surtout
    j'ai fais un : Call CommClose(intPortID) avec intPortID= mon num de com
    Mais rien !... !?

    Cdt
    Stef (le boulet !)

  18. #18
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 950
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 950
    Points : 9 279
    Points
    9 279
    Par défaut
    hello,
    fais un point d'arrêt sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Else
        Call CommClose(intPortID)
       End If
    Tu arrêtes bien le timer en mettant la variable TimerON à faux ?
    Sinon :
    1 - Comment lances-tu et arrêtes-tu le test du contact ? Par un bouton qui lance une macro ? Par exécuter la macro ? Autrement ?
    2 - Tu as mis exactement le même code que moi ? sinon mets-nous le code que tu utilises.
    3 - Comment fais-tu ton :
    Call CommClose(intPortID) avec intPortID= mon num de com
    Par une macro ?
    Y-a-t-il un message d'erreur ?
    4 - Quand tu essais de relancer ta macro, mets un point d'arrêt au début de la routine du Timer pour voir si elle tourne toujours.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  19. #19
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    au même titre que Microsoft propose un Control timer , il propose également un Control Com. mais les même causes produisent les même effets, il n'est pas possible de l'utiliser dans vba!

    doc même solution! Contrôle com
    Contrôle TIMER


    je n'est que des ports USB pas testé!
    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
    Private Sub CheckBox1_Click()
    If Me.CheckBox1 = False Then
    Me.Label4 = Time
    Else
    Me.Label3 = Time
    End If
    End Sub
     
     
    Private Sub TimerRd1_Timer()
    Me.Label1 = Time
    Static compteur As Integer, S1 As Boolean, S2 As Boolean
    compteur = compteur + 1
    S1 = ComRd1.CommEvent = 1002
    If S1 <> S2 Then compteur = 0
    S2 = S1
    If compteur >= 20 Then compteur = 0: Me.CheckBox1 = S1
    Me.Label2 = compteur
    End Sub
    Private Sub UserForm_Initialize()
    ComRd1.PortOpen = True
    Me.TimerRd1.Intervale = 2
    End Sub
     
     
    Private Sub UserForm_Terminate()
    ComRd1.PortOpen = False
    End Sub
    Fichiers attachés Fichiers attachés

  20. #20
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

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

    Informations forums :
    Inscription : Novembre 2016
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Salut,

    Pour répondre aux questions

    jurassic pork
    Voici comment je lance la macro

    Nom : Capture.JPG
Affichages : 2707
Taille : 135,7 Ko

    Je lance en mode debogage la sub InitTest ()
    point d'arret sur : If lngStatus <> 0 Then , pour voir ma variable
    un autre sur : Application.OnTime EarliestTime:=Now + TimeValue("00:00:01"), dans la sub TestCTS()
    pour ne pas tourner en rond ... et prendre le temps de réfléchir ;.)

    j'ai ajouté un condition sur la case A1 pour mettre le TimerON à faux pour arrêter la macro

    Tout fonctionne bien quand j'appuis sur le bouton j'ai bien un changement sur mon LineStatus (voir fenetre execution)
    J'arrête le TimerOn en vidant la case A1, tout suit son cours même le Call CommClose(intPortID)
    Pas de message d'erreur !?

    Je relance la sub InitTest () et là => erreur(-1) Port in use ?
    Je relance la sub InitTest () et là => erreur(5) ... et là , c'est le drame !
    Je suis forcé de fermer ma session pour libérer le port com

    Je ne vais utiliser la lecture du CTS seulement à certains moments, je n'ai pas besoin de le lire en permanence
    Ai-je besoin de le refermer si je ne l'utilise pas ?

    dysorthographie
    Merci pour la "Fast" tempo
    mais je vais rester sur des secondes, Largement suffisantes pour mes besoins
    Le compteur tourne trop vite pour moi j'arrive pas a lire le Label2 !
    Néanmoins je garde ta tempo en tête pour d'autres applications
    De plus ça va me permettre de bosser un peu sur ces ActiveX

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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