国产91九色_日本68xxxx_欧美高清另类自拍视频在线看_欧美人禽_99久久婷婷国产综合精品青牛牛_亚洲射情

首頁 新聞 工控搜 論壇 廠商論壇 產品 方案 廠商 人才 文摘 下載 展覽
中華工控網首頁
  P L C | 變頻器與傳動 | 傳感器 | 現場檢測儀表 | 工控軟件 | 人機界面 | 運動控制
  D C S | 工業以太網 | 現場總線 | 顯示調節儀表 | 數據采集 | 數傳測控 | 工業安全
  電 源 | 嵌入式系統 | PC based | 機柜箱體殼體 | 低壓電器 | 機器視覺
步進的光柵尺全閉環EtherCAT運動控制器ZMC432CL-V2(三):C#編程調試
深圳市正運動技術有限公司
收藏本文     查看收藏

上節課程給大家介紹了ZMC432CL-V2硬件接口(詳情點擊→步進的光柵尺全閉環EtherCAT運動控制器ZMC432CL-V2(一):硬件接口介紹)。

本節主要講解如何通過C#編寫程序調試ZMC432CL-V2的脈沖閉環功能。


 

一、ZMC432CL-V2產品簡介

ZMC432CL-V2高性能多軸運動控制器是一款兼容EtherCAT總線和脈沖型的獨立式運動控制器,具備高速實時反饋功能,支持脈沖全閉環控制,能夠實現高精度、高響應速度的運動控制。高精度定位,有效消除機械傳動誤差,滿足高精密加工場景應用要求。

ZMC432CL-V2.png

1.ZMC432CL-V2硬件功能

(1)豐富的運動控制功能:支持直線、圓弧、空間圓弧、螺旋插補等。

(2)硬件接口豐富:支持脈沖軸(帶編碼器反饋)和EtherCAT總線軸,具備24路輸入和12路輸出的通用IO,部分為高速IO,2路模擬量輸出(DA)。

(3)EtherCAT刷新周期最快達250us,滿足高速通信需求。

(4)支持4通道硬件比較輸出、硬件定時器、運動中精準輸出,適用于多通道視覺飛拍等場合。

(5)支持掉電檢測、掉電存儲,多種程序加密方式,能夠有效防止系統故障,保護項目工程文件數據,并提高系統的可靠性。

(6)通過純國產IDE開發環境RTSys進行項目開發,可實時仿真、在線跟蹤以及診斷與調試,簡便易用,支持多種高級上位機語言聯合編程進行二次開發。

ZMC432CL-V2硬件功能.png


 

ZMC432CL-V2產品介紹視頻點擊→步進控制的光柵尺全閉環解決方案:32軸EtherCAT總線運動控制器ZMC432CL-V2。

更多關于ZMC432CL-V2詳情介紹點擊→步進控制的光柵尺全閉環解決方案:32軸EtherCAT總線運動控制器ZMC432CL-V2。

二、C#語言如何調用ZMotion的動態庫進行項目開發

(一)新建WinForm項目并添加函數庫

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

1.png

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

2.png

3.找到廠家提供的光盤資料里面的C#函數庫,路徑如下。

1)進入廠商提供的光盤資料找到“04PC函數”文件夾,并點擊進入。

3.png

2)選擇“01 PC函數庫V2.1”文件夾。

4.png

3)選擇“Windows平臺”文件夾。

5.png

4)選擇“C#”文件夾,里面有32位和64位的動態庫和例程。

6.1.png

6.png

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

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

7.png

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

8.png

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

9.png

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

10.png

三、PC函數介紹

1.PC函數手冊可在光盤資料查看,具體路徑如下。

11.png

2.控制器/卡接口之鏈接控制器,獲取鏈接句柄。

表1.png

3.萬能指令之在線命令。

有一些使用頻率較低的Basic指令我們沒有封裝到上位機的輔助庫中,如果用戶上位機需要調用對應的Basic指令的話,可以通過在線命令自行進行相關指令封裝。

表2.png

四、C#編寫例程調試ZMC432CL-V2的脈沖閉環功能

1.通過在線命令封裝脈沖閉環功能對應的上位機接口。

(1)右擊【項目】→【添加】→【新建項】→【新建C#類】,這里新建了一個MyFullCloseLoop的C#類。

12.png

(2)查詢Basic對應指令的使用說明,封裝一個設置軸比例增益的上位機接口。

13.png

/// <summary>
/// 設置軸的比例增益
/// </summary>
/// <param name="handle">連接句柄</param>
/// <param name="iaxis">軸號</param>
/// <param name="fValue">比例增益P的值</param>
/// <returns>錯誤碼</returns>
public int ZAux_Direct_SetPGain(IntPtr handle, int iaxis, float fValue)
{
     String cmdbuff;   //定義命令字符串
     //判斷軸數是否超標
     StringBuilder cmdbuffAck = new StringBuilder(1024);
     if (iaxis > MAX_AXIS_AUX)
     {
          return ERR_AUX_PARAERR;
     }
     //生成命令,根據Basic指令的用法格式去拼接命令字符串
     cmdbuff = string.Format("P_Gain({0}) = {1}", iaxis, fValue);
     //調用命令執行函數
     return zmcaux.ZAux_DirectCommand(handle, cmdbuff, cmdbuffAck, 2048);
}

(3)查詢Basic對應指令的使用說明,封裝一個獲取軸比例增益的上位機接口。

/// <summary>
/// 獲取軸的比例增益
/// </summary>
/// <param name="handle">連接句柄</param>
/// <param name="iaxis">軸號</param>
/// <param name="fValue">獲取的軸比例增益P的值</param>
/// <returns>錯誤碼</returns>
public int ZAux_Direct_GetPGain(IntPtr handle, int iaxis, ref float fValue)
{
    String cmdbuff;  //定義命令字符串
    StringBuilder cmdbuffAck = new StringBuilder(1024);  //定義接受返回的結果字符串
     //判斷軸數是否超標
    if (iaxis > MAX_AXIS_AUX)
    {
        return ERR_AUX_PARAERR;
    }
    //生成命令  ?類似于C的printf指令,用于打印,打印出來的字符串通過cmdbuffAck去接收
    cmdbuff = string.Format("?P_Gain({0}) ", iaxis);
    //調用命令執行函數
    int iresult = zmcaux.ZAux_Execute(handle, cmdbuff, cmdbuffAck, 2048);
    if (ERR_OK != iresult)
    {
        return iresult;
    }
    //解析返回的字符串
    if (cmdbuffAck.Length == 0)
    {
        return ERR_NOACK;
    }
    else
    {
        fValue = float.Parse(cmdbuffAck.ToString());
    }
    return ERR_OK;
}


(4)封裝好的脈沖閉環功能相關的上位機接口。

14.png

2.C#閉環功能的測試例程的編寫。

(1)脈沖閉環測試例程界面的設計。

15.png

(2)【連接】按鈕如何連接控制器。

int Err = 0;       //接口返回的錯誤碼
int LinkMode = 2;  //FastOpen接口連接類型的介紹 1-COM 2-ETH 4-PCI 5-LOCAL
Err = zmcaux.ZAux_FastOpen(LinkMode, Buffer, 2000, out g_handle);
if (Err == 0)
{
    // 修改按鈕文字
    LinkStatus.Text = "鏈接狀態:OK";
    // 修改按鈕背景色
    LinkStatus.BackColor = Color.FromArgb(192, 255, 192);
    //相關參數初始化
    AxisParaSet();
    //進行PID參數的初始化
    PidParaSet();
    //打開定時器
    Timer.Start();
}
else
{
    // 修改按鈕文字
    LinkStatus.Text = "鏈接狀態:Ng";
    // 修改按鈕背景色
    LinkStatus.BackColor = Color.FromArgb(255, 192, 192);
    //關閉定時器
    Timer.Stop();
}


(3)【更新PID參數】按鈕如何打開和關閉脈沖閉環功能,如何更新PID參數。

//將上位機設置的PID參數更新到控制器
private int PidParaSet()
{
    float TempFloat = 0;
    float TempDpos = 0, TempMpos = 0;
    bool TempInt = false;
    MyFullClosedLoop CloseLoop = new MyFullClosedLoop();
    String CompareStr = "閉環已開";
    String TempStr = IsClosedLoop.Text;
    //打開全閉環去控制軸運動
    if (TempStr == CompareStr)
    {
        //獲取軸位置,如果DPOS和MPOS相差太大不能打開脈沖閉環,保證安全
        zmcaux.ZAux_Direct_GetDpos(g_handle, int.Parse(AxisId.Text), ref TempDpos);
        zmcaux.ZAux_Direct_GetMpos(g_handle, int.Parse(AxisId.Text), ref TempMpos);
        if ((TempDpos - TempMpos) > 4 || (TempDpos - TempMpos < -4))
        {
            Console.WriteLine("規劃位置和反饋位置相差太大,無法啟動閉環功能。。。");
            return -1;
        }
        //更新比例增益
        CloseLoop.ZAux_Direct_SetPGain(g_handle, int.Parse(AxisId.Text), float.Parse(text_ParaP.Text));
        //更新積分增益
        CloseLoop.ZAux_Direct_SetIGain(g_handle, int.Parse(AxisId.Text), float.Parse(text_ParaI.Text));
        //更新微分增益
        CloseLoop.ZAux_Direct_SetDGain(g_handle, int.Parse(AxisId.Text), float.Parse(text_ParaD.Text));
        //更新速度前饋增益
        CloseLoop.ZAux_Direct_SetVffGain(g_handle, int.Parse(AxisId.Text), float.Parse(text_ParaVF.Text));
        //更新加速度前饋增益
        CloseLoop.ZAux_Direct_SetAffGain(g_handle, int.Parse(AxisId.Text), float.Parse(text_ParaAF.Text));
        //更新速度增益
        CloseLoop.ZAux_Direct_SetOvGain(g_handle, int.Parse(AxisId.Text), float.Parse(text_ParaOV.Text));
        //注意:在打開servo之前打開encoder_servo后要完成一次atype由0變為4的切換,否則會報axis:0 config not support Servo.
        //1、先打開axis_enable 和 encoder_servo
        zmcaux.ZAux_Direct_SetAxisEnable(g_handle, int.Parse(AxisId.Text), 1);
        CloseLoop.ZAux_Direct_SetEncoderServo(g_handle, int.Parse(AxisId.Text), 1);
        Thread.Sleep(20);
        CloseLoop.ZAux_Direct_GetEncoderServo(g_handle, int.Parse(AxisId.Text), ref TempInt);
        if (TempInt)
        {
            //2、完成一次Atype由0變為4的切換
            zmcaux.ZAux_Direct_SetAtype(g_handle, int.Parse(AxisId.Text), 0);
            Thread.Sleep(20);
            zmcaux.ZAux_Direct_SetAtype(g_handle, int.Parse(AxisId.Text), 4);
            //3、打開Servo
            CloseLoop.ZAux_Direct_SetServo(g_handle, int.Parse(AxisId.Text), 1);
            Thread.Sleep(10);
            CloseLoop.ZAux_Direct_GetServo(g_handle, int.Parse(AxisId.Text), ref TempInt);
            if (TempInt)
            {
                Console.WriteLine("閉環參數配置完成, 軸全閉環功能打開成功。");
            }
            else
            {
                Console.WriteLine("軸閉環開關Servo打開失敗, 導致脈沖全閉環開啟失。。。");
                return -1;
            }
        }
        else
        {
            Console.WriteLine("軸編碼器閉環EncoderServo打開失敗, 導致脈沖全閉環開啟失。。!");
            return -1;
        }
    }
    else
    {
        //關閉全閉環的功能
        //1、關閉EncoderServo
        CloseLoop.ZAux_Direct_SetEncoderServo(g_handle, int.Parse(AxisId.Text), 0);
        Thread.Sleep(20);
        CloseLoop.ZAux_Direct_GetEncoderServo(g_handle, int.Parse(AxisId.Text), ref TempInt);
        if (TempInt)
        {
            Console.WriteLine("軸EncoderServo關閉失敗!!");
            return -1;
        }
        //2、關閉EncoderServo后需要完成ATYPE的切換,保證完全關閉閉環功能
        zmcaux.ZAux_Direct_SetAtype(g_handle, int.Parse(AxisId.Text), 0);
        Thread.Sleep(10);
        zmcaux.ZAux_Direct_SetAtype(g_handle, int.Parse(AxisId.Text), 4);
        //3、關閉Servo
        CloseLoop.ZAux_Direct_SetServo(g_handle, int.Parse(AxisId.Text), 0);
        Thread.Sleep(20);
        CloseLoop.ZAux_Direct_GetServo(g_handle, int.Parse(AxisId.Text), ref TempInt);
        if (TempInt)
        {
            Console.WriteLine("軸Servo關閉失。。!");
            return -1;
        }
    }
    return 0;
}


(4)【更新軸參數】按鈕如何完成軸參數的更新。
 

//更新軸參數
private void AxisParaSet()
{
    //設置最大隨動誤差FE_LIMIT
     zmcaux.ZAux_Direct_SetFeLimit(g_handle, int.Parse(AxisId.Text), 500);
    //更新編碼器齒輪比 (如果發N個脈沖,實際編碼器反饋M個脈沖,編碼器齒輪比要設置成 N/M)
    zmcaux.ZAux_Direct_EncoderRatio(g_handle, int.Parse(AxisId.Text), int.Parse(EncoderRatioMol.Text), int.Parse(EncoderRatioDenom.Text));
    //更新脈沖當量,一般脈沖當量設置成機臺運動1mm需要的脈沖數
    zmcaux.ZAux_Direct_SetUnits(g_handle, int.Parse(AxisId.Text), float.Parse(text_ParaUnits.Text));
    //全閉環的功能需要把ATYPE設置成4
    zmcaux.ZAux_Direct_SetAtype(g_handle, int.Parse(AxisId.Text), 4);
    //更新速度
    zmcaux.ZAux_Direct_SetSpeed(g_handle, int.Parse(AxisId.Text), float.Parse(text_ParaSpeed.Text));
    //更新加速度、減速度
    zmcaux.ZAux_Direct_SetAccel(g_handle, int.Parse(AxisId.Text), float.Parse(text_ParaAccel.Text));
    zmcaux.ZAux_Direct_SetDecel(g_handle, int.Parse(AxisId.Text), float.Parse(text_ParaDecel.Text));
    StringBuilder Buff = new StringBuilder(512);
    //是否啟用SS曲線
    if (CurveIsSS.Checked)
    {
        //啟用SS曲線,VP_MODE模式設置成7即可
        //上位機舊庫沒有現成設置VP_MODE的接口,直接在線命令去封裝,在線命令是萬能接口
        string CmdBuff = string.Format("VP_MODE({0}) = 7 ", int.Parse(AxisId.Text));
        zmcaux.ZAux_DirectCommand(g_handle, CmdBuff, Buff, 512);
    }
    else
    { 
        //啟用S曲線,VP_MODE模式設置成0即可
        //上位機舊庫沒有現成設置VP_MODE的接口,直接在線命令去封裝,在線命令是萬能接口
        string CmdBuff = string.Format("VP_MODE({0}) = 0 ", int.Parse(AxisId.Text));
        zmcaux.ZAux_DirectCommand(g_handle, CmdBuff, Buff, 512);
        //S曲線模式,S曲線時間sramp是有效果的,需要設置一下
        zmcaux.ZAux_Direct_SetSramp(g_handle, int.Parse(AxisId.Text), float.Parse(text_ParaSramp.Text));
    }
}

(5)【手動】按鈕如何控制脈沖軸的點動與寸動。
 

//X-鼠標按下
private void ButtonHangRev_MouseDown(object sender, MouseEventArgs e)
{
    if (IsInchMode.Checked)
    {
        //寸動運動
        zmcaux.ZAux_Direct_Single_Move(g_handle, int.Parse(AxisId.Text), -1 * float.Parse(InchDis.Text));
    }
    else
    {
        //手動運動
        zmcaux.ZAux_Direct_Single_Vmove(g_handle, int.Parse(AxisId.Text), -1);
    }
}
//X-鼠標松開
private void ButtonHangRev_MouseUp(object sender, MouseEventArgs e)
{
    if (IsInchMode.Checked == false)
    {
        //手動運動停止
        zmcaux.ZAux_Direct_Single_Cancel(g_handle, int.Parse(AxisId.Text), 2);
    }
}
//X+鼠標按下
private void ButtonHangFwd_MouseDown(object sender, MouseEventArgs e)
{
    if (IsInchMode.Checked)
    {
        //寸動運動
        zmcaux.ZAux_Direct_Single_Move(g_handle, int.Parse(AxisId.Text), 1 * float.Parse(InchDis.Text));
    }
    else
    {
        //手動運動
        zmcaux.ZAux_Direct_Single_Vmove(g_handle, int.Parse(AxisId.Text), 1);
    }
}
//X+鼠標松開
private void ButtonHangFwd_MouseUp(object sender, MouseEventArgs e)
{
    if (IsInchMode.Checked == false)
    {
        //手動運動停止
        zmcaux.ZAux_Direct_Single_Cancel(g_handle, int.Parse(AxisId.Text), 2);
    }
}

五、通過RTSys的示波器對比開環控制和全閉環控制的情況

示波器的使用可以參考正運動小助手的歷史推文《運動控制看的更清楚細致!RTSys示波器功能簡介 (qq.com)》。

1.開環控制情況分析

開環控制情況分析.png

測試發現:步進驅動器的開環控制,運動過程中隨動誤差(規劃位置和光柵尺反饋位置的差值)一直維持在0.02個用戶單位左右(這里一個用戶單位即一個UNITS設置的是1mm),當運動結束時光柵尺的反饋位置和指令規劃位置也不相等,大概差了0.0015個用戶單位,折算為脈沖數是0.0015*用戶單位=3個脈沖。

2.閉環控制情況分析

閉環控制情況分析.png

測試發現:步進驅動器的閉環控制,運動過程中隨動誤差(規劃位置和光柵尺反饋位置的差值)除了啟動和停止以外大部分保持在0個脈沖當量左右,相比較開環控制有較大的提升,當運動結束時光柵尺的反饋位置和指令規劃位置也是相等的。

六、總結

1.啟用控制器閉環的時候注意要在打開encoder_servo后,打開servo之前要完成一次ATYPE從0到4的切換,這樣才可以正常打開控制器閉環的功能。

2.啟用控制器閉環同時還需要打開單軸使能axis_enable,這樣才能保證控制器閉環的正常啟用。

總結1.png

3.為保證控制器閉環功能的完全關閉,在關閉ENCODER_SERVO后需要完成一次 ATYPE從0到4的切換,這樣才能保證控制器閉環功能完全關閉。

總結2.png

4.教學視頻可點擊→“步進的光柵尺全閉環EtherCAT運動控制器ZMC432CL-V2(三):C#編程調試”查看。
 

完整代碼獲取地址

代碼.png

本次,正運動技術步進的光柵尺全閉環EtherCAT運動控制器ZMC432CL-V2(三):C#編程調試,就分享到這里。

更多精彩內容請關注“正運動小助手”公眾號,需要相關開發環境與例程代碼,請咨詢正運動技術銷售工程師:400-089-8936。

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

二維碼.png

正運動技術專注于運動控制技術研究和通用運動控制軟硬件產品的研發,是國家級高新技術企業。正運動技術匯集了來自華為、中興等公司的優秀人才,在堅持自主創新的同時,積極聯合各大高校協同運動控制基礎技術的研究,是國內工控領域發展最快的企業之一,也是國內少有、完整掌握運動控制核心技術和實時工控軟件平臺技術的企業。主要業務有:運動控制卡_運動控制器_EtherCAT運動控制卡_EtherCAT控制器_運動控制系統_視覺控制器__運動控制PLC_運動控制_機器人控制器_視覺定位_XPCIe/XPCI系列運動控制卡等。


 

狀 態: 離線

公司簡介
產品目錄

公司名稱: 深圳市正運動技術有限公司
聯 系 人: 戴德弟
電  話: 0755-32976042
傳  真: 0755-2606 6955
地  址: 深圳市寶安區西鄉洲石路陽光工業園A1棟5樓
郵  編: 518100
主  頁:
 
該廠商相關技術文摘:
強實時運動控制內核MotionRT750(一):驅動安裝、內核配置與使用
AI視覺外觀檢測在全自動測包機中的應用
C#上位機與運動控制卡網絡通訊的周期上報
DELTA機械手多物料視覺分揀的應用
正運動×Eplan再啟新篇 | 24款新品模型上線,打造電氣設計全鏈路閉環
激光振鏡運動控制器在玻璃激光鉆孔上的應用
EtherCAT運動控制卡應用開發教程之Java
賦能柔性制造:MotionRT750實時運動控制內核,提效不止10%!
AI視覺外觀檢測技術在NR功率電感質量控制中的方案應用
PCIe EtherCAT實時運動控制卡PCIE464同步跟隨/皮帶跟隨加工應用
機器視覺運動控制一體機在背靠背點膠焊錫機上的應用
PCIe EtherCAT實時運動控制卡PCIE464點膠工藝中的同步/提前/延時開關膠
更多文摘...
立即發送詢問信息在線聯系該技術文摘廠商:
用戶名: 密碼: 免費注冊為中華工控網會員
請留下您的有效聯系方式,以方便我們及時與您聯絡

關于我們 | 聯系我們 | 廣告服務 | 本站動態 | 友情鏈接 | 法律聲明 | 不良信息舉報
工控網客服熱線:0755-86369299
版權所有 中華工控網 Copyright©2022 Gkong.com, All Rights Reserved

主站蜘蛛池模板: 久久视频在线免费观看 | 亚洲欧美激情精品一区二区 | 久久久久久精彩视频 | 亚洲一区在线免费观看 | 夜夜性| 欧美精品成人一区二区三区四区 | 亚洲最大福利网站 | 久久久久久久久久国产精品 | 日本99精品 | 欧美日韩亚洲激情 | 不卡中文一二三区 | 日韩国产中文字幕 | 成人黄色在线播放 | 国产高清自拍视频 | 日本精a在线观看 | 久久婷婷色 | 自拍偷拍亚洲欧美 | 亚洲欧美v| 亚洲精品国产精品国自产观看浪潮 | 精品香蕉99久久久久网站 | 亚洲日本va中文字幕久久 | 中文成人在线 | 麻豆少妇| av亚洲在线 | 亚洲免费在线观看视频 | 成人黄色91| jiuse九色最新地址 | 91视频一区二区 | 99久久久国产精品免费调教网站 | 国产视频一区二区在线 | 日在线视频| 欧美激情自拍偷拍 | 狠狠色狠狠色终合网 | 亚洲精品国产福利 | 天堂√最新版中文在线 | 国产美女av | 97在线观看视频 | 日日草视频 | 一区二区三区 在线 | 在线日韩视频 | 自拍偷拍欧美日韩 |