#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) {
		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);

    T2DCompensationTable t2DCompensationTable;
    t2DCompensationTable.angle = 20;        //标定坐标系与机械坐标系的夹角，单位：度
    t2DCompensationTable.count[0] = 3;      //X方向的数据点数
    t2DCompensationTable.count[1] = 4;      //Y方向的数据点数
    t2DCompensationTable.posBegin[0] = 0;   //X方向的起始补偿位置
    t2DCompensationTable.posBegin[1] = 0;   //Y方向的起始补偿位置
    t2DCompensationTable.step[0] = 3000;    // 为X方向的补偿步长
    t2DCompensationTable.step[1] = 4000;    // 为Y方向的补偿步长
    TCompData tCompData;
    tCompData.xDirComp = 10;
    tCompData.yDirComp = 20;
    tCompData.zDirComp = 0;
    rtn = NMC_Set2DCompensationTable(devHandle, 0, &t2DCompensationTable, &tCompData);
    gc_rtn_error(rtn);
    T2DCompensation t2DCompensation;
    t2DCompensation.tableIndex = 0;     // 使用的目录表：取值0
    t2DCompensation.axisType[0] = 1;    //0表示规划，1表示编码器；axisType[0]对应X方向类型
    t2DCompensation.axisType[1] = 1;    //0表示规划，1表示编码器；axisType[1]对应Y方向类型
    t2DCompensation.axisIndex[0] = 0;   //axisIndex[0]表示X方向使用的轴号
    t2DCompensation.axisIndex[1] = 1;   //axisIndex[1]表示Y方向使用的轴号 
    t2DCompensation.axisIndex[2] = 2;   //axisIndex[2]表示Z方向使用的轴号 
    t2DCompensation.enable = 1;         // 启动(1)或停止(0)补偿
    rtn = NMC_Set2DCompensation(devHandle, &t2DCompensation);
    gc_rtn_error(rtn);
	return rtn;
}