我做的一个程序是读机器发送到串口里的指令,并给与回复.我断点调试的时候可以通过,但是一执行就报错,请高手帮我看看代码,看看哪个地方有问题.有问题的函数我都会给出的
代码如下:
1.OnOnCommMscomm():MSCOM控件的函数
void CComcontrolDlg::OnOnCommMscomm()
{
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[10240],bbc; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
CByteArray BA_data;
if(m_Comm.GetCommEvent()==2 && flag_read==false ) //事件值为2表示接收缓冲区内有字符
{
flag_read=true;
sendcmd("FF 81 81 FF");
RSCTL="";
FrameType="";
variant_inp=m_Comm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
{
safearray_inp.GetElement(&k,rxdata+k);
}//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k);//字符型
strtemp.Format("%02x ",bt); //将字符送入临时变量strtemp存放
m_EDIT1+=strtemp; //加入接收编辑框对应字符串
onecmd+=strtemp; if (strtemp=="ff ")
{
nff++;
if (nff==1)
{
onecmd="ff ";
}
}
if (nff==3)
{
break;
}
}
if (nff==3)
{
int cmdlen=String2Hex(onecmd,BA_data);//这个函数不会有问题的
bbc=BBCTEST(2,cmdlen-3,BA_data);//这个函数不会有问题的
if (bbc!=BA_data[cmdlen-2])
{
onecmd="";
nff=0;
return;
}
RSCTL.Format("%x",BA_data[2]);
FrameType.Format("%02x",BA_data[3]);
onecmd="";
nff=0;
ANS(RSCTL);//这个不会有问题的
GetData(BA_data); //可能有问题
} }
UpdateData(FALSE);
flag_read=false;
}
void CComcontrolDlg::GetData(CByteArray &rxdata)
{
CString strtemp="";
if (FrameType=="41")
{
m_EDIT3="";
m_EDIT4="";
m_EDIT5="";
m_EDIT6="";
m_EDIT7="";
for (int i=4;i<8;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT3+=strtemp;
}
ErrorCode.Format("%x",rxdata[8]);
if (ErrorCode=="0")
{
for (i=11;i<19;i++)
{
strtemp.Format("%c",rxdata[i]);
m_EDIT4+=strtemp;
}
for (i=19;i<22;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT5+=strtemp;
}
for (i=22;i<32;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT6+=strtemp;
}
for (i=32;i<36;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT7+=strtemp;
}
CTime t = (CTime)strtol(m_EDIT7,0,16);
m_EDIT7.Format("%04d-%02d-%02d %02d:%02d:%02d",t.GetYear(),t.GetMonth(),t.GetDay(),t.GetHour(),t.GetMinute(),t.GetSecond());
}
return;
}
if (FrameType=="42")
{
m_EDIT8="";
m_EDIT9="";
m_EDIT10="";
m_EDIT11="";
m_EDIT12="";
m_EDIT13="";
m_EDIT14="";
m_EDIT15="";
for (int i=4;i<8;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT8+=strtemp;
}
ErrorCode.Format("%x",rxdata[8]);
if (ErrorCode=="0")
{
for (i=9;i<13;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT9+=strtemp;
}
long num=strtol(m_EDIT9,0,16);
float f_num=(float)num;
f_num=f_num/100;
m_EDIT9.Format("%.2f",f_num);
for (i=13;i<14;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT10+=strtemp;
}
for (i=14;i<16;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT11+=strtemp;
}
for (i=16;i<24;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT12+=strtemp;
}
for (i=24;i<28;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT13+=strtemp;
}
/*for (i=37;i<47;i++)
{
strtemp.Format("%x",rxdata[i]);
m_EDIT14+=strtemp;
}
for (i=29;i<30;i++)
{
strtemp.Format("%x",rxdata[i]);
m_EDIT15+=strtemp;
}*/
}
return;
}
}
以上就是我给的代码,请高手费点眼睛,有劳了
代码如下:
1.OnOnCommMscomm():MSCOM控件的函数
void CComcontrolDlg::OnOnCommMscomm()
{
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[10240],bbc; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
CByteArray BA_data;
if(m_Comm.GetCommEvent()==2 && flag_read==false ) //事件值为2表示接收缓冲区内有字符
{
flag_read=true;
sendcmd("FF 81 81 FF");
RSCTL="";
FrameType="";
variant_inp=m_Comm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
{
safearray_inp.GetElement(&k,rxdata+k);
}//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k);//字符型
strtemp.Format("%02x ",bt); //将字符送入临时变量strtemp存放
m_EDIT1+=strtemp; //加入接收编辑框对应字符串
onecmd+=strtemp; if (strtemp=="ff ")
{
nff++;
if (nff==1)
{
onecmd="ff ";
}
}
if (nff==3)
{
break;
}
}
if (nff==3)
{
int cmdlen=String2Hex(onecmd,BA_data);//这个函数不会有问题的
bbc=BBCTEST(2,cmdlen-3,BA_data);//这个函数不会有问题的
if (bbc!=BA_data[cmdlen-2])
{
onecmd="";
nff=0;
return;
}
RSCTL.Format("%x",BA_data[2]);
FrameType.Format("%02x",BA_data[3]);
onecmd="";
nff=0;
ANS(RSCTL);//这个不会有问题的
GetData(BA_data); //可能有问题
} }
UpdateData(FALSE);
flag_read=false;
}
void CComcontrolDlg::GetData(CByteArray &rxdata)
{
CString strtemp="";
if (FrameType=="41")
{
m_EDIT3="";
m_EDIT4="";
m_EDIT5="";
m_EDIT6="";
m_EDIT7="";
for (int i=4;i<8;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT3+=strtemp;
}
ErrorCode.Format("%x",rxdata[8]);
if (ErrorCode=="0")
{
for (i=11;i<19;i++)
{
strtemp.Format("%c",rxdata[i]);
m_EDIT4+=strtemp;
}
for (i=19;i<22;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT5+=strtemp;
}
for (i=22;i<32;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT6+=strtemp;
}
for (i=32;i<36;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT7+=strtemp;
}
CTime t = (CTime)strtol(m_EDIT7,0,16);
m_EDIT7.Format("%04d-%02d-%02d %02d:%02d:%02d",t.GetYear(),t.GetMonth(),t.GetDay(),t.GetHour(),t.GetMinute(),t.GetSecond());
}
return;
}
if (FrameType=="42")
{
m_EDIT8="";
m_EDIT9="";
m_EDIT10="";
m_EDIT11="";
m_EDIT12="";
m_EDIT13="";
m_EDIT14="";
m_EDIT15="";
for (int i=4;i<8;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT8+=strtemp;
}
ErrorCode.Format("%x",rxdata[8]);
if (ErrorCode=="0")
{
for (i=9;i<13;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT9+=strtemp;
}
long num=strtol(m_EDIT9,0,16);
float f_num=(float)num;
f_num=f_num/100;
m_EDIT9.Format("%.2f",f_num);
for (i=13;i<14;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT10+=strtemp;
}
for (i=14;i<16;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT11+=strtemp;
}
for (i=16;i<24;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT12+=strtemp;
}
for (i=24;i<28;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT13+=strtemp;
}
/*for (i=37;i<47;i++)
{
strtemp.Format("%x",rxdata[i]);
m_EDIT14+=strtemp;
}
for (i=29;i<30;i++)
{
strtemp.Format("%x",rxdata[i]);
m_EDIT15+=strtemp;
}*/
}
return;
}
}
以上就是我给的代码,请高手费点眼睛,有劳了
解决方案 »
- 如何获取控制面板shell的具体名字,内详
- MFC对话框加载皮肤
- 请问一下.如何区分一个程序是c还是c++写的.我糊涂了.分不清..
- 如何纠正平面图像上的方格网线条变形
- 一个矩阵,如何得到另一个矩阵(数据为每个元素相临点的和),示例如下:
- 改变控件位置和大小
- 如何让菜单中一个指定的菜单项灰掉?不可用?
- 能不能在显示对话框(Dialog)前调用FileDialog呢?
- 请问如何定义一个数组vector?
- 如何用polygon()绘制类中vector<POINT>m_point对象
- 我的程序里面连个assert都没有,竟然出现开始运行时出现bug assertion failed
- 我不明白当初为什么要鼓励生育,说什么“人多力量大”,打起仗来拿人去顶人家的雕堡,现在则用廉价劳动力来为别人谋福利!
就是隔几行messagebox一下来定位出错的代码