#include "GCMotion.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) {
		return rtn;		// 指令执行错误
		
	}
}

/*****************************************************************
* Function Name : 单轴初始化参数配置
* Description   : 配置是否成功，可以通过高川软件GCS工具查看
* Date			: 2022年8月3日
* Auther		: LWH
******************************************************************/
short gc_example(void)
{	
	short rtn;					// 指令返回值
	short devNum;				// 设备序号，从0开始
	short axisNum;				// 轴号，从0开始
	HAND devHandle;				// 设备句柄
	HAND axisHandle;			// 轴句柄
	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);

	rtn = NMC_MtSetPosErrLmt(axisHandle, 30000);	// 设置轴位置的允许误差
	gc_rtn_error(rtn);

	rtn = NMC_MtLmtSns(axisHandle, 0, 0);	// 限位开关触发电平设置为低电平
	gc_rtn_error(rtn);

	rtn = NMC_MtLmtOnOff(axisHandle, 1, 1);	// 启动限位开关检查
	gc_rtn_error(rtn);

	rtn = NMC_MtAlarmSns(axisHandle, 1);	// 设置伺服报警开关电平为高电平
	gc_rtn_error(rtn);

	rtn = NMC_MtAlarmOnOff(axisHandle, 0);	// 伺服报警检查开启
	gc_rtn_error(rtn);

	rtn = NMC_MtSwLmtValue(axisHandle, 30000, -30000);	// 设置软件限位数值
	gc_rtn_error(rtn);

	rtn = NMC_MtSwLmtOnOff(axisHandle, 1);	// 软件限位检查开启
	gc_rtn_error(rtn);

	TSafePara safePrm;
	safePrm.maxAcc = 50;
	safePrm.maxVel = 100;
	safePrm.estpDec = 50;
	rtn = NMC_MtSetSafePara(axisHandle, &safePrm);// 设置轴安全参数
	gc_rtn_error(rtn);

	rtn = NMC_MtSetStepMode(axisHandle, 0, 0);// 设置脉冲输出模式为脉冲+方向
	gc_rtn_error(rtn);

	return rtn;
}