Bonjours, jai un créer une interface qui permet de lire des mots dans un automate TSX, et sa fonctionne tres bien

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
bool LireMotsModbus(unsigned short *cTabValeur, int iPremier, int iNombre, int iIndex)
{
  unsigned char ucRequete[12]={00,00,00,00,00,06,00,03,00,00,00,01};
  unsigned char Buffer[400];
  int j=0;
  unsigned char usTmp = (unsigned char) iNombre;
       ucRequete[11]=usTmp;
       ucRequete[8]=SeparateFort(iPremier);
       ucRequete[9]=SeparateFaible(iPremier);
 
        Form1->ClientSocketModbus->Socket->SendBuf(ucRequete,12);
 
        Buffer[7]=0;
        Buffer[8]=0;
        do
        {
                Form1->ClientSocketModbus->Socket->ReceiveBuf(Buffer,400);
                j++;
        }
        while((Buffer[7]!='\x03')&&(Buffer[8]!=(2*iNombre))&&(j<1000000));
 
        if(j==1000000)
                Form1->Memo1->Lines->Add( "Premier " + IntToStr(iPremier) + " Nombre " + IntToStr(iNombre) + " attente " + IntToStr(j));
 
        ExtraireValeurTrame(Buffer, cTabValeur, iPremier,iNombre,iIndex);
        return true; 
}
mon probleme est que maintenant je voudrais ecrire plusieur mot avec le code 16
voila mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
void EcrireMotsModbus(unsigned short *usTab, int iPremier, int iNbr, int iIndex)
{
  unsigned char *BufferEnvoie, BufferW[20];
  unsigned char usTmp = (unsigned char)iNbr;
  unsigned char usTmp2 = (unsigned char)(iNbr*2);
  int j=0, iCpt=0;
 
        BufferEnvoie = new unsigned char [(iNbr*2)+13];
        BufferEnvoie[0]=00;
        BufferEnvoie[1]=00;
        BufferEnvoie[2]=00;
        BufferEnvoie[3]=00;
        BufferEnvoie[4]=00;
        BufferEnvoie[5]=06;
        BufferEnvoie[6]=00;
        BufferEnvoie[7]=16;
        BufferEnvoie[8]=SeparateFort(iPremier);
        BufferEnvoie[9]=SeparateFaible(iPremier);
        BufferEnvoie[10]=00;
        BufferEnvoie[11]=usTmp;
        BufferEnvoie[12]=usTmp2;
 
        for(int i=13; i<((iNbr*2)+13);i=i+2)
        {
                BufferEnvoie[i]=SeparateFort(usTab[iCpt+iIndex]);
                BufferEnvoie[i+1]=SeparateFort(usTab[iCpt+iIndex]);
                iCpt++;
        }
        //Envoie de la requete d'ecriture
        BufferW[7]=0;
        BufferW[8]=0;
        Form1->ClientSocketModbus->Socket->SendBuf(BufferEnvoie,(iNbr*2)+13);
        do
        {
                Form1->ClientSocketModbus->Socket->ReceiveBuf(BufferW,20);
                j++;
        }
        while((BufferW[7]!=16)&&(BufferW[8]!='\x90')&&(j<1000000));
}
mais bon l'automate ne repond jamais et la com plante meme parfois
jai essyer pas mal de chose mais rien n'y fais
quelqu'un pourais maider ?

cordialement baxter