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

通常我们说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");

//发送指令和接受往回发的指令填充到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);

	//发送指令和接受往回发的指令填充到szRes
	PmacGetResponse(0,szRes,MAX_PATH,szCmd);

	//显示接受指令
	SetDlgItemText(IDE_RECEIVE, szRes);

	//关闭PMAC卡连接
	ClosePmacDevice(0);

	//FreeLibrary
	CloseRuntimeLink();
}

//正方向移动
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);
	
	//发送指令和接受往回发的指令填充到szRes
	PmacGetResponse(0,szRes,MAX_PATH,szCmd);
	
	//显示接受指令
	SetDlgItemText(IDE_RECEIVE, szRes);
	
	//关闭PMAC卡连接
	ClosePmacDevice(0);
	
	//FreeLibrary
	CloseRuntimeLink();
}

//负方向移动
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);
	
	//发送指令和接受往回发的指令填充到szRes
	PmacGetResponse(0,szRes,MAX_PATH,szCmd);
	
	//显示接受指令
	SetDlgItemText(IDE_RECEIVE, szRes);
	
	//关闭PMAC卡连接
	ClosePmacDevice(0);
	
	//FreeLibrary
	CloseRuntimeLink();
}

//停止
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);
	
	//发送指令和接受往回发的指令填充到szRes
	PmacGetResponse(0,szRes,MAX_PATH,szCmd);
	
	//显示接受指令
	SetDlgItemText(IDE_RECEIVE, szRes);
	
	//关闭PMAC卡连接
	ClosePmacDevice(0);
	
	//FreeLibrary
	CloseRuntimeLink();
}

//回零
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);
	
	//发送指令和接受往回发的指令填充到szRes
	PmacGetResponse(0,szRes,MAX_PATH,szCmd);
	
	//显示接受指令
	SetDlgItemText(IDE_RECEIVE, szRes);

	Sleep(1000);
	
	
	/************************************************************************/
	/* 调用回零程序,注意这里自己的回零程序号                                */
	/************************************************************************/
	lstrcpy(szCmd, "&1b20r");
	
	//显示输入的待发送指令字符串
	SetDlgItemText(IDE_COMMAND, szCmd);
	
	//发送指令和接受往回发的指令填充到szRes
	PmacGetResponse(0,szRes,MAX_PATH,szCmd);
	
	//显示接受指令
	SetDlgItemText(IDE_RECEIVE, szRes);
	
	//关闭PMAC卡连接
	ClosePmacDevice(0);
	
	//FreeLibrary
	CloseRuntimeLink();
}

//运行程序
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);
	
	//发送指令和接受往回发的指令填充到szRes
	PmacGetResponse(0,szRes,MAX_PATH,szCmd);
	
	//显示接受指令
	SetDlgItemText(IDE_RECEIVE, szRes);
	
	//关闭PMAC卡连接
	ClosePmacDevice(0);
	
	//FreeLibrary
	CloseRuntimeLink();
}

//停止程序
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);
	
	//发送指令和接受往回发的指令填充到szRes
	PmacGetResponse(0,szRes,MAX_PATH,szCmd);
	
	//显示接受指令
	SetDlgItemText(IDE_RECEIVE, szRes);
	
	//关闭PMAC卡连接
	ClosePmacDevice(0);
	
	//FreeLibrary
	CloseRuntimeLink();
}


程序演示代码下载链接

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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。