#include "GCMotion.h"
#include "string.h"
#include <windows.h>
#include <math.h>
using namespace System;
using namespace System::Windows::Forms;

/*****************************************************************
* Function Name : 指令返回值
* Description   : 返回错误值 rtn
* Date			: 2022年8月3日
* Auther		: LWH
******************************************************************/
short gc_rtn_error(short rtn)
{
	if (rtn != RTN_CMD_SUCCESS) {
		MessageBox::Show(Convert::ToString(rtn));
		return rtn;		// 指令执行错误
	}
}

/*****************************************************************
* Function Name : 捕获功能例程
* Description   : 略
* Date			: 2022年8月3日
* Auther		: LWH
******************************************************************/
short gc_example(void)
{
	short rtn;					// 指令返回值
	short devNum;				// 设备序号，从0开始
	short axisNum;				// 轴号，从0开始
	HAND devHandle;				// 设备句柄
	HAND axisHandle;			// 轴句柄
	HAND crdHandle;				// 坐标系句柄
	rtn = NMC_DevOpen(devNum, &devHandle);				//打开控制器
	gc_rtn_error(rtn);
	rtn = NMC_MtOpen(devHandle, axisNum, &axisHandle);	//打开轴,并获得轴句柄
	gc_rtn_error(rtn);
	rtn = NMC_MtSetSvOn(axisHandle);					//打开轴使能(根据实际情况使用)
	gc_rtn_error(rtn);
	//for (short i = 0; i < 2; i++) {
	//	rtn = NMC_MtOpen(devHandle, i, &axisHandle[i]);	//打开轴,并获得轴句柄
	//	gc_rtn_error(rtn);
	//	rtn = NMC_MtSetSvOn(axisHandle[i]);					//打开轴使能(根据实际情况使用)
	//	gc_rtn_error(rtn);
	//}
	// 
	//设置捕获参数,DI0为捕获源，下降沿触发
	rtn = NMC_MtSetCaptSns(axisHandle, CAPT_MODE_IO, CAPT_IO_SRC_DI0, 0);
	gc_rtn_error(rtn);
	
	rtn = NMC_MtSetCapt(axisHandle);						//启动捕获
	gc_rtn_error(rtn);
	/**************  此处省略轴的运动过程  **********************/
	short sts;
	long pos;
	while (1)
	{
		rtn = NMC_MtGetSts(axisHandle, &sts);
		gc_rtn_error(rtn);
		if ((sts & BIT_AXIS_CAPTSET) == BIT_AXIS_CAPTSET)	//已经捕获到
		{
			rtn = NMC_MtGetCaptPos(axisHandle, &pos);		//读取捕获位置
			gc_rtn_error(rtn);
			break;
		}
	}

	return 0;
}
