熟女人妻水多爽中文字幕,国产精品鲁鲁鲁,隔壁的少妇2做爰韩国电影,亚洲最大中文字幕无码网站

技術頻道

娓娓工業
您現在的位置: 中國傳動網 > 技術頻道 > 技術百科 > 運動控制卡應用開發教程之C#

運動控制卡應用開發教程之C#

時間:2020-11-27 16:05:32來源:正運動技術

導語:?正運動小助手為大家分享一下應用C#開發一個多段連續插補的運動控制應用。我們主要從新建項目,添加函數庫講起,再了解PC函數使用,最后通過項目實戰——連續插補運動例程講解,來讓大家熟悉它的項目開發。

  今天,正運動小助手為大家分享一下應用C#開發一個多段連續插補的運動控制應用。

  我們主要從新建項目,添加函數庫講起,再了解PC函數使用,最后通過項目實戰——連續插補運動例程講解,來讓大家熟悉它的項目開發。

  在正式學習之前,我們先了解一下正運動技術的運動控制卡ECI2418和ECI2618。這兩款產品分別是4軸,6軸運動控制卡。

  

  1.jpg

  

  ECI2418支持4軸脈沖輸入與編碼器反饋,板載24點輸入,16點輸出,2AD,2DA,支持手輪接口,其中特定輸出口支持高速PWM控制。

  

  2.jpg

  

  ECI2618支持6軸脈沖輸入與編碼器反饋,板載24點輸入,16點輸出,2AD,2DA,支持手輪接口,其中特定輸出口支持高速PWM控制。

  

  3.jpg

  

  ECI2418,ECI2618均使用同一套API函數,均支持C、C++、C#、LabVIEW、Python、Delphi等開發語言,支持VC6.0、VB6.0、Qt、.Net等平臺,支持Windows、Linux、WinCE、iMac等操作系統。

  以下是C#

  開發流程

  01 新建MFC項目,添加函數庫。

  

  1.在VS2015菜單“文件”→“新建”→ “項目” ,啟動創建項目向導。

  

  4.jpg

  

  2.選擇開發語言為“Visual C#”和.NET Framework 4以及Windows 窗體應用程序。

  

  5.jpg

  

  3.找到廠家提供的光盤資料里面的C#函數庫,路徑如下(64位庫為例):

  1)進入光盤資料找到PC函數文件夾。

  

  6.jpg

  

  2)選擇函數庫2.1。

  

  7.jpg

  

  3)Windows平臺。

  

  8.jpg

  

  4)根據需要選擇對應的函數庫這里選擇64位庫。

  

  9.jpg

  

  5)解壓C++的壓縮包,里面有C#對應的函數庫。

  

  10.jpg

  

  6)函數庫具體路徑如下圖所示。

  

  11.jpg

  

  4.將廠商提供的C#的庫文件以及相關文件復制到新建的項目里面。

  1)將zmcaux.cs文件復制到新建的項目里面中。

  

  12.jpg

  

  2)將zaux.dll和zmotion.dll文件放入bin\debug文件夾中。

  

  13.jpg

  

  5.用vs打開新建的項目文件,在右邊的解決方案資源管理器中點擊顯示所有,然后鼠標右鍵點擊zmcaux.cs文件,點擊包括在項目中。

  

  14.jpg

  15.jpg

  

  6.雙擊Form1.cs里面的Form1,出現代碼編輯界面,在文件開頭寫入 using cszmcaux,并聲明控制器句柄g_handle。

  

  16.jpg

  

  至此項目新建完成。

  02 查看PC函數手冊,了解其用法。

  

  1.PC函數手冊也在光盤資料里面,具體路徑如下。

  

  17.jpg

  

  2.PC編程,一般先根據控制器連接方式選擇對應的連接函數連接控制器,返回控制器句柄。接著用返回的控制器句柄,實現對控制器的控制。

  3.比如通過網口連接控制器,先使用ZAux_OpenEth()鏈接控制器,獲取控制器句柄handle。

  

  18.jpg

  19.jpg

  項目應用截圖

  4.通過獲取到的控制器句柄handle,對控制器進行單軸運動控制。

  

  20.jpg

  

  5.通過獲取到的控制器句柄handle,進行多軸絕對插補運動。

  

  21.jpg

  

  int[] axislist = { 0, 1, 2, 3 }; //軸列表

  float[] destdis = { 100, 100, 200, 100 }; //運動距離列表

  zmcaux.ZAux_Direct_MoveAbs(g_handle, 4, axislist, destdis);

  

  6.通過獲取到的控制器句柄handle,獲取控制器緩沖區剩余的緩沖數量。

  

  23.jpg

  


  03 項目實戰之連續插補運動例程講解。

  

  1.例程以建立板卡的連接,執行4段連續軌跡的加工為目標。

  

  24.jpg

  

  2.例程簡易流程圖。

  

  25.jpg

  

  3.通過網口方式連接控制器,獲取控制器連接句柄。

  //連接控制器

  private void button_link_Click(object sender, EventArgs e)

  {

         ã€€if (g_handle != (IntPtr)0)

         ã€€{

             ã€€zmcaux.ZAux_Close(g_handle);//斷開連接

              g_handle = (IntPtr)0;

     ã€€}

      zmcaux.ZAux_OpenEth(comboBox_IpList.Text, out g_handle);//連接控制器

      if (g_handle != (IntPtr)0)

     ã€€{

          this.Text = "已連接";

          timer1.Enabled = true;

          //初始化軸參數

          for (int i = 0; i < 4; i++)

          {

             ã€€zmcaux.ZAux_Direct_SetAtype(g_handle, i, 1);//軸類型 脈沖軸

              zmcaux.ZAux_Direct_SetUnits(g_handle, i, 1);//脈沖當量

         ã€€}

    ã€€ã€€}

     ã€€else

     ã€€{

        ã€€ã€€MessageBox.Show("控制器鏈接失敗,請檢測IP地址!", "警告");

     ã€€}

  }

  

  4.通過定時器1更新控制器軸0-3的位置和速度等信息。

  

  //定時器刷新

  private void timer1_Tick(object sender, EventArgs e)

  {

      int runstate = 0;

      float[] curpos = new float[4];

      float vspeed = 0;

     ã€€int remin_buff = 0;

      int curmark = 0;

      //獲取軸位置

      for (int i = 0; i < 4; i++)

     ã€€{

         ã€€zmcaux.ZAux_Direct_GetDpos(g_handle, i, ref curpos[i]);

     ã€€}

     ã€€//獲取軸運動狀態

     ã€€zmcaux.ZAux_Direct_GetIfIdle(g_handle, 0, ref runstate);

     ã€€//獲取插補運動合速度

     ã€€zmcaux.ZAux_Direct_GetVpSpeed(g_handle, 0, ref vspeed);

      //判斷存放直線的剩余緩沖

      zmcaux.ZAux_Direct_GetRemain_LineBuffer(g_handle, 0, ref remin_buff);

      //判斷當前運動到第幾條運動,

      zmcaux.ZAux_Direct_GetMoveCurmark(g_handle, 0, ref curmark);

      label_pos.Text = "X:" + curpos[0] + " Y:" + curpos[1] + " Z:" + curpos[2] + " U:" + curpos[3];

      label_state.Text = Convert.ToString(runstate == 0 ? " 運行狀態:運行中" : " 運行狀態:停止中");

      label_vspeed.Text = "當前速度:" + vspeed;

      label_buff.Text = "剩余緩沖:" + remin_buff;

      label_mark.Text = "當前MARK:" + curmark;

  }

  

 5.通過啟動按鈕的事件處理函數來啟動插補運動 

  //啟動按鈕

  private void button_start_Click(object sender, EventArgs e)

  {

         ã€€int[] axislist = { 0, 1, 2, 3 }; //軸列表

         ã€€float[] destdis = { 0, 0, 0, 0 }; //運動距離列表

          int corner_mode = 0; //拐角模式

         ã€€int merge_flag = 0; //連續插補

          int iresult = 0; //PC函數返回值

          int remin_buff = 0; //剩余直線緩沖數

          if (checkBox1.Checked)

         ã€€{

             ã€€corner_mode = corner_mode + 2;

          }

          if(checkBox2.Checked)

          {

             ã€€corner_mode = corner_mode + 8;

          }

         ã€€if(checkBox3.Checked)

        ã€€ã€€{

             ã€€corner_mode = corner_mode + 32;

         ã€€}

          if (checkBox4.Checked)

          {

              merge_flag = 1;

          }

         ã€€//設置插補速度

         ã€€zmcaux.ZAux_Direct_SetSpeed(g_handle, axislist[0], Convert.ToSingle(textBox_sp.Text));

         ã€€//設置插補加速度

         ã€€zmcaux.ZAux_Direct_SetAccel(g_handle, axislist[0], Convert.ToSingle(textBox_acc.Text));

         ã€€//設置插補減速度

          zmcaux.ZAux_Direct_SetDecel(g_handle, axislist[0], Convert.ToSingle(textBox_dec.Text));

          //設置連續插補

          zmcaux.ZAux_Direct_SetMerge(g_handle, axislist[0], merge_flag);

          //S曲線時間

          zmcaux.ZAux_Direct_SetSramp(g_handle, axislist[0], Convert.ToSingle(SRAMP.Text));

          //設置SP速度

          zmcaux.ZAux_Direct_SetForceSpeed(g_handle, axislist[0], Convert.ToSingle(textBox_for_sp.Text));

         ã€€//設置拐角模式

          zmcaux.ZAux_Direct_SetCornerMode(g_handle, axislist[0], corner_mode);

         ã€€//開始減速角度,轉換為弧度

          zmcaux.ZAux_Direct_SetDecelAngle(g_handle, axislist[0], (float)(Convert.ToSingle(textBox_ang1.Text) * 3.14 / 180));

          //停止減速角度,轉換為弧度

          zmcaux.ZAux_Direct_SetStopAngle(g_handle, axislist[0], (float)(Convert.ToSingle(textBox_ang2.Text) * 3.14 / 180));

         ã€€//小圓半徑

         ã€€zmcaux.ZAux_Direct_SetFullSpRadius(g_handle, axislist[0], Convert.ToSingle(textBox_radio.Text));

         ã€€//倒角

         ã€€zmcaux.ZAux_Direct_SetZsmooth(g_handle, axislist[0], Convert.ToSingle(textBox_zsmooth.Text));

         ã€€//設置MARK = 0 ,來通過讀取CURMARK實現判斷當前執行到那里

          zmcaux.ZAux_Direct_SetMovemark(g_handle, axislist[0], 0);

          //選擇base軸

         ã€€zmcaux.ZAux_Direct_Base(g_handle, 4, axislist);

         ã€€zmcaux.ZAux_Trigger(g_handle);

          //計算剩余直線緩沖數量

          zmcaux.ZAux_Direct_GetRemain_LineBuffer(g_handle, 0, ref remin_buff);

          while(remin_buff<4)

         ã€€{

              zmcaux.ZAux_Direct_GetRemain_LineBuffer(g_handle, 0, ref remin_buff);

             ã€€System.Threading.Thread.Sleep(1); //1毫秒

          }

          //第一段插補運動

         ã€€destdis[0] = Convert.ToSingle(destdis1_X.Text);

         ã€€destdis[1] = Convert.ToSingle(destdis1_Y.Text);

         ã€€destdis[2] = Convert.ToSingle(destdis1_Z.Text);

         ã€€destdis[3] = Convert.ToSingle(destdis1_U.Text);

         ã€€iresult = zmcaux.ZAux_Direct_MoveAbs(g_handle, 4, axislist, destdis);//4軸插補指令

         ã€€//函數返回非0 則表示發送不成功,緩沖區可能滿了,重新發送

         ã€€while (iresult != 0)

         ã€€{

             ã€€iresult = zmcaux.ZAux_Direct_MoveAbs(g_handle, 4, axislist, destdis);

             ã€€System.Threading.Thread.Sleep(1); //1毫秒

          }

         ã€€//第二段插補運動

         ã€€destdis[0] = Convert.ToSingle(destdis2_X.Text);

         ã€€destdis[1] = Convert.ToSingle(destdis2_Y.Text);

         ã€€destdis[2] = Convert.ToSingle(destdis2_Z.Text);

          destdis[3] = Convert.ToSingle(destdis2_U.Text);

          iresult = zmcaux.ZAux_Direct_MoveAbs(g_handle, 4, axislist, destdis);//4軸插補指令

          //函數返回非0 則表示發送不成功,緩沖區可能滿了,重新發送

        ã€€ã€€while (iresult != 0)

         ã€€{

             ã€€iresult = zmcaux.ZAux_Direct_MoveAbs(g_handle, 4, axislist, destdis);

             ã€€System.Threading.Thread.Sleep(1); //1毫秒

         ã€€}

         ã€€//第三段插補運動

         ã€€destdis[0] = Convert.ToSingle(destdis3_X.Text);

         ã€€destdis[1] = Convert.ToSingle(destdis3_Y.Text);

         ã€€destdis[2] = Convert.ToSingle(destdis3_Z.Text);

         ã€€destdis[3] = Convert.ToSingle(destdis3_U.Text);

         ã€€iresult = zmcaux.ZAux_Direct_MoveAbs(g_handle, 4, axislist, destdis);//4軸插補指令

          //函數返回非0 則表示發送不成功,緩沖區可能滿了,重新發送

          while (iresult != 0)

         ã€€{

             ã€€iresult = zmcaux.ZAux_Direct_MoveAbs(g_handle, 4, axislist, destdis);

             ã€€System.Threading.Thread.Sleep(1); //1毫秒

         ã€€}

         ã€€//第四段插補運動

         ã€€destdis[0] = Convert.ToSingle(destdis4_X.Text);

         ã€€destdis[1] = Convert.ToSingle(destdis4_Y.Text);

          destdis[2] = Convert.ToSingle(destdis4_Z.Text);

          destdis[3] = Convert.ToSingle(destdis4_U.Text);

          iresult = zmcaux.ZAux_Direct_MoveAbs(g_handle, 4, axislist, destdis);//4軸插補指令

          //函數返回非0 則表示發送不成功,緩沖區可能滿了,重新發送

         ã€€while (iresult != 0)

         ã€€{

             ã€€iresult = zmcaux.ZAux_Direct_MoveAbs(g_handle, 4, axislist, destdis);

             ã€€System.Threading.Thread.Sleep(1); //1毫秒

         ã€€}

     ã€€}

  

  6.通過停止按鈕的事件處理函數來停止插補運動。

  

  //停止運動

  private void button_stop_Click(object sender, EventArgs e)

  {

         ã€€//取消主軸運動

         ã€€zmcaux.ZAux_Direct_Single_Cancel(g_handle, 0, 2);

  }

  

  7.軸坐標清零。

  

  //坐標清零

  private void button_zero_Click(object sender, EventArgs e)

  {

         ã€€if (g_handle == (IntPtr)0)

         ã€€{

             ã€€MessageBox.Show("未鏈接到控制器!", "提示");

         ã€€}

          else

         ã€€{

         ã€€for (int i = 0; i < 4; i++)

         ã€€{

         ã€€zmcaux.ZAux_Direct_SetDpos(g_handle, i, 0);

         ã€€}

     ã€€}

  }

  

  8. 編譯運行演示。

  編譯運行示教例程,同時通過ZDevelop軟件連接控制器,對運動控制的軸參數進行監控。

  9.連續插補加自動倒角的位置波形。

  

  26.jpg

  

  10.不開啟連續插補的速度波形。

  

  27.jpg

  28.jpg

  29.jpg

  11.連續插補加合適的拐角減速的速度波形。

  

  30.jpg

  31.jpg

  

  正運動技術《運動控制卡應用開發教程之C#》就講到這里。更多學習視頻及圖文,請關注我們的公眾號“正運動小助手”。

  本文由正運動小助手原創,歡迎大家轉載,共同學習,一起提高中國智能制造水平。文章版權歸正運動技術所有,如有轉載請注明文章來源。

  

  32.jpg

  



標簽: 運動控制

點贊

分享到:

上一篇:運動控制卡應用開發教程之C++

下一篇:運動控制卡應用開發教程之VB6.0

中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.hysjfh.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。

本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。

網站簡介|會員服務|聯系方式|幫助信息|版權信息|網站地圖|友情鏈接|法律支持|意見反饋|sitemap

傳動網-工業自動化與智能制造的全媒體“互聯網+”創新服務平臺

網站客服服務咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2025 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權所有
粵ICP備 14004826號 | 營業執照證書 | 不良信息舉報中心 | 粵公網安備 44030402000946號

主站蜘蛛池模板: 马鞍山市| 龙口市| 静安区| 舞钢市| 永兴县| 大英县| 宁都县| 勐海县| 霍州市| 横山县| 达州市| 陈巴尔虎旗| 襄樊市| 高平市| 乳源| 双辽市| 济南市| 禄丰县| 平陆县| 卢湾区| 阿拉善左旗| 彩票| 高雄县| 汽车| 遂溪县| 耒阳市| 石景山区| 杭锦后旗| 麦盖提县| 灵川县| 顺平县| 金川县| 吉木萨尔县| 大城县| 宁明县| 台北市| 台中市| 瑞丽市| 六盘水市| 公安县| 全南县|