读书人

Edit应该有个变量对吧?解决方案

发布时间: 2013-09-06 10:17:17 作者: rapoo

Edit应该有个变量对吧?
下载了别人一个串口程序

能接受也能发送数据

但是我不知道哪个地方存储了这个数据

感觉应该是RX TX之类的名字

麻烦知道的大神告诉一下,明天就不用挨个试了,又或者猜想与运行机制不一样,那就悲催了。
(谁抢了我的自信心)

Edit应该有个变量对吧?解决方案

下面程序里的数组就有对不?


LRESULT CCOMDDlg::OnReceive(WPARAM wParam, LPARAM lParam)
{
//MessageBox("OK");
if (wParam == m_com.GetPort())
{
UpdateData();

do {

char buffer[1024];
int len = m_com.Read(buffer, 1023);
buffer[len] = _T('\0');
Rx_.Write(buffer, len);

if (m_bDisplay)
{
if (m_bRxHex)
{
char hex_buffer[1024*3];
Ascii2Hex(buffer, hex_buffer);
m_disp += hex_buffer;
}
else
m_disp += buffer;
}


/*if (m_bAutoSave)
{
FILE* fp;
fp = fopen(m_RxFileName, "a+");
fwrite(buffer, len, 1, fp);
fclose(fp);
}*/
//! 接收缓冲模式下,要确保把已经在Comm_.Input()缓冲区的数据处理完
//! 否则如果没有新的数据再来,不会继续通知你
//SendMessage(RichEdit1.Handle, EM_SCROLL, SB_LINEDOWN, 0);//下移

} while(m_com.IsRxBufferMode() && m_com.Input().SafeSize());

UpdateData(FALSE);
}

m_rRX.PostMessage(WM_VSCROLL,SB_BOTTOM,0);

return TRUE;
}



发送应该在下面这代码里面吧


void CCOMDDlg::OnSend()
{
// TODO: Add your control notification handler code here
UpdateData();

char* buffer = new char[m_sTx.GetLength()*2+1];

#ifdef UNICODE
int len = wcstombs(buffer, (LPCTSTR)m_sTx, m_sTx.GetLength());
buffer[len]= 0;
#else
strcpy(buffer, (LPCTSTR)m_sTx);
int len = m_sTx.GetLength();
#endif

if (m_bTxHex)
{
for(int i =0;i<len;i++)
{
char c = toupper(buffer[i]);
if( !( (c>='0'&& c<='9') || (c>='A'&& c<='F') || c == ' ' ) )
{
MSG("发送失败,发送内容为非十六进制");
return;
}
}


int HexCnt = Hex2Ascii(buffer, buffer);

if (m_com.IsOverlappedMode() || m_com.IsTxBufferMode())
m_com.Write(buffer, HexCnt);
else
{
for (int i = 0; i<HexCnt; i++ )
i += m_com.Write(buffer + i, HexCnt - i);


}
}
else
{//! 重叠模式下或者缓冲区模式下 可以不检查输出返回值,并直接输出
if (m_com.IsOverlappedMode() || m_com.IsTxBufferMode())
m_com.Write(buffer);
else
{//! 阻塞非缓冲区模式 必须检查返回值,确保数据完全发送出
for (int i = 0; i<len; i++ )
i += m_com.Write(buffer + i, len - i);
}
}

delete[] buffer;
}

串口 通信 vc 求助 查找数据
[解决办法]
你试了吗???结果怎样???

学习中。。。
[解决办法]
m_disp += hex_buffer;
}
else
m_disp += buffer;

网上有个手把手教写串口通讯的程序,照着做一遍就会了。
[解决办法]
一方面 m_disp存了数据,可能是用于处理的
另一方面 原来还用文本文档记录了下来m_RxFileName

m_rRX就不知道什么么了
[解决办法]
首先,命名不太规范。


发送的数据放在变量:m_sTx中,猜测,应该是个CString类型的;
接受的数据被先放在buffer中,然后写到了Rx_中:Rx_应该是专门处理接受数据的类,里面的Write函数,你可以看看。
[解决办法]
推荐使用portmon软件辅助调试串口通讯程序。
[解决办法]
int len = wcstombs(buffer, (LPCTSTR)m_sTx, m_sTx.GetLength());
这里就是有你需要的数据吗, m_sTx就是保存了要发送的数据, 应该是与编辑框关联的CString变量.

读书人网 >C++

热点推荐