Pmac联合QT开发入门指南

Pmac联合QT开发入门指南

  • 1.Pcommserver介绍
  • 2. 获取PcommServer.exe
  • 3. 通过QT的dumpcp工具生成COM组件
  • 4. QTcreator中操作
    • 4.1 与PMAC通讯
    • 4.2 Pmac程序下载
    • 4.3 让pmac执行程序
    • 4.4 读取变量
  • 5.注意事项

1.Pcommserver介绍

  早期的PMAC软件,PMAC Executive win32 PRO所采用的驱动与通信接口为Pcomm32.dll。随后的第2版,PMAC Executive PRO2 suite(2005年发布)采用的通信方式为PCommServer.exe。同理,我们自己开发的上位机程序可以使用Pcomm32.dll也可以PCommServer.exe。其中,PCommServer.exe并不是普通的应用程序,其是一种exe形式的COM组件,此组件为其他应用程序提供API与服务。
  根据官方说明,Pcomm32.dll现在已经是obsolete(废弃的),因此,建议新应用程序开发采用PCommServer.exe。而且,我师兄们的使用情况,似乎将Pcomm32.dll用于较新版本的PMAC时很容易出问题。
  PcommServer User Manual手册中对其安装、在不同编程环境中的使用(如.net、MFC及Borland C++)及其所包含的函数接口进行了说明。可发现,其所提供的接口与Pcomm32.dll基本相同。

2. 获取PcommServer.exe

  安装PMAC调试软件(我这里安装的是Pwin32pro2,我将安装包也发给你吧),在C:\windows\system32或者C:\Windows\SysWOW64中可以找到PcommServer.exe文件,记住这个路径。其中还有一个dll文件、lib文件。此两个文件应该可以以动态链接库的方式来进行PMAC的通信。
在这里插入图片描述

3. 通过QT的dumpcp工具生成COM组件

  在你QT目录中找到dumpcpp.exe。我这里用Everything软件搜索,因为我安装了3个QT编译环境,所以有3个。你选择你需要的编译环境即可。
  Msvc和mingw都是很好用的编译工具,但是他们兼容的并不好。当你的项目使用MinGW编译的使用,想要用一个MSVC编译生成的库时就会有问题。使用MinGW编译项目的时候,所使用的Lib也要是MinGW编译的。如果你只是开发Window平台的软件时,建议最好用Qt+MSVC组合,这样可以使用大量的第三方lib,还有很多的构建指令,毕竟window上MSVC才是王道。
  不过这里以mingw73_32为例吧。
Pmac联合QT开发入门指南_第1张图片
按下WIN+R,输入cmd,打开windows命令行。
Pmac联合QT开发入门指南_第2张图片
在命令行窗口中输入dumpcpp路径以及pcommserver.exe的路径,中间以空格隔开,回车运行。
Pmac联合QT开发入门指南_第3张图片

然后在dumpcpp路径下就能看到pcommserverlib.h和pcommserverlib.cpp这两个文件。
Pmac联合QT开发入门指南_第4张图片

4. QTcreator中操作

  将这两个文件pcommserverlib.h和pcommserverlib.cpp放在QT工程路径下,然后添加到工程中。
  在QT应用程序的.pro中添加 “QT += axcontainer”
Pmac联合QT开发入门指南_第5张图片
  打开pcommserverlib.h,将9915-9919 ,11720-11724行注释掉。(这个upload函数是用来从PMAC中向上位机传输程序的,但不知道为什么使用dumpcpp生成.h、.cpp文件后,该函数报错。注释掉就可以了,实际工程中应该用不到该功能,如果需要从PMAC向上位机上传程序,可以通过Pwin32调试软件来进行。)
Pmac联合QT开发入门指南_第6张图片
Pmac联合QT开发入门指南_第7张图片
在主窗口中的.cpp文件中添加“using namespace PCOMMSERVERLib;”
Pmac联合QT开发入门指南_第8张图片

4.1 与PMAC通讯

在QT主窗口.h文件的类中添加以下内容

	PCOMMSERVERLib::PmacDevice* Pmac;//定义PMAC指针
	QString pAnswer ="default";
	int hWindow = 0;//父窗口
	int pdwDevice;//设备号
	int dwDevice;
	bool pbSuccess = false;//是否成功标志

Pmac联合QT开发入门指南_第9张图片
在QT主窗口.cpp文件中添加以下内容

Pmac = new PmacDevice;//创建PMAC
	pdwDevice = 0;//设备号
	Pmac->SelectDevice(hWindow, pdwDevice, pbSuccess);//选择PMAC设备
	qDebug() << "Select:" << pbSuccess;
	dwDevice = 0;
	Pmac->Open(dwDevice, pbSuccess);
//打开PMAC,通讯成功 pbSuccess返回true
	qDebug() << "open:" << pbSuccess;

Pmac联合QT开发入门指南_第10张图片
运行程序出现GUI界面,点击链接PMAC,出现以下窗口说明通讯成功。
Pmac联合QT开发入门指南_第11张图片
Pmac联合QT开发入门指南_第12张图片

4.2 Pmac程序下载

PmacfilePath = "E:\\MyPmacSpace\\MotorTest\\MotorTest.pmc";
// PmacfilePath是需要下载到pmac文件路径,你自己根据需要修改
Pmac->Download(dwDevice, PmacfilePath,true,true,true,true,pbDownLoadSuccess);
// dwDevice是需要下载程序的pmac设备号,与通讯时设备号相同
// PmacfilePath是文件路径
//后边4个true为时候生成.LOG .TBL .56K .MAP文件标志,true就是生成
qDebug() << "pbDownLoadSuccess:" << pbDownLoadSuccess;

4.3 让pmac执行程序

Pmac->GetResponse(dwDevice, "enable plc 4", pAnswer);
// dwDevice还是设备号
//"enable plc 4"就是执行第四个PLC程序,与pwin32控制台中输入程序相同,不过该参数必须是字符串。如果要执行运动程序就改成"&1b4r",即1号轴第四个运动程序开始。
// pAnswer发送成功标志

4.4 读取变量

Pmac->GetResponse(dwDevice, "P15", pAnswer);
//依然是使用GetResponse这个函数,如果想要读取变量P15,就将第二个参数改为字符串"P15";想读取M105就将第二个参数改为" M105";想读取Q3000就将第二个参数改为" Q3000",总之想读取啥就写啥。
// pAnswer就是读取到的值

如果你想实时读取某个值,就用一个定时器,然后每固定时间运行Pmac->GetResponse函数一次。
如果想要读取一系列值比如 (P1到P5的值,可以输入
Pmac->GetResponse(dwDevice, “P1P2P3P4P5”, pAnswer);
然后按顺序解析即可

5.注意事项

  1. QT软件或者之后生成的exe文件,一定要右键以管理员身份运行,否则会出现以下情况,找不到PMAC!!!!!
    Pmac联合QT开发入门指南_第13张图片
  2. 使用Pmac->Download下载程序时会需要一定时间,这期间不能读取变量或者对PMAC进行其他操作。
  3. 在QT的析构函数中一定要写山“Pmac->Close(dwDevice);”这句话,否则退出程序后,后台pcommserve不会结束进程。
  4. QT编写的上位机可以与Pwin32调试软件同时对PMAC进行操作,这可以算一个小技巧。你在操作QT编写的上位机时,可以从Pwin32中观察各种变量等等。

你可能感兴趣的:(教程,qt)