当前位置: 代码迷 >> WinCE >> 向串口发送命令后怎么读取返回值
  详细解决方案

向串口发送命令后怎么读取返回值

热度:3575   发布时间:2013-02-26 00:00:00.0
向串口发送命令后如何读取返回值
以下是我发命令的代码,麻烦帮我看看怎么读取返回值啊,能不能紧接着发数据的代码读啊,我懂得是在是少,恳请帮忙!!
DCB   PortDCBzt; 
HANDLE hPortzt;
COMMTIMEOUTS ctozt;
HANDLE hThreadzt;//创建线程

/***初始化*************************/
ctozt.ReadIntervalTimeout = 0;
ctozt.ReadTotalTimeoutMultiplier = 0;
ctozt.ReadTotalTimeoutConstant = 0;
ctozt.WriteTotalTimeoutMultiplier = 0;
ctozt.WriteTotalTimeoutConstant = 0;
SetCommTimeouts (hPortzt, &ctozt);//设定超时
if (hThreadzt)
    CloseHandle (hThreadzt);
PurgeComm(hPortzt,PURGE_TXCLEAR|PURGE_RXCLEAR);

/***打开端口*************************/
hPortzt=CreateFile(C综合控制App::ytSerialPort+_T(":"), GENERIC_READ|GENERIC_WRITE,0, NULL,  OPEN_EXISTING,0, NULL);   

if(hPortzt==INVALID_HANDLE_VALUE)   

AfxMessageBox(_T( "open com port error ! ")); 
}

        GetCommState   (hPortzt, &PortDCBzt);                  //配置串口
PortDCBzt.DCBlength= sizeof (DCB);   
PortDCBzt.BaudRate= CBR_9600;   
PortDCBzt.fBinary = TRUE;   
PortDCBzt.fParity=  FALSE;   
PortDCBzt.ByteSize= 8;   
PortDCBzt.Parity= NOPARITY;   
PortDCBzt.StopBits= ONESTOPBIT;

if(!SetCommState(hPortzt, &PortDCBzt)) 

AfxMessageBox(_T( "Set com port error ! ")); 



/***发命令函数*************************/
unsigned char up_act[8]={0xFF,0x01,0x00,0x51,0x1C,0x1C,0x8A,0x00};

DWORD dwBytesWrite=32;
COMSTAT ComStat;
DWORD dwErrorFlags;
BOOL bWriteStat;
ClearCommError(hPortzt,&dwErrorFlags,&ComStat);
bWriteStat=WriteFile(hPortzt,up_act,dwBytesWrite,& dwBytesWrite,NULL);

if(!bWriteStat)
{
AfxMessageBox(_T("写串口失败!"));
}
PurgeComm(hPortzt, PURGE_TXABORT|
PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);

------解决方案--------------------------------------------------------
最好是单独开一个线去ReadFile。
------解决方案--------------------------------------------------------
串口读取操作是在线程中处理的,就如楼上说的,你要创建一个线程。然后在线程里面ReadFile读取串口数据
------解决方案--------------------------------------------------------
发送完 就可以直接调用readfile函数读取啊
另外 writefile之后马上PurgeComm 会有问题的
------解决方案--------------------------------------------------------
用SerialPort类吧,这样串口编程就简单多了,而且这个类支持多线程的
------解决方案--------------------------------------------------------
创建线程,在线程内监听READFILE函数
------解决方案--------------------------------------------------------
http://www.gjwtech.com/serialcomm.htm

是讲串口技术的,楼主可参考。
------解决方案--------------------------------------------------------
WriteFile(); ReadFile();  可以在一起..试下?
------解决方案--------------------------------------------------------
引用:
引用:发送命令后,设个超时循环等待接收,超过时间跳出,并标志为超时接收。
也可以如楼上,开个线程接数据。
但一般做实时性高的,建议开个死循环,判定时间未到,则一直等接数据。
读线程和写线程怎么调度啊?用事件吗?

快一个月了还没写完么?

开 一个读线程不停地循环读取数据
在线程中可以调用WaitCommEvent 检测到EV_RXCHAR 事件 时 再readfile读取数据
  相关解决方案