首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

求带,求指导,

2013-06-26 
求带,求指点,急急急急急急!!!!!!!!!!用mfc做的上位机的串口测试程序,但是收发数据不一致,如发送12345,接收

求带,求指点,急急急急急急!!!!!!!!!!
用mfc做的上位机的串口测试程序,但是收发数据不一致,如发送12345,接收的确是1122334455,就指点。



上位机程序:
while (1)
{
com->put_Output(COleVariant(data));
theDlg->m_prompt.AddString("PC端发送232口数据完成");

//5.result(status + len + data) <- cpmvs out_of_cpm_inner_loop
CByteArray _inbytes;
int _inlen = 0;

memset(buf, 0, 1024);

while(_inlen < data_len)
{
num = 0;
while(!num)
num = com->get_InBufferCount();

COleVariant _indata(com->get_Input());
_indata.GetByteArrayFromVariantArray(_inbytes);

if (_inbytes.GetCount())
{
memcpy(buf + _inlen, _inbytes.GetData(),  _inbytes.GetCount());
_inlen += _inbytes.GetCount();
}

}


theDlg->m_prompt.AddString(buf);
}

下位机:


while(1)
{

nrecv = 0;
while(nrecv < datalen)
{
memset(recvBuf,0,512);
n = 0;
while ( 0 >= n )
{
n = read(testConsoleFd, recvBuf, datalen - nrecv);
logMsg("read = %d,buf = %s\n", n,recvBuf,0,0,0,0);
}
logMsg("one time read %d\n",n);
nrecv += n;
_lenToRecv = n;
int currLen=0;
int lensend=0;
while(currLen<_lenToRecv)
{
lensend = write(testConsoleFd, recvBuf+currLen, _lenToRecv-currLen );
logMsg("to snd = %d, done = %d,sndbuf = %s\n", _lenToRecv-currLen, lensend,recvBuf+currLen,0,0,0);
currLen+=lensend;
/*logMsg("to write %d bytes,write %d bytes\n",lenToSend,currLen,0,0,0,0);*/
}
}


} MFC 测试
[解决办法]
由Windows版移至MFC版
[解决办法]
串口电缆 有问题 tx,rx 短路了 ?
[解决办法]
恩。楼上说的是一个问题点。
[解决办法]
上面说得都不太靠谱,LZ的这个串口通信控件我用过,似乎是CMscomm1吧???。我是这么用的,仅供参考:
首先,串口通信的收、发操作不要放在一起,即不要放在一个while(1)死循环里面。
发送数据用m_Comm.put_Output(COleVariant(data))是没有问题的。
发送问题:
串口通信控件的接收事件标示符是“2”。我是这样用的:
void COperation::OnCommMscomm1()//串口接收M数据并处理
{
[align=left]int nEvent=m_Comm.get_CommEvent();//得到事件
switch(nEvent)
{
case 2://接收数据事件
{
VARIANT variant_inp; 
COleSafeArray safearray_inp; 
long len,k; 
CString mydata;
CString temp;
k=m_Comm.get_InBufferCount();//接收缓冲区字符数
if(k>0)
{
variant_inp=m_Comm.get_Input(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++) 


safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
}

}

default:
break;
}[/align]}

接收数据都存在BYTE   rxdata[1024]这个数组里面了。

[解决办法]
第4行说错了,应该是“接收问题”。

热点排行