Echange ComDrvS7

Forum traitant des automates industriels de marque Siemens.
nmvolley
Code sa première boucle
Code sa première boucle
Messages : 16
Inscription : 25 mai 2018, 16:39

Echange ComDrvS7

Message par nmvolley »

Bonjour,
Je travaille avec une PLC S7-1200 et je souhaite réaliser une supervision sous visual studio.
J'utilise pour ce faire le logiciel ComDrvS7 qui me permet de communiquer entre un pc et ma plc siemens.
Je peux ainsi recevoir et envoyer des infos avec mon automate.
Le soucis est que j'arrive à le faire uniquement pour des valeurs int, word... mais je n'y arrive pas pour une string du genre (roll60)
voici mon code actuellement:

Code : Tout sélectionner

if (comDrvS7Dll.MPI6_WriteWord(operand, 108, writeTagBuffer, 3, 0, out comDrvS7ErrorValue))
            {
                writeTagBuffer[0] = Convert.ToUInt16(this.RollLength.Text);
                writeTagBuffer[1] = Convert.ToUInt16(this.RollName.Text);
                writeTagBuffer[2] = Convert.ToUInt16(this.RollDiameter.Text);
            }

Mais il me génère une erreur si je cherche a envoyer "roll60" présent dans la textbox RollName.
Avez vous une idée de comment je pourrais procéder?
Avatar de l’utilisateur
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7037
Inscription : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Echange ComDrvS7

Message par itasoft »

slts,
je connais pas ComDrvS7 mais d'après le code je comprends que la fonction
Convert.ToUInt16(this.RollName.Text); convertit une chaîne de caractères en un tableau de mots de 16 bits (UINT)
donc writeTagBuffer[1] devrait représenter un tableau de mots UINT, c'est le cas ????
Automaticien privé (de tout)
itasoft@free.fr
nmvolley
Code sa première boucle
Code sa première boucle
Messages : 16
Inscription : 25 mai 2018, 16:39

Re: Echange ComDrvS7

Message par nmvolley »

Effectivement.
Je joint un document montrant la définition de la méthode, cela devrait t'éclaircir un petit peu.

Et voici la déclaration de mon tableau:
ushort[] writeTagBuffer = new ushort[9];

Je n'ai pas de méthode disponible me permettant de renvoyer une chaine de caractère directement.
Pièces jointes
definition methode
definition methode
Avatar de l’utilisateur
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7037
Inscription : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Echange ComDrvS7

Message par itasoft »

slts,
dans ce j'écrirais plutôt,
writeTagBuffer = Convert.ToUInt16(this.RollName.Text);

sinon par writeTagBuffer[0] = Convert.ToUInt16(this.RollName.Text); je comprends que tu veux mettre tous les octets de la chaîne de caractères dans le premier mot de 16bits du tableau writeTagBuffer. ça va pas renter, lol
Automaticien privé (de tout)
itasoft@free.fr
nmvolley
Code sa première boucle
Code sa première boucle
Messages : 16
Inscription : 25 mai 2018, 16:39

Re: Echange ComDrvS7

Message par nmvolley »

D'accord, je vois ce que tu veux dire.
J'ai trouvé une fonction me permettant d'envoyer des bytes, ce qui me permettrais de séparer ma chaine de caractère et les envoyer un par un ce qui me permettrait de créer ma chaine par la suite dans l'automate.
Sait-tu comment à partir de ma Textbox je peux recuperer la valeur du text pour la séparer. Par exemple.
Je rentre roll60 dans ma text box. Je déclare un tableau qui va ce nommée Buffer.

Ensuite je rentre mon text dedans de cette manière:

Buffer[0]=MaxSizeOfString
Buffer[1]=6 //size of string ‘roll60’
Buffer[2]=’r’;
Buffer[3]=’o’;
Buffer[4]=’l’;
Buffer[5]=’l’;
Buffer[6]=’6’;
Buffer[7]=’0’;

Puis je transfère dans un variable string de mon automate.

Je pense que c'est possible?
Mais je ne sais pas comment découper ma valeur text de ma textbox...
Avatar de l’utilisateur
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7037
Inscription : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Echange ComDrvS7

Message par itasoft »

slts,
disons que en JAVA standard ça s'écrirait comme ci dessous mais il faut trouver l’équivalent sur ComDrvS7


// Copie les caractères de la chaine this.RollName.Text dans un tableau de bytes

String Texte=this.RollName.Text.getStringValue();

byte Buffer[] =Texte.getBytes();
Automaticien privé (de tout)
itasoft@free.fr
nmvolley
Code sa première boucle
Code sa première boucle
Messages : 16
Inscription : 25 mai 2018, 16:39

Re: Echange ComDrvS7

Message par nmvolley »

Bonjour,

Je suis sous Visual studio en WPF C# pour faire une supervision.
ComDrvS7 me sert uniquement à transférer les infos de mon programme C# vers mon automate.
Donc je pense que ce doit être similaire.
Par contre il me faut les infos comme indiqué précédemment pour que je puisse les envoyer et les comprendre avec mon automate.
Répondre