色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

運動控制卡應用開發教程之硬件比較輸出

正運動技術 ? 2021-10-18 18:09 ? 次閱讀

今天,正運動小助手為大家分享一下應用C++開發一個硬件比較輸出例程。

我們主要從新建MFC項目,添加函數庫講起,再了解PC函數用,最后通過項目實戰——硬件比較輸出例程講解,來讓大家熟悉運動控制卡的PC開發。

2.png

3.png

在正式學習之前,我們先了解一下正運動技術的運動控制卡ECI2828。這款產品是8軸運動控制卡。

正運動技術ECI2828 EtherCAT總線型運動控制卡,相對之前發布的ECI2618,新增了EtherCAT總線接口電機軸數增加到8個,板載24+16點輸入,16+16點輸出(每個軸接口含2路通用輸入和2路通用輸出,可以做伺服使能、報警清除、到位信號、報警信號等控制);每軸輸出脈沖頻率可達10MHz;通過 CAN 總線,可擴展到512 個隔離輸入或輸出口。ECI2828支持硬件比較輸出、精準輸出、飛拍等功能。

4.png

5.png

運動控制卡ECI2828,支持C++、C#LabVIEW、VB、Delphi、Linux、.Net平臺、iMacPythonMatlab等,統一的上位機API函數接口,具有開放、兼容、簡單、易用等功能特性。

一 新建MFC項目 添加函數庫

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

6.png

2.選擇開發語言為“Visual C++”和程序類型“MFC應用程序”。

7.png

3.下一步即可。

8.png

4.選擇類型為“基于對話框”,下一步或者完成。下一步則往后繼續配置,完成就直接完成即可。這里就不需要再配置了,無關緊要的,只要這個類型選好就行,其他的可以在項目中編輯。

9.png

5.找到正運動技術廠家提供的光盤資料,路徑如下(64位庫為例):

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

(2)選擇函數庫2.1。

(3)Windows平臺。

10.png

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

11.png

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

12.png

(6)函數庫具體路徑如下。

13.png

6.將廠商提供的C++的庫文件和相關頭文件復制到新建的項目里面。

14.png

7.在項目中添加靜態庫和相關頭文件。

靜態庫:zauxdll.lib, zmotion.lib

相關頭文件:zauxdll2.h, zmotion.h

(1)先右擊頭文件,接著依次選擇:“添加”→“現有項”。

15.png

(2)在彈出的窗口中依次添加靜態庫和相關頭文件。

16.png

8.聲明用到的頭文件和定義控制器連接句柄。

17.png

至此項目新建完成。

二 查看PC函數手冊 了解PC函數用法

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

18.png

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

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

19.png

4.通過獲取到的控制器句柄,使用ZAux_Direct_SetTable,來設置控制器的TABLE寄存器的數值。

20.png

5.通過獲取到的控制器句柄,使用ZAux_Direct_HwPswitch2,來啟動并設置控制器的硬件比較輸出的模式。

21.png

22.png

6.通過獲取到的控制器句柄,使用ZAux_Direct_Regist()來啟動并設置控制器的鎖存方式。

23.png

三 項目實戰之硬件比較輸出例程講解

1.硬件比較輸出

運動控制器內有位置比較單元,硬件比較輸出是通過比較軸是否到達設定位置,來操作輸出口動作,一般使用時將編碼器位置與設定位置比較,當編碼器的位置到達一個設定比較位置時,觸發相應輸出口電平翻轉一次。

如下圖所示,到達設置的位置1,電平翻轉,到達位置2電平再次翻轉,到達位置3電平再翻轉,直達比較完所有的點后,電平維持最后一次翻轉后的狀態。

24.png

2.例程以建立板卡的連接,然后設置并開啟硬件比較輸出,將硬件比較輸出的輸出口和鎖存的輸入口進行連接,從而通過鎖存記錄硬件比較輸出的位置。

(1)為了實驗室測試方便,采用自發脈沖,同一軸編碼器接收脈沖模式測試。同一個DB26軸接口的脈沖軸和編碼器軸的連接方式(用于鎖存硬件比較輸出的位置),PUL+接EA+、PUL-接EA-、DIR+接EB+、DIR-接EB-。(或者直接通過脈沖型伺服電機進行位置反饋。)

(2)例程界面。

25.png

3.例程簡易流程圖。

26.png

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

//連接控制器

void Ctest_PswitchDlg::OnBnClickedOpen()

{

char buffer[256];

int32 iresult;

//從下拉框中獲取IP地址

GetDlgItemText(IDC_IPLIST,buffer,255);

buffer[255] = '\0';

//通過網口連接控制器

iresult = ZAux_OpenEth(buffer, &g_handle);

if(ERR_SUCCESS != iresult)

{

g_handle = NULL;

MessageBox(_T("鏈接失敗"));

SetWindowText("未鏈接");

return;

}

SetWindowText("已鏈接");

SetTimer(0,100,NULL);

}

5.通過運動按鈕的事件處理函數去設置硬件比較輸出的模式,并開始軸運動。

(1)通過對UI界面的控件添加對應的變量,實現硬件比較輸出的模式的參數輸入。

27.png

(2)運動按鈕事件處理函數。

//運動

void Ctest_PswitchDlg::OnBnClickedStartmove()

{

m_RegistCount = 0;

ShowRegistList();

UpdateData(TRUE);

//設置軸參數

ZAux_Direct_SetAtype(g_handle, m_AxisNum, 1);

ZAux_Direct_SetUnits(g_handle, m_AxisNum, 1000);

ZAux_Direct_SetSpeed(g_handle, m_AxisNum, 200);

ZAux_Direct_SetAccel(g_handle, m_AxisNum, 2000);

ZAux_Direct_SetDecel(g_handle, m_AxisNum, 2000);

//關閉硬件比較輸出(停止并刪除沒有完成的比較點)

ZAux_Direct_HwPswitch2(g_handle, m_AxisNum, 2, 0, 0, 0, 0, 0, 0);

//開啟硬件比較輸出 MODE:1

if (m_POS_IfOpen == false) //比較完成一次后需要重新調用HwPswitch

{

//將比較點填入TABLE

ZAux_Direct_SetTable(g_handle, m_POS_StartTable, m_POS_EndTable- m_POS_StartTable+1, fPointPos);

//開啟硬件比較輸出

ZAux_Direct_HwPswitch2(g_handle, m_AxisNum, 1, m_POS_out, m_POS_OutStatus, m_POS_StartTable, m_POS_EndTable, m_POS_dir, 0);

}

else

{

//關閉硬件比較輸出

ZAux_Direct_HwPswitch2(g_handle, m_AxisNum, 2, 0, 0, 0, 0, 0, 0);

}

//打開示波器

ZAux_Trigger(g_handle);

ZAux_Direct_SetDpos(g_handle, m_AxisNum, 0);

//開始軸運動(絕對位置)

ZAux_Direct_Single_MoveAbs(g_handle, m_AxisNum, m_Start_Pos);

ZAux_Direct_Single_MoveAbs(g_handle, m_AxisNum, m_End_Pos);

}

6.根據設置情況判斷是否開啟鎖存,并設置鎖存模式。

//啟動或停止鎖存

void Ctest_PswitchDlg::OnBnClickedRegistStart()

{

int iret = 0;

UpdateData(TRUE);

if(m_Regist_IfOpen == FALSE)

{

m_RegistCount = 0;

//必須是編碼器軸才可以鎖存

iret = ZAux_Direct_SetAtype(g_handle,m_RegistAxis,6);

//設置鎖存模式

int ReglistListSel = ((CComboBox *) GetDlgItem(IDC_REGIST_MODE))->GetCurSel() ;

if(ReglistListSel >= 0 && ReglistListSel <=3)

{

RegistMode = ReglistListSel +1;

}

else if(ReglistListSel == 4 || ReglistListSel ==5)

{

RegistMode = 10 + ReglistListSel;

}

else if(ReglistListSel > 5 || ReglistListSel < 9)

{

RegistMode = 12 + ReglistListSel;

}

//開啟鎖存

iret = ZAux_Direct_Regist(g_handle,m_RegistAxis,RegistMode);

SetTimer(1,5,NULL);

m_Regist_IfOpen = TRUE;

SetDlgItemTextA(IDC_REGIST_START,_T("停止鎖存"));

((CComboBox *)GetDlgItem(IDC_REGIST_MODE))->EnableWindow(FALSE);

ShowRegistList();

}

else

{

KillTimer(1);

m_Regist_IfOpen = FALSE;

SetDlgItemTextA(IDC_REGIST_START,_T("啟動鎖存"));

((CComboBox *)GetDlgItem(IDC_REGIST_MODE))->EnableWindow(TRUE);

}

}

7.通過定時器1,更新鎖存信息

void Ctest_PswitchDlg::OnTimer(UINT_PTR nIDEvent) //定時器刷新

{

if(NULL != g_handle)

{

CString str;

if(nIDEvent == 1)

{

int iret = 0;

int MarkStatus = 0;

float RegistPos;

//判斷鎖存是否觸發

if(RegistMode >= 0 && RegistMode < 4)

{

iret = ZAux_Direct_GetMark(g_handle,m_RegistAxis,&MarkStatus);

}

else if(RegistMode >= 14 || RegistMode < 16)

{

iret = ZAux_Direct_GetMarkB(g_handle,m_RegistAxis,&MarkStatus);

}

else if(RegistMode >= 18 || RegistMode < 20)

{

float tempc;

iret = ZAux_Direct_GetParam(g_handle,"MARKC",m_RegistAxis,&tempc);

MarkStatus = (int)tempc;

}

else if(RegistMode >= 20 || RegistMode < 22)

{

float tempd;

iret = ZAux_Direct_GetParam(g_handle,"MARKD",m_RegistAxis,&tempd);

MarkStatus = (int)tempd;

}

//讀取鎖存的位置

if(MarkStatus == -1)

{

if(RegistMode >= 0 && RegistMode < =4)

{

iret = ZAux_Direct_GetRegPos(g_handle,m_RegistAxis,&RegistPos);

}

else if(RegistMode >= 14 || RegistMode < 16)

{

iret = ZAux_Direct_GetRegPosB(g_handle,m_RegistAxis,&RegistPos);

}

else if(RegistMode >= 18 || RegistMode < 20)

{

iret = ZAux_Direct_GetParam(g_handle,"REG_POSC",m_RegistAxis,&RegistPos);

}

else if(RegistMode >= 20 || RegistMode < 22)

{

iret = ZAux_Direct_GetParam(g_handle,"REG_POSD",m_RegistAxis,&RegistPos); }

m_RegistList.InsertItem(m_RegistCount,"");

str.Format(_T("%d"), m_RegistCount);

m_RegistList.SetItemText(m_RegistCount,0,str);

str.Format(_T("%.3f"), RegistPos);

m_RegistList.SetItemText(m_RegistCount,1,str);

m_RegistCount++;

//重新觸發鎖存

iret = ZAux_Direct_Regist(g_handle,m_RegistAxis,RegistMode);

}

str.Format(_T("鎖存觸發狀態:%d 次數:%d"), MarkStatus,m_RegistCount);

SetDlgItemTextA(IDC_STATUS_REGIST,str);

}

}

CDialogEx::OnTimer(nIDEvent);

}

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

//停止

void Ctest_PswitchDlg::OnBnClickedStopmove()

{

int iret = ZAux_Direct_Single_Cancel(g_handle, m_AxisNum, 2);

}

9.編譯運行演示。

(1)將硬件比較輸出的輸出口(out0)和鎖存的輸入口(in0)用導線進行連接,將軸0的DB26接口上的脈沖軸和編碼器軸進行連接。

(2)編譯并運行例程。

28.png

(3)同時通過ZDevelop軟件連接同一個控制器,通過示波器對運動過程進行監控。

29.png

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 工控
    +關注

    關注

    6

    文章

    237

    瀏覽量

    28221
  • 運動控制
    +關注

    關注

    4

    文章

    581

    瀏覽量

    32877
  • 運動控制卡
    +關注

    關注

    7

    文章

    113

    瀏覽量

    15471
  • 工廠自動化
    +關注

    關注

    1

    文章

    47

    瀏覽量

    17232
  • 正運動技術
    +關注

    關注

    0

    文章

    102

    瀏覽量

    423
收藏 人收藏

    評論

    相關推薦

    運動控制卡網絡通訊的心跳檢測之C#上位機編程

    使用C#上位機編程實現運動控制卡網絡通訊的心跳檢測功能
    的頭像 發表于 12-24 10:54 ?117次閱讀
    <b class='flag-5'>運動</b><b class='flag-5'>控制卡</b>網絡通訊的心跳檢測之C#上位機編程

    運動控制卡周期上報實時數據IO狀態之C++篇

    使用C++進行運動控制卡的周期上報功能實現
    的頭像 發表于 12-17 13:59 ?248次閱讀
    <b class='flag-5'>運動</b><b class='flag-5'>控制卡</b>周期上報實時數據IO狀態之C++篇

    AM263x控制卡硬件用戶指南

    電子發燒友網站提供《AM263x控制卡硬件用戶指南.pdf》資料免費下載
    發表于 11-07 09:47 ?0次下載
    AM263x<b class='flag-5'>控制卡</b><b class='flag-5'>硬件</b>用戶指南

    PCIe實時運動控制卡的雙盤視覺篩選機上位機開發應用

    PCIe實時運動控制卡的雙盤視覺篩選機上位機開發應用
    的頭像 發表于 10-10 10:15 ?332次閱讀
    PCIe實時<b class='flag-5'>運動</b><b class='flag-5'>控制卡</b>的雙盤視覺篩選機上位機<b class='flag-5'>開發</b>應用

    PCIe EtherCAT實時運動控制卡PCIE464的IO與編碼器讀寫應用# 正運動技術# 運動控制卡

    編碼器運動控制卡
    正運動技術
    發布于 :2024年07月23日 09:37:31

    PCIe EtherCAT實時運動控制卡PCIE464的IO與編碼器讀寫應用

    C#進行PCIe EtherCAT運動控制卡的項目開發和快速讀取多個IO和軸編碼器位置的例程。
    的頭像 發表于 07-17 14:47 ?793次閱讀
    PCIe EtherCAT實時<b class='flag-5'>運動</b><b class='flag-5'>控制卡</b>PCIE464的IO與編碼器讀寫應用

    運動控制卡伺服電機如何控制

    運動控制卡伺服電機控制是現代工業自動化領域中一項重要的技術,它涉及到運動控制卡、伺服電機、控制
    的頭像 發表于 06-12 14:13 ?918次閱讀

    PCIE464M — 高速高精,超高速PCIe EtherCAT實時運動控制卡

    運動“高速高精運動控制卡”家族再添一員猛將!
    的頭像 發表于 05-31 11:17 ?460次閱讀
    PCIE464M — 高速高精,超高速PCIe EtherCAT實時<b class='flag-5'>運動</b><b class='flag-5'>控制卡</b>

    運動控制卡/運動控制器的ZCAN總線ZMIO310擴展模塊使用

    運動控制卡/運動控制器的ZCAN總線ZMIO310擴展模塊使用
    的頭像 發表于 04-11 11:46 ?681次閱讀
    <b class='flag-5'>運動</b><b class='flag-5'>控制卡</b>/<b class='flag-5'>運動</b><b class='flag-5'>控制</b>器的ZCAN總線ZMIO310擴展模塊使用

    EtherCAT超高速實時運動控制卡XPCIE1032H上位機C#開發(十四)

    XPCIE1032H是一款基于PCI Express的EtherCAT總線運動控制卡,可選6-64軸運動控制,支持多路高速數字輸入輸出,可輕
    的頭像 發表于 03-04 10:46 ?4.1w次閱讀
    EtherCAT超高速實時<b class='flag-5'>運動</b><b class='flag-5'>控制卡</b>XPCIE1032H上位機C#<b class='flag-5'>開發</b>(十四)

    超高實時性的EtherCAT運動控制卡——PCIE464

    運動技術PCIE464運動控制卡,提供高效的工業運動控制解決方案。用戶可直接將PCIE464嵌入標準PC機快速實現高性能的EtherCAT
    發表于 01-26 14:39 ?1195次閱讀

    【正運動】高速高精,超高實時性的PCIe EtherCAT實時運動控制卡 | PCIE464

    充分利用PC的高效數據處理和開放性特性,以及控制卡高速PWM、多維位置比較輸出PSO等功能,實現出色的多軸同步控制和高速點位以及復雜的軌跡運動
    發表于 01-24 09:48

    PCIE464 — 高速高精,超高實時性的PCIe EtherCAT實時運動控制卡

    運動高速高精運動控制卡家族迎來新成員!
    的頭像 發表于 01-17 16:29 ?694次閱讀
    PCIE464 — 高速高精,超高實時性的PCIe EtherCAT實時<b class='flag-5'>運動</b><b class='flag-5'>控制卡</b>
    主站蜘蛛池模板: 国产成人无码WWW免费视频在线| 日韩精品一区二区中文| 好男人好资源在线观看| 久久伊人免费| 亚洲国产精品高清在线| 绑着男军人的扒开内裤| 久久国产精品人妻中文| 午夜aaaa| 嘟嘟嘟影院免费观看视频| 蜜桃成熟时33D在线嘟嘟网| 亚洲伊人色| 国产精品免费一区二区三区四区| 男男校园园bl文全肉高h寝室| 亚洲中文日韩日本在线视频| 国产精品高潮呻吟AV久久96| 亚洲国产亚综合在线区尤物| 国产亚洲精品久久777777| 日本双渗透| 补课H湿 1V1 PLAY| 青柠在线观看视频在线高清完整| 中文字幕亚洲第一页| 精品久久久久久电影网| 性生片30分钟| 国产亚洲精品网站在线视频 | 午夜福利32集云播| 久久精品国产只有精品| 大胸美女洗澡扒奶衣挤奶| 日本黄 色大片全| 狠狠色狠狠色综合日日32| XXX欧美性兽交| 一本道本线中文无码| 色www精品视频在线观看| 成人永久免费视频网站在线观看| 人性本色联盟| 古代荡乳尤物H妓女调教| 偷尝禁果H1V1幸运的山熊| 高冷师尊被CAO成SAO货| 中文字幕一区在线观看视频| 女王羞辱丨vk| 成人毛片大全| 在线色av|