You are not logged in.
Pages: 1
Dobrý den,
chtěl bych se zeptat jestli je nějaké omezení velikosti bufferu ve funkci "Read" pro TCP clienta. Pokud zvolím velikost bufferu 2048, tak to vypadá, že se stopne provádění bloku REXLANG při prvním pokusu o provedení funkce "Read". Zkusmo jsem ho zmenšil na 255 a to funguje, ale já bych potřeboval 2048.
Díky.
Tady je kód:
#define ipadr "192.168.0.7"
#define pport 5002
#define bufout 7
#define bufin 2048
//assigning inputs to variables, these variables are READ-ONLY
double input(0) firstinput; //value from u0 input
double input(1) secondinput; //value from u1 input
//add inputs as needed
//assigning parameters to variables, these variables are READ-ONLY
double parameter(0) firstparameter; //parameter p0
double parameter(1) secondparameter; //parameter p1
//add parameters as needed
//assigning variables to outputs, these variables are WRITE-ONLY
long output(15) handle; //handle of the UDP socket
long output(14) dataPrij; //handle of the UDP socket
long output(13) dataVys; //handle of the UDP socket
long output(12) citSendErr; //handle of the UDP socket
long output(11) citCykl; //handle of the UDP socket
long output(0) vystup0; //value to send to y0 output
double output(1) secondoutput; //value to send to y1 output
//add output signals as needed
long hSendLoc; //socket handle
long buffwr[bufout]; //buffer for incoming data
long buffre[bufin]; //buffer for incoming data
long dataCnt; //number of bytes sent
long dataCnt2; //number of bytes sent
long odeslano;
long prijato;
//long dataPrij; //number of bytes receive
long convData[2]; //array for data conversions
//the init procedure is executed once when the REXLANG function block initializes
long init(void)
{
/* PUT YOUR CODE HERE */
hSendLoc=-1;
odeslano=0;
prijato=-1;
//citSendErr=0;
return 0;
}
//the main procedure is executed repeatedly (once in each sampling period)
long main(void)
{
/* PUT YOUR CODE HERE */
//firstoutput = firstinput + secondinput;
//secondoutput = firstparameter + secondparameter;
if(hSendLoc<0){
hSendLoc=OpenTCPcli(ipadr,pport);
}
else{
//dataCnt2=Read(hSendLoc,buffre,bufin);
buffwr[0]='X';
buffwr[1]='x';
buffwr[2]='x';
buffwr[3]='x';
buffwr[4]='x';
buffwr[5]=13;
buffwr[6]=10;
if(odeslano==0){
dataCnt=Write(hSendLoc,buffwr,bufout);
odeslano=1;
}
else{
dataCnt2=Read(hSendLoc,buffre,bufin);
citSendErr++;
if(dataCnt2>0){
odeslano=0;
citSendErr=0;
}
}
//odeslano=1;
dataVys=dataCnt;
dataPrij=dataCnt2;
if(dataVys==-309){
Close(hSendLoc);
hSendLoc=-1;
}
//dataCnt2=Read(hSendLoc,buffre,bufin);
//vystup0=buffre[1910]*256+buffre[1911];
}
handle=hSendLoc;
citCykl++;
return 0;
}
//the exit procedure is executed once when the task is correctly terminated
// (system shutdown, downloading new control algorithm, etc.)
long exit(void)
{
if(hSendLoc>=0) Close(hSendLoc);
return 0;
}
Offline
Nový poznatek:
poslední velikost při které to funguje je 2047, mám asi smůlu.
Offline
Dobrý den,
zkuste změnit parametr strs bloku REXLANG na 32768, to by mohlo pomoci. Smůlu určitě nemáte, nějaké řešení najdeme.
S pozdravem
Jaroslav Sobota
Monarco HAT for Raspberry Pi - Lightweight I/O for monitoring, archiving and control.
Raspberry Pi in industrial automation!
Offline
Díky,
teď už to funguje.
Offline
Pages: 1