/*******************************************************************************************************
**--------------文件信息--------------------------------------------------------------------------------
**文件名: MC_dll.h
**创建人: 
**时间: 
**描述: 动态链接库头文件

**------------修订历史记录----------------------------------------------------------------------------
** 修改人: 
** 版  本: 
** 日　期: 
** 描　述: 
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#pragma once
#ifndef _HPMC_DLL_H
#define _HPMC_DLL_H

#pragma once
typedef unsigned long       DWORD;
typedef int                 BOOL;
typedef unsigned char       BYTE;
typedef unsigned short      WORD;
typedef float               FLOAT;

typedef unsigned char  uint8;                   /* defined for unsigned 8-bits integer variable 	无符号8位整型变量  */
typedef signed   char  int8;                    /* defined for signed 8-bits integer variable		有符号8位整型变量  */
typedef unsigned short uint16;                  /* defined for unsigned 16-bits integer variable 	无符号16位整型变量 */
typedef signed   short int16;                   /* defined for signed 16-bits integer variable 		有符号16位整型变量 */
typedef unsigned int   uint32;                  /* defined for unsigned 32-bits integer variable 	无符号32位整型变量 */
typedef signed   int   int32;                   /* defined for signed 32-bits integer variable 		有符号32位整型变量 */
typedef unsigned long long   uint64;    
typedef signed   long long   int64; 
typedef unsigned char       byte;

#define __MC_EXPORTS

#ifdef __MC_EXPORTS
#define MC_API __declspec(dllexport)
#else
#define MC_API __declspec(dllimport)
#endif

//控制器通讯接口
typedef enum 
{
	CONNECTION_ETH = 1,//网络通讯
	CONNECTION_PCI = 2,//PCI通讯
}enum_Controller_Connect_Type;

//IO控制电平
typedef enum  
{
	Low_Pin = 0, //低电平
	High_Pin = 1 //高电平
}enum_IO_Controller_Pin_Type;

//坐标位置源配置
typedef enum
{
	Cmd_Pos_Src = 0,//指令位置源
	Encode_Pos_Src = 1,  //编码器位置源
}enum_Pos_Src;


//比较输出模式
typedef enum
{
	Less_Compare_Value = 0, //小于比较点模式
	Beyond_Compare_Value = 1,//大于比较点模式
	Linear_Compare_Value = 2,//等增量比较模式
	FIFO_Compare_Value  = 3		 //FIFO点比较输出模式
}enum_Compare_Mode;

typedef enum
{
	SERVON_INDEX	= 0,//伺服使能
	ERC_INDEX		= 1//伺服报警清除

} enum_AXIS_OUT_TYPE_INDEX;

typedef enum
{
	NEL_INDEX		= 0,//负限位
	PEL_INDEX		= 1,//正限位
	ORG_INDEX		= 2,//原点
	INP_INDEX		= 3,//伺服到位
	ALM_INDEX		= 5,//伺服报警
	RDY_INDEX		= 6,//伺服准备
	NORMAL_IO_TYPE	= 9,//通用IO信号
} enum_AXIS_IN_TYPE_INDEX;

 typedef enum
 {
	 PWM_Type_5V = 0, //5v PWM 
	 PWM_Type_24V = 1 //24 vPWM
 }enum_PWM_Type;


 typedef enum
{
	Line_Box_Running_No_Connect = 0,//接线盒没有连接
	Line_Box_Running_PowerOn = 1,//接线盒上电	
	Line_Box_Running_Init = 2,//接线盒连接初始化阶段
	Line_Box_Running_OK = 3,//接线盒连接正常运行阶段
	Line_Box_Running_Error = 4//接线盒连接运行错误阶段
}enum_Line_Box_Phase;

typedef enum
{
   Compare_1D = 1, //一维软件比较
   Compare_2D = 2 //二维软件比较
}enum_Compare_Dim;


/**************************运动类型宏定义****************************************/
//#define  Function_SignalAxisMotionCmd //单轴运动控制操作，包括：定长运动指令，定速运动，及回零运动 
#ifdef __cplusplus
extern "C" {
#endif

	/**************************连接控制器操作****************************************/

//#ifdef Function_ConnectInit 
		/*************************************************************
		* 函数名称: MC_Open
		说明：通过连接操作函数
		输入：
			WORD connect_no 连接的ID号：连接模式为CONNECTION_ETH情况下的设置ID号
										连接模式为CONNECTION_PCI情况下为0
			WORD type：连接类型  
					CONNECTION_ETH = 1,//网络通讯
					CONNECTION_PCI = 2,//PCI通讯
			char*pconnectstring：连接类型为ethernet时通讯的IP地址: "192.168.1.2"，其他类型为空值即可
			WORD* PcieNum ; 返回PCIe通讯控制器数
			WORD* PcieIndex;返回PCIe通讯控制器connect_no
		输出：
		返回值：错误码
		*************************************************************/	
		MC_API DWORD __stdcall MC_Open(WORD connect_no,WORD type, char *pconnectstring,
											WORD* PcieNum ,WORD* PcieIndex);
		/************************************************
		* 函数名称: MC_Close
		* 函数功能:关闭控制器
		* 输入参数: WORD connect_no	连接号
		* 返回值：错误码
		************************************************/
		MC_API DWORD __stdcall MC_Close(WORD connect_no);
		/*******************************************************************************
		* 函数名称: MC_ColdReset
		* 函数功能: 硬件复位，控制器所有信息复位
		* 输入参数: WORD connect_no	连接号	
		* 返 回 值:错误码 
		*******************************************************************************/
		MC_API DWORD __stdcall MC_ColdReset(WORD connect_no);	
		/*******************************************************************************
		* 函数名称: MC_WarmReset
		* 函数功能: 坐标系等信息复位

		* 输入参数: WORD connect_no	连接号	
		* 返 回 值:错误码 
		*******************************************************************************/
		MC_API DWORD __stdcall MC_WarmReset(WORD connect_no);		

		/*******************************************************************************
		* 函数名称: MC_GetConnectLineBoxState
		* 函数功能: 获取接线盒连接状态
		* 输入参数: WORD connect_no	连接号	
		* 输出参数：WORD* conState	接线盒连接状态
						0,//接线盒没有连接
						1,//接线盒上电 
						2,//接线盒连接初始化阶段
						3,//接线盒连接正常运行阶段
						4//接线盒连接运行错误阶段
		* 返 回 值:错误码 
		*******************************************************************************/
		MC_API DWORD __stdcall MC_GetConnectLineBoxState(WORD connect_no, WORD* conState);

//#endif

/*********************************控制器信息******************************************/
	/*************************************************************
	* 函数名称: MC_GetTotalAxesAndIONum
	说明：获取，轴及IO口信息
	输入：connect_no	连接号
	输出：total_axes 轴数
	liner_num 插补器数量
	total_in_num 通用输入口数量
	total_out_num 通用输出口数量
	total_pwm_num PWM通道数量
	返回值：错误码
	*************************************************************/	
	MC_API DWORD __stdcall MC_GetTotalAxesAndIONum(WORD connect_no,WORD* total_axes, WORD* liner_num ,WORD* total_in_num,WORD* total_out_num, WORD* total_pwm_num);

	/*************************************************************
	* 函数名称: MC_GetTotalAdAndDaNum
	说明：获取，模拟量信息
	输入：connect_no	连接号
	输出：total_ad_num AD通道数量
	total_da_num DA通道数量
	返回值：错误码
	*************************************************************/	
	MC_API DWORD __stdcall MC_GetTotalAdAndDaNum(WORD connect_no,WORD* total_ad_num,WORD* total_da_num);

	/*************************************************************
	* 函数名称: MC_GetControllerVersion
	说明：获取控制系统版本信息
	输入：connect_no	连接号
	byte* product_type(64bytes)  ： 产品类型 例如"PMC200C"
	byte* soft_version(64bytes)  ：例如pmc_200C_v1.0_soft	软件版本1.0，PCI运动控制，12轴 点位+高速IO版本 					
						pmc => pci motion control
						1 => 1:纯点位版本；2:点位+高速IO版本；（中间空4个）		 6:轨迹版本；
						0 => 0:表示脉冲；1表示ehthercat；2表示can；。。。。
						0c => 0c:表示轴数；
						//
						emc => ethernet motion control
	DWORD* firmware_version	:例如：0x01000100  硬件及fpga代码通用版本，第一版本
						31~24bit：硬件通用版本：31~28位为大版本（当前为0），27~24为子版本（第一个版本为1）
						23~16bit：定制版本：
						例如：0x0100  表示通用版本，第一版
						//fpga 版本
						15~8bit：fpga代码版本：15~12位为大版本（当前为0），11~8位为子版本（第一个版本为1）
						7~0bit：定制版本：
						例如：0x0100  表示通用版本，第一版

	DWORD* dll_version ：例如：0x10221110
						1表示1.0版本，0表示定制号，通用版本，日期20221110

	输出：
	返回值：错误码
	*************************************************************/	
	MC_API DWORD __stdcall MC_GetControllerVersion(WORD connect_no,char* product_type,char* soft_version,DWORD* firmware_version,DWORD* dll_version);
	/*************************************************************
	* 函数名称: MC_GetProductID
	说明：获取控制产品型号
	输入：connect_no	连接号
	输出：product_id	产品ID
	返回值：错误码
	*************************************************************/	
	MC_API DWORD __stdcall MC_GetProductID(WORD connect_no,DWORD* product_id);
	/*******************************************************************************
	* 函数名称: MC_GetCapComNum
	* 函数功能: 获取捕获及比较数
	* 输入参数: connect_no	连接号		
	 WORD* total_hs_cap_num		硬件捕获通道数量	 
	 WORD* total_hs_com_num		硬件比较通道数量	 
	 WORD* total_soft_cap_num	软件捕获通道数量	 
	 WORD* total_soft_com_num	软件比较通道数量
	* 返 回 值:错误码 
	*******************************************************************************/
	MC_API DWORD __stdcall MC_GetCapComNum(WORD connect_no,WORD* total_hs_cap_num,WORD* total_hs_com_num,
													WORD* total_soft_cap_num,WORD* total_soft_com_num,
													WORD* total_2d_hs_com_num,WORD* total_2d_soft_com_num);
	/*******************************************************************************
	* 函数名称: MC_GetHandWheelEncNum
	* 函数功能: 获取手轮及编码器数

	* 输入参数: connect_no	连接号		

	 WORD* total_handlewheel_num	手轮通道数量

	 WORD* total_enc_num	辅助编码器通道数量
	* 返 回 值:错误码 
	*******************************************************************************/
	MC_API DWORD __stdcall MC_GetHandWheelEncNum(WORD connect_no,WORD* total_handlewheel_num,WORD* total_enc_num);

//#ifdef Function_SignalAxisMotionCmd //单轴运动控制操作，包括：定长运动指令，定速运动，及回零运动 

	/*************************************************************
	* 函数名称: MC_SetAxisVelSmooth
	说明：速度规划速度平滑
	输入：connect_no：连接号
	axis：轴号
	ifEnable：0表示禁止，1表示使能
	smTime :平滑时间，单位为s，最小值为0.001s
	输出：
	返回值：错误码
	*************************************************************/
	MC_API DWORD __stdcall MC_SetAxisVelSmooth(WORD connect_no, WORD axis, WORD ifEnable, double smTime);
	MC_API DWORD __stdcall MC_GetAxisVelSmooth(WORD connect_no, WORD axis, WORD* ifEnable, double* smTime);

	/*************************************************************
	* 函数名称: MC_SetAxisMotionPrm
	说明：运动按时间参数设置
	输入：connect_no	连接号
		start_vel: 启动速度 
		max_vel：最大允许允许速度 最大值为10M；最小值大于0
		stop_vel：停止速度
		t_acc：加速时间  最大值为100s，最小值为0
		t_dec：减速时间  最大值为100s，最小值为0
		s_para：s型曲线参数配置 最大值1，最小值为0；如果设置该值为零时，为T形速度曲线，不为零时，表示S型曲线
		maxAcc: 最大加减速限制，设置值小于运动配置的加减速度值时，最大加减速度设置为其运动加减速度。
	输出：
	返回值：错误码
	*************************************************************/	 
	MC_API DWORD __stdcall MC_SetAxisMotionPrm(WORD connect_no,WORD axis,double start_vel,double max_vel,double stop_vel,double t_acc,double t_dec,double s_ratio,double maxAcc);
	MC_API DWORD __stdcall MC_GetAxisMotionPrm(WORD connect_no,WORD axis,double* start_vel,double* max_vel,double* stop_vel,double* t_acc,double* t_dec,double *s_ratio,double* maxAcc);
	/*************************************************************
	* 函数名称: MC_SetAxisMotionPrmAcc
	说明：运动按加速度参数设置
	输入：connect_no	连接号
	start_vel: 启动速度 
	max_vel：最大允许允许速度 最大值为10M；最小值大于0
	stop_vel：停止速度
	acc：加速度  最大值为2的32次方，最小值为0
	dec：减速度  最大值为2的32次方，最小值为0
	s_para：s型曲线参数配置 最大值1，最小值为0；如果设置该值为零时，为T形速度曲线，不为零时，表示S型曲线
	maxAcc: 最大加减速限制，设置值小于运动配置的加减速度值时，最大加减速度设置为其运动加减速度。
	输出：
	返回值：错误码
	*************************************************************/	
	MC_API DWORD __stdcall MC_SetAxisMotionPrmAcc(WORD connect_no,WORD axis,double start_vel,double max_vel,double stop_vel,double acc,double dec,double s_ratio,double maxAcc);
	MC_API DWORD __stdcall MC_GetAxisMotionPrmAcc(WORD connect_no,WORD axis,double* start_vel,double* max_vel,double* stop_vel,double* acc,double* dec,double *s_ratio,double* maxAcc);
	/*************************************************************
	* 函数名称: MC_MovePos
	说明：单轴定长运动指令
	输入：connect_no	连接号
	axis	轴号
	pos_mode	0 表示 相对运动模式； 1表示 绝对运动模式
	pos	目标位置
	输出：
	返回值：错误码
	*************************************************************/	
	MC_API DWORD __stdcall MC_MovePos(WORD connect_no,WORD axis,WORD pos_mode,double pos);

	
	/*******************************************************************************
	* 函数名称: MC_MoveAbsolute
	* 函数功能: 单轴绝对/相对运动单条指令
	* 输入参数: connect_no	连接号 	
	 WORD axis		轴号	
	 double pos 	目标位置	
	 double start_V 	启动速度	
	 double stop_V		停止速度	
	 double Vel 	最大速度	
	 double Acc 	加速度	
	 double Dec 	减速度	
	 double S_Ratio 	s段比例	
	 double maxAcc		最大加速度
	* 返 回 值:错误码 
	*******************************************************************************/
	MC_API DWORD __stdcall MC_MoveAbsolute(WORD connect_no,WORD axis,double pos,double start_V,double stop_V, double Vel,double Acc,double Dec, double S_Ratio, double maxAcc);
	
	MC_API DWORD __stdcall MC_MoveRelative(WORD connect_no,WORD axis,double pos,double start_V,double stop_V, double Vel,double Acc,double Dec, double S_Ratio, double maxAcc);
	/*******************************************************************************
	* 函数名称: MC_MoveMultiPos
	* 函数功能: 启动多段运动，目前支持两段；第一段运动完成以后，立马执行第二段，
				两段的衔接速度不会降到零。
	* 输入参数: connect_no	连接号		
	 WORD axis		运动轴
	 WORD pos_mode		只支持绝对运动，参数暂时保留
	 double first_pos		第一段的目标位置
	 double next_max_v		第二段最大速度
	 double next_stop_v		第二段停止速度；（停止速度自动调整到不大于最大速度）
	 double next_acc_t		第二段加速时间；
	 double next_dec_t		第二段减速时间；
	 double next_pos		第二段目标位置；暂时不支持反向。
	* 返 回 值:错误码 
	*******************************************************************************/
	MC_API DWORD __stdcall MC_MoveMultiPos(WORD connect_no,WORD axis,WORD pos_mode,double first_pos,double next_max_v,double next_stop_v,double next_acc_t,double next_dec_t,double next_pos);

	/*************************************************************
	* 函数名称: MC_MovePosMultiAxes
	说明：多轴定长运动指令
	输入：connect_no	连接号
	axis_num	运动轴数量
	axis	轴号列表
	pos_mode	运动模式列表 0 表示 相对运动模式； 1表示 绝对运动模式
	pos		运动距离列表
	输出：
	返回值：错误码
	*************************************************************/
	MC_API DWORD __stdcall MC_MovePosMultiAxes(WORD connect_no, WORD axis_num,WORD* axis,WORD* pos_mode,double* pos);

	/*******************************************************************************
	* 函数名称: MC_MoveVelocity
	* 函数功能: 单轴速度运动运行单条指令
	* 输入参数: connect_no	连接号 	
	 WORD axis		轴号	
	 double start_V 	启动速度	
	 double stop_V		停止速度	
	 double Vel 	最大速度，如果Vel>0为正向，vel<0为负向，为0参数无效	
	 double Acc 	加速度	
	 double Dec 	减速度	
	 double S_Ratio 	s段规划比例	
	 double maxAcc		最大允许加速度
	* 返 回 值:错误码 
	*******************************************************************************/
	MC_API DWORD __stdcall MC_MoveVelocity(WORD connect_no,WORD axis,double start_V,double stop_V, double Vel,double Acc,double Dec, double S_Ratio, double maxAcc);

	/*************************************************************
	* 函数名称: MC_MoveVel
	说明：定速运动指令
	输入：connect_no	连接号
	axis	轴号
	vel	 速度，vel < 0 表示 负向运动； vel > 0表示 正向；
	输出：
	返回值：错误码
	*************************************************************/	
	MC_API DWORD __stdcall MC_MoveVel(WORD connect_no,WORD axis, double vel);

	/*************************************************************
	* 函数名称: MC_MoveVelMultiAxes
	说明：多轴定长运动指令
	输入：connect_no	连接号
	axis_num	运动轴数量
	axis	运动轴号列表
	vel		轴运动速度列表(符号代表运动方向)
	输出：
	返回值：错误码
	*************************************************************/
	MC_API DWORD __stdcall MC_MoveVelMultiAxes(WORD connect_no, WORD axis_num,WORD* axis,double* vel);
	/*************************************************************
	* 函数名称: MC_MoveUpdateVel
	说明：单轴运动改变速度
	输入：connect_no	连接号
	axis	轴号
	vel		目标速度
	   		当前为move velocity状态下 vel 中，vel > 0 为正向，< 0 为负向
	   		当前为move position 状态下 vel没有方向;
	   		轴未运动，该指令无效
	输出：
	返回值：错误码
	*************************************************************/	
	MC_API DWORD __stdcall MC_MoveUpdateVel(WORD connect_no, WORD axis, double vel);
	/*************************************************************
	* 函数名称: MC_MoveUpateVelRatio
	说明：单轴变倍率
	输入：connect_no	连接号
	axis	轴号
	ratio 	取值范围[0,];0表示暂停状态
			如果当前未运动，该指令无效
	输出：
	返回值：错误码
	*************************************************************/	
	MC_API DWORD __stdcall MC_MoveUpateVelRatio(WORD connect_no,WORD axis, double ratio);

	/*************************************************************
	* 函数名称: MC_Home
	说明：启动回零运动，回零的原点开关参数设置通过 MC_SetAxisIo配置
	输入：
		connect_no	连接号
		axis	轴号
	    pos_object: 0表示指令位置，1表示编码器,主要针对锁存回零模式
		home_mode：回零模式设置
		home_dir：回零方向，-1表示负方向，1表示正方向
		home_logic: 回零逻辑电平0表示底有效；1表示高有效；
		ez_count: 如果回零模式为ez回零，回零的ez计数count数；最小值为1；
		pos_offset: 保留参数
		offset_mode：保留参数 	
	输出：
	返回值：错误码
	*************************************************************/		
	MC_API DWORD __stdcall MC_Home(WORD connect_no,WORD axis,WORD pos_object,WORD home_mode, int home_dir,WORD home_logic,WORD ez_count,WORD offset_mode,double pos_offset);
	MC_API DWORD __stdcall MC_GetHomePrm(WORD connect_no,WORD axis,WORD* pos_object,WORD* home_mode, int* home_dir,WORD* home_logic,WORD* ez_count,WORD* offset_mode,double* pos_offset);
	/*************************************************************
	* 函数名称: MC_GetHomeResult
	说明：回零结果函数
	输入：connect_no	连接号
	axis	轴号
	输出：complete_state	回零结果
			0,				//回零未完成
			1,				//回零完成，找到原点位置
			2,				//回零过程报错，没有原点信号
			3,				//回零过程发现设备有两个原点信号
			4, 				//回零过程没有发现EZ信号
			5,				//回零配置的方向错误
			6,				//回零过程限位停止
			7,				//超出软件限位范围
			100				//没有正常回零完成
	返回值：错误码
	*************************************************************/	
	MC_API DWORD __stdcall MC_GetHomeResult(WORD connect_no,WORD axis,WORD* complete_state);
	
//#endif

/**************************坐标系运动控制操作****************************************/
/*************************************************************
* 函数名称: MC_StopCrd
说明：坐标系运动停止函数
输入：connect_no	连接号
crd		插补系号
mode	停止模式
		0，减速停止
		1，立即停止
stop_time	减速停止的停止时间(s)
输出：
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_StopCrd(WORD connect_no, WORD crd, WORD mode, double stop_time);

/*************************************************************
* 函数名称: MC_SetCrdStopTime
说明：坐标系运动减速停止时间设置
输入：connect_no	连接号
crd		插补系号
stop_time	减速停止的停止时间(s)
输出：
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_SetCrdStopTime(WORD connect_no, WORD crd, double stop_time);

/*************************************************************
* 函数名称: MC_GetCrdStopModeTime
说明：获取坐标系运动的停止模式和停止时间
输入：connect_no	连接号
crd		插补系号
输出：mode	停止模式
		0，减速停止
		1，立即停止
stop_time	减速停止的停止时间(s)
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_GetCrdStopModeTime(WORD connect_no, WORD crd, WORD* mode, double* stop_time);
/*************************************************************
* 函数名称: MC_GetCrdCheckDone
说明：判断插补系是否运动完成,0 表示运行，1表示使能并空闲状态
	AXIS_MS_MOVING,         //运动中
	AXIS_MS_STANDSTILL,	  	//运动停止,轴可启动运动状态
	AXIS_MS_LIMIT_402,      //402轴的限位控制,运动中
	AXIS_MS_PAUSE,		    //暂停
	AXIS_MS_STOPPING,		//停止运动中
	AXIS_MS_POWER_OFF,       //轴未使能	,但是注意，可能有最后一个周期的运动，比如掉使能的时，当前周期还时需要运动完成
	AXIS_MS_DONT_EXIST       //轴不存在
输入：connect_no	连接号
crd		插补系号
输出：crd_state		插补系状态
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_GetCrdCheckDone(WORD connect_no, WORD crd, WORD* crd_state);
/*************************************************************
* 函数名称: MC_GetCrdCmdSpeed
说明：读取当前插补器速度
输入：connect_no	连接号
crd		插补系号
输出：speed		插补系当前速度
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_GetCrdCmdSpeed(WORD connect_no, WORD crd, double* speed);

//坐标系运动参数设置 

/*************************************************************
* 函数名称: MC_SetCrdVelSmooth
说明：速度规划速度平滑
输入：connect_no	连接号
crd		插补系号
ifEnable：0表示禁止，1表示使能
smTime :平滑时间(s)
输出：
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall MC_SetCrdVelSmooth(WORD connect_no, WORD crd, WORD ifEnable, double smTime);
MC_API DWORD __stdcall MC_GetCrdVelSmooth(WORD connect_no, WORD crd, WORD* ifEnable, double* smTime);


/*************************************************************
* 函数名称: MC_SetCrdMotionPrm
说明：运动按时间参数设置插补系运动参数
输入：connect_no	连接号
	crd		插补系号
    start_vel: 启动速度 
	max_vel：最大允许允许速度 最大值为10M；最小值大于0
	stop_vel：停止速度
	t_acc：加速时间  最大值为100s，最小值为0
	t_dec：减速时间  最大值为100s，最小值为0
	s_para：s型曲线参数配置 最大值1，最小值为0；如果设置该值为零时，为T形速度曲线，不为零时，表示S型曲线
	maxAcc: 最大加减速限制，设置值小于运动配置的加减速度值时，最大加减速度设置为其运动加减速度。
输出：
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall MC_SetCrdMotionPrm(WORD connect_no,WORD crd,double start_vel,double max_vel,double stop_vel,double t_acc,double t_dec,double s_ratio,double maxAcc);
MC_API DWORD __stdcall MC_GetCrdMotionPrm(WORD connect_no,WORD crd,double* start_vel,double* max_vel,double* stop_vel,double* t_acc,double* t_dec,double* s_ratio,double* maxAcc);

/*************************************************************
* 函数名称: MC_SetCrdMotionPrmAcc
说明：运动按加减速单位设置插补系运动参数
输入：connect_no	连接号
	crd		插补系号
    start_vel: 启动速度 
	max_vel：最大允许允许速度 最大值为10M；最小值大于0
	stop_vel：停止速度
	acc：加速度
	dec：减速度
	s_para：s型曲线参数配置 最大值1，最小值为0；如果设置该值为零时，为T形速度曲线，不为零时，表示S型曲线
	maxAcc: 最大加减速限制，设置值小于运动配置的加减速度值时，最大加减速度设置为其运动加减速度。
输出：
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall MC_SetCrdMotionPrmAcc(WORD connect_no,WORD crd,double start_vel,double max_vel,double stop_vel,double acc,double dec,double s_ratio,double maxAcc);
MC_API DWORD __stdcall MC_GetCrdMotionPrmAcc(WORD connect_no,WORD crd,double* start_vel,double* max_vel,double* stop_vel,double* acc,double* dec,double* s_ratio,double* maxAcc);
/*************************************************************
* 函数名称: MC_MoveLinear
说明：直线插补命令
输入：connect_no	连接号
	Crd：坐标系号
	AxisNum：轴数
	AxisList：轴列表
	Dist：目标位置信息列表
	crd_mode：0表示相对运动，1表示绝对运动
输出：
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall MC_MoveLinear(WORD ConnectNo,WORD Crd,WORD AxisNum,WORD* AxisList,double* Dist,WORD Crd_Mode);
/*************************************************************
* 函数名称: MC_MovePlaneArcC
说明：终点圆心的圆弧插补函数
输入：connect_no	连接号
Crd	插补系号
AxisNum：轴数；
AxisList：插补轴列表，超过三轴的其它轴为跟随轴；
Target_Pos：目标位置；
Cen_Pos：圆心位置；
Arc_Dir：圆弧插补方向；分为顺时针，和逆时针；
Circle：插补圈数；
Crd_Mode：插补的位置模式；0表示相对运动，1表示绝对运动
输出：无
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_MovePlaneArcC(WORD ConnectNo,WORD Crd,WORD AxisNum,WORD* AxisList,double* Target_Pos,double* Cen_Pos,WORD Arc_Dir,DWORD Circle,WORD Crd_Mode);
/*************************************************************
* 函数名称: MC_MovePlaneArcR
说明：终点半径圆弧插补函数
输入：connect_no	连接号
	Crd		插补系号
	AxisNum：轴数；
	AxisList：插补轴列表，超过三轴的其它轴为跟随轴；
	Target_Pos：目标位置；
	Arc_Radius：圆弧半径
	Arc_Dir:0 表示劣弧，1表示优弧
	Circle：插补圈数；
	Crd_Mode：插补的位置模式；0表示相对运动，1表示绝对运动
输出：无
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_MovePlaneArcR(WORD ConnectNo,WORD Crd,WORD AxisNum,WORD* AxisList,double* Target_Pos,double Arc_Radius,WORD Arc_Dir,DWORD Circle,WORD Crd_Mode);
/*************************************************************
* 函数名称: MC_MovePlaneArc3P
说明：三点圆弧插补函数
输入：connect_no	连接号
	Crd		插补系号
	AxisNum：轴数；
	AxisList：插补轴列表，超过三轴的其它轴为跟随轴；
	Target_Pos：目标位置；
	Mid_Pos：圆弧中点位置
	Circle：插补圈数；
	Crd_Mode：插补的位置模式；0表示相对运动，1表示绝对运动
输出：无
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_MovePlaneArc3P(WORD ConnectNo,WORD Crd,WORD AxisNum,WORD* AxisList,double* Target_Pos,double* Mid_Pos,DWORD Circle,WORD Crd_Mode);
/*************************************************************
* 函数名称: MC_MoveSpaceArcC
说明：终点圆心的空间圆弧插补函数
输入：connect_no	连接号
Crd		插补系号
AxisNum：轴数；
AxisList：插补轴列表，超过三轴的其它轴为跟随轴；
Target_Pos：目标位置；
Cen_Pos：圆心位置；
Arc_Dir：圆弧插补方向；0分为顺时针，1逆时针；
Circle：插补圈数；
Crd_Mode：插补的位置模式；
输出：无
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_MoveSpaceArcC(WORD ConnectNo,WORD Crd,WORD AxisNum,WORD* AxisList,double* Target_Pos,double* Cen_Pos,WORD Arc_Dir,DWORD Circle,WORD Crd_Mode);
/*************************************************************
* 函数名称: MC_MoveSpaceArc3P
说明：三点圆弧空间插补函数
输入：connect_no	连接号
	Crd		插补系号
	AxisNum：轴数；
	AxisList：插补轴列表，超过三轴的其它轴为跟随轴；
	Target_Pos：目标位置；
	Mid_Pos：圆弧中点位置
	Circle：插补圈数；
	Crd_Mode：插补的位置模式；0表示相对运动，1表示绝对运动
输出：无
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_MoveSpaceArc3P(WORD ConnectNo,WORD Crd,WORD AxisNum,WORD* AxisList,double* Target_Pos,double* Mid_Pos,DWORD Circle,WORD Crd_Mode);
/*************************************************************
* 函数名称: MC_MovePlaneEllipse
说明：椭圆插补函数
输入：connect_no	连接号
Crd		插补系号
AxisNum：轴数；
AxisList：插补轴列表，超过三轴的其它轴为跟随轴；
Target_Pos：目标位置；
Cen_Pos：圆心位置；
double a_len 椭圆长半轴;
double b_len 椭圆短半轴;
Arc_Dir：圆弧插补方向；0分为顺时针，1逆时针；
Circle：插补圈数；
Crd_Mode：插补的位置模式；
输出：无
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_MovePlaneEllipse(WORD ConnectNo,WORD Crd,WORD AxisNum,WORD* AxisList,double* Target_Pos,double* Cen_Pos, double a_len, double b_len,WORD Arc_Dir,DWORD Circle,WORD Crd_Mode);

/*******************************************************************************
* 函数名称: MC_GetCrdStatus
* 函数功能: 获取插补器的工作状态
* 输入参数: connect_no	连接号		
 WORD Crd	插补系号
 输出：		
 WORD* runningState		当前插补器的工作状态，0表示运行，1表示停止
 DWORD* mark		当前插补段的段号，如果是单段插补，返回1
 WORD* runningMode		当前插补器工作的模式
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_GetCrdStatus(WORD ConnectNo,WORD Crd,WORD* runningState, DWORD* mark, WORD* runningMode);

/*******************************************************************************
* 函数名称: MC_GetCrdBufStatus
* 函数功能: 连续插补模式下，获取buffer的空间大小
* 输入参数: connect_no	连接号		
 WORD Crd	插补系号
 输出：	
 UInt16 curRunningMark	 当前执行的插补段mark
 WORD* freeSpace		剩余空间
 WORD* usedSpace		已用空间
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_GetCrdBufStatus(WORD ConnectNo,WORD Crd,WORD* curRunningMark,WORD* freeSpace, WORD* usedSpace);

/*******************************************************************************
* 函数名称: MC_MoveContiLinear
* 函数功能: 连续直线插补
* 输入参数: connect_no	连接号		
 WORD Crd		插补器号
 WORD AxisNum		插补轴数
 WORD* AxisList		插补轴列表
 double* Dist		目标位置
 WORD Crd_Mode		位置模式，0表示相对，1表示绝对
 DWORD mark		   设置的插补段号
 WORD linkToLast		是否连接上一段，0表示不连接，1表示连接。在前瞻模式下，该配置有效，连续插补模式下，无效
 double feedVel		该段的插补最大速度
 double endVel		该段的最大停止速度
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_MoveContiLinear(WORD ConnectNo,WORD Crd,WORD AxisNum,WORD* AxisList,double* Dist,WORD Crd_Mode, DWORD mark, WORD linkToLast, double feedVel, double endVel);
/*******************************************************************************
* 函数名称: MC_SetCrdLookAhead
* 函数功能: 配置连续前瞻插补的模式
* 输入参数: connect_no	连接号		
 WORD Crd	插补系号	
 WORD lookaheadMode	前瞻插补模式，0表示连续插补，1表示前瞻处理插补	
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_SetCrdLookAhead(WORD ConnectNo,WORD Crd,WORD lookaheadMode);
MC_API DWORD __stdcall  MC_GetCrdLookAhead(WORD ConnectNo,WORD Crd,WORD* lookaheadMode);
/*******************************************************************************
* 函数名称: MC_SetCrdCmdWait
* 函数功能: 设置连续插补时，等待上位机指令启动运动。
* 输入参数: connect_no	连接号		
Crd		插补系号
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_SetCrdCmdWait(WORD ConnectNo,WORD Crd);

/*******************************************************************************
* 函数名称: MC_SetCrdCmdWait
* 函数功能: 设置连续插补时，等待上位机指令启动运动。
与MC_SetCrdCmdWait指令配合使用，表示立马执行运动

* 输入参数: connect_no	连接号		
Crd		插补系号
* 返 回 值:错误码 
*******************************************************************************/

MC_API DWORD __stdcall  MC_SetCrdCmdStart(WORD ConnectNo,WORD Crd);

/*******************************************************************************
* 函数名称: MC_SetCrdCornerPrm
* 函数功能: 设置前瞻处理的拐角参数

* 输入参数: connect_no	连接号		
 WORD Crd		插补系号
 WORD cornerFlag		拐角处理，0表示处理，1表示不处理
 double maxPathError		最大轨迹误差
 double maxVelLimit		最大速度限制
 double maxAccLimit		最大加速度限制
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall   MC_SetCrdCornerPrm(WORD ConnectNo, WORD Crd, WORD cornerFlag, double maxPathError,
									double maxVelLimit, double maxAccLimit );

MC_API DWORD __stdcall   MC_GetCrdCornerPrm(WORD ConnectNo, WORD Crd, WORD* cornerFlag, double* maxPathError,
									double* maxVelLimit, double* maxAccLimit );

/**************************轴状态和参数信息****************************************/

/*************************************************************
* 函数名称: MC_Power
说明：轴使能,在使用轴之前需要先使能轴控制
输入：ifEnable: 0表示使能，1表示使能
输出：无
返回值：
*************************************************************/
MC_API DWORD __stdcall  MC_Power(WORD connect_no, WORD axis, WORD ifEnable);
/*******************************************************************************
* 函数名称: MC_SetPulseMode
* 函数功能: 脉冲输出模式配置

* 输入参数: connect_no	连接号		
axis	轴号	
pulse_mode	脉冲模式
 	 0	脉冲高+方向高
	 1	脉冲低+方向高
	 2	脉冲高+方向低
	 3	脉冲低+方向低
	 4	双脉冲高
	 5	双脉冲低
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_SetPulseMode(WORD connect_no, WORD axis, WORD pulse_mode);
MC_API DWORD __stdcall  MC_GetPulseMode(WORD connect_no, WORD axis, WORD* pulse_mode);
/*******************************************************************************
* 函数名称: MC_SetEncodeMode
* 函数功能: 设置轴对应编码器的工作模式及方向

* 输入参数: connect_no	连接号		
axis	轴号	
enc_mode	编码器计数模式	
		Pulse_Dir_Mode_Count = 0, //脉冲方向计数
		Pulse_A_B_Mode_Count_1  = 1, //AB相计数，1倍频计数
		Pulse_A_B_Mode_Count_2  = 2, //AB相计数，2倍频计数  
		Pulse_A_B_Mode_Count_4  = 3 //AB相计数，4倍频计数
enc_dir		计数方向
		0： 计数方向不取反 
		1： 计数方向取反
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_SetEncodeMode(WORD connect_no, WORD axis, WORD enc_mode, WORD enc_dir);
MC_API DWORD __stdcall  MC_GetEncodeMode(WORD connect_no, WORD axis, WORD* enc_mode, WORD* enc_dir);

/*************************************************************
* 函数名称: MC_GetAxisMachineState
说明：获取轴的状态机
输入：connect_no	连接号
axis	轴号
输出：Axis_state	轴状态机
	0	轴运动中
	1	轴等待运动中
	2	402轴限位
	3	轴暂停中
	4	轴停止过程中
	5	轴未使能
	6	轴不存在
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_GetAxisMachineState(WORD connect_no, WORD axis, WORD* Axis_state);
/*************************************************************
* 函数名称: MC_GetAxisCheckDone
说明：判断轴是否运动完成,
输入：connect_no	连接号
axis	轴号
输出：CheckDone
	0	表示运行
	1	表示使能并空闲状态
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_GetAxisCheckDone(WORD connect_no, WORD axis, WORD* CheckDone);

/*************************************************************
* 函数名称: MC_GetAxisMotionMode
说明：轴当前的运动模式
输入：connect_no	连接号
axis	轴号
输出：Motion_Mode
		0 = 轴空闲
		1 = 点运动
		2 = 速度控制运动
		3 = 回零运动
		4 = 手脉跟随运动
		5 = 正弦振荡曲线模式
		6 = PT_Move
		7 = PVT_Move
		129 = 直线插补
		130 = 圆弧插补
		131 = 椭圆插补
		132 = 螺旋线插补
		133 = 连续插补
		134 = 前瞻插补
		135 = 五轴+法向跟随
返回值：错误码
*************************************************************/

MC_API DWORD __stdcall  MC_GetAxisMotionMode(WORD connect_no, WORD axis, WORD* Motion_Mode);

/*************************************************************
* 函数名称: MC_SetAxisEquvi
说明：设置轴当量
输入：connect_no	连接号
axis	轴号
equvi	当量设置，最小值为0.001，最大值为100000
输出：无
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_SetAxisEquvi(WORD connect_no, WORD axis, double equvi);

/*************************************************************
* 函数名称: MC_GetAxisEquvi
说明：获取轴当量
输入：connect_no	连接号
axis	轴号
输出：equvi	当量获取
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_GetAxisEquvi(WORD connect_no, WORD axis, double* equvi);
/*************************************************************


/*************************************************************
* 函数名称: MC_StopAxis
说明：根据配置的停止方式，停止时间启动运动停止
输入：connect_no	连接号
axis	轴号
stop_mode :0表示减速停止，1表示急停；stop_time单位为s
		轴在运动中时，执行一次运动停止，并且配置停止参数；
		轴在停止状态时，配置停止参数
输出：无
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_StopAxis(WORD connect_no, WORD axis, WORD mode, double stop_time);
/*******************************************************************************
* 函数名称: MC_SetAxisStopTime
* 函数功能: 设置轴减速停止时间，单位为s

* 输入参数: connect_no	连接号
axis	轴号
stop_time	减速停止时间
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_SetAxisStopTime(WORD connect_no, WORD axis, double stop_time);

/*************************************************************
* 函数名称: MC_GetAxisStopModeTime
说明：获取轴停止方式，减速停止时间设置
输入：connect_no	连接号
axis	轴号
输出：mode	轴停止模式
stop_time	轴减速停止时间
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_GetAxisStopModeTime(WORD connect_no, WORD axis, WORD* mode, double* stop_time);
/*************************************************************

/*************************************************************
* 函数名称: MC_StopEmgImd
说明：紧急停止所有轴运动
输入：connect_no	连接号
输出：无
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall MC_StopEmgImd(WORD connect_no);


/*************************************************************
* 函数名称: MC_GetAxisStopReason
说明：读取停止原因
输入：connect_no	连接号
axis	轴号
输出：stop_reason	停止原因
typedef stopReason
{
	//0：运动正常停止
	//1：客户调用指令减速停止
	//2：alarm信号减速停止
	//3：硬件正限位减速停止
	//4：硬件负限位减速停止
	//5：软件正限位减速停止
	//6：软件负限位减速停止	
	//7: 区域限位引起停止运动
	//8：IO触发减速停止
	//9: 减速暂停

	//100：emg信号立即停止
	//101：客户调用指令立即停止
	//102：alarm信号立即停止
	//103：硬件正限位立即停止
	//104：硬件负限位立即停止
	//105：软件正限位立即停止
	//106：软件负限位立即停止
	//107: 区域限位引起停止运动
	//108：IO触发立即停止
	//109：运动中，掉使能
	//110: 运动过大，异常停止
}
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_GetAxisStopReason(WORD connect_no, WORD axis, DWORD* stop_reason);
/*************************************************************
* 函数名称: MC_ClearAxisStopReason
说明：清除停止原因
输入：connect_no	连接号
axis	轴号
输出：无
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_ClearAxisStopReason(WORD connect_no, WORD axis);

/*************************************************************
* 函数名称: MC_GetAxisCmdPos
说明：读取当前指令位置
输入：connect_no	连接号
axis	轴号
输出：cmd_pos	当前指令位置
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_GetAxisCmdPos(WORD connect_no, WORD axis, double* cmd_pos);

/*************************************************************
* 函数名称: MC_GetAxisCmdSpeed
说明：读取当前速度
输入：connect_no	连接号
axis	轴号
输出：speed		当前速度
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_GetAxisCmdSpeed(WORD connect_no, WORD axis, double* speed);

/*************************************************************
* 函数名称: MC_GetAxisFeedbackPos
说明：读取反馈位置
输入：connect_no	连接号
axis	轴号
输出：feedback_pos	反馈位置
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_GetAxisFeedbackPos(WORD connect_no, WORD axis, double* feedback_pos);

/*************************************************************
* 函数名称: MC_SetAxisCmdPos
说明：设置当前指令位置
输入：connect_no	连接号
axis	轴号
cmd_pos	位置值
输出：无
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_SetAxisCmdPos(WORD connect_no, WORD axis, double cmd_pos);

/*******************************************************************************
* 函数名称: MC_SetAxisSoftELPrm
* 函数功能: 配置轴的软件限位参数
* 输入参数: WORD connect_no	连接号	
			WORD axis			轴号
			WORD enable		0 = 禁止，1 = 使能
			WORD pos_src  		位置源，0表示指令位置，1表示编码器位置
			double max_pos		最大位移
			double min_pos		最小位移
			WORD stop_mode		限位发生时的轴停止模式，0 = 减速停止，1 = 立即停止
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_SetAxisSoftELPrm(WORD connect_no, WORD axis, WORD enable, WORD pos_src, double max_pos, double min_pos, WORD stop_mode);

MC_API DWORD __stdcall  MC_GetAxisSoftELPrm(WORD connect_no, WORD axis, WORD* enable,WORD* pos_src,  double* max_pos, double* min_pos, WORD* stop_mode);
/*******************************************************************************
* 函数名称: MC_SetLimitArcPrm
* 函数功能: 圆弧位置限制功能，围绕圆弧的圆心，在指定半径内运动
* 输入参数: WORD connect_no		连接号
			WORD enable		true表示使能，false表示禁止
			WORD crd_dim		圆弧坐标系的维数，平面圆弧为2维;目前只支持平面圆弧
			WORD* axis_list	坐标系轴系数列表
			double* arc_cen		圆心位置
			double limit_radius		圆弧半径
			WORD pos_src		位置源，0表示指令位置，1表示编码器位置
			WORD stop_mode		停止模式，0表示减速停，1表示急停
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_SetLimitArcPrm(WORD connect_no, WORD enable, WORD* axis_list, double* arc_cen, double limit_radius, WORD pos_src , WORD stop_mode);
MC_API DWORD __stdcall  MC_GetLimitArcPrm(WORD connect_no, WORD* enable, WORD* axis_list, double* arc_cen, double* limit_radius, WORD* pos_src , WORD* stop_mode);


/***********************  通用IO 操作部分  ************************/

/*************************************************************
* 函数名称: MC_GetInIoBit
说明：获取输入口状态
输入： connect_no	连接号
io索引 PMC2012范围0~15
输出：IoState	输入口状态
	0-低电平
	1- 高电平
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_GetInIoBit(WORD connect_no, DWORD io_index, byte* IoState);

/*************************************************************
* 函数名称: MC_GetInIoPort
说明：读输入口,一次读取32位
输入：connect_no	连接号
port_index	端口索引 = 要读取的输入口%32， 
输出：IoState 输入口状态，bit0对应Input0
		0-低电平
		1- 高电平
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_GetInIoPort(WORD connect_no, DWORD port_index, DWORD* IoState);
/*******************************************************************************
* 函数名称: MC_GetInIoPtr
* 函数功能: 按起始地址读取IO状态，最多一次读取64点

* 输入参数: connect_no	连接号		
start_index		起始索引	
io_num		读取数量	
输出：IoState	获取到的输入口状态，bit0对应Input(start_index)
		0-低电平
		1- 高电平
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_GetInIoPtr(WORD connect_no, DWORD start_index, DWORD io_num, unsigned long long*  IoState);

/*************************************************************
* 函数名称: MC_SetOutIoBit
说明：设置输出口电平
输入：connect_no	连接号
io_index	输出口索引
IoState		写入状态 
	  		0-低电平
			1- 高电平
输出：
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_SetOutIoBit(WORD connect_no, DWORD io_index, byte IoState);

/*************************************************************
* 函数名称: MC_SetOutIoPort
说明：写输出口,一次32点
输入：connect_no	连接号
port_index	端口索引 = 要设置的输出口%32 
IoState	设置的输出口状态,bit0对应Output0
	  	0-低电平
		1- 高电平
输出：
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_SetOutIoPort(WORD connect_no, DWORD port_index, DWORD IoState);
/*******************************************************************************
* 函数名称: MC_SetOutIoPtr
* 函数功能: 根据起始IO序号，连续写多个IO点的状态，多个IO点写入相同的状态，最多连续写64点；
* 输入参数: connect_no	连接号
start_index	起始索引	
IoState	需要写入的IO状态
IoMask	bit位为零表示保持原来状态，为1表示写入IoState状态
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_SetOutIoPtr(WORD connect_no, DWORD start_index, byte IoState ,unsigned long long  IoMask);

/*************************************************************
* 函数名称: MC_GetOutIoBit
说明：读输出口状态
输入：connect_no	连接号
io_index	输出口索引(从0开始)
输出：IoState输出口状态
		0-低电平
		1- 高电平
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_GetOutIoBit(WORD connect_no, DWORD io_index, byte* IoState);

/*************************************************************
* 函数名称: MC_GetOutIoPort
说明：读输出口状态,一次读取32点
输入：connect_no	连接号
port_index	端口索引 = 要读取的输出口%32 
输出：IoState	返回输出口的状态，bit0对应Output0
	  0-低电平
	  1- 高电平
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_GetOutIoPort(WORD connect_no, DWORD port_index, DWORD* IoState);
/*******************************************************************************
* 函数名称: MC_GetOutIoPtr
* 函数功能: 按起始地址读取IO状态，最多一次读取64点
* 输入参数: connect_no	连接号		
start_index		起始索引
io_num		读取数量
IoState		返回读取到的输出口状态,bit0对应Output(start_index)
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_GetOutIoPtr(WORD connect_no, DWORD start_index, DWORD io_num, unsigned long long*  IoState);

/*******************************************************************************
* 函数名称: MC_SetIOCountPrm
* 函数功能: 设置IO计数参数
* 输入参数: WORD connect_no	连接号
 WORD io_index		输入口号（从0开始）
 WORD enable	是否使能 0 = 禁止 1 - 使能
 WORD counter_mode	:	计数边沿配置
					    down_edge_count = 0,下降沿计数
					    up_edge_count = 1,上升沿计数
					    any_edge_count = 2,电平有变化就计数
 DWORD filter	滤波时间(ms)
* 返 回 值: 错误码
* 创 建 人: lhm
* 创建时间: 2023-7-31
*******************************************************************************/
MC_API DWORD __stdcall  MC_SetIOCountPrm(WORD connect_no, WORD io_index, WORD enable, WORD counter_mode,DWORD filter);

MC_API DWORD __stdcall  MC_GetIOCountPrm(WORD connect_no, WORD io_index, WORD* enable, WORD* counter_mode, DWORD* filter);


/*******************************************************************************
* 函数名称: MC_GetIOCountValue
* 函数功能: 获取当前IO的计数值
* 输入参数: WORD connect_no	连接号
 DWORD io_index	 输入口号(从0开始)
 DWORD* io_count	返回计数值
* 返 回 值: 错误码
* 创 建 人: lhm
* 创建时间: 2023-7-31
*******************************************************************************/
MC_API DWORD __stdcall  MC_GetIOCountValue(WORD connect_no, WORD io_index, DWORD* io_count);

MC_API DWORD __stdcall  MC_SetIOCountValue(WORD connect_no, WORD io_index, DWORD io_count);

/*******************************************************************************
* 函数名称: MC_SetReuseIoMap
* 函数功能: 复用输入io映射，专用IO可通过虚拟IO映射，复用
* 输入参数: WORD connect_no		连接号
 uint16 io_index	虚拟IO索引(0~32)
 uint8 map_io_type		：轴IO的专用信号，或者通用IO
		0,//负限位
		1,//正限位
		2,//原点
		3,//伺服到位
		5,//伺服报警
		6,//伺服准备
		9,//通用IO信号
 uint32 map_index		: 轴号，或者通用IO点	
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_SetReuseIoMap(WORD connect_no, WORD io_index,WORD map_io_type,DWORD map_index);
/*******************************************************************************
* 函数名称: MC_GetReuseIoMap
* 函数功能: 获取虚拟IO的配置参数
* 输入参数: WORD connect_no		连接号
 uint16 io_index	虚拟IO索引
输出：uint8* map_io_type		映射IO类型
 		0,//负限位
		1,//正限位
		2,//原点
		3,//伺服到位
		5,//伺服报警
		6,//伺服准备
		9,//通用IO信号
 uint32* map_index	映射索引		
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_GetReuseIoMap(WORD connect_no, WORD io_index,WORD* map_io_type,DWORD* map_index);

/*******************************************************************************
* 函数名称: MC_GetReuseInIoBit
* 函数功能: 按位获取虚拟IO状态

* 输入参数: WORD connect_no		连接号
 DWORD io_index		虚拟IO索引	
输出：IoState	状态
		0 低电平
		1 高电平
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_GetReuseInIoBit(WORD connect_no, DWORD io_index, byte* IoState);

/**
 * @brief 复位虚拟IO配置
 * @param connect_no 连接号
 * @param io_index 虚拟IO索引
 * @return 错误码
*/
MC_API DWORD __stdcall  MC_ResetReuseInIo(WORD connect_no, DWORD io_index);

/*********************** 轴控制IO信号 操作部分  ************************/
/*******************************************************************************
* 函数名称: MC_SetAxisOutIo
* 函数功能: 设置轴的专用输出口电平
* 输入参数: WORD connect_no		连接号
 WORD axis		轴号
 WORD axis_io_type		轴IO类型 
		0,//伺服使能
		1//伺服报警清除
 WORD io_level	输出电平，0表示低电平；1表示高电平	
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_SetAxisOutIo(WORD connect_no,WORD axis,WORD axis_io_type, WORD io_level);
MC_API DWORD __stdcall  MC_GetAxisOutIo(WORD connect_no,WORD axis,WORD axis_io_type, WORD* io_level);

/*******************************************************************************
* 函数名称: MC_SetAxisInIoPrm
* 函数功能: 配置IO口逻辑

* 输入参数: WORD connect_no		连接号
 WORD axis		轴号
 WORD axis_io_type		轴IO类型
		0,//负限位
		1,//正限位
		2,//原点
		3,//伺服到位
		5,//伺服报警
		6,//伺服准备
 WORD enable		轴IO是否使能
 WORD io_logical	配置有效电平，0和1	
 WORD stop_mode	 停止模式，触发后的停止处理，0为减速停止，1为立即停止
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_SetAxisInIoPrm(WORD connect_no,WORD axis,WORD axis_io_type,WORD enable, WORD io_logical, WORD stop_mode);

/*******************************************************************************
* 函数名称: MC_GetAxisInIoPrm
* 函数功能: 获取轴IO配置

* 输入参数: WORD connect_no		连接号
 WORD axis		轴号
 WORD axis_io_type		轴IO类型
		0,//负限位
		1,//正限位
		2,//原点
		3,//伺服到位
		5,//伺服报警
		6,//伺服准备
* 输出参数：WORD enable		轴IO是否使能
		WORD io_logical	有效电平，0和1	
		WORD stop_mode	 停止模式，触发后的停止处理，0为减速停止，1为立即停止	
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_GetAxisInIoPrm(WORD connect_no,WORD axis,WORD axis_io_type,WORD* enable, WORD* io_logical, WORD* stop_mode);

/*******************************************************************************
* 函数名称: MC_SetAxisInIoMap
* 函数功能: 轴专用信号映射
* 输入参数: WORD connect_no		连接号
 WORD axis		轴号
 WORD axis_io_type	轴IO类型
		0,//负限位
		1,//正限位
		2,//原点
		3,//伺服到位
		5,//伺服报警
		6,//伺服准备
 WORD map_io_type	映射IO的类型，包括，其它轴的专用信号，通用IO等
		0,//负限位
		1,//正限位
		2,//原点
		3,//伺服到位
		5,//伺服报警
		6,//伺服准备
		9,//通用IO信号
 WORD map_index		映射的轴号或者通用IO口号，
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_SetAxisInIoMap(WORD connect_no,WORD axis,WORD axis_io_type,WORD map_io_type,DWORD map_index);
/*******************************************************************************
* 函数名称: MC_GetAxisInIoMap
* 函数功能: 获取轴IO映射
* 输入参数: WORD connect_no		连接号	
 WORD axis	轴号	
 WORD axis_io_type	轴IO类型
		0,//负限位
		1,//正限位
		2,//原点
		3,//伺服到位
		5,//伺服报警
		6,//伺服准备
* 输出参数：WORD* map_io_type	映射IO类型	
		0,//负限位
		1,//正限位
		2,//原点
		3,//伺服到位
		5,//伺服报警
		6,//伺服准备
		9,//通用IO信号
DWORD* map_index	映射索引，根据map_io_type返回轴号或者IO索引	
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_GetAxisInIoMap(WORD connect_no, WORD axis,WORD axis_io_type,WORD* map_io_type,DWORD* map_index);

/**
 * @brief 复位轴专用信号映射配置
 * @param connect_no 卡的连接号
 * @param axis 轴号(从0开始)
 * @return 错误码
*/
MC_API DWORD __stdcall  MC_ReSetAxisInIoMap(WORD connect_no, WORD axis);

/*************************************************************
* 函数名称: MC_GetAxisInIoState
说明：获取轴所有专用信号输入状态
输入：connect_no		连接号
axis	轴号
输出：in_io_state	轴专用信号状态	0-无效， 1- 有效
		bit0 负限位EL-
		bit1 正限位EL+
		bit2 原点ORG
		bit3 伺服到位INP
		bit5 伺服报警ALM
		bit6 伺服准备RDY
		bit9 软件负限位SL-
		bit10 软件正限位SL+
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_GetAxisInIoState(WORD connect_no, WORD axis, DWORD* in_io_state);
/*************************************************************
* 函数名称: MC_GetAxisAlarmState
说明：获取轴伺服报警信号(ALM)状态
输入：connect_no		连接号
axis	轴号
输出：alarm_state 信号状态
		0-无效
		1- 有效
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_GetAxisAlarmState(WORD connect_no, WORD axis, byte* alarm_state);
/*************************************************************
* 函数名称: MC_GetAxisHomeState
说明：获取轴原点信号(ORG)状态
输入： connect_no		连接号
axis	轴号
输出：home_state	信号状态
		0-无效
		1- 有效
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_GetAxisHomeState(WORD connect_no, WORD axis, byte* home_state);
/*************************************************************
* 函数名称: MC_GetAxisELState
说明：获取轴硬件限位(EL)状态
输入：connect_no		连接号
axis	轴号
输出：el_minus_state	负限位状态
		0-无效
		1- 有效
	el_plus_state	正限位状态
		0-无效
		1- 有效
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_GetAxisELState(WORD connect_no, WORD axis, byte* el_minus_state, byte* el_plus_state);

/*************************************************************
* 函数名称: MC_GetAxisInpState
说明：读取轴伺服到位信号(INP)状态
输入：connect_no		连接号
axis	轴号
输出：inp_state		信号状态
		0-无效
		1- 有效
返回值：错误码
*************************************************************/
MC_API DWORD __stdcall  MC_GetAxisInpState(WORD connect_no, WORD axis, byte* inp_state);

/*******************************************************************************
* 函数名称: MC_SetAuxEncoderPrm
* 函数功能: 设置辅助编码器参数
* 输入参数: WORD connect_no		连接号
 WORD channel		辅助编码器通道，从0开始
 WORD mode	辅助编码器计数模式	
		0, //脉冲方向计数
		1, //AB相计数，1倍频计数
		2, //AB相计数，2倍频计数  
		3 //AB相计数，4倍频计数
 WORD dir	计数方向
 		0： 计数方向不取反 
		1： 计数方向取反
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_SetAuxEncoderPrm(WORD connect_no, WORD channel, WORD mode, WORD dir);
MC_API DWORD __stdcall  MC_GetAuxEncoderPrm(WORD connect_no, WORD channel, WORD* mode, WORD* dir);

/*******************************************************************************
* 函数名称: MC_AuxEncoder_Set_Positon
* 函数功能: 设置辅助编码器位置
* 输入参数: WORD connect_no		连接号
 WORD channel	辅助编码器通道，从0开始
 double CmdPos	位置	
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_SetAuxEncoderPositon(WORD connect_no, WORD channel, double CmdPos);
/*******************************************************************************
* 函数名称: MC_GetAuxEncoderPositon
* 函数功能: 获取辅助编码器位置
* 输入参数: WORD connect_no		连接号	
 WORD channel	辅助编码器通道，从0开始
* 输出参数：double* CmdPos	辅助编码器当前位置
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_GetAuxEncoderPositon(WORD connect_no, WORD channel, double* CmdPos);
/*******************************************************************************
* 函数名称: MC_SetHandleWheelPrm
* 函数功能: 手轮参数配置
* 输入参数: WORD connect_no		连接号
 WORD axis		启动轴的手轮运动，配置轴号
 WORD channel		使用的手轮通道，
 double multi		手轮的计数倍频，大于零为正向计数，小于零为负向计数
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_SetHandleWheelPrm(WORD connect_no,WORD axis, WORD channel, double multi);
MC_API DWORD __stdcall  MC_GetHandleWheelPrm(WORD connect_no,WORD axis, WORD* channel, double* multi);
/*******************************************************************************
* 函数名称: MC_StartHandleWheel
* 函数功能: 启动手轮运动, 退出手轮运动为调用停止指令
* 输入参数: WORD connect_no		连接号	
WORD axis	轴号		
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_StartHandleWheel(WORD connect_no,WORD axis);

#ifdef capture_function
#endif
/*******************************************************************************
* 函数名称: MC_StartCapture
* 函数功能: 启动捕获
* 输入参数: WORD connect_no	连接号	
 WORD cap_object	捕获对象
		0, //原点信号
		1,//EZ信号
		2,//高速IN0 IN1信号	  	 
		3//通用IN信号	
 WORD cap_chan	捕获通道（0, 1），或者通用IO口号  注意：cap_object对象为Home和EZ时，该变量无效
 WORD cap_axis 捕获轴
 WORD cap_io 捕获IO口号，针对CAPTURE_GEN_IN = 3//通用IN信号	
 WORD cap_mode		捕获模式 
		0, //单次锁存
		1//连续锁存 注意：不支持cap_object对象为Home和EZ时情况
 WORD cap_logic		捕获逻辑
		0, //下降沿捕获
		1, //上升沿捕获
		2 //双边沿捕获， 注意：不支持cap_object对象为Home和EZ时情况
 WORD* cap_pos_src	捕获位置源
		0,//指令源
		1,  //编码器源
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_StartCapture(WORD connect_no, WORD cap_object,  WORD cap_axis, WORD cap_chan, WORD cap_io, WORD cap_mode, WORD cap_logic, WORD cap_pos_src);
/*******************************************************************************
* 函数名称: MC_GetCapturePrm
* 函数功能: 获取捕获通道的配置参数
* 输入参数: WORD connect_no		连接号	
 WORD cap_object	捕获对象
		0, //原点信号
		1,//EZ信号
		2,//高速IN0 IN1信号	  	 
		3//通用IN信号	
 WORD cap_chan	捕获通道（0, 1），或者通用IO口号  注意：cap_object对象为Home和EZ时，该变量无效
 WORD cap_axis 捕获轴	
* 输出参数：WORD* cap_io 捕获IO口号，针对CAPTURE_GEN_IN = 3//通用IN信号
 WORD* cap_mode		捕获模式 
		0, //单次锁存
		1//连续锁存 注意：不支持cap_object对象为Home和EZ时情况	
 WORD* cap_logic		捕获逻辑
		0, //下降沿捕获
		1, //上升沿捕获
		2 //双边沿捕获， 注意：不支持cap_object对象为Home和EZ时情况		
 WORD* cap_pos_src	捕获位置源
		0,//指令源
		1,  //编码器源		
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_GetCapturePrm(WORD connect_no, WORD cap_object, WORD cap_axis, WORD cap_chan ,  WORD* cap_io, WORD* cap_mode, WORD* cap_logic,  WORD* cap_pos_src);
/*******************************************************************************
* 函数名称: MC_GetCaptureCount
* 函数功能: 获取捕获数量
* 输入参数: WORD connect_no	连接号	
 WORD cap_object	捕获对象
		0, //原点信号
		1,//EZ信号
		2,//高速IN0 IN1信号	  	 
		3//通用IN信号	
 WORD cap_chan	捕获通道（0, 1），或者通用IO口号  注意：cap_object对象为Home和EZ时，该变量无效
 WORD cap_axis 捕获轴
* 输出参数：DWORD* cap_counts		捕获到的数据点数
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_GetCaptureCount(WORD connect_no, WORD cap_object,WORD cap_axis,WORD cap_chan , DWORD* cap_counts);
/*******************************************************************************
* 函数名称: MC_GetCapturePos
* 函数功能: 获取捕获的位置点
* 输入参数:WORD connect_no	连接号	
 WORD cap_object	捕获对象
		0, //原点信号
		1,//EZ信号
		2,//高速IN0 IN1信号	  	 
		3//通用IN信号	
 WORD cap_chan	捕获通道（0, 1），或者通用IO口号  注意：cap_object对象为Home和EZ时，该变量无效
 WORD cap_axis 捕获轴
 WORD read_cap_counts		读取的捕获点数量
* 输出参数：WORD* real_counts   实际读取点数
 double* cap_pos		读取到的位置数组
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_GetCapturePos(WORD connect_no, WORD cap_object,WORD cap_axis, WORD cap_chan ,WORD read_cap_counts,  WORD* real_counts, double* cap_pos);
/*******************************************************************************
* 函数名称: MC_ReStartCapture
* 函数功能: 每调用一次，重启一次捕获
* 输入参数: WORD connect_no	连接号	
 WORD cap_object	捕获对象
		0, //原点信号
		1,//EZ信号
		2,//高速IN0 IN1信号	  	 
		3//通用IN信号	
 WORD cap_chan	捕获通道（0, 1），或者通用IO口号  注意：cap_object对象为Home和EZ时，该变量无效
 WORD cap_axis 捕获轴	
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_ReStartCapture(WORD connect_no, WORD cap_object, WORD cap_axis, WORD cap_chan);
/*******************************************************************************
* 函数名称: MC_StopCapture
* 函数功能: 停止捕获功能
* 输入参数: WORD connect_no	连接号	
 WORD cap_object	捕获对象
		0, //原点信号
		1,//EZ信号
		2,//高速IN0 IN1信号	  	 
		3//通用IN信号	
 WORD cap_chan	捕获通道（0, 1），或者通用IO口号  注意：cap_object对象为Home和EZ时，该变量无效
 WORD cap_axis 捕获轴	
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_StopCapture(WORD connect_no,WORD cap_object, WORD cap_axis, WORD cap_chan);

#ifdef compare_function
#endif
/*******************************************************************************
* 函数名称: MC_StartHSCmp
* 函数功能: 停止高速比较口功能
* 输入参数: WORD connect_no		连接号	
 WORD cmp_dim  比较维数  
		1, //一维比较
		2 //二维比较
 WORD cmp_chan	高速比较口0~3；对应IO序号index：12~15
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_StopHSCmp(WORD connect_no, WORD cmp_dim, WORD cmp_chan);

/*******************************************************************************
* 函数名称: MC_GetHSCmpPrm
* 函数功能: 获取高速比较参数配置
* 输入参数: WORD connect_no		连接号
 WORD cmp_dim  比较维数   ；2维比较时，返回指针长度为2维  
		1, //一维比较
		2 //二维比较
 WORD cmp_hs_io		高速比较口0~3；对应IO序号index：12~15
* 输出参数：
 WORD* enable	0表示静止，1表示使能	
 WORD* cmp_mode	比较输出模式
		0, //小于比较点模式
		1,//大于比较点模式
		2,//等增量比较模式
		3   //FIFO点比较输出
 WORD* axis		比较轴 2维比较时，返回指针长度为2维
 WORD* cmp_source	比较位置源 2维比较时，返回指针长度为2维
		0,		//指令位置源
		1,  	//编码器位置源
 WORD* trigger_mode		触发模式
		0,//表示低电平
		1,//表示高电平
		3, // 需要输入IO时间
		4,//停止轴
		100//没有触发
 DWORD* trigger_Data  触发参数(输出端口号)
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_GetHSCmpPrm(WORD connect_no,WORD cmp_dim, WORD cmp_hs_io, WORD* cmp_mode, WORD* axis, 
											 WORD* cmp_source, WORD* trigger_mode, DWORD* trigger_Data);

/*******************************************************************************
* 函数名称: MC_StartHS1DCmp
* 函数功能: 启动高速一维比较(相当于添加一个比较点)
* 输入参数: WORD connect_no		连接号
 WORD cmp_hs_io	高速比较口0~3；对应IO序号index：12~15
 WORD cmp_axis  比较轴号
 WORD cmp_source			比较位置源
		0,		//指令位置源
		1,  	//编码器位置源
 DWORD cmp_counts		比较位置点数（模式0~2下，该值为固定值1）
 double* cmp_pos		比较位置点数组，（等增量比较模式下，该数组长度为2，第一点位起点位置点；第二点为增量值）
 WORD cmp_mode			比较输出模式
		0, //小于比较点模式
		1,//大于比较点模式
		2,//等增量比较模式
		3   //FIFO点比较输出
 WORD trigger_mode		比较触发时动作
		0,//表示低电平
		1,//表示高电平
		3,//输出脉冲，需要输入IO时间
		4,//停止轴
 WORD trigger_prm		比较触发触发参数
 		trigger_mode 为0~3时，对应IO序号index：12~15，
 		trigger_mode 为4时，该参数为轴号；
 double hs_out_time		脉冲输出时间(s)
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_StartHS1DCmp(WORD connect_no, WORD cmp_hs_io, WORD cmp_axis, WORD pos_src,  DWORD cmp_counts, double* cmp_pos,
												WORD cmp_mode, WORD trigger_mode, DWORD trigger_prm, double hs_out_time);

/*******************************************************************************
* 函数名称: MC_GetHSCmpStatus
* 函数功能: 获取高速一维比较状态
* 输入参数: WORD connect_no		连接号	
 WORD cmp_dim  比较维数  
		1, //一维比较
		2 //二维比较
 WORD cmp_hs_io		高速比较口0~3；对应IO序号index：12~15
* 输出参数：
 WORD* enable		比较器使能状态 0表示未启用，1表示使能
 double* running_pos		当前比较点的位置信息
 DWORD* completed_points	完成的比较点个数
 DWORD* remained_points		剩余比较点个数
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_GetHSCmpStatus(WORD connect_no, WORD cmp_dim, WORD cmp_hs_io, WORD* enable, double* running_pos, DWORD* completed_points, DWORD* remained_points);
/*******************************************************************************
* 函数名称: MC_ClearHSCmp
* 函数功能: 清除比较结果，重新比较一次
* 输入参数: WORD connect_no		连接号
 WORD cmp_dim		
		1, //一维比较
		2 //二维比较
 WORD cmp_hs_io		高速比较口0~3；对应IO序号index：12~15
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_ClearHSCmp(WORD connect_no, WORD cmp_dim,  WORD cmp_hs_io);

/*******************************************************************************
* 函数名称: MC_StopSoftCmp
* 函数功能: 停止比较
* 输入参数: WORD connect_no		连接号
 WORD cmp_dim		
		1, //一维比较
		2 //二维比较
 WORD cmp_chan 比较通道,	一维软件比较：取值范围(0,3)；二维软件比较：取值范围(0,1)；
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_StopSoftCmp(WORD connect_no,WORD cmp_dim, WORD cmp_chan);

/*******************************************************************************
* 函数名称: MC_GetSoftCmpPrm
* 函数功能: 获取软件比较参数
* 输入参数: WORD connect_no		连接号	
 WORD cmp_dim  比较维数
		1, //一维比较
		2 //二维比较
 WORD cmp_hs_io	比较通道	 
* 输出参数：
 WORD* enable	0表示静止，1表示使能	
 WORD* cmp_mode		比较输出模式  2维比较时，返回指针长度为2维
		0, //小于比较点模式
		1,//大于比较点模式
		2,//等增量比较模式
		3,//FIFO点比较输出
 WORD* axis		比较轴 2维比较时，返回指针长度为2维
 WORD* cmp_source	比较位置源，2维比较时，返回指针长度为2维
 //坐标位置源配置
		0,//指令位置源
		1,//编码器位置源
 WORD* trigger_mode		触发模式
		0,//表示低电平
		1,//表示高电平
		3,// 需要输入IO时间
		4,//停止轴
  DWORD* trigger_Data  触发参数
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_GetSoftCmpPrm(WORD connect_no,WORD cmp_dim, WORD cmp_hs_io, WORD* cmp_mode, WORD* axis, 
											 WORD* cmp_source, WORD* trigger_mode, DWORD* trigger_Data);

/*******************************************************************************
* 函数名称: MC_GetSoftCmpStatus
* 函数功能: 获取软件比较状态信息
* 输入参数: WORD connect_no		连接号
 WORD cmp_dim		
		1, //一维比较
		2 //二维比较
 WORD cmp_chan		比较通道,	取值范围(0,3)
* 输出参数：
 WORD* enable		比较器使能状态 0表示未启用，1表示使能
 double* running_pos		当前比较位置点，如果为二位位置比较为两个轴位置
 DWORD* completed_points	已完成比较点数
 DWORD* remained_points		剩余比较点
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_GetSoftCmpStatus(WORD connect_no,WORD cmp_dim, WORD cmp_chan, WORD* enable, double* running_pos, DWORD* completed_points, DWORD* remained_points );


/*******************************************************************************
* 函数名称: MC_ClearSoftCmp
* 函数功能: 清除所有配置的比较点
* 输入参数: WORD connect_no		连接号
 WORD cmp_dim		
		1, //一维比较
		2 //二维比较
 WORD cmp_chan 比较通道,	取值范围(0,3)；
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_ClearSoftCmp(WORD connect_no,WORD cmp_dim, WORD cmp_chan);

/*******************************************************************************
* 函数名称: MC_StartSoft1DCmp
* 函数功能: 添加一维软件比较点
* 输入参数: WORD connect_no		连接号
 WORD cmp_chan 比较通道,	取值范围(0,3)；
 WORD cmp_axis 比较轴号		
 WORD pos_src	设置比较源：0表示指令位置，1表示编码器位置	
 double pos		比较点位置，绝对位置
 WORD cmp_mode	比较模式
		0,//小于比较点模式
		1,//大于比较点模式
		2,//等增量比较模式
		3,//FIFO点比较输出
 WORD trigger_mode	比较触发动作
		0,//表示低电平
		1,//表示高电平
		3,//输出脉冲，需要输入IO时间
		4,//停止轴
 WORD trigger_prm	比较触发参数
 	trigger_mode 为0~3时，该参数为IO序号；
 	trigger_mode 为4时，该参数为轴序号；
 double out_time	脉冲输出的时间	
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_StartSoft1DCmp(WORD connect_no,WORD cmp_chan, WORD cmp_axis, WORD pos_src,  DWORD cmp_counts, double* cmp_pos,
														WORD cmp_mode, WORD trigger_mode, DWORD trigger_prm, double out_time);
/*******************************************************************************
* 函数名称: MC_StartSoft2DCmp
* 函数功能: 添加二维软件比较点
* 输入参数: WORD connect_no		连接号
 WORD* axis		比较轴号数组
 WORD* pos_src	比较位置源数组
 double* pos	比较位置数组
 WORD* cmp_mode	比较模式数组
		0,//小于比较点模式
		1,//大于比较点模式
		2,//等增量比较模式
		3,//FIFO点比较输出
 WORD trigger_mode	比较触发动作
		0,//表示低电平
		1,//表示高电平
		3,//输出脉冲，需要输入IO时间
		4,//停止轴
 WORD trigger_prm	比较触发参数
 	trigger_mode 为0~3时，该参数为IO序号；
 	trigger_mode 为4时，该参数为轴序号；		
 double out_time	脉冲输出的时间	
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_StartSoft2DCmp(WORD connect_no, WORD chan, WORD* axis, WORD* pos_src, DWORD cmp_count, double* pos, WORD* cmp_mode, WORD trigger_mode, DWORD trigger_prm, double out_time);

#ifdef handle_pwm_region
#endif

/*******************************************************************************
* 函数名称: MC_StartPwm
* 函数功能: 输出PWM
* 输入参数: WORD connect_no		连接号
 WORD pwm_chan_type		PWM通道类型
		0, //5v PWM 
		1 //24 vPWM
 WORD pwm_chan	PWM通道，24V通道0~3对应Output12~Output15
						5V通道0~1
 WORD enable	使能输出
 				0表示关闭PWM输出，对应24V的IO口切换到通用IO模式下
				1表示打开PWM输出
 WORD init_pin	PWM输出起始电平
				0,//低电平
				1,//高电平
 double frequency	PWM输出频率
					24V通道范围为0~200KHz
					5V通道范围为0~1MHz
 double duty	占空比，取值范围[0 , 1] duty = (高电平时刻 / 脉冲总时刻)	
* 返 回 值:错误码 
*******************************************************************************/
MC_API DWORD __stdcall  MC_StartPwm(WORD connect_no, WORD pwm_chan_type, WORD pwm_chan, WORD enable,WORD init_pin, double frequency, double duty);

MC_API DWORD __stdcall  MC_GetPwmPrm(WORD connect_no,WORD pwm_chan_type, WORD pwm_chan, WORD* enable,WORD* init_pin, double* frequency, double* duty);


#ifdef __cplusplus
}
#endif

#endif

