Page 1 sur 1

Echange ComDrvS7

Posté : 16 juil. 2018, 11:36
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?

Re: Echange ComDrvS7

Posté : 16 juil. 2018, 11:53
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 ????

Re: Echange ComDrvS7

Posté : 16 juil. 2018, 13:24
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.

Re: Echange ComDrvS7

Posté : 16 juil. 2018, 14:38
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

Re: Echange ComDrvS7

Posté : 16 juil. 2018, 16:41
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...

Re: Echange ComDrvS7

Posté : 16 juil. 2018, 18:08
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();

Re: Echange ComDrvS7

Posté : 17 juil. 2018, 09:09
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.