#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);
	
    short source;   // 0:内部脉冲计数    1:外部编码器输入
    short dir;      // 0:AB相90度差    1:脉冲+方向   2:正脉冲+负脉冲
                    // 3:AB相90度差(负逻辑) 4:脉冲+方向(负逻辑) 5:正脉冲+负脉冲(负逻辑)
    short encMode;  // 编码器模式
    switch (source)
    {
    case 0:         
        switch (dir)
        {
        case 0:
            encMode = 256;  break;
        case 1:
            encMode = 1280; break;
        case 2:
            encMode = 2304; break;
        case 3:
            encMode = 4352; break;
        case 4:
            encMode = 17664; break;
        case 5:
            encMode = 6400; break;
        default:break;
        } break;
    case 1: 
        switch (dir)
        {
        case 0:
            encMode = 0;      break;
        case 1:
            encMode = 1024; break;
        case 2:
            encMode = 2048; break;
        case 3:
            encMode = 4096; break;
        case 4:
            encMode = 17408; break;
        case 5:
            encMode = 6144; break;
        default: break;
        } break;
    default:break;
    }
    rtn = NMC_SetEncMode(devHandle, axisNum, encMode);  // 设置编码器模式
    gc_rtn_error(rtn);
	return rtn;
}