基于vc的上位机程序与下位机通信接收有关问题

基于vc的上位机程序与下位机通信接收问题
各位大侠好,本人用VC++编了一个与DSP通信的上位机程序,采用的MSCOMM控件,程序已编好,但测试老出问题,现把问题叙述如下:
  刚开始测试的时候上位机发送数据在DSP里面可以接收到,接收数据就是接收不到,后来我把串口的两根线短接在一起,发送数据端发出数据,接收端也能接收到我要的数据,纠结了几天,不知道为什么连上DSP就接收不到,怀疑时接收问题,下位机已经看了好几遍,感觉没问题,不知各位大侠碰到过此种情况没?希望能给分析下毛病,不吝赐教
  我的上位机要求就是接收我采集的电压电流信号,一种采集4组,加上通信协议两个字节一共接收10个字节,,现在把我接受代码附上一段,各位大侠给分析下有什么纰漏。
  m_mscom.SetCommPort(myCom); //根据当前串口号选择所要打开的串口
m_mscom.SetPortOpen(true); //打开串口
m_mscom.SetSettings(strPara); //波特率,校验位,数据位,停止位设置
m_mscom.SetRThreshold(10); //参数10表示每当串口接收缓冲区中有多于或等于10个字符时,将引发一个接收数据的OnComm事件
m_mscom.SetInputMode(1); //设置数据获取方式2进制方式
m_mscom.SetInputLen(10); //每次从输入缓冲读取10个字符
m_mscom.GetInput(); //先预读缓冲区以清除残留数据
m_mscom.SetInBufferCount(0); //清空接收缓冲区


  VARIANT variant_inp,variant_inp2;
  COleSafeArray safearray_inp,safearray_inp2;
  LONG len,k,i,j=0;
  BYTE rxdata[2048],bt1; //设置BYTE数组 An 8-bit integer that is not signed.
  CString strtemp,temp,strtemp2;
int a[4];

  if(m_mscom.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
  {  
////////根据通信协议加入处理代码
  variant_inp=m_mscom.GetInput(); //读缓冲区 
  safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
  len=safearray_inp.GetOneDimSize(); //得到有效数据长度
if(len=10)
{
  for(k=0;k<len;k++)
  safearray_inp.GetElement(&k,rxdata+k); //转换为BYTE型数组
for(i=0;i<len;i++)
{
BYTE bt=*(char*)(rxdata+i); //字符型
strtemp.Format(_T("%02x"),bt); //将字符以十进制方式送入临时变量strtemp存放,注意这里加入一个空隔
m_ReceiveData+=strtemp; //加入接收编辑框对应字符串
}

if((rxdata[0]==0xFF)&&(rxdata[1]==0x81))
{
{
a[0]=rxdata[2]*256+rxdata[3];
a[1]=rxdata[4]*256+rxdata[5];
a[2]=rxdata[6]*256+rxdata[7];
a[3]=rxdata[8]*256+rxdata[9];
}
  本人分数不多了,希望路过的各位大侠同仁能畅所欲言。
  不胜感激



------解决方案--------------------
你短接了之后, 当然就是自收自发了,解决问题要用可靠的部分来逐步定位,比如用一根经常测试的数据线。
换一个没问题软件向下发,来测试dsp有没有问题,dsp、数据线都没有问题,你才能确定是你软件有问题。

------解决方案--------------------
一般来说,测试上下位机通信。
先使用工具测试你的下位机,完全通信成功后,在用来调试你的上位机。
不然你话,你都不知道错误在哪里。

加入下位机不是你开发的,你根本就无法证明是否是下位机的错误。

先使用串口精灵之类的调试你的开发板。
确认是 OK 了之后,在调试你的程序。
//如果你的程序功底足够深,就可以通过你的程序确定是上,还是下位机的问题了。//呵呵
------解决方案--------------------
波特率、串口线、调试工具都很重要
------解决方案--------------------
按楼上各位说的,一块一块调,等各部分都没问题了,再联调,这时如果有问题就是配合了,这就好改了

------解决方案--------------------
你是不是绑定了编辑框?
那么如果你不停的 UpdateData,新填写进去的数据怎么保存呢?
------解决方案--------------------
你接收到数据后是怎么显示的,看看显示部分,不是接收频率太快,肯定有哪块用到UpdateData()这个函数了.如果在接收到显示这部分没用到UpdateData()这个函数,就在resource.h这个文件里,看看有没有重复的ID,如果有就改成唯一个ID,也有可能是ID重复造成的,有时候ID会重复的,需要手工改
------解决方案--------------------
另个,可以响应编辑框控件的改变事件,名字忘了,可以双击这个编辑框控件就产生这个消息了.在这个消息里读取数据:
data=GetDlgItemint(IDC_EXIT1);//这是数值型
GetDlgItemText(IDC_EDIT1,data);//这是字符型的数据
------解决方案--------------------
串口的确不能发送太快,一般发完一个包要Sleep一下,具体时间可以自己测
上位机可以直接给控件赋值啊
SetDlgItermInt之类
------解决方案--------------------