Example #1
0
int CKTXSerialPortCtrl::OpenCom(int iPort,int iBraudrate/*=115200*/,int iByteSize/*=8*/,int iParity/*=0*/ ,int iStopBits/*=1*/,int iContorl/*=0*/)
{
    CMyMutex::CAutoLock lock(m_mutex);

    if(ERR_KEY != m_iFD)
        return KTX_SUCCESS;

    if(0==(iPort&0xFF))
        return KTX_ERR;

    char csDevPath[100]={0};
    if(iPort&0x0F00)
        sprintf(csDevPath,"/dev/ttyUSB%d",(iPort&0xFF)-1);
    else if(iPort&0xF000)
        sprintf(csDevPath,"/dev/ttySNX%d",(iPort&0xFF)-1);
    else
        sprintf(csDevPath,"/dev/ttyS%d",iPort-1);

    int iRet = KTX_ERR;
    m_iFD = open(csDevPath,O_RDWR|O_NOCTTY|O_NDELAY);
    if(m_iFD<0)
        return iRet;

    if(fcntl(m_iFD,F_SETFL,0)<0)
    {
      CloseCom();
      return iRet;
    }

    setparms(m_iFD, iBraudrate, iParity, iByteSize,  iStopBits, iContorl, iContorl);
   // SetSerialPort(m_iFD,iBraudrate,iByteSize,iParity,iStopBits,iContorl);

    return KTX_SUCCESS;
}
int main()
{
	unsigned char msb,lsb;
	int digi_val=5;
    //char s[256];
	//int len;
	int i;
	OpenCom();

	for(i=0;i<10000;i++){


	// sending data
			//WriteComChar(0x42);		WriteComChar(0x43);
	WriteComChar(0x41);//WriteCom("ABCDE", 5);
	Sleep(1);

	// receiving data
	//len = ReadCom(s, sizeof(s)-1);	s[len] = 0;	printf("%s\n", s);

    msb=ReadComChar();
	lsb=ReadComChar();
	//printf("%d\t",(int)msb);
	//printf("%d\t",(int)lsb);
	digi_val=(int)msb*256+(int)lsb;
    if (i%100==5)
    printf("%lf\n",digi_val*3.314/4096.0);
    //getchar();
    }


	CloseCom();
	printf("\nPress a key to exit");	getch();
	return 0;
}
Example #3
0
bool SerialClass::OpenCom()
{
    if(my_com_)
    {
        CloseCom();
    }
    else
    {
        QString com_name_ = "/dev/ttySAC1";
        my_com_ = new Posix_QextSerialPort(com_name_, QextSerialBase::Polling);
    }

    my_com_->open(QIODevice::ReadWrite);
    if(my_com_->isOpen())
    {
        com_state_ = OPEN;
        my_com_->setBaudRate(BAUD115200);
        my_com_->setDataBits(DATA_8);
        my_com_->setParity(PAR_NONE);
        my_com_->setStopBits(STOP_1);
        my_com_->setFlowControl(FLOW_OFF);
        my_com_->setTimeout(50);
    }
    else
    {
        com_state_ = false;
    }



    return true;
}
Example #4
0
/****************************************************************************
*功能:释放com通信器
****************************************************************************/
int ReleaseCOMCommunicator(Communicator* p)
{
   if(p->m_nCommtype==COMM_COM)
   {
	   p->m_nCommtype=NOT_CONNECT;
	   EnterCriticalSection(&p->comConn->cs_initilize);
	   if(p->comConn->reference<=0)
	   {
		   p->comConn->reference=0;
		   LeaveCriticalSection(&p->comConn->cs_initilize);
		   return SCERR_INVALID_COMM;
	   }
	   p->comConn->reference--;
	   if(p->comConn->reference==0)
	   {
		   if(0!=CloseCom(p->comConn->comPort))
		   {
		//	   TRACE("reference:%d\n",p->comConn->reference);
			   LeaveCriticalSection(&p->comConn->cs_initilize);
			   return SCERR_OPERROR;
		   }
	   }
	   LeaveCriticalSection(&p->comConn->cs_initilize);
	   delete p;
	   return SC_SUCCESS;
   }
   return SCERR_INVALID_COMM;
}
Example #5
0
CKTXSerialPortCtrl::~CKTXSerialPortCtrl()
{
    if(m_iFD != ERR_KEY)
     {
        CloseCom();
        m_iFD = ERR_KEY;
    }
}
Example #6
0
void SerialClass::ReleaseSerial()
{
    if(my_com_)
    {
        CloseCom();
        delete my_com_;
        my_com_ = 0;
    }
}
BOOL ComIO::MainProc()
{
  if(hCom == NULL)
  {
    OpenAndInitCom();
    if(hCom == NULL)
      Sleep(10);
  }
  else
  {
  if(!Te.WaitForTimeOut())
  {
    if(TaskMark & 0x01)
    {
      Wret = CommPort_Write(hCom, pWd);
      printf("Com Write:%s\r\n",pWd);
      TaskMark &= ~0x01;
      We.Set();
      if(Wret == -1)
      {
        CloseCom();
      }
    }
    if(TaskMark & 0x02)
    {
      Rret = CommPort_Read(hCom, pRb, Rbl);
      TaskMark &= ~0x02;
      Re.Set();
      if(Rret == -1)
      {
        CloseCom();
      }
    }
  }
  }

  return -1;
}
Example #8
0
ComRWTool::~ComRWTool(void)
{
    try
    {
        CloseCom();
    }
    catch (...)
    {
    }

    m_hComm = NULL;
    m_hQuitEvent = NULL;
    m_bOpen = false;
    m_pCache = NULL;
    m_iCacheLen = 0;
}
//OpenPort-------------------------------
//Initialize COM port, make stepper motor's current position home (0)
//Input: None
//Ouput: RS232 error code
int zStepperDriver::OpenPort()
{
	int RS232Error;
	char out[5];
	char ptName[4];

	//Initialize comm port
	CloseCom(prevPort);
	
	sprintf(ptName,"COM%i ",port);
	
	RS232Error = OpenComConfig (port, ptName, 9600, 0, 8, 1, 512, 512);
	SetXMode (port, 0);
	SetCTSMode (port, 1); 
	SetComTime (port, 10);
	
	sprintf(out, "HM0\r");
	ComWrt(port, out, strlen(out));

	//set previous port as newly opened port
	prevPort = port;
	
	return RS232Error;
}
Example #10
0
File: rkc.c Project: wft999/25m
int RKC_CommData ( int _ACT, int _ID, double *_Val)
{
	int rLop = 0;
	int RTNval = 0;
	int BuffLEN = 0;
	char Buff[128]={0};
	char BBC = 0x00;
	char dTRN[64] = {0};
	static int Rs232Err = 0, NullPort = 0;
	
	switch (_ACT)
	{
		case Config:
			CloseCom(rkc.COM);
			if (Rs232Err = ReturnRS232Err (), Rs232Err < 0)
				return  Rs232Err;
			
			OpenComConfig(rkc.COM, "", rkc.Baud, rkc.Pari, rkc.Dbit, rkc.Sbit, 512, 512);
			if (Rs232Err = ReturnRS232Err (), Rs232Err < 0)
			{
				NullPort = 1;
				return  Rs232Err;
			}
			
			SetCTSMode(rkc.COM, rkc.Flc);
			if (Rs232Err = ReturnRS232Err (), Rs232Err < 0)
				return  Rs232Err;

			SetComTime(rkc.COM, rkc.Tout);
			if (Rs232Err = ReturnRS232Err (), Rs232Err < 0)
				return  Rs232Err;
			
			NullPort = 0;
		break;
			
		case getTP:
			
			Fmt(Buff, "%c%i[w2p0]%s[w2]%c", _EOT, (_ID & 0xFF), "M1", _ENQ);
			// MessagePopup("getTP",Buff);  //DJ_Added_0502KB_12_57
			
			break;
											   
		case getSP:
			Fmt(Buff, "%c%i[w2p0]%s[w2]%c", _EOT, (_ID & 0xFF), "S1", _ENQ);
		break;

		case getAL1:
			Fmt(Buff, "%c%i[w2p0]%s[w2]%c", _EOT, (_ID & 0xFF), "A1", _ENQ);
		break;

		case getAL2:
			Fmt(Buff, "%c%i[w2p0]%s[w2]%c", _EOT, (_ID & 0xFF), "A2", _ENQ);
		break;

		case getAT:
			Fmt(Buff, "%c%i[w2p0]%s[w2]%c", _EOT, (_ID & 0xFF), "G1", _ENQ);
		break;

		case getST:
			Fmt(Buff, "%c%i[w2p0]%s[w2]%c", _EOT, (_ID & 0xFF), "G2", _ENQ);
		break;

		case setRUN:
			Fmt(Buff, "%c%i[w2p0]%c%s[w2]%f[p1]%c", _EOT, (_ID & 0xFF), _STX, "SR", *_Val, _ETX);
		break;

		case setSP:
			Fmt(Buff, "%c%i[w2p0]%c%s[w2]%f[p1]%c", _EOT, (_ID & 0xFF), _STX, "S1", *_Val, _ETX);
		break;

		case setAL1:
			Fmt(Buff, "%c%i[w2p0]%c%s[w2]%f[p1]%c", _EOT, (_ID & 0xFF), _STX, "A1", *_Val, _ETX);
		break;

		case setAL2:
			Fmt(Buff, "%c%i[w2p0]%c%s[w2]%f[p1]%c", _EOT, (_ID & 0xFF), _STX, "A2", *_Val, _ETX);
		break;

		case setAT:
			Fmt(Buff, "%c%i[w2p0]%c%s[w2]%f[p1]%c", _EOT, (_ID & 0xFF), _STX, "G1", *_Val, _ETX);
		break;

		case setST:
			Fmt(Buff, "%c%i[w2p0]%c%s[w2]%f[p1]%c", _EOT, (_ID & 0xFF), _STX, "G2", *_Val, _ETX);
		break;
			
		case setPB:
			Fmt(Buff, "%c%i[w2p0]%c%s[w2]%f[p1]%c", _EOT, (_ID & 0xFF), _STX, "PB", *_Val, _ETX);
		break;
	}

	if (NullPort)
	{
		*_Val = 0.00;
	}
	
	// Command Transfer Process
	if ((_ACT > 0x1F) && (NullPort == 0))
	{
		// ========================================================= [ Set RKC Data ]
		// Flush Out Queue
		FlushOutQ (rkc.COM);
		Delay(0.5);
		
		// Count Buffer Length
		BuffLEN = StringLength (Buff);
		// Calc BBC
		BBC = 0x00;
		for (rLop=4; rLop < BuffLEN; rLop++)	BBC ^= Buff[rLop];
		// Append BBC
		Fmt ( Buff, "%s[a]<%c", BBC); 
		BuffLEN +=1;
		// Sending Command
		ComWrt ( rkc.COM, Buff, BuffLEN);
		
		// Flush In Queue	
		FlushInQ (rkc.COM);
		Delay(0.5);
		ComRd (rkc.COM, dTRN, 1);

		if (dTRN[0] == 0x06)
			RTNval =   0;	// Sending OK
		else if (dTRN[0] == 0x15)
			RTNval = -10;	// Sending Lost
		else	
			RTNval =  -1;	// Connect Lost
	} 
	else if ((_ACT > 0x0F) && (NullPort == 0))
	{
		// ========================================================= [ Get RKC Data ]
		// Flush OUT Queue	
		FlushOutQ (rkc.COM);
		Delay(0.5);

		// Send CMD
		ComWrt ( rkc.COM, Buff, 6);
		
		// Flush IN Queue
		FlushInQ (rkc.COM);
		Delay(0.5);

		// Receive CMD
		dTRN[0] = 0x00;
		ComRd (rkc.COM, dTRN, 11);
		Rs232Err = ReturnRS232Err();
		if (ReturnRS232Err() == 0)
			Scan (dTRN ,"%s[i5]>%f", _Val);


		Delay(0.5);
		Fmt ( Buff, "%c%c", _EOT, 0x00);
		ComWrt (rkc.COM, Buff, 1);	
	}
	return RTNval;
}
ComIO::~ComIO()
{
  CloseCom();
  Terminate();
}
Example #12
0
int ComRWTool::OpenCom(const char* pPort, int nBaudRate, int nParity, int nByteSize, int nStopBits)
{
    if (m_bOpen)
    {
        return COMMUN_ERROR_OK;
    }
    if (pPort == NULL)
    {
        return COMMUN_ERROR_BAD_PARARM;
    }
    string strCom = pPort;
    if (strCom.find("\\\\.\\") == strCom.npos)
    {
        strCom = "\\\\.\\" + strCom;
    }
    if(m_hComm != NULL)
    {
        CloseHandle(m_hComm);
        m_hComm = NULL;
    }
    DCB dcb;		// 串口控制块
    COMMTIMEOUTS timeouts = {	// 串口超时控制参数
        100,				// 读字符间隔超时时间: 100 ms
        1,					// 读操作时每字符的时间: 1 ms (n个字符总共为n ms)
        500,				// 基本的(额外的)读超时时间: 500 ms
        1,					// 写操作时每字符的时间: 1 ms (n个字符总共为n ms)
        100};				// 基本的(额外的)写超时时间: 100 ms

        m_hComm = CreateFileA(strCom.c_str(),	// 串口名称或设备路径
            GENERIC_READ | GENERIC_WRITE,	// 读写方式
            0,				// 共享方式:独占
            NULL,			// 默认的安全描述符
            OPEN_EXISTING,	// 创建方式
            0,				// 不需设置文件属性
            NULL);			// 不需参照模板文件

        if(m_hComm == NULL || m_hComm == INVALID_HANDLE_VALUE) 
        {
            CK_OutputDebugString("打开串口失败 err:%d",GetLastError());
            return COMMUN_ERROR_FAIL;		// 打开串口失败
        }

        GetCommState(m_hComm, &dcb);		// 取DCB

        dcb.BaudRate = nBaudRate;
        dcb.ByteSize = nByteSize;
        dcb.Parity = nParity;
        dcb.StopBits = nStopBits;

        SetCommState(m_hComm, &dcb);		// 设置DCB

        SetupComm(m_hComm, 4096, 1024);	// 设置输入输出缓冲区大小

        SetCommTimeouts(m_hComm, &timeouts);	// 设置超时

        PurgeComm(m_hComm ,PURGE_TXCLEAR|PURGE_RXCLEAR);

        m_strPort = pPort;
        GetCommState(m_hComm, &dcb);
        m_hQuitEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
        if (NULL == m_hQuitEvent)
        {
            CK_OutputDebugString("COM:Create m_hEventQuit failed!err:%d",GetLastError());
            CloseCom();
            return COMMUN_ERROR_HANDLE_FAILED;
        }


        m_bOpen = true;
        return COMMUN_ERROR_OK;
}