Quantcast
Channel: Instrument Control (GPIB, Serial, VISA, IVI) topics
Viewing all articles
Browse latest Browse all 5680

VISA serial port reading/ writing

$
0
0

hi, i'm writing program for microcontroller that using serial port for reading and writing data.

after boot, program must to wait 10 seconds to receive data from serial port

code: init serial port by VISA

//init of ssp protocol
        viSetAttribute (ssp, VI_ATTR_TERMCHAR_EN, VI_FALSE);   //disable termination char
	viSetAttribute (ssp, VI_ATTR_ASRL_END_IN, VI_ASRL_END_LAST_BIT);
	viSetAttribute (ssp, VI_ATTR_ASRL_BAUD, 38400); 
	viSetAttribute (ssp, VI_ATTR_ASRL_PARITY, VI_ASRL_PAR_NONE);  
	viSetAttribute (ssp, VI_ATTR_TMO_VALUE, 15000); //TMO 15 seconds
	viFlush (ssp, VI_ASRL_IN_BUF_DISCARD);
	Sleep(1); 

reading from the port

if (!strcmp(command,"readBuffer")) //Reading TST 
{
incount = 0;
otcount = 0;
viGetAttribute(ssp, VI_ATTR_ASRL_AVAIL_NUM, &num_bytes);
while(num_bytes <= 3) 
{
viGetAttribute(ssp, VI_ATTR_ASRL_AVAIL_NUM, &num_bytes); 
viRead (ssp, Databuf, num_bytes, &RTCount);


Databuf[RTCount] = '\0';

viFlush (ssp, VI_WRITE_BUF);
viFlush (ssp, VI_READ_BUF);
packetdata = strtok(Databuf,";");

if(!strcmp(Databuf, ";TST;") || !strcmp(Databuf, ";TST") || !strcmp(Databuf, "TST;") || !strcmp(Databuf, "TST"))
{

InsertTextBoxLine (panelHandle, PANEL_DEBUGWINDOW , ++debugBoxLine, Databuf); 
//*************** Auto Scroll ***********************
SetCtrlAttribute (panelHandle, PANEL_DEBUGWINDOW, ATTR_FIRST_VISIBLE_LINE, debugBoxLine);
flagout = 1; nboards++;
return 1;
}

 are this code optimal , can i change and remove while loop from the code?

and another issue when i'm writing to the port

code:

if(!strcmp(command,";ANALOG;")) 
	{
	     Sleep(1);
	    incount = 0;
            otcount = 0;
	    num_bytes =0;
	    strcpy(command, ";IN?;");
	    viWrite(ssp, command, 10, &RTCount); //10 bytes
	    viGetAttribute(ssp, VI_ATTR_ASRL_AVAIL_NUM, &num_bytes);
	    while(num_bytes < 11)
	    {
			if(num_bytes < 5)
			{
	         		  viWrite(ssp, command, 10, &RTCount);
			}
			viGetAttribute(ssp, VI_ATTR_ASRL_AVAIL_NUM, &num_bytes);  
			viRead (ssp, Databuf, num_bytes, &RTCount);
            }
		    viFlush (ssp, VI_WRITE_BUF);
		    viFlush (ssp, VI_READ_BUF);
			Databuf[RTCount] = '\0';
			packetdata =  strtok(Databuf,";");

 when program sending command ;IN?; it's gets some data. but sometimes buffer is empty. and i added while loop for checking num_bytes for received data.

 

may be i can remove this while loops and use some VISA attributes? for waiting received data?

 

 

thanks

 


Viewing all articles
Browse latest Browse all 5680

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>