📄 ultrasonicview.cpp
字号:
// UltrasonicView.cpp : implementation of the CUltrasonicView class
//
#include "stdafx.h"
#include "Ultrasonic.h"
#include "UltrasonicDoc.h"
#include "UltrasonicView.h"
#include "iostream.h"
#include "fstream.h"
#include "ParaDlg.h"
#include "RecDll.h"
#include "parameter.h"
#include"inputpara.h"
#include"cptime.h"
//#include <windows.h>
#include <math.h> // for exp(), log(), and log10()
#include <stdlib.h>
#include <stdio.h>
#include "WaveDlg.h"
#include "AllWaveDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CUltrasonicView
int Allnum,channelnum,hisornow,realorhis;
int RxData[9][24576];
int RxDatab[9][12288];
int RxDataOld[9][24576];
int RxDataOldb[9][12288];
CString strDate,strf,CurrentDirectory;
int rxnum[9],rxoldnum[9];
int channel,cha123[9];
int com;
int numx;
int zoom,xcenter,oldcenter,adjust,tz,xzhou=0;
int m_kk1,m_kk2,m_kk3,m_kk4,m_kk5,m_kk6,m_kk7,m_kk8,m_kk9;
int l,v1,v2,ll,vv1,vv2,jt;
float ratio,m_k;
int showdata,showwave;
int chus=16;//纵向缩小因子
BYTE rxdata[262144]; //设置BYTE数组 An 8-bit integerthat is not signed.
bool IsCH1=true,IsCH2,IsCH3,IsCH4,IsCH5,IsCH6,IsCH7,IsCH8,IsCH9;
bool IsS1=true,IsS2,IsS3,IsS4,IsN1,IsN2,IsN3,IsN4;
IMPLEMENT_DYNCREATE(CUltrasonicView, CFormView)
BEGIN_MESSAGE_MAP(CUltrasonicView, CFormView)
//{{AFX_MSG_MAP(CUltrasonicView)
ON_BN_CLICKED(IDC_BUTTON_OPENSERIAL, OnOpenserial)
ON_BN_CLICKED(IDC_BUTTON_SENDCOMMAND, OnSendcommand)
ON_COMMAND(ID_VIEWDATA_NOW, OnViewdataNow)
ON_CBN_SELCHANGE(IDC_CH, OnSelchangeCh)
ON_BN_CLICKED(IDC_BUTTON_ClearRX, OnBUTTONClearRX)
ON_BN_CLICKED(IDC_RealTimeWave, OnRealTimeWave)
ON_BN_CLICKED(IDC_HistoryWave, OnHistoryWave)
ON_COMMAND(ID_SET_PARAMETER, OnSetParameter)
ON_COMMAND(ID_VIEWWAVE_CH1, OnViewwaveCh1)
ON_COMMAND(ID_VIEWWAVE_CH2, OnViewwaveCh2)
ON_COMMAND(ID_VIEWWAVE_CH3, OnViewwaveCh3)
ON_COMMAND(ID_VIEWWAVE_CH4, OnViewwaveCh4)
ON_COMMAND(ID_VIEWWAVE_CH5, OnViewwaveCh5)
ON_COMMAND(ID_VIEWWAVE_CH6, OnViewwaveCh6)
ON_COMMAND(ID_VIEWWAVE_CH7, OnViewwaveCh7)
ON_COMMAND(ID_VIEWWAVE_CH8, OnViewwaveCh8)
ON_COMMAND(ID_VIEWWAVE_ALL, OnViewwaveAll)
ON_BN_CLICKED(IDC_zoom, Onzoom)
ON_BN_CLICKED(IDC_zoom_up, Onzoomup)
ON_BN_CLICKED(IDC_zoom_down, Onzoomdown)
ON_WM_LBUTTONDOWN()
ON_WM_HSCROLL()
ON_BN_CLICKED(IDC_showdata, Onshowdata)
ON_BN_CLICKED(IDC_showwave, Onshowwave)
ON_COMMAND(ID_automatic_adjust, Onautomaticadjust)
ON_WM_VSCROLL()
ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
ON_COMMAND(ID_TecPlot_Format, OnTecPlotFormat)
ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER1, OnCustomdrawSlider1)
ON_COMMAND(ID_STATISTIC_PARAMETER, OnStatisticParameter)
ON_COMMAND(ID_COEFFICIENT, OnCoefficient)
ON_COMMAND(ID_PARAMETER_READ, OnParameterRead)
ON_BN_CLICKED(IDC_BUTTON_receive, OnBUTTONreceive)
ON_COMMAND(ID_mAc6111_Format, OnmAc6111Format)
ON_BN_CLICKED(IDC_RESULT_SAVE, OnResultSave)
ON_COMMAND(ID_COMPUTE_TIME, OnComputeTime)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CUltrasonicView construction/destruction
CUltrasonicView::CUltrasonicView()
: CFormView(CUltrasonicView::IDD)
{
//{{AFX_DATA_INIT(CUltrasonicView)
m_strRXData = _T("");
m_strTXData = _T("");
m_realorhis = 0; //0为当前波形,1为历史波形
m_path = _T("");
m_3 = 0;
m_2 = 0;
m_chnow = _T("");
m_bandrate =0;
m_data = 0;
m_parity = 0;
m_com = _T("0");
m_stop = 0;
m_1 = 0.0f;
//}}AFX_DATA_INIT
// TODO: add construction code here
}
CUltrasonicView::~CUltrasonicView()
{
}
void CUltrasonicView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CUltrasonicView)
DDX_Control(pDX, IDC_SLIDER1, m_Slider);
DDX_Control(pDX, IDC_PROGRESS1, m_Progress);
DDX_Control(pDX, IDC_SCROLLBAR2, m_Scroll1);
DDX_Control(pDX, IDC_showwave, m_showwave);
DDX_Control(pDX, IDC_showdata, m_showdata);
DDX_Control(pDX, IDC_SCROLLBAR1, m_Scroll);
DDX_Control(pDX, IDC_CH, m_CH);
DDX_Control(pDX, IDC_BUTTON_OPENSERIAL, m_openserial);
DDX_Control(pDX, IDC_MSCOMM1, m_ctrlComm);
DDX_Text(pDX, IDC_RXData, m_strRXData);
DDX_Text(pDX, IDC_TXData, m_strTXData);
DDX_Radio(pDX, IDC_RealTimeWave, m_realorhis);
DDX_Text(pDX, IDC_Path, m_path);
DDX_Text(pDX, IDC_EDIT12, m_3);
DDX_Text(pDX, IDC_EDIT11, m_2);
DDX_Text(pDX, IDC_chnow, m_chnow);
DDX_Text(pDX, IDC_bandrate, m_bandrate);
DDX_Text(pDX, IDC_data, m_data);
DDX_Text(pDX, IDC_parity, m_parity);
DDX_Text(pDX, IDC_showcom, m_com);
DDX_Text(pDX, IDC_stop, m_stop);
DDX_Text(pDX, IDC_EDIT10, m_1);
//}}AFX_DATA_MAP
}
BOOL CUltrasonicView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CFormView::PreCreateWindow(cs);
}
int GetCurrentPath(CString &strCurrentPath)
{
// 获取当前路径,
int returnCode = GetCurrentDirectory(MAX_PATH,strCurrentPath.GetBuffer(MAX_PATH));
strCurrentPath.ReleaseBuffer();
return returnCode;
}
void CUltrasonicView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
// Record();
for(int i=0;i<9;i++)
for(int j=0;j<32000;j++)
RxData[i][j]=-1;
for(i=0;i<9;i++)
for(int j=0;j<32000;j++)
RxDataOld[i][j]=-1;
for(i=0;i<9;i++) {rxnum[i]=0;rxoldnum[i]=0;}
// IsCH1=IsCH2=IsCH3=IsCH4=IsCH5=IsCH6=IsCH7=IsCH8=true;//默认八个通道均使用
CString str[9]={"通道一","通道二","通道三","通道四","通道五","通道六","通道七","通道八","速度通道"};
int nIndex;
for(int p=0;p<9;p++)
{
nIndex=m_CH.AddString(str[p]);
m_CH.SetItemData(nIndex,p);
}
oldcenter=xcenter=6000;
zoom=0;ratio=1;
GetDlgItem(IDC_zoom)->EnableWindow(true);
GetDlgItem(IDC_zoom_up)->EnableWindow(true);
GetDlgItem(IDC_zoom_down)->EnableWindow(true);
m_Scroll.SetScrollRange(0,1200);//2000
m_Scroll1.SetScrollRange(1,32);
m_Scroll1.SetScrollPos(16);
m_Slider.SetRange(0,28,TRUE);
m_Slider.SetPos(0);
m_Slider.SetTicFreq(2);
m_Slider.SetLineSize(1);
m_Slider.SetPageSize(2);
m_CH.SetCurSel(0);
m_Progress.SetRange(0,200);
m_Progress.SetPos(0);
m_Progress.SetStep(1);
((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(0);
showdata=showwave=1;
channel=0;realorhis=0;
Allnum=0;channelnum=0;tz=0;
SYSTEMTIME st;
com=0;
CString strTime;
GetLocalTime(&st);
strDate.Format("%d-%d-%d ",st.wYear,st.wMonth,st.wDay);
strTime.Format("%d-%d",st.wHour,st.wMinute);//-%d,st.wSecond.txt
strf= strDate+ strTime;
// GetCurrentDirectory(10,lpBuffer);
// CurrentDirectory.Format("%s",lpBuffer);
GetCurrentPath(CurrentDirectory);
DWORD dwAttr = GetFileAttributes("实验数据");//
if(dwAttr == 0xFFFFFFFF) //文件夹不存在
CreateDirectory("实验数据",NULL);//"实验数据\\"+
SetCurrentDirectory("实验数据");
dwAttr = GetFileAttributes(strDate+"数据");//
if(dwAttr == 0xFFFFFFFF) //文件夹不存在
CreateDirectory(strDate+"数据",NULL);//"实验数据\\"+
SetCurrentDirectory(strDate+"数据");
// strf+=m_chnow;//文件名为时间加通道
}
/////////////////////////////////////////////////////////////////////////////
// CUltrasonicView printing
BOOL CUltrasonicView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CUltrasonicView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CUltrasonicView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
void CUltrasonicView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
{
// TODO: add customized printing code here
}
/////////////////////////////////////////////////////////////////////////////
// CUltrasonicView diagnostics
#ifdef _DEBUG
void CUltrasonicView::AssertValid() const
{
CFormView::AssertValid();
}
void CUltrasonicView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
CUltrasonicDoc* CUltrasonicView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CUltrasonicDoc)));
return (CUltrasonicDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CUltrasonicView message handlers
void CUltrasonicView::OnDraw(CDC* pDC)
{
// TODO: Add your specialized code here and/or call the base class
CUltrasonicDoc* pDoc=GetDocument();
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap MemBitmap;
MemBitmap.LoadBitmap(IDB_background);
BITMAP bm;
MemBitmap.GetObject(sizeof(BITMAP),&bm);
//MemBitmap.CreateCompatibleBitmap(pDC,800,256);
CBitmap *pOldbmp=MemDC.SelectObject(&MemBitmap);
int zw=129;//零位
//用MemDC画图
CPen Pen,Pen2,Pen3,Pen4;
Pen.CreatePen(PS_SOLID, 1, RGB(200, 200,200,));
Pen2.CreatePen(PS_SOLID, 1, RGB(0, 0,0,));
Pen3.CreatePen(PS_SOLID, 1, RGB(0, 0,150,));
Pen4.CreatePen(PS_SOLID, 1, RGB(150, 0,0,));
MemDC.SelectObject(&Pen);
for(int i=251;i>=0;i-=10)
{
MemDC.MoveTo(0,i);
MemDC.LineTo(12000,i);
}//画横线
MemDC.SelectObject(&Pen);
if(channel!=8)
{for(i=0;i<=12000;i+=400)
{
MemDC.MoveTo(i,0);
MemDC.LineTo(i,256);
}
}//画竖线
else
{
for(i=88;i<=12000;i+=101)
{
MemDC.MoveTo(i,0);
MemDC.LineTo(i,256);
}
}//画竖线(速度)
CFont font0,font1;
font0.CreateFont(
14, // nHeight
160/ratio, // nWidth
0, // nEscapement
0, // nOrientation
5, // nWeight,FW_NORMAL
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
ANSI_CHARSET, // nCharSet
OUT_STROKE_PRECIS, // nOutPrecision,OUT_DEFAULT_PRECIS
CLIP_DEFAULT_PRECIS, // nClipPrecision
PROOF_QUALITY, // nQuality,DEFAULT_QUALITY
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
_T("Arial"));
MemDC.SelectObject(&font0);
MemDC.SetTextColor(RGB(0,0,255));
font1.CreatePointFont(116, "Batang");
// MemDC.SelectObject(&font0);
// MemDC.SetTextColor(RGB(255,0,0));
// MemDC.TextOut(80,128,"0");
if(channel==8)
{ m_Scroll.ShowScrollBar(FALSE);m_Scroll1.ShowScrollBar(FALSE);}
else
{ m_Scroll.ShowScrollBar(TRUE);m_Scroll1.ShowScrollBar(TRUE);}
if(channel!=8)
{
MemDC.SelectObject(&Pen2);
MemDC.MoveTo(0,zw);
MemDC.LineTo(24000,zw); //画横轴
MemDC.SelectObject(&Pen3);
MemDC.MoveTo(0,zw+49);
MemDC.LineTo(24000,zw+49);
MemDC.MoveTo(0,zw-49);
MemDC.LineTo(24000,zw-49);
MemDC.SelectObject(&Pen4);
MemDC.MoveTo(0,zw+49*2);
MemDC.LineTo(24000,zw+49*2);
MemDC.MoveTo(0,zw-49*2);
MemDC.LineTo(24000,zw-49*2);
intialpara();
char ss[8];int xend;
sprintf(ss,"%4.2f",m_k*chus/20.33);//3.85*16=61.6,0.24,******0.06
xend=xcenter+int(6000/ratio)-700/ratio; //标度横向位置
MemDC.TextOut(xend,74,ss);//9,382-49,
sprintf(ss,"%4.2f",2*m_k*chus/20.33);//0.12
MemDC.TextOut(xend,25,ss);
pDC->TextOut(865,382-49,"(KPa)");
pDC->TextOut(865,382-49*2,"(KPa)");
}
else
{int yt=51;//47
pDC->SelectObject(&font1);
pDC->TextOut(865,382-49*2,"公里/小时");
pDC->TextOut(28, 516-yt,"50");
pDC->TextOut(20, 516-yt*2,"100");
pDC->TextOut(20, 516-yt*3,"150");
pDC->TextOut(20, 516-yt*4,"200");
pDC->TextOut(20, 516-yt*5,"250");
pDC->TextOut(20, 516-yt*6,"300");
if(zoom==0)
{int sht=79;
pDC->SetTextColor(RGB(80,0,220));
pDC->TextOut(28+sht, 516,"10");
pDC->TextOut(28+sht*2, 516,"20");
pDC->TextOut(28+sht*3, 516,"30");
pDC->TextOut(28+sht*4, 516,"40");
pDC->TextOut(28+sht*5, 516,"50");
pDC->TextOut(28+sht*6, 516,"60");
pDC->TextOut(28+sht*7, 516,"70");
pDC->TextOut(28+sht*8, 516,"80");
pDC->TextOut(28+sht*9, 516,"90");
}
pDC->TextOut(848,516,"米");
}
// pDC->TextOut(6,382+49,"-3.85");
// pDC->TextOut(6,382+49*2,"-7.7");
if(m_realorhis==0)
{
MemDC.SelectObject(&Pen2);
if(showwave==1 && Allnum>=24575 && channel!=8)//
{
int j=0,t1,t2;
for(i=0;i<rxnum[channel]-1 ;i++,i++) // 32000
{
if((int)(RxData[channel][i]&0x8)==0)
RxDatab[channel][j]=(RxData[channel][i]&0x7)*256+RxData[channel][i+1]; //补码转换
else
RxDatab[channel][j]=-((((RxData[channel][i]&0x7)*256+RxData[channel][i+1])^0x7FF)+1); //要改
j++;
}
int temp[65000],i,nl;
//负延迟处理
int w1,w2,tp1,tp2;
tp1=RxData[channel][24573];
tp2=RxData[channel][24572];
w1= (tp2*256+tp1)/16;
//w1= RxDatab[channel][1]/16;
w2=1664-w1;
for(i=2;i<w1;i++) //1443=23088/2/8(5A30H)
temp[12287-i-w2]=RxDatab[channel][12287-i];//+3536
for(i=1;i<=w2+1;i++)
temp[12287-i]=RxDatab[channel][12287-i-w1];
for(i=1;i<1664;i++)//1664=26624/2/8(6800H)
RxDatab[channel][12287-i]=temp[12287-i];
//****************************
nl=xzhou;
for (j=nl+1;j<Allnum/2-nl;j++)
{
long int s1=0,s2=0,s3=0;
for (i=0;i<=nl;i++)
{ s1=s1+RxDatab[channel][j+i];
s2=s2+RxDatab[channel][j-i];
}
s3=s1+s2-RxDatab[channel][j];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -