Duke49
Messages postés552Date d'inscriptionjeudi 12 octobre 2006StatutNon membreDernière intervention24 janvier 20234 14 janv. 2011 à 15:52
De rien et merci pour la note, sa me va droit au code ;)
btsmai2
Messages postés9Date d'inscriptionvendredi 14 janvier 2011StatutMembreDernière intervention14 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és9Date d'inscriptionvendredi 14 janvier 2011StatutMembreDernière intervention14 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és552Date d'inscriptionjeudi 12 octobre 2006StatutNon membreDernière intervention24 janvier 20234 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és9Date d'inscriptionvendredi 14 janvier 2011StatutMembreDernière intervention14 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és552Date d'inscriptionjeudi 12 octobre 2006StatutNon membreDernière intervention24 janvier 20234 14 janv. 2011 à 11:37
En outre...
XXXRegisters() = %MW0
XXXCoils()= %M3
Duke49
Messages postés552Date d'inscriptionjeudi 12 octobre 2006StatutNon membreDernière intervention24 janvier 20234 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és9Date d'inscriptionvendredi 14 janvier 2011StatutMembreDernière intervention14 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és552Date d'inscriptionjeudi 12 octobre 2006StatutNon membreDernière intervention24 janvier 20234 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és9Date d'inscriptionvendredi 14 janvier 2011StatutMembreDernière intervention14 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és552Date d'inscriptionjeudi 12 octobre 2006StatutNon membreDernière intervention24 janvier 20234 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és9Date d'inscriptionvendredi 14 janvier 2011StatutMembreDernière intervention14 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és552Date d'inscriptionjeudi 12 octobre 2006StatutNon membreDernière intervention24 janvier 20234 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és9Date d'inscriptionvendredi 14 janvier 2011StatutMembreDernière intervention14 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és21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 20 nov. 2006 à 22:33
"...manipuler les APIs, on écrit en C,.."
Confondre API et byte, dur dur...
bitshifter
Messages postés61Date d'inscriptionmardi 1 février 2005StatutMembreDernière intervention28 mai 20121 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és2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 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és21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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.
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és4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 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
14 janv. 2011 à 15:52
14 janv. 2011 à 15:42
Data = wsmObj.wsm_ReadCoils(0, 0, 1)
Avec coils comme tu avais dit malgré le fait que je n'avais pas compris merci beaucoup.
14 janv. 2011 à 13:13
Je n'arrive pas donc a lire juste la valeur de ce bit , qu'elle soit 1 ou 0.
14 janv. 2011 à 11:55
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" ?
14 janv. 2011 à 11:43
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.
14 janv. 2011 à 11:37
XXXRegisters() = %MW0
XXXCoils()= %M3
14 janv. 2011 à 11:35
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.
14 janv. 2011 à 11:28
14 janv. 2011 à 11:23
Arrivez vous a convertir ce bit en binaire ?
(Si vous codez et décodez en binaire, beaucoup de chose peuvent être traduite.)
14 janv. 2011 à 11:19
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.
14 janv. 2011 à 11:14
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.
14 janv. 2011 à 10:56
14 janv. 2011 à 10:28
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.
14 janv. 2011 à 09:43
20 nov. 2006 à 22:33
Confondre API et byte, dur dur...
20 nov. 2006 à 21:50
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.
14 oct. 2006 à 23:45
D'après ce que j'ai vu c'est ta première source dc tu es pardonné :D
13 oct. 2006 à 22:41
Quand on tient absolument à manipuler les APIs, on écrit en C, faut tout de même être cohérent.
13 oct. 2006 à 21:35
13 oct. 2006 à 21:34
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
13 oct. 2006 à 21:32
dim b as byte 'Octet
dim a as long 'Adresse
Open "C:\MonFichier" for binary as #1
get #1,1 + a,b
close #1
@+