精华内容
下载资源
问答
  • PMAC上位机编程

    2018-06-28 11:34:45
    PMAC控制器上位机测试程序,建立pmac与pc的通讯,每个轴的位置坐标显示;实时速度显示;跟随误差显示,实时发送命令以及反馈消息读取。
  • 前面讲的知识都是在PE-WIN32中操作的,都是针对PMAC下位机编程的,现在开始讲解PMAC上位机——PC端如何与PMAC通信:给PMAC发送控制信号及处理PMAC的中断响应。本文先说PMAC VC编程的环境配置。1.文件夹结构PMAC PC...

    前面讲的知识都是在PE-WIN32中操作的,都是针对PMAC下位机编程的,现在开始讲解PMAC上位机——PC端如何与PMAC通信:给PMAC发送控制信号及处理PMAC的中断响应。本文先说PMAC VC编程的环境配置。


    1.文件夹结构

    PMAC PC编程必须安装PComm32,安装完文件夹结构如下:



    Pmactest.exe用于在PAMC按完成后测试当前安装是否成功,PmacTest是该程序的源码

    PCOMM32PRO.HLP是PComm32的编程帮助手册

    VCTest和VBTest文件夹是上位机编程的小Demo

    Driver (Debug Version)文件夹里是PMAC的各种驱动和动态链接库及其导入库等

    Include文件尾PMAC的接口头文件


    2.驱动结构模型

    Driver (Debug Version)文件夹内容如下


    这里提供了Pcomm32.dll动态链接库和导入库Pcomm32.lib,.sys都是PMAC的各种接口的驱动。


    PMAC的整个驱动结构模型如下图:


    可以看到,我们针对动态链接库提供接口编程就行了


    3.代码演示

    • 1.打开VCTest目录,会发现有myRuntime.h和myRuntime.cpp文件,连同上面的Pcomm32.dll一同拷贝进当前项目目录。
    • 2.然后将myRuntime.h和myRuntime.cpp添加到当前项目中
    • 3.就可以开始使用了


    最简单的测试程序如下:

    新建MFC程序PmacConnect,PmacConnectDlg.cpp引入头文件

    1. //添加PComm操作库头文件  
    2. #include "myRuntime.h"  
    添加一个按钮响应,如下:

    1. void CPmacConnectDlg::OnConnect()   
    2. {  
    3.     //动态加载Pcomm32.dll函数  
    4.     if (NULL != OpenRuntimeLink())  
    5.     {  
    6.         AfxMessageBox(TEXT("加载Pcomm32.dll成功!"));  
    7.     }  
    8.     else  
    9.     {  
    10.         AfxMessageBox(TEXT("加载Pcomm32.dll失败!"));  
    11.         return;  
    12.     }  
    13.   
    14.     //打开指定卡号PMAC,这里打开0号卡  
    15.     if (TRUE == OpenPmacDevice(0))  
    16.     {  
    17.         AfxMessageBox(TEXT("打开PMAC成功!"));  
    18.     }  
    19.     else  
    20.     {  
    21.         AfxMessageBox(TEXT("打开PMAC失败!"));  
    22.     }  
    23.   
    24.     //关闭到PMAC连接  
    25.     ClosePmacDevice(0);  
    26.   
    27.     //动态关闭Pcomm32.dll的使用  
    28.     CloseRuntimeLink();  
    29. }  


    这里myRuntime.h和myRuntime.cpp封装了动态加载PComm.dll的函数,其实就是LoadLibrary的调用,感兴趣的可以自己看一下。这里只封装了常用部分的,需要的自己可以仿照它的形式从Include/Runtime.h中找到对应函数的原型来添加封装。

    这里只是为了测试连接功能,实际编写程序的时候,我们需要在InitInstance或InitDialog时初始化连接,在程序退出的时候关闭连接。简单来说就是最开始打开一次和最后关闭一次连接,不需要每次操作时都要频繁的打开和关闭。


    代码演示下载链接


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

    展开全文
  • PMAC上位机编程基础1---编程环境配置

    千次阅读 2015-11-24 17:05:10
    PMAC上位机编程基础1—编程环境配置最近看了一篇xx大学的硕士毕业论文,提到了关于PMAC的上位机编程,觉得蛮有意思。于是也想写一个小界面试一试。看了两三天文档,经过N次调试,终于完成了实现电机JOG运动的界面,...

    PMAC上位机编程基础1—编程环境配置

    最近看了一篇上海交通大学的硕士毕业论文,提到了关于PMAC的上位机编程,觉得蛮有意思。于是也想写一个小界面试一试。看了两三天文档,经过N次调试,终于完成了实现电机JOG运动的界面,其实回过头来想想,还是蛮简单的。

    一般,运动控制卡都配有开放的函数库供用户在DOS或Windows系统平台下自行开发、构造所需的控制系统。因此这种结构开放的运动控制卡能够广泛应用于制造业中设备自动化的各个领域。

    1.PComm32概述

    首先,PC机上必须安装PComm32,PComm32是泰道公司为实现PMAC控制卡的上位机编程提供的工具,包含有400多个函数可供调用。支持的通讯方式包括总线(ISA和PCI),双端口RAM,串口,USB和Ethernet,适用的编程环境有:

    •Microsoft Visual C/C++

    • Microsoft Visual Basic

    • Borland Delphi

    • Borland C++ Builder

    在这里,我用的是VS2010。PComm32的驱动结构如下图所示,可以看到我们只需要对动态链接库提供的函数接口编程就可以。


    PComm安装完成后,在其目录下可以找到以下几个文件:
    myRuntime.h,myRuntime.cpp以及PCOMM32.DLL。这几个文件非常重要。

    2.编程环境配置

    1.创建MFC程序

    打开VS2010,创建一个MFC程序(如果不懂MFC也没有关系,我对MFC的了解也非常有限,但是不影响使用,如果感兴趣的话可以以后再慢慢学习MFC)。
    创建步骤如下:

    输入名称,点击“确定”,进入下一步

    点击“下一步”

    注意,这里应用程序类型选择“基于对话框”,点击“下一步”

    主框架样式可选,最小化,最大化等,也可以进入程序后,在窗口的属性中修改。点击“下一步”

    点击“下一步”

    可以看到,生成的类有CpmacAPP和Cpmac2Dlg两种。点击“完成”

    创建完成后的界面如图。

    2.添加头文件

    1.点击项目->属性->C/C++

    在附加包含目录中添加头文件所在的目录,多个用分号隔开
    2.点击项目->属性->链接器

    在附加库目录中填写附加依赖库所在目录,多项用分号隔开
    3.点击项目->属性->链接器->输入

    在附加依赖项中填写附加依赖库的名字.lib 空格间隔多项。
    至此,编程环境配置完成。

    参考资料:

    1.PComm32 SOFTWARE REFERENCE MANUAL

    2.VS2010添加外部头文件

    展开全文
  • 博客配套演示文件,演示PC如何给PMAC发送指令完成参数设置、获取参数值、电机点动、程序运行等功能,最后给出一个完整的功能实现,包含常用的功能。
  • 通常我们说PC控制其他硬件...PMAC已经帮我们封装好了这通信过程,直接调用相关函数即可,这里讲通过上位机PMAC发送指令控制电机运动或设置参数或返回当前指定参数值等。PMAC提供PmacGetResponse和PmacGetRespon...

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

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

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

    1.设置参数

    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.获取参数值

    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.控制电机点动

    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.控制程序运行

    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,在窗口关闭或程序退出时断开连接和释放环境即可。代码如下:

    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

    展开全文
  • PMAC上位机_中断通信

    2015-05-20 14:10:21
    该资源为博客配套演示文件,下位机通过中断的方式通知上位机当前下位机加工进度,完成上下位机之间的交互通信。
  • PMAC上位机_参数设置

    2015-05-18 12:46:21
    该资源为博客配套文件,演示了如何在PC端控制运动程序的参数,动态改变程序运动速度。
  • 该资源为博客配套演示文件,演示了如何利用状态迁移图和状态列表的方式辅助构建安全的工业程序,并给出演示代码。
  • 学校老师师兄一大堆人经手的安装文件现在有缺失, 求安装PComm32 PRO的安装文件以及全部的测试文件和驱动文件包, 打开的大概样子是图中这样的。 ...我也没见过,师兄毕业一问三不知,...
  • 之前说过,上位机控制硬件都是通过发送指令进行的,这是单向的。...PC给PMAC发送指令控制它做什么,当运动程序完成后中断通知上位机,在中断的同时发送一个标识P100表明完成的程序号,这个标明到底是1...

    之前说过,上位机控制硬件都是通过发送指令进行的,这是单向的。那么反过来,下位机硬件给上位机发送指令怎么才能实现呢?对于PMAC来说,最常见的情况就是,当PMAC一次运动完成时通知当前PC程序运动已完成。

     

    1.下位机通知上位机原理

     

    如下图所示,

    PC给PMAC发送指令控制它做什么,当运动程序完成后中断通知上位机,在中断的同时发送一个标识P100表明完成的程序号,这个标明到底是1号轴运动完,还是是2号轴运动完。在PC端有一个中断回调函数,下位机发送中断后,会自动跳转到该函数中,中断函数接受中断,根据标识P100来决定不同的情况不同的处理。

    通俗来说,就是如下流程:

     

    PC->PMAC:发送指令,告诉它做什么			(&1b40r)
    PMAC:做完了,等待PC处理完前一个通知			(While (M613 = 1)  wait)
    PMAC->PC:某某事做完了,PC你就看着处理吧		(P100=1 M613=1)
    
    PC:针对PMAC通知的事判断属于什么类型并处理		(根据P100判断)
    PC->PMAC:处理完了,下位机可以发下一个通知消息了	(P100=0 M613=0)

     

    如上图所示,M613这个是用硬件跳线配置的,指定当前中断响应通道,具体的设置在这里。P100是我们指定的上下位机通信变量,这个是自己定义的,也可以是P1/P2/P3等。

     

    2.下位机代码

     

    &1
    CLOSE ;确认所有缓冲区被关闭
    
    OPEN PROG 40
    CLEAR
    
    TA(200)
    TS(20)
    F(30)
    INC
    Linear
    
    X(10) Y(40)
    dwell 0
    
    ;中断发送程序段
    While (M613 = 1)  wait  ;等待上一次中断响应处理完成
    P100=1					;标明当前完成的程序,可为0、1、2等自定义的值
    M613=1					;向上位机发送中断
    
    CLOSE

     

     

     

    3.上位机处理代码

     

    注册中断处理函数:

     

    BOOL CInterruptDlg::ConnectPmac()
    {
    	//链接Pcomm32.dll函数库,注意引入myRuntimeLink头文件
    	if (NULL == PmacRuntimeLink(PMAC_NUM))
    	{
    		AfxMessageBox(TEXT("链接Pcomm32.dll函数库和打开PMAC卡连接失败!"));
    		return m_bIsConnect = FALSE;
    	}
    	
    	//中断函数绑定
    	if(  FALSE == PmacINTRFuncCallInit(PMAC_NUM, InterruptFunc2, 0, 0xFF1F))
    	{
    		AfxMessageBox(TEXT("PMAC函数中断初始化失败"));
    		return m_bIsConnect = FALSE;
    	}
    	
    	return m_bIsConnect = TRUE;
    }


    对应的中断函数处理如下:

     

     

    //中断处理
    void WINAPI InterruptFunc2(DWORD msg, PINTRBUFFER pBuffer)
    {
    	extern CInterruptApp theApp;
    	TCHAR szRes[MAX_PATH];
    	TCHAR szCmd[MAX_PATH];
    	
    	if (pBuffer->dwInterruptType == ISR_IR6)
    	{
    		if (1 == PmacGetVariable(PMAC_NUM, 'P', 100, 0))
    		{
    			AfxMessageBox(TEXT("处理完成!"));
    			
    			//重置中断
    			lstrcpy(szCmd, "M613=0 P100=0");
    			PmacGetResponse(0,szRes,MAX_PATH,szCmd);
    		}
    	}
    }

     

     

     

     

     

    演示程序源代码下载地址,在该程序中点击电机开始回零后,回零按钮灰度化。直到下位机完成回零发送中断给上位机程序,上位机程序判断后处理使能按钮。这个程序是最简单的中断处理程序,主要是为了阐明原理,再复杂的程序都和这个原理一样的,基于这个原理我们可以开发更复杂的上下位机交互程序。

    注意这里不能用默认安装完成后的runtime.h,原本的我试过有问题,必须用我放在程序源文件夹里的重写myRuntime.h

    更多PMAC代码参见我的网站,基本上都是这个系列涉及到的知识点。

     

    到此为止,PMAC的使用系列基本上写完了,看完这一个系列,基本的PMAC编程和调试应该没有问题了,剩下的就是Read The Fuck Manual了。

     

     

    原创,转载请注明来自http://blog.csdn.net/wenzhou1219

     

     

     

     

    展开全文
  • 如对于PMAC运动程序来说,我们可能想在运动的时候在窗口界面改变当前的运动速度,这样就可以完成在PC端控制设备的一切行为。1.思路对于如下程序[plain] view plain copy&1 CLOSE ;确认所有缓冲区被关闭...
  • 打开指定卡号PMAC,这里打开0号卡 21 if (TRUE == OpenPmacDevice( 0 )) 22 { 23 AfxMessageBox(TEXT( " PMAC连接成功! " )); 24 } 25 else 26 { 27 AfxMessageBox(TEXT( " ...
  • PMAC 的内部变量 内部变量分为四种,I 变量为电机等常用基本控制变量,P 变量为全局用户常量,Q 变量为坐标系变量,M 变量为地址型变量。通过对这些变量的操作,可以监控电机状态,回零,限位,设置运动控制参数,...
  • 本文就在PMAC中如何构造足够安全的工业设备程序给出一点实用方法。1.状态_迁移图先想想对于程序来说,怎样才算足够安全?对于每一种可能出现的操作都事先考虑到并给出对应的处理方案,这样的程序就是足够安全的。...
  • 【CNC——第6篇】PMAC上位机编程基础篇 所分析,进行上位机开发,实现上位机控制。 本篇环境: C# 。注意:WinForm是基于C#,MFC 是基于 C++,如果采用C++创建WPF,可参考 文大侠 VS2019。 创建一个...
  • PC端与PMAC卡的通讯,包括:PC给PMAC卡发送信号...上位机需要安装PComm32(针对不同系列的PMAC卡,不一样,此时的硬件上Turbo Pmac PCI-1型卡),安装完成后会有Pcomm32.dll的动态链接库和Pcomm32.lib的导入库,还会...
  • 1、下载好Pewin32PRO2 2、设置到好通讯前的准备,设置IP地址等,参考 3、在vs中添加引用,在com中搜索PcommServer,添加引用 4、在程序中添加using PCOMMSERVELib,然后按照手册写就可以了
  • 包含了在VS2013下建立PMAC通信对话框的主要代码
  • PMAC运动控制器上位机软件(clipper)

空空如也

空空如也

1 2 3
收藏数 56
精华内容 22
关键字:

pmac上位机