用MSComm串口控件做串口通讯程序. 程序是从原来一个工作OK的VC工程中移植过来的. 现在调试发现, 下位机可以收到数据, 但回发数据给PC时候, PC端接收程序
void CMiniTesterDlg::OnOnCommMscomm1()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
// unsigned char* sample = (unsigned char*)&TheLayout.Response_From_Slave;
CString stemp;
COleSafeArray safearray_inp;
LONG len,k,j=0;
BYTE rxdata[1024];
CString strtemp;
if(m_ComPort.GetCommEvent()==2)
{ variant_inp = m_ComPort.GetInput(); //当下位机发数据给PC时候可以响应中断到这里后就无法运行下面.
safearray_inp=variant_inp;
...调试时候发现每收到数据时候只能运行到variant_inp = m_ComPort.GetInput(); 后面的没执行.
void CMiniTesterDlg::OnOnCommMscomm1()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
// unsigned char* sample = (unsigned char*)&TheLayout.Response_From_Slave;
CString stemp;
COleSafeArray safearray_inp;
LONG len,k,j=0;
BYTE rxdata[1024];
CString strtemp;
if(m_ComPort.GetCommEvent()==2)
{ variant_inp = m_ComPort.GetInput(); //当下位机发数据给PC时候可以响应中断到这里后就无法运行下面.
safearray_inp=variant_inp;
...调试时候发现每收到数据时候只能运行到variant_inp = m_ComPort.GetInput(); 后面的没执行.
int n=m_ComPort.GetInBufferCount()看一下里面有没有数据
还有你确定进入了if(m_ComPort.GetCommEvent()==2) {}中么
我在m_ComPort.GetInput(); 前面增加了这行. K的数据与预期一致, 就是运行到GetInBufferCount()里面就没反应了, 这些代码确定在if(m_ComPort.GetCommEvent()==2)里面
我初始化程序是:
DWORD style = WS_VISIBLE | WS_CHILD;
if (!m_ComPort.Create(NULL,style,CRect(0,0,0,0),this,IDC_MSCOMM1))
{
TRACE0("Failed to create OLE Communications Control\n"); // fail to create
return 0;
}
// m_ComPort.SetCommPort(1); //Ñ¡Ôñcom
if( !m_ComPort.GetPortOpen())
m_ComPort.SetPortOpen(TRUE);//´ò¿ª´®¿Ú
else
{
AfxMessageBox("cannot open serial port");
return 0;
} m_ComPort.SetSettings("9600,n,8,1"); //²¨ÌØÂÊ9600£¬ÎÞУÑ飬8¸öÊý¾Ý룬1¸öֹͣλ
m_ComPort.SetInputMode(1); //1£º±íʾÒÔ¶þ½øÖÆ·½Ê½¼ìÈ¡Êý¾Ý
//m_ComPort.SetRThreshold(Receive_Size);
m_ComPort.SetRThreshold(1); //²ÎÊý1±íʾÿµ±´®¿Ú½ÓÊÕ»º³åÇøÖÐÓжàÓÚ»òµÈÓÚ1¸ö×Ö·ûʱ½«Òý·¢Ò»¸ö½ÓÊÕÊý¾ÝµÄOnCommʼþ
m_ComPort.SetInputLen(0); //ÉèÖõ±Ç°½ÓÊÕÇøÊý¾Ý³¤¶ÈΪ0
m_ComPort.GetInput(); //ÏÈÔ¤¶Á»º³åÇøÒÔÇå³ý²ÐÁôÊý¾Ý
SetInBufferSize(512);
SetOutBufferSize(512);