9.PMAC上位机-上位机发送指令

通常我们说PC控制其他硬件工作,指的是PC给相应的硬件发送指令来控制对应硬件。同时在发送完指令后可能会接受到相对应的反馈消息,告诉PC当前硬件的状态和参数等数据,这就是常见的PC和硬件通信。PMAC已经帮我们封装好了这通信过程,直接调用相关函数即可,这里讲通过上位机给PMAC发送指令控制电机运动或设置参数或返回当前指定参数值等。

PMAC提供PmacGetResponse和PmacGetResponseEX给PMAC发送指令。这一过程非常类似在Terminal中我们手动给PMAC发送指令,这里两个函数支持发送的命令也是在Terminal中输入的在线指令(Online Command)。

先看几个最简单示例额,在对话框上分别添加几个按钮和其响应函数,在响应函数中添加代码实现如下功能:

1.设置参数

[cpp]  view plain  copy
  1. //链接Pcomm32.dll函数库,注意引入myRuntimeLink头文件  
  2. OpenRuntimeLink();  
  3.   
  4. //打开PMAC卡连接  
  5. OpenPmacDevice(0);  
  6.   
  7. TCHAR szRes[MAX_PATH];  
  8. TCHAR szCmd[MAX_PATH];  
  9.   
  10. /*****************************************************/  
  11. lstrcpy(szCmd, "p1=1");  
  12.   
  13. //发送指令和接受往回发的指令填充到szRes  
  14. PmacGetResponse(0,szRes,MAX_PATH,szCmd);  
  15. /*****************************************************/  
  16.   
  17. //关闭PMAC卡连接  
  18. ClosePmacDevice(0);  
  19.   
  20. //FreeLibrary  
  21. CloseRuntimeLink();  

 
 

2.获取参数值

[cpp]  view plain  copy
  1. //链接Pcomm32.dll函数库,注意引入myRuntimeLink头文件  
  2. OpenRuntimeLink();  
  3.   
  4. //打开PMAC卡连接  
  5. OpenPmacDevice(0);  
  6.   
  7. TCHAR szRes[MAX_PATH];  
  8. TCHAR szCmd[MAX_PATH];  
  9.   
  10. /*****************************************************/  
  11. lstrcpy(szCmd, "p1");  
  12.   
  13. //发送指令和接受往回发的指令填充到szRes  
  14. PmacGetResponse(0,szRes,MAX_PATH,szCmd);  
  15. /*****************************************************/  
  16.   
  17. //显示当前参数值  
  18. AfxMessageBox(szRes);  
  19.   
  20. //关闭PMAC卡连接  
  21. ClosePmacDevice(0);  
  22.   
  23. //FreeLibrary  
  24. CloseRuntimeLink();  

3.控制电机点动

[cpp]  view plain  copy
  1. //链接Pcomm32.dll函数库,注意引入myRuntimeLink头文件  
  2. OpenRuntimeLink();  
  3.   
  4. //打开PMAC卡连接  
  5. OpenPmacDevice(0);  
  6.   
  7. TCHAR szRes[MAX_PATH];  
  8. TCHAR szCmd[MAX_PATH];  
  9.   
  10. /*****************************************************/  
  11. lstrcpy(szCmd, "#6j+");  
  12.   
  13. //发送指令和接受往回发的指令填充到szRes  
  14. PmacGetResponse(0,szRes,MAX_PATH,szCmd);  
  15. /*****************************************************/  
  16.   
  17. //关闭PMAC卡连接  
  18. ClosePmacDevice(0);  
  19.   
  20. //FreeLibrary  
  21. CloseRuntimeLink();  

4.控制程序运行

[cpp]  view plain  copy
  1. //链接Pcomm32.dll函数库,注意引入myRuntimeLink头文件  
  2. OpenRuntimeLink();  
  3.   
  4. //打开PMAC卡连接  
  5. OpenPmacDevice(0);  
  6.   
  7. TCHAR szRes[MAX_PATH];  
  8. TCHAR szCmd[MAX_PATH];  
  9.   
  10. /*****************************************************/  
  11. lstrcpy(szCmd, "&1b20r");  
  12.   
  13. //发送指令和接受往回发的指令填充到szRes  
  14. PmacGetResponse(0,szRes,MAX_PATH,szCmd);  
  15. /*****************************************************/  
  16.   
  17. //关闭PMAC卡连接  
  18. ClosePmacDevice(0);  
  19.   
  20. //FreeLibrary  
  21. CloseRuntimeLink();  
注意这里的轴号和程序号和自己编写并下载的程序一致。


看到了吗,在/**/注释间的是不是很熟悉,其实就是我们在PEWin32中Terminal窗口发送的指令,在/**/之前和之后其实就是建立和释放操作环境的过程。很多时候,对于上位机程序来说,我们甚至只需要调用PmacGetResponse和PmacGetResponseEX就足以满足我们的需求了。


5.演示程序

总体演示,下面我们把上面的常用功能集成到如下界面中:



对应的操作代码和上述演示代码一样,这里为了演示方便每次发送指令前都要建立环境和连接PMAC、发送指令、断开连接和释放环境,在实际项目中,只需要再程序实例化或窗口实例化时建立环境和连接PMAC,在窗口关闭或程序退出时断开连接和释放环境即可。代码如下:

[cpp]  view plain  copy
  1. //发送指令  
  2. void CTest1Dlg::OnSend()   
  3. {  
  4.     //链接Pcomm32.dll函数库,注意引入myRuntimeLink头文件  
  5.     OpenRuntimeLink();  
  6.   
  7.     //打开PMAC卡连接  
  8.     OpenPmacDevice(0);  
  9.   
  10.   
  11.     TCHAR szRes[MAX_PATH];  
  12.     TCHAR szCmd[MAX_PATH];  
  13.       
  14.     //获得输入的待发送指令字符串  
  15.     GetDlgItemText(IDE_COMMAND, szCmd, MAX_PATH);  
  16.   
  17.     //发送指令和接受往回发的指令填充到szRes  
  18.     PmacGetResponse(0,szRes,MAX_PATH,szCmd);  
  19.   
  20.     //显示接受指令  
  21.     SetDlgItemText(IDE_RECEIVE, szRes);  
  22.   
  23.     //关闭PMAC卡连接  
  24.     ClosePmacDevice(0);  
  25.   
  26.     //FreeLibrary  
  27.     CloseRuntimeLink();  
  28. }  
  29.   
  30. //正方向移动  
  31. void CTest1Dlg::OnMovePos()   
  32. {  
  33.     //链接Pcomm32.dll函数库,注意引入myRuntimeLink头文件  
  34.     OpenRuntimeLink();  
  35.       
  36.     //打开PMAC卡连接  
  37.     OpenPmacDevice(0);  
  38.       
  39.       
  40.     TCHAR szRes[MAX_PATH];  
  41.     TCHAR szCmd[MAX_PATH];  
  42.   
  43.     lstrcpy(szCmd, "#6j+");  
  44.       
  45.     //显示输入的待发送指令字符串  
  46.     SetDlgItemText(IDE_COMMAND, szCmd);  
  47.       
  48.     //发送指令和接受往回发的指令填充到szRes  
  49.     PmacGetResponse(0,szRes,MAX_PATH,szCmd);  
  50.       
  51.     //显示接受指令  
  52.     SetDlgItemText(IDE_RECEIVE, szRes);  
  53.       
  54.     //关闭PMAC卡连接  
  55.     ClosePmacDevice(0);  
  56.       
  57.     //FreeLibrary  
  58.     CloseRuntimeLink();  
  59. }  
  60.   
  61. //负方向移动  
  62. void CTest1Dlg::OnMoveNeg()   
  63. {  
  64.     //链接Pcomm32.dll函数库,注意引入myRuntimeLink头文件  
  65.     OpenRuntimeLink();  
  66.       
  67.     //打开PMAC卡连接  
  68.     OpenPmacDevice(0);  
  69.       
  70.       
  71.     TCHAR szRes[MAX_PATH];  
  72.     TCHAR szCmd[MAX_PATH];  
  73.       
  74.     lstrcpy(szCmd, "#6j-");  
  75.       
  76.     //显示输入的待发送指令字符串  
  77.     SetDlgItemText(IDE_COMMAND, szCmd);  
  78.       
  79.     //发送指令和接受往回发的指令填充到szRes  
  80.     PmacGetResponse(0,szRes,MAX_PATH,szCmd);  
  81.       
  82.     //显示接受指令  
  83.     SetDlgItemText(IDE_RECEIVE, szRes);  
  84.       
  85.     //关闭PMAC卡连接  
  86.     ClosePmacDevice(0);  
  87.       
  88.     //FreeLibrary  
  89.     CloseRuntimeLink();  
  90. }  
  91.   
  92. //停止  
  93. void CTest1Dlg::OnStopMove()   
  94. {  
  95.     //链接Pcomm32.dll函数库,注意引入myRuntimeLink头文件  
  96.     OpenRuntimeLink();  
  97.       
  98.     //打开PMAC卡连接  
  99.     OpenPmacDevice(0);  
  100.       
  101.       
  102.     TCHAR szRes[MAX_PATH];  
  103.     TCHAR szCmd[MAX_PATH];  
  104.       
  105.     lstrcpy(szCmd, "#6k");  
  106.       
  107.     //显示输入的待发送指令字符串  
  108.     SetDlgItemText(IDE_COMMAND, szCmd);  
  109.       
  110.     //发送指令和接受往回发的指令填充到szRes  
  111.     PmacGetResponse(0,szRes,MAX_PATH,szCmd);  
  112.       
  113.     //显示接受指令  
  114.     SetDlgItemText(IDE_RECEIVE, szRes);  
  115.       
  116.     //关闭PMAC卡连接  
  117.     ClosePmacDevice(0);  
  118.       
  119.     //FreeLibrary  
  120.     CloseRuntimeLink();  
  121. }  
  122.   
  123. //回零  
  124. void CTest1Dlg::OnHome()   
  125. {  
  126.     //链接Pcomm32.dll函数库,注意引入myRuntimeLink头文件  
  127.     OpenRuntimeLink();  
  128.       
  129.     //打开PMAC卡连接  
  130.     OpenPmacDevice(0);  
  131.       
  132.       
  133.     TCHAR szRes[MAX_PATH];  
  134.     TCHAR szCmd[MAX_PATH];  
  135.   
  136.     /************************************************************************/  
  137.     /*激活电机                                                              */  
  138.     /************************************************************************/  
  139.     lstrcpy(szCmd, "#6j/#8j/");  
  140.       
  141.     //显示输入的待发送指令字符串  
  142.     SetDlgItemText(IDE_COMMAND, szCmd);  
  143.       
  144.     //发送指令和接受往回发的指令填充到szRes  
  145.     PmacGetResponse(0,szRes,MAX_PATH,szCmd);  
  146.       
  147.     //显示接受指令  
  148.     SetDlgItemText(IDE_RECEIVE, szRes);  
  149.   
  150.     Sleep(1000);  
  151.       
  152.       
  153.     /************************************************************************/  
  154.     /* 调用回零程序,注意这里自己的回零程序号                                */  
  155.     /************************************************************************/  
  156.     lstrcpy(szCmd, "&1b20r");  
  157.       
  158.     //显示输入的待发送指令字符串  
  159.     SetDlgItemText(IDE_COMMAND, szCmd);  
  160.       
  161.     //发送指令和接受往回发的指令填充到szRes  
  162.     PmacGetResponse(0,szRes,MAX_PATH,szCmd);  
  163.       
  164.     //显示接受指令  
  165.     SetDlgItemText(IDE_RECEIVE, szRes);  
  166.       
  167.     //关闭PMAC卡连接  
  168.     ClosePmacDevice(0);  
  169.       
  170.     //FreeLibrary  
  171.     CloseRuntimeLink();  
  172. }  
  173.   
  174. //运行程序  
  175. void CTest1Dlg::OnRunProg()   
  176. {  
  177.     //链接Pcomm32.dll函数库,注意引入myRuntimeLink头文件  
  178.     OpenRuntimeLink();  
  179.       
  180.     //打开PMAC卡连接  
  181.     OpenPmacDevice(0);  
  182.       
  183.       
  184.     TCHAR szRes[MAX_PATH];  
  185.     TCHAR szCmd[MAX_PATH];  
  186.       
  187.     lstrcpy(szCmd, "&1b40r");  
  188.       
  189.     //显示输入的待发送指令字符串  
  190.     SetDlgItemText(IDE_COMMAND, szCmd);  
  191.       
  192.     //发送指令和接受往回发的指令填充到szRes  
  193.     PmacGetResponse(0,szRes,MAX_PATH,szCmd);  
  194.       
  195.     //显示接受指令  
  196.     SetDlgItemText(IDE_RECEIVE, szRes);  
  197.       
  198.     //关闭PMAC卡连接  
  199.     ClosePmacDevice(0);  
  200.       
  201.     //FreeLibrary  
  202.     CloseRuntimeLink();  
  203. }  
  204.   
  205. //停止程序  
  206. void CTest1Dlg::OnStopProg()   
  207. {  
  208.     //链接Pcomm32.dll函数库,注意引入myRuntimeLink头文件  
  209.     OpenRuntimeLink();  
  210.       
  211.     //打开PMAC卡连接  
  212.     OpenPmacDevice(0);  
  213.       
  214.       
  215.     TCHAR szRes[MAX_PATH];  
  216.     TCHAR szCmd[MAX_PATH];  
  217.   
  218.     lstrcpy(szCmd, "&1b40a");  
  219.       
  220.     //显示输入的待发送指令字符串  
  221.     SetDlgItemText(IDE_COMMAND, szCmd);  
  222.       
  223.     //发送指令和接受往回发的指令填充到szRes  
  224.     PmacGetResponse(0,szRes,MAX_PATH,szCmd);  
  225.       
  226.     //显示接受指令  
  227.     SetDlgItemText(IDE_RECEIVE, szRes);  
  228.       
  229.     //关闭PMAC卡连接  
  230.     ClosePmacDevice(0);  
  231.       
  232.     //FreeLibrary  
  233.     CloseRuntimeLink();  
  234. }  


程序演示代码下载链接

转载,来自http://blog.csdn.net/wenzhou1219

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值