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 :

Télé capture stockage + alimentation d'une base de données


Sujet :

VB 6 et antérieur

  1. #1
    Membre régulier Avatar de mat-tech
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 202
    Points : 124
    Points
    124
    Par défaut Télé capture stockage + alimentation d'une base de données
    Bonjour le forum,
    Je m'adresse à vous programmeur et électronicien, car j'aimerai réaliser un projet de télé capture de compteur.
    Pour commencer j'ai 5 compteurs pour lesquels j'aimerai capter l'impulsion (un contact sec), capter cette impulsion par le biais du port //, et grâce un programme fonctionnant en permanence alimenter une base de données Accès avec le numéro du compteur, la date et l'heure de l'impulsion.
    Et la base de données, me permettre par la suite de réaliser des graphiques précis de consommation.

    Pour résumer, j'aimerai réaliser (grâce à votre aide), l'interface, et le programme, je sais que parmi vous il y a des grands spécialistes en la matière …

    PS (pour les modérateurs), j'ai fait le même post sur le forum Delphi, car j'ai aussi une licence Delphi, et comme je démarre de 0 ...

  2. #2
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    bonjour, il va falloir diviser ton projet...

    pour commencer l'acquisition voir :

    http://www.developpez.net/forums/d25...ort-parallele/


  3. #3
    Membre régulier Avatar de mat-tech
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 202
    Points : 124
    Points
    124
    Par défaut
    Bonjour le forum,
    j'ai plus de détail en se qui concerne la liaison, le matériel, et le type de trame qui vont transiter.

    Le type est RS485 => pour se faire je dois juste connecter un convertisseur RS232/RS485 (c'est fait ), car les appareils(Compteur Diris A40), communiquent en RTU, en hexadécimale codé sur 8 bits

    Après configuration de la vitesse, des adresses(des compteurs), ext ...

    Je dois leur envoyer des trames, elles se composent de :
    Adresse de l’esclave, Code de la fonction, Adresse, Données, CRC 16.
    ex : Pour que le Diris n°5 nous renvoie la valeur, de l'énergie total consommée soit 177645 Kwh
    on doit lui envoyer : "0503072B0002B4F3"
    et il répond : "050304IDDD116FD6"
    (en fichier joint vous pouvez voir l'explication des trames" )

    Grace a Mr bbil, J'ai lu et j'ai compris comment envoyer une trame et attendre la réponse donc jusque la pas de soucis

    Comment faire pour découpé la chaine de caractère reçu afin de réccuperer juste IDDD11 car dans cette chaine 11 en hexa donne 17 (multiplié par 1000)et IDDD donne 7645 (multiplié par 1)
    et l'addition donne 177645 et Kwh car c'est la fonction 3 ligne 7.



    Merci pour votre aide

  4. #4
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    Bonjour..

    donc il s'agit de Modbus..

    pour "travailler" ta chaine de caractére tu as la fonction Mid

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim stRecue As String
    Dim iNumEsc As Integer
    Dim iFct As Integer
    Dim iNbOctet As Integer
    stRecue = "050304IDDD116FD6"
     iNumEsc = Mid(stRecue, 1, 2)
     iFct = Mid(stRecue, 3, 2)
    ...
    mais bon tu as du mal noter la chaine de retour .. le I n'as rien à faire la .. cela doit être un 1..

    Il manque aussi ta pièce jointe .... pour valider ta trame il faudrai aussi faire le calcul du CRC...

  5. #5
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Tu parles de port parallèle dans ton premier post puis de RS232 dans ton second (donc de la communication série), mais si tu dis que tout baigne de ce côté là tant mieux.
    Le découpage de la chaine me semble plus simple à faire, si vraiment la chaine est de longueur fixe et que tu dois prendre les caractères 11 à 12 et les caractères 7 à 10, imaginons que ta chaine est stockée dans une variable appelée Ch, il suffit de faire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Ch = "0503041DDD116FD6"
    var10mille = "&h" & Mid(Ch, 11, 2)
    varunite = "&h" & Mid(Ch, 7, 4)
    VarTotal = Val(var10mille * 10000) + Val(varunite)
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  6. #6
    Membre régulier Avatar de mat-tech
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 202
    Points : 124
    Points
    124
    Par défaut
    Merci pour vos réponses
    le I n'as rien à faire la .. cela doit être un 1
    Pourtant c'est bien un I, (en page 15 on explique)

    Tu parles de port parallèle dans ton premier post puis de RS232
    Autant pour moi, mais je ne savais pas du tout le type de communication j'allais utiliser, mais mon chois c'est porté sur ce fameux "Diris A40", car il est très complet.
    pour valider ta trame il faudrait aussi faire le calcul du CRC...
    Comment fait on pour calculer

    Désolé pour la pièce jointe, je croyai l'avoir ajoutée mais elle a une taille trop importante mais je peux voul'envoyer en MP

  7. #7
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par mat-tech Voir le message
    Merci pour vos réponses

    Pourtant c'est bien un I, (en page 15 on explique)
    il n'y as pas de i en Hexa.. c'est un 1 utilise la calculatrice de windows pour transformer 49217 en Hexa et tu verra...

  8. #8
    Membre régulier Avatar de mat-tech
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 202
    Points : 124
    Points
    124
    Par défaut
    J'ai ajouté la notice communication du Diris ici

    il n'y as pas de i en Hexa..
    c'est tout à fait vrai, c'est sans doute une erreur dans leur notice

    Merci de votre aide

  9. #9
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    Tiens un code pour verifier le CRC d'une trame Modbus :


    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
    '
    ' Contrôle de CRC16 pour trame ModBus
    '
    Function VerifCRC16(stTrame As String)
     Dim i As Integer
     Dim cRc As Long
     Dim b As Byte
     Dim stCRC As String
      cRc = 65535
     stTrame = Replace(stTrame, " ", "")
     For i = 1 To (Len(stTrame) - 4) Step 2
       b = Val("&h" & Mid(stTrame, i, 2))
       cRc = cRc Xor b
       For j = 0 To 7
     
         If ((cRc And 1) = 1) Then
              cRc = (cRc \ 2) Xor CLng("&HA001") 'Si Retenue.. XOR avec 40961
          Else
             cRc = (cRc \ 2)  ' Décalage d'un bit vers la droite
          End If
        Next j
       Next i
       stCRC = Right("0000" & Hex(cRc), 4)
       'Swap..
       stCRC = Right(stCRC, 2) & Left(stCRC, 2)
       Debug.Print "CRC Trouvé : " & stCRC
       VerifCRC16 = Right(stTrame, 4) = stCRC
     
     End Function
    Sub Test()
       If VerifCRC16("0503072B0002B4F3") Then MsgBox "Trame OK"
    End Sub
    pour ta trame de réponse , il doit y avoir d'autre erreur dans la doc Diris.. normalement dans le troisième octet, d'une trame de réponse sur lecture mot (03) l'on trouve le nombre d'octet de donnée , dans la trame donnée en exemple il y as 04 .. il manque donc un Octet de donnée : ici 1D DD 11 ..?

  10. #10
    Membre régulier Avatar de mat-tech
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 202
    Points : 124
    Points
    124
    Par défaut
    Bonjour,
    En relisant la notice, si je comprends bien, en fait ils veulent donner comme réponse 177645 et pour se faire le Diris envoie
    "0503041DDD116FD6"
    05 adresse du Diris
    03 n° de la fonction
    04 nombre d'octets ("Je ne comprend pas !")
    1DDD (et pas IDDD) ça c'est mot1 < 10000 soit en décimal 7645
    11 ça c'est mot2 > 10000 soit en décimal 17 ("Je ne comprends pas pourquoi tu dis qu'il n'y a pas assez de bits, vu que jusque la on est a = 12 octets")
    6FD6 le CRC ("franchement ta Procédure VerifCRC16 est terrible")

    Pour ma part, je vais prendre contact avec un représentant, spécialiste en communication des Diris afin de lui poser quelques questionS.

    PS Si par grand hasard, vous trouver un projet similaire, je vous en remercie car je n'ai pas beaucoup de temps pour le réaliser, et je suis encor loin du but à atteindre qui est : créer un programme qui communique avec les Diris, envoyer et recevoir des trames Modbus, traiter les trames reçues, stoker dans une base de données (les valeurs avec la date), en local afin de pouvoir réaliser des graphiques de consommation.

    En tout cas, merci beaucoup de votre aide

  11. #11
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    04 nombre d'octets ("Je ne comprend pas !")
    4 octets de donnée ... et dans leur trame il y en as que 3

    1D DD 11

    puisque les 2 derniers octets sont censés être le CRC
    : 6FD6

  12. #12
    Membre régulier Avatar de mat-tech
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 202
    Points : 124
    Points
    124
    Par défaut
    Logiquement ca devrait être "1D DD 00 11" et pas "1D DD 11" si je comprend bien ?

  13. #13
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par mat-tech Voir le message
    Logiquement ca devrait être "1D DD 00 11" et pas "1D DD 11" si je comprend bien ?
    oui ... mais même en rajoutant ces 00 le CRC ne semble pas être bon

  14. #14
    Membre régulier Avatar de mat-tech
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 202
    Points : 124
    Points
    124
    Par défaut
    c'est exacte, le CRC de la réponse devrait donnait "4C24" à condition que le pteit programme que j'ai trouvé sur le net fonctionne, je vais essayer avec ton programme pour voir, si tu veux tu peux le télécharger ICI.

    Une petite question dans la notice, ils veulent dire quoi par bits poids fort et bis poids faible ? Page de 15 de la Notice Diris

  15. #15
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    Je trouve bien :
    CRC Trouvé : 4C24
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       If VerifCRC16("0503041DDD11B4F3") Then MsgBox "Trame OK"
    mais comme je te l'ai dis précédament cette trame n'est pas bonne le 2° mot lue doit être sur 2 octets ( 4 lettres..)

    d'ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       If VerifCRC16("0503041DDD0011B4F3") Then MsgBox "Trame OK"
    qui donne
    CRC Trouvé : E9A9
    je ne vois pas tes "bits forts" et "bits faible".. c'est plutôt des Byte (ou octet) ..

    par exemple l'adresse de lecture :
    Adresse
    poids fort
    07

    Adresse
    poids faible
    2B

    est donc effectué à l'adresse : 072B .. voir ensuite documentation Diris page 13 et 14
    72B : Energie active + < 10000 kWh
    72C : Energie active + > 10000


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

Discussions similaires

  1. alimentation d'une base de données à partir de fichiers textes
    Par hb2ee dans le forum Persistance des données
    Réponses: 9
    Dernier message: 26/03/2009, 13h51
  2. Télé capture stockage + alimentation d'une base de données
    Par mat-tech dans le forum API, COM et SDKs
    Réponses: 0
    Dernier message: 30/08/2008, 14h52
  3. Formulaire alimenté par une base de données
    Par claire13 dans le forum Langage
    Réponses: 5
    Dernier message: 25/10/2007, 10h31
  4. [AJAX] lier deux listes déroulantes alimenté par une base de données (Mysql)
    Par arnaudperfect dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/04/2007, 01h06
  5. Réponses: 1
    Dernier message: 20/03/2007, 09h24

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