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

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

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

1.设置参数

//链接Pcomm32.dll函数库,注意引入myRuntimeLink头文件
OpenRuntimeLink();//打开PMAC卡连接
OpenPmacDevice(0);TCHAR szRes[MAX_PATH];
TCHAR szCmd[MAX_PATH];/*****************************************************/
lstrcpy(szCmd, "p1=1");//发送指令和接受往回发的指令填充到szRes
PmacGetResponse(0,szRes,MAX_PATH,szCmd);
/*****************************************************///关闭PMAC卡连接
ClosePmacDevice(0);//FreeLibrary
CloseRuntimeLink();

2.获取参数值

//链接Pcomm32.dll函数库,注意引入myRuntimeLink头文件
OpenRuntimeLink();//打开PMAC卡连接
OpenPmacDevice(0);TCHAR szRes[MAX_PATH];
TCHAR szCmd[MAX_PATH];/*****************************************************/
lstrcpy(szCmd, "p1");//发送指令和接受往回发的指令填充到szRes
PmacGetResponse(0,szRes,MAX_PATH,szCmd);
/*****************************************************///显示当前参数值
AfxMessageBox(szRes);//关闭PMAC卡连接
ClosePmacDevice(0);//FreeLibrary
CloseRuntimeLink();

3.控制电机点动

//链接Pcomm32.dll函数库,注意引入myRuntimeLink头文件
OpenRuntimeLink();//打开PMAC卡连接
OpenPmacDevice(0);TCHAR szRes[MAX_PATH];
TCHAR szCmd[MAX_PATH];/*****************************************************/
lstrcpy(szCmd, "#6j+");//发送指令和接受往回发的指令填充到szRes
PmacGetResponse(0,szRes,MAX_PATH,szCmd);
/*****************************************************///关闭PMAC卡连接
ClosePmacDevice(0);//FreeLibrary
CloseRuntimeLink();

4.控制程序运行

//链接Pcomm32.dll函数库,注意引入myRuntimeLink头文件
OpenRuntimeLink();//打开PMAC卡连接
OpenPmacDevice(0);TCHAR szRes[MAX_PATH];
TCHAR szCmd[MAX_PATH];/*****************************************************/
lstrcpy(szCmd, "&1b20r");//发送指令和接受往回发的指令填充到szRes
PmacGetResponse(0,szRes,MAX_PATH,szCmd);
/*****************************************************///关闭PMAC卡连接
ClosePmacDevice(0);//FreeLibrary
CloseRuntimeLink();

注意这里的轴号和程序号和自己编写并下载的程序一致。

看到了吗,在/**/注释间的是不是很熟悉,其实就是我们在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上位机-上位机发送指令相关推荐

  1. C#上位机(数据校验发送指令来控制下位机)

    对于"数据校验发送指令来控制下位机"的上位机,该模块主要有三个: (1)串口扫描,获取串口号,通过打开按钮来控制按钮是否打开. (2)发送数据校验的函数,将数据发送个给相应的下位机 ...

  2. 物联网云平台DTU Modbus协议 上位机 下位机 源码 源代码 程序

    物联网云平台DTU Modbus协议 上位机 下位机 源码 源代码 程序 一.源码的使用基本说明: 1.1 编译语言: 下位机使用C语言:上位机使用C#语言 标准Modbus Slave通信下位机源码 ...

  3. 激光切割机雕刻机桌面打标机打码机点胶机写字机上位机C#源码STM32F407控制板源码

    激光切割机雕刻机桌面打标机打码机点胶机写字机上位机C#源码STM32F407控制板源码 可用在各类切割机.雕刻机.打标机.点胶机.写字机.打孔机 控制板STM32F407支持3轴手动操作,鼠标单击运行 ...

  4. 上位机下位机概念详解

    摘要 今天被老板问了什么是上位机,之前接触过,对于概念也不是很清晰,我又查找了一些资料,整理如下. 上位机 上位机是指能够发出操控命令的计算机,一般是PC. 下位机 下位机是指能够控制设备状态的计算机 ...

  5. V831——人脸识别通过串口向下位机发送指令

    V831 文章目录 V831 前言 一.V831人脸识别 二.代码实现 总结 人脸识别串口发送指令 前言 V831人脸识别通过XY坐标以及Z的距离判断向下位机发送的数据,下位机处理完成后发送数据回来. ...

  6. 安卓全机型 玩机 搞机 ADB FAST 各种指令解析说明与操作

    其实adb命令可以比喻为电脑的dos操作.通过一些指令可以完成很多操作.也有一些作者把这些指令汇总到一起开发成可视化的图形工具,其中的精品有类似 晨大大 的搞机助手这些.类似  今天这个帖子把一些常用 ...

  7. 蓝牙模块的TX连接51的RX,发送指令

    蓝牙模块的TX连接51的RX,蓝牙RX连接51的TX,hc-05我记得内嵌了蓝牙串口通讯协议的,只要握手成功,上位机可以通过串口直接发送指令

  8. Python编写的客户端给服务器发送指令执行相应的命令并返回结果

    闲来无事,用Python写个客户端与服务器端应答的程序,主要原理就是客户端通过tcp协议与服务器端通信,客户端给服务器端发送指令,服务器执行指令后把相应的结果返回给客户端,客户端打印结果,代码比较简单 ...

  9. CO2激光切割机雕刻机打标机写字机喷涂机巡边机控制软件

    CO2激光切割机雕刻机打标机写字机喷涂机巡边机控制软件,包含上位机和控制板,也可源码 视频展示只体现工作流程和加工效果,如果激光功率足够大最快速度能跑到每秒两米 支持文件格式说明: 控制版和上位机通信 ...

最新文章

  1. rust矿洞绳子怎么爬下_车底下绑一根绳子妙用在哪?看看老司机怎么说!
  2. 清华“法律数据科研平台”向校内师生开放试运行
  3. 大脑神经细胞也有老熟人
  4. 一个JSON字符串和文件处理的命令行神器jq,windows和linux都可用
  5. Elasticsearch的倒排索引是什么?
  6. 【clickhouse】clickhouse表引擎之CollapsingMergeTree
  7. ZedGraph属性(转)
  8. linux设备驱动之PCIE驱动开发
  9. SQL中JOIN和UNION区别及用法
  10. PowerBuilder9.0 安装包及注意事项
  11. html右键菜单背景图片,win10系统设置鼠标右键菜单背景图片的步骤
  12. 世界各国时区表以及与北京时差
  13. WS小世界网络的建立及基本特征的求法
  14. Assignment写作选题及诀窍怎么分析?
  15. EmEditor,如何开启显示制表符
  16. ssd硬盘 速度慢 linux,Linux 对SSD硬盘优化的方法
  17. C语言输出矩阵的主对角线和以及次对角线和
  18. rog主板php,强劲的扩展能力 - 华硕ROG Zenith Extreme主板评测:地表最强X399 - 超能网...
  19. 机器学习中的概念---输入空间、标记空间、样本空间、假设空间、版本空间
  20. 2019王道pdf(计算机网络、数据结构、操作系统、计算机组成原理)不要C币

热门文章

  1. 前端实现给文字添加动态背景
  2. CentOS命令行改色。
  3. VIO学习笔记(二)—— IMU 传感器
  4. Cathy Zhang 箭头函数与普通函数的区别
  5. 利用windows事件管理器定位程序闪退错误
  6. 【学习笔记+习题集】字符相关(输入输出流,字典树,AC自动机,后缀自动机)(4598字)(更新至2022.12.28)
  7. 非功能性需求之性能需求分析
  8. 计算机无法进入桌面怎么备份,系统崩溃无法启动如何从pe进入系统备份C盘和桌面重要文件...
  9. android 开发英语单词统计
  10. zblog asp php,ZBlog你选择PHP还是ASP?