#1 2017-11-10 11:02:50

arthurkuk
Member
Registered: 2017-11-10
Posts: 3

REXLANG a TCP client

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

#2 2017-11-10 11:07:32

arthurkuk
Member
Registered: 2017-11-10
Posts: 3

Re: REXLANG a TCP client

Nový poznatek:
poslední velikost při které to funguje je 2047, mám asi smůlu.

Offline

#3 2017-11-10 11:40:49

jaroslav_sobota
Administrator
Registered: 2015-10-27
Posts: 524

Re: REXLANG a TCP client

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

Offline

#4 2017-11-10 12:04:39

arthurkuk
Member
Registered: 2017-11-10
Posts: 3

Re: REXLANG a TCP client

Díky,
teď už to funguje.

Offline

Board footer

Powered by FluxBB