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

VBA Discussion :

Probleme d'installation de ActiveX "Portcomm"


Sujet :

VBA

  1. #21
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    hello,
    il me semble que vous êtes parti sur un dialogue dit de "sourd" . En Effet dans le premier message de ABBAN270 on trouve :


    mais dans le tuto de grafikm il s'agit en fait de mscomm32.ocx et donc Thumb Down n'avait pas les bonnes informations.
    En ce qui concerne ton flow control ABBAN270 c'est un "XonXoff" que tu veux ou un contrôle matériel ?

    Ami calmant, J.P
    jai essayer plusieur fichier OCX
    j'attend le bon fichier de la part de Thumb Down
    pour le moment jai besoin de flow control (DSR/DTR)
    puisque vous maitriser les communications RS232

  2. #22
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 420
    Points : 2 179
    Points
    2 179
    Par défaut
    Bonjour,
    Je regarde pour créer un pacage d'installation !
    Si d'aventure tu as besoin d'autres contrôles dis le pour que je puisse les intégrer !

  3. #23
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    Bonjour,
    Je regarde pour créer un pacage d'installation !
    Si d'aventure tu as besoin d'autres contrôles dis le pour que je puisse les intégrer !
    Merci ...... pour le moment jai besoin seulement ce controle.
    Mais si le probleme insiste je v passe a une autre methode .
    Peut etre la methode de mr jurassic pork

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    hello,
    Citation Envoyé par ABBAN270 Voir le message
    jai essayer plusieur fichier OCX
    j'attend le bon fichier de la part de Thumb Down
    pour le moment jai besoin de flow control (DSR/DTR)
    puisque vous maitriser les communications RS232
    la gestion hardware du flux de contrôle de liaison série se fait plutôt par les signaux RTS/CTS ? Non ? En tout cas, moi ce que j'ai constaté en utilisant plusieurs logiciels de liaisons série (comme teraterm pro par exemple).
    En attendant la version 64 bits de l'activeX Mscomm32.ocx je te propose de tester le module de classe VBA CLRS232. Ce module créé par Brendan Lambe est basé sur le module modComm de David M. Hitchner. J'ai modifié le module de classe pour y intégrer deux nouvelles propriétés de contrôle de flux :
    XonXoff - (R/W) Default value = False
    HardFlow - (R/W) Default value = False
    Le module de classe CLRS232 est passé de la version 1.01 à la version 1.02.
    Voici un exemple d'utilisation. Dans le classeur ReceptionGPS_avec_Module_CLRS232.xlsm qui est en pièce jointe, sur la Feuille 1, il y a deux boutons. Le premier START permet d'initialiser le port série 8 (COM8) avec un contrôle de flux Hardware. On envoie un message à un GPS série connecté à la liaison série puis on se met en écoute dans une boucle de ce qui arrive sur le port série. Le GPS transmet des trames NMEA RMC toutes les 2 secondes. Dans la cellule A2 de la Feuille1, on affiche ce qui arrive sur la liaison série. Dans la cellule C2, on affiche l'état du port série (ouvert ou fermé). Avec le bouton STOP, on interrompt la boucle et on ferme le port série.
    Voici le code :
    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
    Option Explicit
    Dim blnStop    As Boolean
     
     
    Sub StartCom()
        Dim strRecBuf, strData As String
        Dim intPos As Integer
        Dim MonRS232 As New CLRS232
     
        With MonRS232
            .ComPort = 8
            .BaudRate = 9600
            .Parity = "N"
            .Databits = 8
            .StopBits = 1
            .XonXoff = False
            .HardFlow = True
            .PostCommDelay = 0.1
            .OpenComms
            Range("C2").Value = "Port ouvert"
            blnStop = False
            .WriteComm "Salut le GPS!" & vbCrLf
            strRecBuf = ""
            Do While blnStop = False
                .ReadComm
                If Len(.Data) > 0 Then
                    strRecBuf = strRecBuf + .Data
                    intPos = InStr(strRecBuf, vbCr)
                    If intPos > 0 Then
                        strData = Mid$(strRecBuf, 1, intPos - 1)
                        Range("A2").Value = strData
                        strRecBuf = vbNullString
                    End If
                End If
            Loop
        Range("C2").Value = "Port fermé"
        .CloseComms
        End With
     
    End Sub
     
     
    Sub StopCom()
        blnStop = True
        Debug.Print "Stoppé par Macro"
    End Sub

    et voici le résultat :

    Nom : vba_CLRS232_GPS.gif
Affichages : 227
Taille : 79,5 Ko

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

  5. #25
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    hello,
    Merci
    Je vous explique un peut sur ma communication.
    Mon appareil ne me donne aucune donnees si et seulement si :
    Jenvoie un character $ avec le flux DSR/DTR
    Je v essayer d'adapter le code a mes besoin

  6. #26
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 420
    Points : 2 179
    Points
    2 179
    Par défaut
    Bonjour,
    j’arrive à utiliser MSCOMM32.OCX dans une application VB6;
    j'arrive à faire un Pacage de publication {SetUp}
    j'arrive à installer le setUp et à visualiser MSCOMM32 dans Excel mais pas à le faire fonctionner!

    je vais tenter de créer un controls passe plat mais ça prend plus de temps!

  7. #27
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    Bonjour,
    j’arrive à utiliser MSCOMM32.OCX dans une application VB6;
    j'arrive à faire un Pacage de publication {SetUp}
    j'arrive à installer le setUp et à visualiser MSCOMM32 dans Excel mais pas à le faire fonctionner!

    je vais tenter de créer un controls passe plat mais ça prend plus de temps!
    mmmm.....
    combien de temps a peut pret ?

  8. #28
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut
    @ jurassic pork

    je n'ais pas besoin d'ajouter cette ligne a mon programme pour le mode DSR/DTR...?
    une autre remarque:
    la communication consomme beaucoup du CPU meme quand j'augmente le temps dans PostCommDelay

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    hello,
    Citation Envoyé par ABBAN270 Voir le message
    @ jurassic pork
    je n'ai pas besoin d'ajouter cette ligne à mon programme pour le mode DSR/DTR...?
    Non car dans la procédure OpenComms, il y a à la fin cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lngStatus = CommSetLine(clComport, LINE_DTR, True)
    qui met le DTR à True pendant toute la durée d'utilisation du port COM.

    Citation Envoyé par ABBAN270 Voir le message
    une autre remarque:
    la communication consomme beaucoup du CPU même quand j'augmente le temps dans PostCommDelay
    En effet, j'ai constaté cela aussi. C'est la procédure Delay qui pose problème avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Delay(T As Single)
     
        If T = 0 Then Exit Sub
     
        Dim TempSNG As Single
     
        TempSNG = Timer
        Do While Timer < TempSNG + T
            DoEvents    ' Yield to other processes.
        Loop
    End Sub

    La boucle infernale Do Loop tourne en permanence pendant toute la durée de la temporisation.
    En ajoutant un Sleep de 20 ms à l'intérieur de la boucle, on rend la main au système pendant 20 ms et il y a alors beaucoup moins de boucles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Delay(T As Single)
     
        If T = 0 Then Exit Sub
     
        Dim TempSNG As Single
     
        TempSNG = Timer
        Do While Timer < TempSNG + T
            Sleep (20)
            DoEvents    ' Yield to other processes.
        Loop
    End Sub
    Par exemple pour un .PostCommDelay de 0.1 il y aura au maximum 5 boucles alors qu'avant il y en avait énormément.
    Avec cette modification, le temps CPU excel est bien souvent proche de 0.
    J'ai créé une version 1.03 du module de classe CLRS232 avec cette modification. On retrouve cette nouvelle version dans le classeur excel ci-joint.
    Ami calmant, J.P
    Fichiers attachés Fichiers attachés
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  10. #30
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    hello
    merci pour la modification je test et je revient

  11. #31
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut
    @jurassic pork
    Jai integrer l'envoie de charactere $ dans la boucle
    Et ca marche parfaitement
    Sans consommation du CPU
    Merci beacoup pour la mise a jours
    REMARQUE:
    1. comment communiquer avec deux ports differents au meme temps ?
    2. Il ya une gestion des erreur dans le module
    Mais quand le port est occuper
    Le message d'erreur de "port occuper" ne saffiche pas
    3. Esque c'est possible de fermer une communication
    Qui est deja occuper, pour relancer la par ce module.
    Cest juste des améliorations supplementaire...

    Et pour le moment j'attendtai des nouvelles de la part de Thumb Down

  12. #32
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    hello,
    voila jai fait un code qui peut lire depuis COM1 et COM2
    il fonctionne normale
    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
    57
    58
    59
    60
    61
    Option Explicit
    Dim blnStop    As Boolean
     
    Sub StartCom()
     
        Dim strRecBuf, strData As String
        Dim intPos, ss, dd As Integer
        Dim MonRS1 As New CLRS232
        Dim MonRS2 As New CLRS232
     
            MonRS1.ComPort = 1
            MonRS1.BaudRate = 9600
            MonRS1.Parity = "N"
            MonRS1.Databits = 8
            MonRS1.StopBits = 1
            MonRS1.XonXoff = False
            MonRS1.HardFlow = False
            MonRS1.PostCommDelay = 0.2
            MonRS1.OpenComms
     
            MonRS2.ComPort = 2
            MonRS2.BaudRate = 9600
            MonRS2.Parity = "N"
            MonRS2.Databits = 8
            MonRS2.StopBits = 1
            MonRS2.XonXoff = False
            MonRS2.HardFlow = False
            MonRS2.PostCommDelay = 0.2
            MonRS2.OpenComms
     
            blnStop = False
            Do While blnStop = False
     
                MonRS1.ReadComm
                If Len(MonRS1.Data) > 0 Then
                    strRecBuf = strRecBuf + MonRS1.Data
                    intPos = InStr(strRecBuf, vbCr)
                    If intPos > 0 Then
                        strData = Mid$(strRecBuf, 1, intPos - 1)
                        Range("A1").Value = strData
                        strRecBuf = vbNullString
                    End If
                End If
     
                MonRS2.ReadComm
                If Len(MonRS2.Data) > 0 Then
                    strRecBuf = strRecBuf + MonRS2.Data
                    intPos = InStr(strRecBuf, vbCr)
                    If intPos > 0 Then
                        strData = Mid$(strRecBuf, 1, intPos - 1)
                        Range("A2").Value = strData
                        strRecBuf = vbNullString
                    End If
                End If
     
             Loop
     
       MonRS1.CloseComms
       MonRS2.CloseComms
     
    End Sub
    mais s'il ya d'autres façon plus simple pour la faire je suis a l'ecoute
    merci pour vous @jurassic pork & @Thumb Down
    et jattendrai vos réponses

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    hello,
    Citation Envoyé par ABBAN270 Voir le message
    2. Il ya une gestion des erreur dans le module
    Mais quand le port est occuper
    Le message d'erreur de "port occuper" ne saffiche pas
    3. Esque c'est possible de fermer une communication
    Qui est deja occuper, pour relancer la par ce module.
    Cest juste des améliorations supplementaire...
    J'ai revu la gestion des erreurs dans le module CLRS232 et voici maintenant comme cela fonctionne :
    Si le port est occupé un message est affiché demandant si l'on veut fermer le port et le ré-ouvrir.
    Si il y a un autre type d'erreur un message s'affiche et le port est fermé.
    La nouvelle version ( V1.04) du module de classe CLRS232 est dans le classeur en pièce jointe


    Pour pouvoir fermer le port quand on est pas dans la boucle il faut mettre la variable de classe en globale comme ceci par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Explicit
    Dim blnStop    As Boolean
    Dim MonRS232 As New CLRS232
     
     
    Sub StartCom()
        Dim strRecBuf, strData As String
        Dim intPos As Integer
     
        With MonRS232
    ...
    et alors on peut fermer le port à tout moment avec un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub ResetCom()
     MonRS232.ComPort = 8
     MonRS232.CloseComms
     Range("C2").Value = "Port fermé"
    End Sub
    Si c'est une autre application qui a ouvert ce port, cela n'est pas possible de fermer le port.


    Le souci avec ta gestion des deux ports série c'est que tu utilises les même variables strRecBuf, strData, intPos pour les deux ports.
    Cela risque fortement de s'emmêler les pinceaux si les données série n'arrive pas en une seule fois. Si les données renvoyées ne sont pas importantes il y a peu de chance que
    cela arrive. Combien d'octets sont envoyés par le périphérique à chaque trame ?
    Par sécurité il faut des variables différentes pour les deux ports série.


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

  14. #34
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut
    ahhhh bon c'est bien
    et pour le forçage de fermeture du port
    c'est pas grave
    je v utiliser des commandes exterieurs
    merci pour l'aide et les conseils
    merci Mr.jurassic pork
    merci Mr.Thumb Down
    mission accomplie

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Probleme guillemet se transforme en &quot
    Par lg022 dans le forum ASP.NET
    Réponses: 5
    Dernier message: 02/02/2009, 11h59
  2. [CKEditor] probleme d'image; ajout de quot lors d'insertion d'image
    Par dedel53 dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 28/10/2007, 00h05
  3. Probleme avec encodage de simple quote
    Par linkowich dans le forum Langage
    Réponses: 2
    Dernier message: 31/10/2005, 13h16

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