计的思想主要就是在工地上传输各种材料,我列举了其中混凝土配料系统的传输:水泥,石子,沙子。本来应该是用单片机和pc机之间的通信,串口通过读缓存区异步通信,这是程序中的发送与接收部分,是程序的主体,测试连通时对方会发会发a5,我想问问outt[1]=9;这一条有什么用,我实在看不明白。
是不是写错了????????????????
void CCcc1Dlg::OnButton3() //发送按钮
{
// TODO: Add your control notification handler code here
if(!open)
{
MessageBox("串口没有打开,请重试");
return;
}
BYTE outt[9];
DWORD he;
UpdateData(TRUE);
if((m_hesha>65535)|(m_shuini>65535)|(m_shizi>65535))
return;
else{
outt[0]=term;
outt[1]=9;
outt[2]=(BYTE)(m_hesha%256);
outt[3]=(BYTE)(m_hesha/256);
outt[4]=(BYTE)(m_shuini%256);
outt[5]=(BYTE)(m_shuini/256);
outt[6]=(BYTE)(m_shizi%256);
outt[7]=(BYTE)(m_shizi/256);
he=(DWORD)(outt[0]+outt[1]+outt[2]+outt[3]+outt[4]+outt[5]+outt[6]+outt[7]);
outt[8]=(BYTE)(he%256);
WriteFile(hCom,outt,9,&num,NULL);
term++;
}
}
void CCcc1Dlg::OnTimer(UINT nIDEvent) //////接收
{
// TODO: Add your message handler code here and/or call default
if(!open)
return;
BYTE inn[10],compare;
DWORD hee,one,two,three;
ReadFile(hCom,inn,9,&num,NULL);
if(inn[0]==0xa5)
{
BYTE reback[2];
reback[0]=0x5a;
WriteFile(hCom,reback,2,&num,NULL);
}
else if(inn[0]==0x5a)
{
MessageBox("串口已经连通,请发送数据");
return;
}
else if(inn[0]==55)
{
MessageBox("数据出错,请重发.");
return;
}
else
{
hee=(DWORD)(inn[0]+inn[1]+inn[2]+inn[3]+inn[4]+inn[5]+inn[6]+inn[7]);
compare=(BYTE)(hee%256);
if(compare==inn[8])
{
one=(DWORD)inn[2]+(DWORD)inn[3]*256;
two=(DWORD)inn[4]+(DWORD)inn[5]*256;
three=(DWORD)inn[6]+(DWORD)inn[7]*256;
m_allhesha+=one;
m_allshuini+=two;
m_allshizi+=three;
m_input+=_ultoa(inn[0],nn,10);
m_input+=".\t";
m_input+=_ultoa(one,nn,10);
m_input+='\t';
m_input+=_ultoa(two,nn,10);
m_input+='\t';
m_input+=_ultoa(three,nn,10);
m_input+='\t';
GetLocalTime(&ttime);
m_input+=_ultoa(ttime.wHour,nn,10);
m_input+=':';
m_input+=_ultoa(ttime.wMinute,nn,10);
m_input+=':';
m_input+=_ultoa(ttime.wSecond,nn,10);
m_input+="\r\n";
UpdateData(FALSE);
term2++;
}//if(compare==inn[8])
else if(inn[0]==term2)
{
BYTE wrong[2];
wrong[0]=55;
WriteFile(hCom,wrong,2,&num,NULL);
}//else
}//else
CDialog::OnTimer(nIDEvent);
}
6 个解决方案
如果是表示数组有9个成员的话,但实际上从来没用过,在程序的所部分(包括没列出的)只在这里出现过一条,是不是是多余的可以不要????
他的误码校验是求和的,提供个长度值可以用于求和的误码校验?没见过
如果是异步通讯,那WriteFile(hCom,reback,2,&num,NULL);和ReadFile(hCom,inn,9,&num,NULL);最后一个参数是否不能为空阿?