9.PMAC上位機-上位機發送指令

來源:互聯網
上載者:User

標籤:pmac   terminal   硬體   pmacgetreponse   下位機   

通常我們說PC控制其他硬體工作,指的是PC給相應的硬體發送指令來控制對應硬體。同時在發送完指令後可能會接受到相對應的反饋訊息,告訴PC當前硬體的狀態和參數等資料,這就是常見的PC和硬體通訊。PMAC已經幫我們封裝好了這通訊過程,直接調用相關函數即可,這裡講通過上位機給PMAC發送指令控制電機運動或設定參數或返回當前指定參數值等。

PMAC提供PmacGetResponse和PmacGetResponseEX給PMAC發送指令。這一過程非常類似在Terminal中我們手動給PMAC發送指令,這裡兩個函數支援發送的命令也是在Terminal中輸入的線上指令(Online Command)。

先看幾個最簡單樣本額,在對話方塊上分別添加幾個按鈕和其響應函數,在響應函數中添加代碼實現如下功能:

1.設定參數

<pre name="code" class="cpp"><pre name="code" class="cpp">//連結Pcomm32.dll函數庫,注意引入myRuntimeLink標頭檔OpenRuntimeLink();//開啟PMAC卡串連OpenPmacDevice(0);TCHAR szRes[MAX_PATH];TCHAR szCmd[MAX_PATH];/*****************************************************/lstrcpy(szCmd, "p1=1");//發送指令和接受往回傳的指令填充到szResPmacGetResponse(0,szRes,MAX_PATH,szCmd);/*****************************************************///關閉PMAC卡串連ClosePmacDevice(0);//FreeLibraryCloseRuntimeLink();



2.擷取參數值

//連結Pcomm32.dll函數庫,注意引入myRuntimeLink標頭檔OpenRuntimeLink();//開啟PMAC卡串連OpenPmacDevice(0);TCHAR szRes[MAX_PATH];TCHAR szCmd[MAX_PATH];/*****************************************************/lstrcpy(szCmd, "p1");//發送指令和接受往回傳的指令填充到szResPmacGetResponse(0,szRes,MAX_PATH,szCmd);/*****************************************************///顯示當前參數值AfxMessageBox(szRes);//關閉PMAC卡串連ClosePmacDevice(0);//FreeLibraryCloseRuntimeLink();

3.控制電機點動

//連結Pcomm32.dll函數庫,注意引入myRuntimeLink標頭檔OpenRuntimeLink();//開啟PMAC卡串連OpenPmacDevice(0);TCHAR szRes[MAX_PATH];TCHAR szCmd[MAX_PATH];/*****************************************************/lstrcpy(szCmd, "#6j+");//發送指令和接受往回傳的指令填充到szResPmacGetResponse(0,szRes,MAX_PATH,szCmd);/*****************************************************///關閉PMAC卡串連ClosePmacDevice(0);//FreeLibraryCloseRuntimeLink();

4.控製程序運行

//連結Pcomm32.dll函數庫,注意引入myRuntimeLink標頭檔OpenRuntimeLink();//開啟PMAC卡串連OpenPmacDevice(0);TCHAR szRes[MAX_PATH];TCHAR szCmd[MAX_PATH];/*****************************************************/lstrcpy(szCmd, "&1b20r");//發送指令和接受往回傳的指令填充到szResPmacGetResponse(0,szRes,MAX_PATH,szCmd);/*****************************************************///關閉PMAC卡串連ClosePmacDevice(0);//FreeLibraryCloseRuntimeLink();
注意這裡的軸號和程式號和自己編寫並下載的程式一致。


看到了嗎,在/**/注釋間的是不是很熟悉,其實就是我們在PEWin32中Terminal視窗發送的指令,在/**/之前和之後其實就是建立和釋放作業環境的過程。很多時候,對於上位機程式來說,我們甚至只需要調用PmacGetResponse和PmacGetResponseEX就足以滿足我們的需求了。


5.示範程式

總體示範,下面我們把上面的常用功能整合到如下介面中:



對應的作業碼和上述示範代碼一樣,這裡為了示範方便每次發送指令前都要建立環境和串連PMAC、發送指令、中斷連線和釋放環境,在實際項目中,只需要再程式執行個體化或視窗執行個體化時建立環境和串連PMAC,在視窗關閉或程式退出時中斷連線和釋放環境即可。代碼如下:

//發送指令void CTest1Dlg::OnSend() {//連結Pcomm32.dll函數庫,注意引入myRuntimeLink標頭檔OpenRuntimeLink();//開啟PMAC卡串連OpenPmacDevice(0);TCHAR szRes[MAX_PATH];TCHAR szCmd[MAX_PATH];//獲得輸入的待發送指令字串GetDlgItemText(IDE_COMMAND, szCmd, MAX_PATH);//發送指令和接受往回傳的指令填充到szResPmacGetResponse(0,szRes,MAX_PATH,szCmd);//顯示接受指令SetDlgItemText(IDE_RECEIVE, szRes);//關閉PMAC卡串連ClosePmacDevice(0);//FreeLibraryCloseRuntimeLink();}//正方向移動void CTest1Dlg::OnMovePos() {//連結Pcomm32.dll函數庫,注意引入myRuntimeLink標頭檔OpenRuntimeLink();//開啟PMAC卡串連OpenPmacDevice(0);TCHAR szRes[MAX_PATH];TCHAR szCmd[MAX_PATH];lstrcpy(szCmd, "#6j+");//顯示輸入的待發送指令字串SetDlgItemText(IDE_COMMAND, szCmd);//發送指令和接受往回傳的指令填充到szResPmacGetResponse(0,szRes,MAX_PATH,szCmd);//顯示接受指令SetDlgItemText(IDE_RECEIVE, szRes);//關閉PMAC卡串連ClosePmacDevice(0);//FreeLibraryCloseRuntimeLink();}//負方向移動void CTest1Dlg::OnMoveNeg() {//連結Pcomm32.dll函數庫,注意引入myRuntimeLink標頭檔OpenRuntimeLink();//開啟PMAC卡串連OpenPmacDevice(0);TCHAR szRes[MAX_PATH];TCHAR szCmd[MAX_PATH];lstrcpy(szCmd, "#6j-");//顯示輸入的待發送指令字串SetDlgItemText(IDE_COMMAND, szCmd);//發送指令和接受往回傳的指令填充到szResPmacGetResponse(0,szRes,MAX_PATH,szCmd);//顯示接受指令SetDlgItemText(IDE_RECEIVE, szRes);//關閉PMAC卡串連ClosePmacDevice(0);//FreeLibraryCloseRuntimeLink();}//停止void CTest1Dlg::OnStopMove() {//連結Pcomm32.dll函數庫,注意引入myRuntimeLink標頭檔OpenRuntimeLink();//開啟PMAC卡串連OpenPmacDevice(0);TCHAR szRes[MAX_PATH];TCHAR szCmd[MAX_PATH];lstrcpy(szCmd, "#6k");//顯示輸入的待發送指令字串SetDlgItemText(IDE_COMMAND, szCmd);//發送指令和接受往回傳的指令填充到szResPmacGetResponse(0,szRes,MAX_PATH,szCmd);//顯示接受指令SetDlgItemText(IDE_RECEIVE, szRes);//關閉PMAC卡串連ClosePmacDevice(0);//FreeLibraryCloseRuntimeLink();}//回零void CTest1Dlg::OnHome() {//連結Pcomm32.dll函數庫,注意引入myRuntimeLink標頭檔OpenRuntimeLink();//開啟PMAC卡串連OpenPmacDevice(0);TCHAR szRes[MAX_PATH];TCHAR szCmd[MAX_PATH];/************************************************************************//*啟用電機                                                              *//************************************************************************/lstrcpy(szCmd, "#6j/#8j/");//顯示輸入的待發送指令字串SetDlgItemText(IDE_COMMAND, szCmd);//發送指令和接受往回傳的指令填充到szResPmacGetResponse(0,szRes,MAX_PATH,szCmd);//顯示接受指令SetDlgItemText(IDE_RECEIVE, szRes);Sleep(1000);/************************************************************************//* 調用回零程式,注意這裡自己的回零程式號                                *//************************************************************************/lstrcpy(szCmd, "&1b20r");//顯示輸入的待發送指令字串SetDlgItemText(IDE_COMMAND, szCmd);//發送指令和接受往回傳的指令填充到szResPmacGetResponse(0,szRes,MAX_PATH,szCmd);//顯示接受指令SetDlgItemText(IDE_RECEIVE, szRes);//關閉PMAC卡串連ClosePmacDevice(0);//FreeLibraryCloseRuntimeLink();}//運行程式void CTest1Dlg::OnRunProg() {//連結Pcomm32.dll函數庫,注意引入myRuntimeLink標頭檔OpenRuntimeLink();//開啟PMAC卡串連OpenPmacDevice(0);TCHAR szRes[MAX_PATH];TCHAR szCmd[MAX_PATH];lstrcpy(szCmd, "&1b40r");//顯示輸入的待發送指令字串SetDlgItemText(IDE_COMMAND, szCmd);//發送指令和接受往回傳的指令填充到szResPmacGetResponse(0,szRes,MAX_PATH,szCmd);//顯示接受指令SetDlgItemText(IDE_RECEIVE, szRes);//關閉PMAC卡串連ClosePmacDevice(0);//FreeLibraryCloseRuntimeLink();}//停止程式void CTest1Dlg::OnStopProg() {//連結Pcomm32.dll函數庫,注意引入myRuntimeLink標頭檔OpenRuntimeLink();//開啟PMAC卡串連OpenPmacDevice(0);TCHAR szRes[MAX_PATH];TCHAR szCmd[MAX_PATH];lstrcpy(szCmd, "&1b40a");//顯示輸入的待發送指令字串SetDlgItemText(IDE_COMMAND, szCmd);//發送指令和接受往回傳的指令填充到szResPmacGetResponse(0,szRes,MAX_PATH,szCmd);//顯示接受指令SetDlgItemText(IDE_RECEIVE, szRes);//關閉PMAC卡串連ClosePmacDevice(0);//FreeLibraryCloseRuntimeLink();}


程式示範代碼下載連結

原創,轉載請註明來自http://blog.csdn.net/wenzhou1219

9.PMAC上位機-上位機發送指令

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.