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

WinDev Discussion :

communication RS232 avec une carte relais 8 canaux


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Homme Profil pro
    On a pas fini d'apprendre
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : On a pas fini d'apprendre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 12
    Points
    12
    Par défaut communication RS232 avec une carte relais 8 canaux
    Bonjour, je me suis permis de lancer cette discussion dans l'espoir de trouver de l'aide:
    je souhaite communiquer avec une carte relais 8 canaux en communication rs232 voici le lien de la spec de la carte:
    http://www.produktinfo.conrad.com/da...e_en_fr_nl.pdf

    j'ai réussi à ouvrir le port com mais je n'arrive pas à trouver les bonnes trams pour passer les commandes, je pense que je me trompe dans la façon comment construire la tram de chaque commande.
    Pour ceux qui comprennent le VB6 voici un lien d'un exemple qui utilise toutes les commandes pour cette carte mais malheureusement pour moi j'ai rien compris vu que je ne connais pas le langage VB.
    http://www.produktinfo.conrad.com/da..._24V7A_4_0.zip

    merci d'avance pour votre aide

  2. #2
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 289
    Points : 9 375
    Points
    9 375
    Par défaut
    Tu peux importer un projet VB dans Windev (projet VB6). Certes, tout sera à reprendre mais un minimum de choses seront traduites.

    Je ne pourrai pas t'aider car le projet est en allemand et l'allemand... surtout technique n'est pas mon fort...

    Le principe est de déclarer/utiliser la dll pour dialoguer avec la carte.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  3. #3
    Membre émérite
    Avatar de L.nico
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 143
    Points : 2 679
    Points
    2 679
    Par défaut
    Bonjour,

    as-tu fais une recherche sur le forum Windev (RS232)?
    On trouve déjà pas mal de choses sur le sujet. (Je viens d'en faire une)
    Il faut peut-être commencer par ça

    Le forum DVP est une vraie mine d'or
    A lire avant de poster
    Si vous avez obtenu la réponse à votre question alors cliquez sur le bouton

  4. #4
    Membre à l'essai
    Homme Profil pro
    On a pas fini d'apprendre
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : On a pas fini d'apprendre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par frenchsting Voir le message
    Tu peux importer un projet VB dans Windev (projet VB6). Certes, tout sera à reprendre mais un minimum de choses seront traduites.

    Je ne pourrai pas t'aider car le projet est en allemand et l'allemand... surtout technique n'est pas mon fort...

    Le principe est de déclarer/utiliser la dll pour dialoguer avec la carte.
    Merci pour ta réponse mais le document PDF dont j'ai mis son lien URL est en multi langue ( à partir de la page 50 c'est en français).

    Voici un extrait:
    "
    • Transmission sérielle des données

    Les données sont transmises conformément au standard RS232 à 19200 bauds, sans signal handshake, à 8 bits de données, sans bit de parité et avec un bit d´arrêt. Les instructions sont générées par l´ordinateur de commande supérieur (par ex. un ordinateur).
    Le contrôleur de carte relais répond à toutes les instructions effectuées. Le cas échéant, elles sont aussi transmises.
    Toutes les cartes relais sont contactées par l´intermédiaire d´une adresse. La première carte reçoit son adresse par l´instruction « 1 » (initialisation setup). L´adresse passe à l´unité supérieure pour toutes les autres cartes suivantes.
    Chaque instruction et chaque réponse sont composées d´une séquence de 4 octets que nous
    appellerons ci-après « cadre ».
    • Structure du cadre

    Octet 0 instruction
    Octet 1 adresse de la carte
    Octet 2 données
    Octet 3 somme de contrôle (XOR d´octet 0, d´octet 1 et d´octet 2)"

    Sous windev j'ai ouvert le port COM comme suite:
    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
    LigneCom  = sOuvre(gnNuméroDePortCom, 2000, 2000) // Ouverture de COM
    SI LigneCom  = Vrai ALORS
    // Paramétrage Com1 : Taux 119200, Parité pas, 8 bits de données, 1 bit de stop
    	sFixeParamètre(gnNuméroDePortCom,19200 ,0,8,0)
     
    SINON
    DélaiAvantFermeture(100)
    Erreur("Erreur d'ouverture de port COM")
    FIN
    Multitâche(-100)
     
    //Initialisation de la carte: Octet 0 = 1, Octet 1 = 0, octet 2 = 0 et octet 3 = octet0 XOR octet1 XOR octet2 = 1
    sEcrit(gnNuméroDePortCom,"1"+"0"+"0"+"1")
    BOUCLE
    	SI sDansFileSortie(gnNuméroDePortCom) = 0 ALORS SORTIR
    FIN
    Multitâche(-2)
    Mess est une chaîne
    Mess =sLit(gnNuméroDePortCom,20000)
     
    Trace(Mess)
     
    Multitâche(-300)
    //Octet 0 = 3, Octet1 = 0, Octet2 = 255 et octet3 =253 ( commande pour switcher en état "ON" touts les relais de toutes les cartes
    sEcrit(gnNuméroDePortCom,"3" + "0" + "255" + "252")
    BOUCLE
    	SI sDansFileSortie(gnNuméroDePortCom) = 0 ALORS SORTIR
    FIN
    Multitâche(-2)
    Mess2 est une chaîne
    Mess2 =sLit(gnNuméroDePortCom,20000)
    Trace(Mess)
    Pour la première commande je reçois la réponse 1001 et pour la deuxième commande je reçois la réponse bizarre ÿ2Ìÿ&Øÿ2Ì


  5. #5
    Membre à l'essai
    Homme Profil pro
    On a pas fini d'apprendre
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : On a pas fini d'apprendre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par L.nico Voir le message
    Bonjour,

    as-tu fais une recherche sur le forum Windev (RS232)?
    On trouve déjà pas mal de choses sur le sujet. (Je viens d'en faire une)
    Il faut peut-être commencer par ça

    Le forum DVP est une vraie mine d'or
    Merci beaucoup pour ta réponse mais le problème c'est que ce n'est pas la première fois que j'utilise la communication RS232 avec windev mais j'avoue cette fois-ci j'si eu pas mal de soucis pour connaitre les bonnes trams à envoyer ( la doc de la carte n'est pas très claire). alors j'ai ouvert le projet VB6 sous visual studio 2010 fournit avec cette carte histoire de reprendre les bonnes tram à envoyer mais j'ai rien compris.
    par exemple le code VB6 pour envoyer la tram (sous windev)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sEcrit(gnNuméroDePortCom,"3" + "0" + "255" + "252")
    est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub BC_ON_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BC_ON.Click
            Address_Byte = 0                        ' Address 0 = Broadcast
            Command_Byte = 3                        ' Set-Ports
            Data_byte = 255                         ' Rel. 1-8 on
            Send_cmd(Address_Byte, Command_Byte, Data_byte)
        End Sub
    La fonction Send_cmd:
    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    Public Function Send_cmd(ByVal Address_Byte, ByVal Command_Byte, ByVal Data_byte) As Byte
            Dim Send_buffer(0 To 3), In_buffer(0 To 1028) As Byte
            Dim BINARYSTRING As String
     
            On Error GoTo errorhandler
     
            Watchdog_T.Stop()
            All_off.Enabled = False                         ' Disable buttons
            All_on.Enabled = False
            BC_ON.Enabled = False
            BC_OFF.Enabled = False
            Get_Port.Enabled = False
            Set_port.Enabled = False
            Set_single.Enabled = False
            Toggle.Enabled = False
            Del_single.Enabled = False
            Exit_All_Off.Enabled = False
            Windows.Forms.Cursor.Current = Windows.Forms.Cursors.WaitCursor
     
            If Watchdog.Checked = True Then
                Watchdog.Enabled = False
                Watchdog_T.Stop()
            End If
     
            State_List.Items.Clear()                        ' Get state of relay cards for List-Box
     
            If SerialPort1.IsOpen = False Then
                MsgBox("No Com-Port selcted", MsgBoxStyle.Exclamation)
                GoTo _End
            End If
     
            Send_buffer(0) = Command_Byte                   'Create command-frame 
            Send_buffer(1) = Address_Byte
            Send_buffer(2) = Data_byte
            Send_buffer(3) = Command_Byte Xor Address_Byte Xor Data_byte 'Calculate "checksum"
     
            TextBox.Text = ("CMD: " & Command_Byte.ToString & ",  Adr: " & Address_Byte.ToString & ",  Data_byte: " & Data_byte.ToString & ",  CRC: " & Send_buffer(3).ToString)
            SerialPort1.Write(Send_buffer, 0, 4)
     
            sleep(Card_count * 8 + 10)                      ' delay for executing command & feedback (according to number of connected cards)
            SerialPort1.DiscardOutBuffer()
            SerialPort1.DiscardInBuffer()
     
    GetSchaltzustände:
            Send_buffer(0) = 2                               ' Get Ports
            Send_buffer(1) = 0                               ' Broadcast
            Send_buffer(2) = 0
            Send_buffer(3) = Send_buffer(0) Xor Send_buffer(1) Xor Send_buffer(2)
     
            SerialPort1.Write(Send_buffer, 0, 4)
     
            sleep(Card_count * 8 + 10)                      ' delay for executing command & feedback (according to number of connected cards)
            SerialPort1.DiscardOutBuffer()
     
            For x As Byte = 0 To Card_count - 1
                SerialPort1.Read(In_buffer, 0, 4)
                Relay_state_backup(x) = In_buffer(2)
                BINARYSTRING = Convert.ToString(In_buffer(2), 2)
                BINARYSTRING = BINARYSTRING.PadLeft(8, "0"c) ' convert to binary
                State_List.Items.Add((x + 1).ToString & ": " & vbTab & "dec.: " & In_buffer(2).ToString & vbTab & vbTab & "Bin.:" & BINARYSTRING)
            Next
     
            All_off.Enabled = True                          ' Enable buttons
            All_on.Enabled = True
            BC_ON.Enabled = True
            BC_OFF.Enabled = True
            Get_Port.Enabled = True
            Set_port.Enabled = True
            Set_single.Enabled = True
            Toggle.Enabled = True
            Del_single.Enabled = True
            Exit_All_Off.Enabled = True
            Windows.Forms.Cursor.Current = Windows.Forms.Cursors.Default
     
            If Watchdog.Checked = True Then
                Watchdog.Enabled = True
                Watchdog_T.Start()
            End If
     
            GoTo _End
    errorhandler:
            MsgBox("Error executing command!", MsgBoxStyle.Exclamation)
    _End:
     
        End Function

  6. #6
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 289
    Points : 9 375
    Points
    9 375
    Par défaut
    Citation Envoyé par soufasoufa33 Voir le message
    Merci pour ta réponse mais le document PDF dont j'ai mis son lien URL est en multi langue ( à partir de la page 50 c'est en français).
    Désolé, je n'avais regarddé que le code du projet VB6.

    Fais une recherche sur le forum comme on te l'a indiqué, cela te donnera des pistes.

    Essaye également de regarder le form1.frm de vb6, il semble que tu puisses trouver des infos intéressantes à partir de la ligne 514.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  7. #7
    Membre éprouvé Avatar de miripesage
    Homme Profil pro
    gerant
    Inscrit en
    Novembre 2009
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : gerant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 725
    Points : 1 156
    Points
    1 156
    Par défaut
    Bonjour, essaye plutot la chaine "Caract()" :

    Citation Envoyé par soufasoufa33 Voir le message
    Sous windev j'ai ouvert le port COM comme suite:
    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
    LigneCom  = sOuvre(gnNuméroDePortCom, 2000, 2000) // Ouverture de COM
    SI LigneCom  = Vrai ALORS
    // Paramétrage Com1 : Taux 119200, Parité pas, 8 bits de données, 1 bit de stop
    	sFixeParamètre(gnNuméroDePortCom,19200 ,0,8,0)
     
    SINON
    DélaiAvantFermeture(100)
    Erreur("Erreur d'ouverture de port COM")
    FIN
    Multitâche(-100)
    
    //Initialisation de la carte: Octet 0 = 1, Octet 1 = 0, octet 2 = 0 et octet 3 = octet0 XOR octet1 XOR octet2 = 1
    sEcrit(gnNuméroDePortCom,"1" + "0" + "0" + "1")
    
    BOUCLE
    	SI sDansFileSortie(gnNuméroDePortCom) = 0 ALORS SORTIR
    FIN
    Multitâche(-2)
    Mess est une chaîne
    Mess =sLit(gnNuméroDePortCom,20000)
    
    Trace(Mess)
    
    Multitâche(-300)
    //Octet 0 = 3, Octet1 = 0, Octet2 = 255 et octet3 =253 ( commande pour switcher en état "ON" touts les relais de toutes les cartes
    buf est buffer = Caract(3) + Caract(0) + Caract(255) + Caract(252)
    sEcrit(gnNuméroDePortCom, buf)BOUCLE
    	SI sDansFileSortie(gnNuméroDePortCom) = 0 ALORS SORTIR
    FIN
    Multitâche(-2)
    Mess2 est une chaîne
    Mess2 =sLit(gnNuméroDePortCom,20000)
    Trace(Mess)
    Pour la première commande je reçois la réponse 1001 et pour la deuxième commande je reçois la réponse bizarre ÿ2Ìÿ&Øÿ2Ì

    [/COLOR]
    Au travail, le plus difficile, c'est d'allumer la petite lampe du cerveau. Après, ça brûle tout seul!

  8. #8
    Membre à l'essai
    Homme Profil pro
    On a pas fini d'apprendre
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : On a pas fini d'apprendre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par miripesage Voir le message
    Bonjour, essaye plutot la chaine "Caract()" :
    Effectivement tu as raison miripesage merci beaucoup pour ton idée,
    il suffit finalement d'envoyer le code ASCII des caractères pour que ca marche sEcrit(gnNuméroDePortCom,Caract(0x01)+Caract(0x00)+Caract(0x00)+Caract(0x01))
    au lieu de
    sEcrit(gnNuméroDePortCom,"1"+"0"+"0"+"1")
    or dans la doc ils ne disent rien sur la forme ou si le microcotroleur fait la conversion chaine de caractère code ASCII.
    Bon voilà problème résolu.
    merci à tous

  9. #9
    Membre éprouvé Avatar de miripesage
    Homme Profil pro
    gerant
    Inscrit en
    Novembre 2009
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : gerant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 725
    Points : 1 156
    Points
    1 156
    Par défaut
    alors n'oublie pas
    Au travail, le plus difficile, c'est d'allumer la petite lampe du cerveau. Après, ça brûle tout seul!

  10. #10
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par soufasoufa33 Voir le message
    Pour la première commande je reçois la réponse 1001 et pour la deuxième commande je reçois la réponse bizarre ÿ2Ìÿ&Øÿ2Ì

    [/COLOR]

    Pour la reponse bizarre essayer BufferVersHexa()
    est apre hexa ver entier

    exemple resultat hexa
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    hexa =Gauche(Majuscule(BufferVersHexa(sLit(NumCom,sDansFileEntrée(NumCom)))),nbcarecter)
    function HEXA vert entier

    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
     
    Vald =0
    SI HEXA<>"" ALORS
    	POUR i=Taille(HEXA) A 1 PAS -1
    		SELON HEXA[[Taille(HEXA)+1-i]]
    			CAS "A": ValD=10*Puissance(16,i-1)+ValD
    			CAS "B": ValD=11*Puissance(16,i-1)+ValD
    			CAS "C": ValD=12*Puissance(16,i-1)+ValD
    			CAS "D": ValD=13*Puissance(16,i-1)+ValD
    			CAS "E": ValD=14*Puissance(16,i-1)+ValD
    			CAS "F": ValD=15*Puissance(16,i-1)+ValD
    			AUTRES CAS: ValD=Val(HEXA[[Taille(HEXA)+1-i]])*Puissance(16,i-1)+ValD
    		FIN
    	FIN
    FIN

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/08/2014, 18h48
  2. Communication avec une carte RFID
    Par samybelarbi dans le forum Général Java
    Réponses: 1
    Dernier message: 28/05/2014, 11h46
  3. Communication avec une carte PCI
    Par faridaetudiante dans le forum Assembleur
    Réponses: 4
    Dernier message: 02/06/2010, 21h59
  4. Communication RS232 avec un PIC via delphi
    Par JeanPh dans le forum API, COM et SDKs
    Réponses: 22
    Dernier message: 09/08/2004, 22h56

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