📄 safsview.cpp
字号:
// SAFSView.cpp : implementation of the CSAFSView class
//
#include "stdafx.h"
#include "SAFS.h"
#include "SAFSDoc.h"
#include "SAFSView.h"
#include "ua300.h"
#pragma comment(lib,"ua300")
#include "sampleset.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
short TempData[13000],vol_Zero[12];
float CMetrix[6][6],Data[32000][12];
float temp[12];
float CM1[3][3],CM2[3][3],CM3[2][2],CM4[2][2];
HANDLE husb;
/////////////////////////////////////////////////////////////////////////////
// CSAFSView
IMPLEMENT_DYNCREATE(CSAFSView, CView)
BEGIN_MESSAGE_MAP(CSAFSView, CView)
//{{AFX_MSG_MAP(CSAFSView)
ON_COMMAND(ID_MENUITEM32771, OnStartSample)
ON_WM_TIMER()
ON_COMMAND(ID_MENUITEM32772, OnStop)
ON_COMMAND(ID_MENUITEM32774, OnSampleSet)
ON_WM_CREATE()
ON_COMMAND(ID_FILE_SAVE, OnFileSave)
ON_COMMAND(ID_MENUITEM32775, OnCls)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSAFSView construction/destruction
CSAFSView::CSAFSView()
{
int i1,i2;
for(i1=0;i1<6;i1++)
for(i2=0;i2<6;i2++)
CMetrix[i1][i2]=0.0;
CM1[0][0]=-103.586160;
CM1[0][1]=0.508300;
CM1[0][2]=-1.879100;
CM1[1][0]=1.544600;
CM1[1][1]=-105.747280;
CM1[1][2]=3.827060;
CM1[2][0]=3.138380;
CM1[2][1]=-2.548080;
CM1[2][2]=-119.612560;
CM2[0][0]=92.287100;
CM2[0][1]=-1.263680;
CM2[0][2]=-4.594280;
CM2[1][0]=-0.225300;
CM2[1][1]=-87.036500;
CM2[1][2]=-6.357540;
CM2[2][0]=3.372240;
CM2[2][1]=-1.638360;
CM2[2][2]=-122.235600;
CM3[0][0]=73.318760;
CM3[0][1]=1.456660;
CM3[1][0]=5.341100;
CM3[1][1]=132.556440;
CM4[0][0]=-56.467700;
CM4[0][1]=-0.613780;
CM4[1][0]=5.217120;
CM4[1][1]=-108.638940;
m_pBitmap= new CBitmap;
m_pMemDC= new CDC;
}
CSAFSView::~CSAFSView()
{
delete m_pBitmap;
delete m_pMemDC;
}
BOOL CSAFSView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CSAFSView drawing
void CSAFSView::OnDraw(CDC* pDC)
{
CSAFSDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CBitmap* pOldBitmap;
m_pMemDC->SelectObject(m_pBitmap);
pDC->BitBlt(0,0,1024,768,m_pMemDC,0,0,SRCCOPY);
// m_pMemDC->SelectObject(pOldBitmap);
}
/////////////////////////////////////////////////////////////////////////////
// CSAFSView printing
BOOL CSAFSView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CSAFSView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CSAFSView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CSAFSView diagnostics
#ifdef _DEBUG
void CSAFSView::AssertValid() const
{
CView::AssertValid();
}
void CSAFSView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CSAFSDoc* CSAFSView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSAFSDoc)));
return (CSAFSDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CSAFSView message handlers
void CSAFSView::OnStartSample()
{
//设置解耦矩阵参数
CMetrix[0][0]=0.01;
CMetrix[0][1]=0.01;
CMetrix[0][2]=0.01;
CMetrix[0][3]=0.01;
CMetrix[0][4]=0.01;
CMetrix[0][5]=0.01;
CMetrix[1][0]=0.01;
CMetrix[1][1]=0.01;
CMetrix[1][2]=0.01;
CMetrix[1][3]=0.01;
CMetrix[1][4]=0.01;
CMetrix[1][5]=0.01;
CMetrix[2][0]=0.01;
CMetrix[2][1]=0.01;
CMetrix[2][2]=0.01;
CMetrix[2][3]=0.01;
CMetrix[2][4]=0.01;
CMetrix[2][5]=0.01;
CMetrix[3][0]=0.01;
CMetrix[3][1]=0.01;
CMetrix[3][2]=0.01;
CMetrix[3][3]=0.01;
CMetrix[3][4]=0.01;
CMetrix[3][5]=0.01;
CMetrix[4][0]=0.01;
CMetrix[4][1]=0.01;
CMetrix[4][2]=0.01;
CMetrix[4][3]=0.01;
CMetrix[4][4]=0.01;
CMetrix[4][5]=0.01;
CMetrix[5][0]=0.01;
CMetrix[5][1]=0.01;
CMetrix[5][2]=0.01;
CMetrix[5][3]=0.01;
CMetrix[5][4]=0.01;
CMetrix[5][5]=0.01;
//开始采集数据
husb = OpenUA300() ;
if(husb == 0 )
{
MessageBox("USB采集器通讯错误,请检查设备是否接上" ) ;
return ;
}
//数据接受缓冲区置空
for( int i = 0 ; i < 13000 ; i ++ )
TempData[i] = 0 ;
//设置采集器硬件定时器工作状态,12通道1000Hz采样频率
minit2( husb , 0 , 12 , 500 , 0 ) ;
SetTimer( 1 , 1000 , 0 ) ;
}
void CSAFSView::OnTimer(UINT nIDEvent)
{
readdata2( husb , TempData, 12288 ) ;//数据1024组,12通道
DispCurve();
CView::OnTimer(nIDEvent);
}
void CSAFSView::OnStop()
{
//停止
KillTimer(1) ;
endread2( husb ) ;
CloseUA300( husb ) ;
}
void CSAFSView::DispCurve()
{
int i,j,m=50,n=226;int i1,i2;
CClientDC dc(this);
CPoint Fxpoint(m,n),Fypoint(m,n),Fzpoint(m,n),Mxpoint(m,n),Mypoint(m,n),Mzpoint(m,n);
CPoint point1(m,n),point2(m,n),point3(m,n),point4(m,n),point5(m,n),point6(m,n);
CPen pen1(PS_SOLID,1,RGB(0,255,64));
CPen pen2(PS_SOLID,1,RGB(0,180,255));
CPen pen3(PS_SOLID,1,RGB(0,255,64));
CPen pen4(PS_SOLID,1,RGB(255,0,255));
CPen pen5(PS_SOLID,1,RGB(255,255,0));
CPen pen6(PS_SOLID,1,RGB(0,255,255));
CString txt[12];
Invalidate(false) ;
UpdateWindow() ;
for(i=0;i<1024;i++)
{
for(i1=0;i1<12;i1++)
Data[i][i1]=0.0;
}
//对数组赋值与解耦,赋值1024组
for(i=0;i<1024;i++)
{
for(j=0;j<12;j++)
temp[j]=(float)((TempData[12*i+j]-2048-vol_Zero[j])*2.442);
//对通道电压进行解耦运算,其中CMetrix[i][j]为一个3×3的解耦矩阵
//0.0005为放大2000倍的修正系数(0.0005=1/2000)
//计算得到的力单位为Kg
for (i1=0;i1<3;i1++)
{
for (i2=0;i2<3;i2++)
Data[i][i1]+=0.0005*temp[i1]*CM1[i1][i2];
}
//对通道电压进行解耦运算,其中CM2[i][j]为一个3×3的解耦矩阵
for (i1=3;i1<6;i1++)
{
for (i2=0;i2<3;i2++)
Data[i][i1]+=0.0005*temp[i1]*CM2[i1-3][i2];
}
//对通道电压进行解耦运算,其中CM3[i][j]为一个2×2的解耦矩阵
for (i1=6;i1<8;i1++)
{
for (i2=0;i2<2;i2++)
Data[i][i1]+=0.0005*temp[i1]*CM3[i1-6][i2];
}
//对通道电压进行解耦运算,其中CM4[i][j]为一个2×2的解耦矩阵
for (i1=8;i1<10;i1++)
{
for (i2=0;i2<2;i2++)
Data[i][i1]+=0.0005*temp[i1]*CM4[i1-8][i2];
}
}
//显示960点的三维力曲线 960
//计算显示区域的大小
dc.SetTextColor(RGB(255,250,0));
dc.SetBkMode(OPAQUE);
dc.SetBkColor(RGB(0,0,0));
for(i=0;i<960;i++)
{
//Fx1
dc.SelectObject(pen1);
Fxpoint.x=i+50;
Fxpoint.y=(int)(-Data[i][0]/100+226);
dc.MoveTo(point1);
dc.LineTo(Fxpoint);
point1=Fxpoint;
//Fy1
dc.SelectObject(pen2);
Fypoint.x=i+50;
Fypoint.y=(int)(-Data[i][1]/100+226);
dc.MoveTo(point2);
dc.LineTo(Fypoint);
point2=Fypoint;
//Fz1
dc.SelectObject(pen3);
Fzpoint.x=i+50;
Fzpoint.y=(int)(-Data[i][2]/100+226);
dc.MoveTo(point3);
dc.LineTo(Fzpoint);
point3=Fzpoint;
//Fx2
dc.SelectObject(pen4);
Mxpoint.x=i+50;
Mxpoint.y=(int)(-Data[i][3]/100+226);
dc.MoveTo(point4);
dc.LineTo(Mxpoint);
point4=Mxpoint;
//Fy2
dc.SelectObject(pen5);
Mypoint.x=i+50;
Mypoint.y=(int)(-Data[i][4]/100+226);
dc.MoveTo(point5);
dc.LineTo(Mypoint);
point5=Mypoint;
//Fz2
dc.SelectObject(pen6);
Mzpoint.x=i+50;
Mzpoint.y=(int)(-Data[i][5]/100+226);
dc.MoveTo(point6);
dc.LineTo(Mzpoint);
point6=Mzpoint;
}
//显示传感器的数据
for (i=0;i<12;i++)
{
txt[i].Format("%8.0f",Data[1][i]);
txt[i].TrimLeft();
txt[i].TrimRight();
}
dc.SetBkMode(TRANSPARENT);
dc.SetTextColor(RGB(128,0,255));
dc.TextOut(110,530,txt[0]);
dc.TextOut(110,570,txt[1]);
dc.TextOut(110,610,txt[2]);
dc.TextOut(350,530,txt[3]);
dc.TextOut(350,570,txt[4]);
dc.TextOut(350,610,txt[5]);
dc.TextOut(590,530,txt[6]);
dc.TextOut(590,570,txt[7]);
dc.TextOut(830,530,txt[8]);
dc.TextOut(830,570,txt[9]);
}
void CSAFSView::OnSampleSet()
{
//
CSampleSet CSSet;
if (CSSet.DoModal()==IDOK)
{
}
}
void CSAFSView::OnCreateBitmap()
{
CString strtime0,strtime1,strtime2,strtime3,strtime4,strtime5,strtime6,strtime7;
CString strtime8,strtime9,strtime10,strtime11,strtime12,strtime13,strtime14;
CBrush brush;
brush.CreateStockObject(WHITE_BRUSH);
CRect rect(-1,-1,1024,768);
CBitmap* pOldBitmap=m_pMemDC->SelectObject(m_pBitmap);
brush.CreateStockObject(WHITE_BRUSH);
m_pMemDC->FillRect(rect,&brush);
m_pMemDC->SelectStockObject(WHITE_BRUSH);
m_pMemDC->SetBkMode(TRANSPARENT);
m_pMemDC->Rectangle(0,0,1024,768);
CPen pen(PS_SOLID,3,RGB(255,107,0));
CPen xpen1(PS_DOT,1,RGB(44,86,86));
CPen pen1(PS_SOLID,1,RGB(255,255,0));
CPen blackpen(PS_SOLID,1,RGB(0,0,0));
CPen bluepen(PS_SOLID,1,RGB(0,0,255));
CPen xpen(PS_SOLID,2,RGB(255,255,255));
CPen redpen(PS_SOLID,1,RGB(255,0,0));
CPen whitepen(PS_SOLID,1,RGB(150,155,155));
int j=0;
CString str_force[6];
m_pMemDC->SelectObject(&xpen);
m_pMemDC->SelectStockObject(WHITE_PEN);
m_pMemDC->SetBkMode(TRANSPARENT);
m_pMemDC->Rectangle(0,0,1024,768);
m_pMemDC->SelectObject(&bluepen);
m_pMemDC->SetBkMode(TRANSPARENT);
m_pMemDC->Rectangle(50,10,1012,498);
m_pMemDC->Rectangle(50,518,1012,638);
for (int scale=0;scale<19;scale++)
{
// m_pMemDC->SelectObject(&bluepen);
// m_pMemDC->MoveTo((scale*50+50),498);
// m_pMemDC->LineTo((scale*50+50),503);
m_pMemDC->SelectObject(&xpen1);
m_pMemDC->MoveTo((scale*50+100),498);////竖线
m_pMemDC->LineTo((scale*50+100),10);
}
m_pMemDC->SelectObject(&xpen1);
m_pMemDC->MoveTo(50,64);
m_pMemDC->LineTo(1012,64);
m_pMemDC->MoveTo(50,118);
m_pMemDC->LineTo(1012,118);
m_pMemDC->MoveTo(50,172);
m_pMemDC->LineTo(1012,172);
m_pMemDC->MoveTo(50,280);
m_pMemDC->LineTo(1012,280);
m_pMemDC->MoveTo(50,334);
m_pMemDC->LineTo(1012,334);
m_pMemDC->MoveTo(50,388);
m_pMemDC->LineTo(1012,388);
m_pMemDC->MoveTo(50,442);
m_pMemDC->LineTo(1012,442);
// m_pMemDC->MoveTo(50,496);
// m_pMemDC->LineTo(1012,496);
m_pMemDC->SelectObject(&blackpen);
m_pMemDC->MoveTo(50,226);
m_pMemDC->LineTo(1012,226);
m_pMemDC->MoveTo(50,555);
m_pMemDC->LineTo(1012,555);
m_pMemDC->MoveTo(50,594);
m_pMemDC->LineTo(1012,594);
m_pMemDC->MoveTo(290,518);//竖线
m_pMemDC->LineTo(290,638);
m_pMemDC->MoveTo(530,518);
m_pMemDC->LineTo(530,638);
m_pMemDC->MoveTo(770,518);
m_pMemDC->LineTo(770,638);
m_pMemDC->SetTextColor(RGB(0,0,128));
m_pMemDC->TextOut(7,2,"图形");
m_pMemDC->SetTextColor(RGB(255,0,0));
m_pMemDC->TextOut(6,20,"Fx1");
m_pMemDC->SetTextColor(RGB(0,128,255));
m_pMemDC->TextOut(6,40,"Fy1");
m_pMemDC->SetTextColor(RGB(0,255,0));
m_pMemDC->TextOut(6,60,"Fz1");
m_pMemDC->SetTextColor(RGB(255,0,255));
m_pMemDC->TextOut(6,80,"Fx2");
m_pMemDC->SetTextColor(RGB(128,0,255));
m_pMemDC->TextOut(6,100,"Fy2");
m_pMemDC->SetTextColor(RGB(0,0,64));
m_pMemDC->TextOut(6,120,"Fz2");
m_pMemDC->TextOut(30,216,"0");
m_pMemDC->SetTextColor(RGB(128,0,255));
m_pMemDC->TextOut(60,530,"Fx1=");
m_pMemDC->TextOut(60,570,"Fy1=");
m_pMemDC->TextOut(60,610,"Fz1=");
m_pMemDC->TextOut(300,530,"Fx2=");
m_pMemDC->TextOut(300,570,"Fy2=");
m_pMemDC->TextOut(300,610,"Fz2=");
m_pMemDC->TextOut(540,530,"Fx3=");
m_pMemDC->TextOut(540,570,"Fy3=");
m_pMemDC->TextOut(780,530,"Fx4=");
m_pMemDC->TextOut(780,570,"Fy4=");
m_pMemDC->SetTextColor(RGB(0,0,128));
m_pMemDC->TextOut(6,460,"时间");
m_pMemDC->TextOut(6,480,"(ms)");
m_pMemDC->TextOut(40,500,"0");
//for (int scale=0;scale<12;scale++)
//{
// strtime0.Format("%-6.0d",(1000*((flag_ScreenNumber-1)*550+50*scale)/samplefrq));
// m_pMemDC->TextOut((scale*50+50)-15,672,strtime0);
//}
int flag_ScreenNumber=1,samplefrq=1;
for (scale=0;scale<20;scale++)
{
strtime0.Format("%-6.0d",(1*((flag_ScreenNumber-1)*550+50*scale)/samplefrq));
m_pMemDC->TextOut((scale*50+50)-15,500,strtime0);
}
m_pMemDC->SelectObject(pOldBitmap);
}
int CSAFSView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
CDC* pDC=GetDC();
m_pMemDC->CreateCompatibleDC(pDC);
m_pBitmap->CreateCompatibleBitmap(pDC,1024,768);
OnCreateBitmap();
ReleaseDC(pDC);
/* m_nMaxX=GetSystemMetrics(SM_CXSCREEN);
m_nMaxY=GetSystemMetrics(SM_CYSCREEN);
m_LBitmap->CreateCompatibleBitmap(pDC,m_nMaxX,m_nMaxY);
m_sBitmap->CreateCompatibleBitmap(pDC,m_nMaxX,m_nMaxY);
m_mBitmap->CreateCompatibleBitmap(pDC,m_nMaxX,m_nMaxY);
m_fdBitmap->CreateCompatibleBitmap(pDC,m_nMaxX,m_nMaxY);
m_nBitmap->CreateCompatibleBitmap(pDC,1024,768);
OnCreateFangDaCoordinate();
OnCreateLeisureCoordinate();
OnCreateSingleCoordinate();
OnCreateMultiCoordinate();
OnCreateCOPCoordinate();
*/
return 0;
}
void CSAFSView::OnFileSave()
{
CStdioFile savedata;
CString FileName,number,data1,data2,m_UserName,m_Sex;
int n,endpointtime,samplefrq,endtimeset;float Force_Fz_threshold;
CFileDialog SaveFileDialog(TRUE,"TXT");
SaveFileDialog.m_ofn.lpstrTitle="保存新数据文件";
SaveFileDialog.m_ofn.lpstrFilter="数据文件(*.TXT)\0*.TXT\0";
if(SaveFileDialog.DoModal()==IDOK)
FileName=SaveFileDialog.GetPathName();
else
FileName="temp.tmp";
endpointtime=1024;
samplefrq=1000;
m_UserName="User";
m_Sex="male";
endtimeset=10;
Force_Fz_threshold=0;
savedata.Open(FileName,CFile::modeCreate|CFile::modeWrite|CFile::typeText);
savedata.SeekToEnd();
data1.Format("%8d",endpointtime);
savedata.WriteString(data1);
savedata.WriteString("\n");
data1.Format("%5d",samplefrq);
savedata.WriteString(data1);
savedata.WriteString("\n");
savedata.WriteString(m_UserName);
savedata.WriteString("\n");
savedata.WriteString(m_Sex);
savedata.WriteString("\n");
data1.Format("%8d",endtimeset);
savedata.WriteString(data1);
savedata.WriteString("\n");
data1.Format("%8.0f",Force_Fz_threshold);
savedata.WriteString(data1);
savedata.WriteString("\n");
for(n=0;n<endpointtime;n++)
{
data2.Format("%-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f \n",Data[n][0],Data[n][1],Data[n][2],Data[n][3],Data[n][4],Data[n][5],Data[n][6],Data[n][7],Data[n][8],Data[n][9]);
savedata.WriteString(data2);
}
}
void CSAFSView::OnCls()
{
Invalidate(false) ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -