VB.Net et M340

Forum traitant des automates industriels de marque Schneider - Telemecanique
akiraentsaii
Asservi son premier moteur
Asservi son premier moteur
Messages : 30
Enregistré le : 04 janv. 2017, 16:19

Re: VB.Net et M340

Message par akiraentsaii »

Bonjour à tous, mon projet avance (à petits pas).
Voilà les nouvelles: interface en VB.net créer pour choisir la trames à envoyer, et je récupère la réponse.(que j'affiche). Normalement des chr(xx) sont utilisé, mais un fois qu'on dépasse chr(128) c'est plus bon du tout! Alors je m'en suis passé, j'ai mis cela dans des tableau de char.
Bref, j'arrive à lire et écrire dans les 9 premiers mots, mais pas ceux d'après.... Pourquoi? je ne sais pas, je pense que le '10' n'est pas trop aimé ^^
En tout cas le projet avance, mais je pense que ce n'est plus un problème d'automate, mais plutôt de com en vb.net / Modbus. Donc voilà, je vais poser mes question côté programmation industrielle, et je reviens vers vous une fois que tout fonctionne.
Cdlt
Avatar du membre
Cyril93
Maître du binaire
Maître du binaire
Messages : 484
Enregistré le : 29 oct. 2015, 14:22
Localisation : IDF

Re: VB.Net et M340

Message par Cyril93 »

Salut,
akiraentsaii a écrit :Bonjour à tous, mon projet avance (à petits pas).
Voilà les nouvelles: interface en VB.net créer pour choisir la trames à envoyer, et je récupère la réponse.(que j'affiche)

Juste pour satisfaire ma curiosité tu as utilisé quoi pour ta COM modbus ? Winsock ? autre DLL ?
akiraentsaii
Asservi son premier moteur
Asservi son premier moteur
Messages : 30
Enregistré le : 04 janv. 2017, 16:19

Re: VB.Net et M340

Message par akiraentsaii »

Bonjour, vu que ce que je voulais faire est fait, je partage ce que j'ai appris, tout en sachant que les codes ne sont pas optimisé, et que cela pourra paraitre 'bancale' pour un pro ;) Il y a surement plus simple.
@Cyril : pour la com, drivers MODBUS de chez Schneider (sur le PC), et pour envoyer les requêtes la classe SerialPort en vb.net (sachant qu'avec l'adaptateur USB TSXCUSB485, on ouvre un port COM, donc j'ai dialogué via ce port COM (le 7 pour moi))

Explications :
Config de l'automate :
Voie 0 :

Code : Tout sélectionner

Fonction métier : Liaison Modbus
Type de voie : Voie intégrée
Tâche : MAST
Type : Esclave
Vitesse de transmission : 9 600 bits/s Données : 8 bits
Stop : 1 bit Parité : Aucune
Délai inter-trames : 4 ms
Numéro d'esclave : 1
Ligne physique : RS485
Bref un config en esclave.
Config des drivers :
On fait la même config

Code : Tout sélectionner

Ne pas cocher 'use modem'
COM PORT : COM XX (TSXUSB485 [ready]
où le XX est le port COM à utiliser!
Stop bit : 1
Parity NONE
MOde (data bits) : RTU 8 bits
et on valide

La connexion est faite, il ne reste plus qu'à échanger ;)
Pour ce faire j'ai utilisé le SerialPort en vb.net .
J'ai fait une page, avec un bouton "envoyer", des TextBox qui affiche ce que je recoit (le message d'envois est toujours le même, à vous de le changer ;) Perso j'ai lu 20 mots depuis le mot 0, soit la trame {Convert.ToByte(&H1), Convert.ToByte(&H3), Convert.
ToByte(&H0), Convert.ToByte(&H0), Convert.ToByte(&H0), Convert.ToByte(&HC), Convert.
ToByte(&H45), Convert.ToByte(&HCF)} envoyée .

Côté Vb.net :

Au début de la classe j'ai mis :

Code : Tout sélectionner

Dim WithEvents ADRport As SerialPort = New _
System.IO.Ports.SerialPort("COM7", _
9600, _
Parity.None, _
8, _
StopBits.One)
Soit les même config que l'automate et le driver. Mon COM7, c'est parce que mon driver m'indique que l'adaptateur est en COM7

Maintenant pour communiquer, on utiliser ADRport.

Code : Tout sélectionner

Dim buffer() As Byte = {Convert.ToByte(&H1), Convert.ToByte(&H3), Convert.
ToByte(&H0), Convert.ToByte(&H0), Convert.ToByte(&H0), Convert.ToByte(&HC), Convert.
ToByte(&H45), Convert.ToByte(&HCF)}
'On envois le message
ADRport.Write(buffer, 0, 8)
'On attends que la commande soit envoyée
Thread.Sleep(50)
'On défini le delais d'attente avant un dépassement
ADRport.ReadTimeout = 100
On envoit donc avec ADRPort.Write notre trame , le 8 étant le nombre d'octets envoyé (c'est toujours 8 en modbus)

On attends 50ms que le message s'envois, le timeout est le delais de réponse.

Code : Tout sélectionner

'tableau contenant ce que l'on recoit
Dim ByteArr(ADRport.ReadBufferSize) As Byte
Dim NbBytesRecu As Integer
'On essaye de lire le message recu. Si on n'y arrive pas, on affiche un
message
Try
NbBytesRecu = ADRport.Read(ByteArr, 0, ADRport.ReadBufferSize)
Catch generatedExceptionName As TimeoutException
MsgBox("L’envoi ne s’est pas fait, vérifier vos paramètres", 4096 + 16,
"ATTENTION")
Exit Sub
End Try
Le message reçu est stocké dans ByteArr qui est un tableau de la taille du message reçu.
Le try/catch permet d'afficher un message si aucune trame n'a été reçue en réponse (il y a donc eu un soucis d'envois)

il reste plus qu'à afficher chaque éléments de byteArr dans une textbox par exemple, ou alors directement utiliser les valeurs.
Je n'ai pas fait de vérification sur la réponse que me fait l'automate. Pour cela il faut vérifier que le CRC16 de la trame reçue est bon. Je n'ai pas voulu le faire car pour moi c'était juste "histoire de voir" ;)

Je vous conseil de lire les documents sur le modbus pour savoir les trames à envoyer (pour lire/écrire, les mots, les CRC16, etc...).

Voilà, si vous avez des questions, j'y répondrais dans la mesure de mes connaissances, sachant que je suis débutant en VB.net (et en modbus)


EDIT: désolé pour les bouts de code qui ne sont pas visible directement, il faut appuyer sur EXPAND
Avatar du membre
Cyril93
Maître du binaire
Maître du binaire
Messages : 484
Enregistré le : 29 oct. 2015, 14:22
Localisation : IDF

Re: VB.Net et M340

Message par Cyril93 »

Salut,

Je pensais que tu le ferais en TCP, enfin bon ça marche aussi en RTU !!
Merci de ton retour en tout cas. ;)
akiraentsaii
Asservi son premier moteur
Asservi son premier moteur
Messages : 30
Enregistré le : 04 janv. 2017, 16:19

Re: VB.Net et M340

Message par akiraentsaii »

Je pense que cela peux le faire en TCP, et je crois en plus que comme cela, on se passe des clés de contrôle CRC16 ! (qui n'est pas une mince affaire à calculer ;) )
En tout cas cela m'a permis de comprendre un peu le MOdbus, savoir comment fonctionne les trames, qu'il n'y a pas besoins de programme dans l'automate (tout du moins spécifique à la COM ESCLAVE, il le gère tout seul comme un grand). J'aurais dû tester sans l'adaptateur 485, mais j'ai pas eu le temps... y'a tellement de choses à faire ;)
Avatar du membre
Cyril93
Maître du binaire
Maître du binaire
Messages : 484
Enregistré le : 29 oct. 2015, 14:22
Localisation : IDF

Re: VB.Net et M340

Message par Cyril93 »

Oui en tcp il n'y a pas besoin de calculer le CRC celui ci est déja intégré par la carte réseau.
akiraentsaii
Asservi son premier moteur
Asservi son premier moteur
Messages : 30
Enregistré le : 04 janv. 2017, 16:19

Re: VB.Net et M340

Message par akiraentsaii »

si j'ai le temps, j'y passerai un peu de temps. Au moins le modbus permet gérer soit même la com : y'a une erreure, tampis, on fait comme si y'en avait pas ! Je dis pas que c'est ce qu'il faut faire, mais y'a un peu plus de contrôle (et de difficultés !)
Répondre