⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 swmainform.h

📁 一个Windows下演示PID功能的源程序
💻 H
字号:
#include <SmartWin.h>#include <vector>#include "cv.h"#include "OpenCV_EX.h"#include <fstream>using namespace SmartWin;using namespace std;typedef struct PID_RECT{    LONG    l;//left;    LONG    t;//top;    LONG    r;//right;    LONG    b;//bottom;    LONG    w;//width;    LONG    h;//height;    LONG    x;//左下角x坐标;    LONG    y;//左下角y坐标;};PID_RECT r={510,100,100+256,510+256,256,256,510,100+256};const int PID_out_buf_MAX=256;double kp=0.5;double ki=0.001;double kd=0.001;double num2=0.0097;double num3=0.0344;double num4=0.0078;double den2=-2.4386;double den3=2.0848;double den4=-0.6461;double input=8;int samplenum=0;double output[PID_out_buf_MAX]={0.0};double ts=0.005;double u1=0.0;double u2=0.0;double u3=0.0;double uk=0.0;double y11=0.0;double y2=0.0;double y3=0.0;double yk=0.0;double x1=0.0;double x2=0.0;double x3=0.0;double error=0.0;double error1=0.0;class SWMainForm : public WidgetFactory< WidgetWindow, SWMainForm>{	private:        //下面一行为Obtain可视化编辑内容开始的标识,请不要删除或更改        //*<define_Visual>
        WidgetButtonPtr button1;
        WidgetTextBoxPtr m_edit1;
        WidgetButtonPtr button2;
        WidgetSliderPtr slider1;
        CImageEX img1;
        WidgetTextBoxPtr m_edit2;
        WidgetTextBoxPtr m_edit3;
        WidgetTextBoxPtr m_edit4;
        WidgetTextBoxPtr m_edit5;
        WidgetTextBoxPtr m_edit6;
        WidgetTextBoxPtr m_edit7;
        WidgetTextBoxPtr m_edit8;
        WidgetTextBoxPtr m_edit9;
        WidgetTextBoxPtr m_edit10;
        WidgetButtonPtr button3;
        WidgetTextBoxPtr m_edit11;
        WidgetStaticPtr static1;

//*</define_Visual>	    //上面一行为Obtain可视化编辑内容开始的标识,请不要更改或删除	    HWND hWnd;	    HDC hDC;	    WidgetToolbarPtr toolbar,toolbar_1;	    WidgetMenuPtr mainMenu;	    	    int i_PID_out_buf[PID_out_buf_MAX];	    int i_PID_out_point;	    bool b_PID_isrun;			public:	void setMainForm(SmartUtil::tstring caption,int cx,int cy)	{	    WidgetWindow::Seed cs;		cs.style=WS_VISIBLE | WS_THICKFRAME | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_OVERLAPPED;		cs.exStyle=0;	    cs.caption=caption;        cs.location.size.x=cx;        cs.location.size.y=cy;        this->createWindow(cs);	}		//region void initAndCreate	void initAndCreate()	{ 		//下面一行为Obtain可视化编辑内容开始的标识,请不要删除或更改		//*<Obtain_Visual>
        setMainForm(_T("SmartWin Main Window"),800,664);
        button1=createButton();
        button1->setText(_T("启动"));
        button1->onClicked(& SWMainForm::OnButton1);
        button1->setBounds(204,55,84,37);
        WidgetTextBox::Seed  m_edit1Seed;
        m_edit1Seed.exStyle=WS_EX_CLIENTEDGE;
        m_edit1Seed.style=WS_VISIBLE | WS_CHILD | ES_AUTOHSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | ES_WANTRETURN;
        m_edit1=createTextBox(m_edit1Seed);
        m_edit1->setText(_T("200"));
        m_edit1->setBounds(9,57,44,33);
        button2=createButton();
        button2->setText(_T("重置设定值"));
        button2->onClicked(& SWMainForm::OnButton2);
        button2->setBounds(64,55,107,36);
        slider1=createSlider();
        slider1->setShowTicksTop(false);
        slider1->setTickFrequency(1);
        slider1->setRange(0,100);
        slider1->setPosition(0);
        slider1->setBounds(5,100,30,256);
        hWnd = this->handle();
        hDC = GetDC ( hWnd );
        //请根据需要修改下面的图像文件名
        img1.Load("1.bmp",1);
        //img1.Show(hDC,117,97,367,181);
        RECT pRect_img1={117,97,484,302};
        img1.DrawToHDC(hDC,&pRect_img1);
        WidgetTextBox::Seed  m_edit2Seed;
        m_edit2Seed.exStyle=WS_EX_CLIENTEDGE;
        m_edit2Seed.style=WS_VISIBLE | WS_CHILD | ES_AUTOHSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | ES_WANTRETURN;
        m_edit2=createTextBox(m_edit2Seed);
        m_edit2->setText(_T("0.5"));
        m_edit2->setBounds(153,290,68,22);
        WidgetTextBox::Seed  m_edit3Seed;
        m_edit3Seed.exStyle=WS_EX_CLIENTEDGE;
        m_edit3Seed.style=WS_VISIBLE | WS_CHILD | ES_AUTOHSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | ES_WANTRETURN;
        m_edit3=createTextBox(m_edit3Seed);
        m_edit3->setText(_T("0.001"));
        m_edit3->setBounds(153,328,68,22);
        WidgetTextBox::Seed  m_edit4Seed;
        m_edit4Seed.exStyle=WS_EX_CLIENTEDGE;
        m_edit4Seed.style=WS_VISIBLE | WS_CHILD | ES_AUTOHSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | ES_WANTRETURN;
        m_edit4=createTextBox(m_edit4Seed);
        m_edit4->setText(_T("0.001"));
        m_edit4->setBounds(154,363,68,22);
        WidgetTextBox::Seed  m_edit5Seed;
        m_edit5Seed.exStyle=WS_EX_CLIENTEDGE;
        m_edit5Seed.style=WS_VISIBLE | WS_CHILD | ES_AUTOHSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | ES_WANTRETURN;
        m_edit5=createTextBox(m_edit5Seed);
        m_edit5->setText(_T("0.0097"));
        m_edit5->setBounds(273,291,68,22);
        WidgetTextBox::Seed  m_edit6Seed;
        m_edit6Seed.exStyle=WS_EX_CLIENTEDGE;
        m_edit6Seed.style=WS_VISIBLE | WS_CHILD | ES_AUTOHSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | ES_WANTRETURN;
        m_edit6=createTextBox(m_edit6Seed);
        m_edit6->setText(_T("0.0344"));
        m_edit6->setBounds(273,329,68,22);
        WidgetTextBox::Seed  m_edit7Seed;
        m_edit7Seed.exStyle=WS_EX_CLIENTEDGE;
        m_edit7Seed.style=WS_VISIBLE | WS_CHILD | ES_AUTOHSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | ES_WANTRETURN;
        m_edit7=createTextBox(m_edit7Seed);
        m_edit7->setText(_T("0.0078"));
        m_edit7->setBounds(274,364,68,22);
        WidgetTextBox::Seed  m_edit8Seed;
        m_edit8Seed.exStyle=WS_EX_CLIENTEDGE;
        m_edit8Seed.style=WS_VISIBLE | WS_CHILD | ES_AUTOHSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | ES_WANTRETURN;
        m_edit8=createTextBox(m_edit8Seed);
        m_edit8->setText(_T("-2.4386"));
        m_edit8->setBounds(389,289,68,22);
        WidgetTextBox::Seed  m_edit9Seed;
        m_edit9Seed.exStyle=WS_EX_CLIENTEDGE;
        m_edit9Seed.style=WS_VISIBLE | WS_CHILD | ES_AUTOHSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | ES_WANTRETURN;
        m_edit9=createTextBox(m_edit9Seed);
        m_edit9->setText(_T("2.0848"));
        m_edit9->setBounds(388,327,68,22);
        WidgetTextBox::Seed  m_edit10Seed;
        m_edit10Seed.exStyle=WS_EX_CLIENTEDGE;
        m_edit10Seed.style=WS_VISIBLE | WS_CHILD | ES_AUTOHSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | ES_WANTRETURN;
        m_edit10=createTextBox(m_edit10Seed);
        m_edit10->setText(_T("-0.6461"));
        m_edit10->setBounds(390,362,68,22);
        button3=createButton();
        button3->setText(_T("默认值"));
        button3->onClicked(& SWMainForm::OnButton3);
        button3->setBounds(51,303,89,50);
        WidgetTextBox::Seed  m_edit11Seed;
        m_edit11Seed.exStyle=WS_EX_CLIENTEDGE;
        m_edit11Seed.style=WS_VISIBLE | WS_CHILD | ES_AUTOHSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | ES_WANTRETURN;
        m_edit11=createTextBox(m_edit11Seed);
        m_edit11->setText(_T("0.005"));
        m_edit11->setBounds(153,409,71,30);
        static1=createStatic();
        static1->setText(_T("采样时间:"));
        static1->setBounds(66,405,61,40);

//*</Obtain_Visual>		//上面一行为Obtain可视化编辑内容开始的标识,请不要更改或删除		onPainting(  & SWMainForm::paint );		//::ShowWindow( (this )->handle(), SW_SHOWMAXIMIZED);		SWMainForm::main_createMenu();        SWMainForm::main_createToolbar();        i_PID_out_point=0;        b_PID_isrun=false;        slider1->setHorizontal( false );        slider1->onScrollVert(& SWMainForm::OnSlider1);        slider1->setRange(0,256);        slider1->setPosition( 56);                /*        PID_KP=0.5;        PID_KI=0.001;        PID_KD=0.001;        PID_K0=(PID_KP+PID_KI+PID_KD);        PID_K1=-(PID_KP+2*PID_KD);        PID_K2=PID_KD;        PID_u[2]=0.0;PID_u[1]=0.0;PID_u[0]=0.0;         PID_e[2]=0.0;PID_e[1]=0.0;PID_e[0]=0.0;           PID_OUT_DATA=0.0;        PID_INIT_SET=250;         */                //PID_Init();	}	//endregion	private:        //下面一行为Obtain可视

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -