日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# GTS四轴运动控制器实例(固高科技步进电机不带编码器) -V1

發布時間:2023/12/4 C# 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# GTS四轴运动控制器实例(固高科技步进电机不带编码器) -V1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

注:由于電機不帶編碼器,無法做home和當前位置信息讀取!

功能:

三個軸的點位運動:前進+后退,并分別顯示每個軸的移動脈沖數(可以換算為距離)!

開發環境:VS2017

硬件設備:固高科技三維移動平臺

在上一版上添加了如下功能:

  • 記錄每次運行的距離,即使關閉軟件,也能記錄當前距離原點的距離(原點首次得在機臺選定)

  • 運行超出機臺的最大距離后停止運動.

    源碼:

  • using System; using System.Windows.Forms; using gts; using System.Xml; using System.Collections.Generic;namespace 三維平移臺控制系統 {public partial class mainFrom : DevComponents.DotNetBar.OfficeForm{public mainFrom() {this.EnableGlass = false;InitializeComponent();}short Rtn;int vel = 0;int[] pos= {0,0,0 };int[] pos1 = { 0, 0, 0 };bool flag = false;uint clk;double prfpos, prfvel, encpos, encvel;short AXIS = 1;int X = 0;int Y = 0;int Z = 0;private void buttonX1_Click(object sender, EventArgs e) {mc.GT_ZeroPos(AXIS, 1);//for (int i=0; i<3;i++)//{// pos1[i] += pos[i];//}pos1[AXIS - 1] += pos[AXIS - 1];pos[AXIS-1] = 0;}private void buttonX2_Click(object sender, EventArgs e) {//Rtn = mc.GT_Close();Rtn = mc.GT_PrfTrap(AXIS);mc.TTrapPrm trapprm;mc.GT_GetTrapPrm(AXIS, out trapprm);trapprm.acc = 0.1;//設置加速度trapprm.dec = 0.1;//設置減速度trapprm.smoothTime = 1;mc.GT_SetTrapPrm(AXIS, ref trapprm);pos[AXIS-1] += Convert.ToInt32(textBoxX1.Text)*500;vel = Convert.ToInt32(textBoxX2.Text)*2;mc.GT_SetPos(AXIS, pos[AXIS-1]);mc.GT_SetVel(AXIS, vel);// mc.GT_Update(AXIS);mc.GT_Update(1 << (AXIS - 1));//MessageBox.Show((1 << (AXIS - 1)).ToString());}private void buttonX3_Click(object sender, EventArgs e) {//Rtn = mc.GT_Close();Rtn = mc.GT_PrfTrap(AXIS);mc.TTrapPrm trapprm;mc.GT_GetTrapPrm(AXIS, out trapprm);trapprm.acc = 0.1;trapprm.dec = 0.1;trapprm.smoothTime = 1;mc.GT_SetTrapPrm(AXIS, ref trapprm);pos[AXIS-1] -= Convert.ToInt32(textBoxX1.Text)*500;vel = Convert.ToInt32(textBoxX2.Text)*2;mc.GT_SetPos(AXIS, pos[AXIS-1]);mc.GT_SetVel(AXIS, vel);//mc.GT_Update(AXIS);mc.GT_Update(1 << (AXIS - 1));}private void timer1_Tick(object sender, EventArgs e) {//if ()//{// mc.GT_GetPrfPos(AXIS, out prfpos, 1, out clk);// profile 起始軸號// mc.GT_GetEncPos(AXIS, out encpos, 1, out clk);// encoder 起始軸號// textBox3.Text = prfpos.ToString();// textBox5.Text = encpos.ToString();// mc.GT_GetPrfVel(AXIS, out prfvel, 1, out clk);// 起始規劃軸號// mc.GT_GetEncVel(AXIS, out encvel, 1, out clk);// encoder 起始軸號// textBox4.Text = prfvel.ToString();// textBox6.Text = encvel.ToString();//}List<KeyValuePair<string, string>> settings = new List<KeyValuePair<string, string>>();KeyValuePair<string, string> kv = new KeyValuePair<string, string>("", "");mc.GT_GetPrfPos(AXIS, out prfpos, 1, out clk);// profile 起始軸號mc.GT_GetPrfVel(AXIS, out prfvel, 1, out clk);// 起始規劃軸號if (AXIS == 1){labelX4.Text = "規劃位置 : " + (prfpos / 500).ToString() + " mm";labelX5.Text = "規劃速度 : " + (prfvel / 2).ToString() + " mm/s";kv = new KeyValuePair<string, string>("X", ((prfpos + pos1[0]) / 500 +X).ToString());settings.Add(kv);labelX10.Text = "距離原點 : " + ((prfpos + pos1[0])/500 + X).ToString() + " mm";if ((prfpos + pos1[0]) / 500 + X > 850)mc.GT_Stop(AXIS, 0);}else if (AXIS == 2){labelX6.Text = "規劃位置 : " + (prfpos / 500).ToString() + " mm";labelX7.Text = "規劃速度 : " + (prfvel / 2).ToString() + " mm/s";kv = new KeyValuePair<string, string>("Y", ((prfpos + pos1[1]) / 500 + Y).ToString());settings.Add(kv);labelX11.Text = "距離原點 : " + ((prfpos + pos1[1]) / 500 + Y).ToString() + " mm";if ((prfpos + pos1[1]) / 500 + Y > 500)mc.GT_Stop(AXIS, 0);}else if (AXIS == 3){labelX8.Text = "規劃位置 : " + (prfpos / 500).ToString() + " mm";labelX9.Text = "規劃速度 : " + (prfvel / 2).ToString() + " mm/s";kv = new KeyValuePair<string, string>("Z", ((prfpos + pos1[2]) / 500 + Z).ToString());settings.Add(kv);labelX12.Text = "距離原點 : " + ((prfpos + pos1[2]) / 500 + Z).ToString() + " mm";if ((prfpos + pos1[2]) / 500 + Z > 500)mc.GT_Stop(AXIS, 0);}SaveSettings(settings);}private void ReadConfigXML() {XmlDocument xmlDoc = new XmlDocument();xmlDoc.Load(AppDomain.CurrentDomain.BaseDirectory + "\\config.xml");XmlNode settingNode = xmlDoc.DocumentElement;XmlElement e = settingNode.SelectSingleNode("X") as XmlElement;if (e == null){X = 0;}else{int val = 0;if (!int.TryParse(e.InnerText, out val)){X = 0;}else{X = val;}}e = settingNode.SelectSingleNode("Y") as XmlElement;if (e == null){Y = 0;}else{int val = 0;if (!int.TryParse(e.InnerText, out val)){Y = 0;}else{Y = val;}}e = settingNode.SelectSingleNode("Z") as XmlElement;if (e == null){Z = 0;}else{int val = 0;if (!int.TryParse(e.InnerText, out val)){Z = 0;}else{Z = val;}}}private void mainFrom_Load(object sender, EventArgs e) {comboBoxEx1.SelectedIndex = 0;textBoxX1.Text = "4";textBoxX2.Text = "5";labelX4.Text = "規劃位置 : " + (0).ToString() + " mm";labelX5.Text = "規劃速度 : " + (0).ToString() + " mm/s";labelX6.Text = "規劃位置 : " + (0).ToString() + " mm";labelX7.Text = "規劃速度 : " + (0).ToString() + " mm/s";labelX8.Text = "規劃位置 : " + (0).ToString() + " mm";labelX9.Text = "規劃速度 : " + (0).ToString() + " mm/s";/*初始化*/Rtn = mc.GT_Open(0, 1);Rtn = mc.GT_Reset();Rtn = mc.GT_LoadConfig("GTS800.cfg"); ;Rtn = mc.GT_ClrSts(1, 8); //axis 起始軸號,count ReadConfigXML();labelX10.Text = "距離原點 : " + (X).ToString() + " mm";labelX11.Text = "距離原點 : " + (Y).ToString() + " mm";labelX12.Text = "距離原點 : " + (Z).ToString() + " mm";labelX13.Text = "最大距離 : " + (850).ToString() + " mm";labelX14.Text = "最大距離 : " + (500).ToString() + " mm";labelX15.Text = "最大距離 : " + (500).ToString() + " mm";timer1.Enabled = true;}private void buttonX4_Click(object sender, EventArgs e) {mc.GT_Stop(AXIS, 0);}private void comboBoxEx1_SelectedIndexChanged(object sender, EventArgs e) {switch (comboBoxEx1.SelectedItem.ToString()){case "X軸":AXIS = 1; break;case "Y軸":AXIS = 2; break;case "Z軸":AXIS = 3; break;default:break;}}public static void SaveSettings(List<KeyValuePair<string, string>> settings) {try{string docPath = AppDomain.CurrentDomain.BaseDirectory + "\\config.xml";XmlDocument xmlDoc = new XmlDocument();xmlDoc.Load(docPath);XmlNode settingNode = xmlDoc.DocumentElement;if (settingNode == null)return;foreach (var kv in settings){SetNodeValue(xmlDoc, settingNode, kv.Key, kv.Value);}xmlDoc.Save(docPath);}catch { }}private static void SetNodeValue(XmlDocument XmlDoc, XmlNode rootnode, string key, string value) {try{XmlElement e = rootnode.SelectSingleNode(key) as XmlElement;if (e == null){XmlNode node = XmlDoc.CreateNode(XmlNodeType.Element, key, "");node.InnerText = value;rootnode.AppendChild(node);}else{e.InnerText = value;}}catch { }}} }

    ——————————

  • 經典回顧

    往期推薦

    C# WPF框架Caliburn.Micro入門實例1

    C# WPF MVVM項目實戰(進階①)

    C# WPF MVVM項目實戰(進階②)

    C# WPF框架Caliburn.Micro快速搭建

    C# WPF項目實戰

    C# WPF mvvm模式下combobox綁定(list<enum>、Dictionary<int,string>)

    C# WPF MVVM模式下在主窗體顯示子窗體并獲取結果

    C# WPF Caliburn.Micro框架下利用Mef加載其它項目界面

    C# WPF文本框TextEdit不以科學計數法顯示

    C# 通過正則表達式來限制控件輸入有效性

    C# datagridview、datagrid、GridControl增加行號

    C# =>符號的使用

    C# 無意間寫了一段線程死鎖的代碼

    C# 看懂這100+行代碼,你就真正入門了(經典)

    C# WPF項目實戰(經典)

    WPF 如何修改button圓角(經典)

    WPF XAML 為項目設置全局樣式

  • -----------------------------------

  • 需要進技術群交流的,請添加小編zls20210502

  • 總結

    以上是生活随笔為你收集整理的C# GTS四轴运动控制器实例(固高科技步进电机不带编码器) -V1的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。