📄 realtimectrlview.cpp
字号:
for (int i=0; i<m_StrokePV.GetSize(); i++)
{
if((m_StrokeMV[i].x>=rectMain.left-1)&&(m_StrokeMV[i].x<=rectMain.right)&&(m_StrokeMV[i].y>=rectMain.top)&&(m_StrokeMV[i].y<=rectMain.bottom))
{
if(bFirstPoint)
{
dc.MoveTo(m_StrokeMV[i]);
bFirstPoint = FALSE;
}
else
{
if(m_StrokeMV[i].x<rectMain.right)
dc.LineTo(m_StrokeMV[i]);
else
dc.LineTo(m_StrokeMV[i].x-2,m_StrokeMV[i].y);
}
}
}
dc.SelectObject(pOldpen);
}
if(m_StrokeSV.GetSize()>=1)
{
bFirstPoint = TRUE;
CPen* pOldpen = dc.SelectObject(&penSV);
for ( int i=0; i<m_StrokeSV.GetSize(); i++)
{
if((m_StrokeSV[i].x>=rectMain.left-1)&&(m_StrokeSV[i].x<=rectMain.right)&&(m_StrokeSV[i].y>=rectMain.top)&&(m_StrokeSV[i].y<=rectMain.bottom))
{
if(bFirstPoint)
{
dc.MoveTo(m_StrokeSV[i]);
bFirstPoint = FALSE;
}
else
{
if(m_StrokeSV[i].x<rectMain.right)
dc.LineTo(m_StrokeSV[i]);
else
dc.LineTo(m_StrokeSV[i].x-2,m_StrokeSV[i].y);
}
}
}
dc.SelectObject(pOldpen);
}
if(m_StrokePV.GetSize()>=1)
for(int i=0; i<m_StrokePV.GetSize(); i++)
m_StrokePV[i].x = m_StrokePV[i].x+m_lXAdd;
if(m_StrokeMV.GetSize()>=1)
for(int i=0; i<m_StrokeMV.GetSize(); i++)
m_StrokeMV[i].x = m_StrokeMV[i].x+m_lXAdd;
if(m_StrokeSV.GetSize()>=1)
for(int i=0; i<m_StrokeSV.GetSize(); i++)
m_StrokeSV[i].x = m_StrokeSV[i].x+m_lXAdd;
}
void CRealTimeCtrlView::DrawStroke(CDC* pDC) //OnDraw中画图
{
CRect rectMain; //主绘图区
rectMain.SetRect(21,48,847,418);
CPen penPV,penMV,penSV;
penPV.CreatePen(PS_SOLID,2,RGB(255,0,0));
penMV.CreatePen(PS_SOLID,2,RGB(255,0,255));
penSV.CreatePen(PS_SOLID,2,RGB(0,0,255));
// CClientDC dc(this);
if(m_StrokePV.GetSize()>=1)
for(int i=0; i<m_StrokePV.GetSize(); i++)
m_StrokePV[i].x = m_StrokePV[i].x-m_lXAdd;
if(m_StrokeMV.GetSize()>=1)
for(int i=0; i<m_StrokeMV.GetSize(); i++)
m_StrokeMV[i].x = m_StrokeMV[i].x-m_lXAdd;
if(m_StrokeSV.GetSize()>=1)
for(int i=0; i<m_StrokeSV.GetSize(); i++)
m_StrokeSV[i].x = m_StrokeSV[i].x-m_lXAdd;
BOOL bFirstPoint = TRUE;
if(m_StrokePV.GetSize()>=1)
{
CPen* pOldpen = pDC->SelectObject(&penPV);
for ( int i=0; i<m_StrokePV.GetSize(); i++)
{
if((m_StrokePV[i].x>=rectMain.left-1)&&(m_StrokePV[i].x<=rectMain.right)&&(m_StrokePV[i].y>=rectMain.top)&&(m_StrokePV[i].y<=rectMain.bottom))
{
if(bFirstPoint)
{
pDC->MoveTo(m_StrokePV[i]);
bFirstPoint = FALSE;
}
else
pDC->LineTo(m_StrokePV[i]);
}
}
pDC->SelectObject(pOldpen);
}
if(m_StrokeMV.GetSize()>=1)
{
bFirstPoint = TRUE;
CPen* pOldpen = pDC->SelectObject(&penMV);
for (int i=0; i<m_StrokePV.GetSize(); i++)
{
if((m_StrokeMV[i].x>=rectMain.left-1)&&(m_StrokeMV[i].x<=rectMain.right)&&(m_StrokeMV[i].y>=rectMain.top)&&(m_StrokeMV[i].y<=rectMain.bottom))
{
if(bFirstPoint)
{
pDC->MoveTo(m_StrokeMV[i]);
bFirstPoint = FALSE;
}
else
pDC->LineTo(m_StrokeMV[i]);
}
}
pDC->SelectObject(pOldpen);
}
if(m_StrokeSV.GetSize()>=1)
{
bFirstPoint = TRUE;
CPen* pOldpen = pDC->SelectObject(&penSV);
for ( int i=0; i<m_StrokeSV.GetSize(); i++)
{
if((m_StrokeSV[i].x>=rectMain.left-1)&&(m_StrokeSV[i].x<=rectMain.right)&&(m_StrokeSV[i].y>=rectMain.top)&&(m_StrokeSV[i].y<=rectMain.bottom))
{
if(bFirstPoint)
{
pDC->MoveTo(m_StrokeSV[i]);
bFirstPoint = FALSE;
}
else
pDC->LineTo(m_StrokeSV[i]);
}
}
pDC->SelectObject(pOldpen);
}
if(m_StrokePV.GetSize()>=1)
for(int i=0; i<m_StrokePV.GetSize(); i++)
m_StrokePV[i].x = m_StrokePV[i].x+m_lXAdd;
if(m_StrokeMV.GetSize()>=1)
for(int i=0; i<m_StrokeMV.GetSize(); i++)
m_StrokeMV[i].x = m_StrokeMV[i].x+m_lXAdd;
if(m_StrokeSV.GetSize()>=1)
for(int i=0; i<m_StrokeSV.GetSize(); i++)
m_StrokeSV[i].x = m_StrokeSV[i].x+m_lXAdd;
}
void CRealTimeCtrlView::PIDCtrlCal()
{
m_fDV = m_fSV - m_fPV; //计算偏差
//---------------采用变增益控制-增益系数m_fK---------------
if((m_fDV<=m_fd) && (m_fDV>=(-m_fd)))
m_fDV = m_fK*m_fDV;
else if(m_fDV>m_fd)
m_fDV = m_fDV-(1-m_fK)*m_fd;
else
m_fDV = m_fDV+(1-m_fK)*m_fd;
float delta_DV = m_fDV-m_fDV1;
float delta_MV = delta_DV+m_fTc*m_fDV/m_fTI;
// delta_MV = (delta_MV+m_fTD/m_fTc*(m_fDV+m_fDV2-2*m_fDV1))*m_fKP; //不加不完全微分时
//--------------不完全微分所加的内容-------------------------
m_fU = (1/(m_fTc+m_fTD/m_fm))*(m_fTD*delta_DV+m_fTD*m_fU1/m_fm);
delta_MV = (delta_MV+m_fU-m_fU1)*m_fKP;///1000;
m_fU1 = m_fU;
//--------------变化率限幅------------------------
// if((m_fDV>=0.05f)||(m_fDV<=-0.05))
// {
if(delta_MV>=0.6f)
delta_MV = 0.6f;
else if(delta_MV<=-0.6f)
delta_MV = -0.6f;
/* }
else
{
if(delta_MV>=0.01f)
delta_MV = 0.01f;
else if(delta_MV<=-0.01f)
delta_MV = -0.01f;
}*/
m_fMV[0] = m_fMV[1]+delta_MV;
//---------------输出限幅--------------------------
if(m_fMV[0]>=m_fMH)
m_fMV[0] = m_fMH;
else if(m_fMV[0]<=m_fML)
m_fMV[0] = m_fML;
m_fDV2 = m_fDV1;
m_fDV1 = m_fDV;
// for(int i=149;i>0;i--)
// m_fMV[i] = m_fMV[i-1];
}
void CRealTimeCtrlView::ManualCtrl()
{
// m_fDV = m_fSV - m_fPV; //计算偏差
m_fMV[0] = m_fManual;
}
void CRealTimeCtrlView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
if(pScrollBar->GetDlgCtrlID()==IDC_SLIDER_MANUAL)
{
int nManual = m_SliderManual.GetPos();
m_fManual = nManual/10000.0f;
CString str;
str.Format("%7.5f",m_fManual);
m_EditManual.SetSel(0,-1);
m_EditManual.ReplaceSel(str);
}
if(pScrollBar->GetDlgCtrlID()==IDC_SCROLLBAR)
{
switch(nSBCode) {
case SB_PAGEDOWN:
if(m_nNowPage3<m_nAllPage*3-2)
{
m_nNowPage3+=3;
m_Scrollbar.SetScrollPos(m_nNowPage3);//-2
m_lXAdd = (m_nNowPage3-3)*(847-21)/3;
DrawStroke();
// Invalidate(TRUE);
break;
}
else
break;
case SB_PAGEUP:
if(m_nNowPage3>6)
{
m_nNowPage3-=3;
m_Scrollbar.SetScrollPos(m_nNowPage3-2);
m_lXAdd = (m_nNowPage3-3)*(847-21)/3;
DrawStroke();
// Invalidate(TRUE);
break;
}
else if(m_nNowPage3>3)
{
m_nNowPage3 = 3;
m_Scrollbar.SetScrollPos(m_nNowPage3-3);
m_lXAdd = (m_nNowPage3-3)*(847-21)/3;
DrawStroke();
// Invalidate(TRUE);
break;
}
else
break;
case SB_LINELEFT:
if(m_nNowPage3>3)
{
m_nNowPage3-=1;
m_Scrollbar.SetScrollPos(m_nNowPage3-2);
m_lXAdd = (m_nNowPage3-3)*(847-21)/3;
DrawStroke();
// Invalidate(TRUE);
break;
}
else
break;
case SB_LINERIGHT:
if(m_nNowPage3<3*m_nAllPage)
{
m_nNowPage3+=1;
// if(m_nNowPage3 == m_nAllPage*3) m_Scrollbar.SetScrollPos(m_nNowPage3);
// else m_Scrollbar.SetScrollPos(m_nNowPage3-2);
m_Scrollbar.SetScrollPos(m_nNowPage3);
m_lXAdd = (m_nNowPage3-3)*(847-21)/3;
DrawStroke();
// Invalidate(TRUE);
break;
}
else
break;
default:
break;
}
}
CFormView::OnHScroll(nSBCode, nPos, pScrollBar);
}
void CRealTimeCtrlView::OnMenuSpeed1()
{
// TODO: Add your command handler code here
m_nSpeed = 1;
}
void CRealTimeCtrlView::OnUpdateMenuSpeed1(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_nSpeed==1);
pCmdUI->Enable(m_bSuspend);
}
void CRealTimeCtrlView::OnMenuSpeed8()
{
// TODO: Add your command handler code here
m_nSpeed = 8;
}
void CRealTimeCtrlView::OnUpdateMenuSpeed8(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_nSpeed==8);
pCmdUI->Enable(m_bSuspend);
}
void CRealTimeCtrlView::OnMenuSpeed2()
{
// TODO: Add your command handler code here
m_nSpeed = 2;
}
void CRealTimeCtrlView::OnUpdateMenuSpeed2(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_nSpeed==2);
pCmdUI->Enable(m_bSuspend);
}
void CRealTimeCtrlView::OnMenuSpeed4()
{
// TODO: Add your command handler code here
m_nSpeed = 4;
}
void CRealTimeCtrlView::OnUpdateMenuSpeed4(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_nSpeed==4);
pCmdUI->Enable(m_bSuspend);
}
void CRealTimeCtrlView::OnMenuSpeed16()
{
// TODO: Add your command handler code here
m_nSpeed = 16;
}
void CRealTimeCtrlView::OnUpdateMenuSpeed16(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_nSpeed==16);
pCmdUI->Enable(m_bSuspend);
}
void CRealTimeCtrlView::OnLButtonDown(UINT nFlags, CPoint point)
{
/* // TODO: Add your message handler code here and/or call default
CPoint pt = point;
ScreenToClient(&pt);
CRect rectMain;
rectMain.SetRect(21,48,847,418);
CPoint ptOre(21,418);
float nXStep = (float)((847-21)/150.0);
float nYStep = (418-48)/5.0;
if((pt.x>=rectMain.left)&&(pt.x<=rectMain.right)&&(pt.y>=rectMain.top-40)&&(pt.y<=rectMain.bottom-40))
{
int i =int( (pt.x-rectMain.left)/nXStep );
i = i+50*(m_nNowPage3-3);
if(i<m_StrokePV.GetSize())
{
float fPv,fMv,fSv;
fPv = (ptOre.y-m_StrokePV[i].y)/nYStep;
fMv = (ptOre.y-m_StrokeMV[i].y)/nYStep;
fSv = (ptOre.y-m_StrokeSV[i].y)/nYStep;
CString str;
str.Format("%7.5f",fPv);
m_EditShowPV.SetSel(0,-1);
m_EditShowPV.ReplaceSel(str);
str.Format("%7.5f",fMv);
m_EditShowMV.SetSel(0,-1);
m_EditShowMV.ReplaceSel(str);
str.Format("%7.5f",fSv);
m_EditShowSV.SetSel(0,-1);
m_EditShowSV.ReplaceSel(str);
}
}
*/
CFormView::OnLButtonDown(nFlags, point);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -