📄 ultrasonicview.cpp
字号:
temp[j]=s3/(2*nl+1);
}
for (j=1;j<Allnum/2;j++)
RxDatab[channel][j]=temp[j];
MemDC.SelectObject(&Pen4);
MemDC.MoveTo(1664,0); //划零时刻竖线
MemDC.LineTo(1664,256);
MemDC.SelectObject(&Pen2);
MemDC.TextOut(1664,5,"0");
for(i=nl;i<rxnum[channel]/2-1 ;i++) // 32000
if (tz==0)
{
t1=RxDatab[channel][i];t2=RxDatab[channel][i+1];
MemDC.MoveTo(12228-i,128-(t1/chus-RxDatab[channel][0]/chus)); // 0
MemDC.LineTo(12228-i-1,128-(t2/chus-RxDatab[channel][0]/chus));// 0
}
else
{t1=RxDatab[channel][i];t2=RxDatab[channel][i+1];
MemDC.MoveTo(12228-i,128-t1/chus);
MemDC.LineTo(12228-i-1,128-t2/chus);
}
//画非速度通道实时波型
}
if(showwave==1 && Allnum>=2047 && channel==8)
{
int j=0;
for(i=0;i<rxnum[channel]-1 ;i++,i++) // 32000
{
RxDatab[channel][j]=RxData[channel][i]*256+RxData[channel][i+1]; //双字节合成速度
j++;
}
int temp[1024];
for(i=0;i<rxnum[channel]/2-1 ;i++) // 32000
{
if(RxDatab[channel][i]!=0)
temp[i]=m_kk9*7200/RxDatab[channel][i]; //转化成 公里/小时 11<speed<256
else
temp[i]=0;
if (temp[i]<12) temp[i]=1; if(temp[i]>255) temp[i]=255;
if(xzhou!=0)
{
if(((temp[i-1]-temp[i])>0 ) && ((temp[i-1]-temp[i])>(69-xzhou)) && i>2) temp[i]=temp[i-1];
if (((temp[i-1]-temp[i])<0) && ((temp[i]-temp[i-1])>(69-xzhou)) && i>2) temp[i]=temp[i-1];
}
}
if(xzhou!=0)
{
for(i=0;i<rxnum[channel]/2-1 ;i++)
{
long int ss=0;
for (j=0;j<(xzhou+10);j++)
{
ss=ss+temp[i+j];
}
temp[i]=ss/(xzhou+10);
}
}
for(i=464;i<1024 ;i++) // 只显示到56米(全班则为:rxoldnum[channel]/2-1)
{
// t1=RxDatab[channel][i];t2=RxDatab[channel][i+1];
MemDC.MoveTo(1024-i,256-temp[i]);
MemDC.LineTo(1024-i-1,256-temp[i+1]);
RxDatab[channel][i]=temp[i];
}
}
if(channel!=8) //画速度通道实时波型
pDC->StretchBlt(45,260,800,256,&MemDC,xcenter-int(6000/ratio),0,int(12000/ratio),256,SRCCOPY);//不用ratio
else
pDC->StretchBlt(45,260,800,256,&MemDC,0,0,int(1024/ratio),256,SRCCOPY);
}
else
{
MemDC.SelectObject(&Pen2);
if(channel!=8) ////画非速度通道历史波型
{
int j=0;
for(i=0;i<rxoldnum[channel]-1 ;i++,i++) // 32000
{
if((int)(RxDataOld[channel][i+1]&0x8)==0)
RxDataOldb[channel][j]=(RxDataOld[channel][i+1]&0x7)*256+RxDataOld[channel][i]; //补码转换
else
RxDataOldb[channel][j]=-((((RxDataOld[channel][i+1]&0x7)*256+RxDataOld[channel][i])^0x7FF)+1); //要改
j++;
}
int temp[65000];
int nl;
nl=xzhou;
/* //负延迟处理
for(i=1;i<1443;i++) //1443=23088/2/8(5A30H)
temp[i+221]=RxDataOldb[channel][i];//+3536
for(i=1;i<=221;i++)
temp[i]=RxDataOldb[channel][i+1443];
for(i=1;i<1664;i++)//1664=26624/2/8(6800H)
RxDataOldb[channel][i]=temp[i];
//**************************** */
//负延迟处理
int w1,w2,tp1,tp2;
tp1=RxDataOld[channel][2];
tp2=RxDataOld[channel][3];
w1= (tp2*256+tp1)/16;//RxDataOldb[channel][1]/16;
w2=1664-w1;
for(i=2;i<w1;i++) //1443=23088/2/8(5A30H)
temp[i+w2]=RxDataOldb[channel][i];//+3536
for(i=1;i<=w2+1;i++)
temp[i]=RxDataOldb[channel][i+w1];
for(i=1;i<1664;i++)//1664=26624/2/8(6800H)
RxDataOldb[channel][i]=temp[i];
//****************************
//软件减振器
for (j=nl+1;j<numx/2-nl;j++)
{
long int s1=0,s2=0,s3=0;
for (i=0;i<=nl;i++)
{ int t1,t2;
t1=RxDataOldb[channel][j+i];
t2=RxDataOldb[channel][j-i];
s1=s1+t1;
s2=s2+t2;
}
s3=s1+s2-RxDataOldb[channel][j];
temp[j]=s3/(2*nl+1);
}
for (j=1;j<numx/2;j++)
RxDataOldb[channel][j]=temp[j];
MemDC.SelectObject(&Pen4);
MemDC.MoveTo(1664,0); //划零时刻竖线
MemDC.LineTo(1664,256);
//划交会时刻线
MemDC.MoveTo(1664+(jt*1664/650),0);
MemDC.LineTo(1664+(jt*1664/650),256);
MemDC.SelectObject(&Pen2);
MemDC.TextOut(1664,5,"0");
if(jt>0)
MemDC.TextOut(1665+(jt*1664/650),5,"j");
int t1,t2;
for(i=nl;i<numx/2-nl/* && RxDataOld[channel][i+1]!=-1*/ ;i++)
{
if (tz==0)
{
t1=RxDataOldb[channel][i];t2=RxDataOldb[channel][i+1];
MemDC.MoveTo(i,128-(t1/chus-RxDataOldb[channel][0]/chus)); // 0
MemDC.LineTo(i+1,128-(t2/chus-RxDataOldb[channel][0]/chus)); // 0
}
else
{
t1=RxDataOldb[channel][i];t2=RxDataOldb[channel][i+1];
MemDC.MoveTo(i,128-t1/chus);
MemDC.LineTo(i+1,128-t2/chus);
}
}
}//画历史波型
else //画速度通道历史波型
{
int j=0;
for(i=0;i<rxoldnum[channel]-1 ;i++,i++) // 32000
{
RxDataOldb[channel][j]=RxDataOld[channel][i+1]*256+RxDataOld[channel][i]; //双字节合成速度
j++;
}
int temp[1024],av[1024];
for(i=0;i<rxoldnum[channel]/2-1 ;i++) // 32000
{
if(RxDataOldb[channel][i]!=0)
temp[i]=m_kk9*7200/RxDataOldb[channel][i]; //转化成 公里/小时 11<speed<256
else
temp[i]=0;
if (temp[i]<12) temp[i]=1; if(temp[i]>255) temp[i]=255;
}
long int sum=0;
int pv;
for (i=400;i<450;i++) //统计40到45米一段的速度
{
sum=sum+temp[i];
}
pv=sum/50;
int ss[560];
// xzhou=10;
if(xzhou!=0)
{
for(i=0;i<rxoldnum[channel]/2-1 ;i++)
{
long int ss=0;
int ll=xzhou+10;
int le=0;
for (j=0;j<ll;j++)
{
if(temp[i+j]-pv>6||pv-temp[i+j]>6)
{}
else
{ss=ss+temp[i+j];le++;}
}
if(ss!=0)
av[i]=ss/le;
else
av[i]=av[i-1];
}
for(i=0;i<rxoldnum[channel]/2-1 ;i++) // 32000
{
if(temp[i]-av[i]>6||av[i]-temp[i]>6)
temp[i]=av[i];
}
for(i=0;i<rxoldnum[channel]/2-1 ;i++) // 32000
{
if(temp[i]<temp[i+1])
temp[i+1]=temp[i];
}
for(i=0;i<560 ;i++) // 只显示到56米(全班则为:rxoldnum[channel]/2-1)
{ ss[i]=0;
for (j=0;j<xzhou;j++)
ss[i]=ss[i]+temp[i+j];
ss[i]=ss[i]/xzhou;
}
for(i=0;i<560;i++)
{
temp[i]=ss[i];
}
}
for(i=0;i<560 ;i++) // 只显示到56米(全班则为:rxoldnum[channel]/2-1)
{
// t1=RxDataOldb[channel][i];t2=RxDataOldb[channel][i+1];
MemDC.MoveTo(i,256-temp[i]);
MemDC.LineTo(i+1,256-temp[i+1]);
RxDataOldb[channel][i]=temp[i];
}
}
if(channel!=8)
pDC->StretchBlt(45,260,800,256,&MemDC,xcenter-int(6000/ratio),0,int(12000/ratio),256,SRCCOPY);
else
pDC->StretchBlt(45,260,800,256,&MemDC,0,0,int(1024/ratio),256,SRCCOPY);//0,1024
}
MemDC.SelectObject(pOldbmp);
MemDC.DeleteDC();
}
BEGIN_EVENTSINK_MAP(CUltrasonicView, CFormView)
//{{AFX_EVENTSINK_MAP(CUltrasonicView)
ON_EVENT(CUltrasonicView, IDC_MSCOMM1, 1 /* OnComm */, OnComm, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void CUltrasonicView::OnComm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
CString strtemp;
fstream file2;
file2.open(strf+"_"+m_chnow+".txt",ios::app);
CString st0=" ..\\ ";
m_path=st0+strf;
if(!file2)
{
AfxMessageBox("不能创建文件!");
return;
}
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
////////以下你可以根据自己的通信协议加入处理代码
variant_inp=m_ctrlComm.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存放,注意这里加入一个空隔
// strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
if(showdata==1) m_strRXData+=strtemp; //加入接收编辑框对应字符串
const char* ch=(const char*)strtemp; //ch为指针,指向接收字符
///////////初始化文件头///////////////////////
if (Allnum==0)
{
file2.write("////",4);
if(IsCH1==true) {file2.write("通道1 ",6);cha123[channelnum]=0;channelnum++;}
if(IsCH2==true) {file2.write("通道2 ",6);cha123[channelnum]=1;channelnum++;}
if(IsCH3==true) {file2.write("通道3 ",6);cha123[channelnum]=2;channelnum++;}
if(IsCH4==true) {file2.write("通道4 ",6);cha123[channelnum]=3;channelnum++;}
if(IsCH5==true) {file2.write("通道5 ",6);cha123[channelnum]=4;channelnum++;}
if(IsCH6==true) {file2.write("通道6 ",6);cha123[channelnum]=5;channelnum++;}
if(IsCH7==true) {file2.write("通道7 ",6);cha123[channelnum]=6;channelnum++;}
if(IsCH8==true) {file2.write("通道8 ",6);cha123[channelnum]=7;channelnum++;}
if(IsCH9==true) {file2.write("通道9 ",6);cha123[channelnum]=8;channelnum++;}
file2.write("\r\n",2);
file2.write("////共 ",7);
char ch=channelnum+48;
file2.write(&ch,1);
file2.write(" 个通道的数据\r\n",15);
}
//////////////////////////////////////////////
if(Allnum<=262144) file2.write(ch,3);//存放至文件//5000
int c=(Allnum/2)%channelnum;
int cha=cha123[c];
if(rxnum[cha]>=1)
for(int i=rxnum[cha];i>=1;i--) RxData[cha][i]=RxData[cha][i-1];
RxData[cha][0]=Char2Int(ch[0],ch[1]); //向左移位输入,连续两个字符合成一字节
if(rxnum[cha]<198656) rxnum[cha]++;//262144
Allnum++;
// m_Progress.StepIt();
if(channelnum==8)
m_Progress.SetPos(Allnum/988 % 200);//1311
else
if(channel==8)
m_Progress.SetPos(int(Allnum/10.3) % 200);
else
m_Progress.SetPos(Allnum/123 % 200);
}//for
}//if
UpdateData(FALSE); //更新编辑框内容
CRect rc(45,260,845,516);
//if(Allnum%10==1)
if(m_realorhis==0 &&showwave==1) //
InvalidateRect(rc);
file2.close();
}
void CUltrasonicView::OnOpenserial()
{
// TODO: Add your control notification handler code here
// SetCurrentDirectory(CurrentDirectory);
CString a;
if(IsS1==true) a="新板1参数.txt";
if(IsS2==true) a="新板2参数.txt";
if(IsS3==true) a="新板3参数.txt";
if(IsS4==true) a="新板4参数.txt";
if(IsN1==true) a="新板1参数.txt";
if(IsN2==true) a="新板2参数.txt";
if(IsN3==true) a="新板3参数.txt";
if(IsN4==true) a="新板4参数.txt";
/////////////写入各通道对应数组////////////////////
fstream file1;
char ch1,ch2,ch3,ch4;
if(a=="") AfxMessageBox("请先选择板号文件!");
else
{
a=CurrentDirectory+"\\"+a;
file1.open(a,ios::in);
file1.read(&ch1,1);
file1.read(&ch2,1);
file1.read(&ch3,1);
file1.read(&ch4,1); //ch4为空格
m_kk1=(ch1-48)*100+(ch2-48)*10+ch3-48;
file1.read(&ch1,1);
file1.read(&ch2,1);
file1.read(&ch3,1);
file1.read(&ch4,1); //ch4为空格
m_kk2=(ch1-48)*100+(ch2-48)*10+ch3-48;
file1.read(&ch1,1);
file1.read(&ch2,1);
file1.read(&ch3,1);
file1.read(&ch4,1); //ch4为空格
m_kk3=(ch1-48)*100+(ch2-48)*10+ch3-48;
file1.read(&ch1,1);
file1.read(&ch2,1);
file1.read(&ch3,1);
file1.read(&ch4,1); //ch4为空格
m_kk4=(ch1-48)*100+(ch2-48)*10+ch3-48;
file1.read(&ch1,1);
file1.read(&ch2,1);
file1.read(&ch3,1);
file1.read(&ch4,1); //ch4为空格
m_kk5=(ch1-48)*100+(ch2-48)*10+ch3-48;
file1.read(&ch1,1);
file1.read(&ch2,1);
file1.read(&ch3,1);
file1.read(&ch4,1); //ch4为空格
m_kk6=(ch1-48)*100+(ch2-48)*10+ch3-48;
file1.read(&ch1,1);
file1.read(&ch2,1);
file1.read(&ch3,1);
file1.read(&ch4,1); //ch4为空格
m_kk7=(ch1-48)*100+(ch2-48)*10+ch3-48;
file1.read(&ch1,1);
file1.read(&ch2,1);
file1.read(&ch3,1);
file1.read(&ch4,1); //ch4为空格
m_kk8=(ch1-48)*100+(ch2-48)*10+ch3-48;
file1.read(&ch1,1);
file1.read(&ch2,1);
file1.read(&ch3,1);
file1.read(&ch4,1); //ch4为空格
m_kk9=(ch1-48)*100+(ch2-48)*10+ch3-48;
UpdateData(FALSE);
}
file1.close();
CRect rc(45,260,845,516);
InvalidateRect(rc);
UpdateData(FALSE);
// strf+=m_chnow;//文件名为时间加通道
if(m_ctrlComm.GetPortOpen())
// {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -