一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

運(yùn)動(dòng)控制卡應(yīng)用開發(fā)教程之硬件比較輸出

正運(yùn)動(dòng)技術(shù) ? 2021-10-18 18:09 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

今天,正運(yùn)動(dòng)小助手為大家分享一下應(yīng)用C++開發(fā)一個(gè)硬件比較輸出例程。

我們主要從新建MFC項(xiàng)目,添加函數(shù)庫講起,再了解PC函數(shù)用,最后通過項(xiàng)目實(shí)戰(zhàn)——硬件比較輸出例程講解,來讓大家熟悉運(yùn)動(dòng)控制卡的PC開發(fā)。

2.png

3.png

在正式學(xué)習(xí)之前,我們先了解一下正運(yùn)動(dòng)技術(shù)的運(yùn)動(dòng)控制卡ECI2828。這款產(chǎn)品是8軸運(yùn)動(dòng)控制卡。

正運(yùn)動(dòng)技術(shù)ECI2828 EtherCAT總線型運(yùn)動(dòng)控制卡,相對(duì)之前發(fā)布的ECI2618,新增了EtherCAT總線接口電機(jī)軸數(shù)增加到8個(gè),板載24+16點(diǎn)輸入,16+16點(diǎn)輸出(每個(gè)軸接口含2路通用輸入和2路通用輸出,可以做伺服使能、報(bào)警清除、到位信號(hào)、報(bào)警信號(hào)等控制);每軸輸出脈沖頻率可達(dá)10MHz;通過 CAN 總線,可擴(kuò)展到512 個(gè)隔離輸入或輸出口。ECI2828支持硬件比較輸出、精準(zhǔn)輸出、飛拍等功能。

4.png

5.png

運(yùn)動(dòng)控制卡ECI2828,支持C++、C#、LabVIEW、VB、Delphi、Linux、.Net平臺(tái)、iMac、PythonMatlab等,統(tǒng)一的上位機(jī)API函數(shù)接口,具有開放、兼容、簡(jiǎn)單、易用等功能特性。

一 新建MFC項(xiàng)目 添加函數(shù)庫

1.在VS2015菜單“文件”→“新建”→ “項(xiàng)目”,啟動(dòng)創(chuàng)建項(xiàng)目向?qū)А?/p>

6.png

2.選擇開發(fā)語言為“Visual C++”和程序類型“MFC應(yīng)用程序”。

7.png

3.下一步即可。

8.png

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

9.png

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

(1)進(jìn)入光盤資料找到PC函數(shù)文件夾。

(2)選擇函數(shù)庫2.1。

(3)Windows平臺(tái)。

10.png

(4)根據(jù)需要選擇對(duì)應(yīng)的函數(shù)庫這里選擇64位庫。

11.png

(5)解壓C++的壓縮包,里面有C++對(duì)應(yīng)的函數(shù)庫。

12.png

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

13.png

6.將廠商提供的C++的庫文件和相關(guān)頭文件復(fù)制到新建的項(xiàng)目里面。

14.png

7.在項(xiàng)目中添加靜態(tài)庫和相關(guān)頭文件。

靜態(tài)庫:zauxdll.lib, zmotion.lib

相關(guān)頭文件:zauxdll2.h, zmotion.h

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

15.png

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

16.png

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

17.png

至此項(xiàng)目新建完成。

二 查看PC函數(shù)手冊(cè) 了解PC函數(shù)用法

1.PC函數(shù)手冊(cè)也在光盤資料里面,具體路徑如下:

18.png

2.PC編程,一般先根據(jù)控制器連接方式選擇對(duì)應(yīng)的連接函數(shù)連接控制器,返回控制器句柄。接著用返回的控制器句柄,實(shí)現(xiàn)對(duì)控制器的控制。

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

19.png

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

20.png

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

21.png

22.png

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

23.png

三 項(xiàng)目實(shí)戰(zhàn)之硬件比較輸出例程講解

1.硬件比較輸出

運(yùn)動(dòng)控制器內(nèi)有位置比較單元,硬件比較輸出是通過比較軸是否到達(dá)設(shè)定位置,來操作輸出口動(dòng)作,一般使用時(shí)將編碼器位置與設(shè)定位置比較,當(dāng)編碼器的位置到達(dá)一個(gè)設(shè)定比較位置時(shí),觸發(fā)相應(yīng)輸出口電平翻轉(zhuǎn)一次。

如下圖所示,到達(dá)設(shè)置的位置1,電平翻轉(zhuǎn),到達(dá)位置2電平再次翻轉(zhuǎn),到達(dá)位置3電平再翻轉(zhuǎn),直達(dá)比較完所有的點(diǎn)后,電平維持最后一次翻轉(zhuǎn)后的狀態(tài)。

24.png

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

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

(2)例程界面。

25.png

3.例程簡(jiǎn)易流程圖。

26.png

4.通過網(wǎng)口連接控制器,獲取控制器連接句柄。

//連接控制器

void Ctest_PswitchDlg::OnBnClickedOpen()

{

char buffer[256];

int32 iresult;

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

GetDlgItemText(IDC_IPLIST,buffer,255);

buffer[255] = '\0';

//通過網(wǎng)口連接控制器

iresult = ZAux_OpenEth(buffer, &g_handle);

if(ERR_SUCCESS != iresult)

{

g_handle = NULL;

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

SetWindowText("未鏈接");

return;

}

SetWindowText("已鏈接");

SetTimer(0,100,NULL);

}

5.通過運(yùn)動(dòng)按鈕的事件處理函數(shù)去設(shè)置硬件比較輸出的模式,并開始軸運(yùn)動(dòng)。

(1)通過對(duì)UI界面的控件添加對(duì)應(yīng)的變量,實(shí)現(xiàn)硬件比較輸出的模式的參數(shù)輸入。

27.png

(2)運(yùn)動(dòng)按鈕事件處理函數(shù)。

//運(yùn)動(dòng)

void Ctest_PswitchDlg::OnBnClickedStartmove()

{

m_RegistCount = 0;

ShowRegistList();

UpdateData(TRUE);

//設(shè)置軸參數(shù)

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);

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

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

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

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

{

//將比較點(diǎn)填入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

{

//關(guān)閉硬件比較輸出

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);

//開始軸運(yùn)動(dòng)(絕對(duì)位置)

ZAux_Direct_Single_MoveAbs(g_handle, m_AxisNum, m_Start_Pos);

ZAux_Direct_Single_MoveAbs(g_handle, m_AxisNum, m_End_Pos);

}

6.根據(jù)設(shè)置情況判斷是否開啟鎖存,并設(shè)置鎖存模式。

//啟動(dòng)或停止鎖存

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);

//設(shè)置鎖存模式

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("啟動(dòng)鎖存"));

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

}

}

7.通過定時(shí)器1,更新鎖存信息。

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

{

if(NULL != g_handle)

{

CString str;

if(nIDEvent == 1)

{

int iret = 0;

int MarkStatus = 0;

float RegistPos;

//判斷鎖存是否觸發(fā)

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++;

//重新觸發(fā)鎖存

iret = ZAux_Direct_Regist(g_handle,m_RegistAxis,RegistMode);

}

str.Format(_T("鎖存觸發(fā)狀態(tài):%d 次數(shù):%d"), MarkStatus,m_RegistCount);

SetDlgItemTextA(IDC_STATUS_REGIST,str);

}

}

CDialogEx::OnTimer(nIDEvent);

}

8.通過停止按鈕的事件處理函數(shù)來停止運(yùn)動(dòng)。

//停止

void Ctest_PswitchDlg::OnBnClickedStopmove()

{

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

}

9.編譯運(yùn)行演示。

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

(2)編譯并運(yùn)行例程。

28.png

(3)同時(shí)通過ZDevelop軟件連接同一個(gè)控制器,通過示波器對(duì)運(yùn)動(dòng)過程進(jìn)行監(jiān)控。

29.png

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C#上位機(jī)與運(yùn)動(dòng)控制卡網(wǎng)絡(luò)通訊的周期上報(bào)

    使用C#上位機(jī)編程實(shí)現(xiàn)運(yùn)動(dòng)控制卡網(wǎng)絡(luò)通訊的周期上報(bào)功能
    的頭像 發(fā)表于 06-26 13:59 ?107次閱讀
    C#上位機(jī)與<b class='flag-5'>運(yùn)動(dòng)</b><b class='flag-5'>控制卡</b>網(wǎng)絡(luò)通訊的周期上報(bào)

    EtherCAT運(yùn)動(dòng)控制卡應(yīng)用開發(fā)程之Java

    運(yùn)動(dòng)控制卡的Java開發(fā)及DLL調(diào)用
    的頭像 發(fā)表于 06-13 14:29 ?208次閱讀
    EtherCAT<b class='flag-5'>運(yùn)動(dòng)</b><b class='flag-5'>控制卡</b>應(yīng)用<b class='flag-5'>開發(fā)</b>教<b class='flag-5'>程之</b>Java

    控制系統(tǒng)調(diào)優(yōu)必備知識(shí):“運(yùn)動(dòng)控制卡 控制周期怎么算”你真的懂了嗎?

    在工業(yè)自動(dòng)化領(lǐng)域,運(yùn)動(dòng)控制卡控制周期這個(gè)參數(shù)常常被忽視,但它卻是影響整個(gè)系統(tǒng)穩(wěn)定性、精度甚至產(chǎn)能的關(guān)鍵因素。你是不是也遇到過這些問題:電機(jī)總是抖動(dòng)?軌跡跟蹤老是偏?想優(yōu)化系統(tǒng)卻無從下手?大概率是你的
    的頭像 發(fā)表于 05-27 10:59 ?415次閱讀
    <b class='flag-5'>控制</b>系統(tǒng)調(diào)優(yōu)必備知識(shí):“<b class='flag-5'>運(yùn)動(dòng)</b><b class='flag-5'>控制卡</b> <b class='flag-5'>控制</b>周期怎么算”你真的懂了嗎?

    運(yùn)動(dòng)控制卡網(wǎng)絡(luò)通訊的心跳檢測(cè)之C#上位機(jī)編程

    使用C#上位機(jī)編程實(shí)現(xiàn)運(yùn)動(dòng)控制卡網(wǎng)絡(luò)通訊的心跳檢測(cè)功能
    的頭像 發(fā)表于 12-24 10:54 ?1095次閱讀
    <b class='flag-5'>運(yùn)動(dòng)</b><b class='flag-5'>控制卡</b>網(wǎng)絡(luò)通訊的心跳檢測(cè)之C#上位機(jī)編程

    運(yùn)動(dòng)控制卡周期上報(bào)實(shí)時(shí)數(shù)據(jù)IO狀態(tài)之C++篇

    使用C++進(jìn)行運(yùn)動(dòng)控制卡的周期上報(bào)功能實(shí)現(xiàn)
    的頭像 發(fā)表于 12-17 13:59 ?804次閱讀
    <b class='flag-5'>運(yùn)動(dòng)</b><b class='flag-5'>控制卡</b>周期上報(bào)實(shí)時(shí)數(shù)據(jù)IO狀態(tài)之C++篇

    AM263x控制卡硬件用戶指南

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

    AM263Px控制卡評(píng)估模塊

    電子發(fā)燒友網(wǎng)站提供《AM263Px控制卡評(píng)估模塊.pdf》資料免費(fèi)下載
    發(fā)表于 10-29 10:00 ?0次下載
    AM263Px<b class='flag-5'>控制卡</b>評(píng)估模塊

    PCIe實(shí)時(shí)運(yùn)動(dòng)控制卡的雙盤視覺篩選機(jī)上位機(jī)開發(fā)應(yīng)用

    PCIe實(shí)時(shí)運(yùn)動(dòng)控制卡的雙盤視覺篩選機(jī)上位機(jī)開發(fā)應(yīng)用
    的頭像 發(fā)表于 10-10 10:15 ?755次閱讀
    PCIe實(shí)時(shí)<b class='flag-5'>運(yùn)動(dòng)</b><b class='flag-5'>控制卡</b>的雙盤視覺篩選機(jī)上位機(jī)<b class='flag-5'>開發(fā)</b>應(yīng)用

    AM263x控制卡快速入門指南

    電子發(fā)燒友網(wǎng)站提供《AM263x控制卡快速入門指南.pdf》資料免費(fèi)下載
    發(fā)表于 08-27 10:35 ?0次下載
    AM263x<b class='flag-5'>控制卡</b>快速入門指南

    AM263Px控制卡快速入門指南

    電子發(fā)燒友網(wǎng)站提供《AM263Px控制卡快速入門指南.pdf》資料免費(fèi)下載
    發(fā)表于 08-26 09:24 ?0次下載
    AM263Px<b class='flag-5'>控制卡</b>快速入門指南

    PCIe EtherCAT實(shí)時(shí)運(yùn)動(dòng)控制卡PCIE464的IO與編碼器讀寫應(yīng)用# 正運(yùn)動(dòng)技術(shù)# 運(yùn)動(dòng)控制卡

    編碼器運(yùn)動(dòng)控制卡
    正運(yùn)動(dòng)技術(shù)
    發(fā)布于 :2024年07月23日 09:37:31

    PCIe EtherCAT實(shí)時(shí)運(yùn)動(dòng)控制卡PCIE464的IO與編碼器讀寫應(yīng)用

    C#進(jìn)行PCIe EtherCAT運(yùn)動(dòng)控制卡的項(xiàng)目開發(fā)和快速讀取多個(gè)IO和軸編碼器位置的例程。
    的頭像 發(fā)表于 07-17 14:47 ?1421次閱讀
    PCIe EtherCAT實(shí)時(shí)<b class='flag-5'>運(yùn)動(dòng)</b><b class='flag-5'>控制卡</b>PCIE464的IO與編碼器讀寫應(yīng)用