Discussions au sujet de NI LabVIEW

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

modbus command en TCP/IP

Bonjour,

Afin de piloter un servomoteur Kollmorgen de la gamme AKD via ethernet, j'ai dû utiliser Modbus afin d'établir une connection et de communiquer avec le servomoteur. Bref, J'ai donc utiliser la librairie ni.modbus trouvée en ligne et utiliser Modbus command et MB ethernet master query. Dans modbus command, je dois rentrer le code fonction (R/W) - OK, l'adresse du registre considéré-OK, la quantité de registres mis en jeu (en fonction si c'est du 64 bits, du 16 bits, du 8 bits...) et ensuite la/les valeur "data" dans un tableau. Pour ce qui est de lancer une commande simple style booléen (marche/arrêt --> 0/1) pas de soucis ca marche. Mais je bloque sur le fait de devoir rentrer une valeur flottante décimale et signée comme commande variable pouvant être définie en face avant (typiquement une valeur de la vitesse du moteur, une intensité....)

 

Si quelqu'un à un conseil qui pourrait me débloquer, je prends! Merci d'avance!

0 Compliments
Message 1 sur 6
5 485 Visites

Bonjour,

 

Pour régler ces paramètres, créer une commande sur la face avant (ou sur le diagramme d'ailleurs).

Faites clic dt sur cette commande puis allez dans Propriétés.

 

Vous aurez ici plusieurs onglets.

 

- Dans Type de Données, sélectionnez i32 ou i16 ou i64  (u= unsigned et i=signed)

- Allez ensuite dans l'onglet affichage puis sélectionnez le nombre de chiffre que vous voulez derrière la virgule.

 

N'hésitez pas à nous demander si vous désirez plus d'information ou en cas de problème.

 

Pierre Denis

National Instruments

 

0 Compliments
Message 2 sur 6
5 479 Visites

Re,

 

Merci de me répondre aussi rapidement! Smiley heureux

Néanmoins, votre réponse ne répond pas à ma question, qui peut-être n'était pas assez claire.

Oui, OK je sais comment fixer le type de la commande introduite en face avant, signée ou non, décimale ou non...

En fait, ce qui me bloque c'est que j'utlise les ous VI relatif à modbus pour réaliser ce programme: en particulier ni modbus master ethernet query et ceux qui en découle: Write multiple registers, read holding coil... ce qui m'importe ici est de pouvoir écrire sur les registres du servomoteurs des ordres en utilisant MB ethernet Master query.vi et MB ethernet write multiple register.... Pour cela, je dois utiliser le cluster "MB Modbus command.ctl", afin de pouvoir rentrer les ordres que je souhaite donner au servomoteur et à travers cela, je définis les paramètres suivants: -function code--> 16 ; numero du registre concerné (par ex 746), la quantité de registres mis en jeu dans la commande appelée (par ex 2 ou 4); et la data à renseigné sur l'état du registre (tableau bleu) en binaire + dernier paramètre un boolée défini à 0 car pas besoin. ce qui me pose vrmt pb est la data a renseigner: lorsqu'il s'agit d'un état simple, je complète ce tableau par exemple par les data suivantes: col 0 --> valeur 0 et Col 1 --> valeur 1 ou 0 pour définir par exemple un état actif ou inactif du servomoteur. idem pour définir l'état de registres "simples" codés par des valeurs 0 ou 1 ou 2 ou 3... mais ce qui me bloque est de ne pas savoir comment envoyer l'ordre au registre X ou Y d'écrire une valeur décimale à virgule et éventuellement signé pour définir la vitesse du moteur par exemple ou une intensité ex 7.3 rpm... ou 0.35 A.... si j'essaie de remplacer ce tableau par une commande de décimale flottant et signé, je ne peux plus le connecter au sous VI MB ethernet master query ou MB ethernet write multiple register sans que cela me fasse un fil brisé..... Comment faire pour définir par exemple la valeur 7.3 au registre X en utilisant le même type de strucure via MB modbus command....?????

 

J'espère être +/- clair???? pas évident de décrire en quelques lignes ce type de pb....

 

Merci d'avance!!!!

0 Compliments
Message 3 sur 6
5 477 Visites

Bonjour,

 

Le changement de type de "Data" de U16 à U32 pour exemple (ou dans votre cas en signé...) doit se faire dans 'MB Modbus Command.ctl' qui fait parti de la librairie Modbus (clic droit sur le Cluster de contrôle >>Représentation). Comme le ctl a été défini en définition type, les modifications se répercuteront sur les VI faisant parti de la librairie Modbus.

 

Mettre à jour les contrôles et indicateurs dans n'importe quel VI utilisant le 'MB Modbus Command.ctl':

Des points de coercitions (ou problèmes de liaison) apparaitront puisque votre tableau sera désormais dans le type que vous venez de définir. La "Data" et la "Quantité" faisant partie de la fonction "assembler par nom" acceptant le cluster. Ils doivent alors eux aussi être changer dans le même type que celui défini précédemment. Ce changement doit être fait dans n'importe quel Vi de la librairie Modbus que vous utilisez.

 

Si cette méthode ne résout pas votre problème, essayez de nous envoyer votre projet pour que nous puissions mieux nous rendre compte du problème rencontré.

 

Cordialement.

 

Pierre Denis

National Instruments



0 Compliments
Message 4 sur 6
5 440 Visites

Bonjour,

 

les registres modbus sont des entiers codés sur 2 octets. Il doit exister une loi de conversion pour écrire votre valeur dans le registre modbus. Je vous conseille de vérifier la doc de votre servomoteur.

En général, il s'agit d'une règle de 3 :

valeur entière positive à envoyer au registre = A*(consigne+OFFSET)

où A et OFFSET devraient être renseigner dans la datasheet du servomoteur.

 

Cordialement,

 

Adeline.

Message 5 sur 6
5 402 Visites

bonjour,

 

je souhaite aussi utiliser un drive AKD en ethernet avec le protocole MODBUS

j'ai reussi a utiliser des commande simple comme Enable, Disable ,Home

mais lorsque que je veux envoyer une comande de position ( MT.P) le drive se bloque , je ne peux plus envoyer de nouvelle commande

pouvez vous m'aider sur la generation de la commande, j'utilise le VI "zConvert Modbus command to String.vi" pour le generer

j'ai trouver les info sur la commande dans le fichier d'aide de l'ADK

MT.P

pouvez vous m'expliquer comment remplir correctement le vi "zConvert Modbus command to String.vi" pour cette fonction.

 

merci d'avance

 

 

0 Compliments
Message 6 sur 6
5 237 Visites