標籤: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上位機-上位機發送指令