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 MODBUS, acquisition paramètre automatate, comment faire avec Windev ?


Sujet :

WinDev

  1. #1
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut Communication MODBUS, acquisition paramètre automatate, comment faire avec Windev ?
    Bonsoir à tous,

    en marge de mon développement d'erp, les gars de la maintenance me sollicitent pour concevoir une appli qui va lire des "mots" (des variables) mises à disposition par un automate programmable qui pilote différents paramètres relatifs à des bains de galvanoplastie (ampérage, température, durée de l'électrolyse, etc...)

    L'objectif dans un premier temps est de faire l'acquisition de ces paramètres (pour l'instant un seul bain, mais une vingtaine à terme), de les stocker dans un BD, et de faire du monitoring presque "temps réel"
    Dans un second temps, on fera le chemin inverse, c'est à dire qu'on voudra commander directement les paramètres des bains depuis une appli de supervision générale qui enverra des consignes de paramétrage aux automates de pilotage des bains.

    Revenons au premier point, l'acquisition d'un paramètre. La contrainte technique est que l'automate communique un paramètre (le mot d'adresse 5000) sur l'adresse IP 192.168.1.X, port 502, protocole MODBUS (TCP)

    Hors je ne sais absolument pas comment m'y prendre pour faire un client qui va demander les infos à l'automate, qui se comporte un peu comme un serveur dans cette histoire, qui plus est en MODBUS, qui semble être une variante de TCP.

    Pouvez-vous me donner quelques clés pour m'aider à démarrer mon programme ?

    Merci à tous
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 178
    Points : 416
    Points
    416
    Par défaut
    Bonjour,

    Vous trouverez une grosse "clé" sur le site de dépôt : "Communication modbus TCP/IP"

    Je ne me souviens plus à quel point c'est fonctionnel en l'état, mais dans mes souvenirs toutes les bases était là pour se connecter,lire et écrire les mots.

  3. #3
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Bonjour,

    oui j'étais rapidement tombé sur cette contribution mais en étudiant les fonctions, je ne vois pas à quoi correspondent les arguments Debut_registre et nb_mots, par rapport à mon cas personnel...

    Ma socket est bien connectée à l'adresse IP + port, il faut maintenant que je lise le mot 5000

    Je nage
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 178
    Points : 416
    Points
    416
    Par défaut
    Bonjour,

    Je vous inviterais donc à relire la documentation modbus (une version courte), mais pour simplifier à l’extrême, le protocole permet de lire et écrire des mots de 16 bits.

    Selon l'adresse, le mot représente différentes données, l'état d'un groupe d'entrées, la valeur d'un registre, le contenu d'une variable de l'automate .... mais ça dépend vraiment de la cible.
    Selon l'adresse, en théorie on utilise une fonction spécifique, voir le lien précédent, toutefois le code de lecture des registre marche généralement sur toute la plage de la cible.

    Le nombre de mots, baaah, c'est le nombre de mot ...
    Dans votre exemple, si vous définissez le registre 5000 et 1 mot, la cible vous renverra le contenu du registre 5000.
    Maintenant adresse 5000 et 2 mot, la cible vous renverra le mot 5000 suivi du 5001, et ainsi de suite.

    Pour connaitre le nombre de mots à lire, vous devez connaitre la taille de la variable à lire (8 / 16 / 32)

  5. #5
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Bonjour themayu,

    merci pour la doc et le site. Je viens de télécharger le client tcp, je vais essayer de récupérer ma donnée sur l'automate et analyser les échanges pour savoir quoi lui envoyer

    Ma variable est une température, et à priori tous les mots stockés dans les registres sont en 16 bits, après je ne sais pas si c'est une valeur signée ou non ...
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  6. #6
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Décidément ce petit client modbus m'a bien aidé. Voici le bon réglage de la trame de lecture, qui me retourne bien ma température :



    Par contre, j'ai un problème de construction de ma trame de requête de lecture. Je vous poste la fonction de lecture :

    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
    PROCEDURE Lecture_automate(Nom_socket est une chaîne,Debut_registre est un entier,Nb_mots est un entier)
     
    minusOffset est un entier = 1
    Debut_registre -= minusOffset
    i est un entier
    Tailleréponse est un entier
    Valeur est un entier
    Valeur1 , Valeur2 sont des entier sans signe sur 1 octet
    Nb_octet_reponse est un entier sans signe sur 1 octet
    StartLow est un entier sans signe sur 1 octet
    StartHigh est un entier sans signe sur 1 octet
    LengthLow est un entier sans signe sur 1 octet
    LengthHigh est un entier sans signe sur 1 octet
    sReponseautomate est une chaîne
    Reponse_autom est un Buffer
    MbusQuery est un Buffer sur 12 octet
     
     
    StartLow = modulo(Debut_registre, 256)
    StartHigh = Debut_registre / 256
    LengthLow =modulo(Nb_mots, 256)
    LengthHigh = Nb_mots / 256
     
     
    // CONSTRUCTION DE LA TRAME DE REQUETE DE LECTURE
     
    MbusQuery[[1]] = 0  		//
    MbusQuery[[2]] = 3  		// Identification du demandeur
    MbusQuery[[3]] = 0  		//
    MbusQuery[[4]] = 0  		// 0 protocole modbus
    MbusQuery[[5]] = 0  		//
    MbusQuery[[6]] = 6  		// Longueur du message qui suit 6 octets
    MbusQuery[[7]] = 1  		// SLAVE ID
    MbusQuery[[8]] = 3  		// Code de la demande ,03 lecture seule, 16 écriture seule, 23 lecture écriture
    MbusQuery[[9]] = StartHigh	// 1er octet adresse registre à lire
    MbusQuery[[10]]= StartLow	// 2ème octet adresse registre à lire
    MbusQuery[[11]] =LengthHigh	// 1er octet nombre de registres
    MbusQuery[[12]] =LengthLow	// 2ème octet nombre de registres
     
     
    //Envoi de la demande de lecture
    SI SocketEcrit(Nom_socket,MbusQuery)= Vrai ALORS    
    	//Lecture de la réponse automate et traitement
    	Reponse_autom=SocketLit(Nom_socket,Faux)
    	Tailleréponse=Taille(Reponse_autom)
    	Nb_octet_reponse=Reponse_autom[[9]]
     
    	Trace(Reponse_autom + " " + Tailleréponse)
     
    	POUR i=10 _A_ Nb_octet_reponse+9 PAS 2
     
    		Valeur1=Reponse_autom[[i]]
    		Valeur2=Reponse_autom[[i+1]]
    		Valeur=(Valeur1*256) + Valeur2
    		Trace(Valeur)
     
    		sReponseautomate=sReponseautomate+NumériqueVersChaîne(Valeur)+RC
    	FIN
    	RENVOYER(sReponseautomate)
    SINON
    	RENVOYER("erreur lors de la demande de lecture ")
    FIN
    Et en débuggage, ce que contient le buffer MbusQuery après affectation :



    Voyez le 10ème octet, que je dois mettre à 135 (adresse 5000 moins offset 1 = 4999 = 19 x 16 + 135), après affectation cet octet semble mal affecté, valeur ≠ ???

    Après plusieurs essais, il semble que je ne puisse pas mettre plus que 31

    De quoi cela peut-il venir ?
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  7. #7
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 178
    Points : 416
    Points
    416
    Par défaut
    Vous devez afficher la valeur hexadécimal dans votre débogueur, la trame n'a pas de problème.

  8. #8
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Effectivement ça fonctionne !

    pfff désolé je suis fatigué

    bon c'est une première bataille de ggnée, merci

    il me reste à faire dans l'autre sens, c'est à dire mettre mon automate en écoute, et à moi de lui affecter une variable
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  9. #9
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Une petite chose : je veux monitorer un certain nombre de valeurs lues toutes les x millisecondes

    Est-ce que je fait toutes mes interrogations sur la même socket sans jamais la fermer, ou bien à chaque requête j'ouvre et ferme la socket ?

    J'ai l'impression qu'en maintenant ouverte une socket pendant trop longtemps, au bout d'un moment je perds la connexion
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  10. #10
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Bon finalement j'ouvre et ferme la socket à chaque lecture, ça me semble plus stable.
    Parce que je vais lire environ 5 valeurs pour chacun de mes 20 automates, toutes les minutes.
    Ca me fera 1440 enregistrements par jour, soit 43 200 lignes à enregistrer dans ma table sur un mois, soit plus de 500 000 enregistrements pour une année d'historique que je veux conserver.

    Je trouve ça énorme. En imaginant que je fasse une suppression cyclique des données anciennes pour ne conserver qu'un an, pensez-vous que ça pose problème d'avoir autant de lignes dans une table ?

    Merci à vous
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  11. #11
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Bonjour,

    je relance un peu le sujet pour une question aux spécialistes modbus

    J'arrive à lire et écrire un mot entier en protocole MODBUS

    Maintenant je dois lire/écrire un bit particulier d'un mot. Je ne me fais pas de soucis pour la lecture, il faut lire le mot puis prendre seulement le bit souhaité.

    Mais pour l'écriture, est-ce que je dois d'abord récupérer le mot dans lequel je souhaite écrire, changer le bit en question, puis réécrire le mot tout entier ?

    Je n'ai pas l'impression qu'on puisse faire de l'écriture bit à bit en MODBUS.

    Merci pour vos réponses
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  12. #12
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 178
    Points : 416
    Points
    416
    Par défaut
    Il n'existe pas de fonction pour écrire un seul bit, en dehors des coils, donc vous allez devoir faire du bricolage.
    Il va quand même falloir vérifier que votre automate n'utilise pas cette variable en écriture, sinon ça risque d'être plus qu’aléatoire ...

  13. #13
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Oui j'avais déjà soulevé ce problème avec les gars de la maintenance

    En fait leur type d'automate ne sait gérer que des words d'au moins 16 bits, éventuellement 32 mais ce n m'aidera pas d'avantage !

    Et oui, je leur avait demandé pourquoi ils ne gèrent pas leur variables "booléennes" dans des coils, puisque c'est vraiment fait pour.

    Mais ils n'ont pas cette possibilité dans le logiciel qui leur sert à programmer l'automate.

    Donc je dois faire avec des mots de 16bits, effectivement ce ne seront des variables dans lesquelles je serai le seul à pouvoir écrire depuis mon appli (paramétrage des bains, ampérage, voltage, temps de cycle, ....)
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  14. #14
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 178
    Points : 416
    Points
    416
    Par défaut
    Ce n'est pas surprenant, la base du modbus, c'est le WORD, utiliser un BYTE sur l'automate se traduira simplement par un stockage sur les bits 0 a 7 d'un WORD.
    Pour les coils, attention à ne pas faire d'amalgame, il ne s'agit pas de booléen librement adressable comme des registres, mais bien d'une suite de booléens représentant l’enchaînement des sorties dans le bus, la sortie en position 100, c'est le coil 100.

  15. #15
    Membre à l'essai
    Homme Profil pro
    Responsable BE
    Inscrit en
    Août 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Responsable BE
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2014
    Messages : 20
    Points : 20
    Points
    20
    Par défaut Question sur Com ModBus
    Bonjour,

    J'ai également besoin de communiquer avec un automate en ModBus TCP, j'ai pu récupérer les fameuses procédures (merci à l'auteur ). Grâce à cela, j'ai pu effectuer la communication avec l'automate sans trop de problème.
    En revanche, j'ai un problème sur la lecture. J'ai l'erreur suivante : "Un élément de type 'buffer' ne peut pas être converti vers le type 'entier sans signe sur 1 octet'." et je ne vois pas comment la résoudre.
    J'ai vu que le sujet commence à dater mais on ne sait jamais, merci d'avance.

  16. #16
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    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 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Bonjour,

    je pense que tu as la réponse dans la question : tu as déclaré une variable de type "entier..." et il faut qu'elle soit de type buffer...
    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

  17. #17
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 808
    Points : 5 267
    Points
    5 267
    Billets dans le blog
    1
    Par défaut
    Ou le contraire il me semble.
    La fonction attend un octet et tu passes le message complet.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  18. #18
    Membre à l'essai
    Homme Profil pro
    Responsable BE
    Inscrit en
    Août 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Responsable BE
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2014
    Messages : 20
    Points : 20
    Points
    20
    Par défaut
    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
    i est un entier
    Tailleréponse est un entier
    nValeur est un entier
    nValeur1 , nValeur2 sont des entier sans signe sur 1 octet
    nNb_octet_reponse est un entier sans signe sur 1 octet
    nStartLow est un entier sans signe sur 1 octet
    StartHigh est un entier sans signe sur 1 octet
    LengthLow est un entier sans signe sur 1 octet
    LengthHigh est un entier sans signe sur 1 octet
    sReponseautomate est une chaîne
    bufReponse_autom est un Buffer
    MbusQuery est un Buffer sur 12 octet
    //calcul des valeur par rapport au numéro de mots et a son nombre a affecter
    nStartLow = modulo(Debut_registre ,256) //Modulo 256 retourne le reste de la division entière de deux nombres
    StartHigh = Debut_registre / 256
    LengthLow =modulo( Nb_mots, 256)
    LengthHigh = Nb_mots / 256
    //confection de la trame
    MbusQuery[[1]] = 0  //|
    MbusQuery[[2]] = 3  //|  Identification du demandeur
    MbusQuery[[3]] = 0  //|
    MbusQuery[[4]] = 0  //|  0 protocole modbus
    MbusQuery[[5]] = 0  //|
    MbusQuery[[6]] = 6  //|` Longueur du message qui suit 6 octets
    MbusQuery[[7]] = 1  //|
    MbusQuery[[8]] = 1  //|  Code de la demande ,03 lecture seule, 16 écriture seule, 23 lecture écriture
    MbusQuery[[9]] = StartHigh
    MbusQuery[[10]]= 97
    MbusQuery[[11]] =LengthHigh
    MbusQuery[[12]] =LengthLow
    //Envoi de la demande de lecture
    SI SocketEcrit(Nom_socket,MbusQuery)= Vrai ALORS    //"00000911600012010"
    	//Lecture de la réponse automate et traitement
    	bufReponse_autom=SocketLit(Nom_socket,Faux)
    	Tailleréponse=Taille(bufReponse_autom)
    	nNb_octet_reponse=bufReponse_autom[[9]]
    	POUR i=10 À nNb_octet_reponse+9 PAS 2
    		nValeur1=bufReponse_autom[[i]]
    		SI nNb_octet_reponse<>1 ALORS
    			nValeur2=bufReponse_autom[[i+1]]
    		SINON
    			nValeur2=0
    		FIN
    		nValeur=nValeur1 + nValeur2
    		sReponseautomate=sReponseautomate+NumériqueVersChaîne(nValeur)+RC
    	FIN
    	RENVOYER(sReponseautomate)
    SINON
    	RENVOYER("erreur lors de la demande de lecture ")
    FIN
    Bonjour Messieurs,
    Ci-dessus le code, en effet je suis d'accord avec vous au niveau du type cela ne correspond pas mais pourtant dans le code, on fait correspondre deux valeurs entre elle qui ne sont pas du même type mais est-ce que le fait de préciser [9] dans bufReponse_autom ne rend pas cette valeur en entier ?

    Merci d'avance,

  19. #19
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    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 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Je pense que c'est à la ligne 36 de ton code que ça plante...
    Tu affectes un caractère (issu de ton buffer) à un entier sans signe. Il n'aime pas...
    Au premier abord, je te dirais : Regarde ici : https://doc.pcsoft.fr/?1000020508&na...ntier_fonction

    Mais, il va falloir que tu convertisses ton entier entier sans signe.... Alors regarde plutôt buffervershexa() et hexaversentier()
    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

  20. #20
    Membre à l'essai
    Homme Profil pro
    Responsable BE
    Inscrit en
    Août 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Responsable BE
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2014
    Messages : 20
    Points : 20
    Points
    20
    Par défaut
    En effet c'est bien à la ligne 36, on reconnait l'expert
    Du coup il s'agirait de convertir "bufReponse_autom" de buffervershexa et hexavers entier avant de le mettre égale à "nNb_octet_reponse"

    Merci d'avance,

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/05/2012, 10h13
  2. [Lazarus 0.9.18] Ressources : comment faire avec des images ?
    Par poilagratter dans le forum Lazarus
    Réponses: 3
    Dernier message: 16/08/2007, 08h10
  3. [RELEASE]comment faire avec des plugins Snapshot ?
    Par djeanprost dans le forum Maven
    Réponses: 3
    Dernier message: 07/06/2007, 14h30
  4. Comment faire avec 2 boucles..
    Par zmatz dans le forum C++
    Réponses: 3
    Dernier message: 09/05/2007, 13h36
  5. [Modélisation] comment faire avec access?
    Par brouillonp dans le forum Access
    Réponses: 8
    Dernier message: 02/01/2006, 13h19

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