LIRE UN BYTE PAR API

cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 - 13 oct. 2006 à 21:32
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 - 14 janv. 2011 à 15:52
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/39907-lire-un-byte-par-api

Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
14 janv. 2011 à 15:52
De rien et merci pour la note, sa me va droit au code ;)
btsmai2 Messages postés 9 Date d'inscription vendredi 14 janvier 2011 Statut Membre Dernière intervention 14 janvier 2011
14 janv. 2011 à 15:42
Merci je viens de trouver la commande qui est celle-ci :
Data = wsmObj.wsm_ReadCoils(0, 0, 1)

Avec coils comme tu avais dit malgré le fait que je n'avais pas compris merci beaucoup.
btsmai2 Messages postés 9 Date d'inscription vendredi 14 janvier 2011 Statut Membre Dernière intervention 14 janvier 2011
14 janv. 2011 à 13:13
Oui pour le mot on lit 5 entrées , mais je veux chercher un bit précis , mais avec RMR (ReadMultipleRegisters ?) il me dit bien "impossible d'affecter a un tableau quand j'essaye ta commande donc je ne peux pas lire sa valeur.
Je n'arrive pas donc a lire juste la valeur de ce bit , qu'elle soit 1 ou 0.
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
14 janv. 2011 à 11:55
Le Bool en VB:
True = -1
False = 0

D'après ce que j'comprends, a l'adresse 0x00 tu lis 5 entrées de ton automate.
Si tu fais la lecture avec RMR(), tu n'as pas de notion d'aller chercher ce bit %M0,
puisque logiquement elle sera contenu dans Data.

Pour le code (a ma connaissance ReadMultipleRegisters renvoie un tableau de type Int):
Dim Data() As Integer
Dim MonByte As Integer
Data = wsmobj.wsm_ReadMultipleRegisters(0, 0, 1)

Que renvoie Data comme valeure ?
(Pour le savoir, clique droit sur Data et Ajouter un espion)
Que contient ton tableau Data en "lecture 0x00, lenght 1" ?
btsmai2 Messages postés 9 Date d'inscription vendredi 14 janvier 2011 Statut Membre Dernière intervention 14 janvier 2011
14 janv. 2011 à 11:43
Je ne comprend pas. Pourquoi comme ceci ?
Je pensais plutôt a
Dim Data as Boolean
data = wsmobj.wsm_ReadMultipleRegisters
Le problème c'est que il ne le prend pas , je n'arrive pas a lui donner la bonne "adresse" a aller chercher.
Comme par exemple quand nous allons chercher un "mot" on fait comme suit :
Data = wsmobj.wsm_ReadMultipleRegisters(0, 0, 5)
Sachant que le 2 éme 0 est l'adresse du "mot" a aller chercher ici %MW0 et le 5 de %MW0 a %MW4.
Ce que je voudrais c'est aller chercher le bit %M0 par exemple.
Merci beaucoup de ton aide.
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
14 janv. 2011 à 11:37
En outre...

XXXRegisters() = %MW0
XXXCoils()= %M3
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
14 janv. 2011 à 11:35
Bah... peut-être ceci ?

Dim Result As ReadMultipleRegistersResult
Dim rtRead(0) As Integer
Dim iID As Integer
Dim iADR As Integer
Dim iQTE As Integer

rtRead = ReadMultipleRegisters(iID, iADR, iQTE)

La question c'est de savoir ce que contient ReadMultipleRegistersResult pour le comparer
a rtRead.
btsmai2 Messages postés 9 Date d'inscription vendredi 14 janvier 2011 Statut Membre Dernière intervention 14 janvier 2011
14 janv. 2011 à 11:28
Le bit %M3 est un nom que l'on associe a un bit de type %Mx , il ne peut être égal qu'a 0 ou 1.
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
14 janv. 2011 à 11:23
Que représente le bit %M3 ?
Arrivez vous a convertir ce bit en binaire ?

(Si vous codez et décodez en binaire, beaucoup de chose peuvent être traduite.)
btsmai2 Messages postés 9 Date d'inscription vendredi 14 janvier 2011 Statut Membre Dernière intervention 14 janvier 2011
14 janv. 2011 à 11:19
Nous arrivons déjà a récupérer des infos depuis notre automate.
Mais nous n'arrivons pas a récupérer les bits de type ebool.
Qu'est ce que le "MS COMM CONTROL" ? Nous somme déjà connecter a notre automate , sur visual basic on utilise la fonction "Web services référence" et nous utilisons "Set wsmObj = New clsws_ModbusXmlDa " je ne sais pas si cela te dit quelque chose.
Merci de ton aide.
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
14 janv. 2011 à 11:14
Il faut s'inspirer de la lecture sur port série (RS 232).
Sans utiliser les API, tu as le composant "MS COMM CONTROL v6" sous VB6 qui permet d'effectuer une connexion/déconnexion ainsi qu'une communication entré/sortie.

Automate > Ordinateur > Port Série
VB > Connexion par le port
Communication > Envoi d'une commande a l'automate
Communication > Réception provenant de l'automate
VB > Déconnexion du port

Dans ton exemple, si l'automate redirige tous les informations sur entrée de l'ordinateur, vb sera capable de les lires. J'avais fait le test avec un port parallèle et une carte à puce, sa fonctionnait très bien.
btsmai2 Messages postés 9 Date d'inscription vendredi 14 janvier 2011 Statut Membre Dernière intervention 14 janvier 2011
14 janv. 2011 à 10:56
Unity est un logiciel de programmation pour des automates.Et nous devons dans notre projet effectuer un "transfert" d'infos entre unity est Visual basic. Par exemple si le bit %M3 passe a un je voudrais mettre un message avec la msgbox. Mais nous n'arrivons a le faire qu'avec des mots (exemple : %MW0) et non avec des bits . Est-ce possible ? merci de ton aide.
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
14 janv. 2011 à 10:28
GALAIN: Niveau: Initié; pas débutant.

EBArtSoft: LIRE PAR API et non PAS VB.

MAYZZ: Merci pour ta compréhension ^^ dommage tu ne me remonte pas la note des confrères-assassins.

BruNews: "Manipuler les API en C...", on peu le faire dans tous les langages objets.
Je n'ai pas fait de liaison entre API et BYTE, a cet époque je savais déjà que
c'était des interfaces programmables.

btsmai2: C'est quoi Unity ? Développe, ci je peux t'aider je le ferai.
btsmai2 Messages postés 9 Date d'inscription vendredi 14 janvier 2011 Statut Membre Dernière intervention 14 janvier 2011
14 janv. 2011 à 09:43
Bonjour je suis étudiant je voulez vous demander comment faire pour allez chercher et lire un bits depuis unity avec visual basic. merci
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 nov. 2006 à 22:33
"...manipuler les APIs, on écrit en C,.."

Confondre API et byte, dur dur...
bitshifter Messages postés 61 Date d'inscription mardi 1 février 2005 Statut Membre Dernière intervention 28 mai 2012 1
20 nov. 2006 à 21:50
Pas besoin d'écrire en C pour manipuler des bytes.
J'écris/lis routinièrement des données binaires avec VB.

Bravo pour avoir essayé.

Moi-même, j'utilise comme EBartSoft.
L'avantage est que la variable Byte peut être remplacée par un 'Type' pour lire tout un block de données formatées (avec structure) d'un seul coup.
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
14 oct. 2006 à 23:45
Dans le titre de ton code tu as oublié de spécifier 'avec les API' c'est claire, mais sinon il n'en reste pas moins que c'est une bonne démo des bases de la gestion des fichiers par API.

D'après ce que j'ai vu c'est ta première source dc tu es pardonné :D
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 oct. 2006 à 22:41
C'est bien clair que le code EB est à privilégier.

Quand on tient absolument à manipuler les APIs, on écrit en C, faut tout de même être cohérent.
Profil bloqué
13 oct. 2006 à 21:35
bien joué EBArtSofT
Profil bloqué
13 oct. 2006 à 21:34
Salut duke49

Une boite de sélection de fichiers aurait été un plus non négligeable dans ce projet surtout pour les débutants en VB.
J'ai pas regardé le code mais du côté Form c'est un peu léger
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
13 oct. 2006 à 21:32
Tout ça pour ça ? Je dirais plutot :

dim b as byte 'Octet
dim a as long 'Adresse

Open "C:\MonFichier" for binary as #1
get #1,1 + a,b
close #1

@+
Rejoignez-nous