基于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];
}
本人分数不多了,希望路过的各位大侠同仁能畅所欲言。
不胜感激