Bonjours, jai un créer une interface qui permet de lire des mots dans un automate TSX, et sa fonctionne tres bien
mon probleme est que maintenant je voudrais ecrire plusieur mot avec le code 16
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; }
voila mon code :
mais bon l'automate ne repond jamais et la com plante meme parfois
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)); }
jai essyer pas mal de chose mais rien n'y fais
quelqu'un pourais maider ?
cordialement baxter
Partager