#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[2];			// 轴句柄
	HAND crdHandle;				// 坐标系句柄
	rtn = NMC_DevOpen(devNum, &devHandle);				//打开控制器
	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);
	}
	//启动主轴JOG运动,速度脉冲/ms,加、减速度为脉冲/ms^2
	rtn = NMC_MtMoveJog(axisHandle[0], 1, 1, 50, 0, 1);
	gc_rtn_error(rtn);
	rtn = NMC_MtSetPrfMode(axisHandle[1], MT_FOLLOW_PRF_MODE);	//设置轴二的运动模式为FOllow模式
	gc_rtn_error(rtn);
	rtn = NMC_MtFollowClear(axisHandle[1], 0);					//清空从轴FIFO数据
	gc_rtn_error(rtn);
	//设置跟随主轴的规划位置
	rtn = NMC_MtFollowSetMaster(axisHandle[1], 0, PROFILE_FOLLOW_MASTER_AXIS_PRF);
	gc_rtn_error(rtn);
	double masterpos = 20000;
	double slavepos = 10000;
	rtn = NMC_MtFollowPushData(axisHandle[1], masterpos, slavepos, 0, 0);		//设置跟随数据
	gc_rtn_error(rtn);
	masterpos += 20000;
	slavepos += 20000;
	rtn = NMC_MtFollowPushData(axisHandle[1], masterpos, slavepos, 0, 0);
	gc_rtn_error(rtn);
	masterpos += 20000;
	slavepos += 10000;
	rtn = NMC_MtFollowPushData(axisHandle[1], masterpos, slavepos, 0, 0);
	gc_rtn_error(rtn);
	rtn = NMC_MtFollowSetLoopCount(axisHandle[1], 0);					//设置为无限循环
	gc_rtn_error(rtn);
	rtn = NMC_MtFollowSetEvent(axisHandle[1], 2, 1, 50000);			//设置跟随条件,主轴正向运动到位置时启动
	gc_rtn_error(rtn);
	rtn = NMC_MtFollowStart(axisHandle[1], 0, 0);				//启动Follow运动
	gc_rtn_error(rtn);
	//跟随运动过程中可调用NMC_MtFollowGetLoopCount查询循环执行次数
	return 0;
}
