【CNC——第3篇】基於固高鏈接庫用VS寫一個點位運動窗體應用 (vs C# Winform編程學習)

資料鏈接:Microsoft Windows 窗體

Windows 窗體,是一種基於 Windows 的應用程序,說白了就是給企業和最終用戶使用的客戶端。

窗體的設計

1 新建 windows窗體運用

CSDN圖標

2 複製GTS800.cfg和gts.dll文件到/bin/debug文件夾下;複製gts.cs文件到和 Program.cs文件同級的文件夾內。
這些文件其實就是動態鏈接庫和函數聲明文件等文件,他們包含了該款控制卡配套的廠家開發的函數,用戶開發就是調用這些函數。

3 然後再在工具箱中選擇 label,textbox,timer 控件放到 form1 中,並打開屬性頁面,將其 text 屬
性改成圖中所示名稱,如圖:

CSDN圖標

4 依次雙擊所有按鈕button1-6以及 timer1,就會在Form1.cs文件中自動生成其響應函數,而下一步就是自己在響應函數裏編程。

Form1.cs 文件代碼

編程時可以看編程手冊,由於剛入門,現在只是驗證性地看一下編程手冊,知道一下爲什麼是這麼寫,在哪裏可以看到這個函數,它的函數作用以及函數原型是什麼,碼代碼Ctrl+J快捷鍵可以打開自動提示,能夠提醒函數原型,非常防脫髮。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 點位運動1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //定義全局變量
        bool flag = false;
        short rtn;
        int pos, vel;
        uint clk;
        double prfpos, prfvel, encpos, encvel;
        short AXIS = 1;//定義當前軸爲1軸
        //初始化
        private void button1_Click(object sender, EventArgs e)
        {
            rtn = gts.mc.GT_Open(0, 1);//打開控制卡
            rtn = gts.mc.GT_Reset();//控制卡復位
            rtn = gts.mc.GT_LoadConfig("GTS800.cfg");//加載配置文件
            rtn = gts.mc.GT_ClrSts(1, 8);//清除狀態,從1軸開始,最多8個軸
            timer1.Enabled = true;//開啓定時器
        }
        //清除狀態
        private void button2_Click(object sender, EventArgs e)
        {
            rtn = gts.mc.GT_ClrSts(1, 8);//清除狀態
        }
        //伺服使能
        private void button3_Click(object sender, EventArgs e)
        {
            if(flag==false)//判斷伺服標誌位
            {
                gts.mc.GT_AxisOn(AXIS);//開伺服
                button3.Text = "伺服開啓";
                flag = !flag;
            }
            else if(flag==true)
            {
                gts.mc.GT_AxisOff(AXIS);//關伺服
                button3.Text = "伺服關閉";
                flag = !flag;
            }
        }

  

        //位置清零
        private void button4_Click(object sender, EventArgs e)
        {
            gts.mc.GT_ZeroPos(1, 8);//位置清零,從1軸開始,最多8個軸
        }

        private void button5_Click(object sender, EventArgs e)
        {
            timer1.Start();//開啓定時器顯示
            rtn = gts.mc.GT_PrfTrap(AXIS);//設置當前軸爲點位運動模式
            gts.mc.TTrapPrm trapprm; //定義爲點位運動結構體變量
            gts.mc.GT_GetTrapPrm(AXIS, out trapprm);//讀取點位模式運動參數
            trapprm.acc = 0.1;//設置加速度
            trapprm.dec = 0.1;//設置減速度
            trapprm.smoothTime = 1;//設置平滑時間
            gts.mc.GT_SetTrapPrm(AXIS, ref trapprm);//設置點位運動參數

            pos += Convert.ToInt32(textBox1.Text);//獲取輸入框內數字
            vel = Convert.ToInt32(textBox2.Text);//轉換爲int32位

            rtn = gts.mc.GT_SetPos(AXIS, pos);//設置目標位置
            rtn = gts.mc.GT_SetVel(AXIS, vel);//設置目標速度
            rtn = gts.mc.GT_Update(AXIS);
        }
        //停止運動
        private void button6_Click(object sender, EventArgs e)
        {
            timer1.Stop();//關閉定時器
            rtn = gts.mc.GT_Stop(AXIS, 0);//停止運動
        }
        //使用定時器顯示狀態
        private void timer1_Tick(object sender, EventArgs e)
        {
            gts.mc.GT_GetPrfPos(AXIS, out prfpos, 1, out clk);// 讀取規劃位置
            gts.mc.GT_GetPrfPos(AXIS, out encpos, 1, out clk);//讀取實際位置
            textBox3.Text = prfpos.ToString();
            textBox5.Text = encpos.ToString();
            gts.mc.GT_GetPrfVel(AXIS, out prfvel, 1, out clk);//讀取規劃速度
            gts.mc.GT_GetPrfVel(AXIS, out encvel, 1, out clk);//讀取實際速度
            textBox4.Text = prfvel.ToString();
            textBox6.Text = encvel.ToString();
        }
    }
}

啓動運行或者F5,運行效果

CSDN圖標

多窗體

一般來說,一個應用由一個主頁面,然後按照功能進行分組,所以有種方法是運行進入主窗體,通過菜單選擇功能子窗體。

1 添加窗體,即cs文件,然後在工具欄中添加menuskrip控件,添加Picturebox導入圖片,命名如下:

CSDN圖標

2 同樣雙擊menuskrip中的子選項就可以創建點擊響應函數,我們添加代碼:

	Form1 dianwei = new Form1();// 打開窗體1
	dianwei.Show();
    //this.Close();// 關閉此窗體

Form0.cs文件

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 點位運動1
{
    public partial class Form0 : Form
    {
        public Form0()
        {
            InitializeComponent();
        }

        private void 點位運動ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form1 dianwei = new Form1();
            dianwei.Show();
            //this.Close();
        }

    }
}

改寫program. cs中Application.Run(new Form0());//打開窗體0,讓運行開啓主窗體。

 static class Program
    {
        /// <summary>
        /// 應用程序的主入口點。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form0());//打開窗體0
        }
    }

運行效果:

CSDN圖標

這樣子其實會無限打開,所以應該需要加個檢測該窗體是否打開的判斷。
如果是用Form1 f1 = new Form1(); f1.ShowDialog();,是切換到1窗體,鼠標是不能操控主窗體了;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章