using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace nJZMC //命名空间根据应用程序修改
{
	//public class class_RT_Macro_Definition

	//控制器通讯接口
	public class class_Controller_Connect_Type
	{
		public const ushort CONNECTION_ETH = 1;//网络通讯
		public const ushort CONNECTION_PCI = 2;//PCI通讯
	}

	//IO控制电平
	public class class_IO_Controller_Pin_Type
	{
		public const ushort Low_Pin = 0;//低电平
		public const ushort High_Pin = 1;//高电平
	}

	//位置模式定义
	public class class_Crd_Pos_Mode
	{
		public const ushort Relative_Pos = 0;
		public const ushort Absolute_Pos = 1;
	}
	public class class_AXIS_IN_TYPE_INDEX
	{
		public const ushort NEL_INDEX = 0;//负限位
		public const ushort PEL_INDEX = 1;//正限位
		public const ushort ORG_INDEX = 2;//原点
		public const ushort INP_INDEX = 3;//伺服到位
		public const ushort ALM_INDEX = 5;//伺服报警
		public const ushort RDY_INDEX = 6;//伺服准备
		public const ushort NORMAL_IO_TYPE = 9;//通用IO信号
	}

	 public class class_PWM_Type
	 {
		 public const ushort PWM_Type_5V = 0; //5v PWM 
		 public const ushort PWM_Type_24V = 1; //24 vPWM
	 } 
	
	 public class class_AXIS_OUT_TYPE_INDEX
	 {
		 public const ushort SERVON_INDEX = 0;//伺服使能
		 public const ushort ERC_INDEX 	  = 1;//伺服报警清除
	  
	 }

	public class class_Axis_Stop_Mode
	{
		public const ushort Axis_Dec_Stop = 0;//减速停止
		public const ushort Axis_Imd_Stop = 1;//立即停止
	}

	public class class_Axis_Position_Source
	{
		public const ushort Cmd_Pos_Src = 0;//指令源
		public const ushort Encode_Pos_Src = 1;//编码器源
	}
	
	public class class_485_Slave_Phase
	{
		public const ushort Line_Box_Running_No_Connect = 0;//接线盒没有连接
		public const ushort Line_Box_Running_PowerOn = 1;//接线盒上电 
		public const ushort Line_Box_Running_Init = 2;//接线盒连接初始化阶段
		public const ushort Line_Box_Running_OK = 3;//接线盒连接正常运行阶段
		public const ushort Line_Box_Running_Error = 4;//接线盒连接运行错误阶段
	}

	#region 捕获参数
	public class class_Capture_Mode
	{
		public const ushort CAPTURE_SINGLE = 0; //单次锁存
		public const ushort CAPTURE_CONTINOUS = 1;//连续锁存
	}

	public class class_Capture_Object
	{
		public const ushort CAPTURE_HOME = 0; //原点信号
		public const ushort CAPTURE_EZ = 1;//EZ信号
		public const ushort CAPTURE_HS_IN = 2;//高速IN0 IN1信号		 
		public const ushort CAPTURE_GEN_IN = 3;//通用IN信号 
	}

	public class class_Capture_Logic_Mode
	{
		public const ushort CAPTURE_FALLING_EDGE = 0; //下降沿捕获
		public const ushort CAPTURE_RISING_EDGE = 1; //上升沿捕获
		public const ushort CAPTURE_DUAL_EDGE = 2; //双边沿捕获

	}
	#endregion

	#region
	//比较输出模式
	public class class_Compare_Mode
	{
		public const ushort Less_Compare_Value = 0; //小于比较点模式
		public const ushort Beyond_Compare_Value = 2; //大于比较点模式
		public const ushort Linear_Compare_Value = 3; //等增量比较模式
		public const ushort FIFO_Compare_Value = 4; //FIFO点比较输出模式
	}

	public class class_Compare_Dim
	{
	   public const ushort Compare_1D = 1; //一维软件比较
	   public const ushort Compare_2D = 2; //二维软件比较
	}

	#endregion




	public class JZMC
	{
		/**************************连接控制器操作****************************************/
		/*************************************************************
		* 函数名称: MC_Open
		说明：连接开卡操作函数
		输入：
			UInt16 connect_no 连接的ID号：连接模式为CONNECTION_ETH情况下的设置ID号
										连接模式为CONNECTION_PCI情况下为0
			UInt16 type：连接类型  
				CONNECTION_ETH = 1,//网络通讯
				CONNECTION_PCI = 2,//PCI通讯
			string pconnectstring：连接类型为ethernet时通讯的IP地址: "192.168.1.2"，其他类型为空即可
			ref UInt16 PcieNum ; 返回PCIe通讯控制器数
			UInt16[] PcieIndex;返回PCIe通讯控制器ID号
		输出：
		返回值：错误码
		*************************************************************/	
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_Open(UInt16 connect_no,UInt16 type, string pconnectstring,
											ref UInt16 PcieNum ,UInt16[] PcieIndex);
		/************************************************
        * 函数名称: MC_Close
        * 说明：关闭所有卡释放资源
        * 输入参数：connect_no	连接号
        * 返回值：错误码
        ************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_Close(UInt16 connect_no);
		/*******************************************************************************
		* 函数名称: MC_ColdReset
		* 函数功能: 硬件复位，控制器所有信息复位
		* 输入参数: connect_no	连接号		
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_ColdReset(UInt16 connect_no);		
		/*******************************************************************************
		* 函数名称: MC_WarmReset
		* 函数功能: 坐标系等信息复位
		* 输入参数: connect_no	连接号		
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_WarmReset(UInt16 connect_no);	

		/*********************************控制器信息******************************************/
		
		/*******************************************************************************
		* 函数名称: MC_GetConnectLineBoxState
		* 函数功能: 获取接线盒连接状态
		* 输入参数: connect_no	连接号		
		 			conState	连接状态
						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//接线盒连接运行错误阶段
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetConnectLineBoxState(UInt16 connect_no, UInt16[] conState);

		/*************************************************************
		* 函数名称: MC_GetTotalAxesAndIONum
		* 说明：获取，轴及IO口信息
		* 输入：connect_no	连接号
		* 输出：total_axes 轴数
		* liner_num 插补器数量
		* total_in_num 通用输入口数量
		* total_out_num 通用输出口数量
		* total_pwm_num PWM通道数量
		* 返回值：错误码
		*************************************************************/	
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetTotalAxesAndIONum(UInt16 connect_no, ref UInt16 total_axes, ref UInt16 liner_num, ref UInt16 total_in_num, ref UInt16 total_out_num, ref UInt16 total_pwm_num);
		/*************************************************************
		* 函数名称: MC_GetTotalAdAndDaNum
		* 说明：获取，模拟量信息
		* 输入：connect_no	连接号
		* 输出：total_ad_num AD通道数量
		* total_da_num DA通道数量
		* 返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetTotalAdAndDaNum(UInt16 connect_no, ref UInt16 total_ad_num, ref UInt16 total_da_num);
		/*************************************************************
		* 函数名称: MC_GetControllerVersion
        说明：获取控制系统版本信息
        输入：
		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

        输出：
        返回值：错误码
        *************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetControllerVersion(UInt16 connect_no, Byte[] product_type,Byte[] soft_version, ref UInt32 firmware_version, ref UInt32 dll_version);
		/*************************************************************
		* 函数名称: MC_GetProductID
		* 说明：获取控制产品型号
		* 输入：connect_no	连接号
		* 输出：product_id	产品ID
		* 返回值：错误码
		*************************************************************/	
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetProductID(UInt16 connect_no, ref UInt32 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	软件比较通道数量
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetCapComNum(UInt16 connect_no, ref UInt16 total_hs_cap_num, ref UInt16 total_hs_com_num,
														ref UInt16 total_soft_cap_num, ref UInt16 total_soft_com_num,
														ref UInt16 total_2d_hs_com_num, ref UInt16 total_2d_soft_com_num);
		/*******************************************************************************
		* 函数名称: MC_GetHandWheelEncNum
		* 函数功能: 获取手轮及编码器数

		* 输入参数: connect_no	连接号		

		WORD* total_handlewheel_num	手轮通道数量

		WORD* total_enc_num	辅助编码器通道数量
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetHandWheelEncNum(UInt16 connect_no, ref UInt16 total_handlewheel_num, ref UInt16 total_enc_num);

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

		/*************************************************************
		* 函数名称: MC_SetAxisVelSmooth
		说明：速度规划速度平滑
		输入：connect_no：连接号
		axis：轴号
		ifEnable：0表示禁止，1表示使能
		smTime :平滑时间，单位为s，最小值为0.001s
		输出：
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetAxisVelSmooth(UInt16 connect_no, UInt16 axis, UInt16 ifEnable, double smTime);
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetAxisVelSmooth(UInt16 connect_no, UInt16 axis, ref UInt16 ifEnable, ref 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: 最大加减速限制，设置值小于运动配置的加减速度值时，最大加减速度设置为其运动加减速度。
		输出：
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetAxisMotionPrm(UInt16 connect_no, UInt16 axis, double start_vel, double max_vel, double stop_vel, double t_acc, double t_dec, double s_ratio, double max_acc);
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetAxisMotionPrm(UInt16 connect_no, UInt16 axis, ref double start_vel, ref double max_vel, ref double stop_vel, ref double t_acc, ref double t_dec, ref double s_ratio, ref double max_acc);
		/*************************************************************
		* 函数名称: 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: 最大加减速限制，设置值小于运动配置的加减速度值时，最大加减速度设置为其运动加减速度。
		输出：
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetAxisMotionPrmAcc(UInt16 connect_no, UInt16 axis, double start_vel, double max_vel, double stop_vel, double acc, double dec, double s_ratio, double max_acc);
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetAxisMotionPrmAcc(UInt16 connect_no, UInt16 axis, ref double start_vel, ref double max_vel, ref double stop_vel, ref double acc, ref double dec, ref double s_ratio, ref double max_acc);

		/*******************************************************************************
		* 函数名称: 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		最大加速度
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_MoveAbsolute(UInt16 connect_no, UInt16 axis, double pos, double start_V, double stop_V, double Vel, double Acc, double Dec, double S_Ratio, double maxAcc);

		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_MoveRelative(UInt16 connect_no, UInt16 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		第二段目标位置；暂时不支持反向。
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_MoveMultiPos(UInt16 connect_no, UInt16 axis, UInt16 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_MovePos
		说明：单轴定长运动指令
		输入：connect_no	连接号
		axis	轴号
		pos_mode	0 表示 相对运动模式； 1表示 绝对运动模式
		pos	目标位置
		输出：
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_MovePos(UInt16 connect_no, UInt16 axis, UInt16 pos_mode, double pos);
		/*************************************************************
		* 函数名称: MC_MovePosMultiAxes
		说明：多轴定长运动指令
		输入：connect_no	连接号
		axis_num	运动轴数量
		axis	轴号列表
		pos_mode	运动模式列表 0 表示 相对运动模式； 1表示 绝对运动模式
		pos		运动距离列表
		输出：
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_MovePosMultiAxes(UInt16 connect_no, UInt16 axis_num, ref UInt16 axis, ref UInt16 pos_mode, ref 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		最大允许加速度
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_MoveVelocity(UInt16 connect_no, UInt16 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表示 正向；
		输出：
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_MoveVel(UInt16 connect_no, UInt16 axis, double vel);
		/*************************************************************
		* 函数名称: MC_MoveVelMultiAxes
		说明：多轴定长运动指令
		输入：connect_no	连接号
		axis_num	运动轴数量
		axis	运动轴号列表
		vel		轴运动速度列表(符号代表运动方向)
		输出：
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_MoveVelMultiAxes(UInt16 connect_no, UInt16 axis_num, ref UInt16 axis, ref double vel);
		/*************************************************************
		* 函数名称: MC_MoveUpdateVel
		说明：单轴运动改变速度
		输入：connect_no	连接号
		axis	轴号
		vel		目标速度
				当前为move velocity状态下 vel 中，vel > 0 为正向，< 0 为负向
				当前为move position 状态下 vel没有方向;
				轴未运动，该指令无效
		输出：
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_MoveUpdateVel(UInt16 connect_no, UInt16 axis, double vel);
		/*************************************************************
		* 函数名称: MC_MoveUpateVelRatio
		说明：单轴变倍率
		输入：connect_no	连接号
		axis	轴号
		ratio 	取值范围[0,];0表示暂停状态
				如果当前未运动，该指令无效
		输出：
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_MoveUpateVelRatio(UInt16 connect_no, UInt16 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：保留参数 	
		输出：
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_Home(UInt16 connect_no, UInt16 axis, UInt16 pos_object, UInt16 home_mode, int home_dir, UInt16 home_logic,UInt16 ez_count, UInt16 offset_mode, double pos_offset);
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetHomePrm(UInt16 connect_no, UInt16 axis, ref UInt16 pos_object, ref UInt16 home_mode, ref int home_dir, ref UInt16 home_logic, ref UInt16 ez_count, ref UInt16 offset_mode, ref double pos_offset);

		/*************************************************************
		* 函数名称: MC_GetHomeResult
		说明：回零结果函数
		输入：connect_no	连接号
		axis	轴号
		输出：complete_state	回零结果
				0,				//回零未完成
				1,				//回零完成，找到原点位置
				2,				//回零过程报错，没有原点信号
				3,				//回零过程发现设备有两个原点信号
				4, 				//回零过程没有发现EZ信号
				5,				//回零配置的方向错误
				6,				//回零过程限位停止
				7,				//超出软件限位范围
				100				//没有正常回零完成
		返回值：错误码
		*************************************************************/	
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetHomeResult(UInt16 connect_no, UInt16 axis, ref UInt16 complete_state);
		/**************************坐标系运动控制操作****************************************/
		/*************************************************************
		* 函数名称: MC_StopCrd
		说明：坐标系运动停止函数
		输入：connect_no	连接号
		crd		插补系号
		mode	停止模式
				0，减速停止
				1，立即停止
		stop_time	减速停止的停止时间(s)
		输出：
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_StopCrd(UInt16 connect_no, UInt16 crd, UInt16 stop_mode, double stop_time);

		/*************************************************************
		* 函数名称: MC_GetCrdStopModeTime
		说明：获取坐标系运动的停止模式和停止时间
		输入：connect_no	连接号
		crd		插补系号
		输出：mode	停止模式
				0，减速停止
				1，立即停止
		stop_time	减速停止的停止时间(s)
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetCrdStopModeTime(UInt16 connect_no, UInt16 crd, ref UInt16 stop_mode, ref double stop_time);
		/*************************************************************
		* 函数名称: MC_SetCrdStopTime
		说明：坐标系运动减速停止时间设置
		输入：connect_no	连接号
		crd		插补系号
		stop_time	减速停止的停止时间(s)
		输出：
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetCrdStopTime(UInt16 connect_no, UInt16 crd, 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		插补系状态
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetCrdCheckDone(UInt16 connect_no, UInt16 crd, ref UInt16 crd_state);
		/*************************************************************
		* 函数名称: MC_GetCrdCmdSpeed
		说明：读取当前插补器速度
		输入：connect_no	连接号
		crd		插补系号
		输出：speed		插补系当前速度
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetCrdCmdSpeed(UInt16 connect_no, UInt16 crd, ref double speed);

		
		/*************************************************************
		* 函数名称: MC_SetCrdVelSmooth
		说明：速度规划速度平滑
		输入：connect_no	连接号
		crd		插补系号
		ifEnable：0表示禁止，1表示使能
		smTime :平滑时间(s)
		输出：
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetCrdVelSmooth(UInt16 connect_no, UInt16 crd, UInt16 ifEnable, double smTime);
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetCrdVelSmooth(UInt16 connect_no, UInt16 crd, ref UInt16 ifEnable, ref 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: 最大加减速限制，设置值小于运动配置的加减速度值时，最大加减速度设置为其运动加减速度。
		输出：
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetCrdMotionPrm(UInt16 connect_no, UInt16 crd, double start_vel, double max_vel, double stop_vel, double t_acc, double t_dec, double s_ratio, double max_acc);
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetCrdMotionPrm(UInt16 connect_no, UInt16 crd, ref double start_vel, ref double max_vel, ref double stop_vel, ref double t_acc, ref double t_dec, ref double s_ratio, ref double max_acc);

		/*************************************************************
		* 函数名称: MC_SetCrdMotionPrmAcc
		说明：运动按加减速单位设置插补系运动参数
		输入：connect_no	连接号
			crd		插补系号
			start_vel: 启动速度 
			max_vel：最大允许允许速度 最大值为10M；最小值大于0
			stop_vel：停止速度
			acc：加速度
			dec：减速度
			s_para：s型曲线参数配置 最大值1，最小值为0；如果设置该值为零时，为T形速度曲线，不为零时，表示S型曲线
			maxAcc: 最大加减速限制，设置值小于运动配置的加减速度值时，最大加减速度设置为其运动加减速度。
		输出：
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetCrdMotionPrmAcc(UInt16 connect_no, UInt16 crd, double start_vel, double max_vel, double stop_vel, double acc, double dec, double s_ratio, double max_acc);
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetCrdMotionPrmAcc(UInt16 connect_no, UInt16 crd, ref double start_vel, ref double max_vel, ref double stop_vel, ref double acc, ref double dec, ref double s_ratio, ref double max_acc);

		/*************************************************************
		* 函数名称: MC_MoveLinear
		说明：直线插补命令
		输入：connect_no	连接号
			Crd：坐标系号
			AxisNum：轴数
			AxisList：轴列表
			Dist：目标位置信息列表
			crd_mode：0表示相对运动，1表示绝对运动
		输出：
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_MoveLinear(UInt16 ConnectNo, UInt16 Crd, UInt16 AxisNum, UInt16[] AxisList, double[] Dist, UInt16 Crd_Mode);
		/*************************************************************
		* 函数名称: MC_MovePlaneArcC
		说明：终点圆心的圆弧插补函数
		输入：connect_no	连接号
		Crd	插补系号
		AxisNum：轴数；
		AxisList：插补轴列表，超过三轴的其它轴为跟随轴；
		Target_Pos：目标位置；
		Cen_Pos：圆心位置；
		Arc_Dir：圆弧插补方向；分为顺时针，和逆时针；
		Circle：插补圈数；
		Crd_Mode：插补的位置模式；0表示相对运动，1表示绝对运动
		输出：无
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_MovePlaneArcC(UInt16 ConnectNo, UInt16 Crd, UInt16 AxisNum, UInt16[] AxisList, double[] Target_Pos, double[] Cen_Pos, UInt16 Arc_Dir, UInt32 Circle, UInt16 Crd_Mode);
		/*************************************************************
		* 函数名称: MC_MovePlaneArcR
		说明：终点半径圆弧插补函数
		输入：connect_no	连接号
			Crd		插补系号
			AxisNum：轴数；
			AxisList：插补轴列表，超过三轴的其它轴为跟随轴；
			Target_Pos：目标位置；
			Arc_Radius：圆弧半径
			Arc_Dir:0 表示劣弧，1表示优弧
			Circle：插补圈数；
			Crd_Mode：插补的位置模式；0表示相对运动，1表示绝对运动
		输出：无
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_MovePlaneArcR(UInt16 ConnectNo, UInt16 Crd, UInt16 AxisNum, UInt16[] AxisList, double[] Target_Pos, double Arc_Radius, UInt16 Arc_Dir, UInt32 Circle, UInt16 Crd_Mode);
		/*************************************************************
		* 函数名称: MC_MovePlaneArc3P
		说明：三点圆弧插补函数
		输入：connect_no	连接号
			Crd		插补系号
			AxisNum：轴数；
			AxisList：插补轴列表，超过三轴的其它轴为跟随轴；
			Target_Pos：目标位置；
			Mid_Pos：圆弧中点位置
			Circle：插补圈数；
			Crd_Mode：插补的位置模式；0表示相对运动，1表示绝对运动
		输出：无
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_MovePlaneArc3P(UInt16 ConnectNo, UInt16 Crd, UInt16 AxisNum, UInt16[] AxisList, double[] Target_Pos, double[] Mid_Pos, UInt32 Circle, UInt16 Crd_Mode);

		/*************************************************************
		* 函数名称: MC_MoveSpaceArcC
		说明：终点圆心的空间圆弧插补函数
		输入：connect_no	连接号
		Crd		插补系号
		AxisNum：轴数；
		AxisList：插补轴列表，超过三轴的其它轴为跟随轴；
		Target_Pos：目标位置；
		Cen_Pos：圆心位置；
		Arc_Dir：圆弧插补方向；0分为顺时针，1逆时针；
		Circle：插补圈数；
		Crd_Mode：插补的位置模式；
		输出：无
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_MoveSpaceArcC(UInt16 ConnectNo, UInt16 Crd, UInt16 AxisNum, UInt16[] AxisList, double[] Target_Pos, double[] Cen_Pos, UInt16 Arc_Dir, UInt32 Circle, UInt16 Crd_Mode);

		/*************************************************************
		* 函数名称: MC_MoveSpaceArc3P
		说明：三点圆弧空间插补函数
		输入：connect_no	连接号
			Crd		插补系号
			AxisNum：轴数；
			AxisList：插补轴列表，超过三轴的其它轴为跟随轴；
			Target_Pos：目标位置；
			Mid_Pos：圆弧中点位置
			Circle：插补圈数；
			Crd_Mode：插补的位置模式；0表示相对运动，1表示绝对运动
		输出：无
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_MoveSpaceArc3P(UInt16 ConnectNo, UInt16 Crd, UInt16 AxisNum, UInt16[] AxisList, double[] Target_Pos, double[] Mid_Pos, UInt32 Circle, UInt16 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：插补的位置模式；
		输出：无
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_MovePlaneEllipse(UInt16 ConnectNo, UInt16 Crd, UInt16 AxisNum, UInt16[] AxisList, double[] Target_Pos, double[] Cen_Pos, double a_len, double b_len, UInt16 Arc_Dir, UInt32 Circle, UInt16 Crd_Mode);
		/*******************************************************************************
		* 函数名称: MC_GetCrdStatus
		* 函数功能: 获取插补器的工作状态
		* 输入参数: connect_no	连接号		
		WORD Crd	插补系号
		输出：		
		WORD* runningState		当前插补器的工作状态，0表示运行，1表示停止
		DWORD* mark		当前插补段的段号，如果是单段插补，返回1
		WORD* runningMode		当前插补器工作的模式
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetCrdStatus(UInt16 ConnectNo, UInt16 Crd, ref UInt16 runningState, ref UInt32 mark, ref UInt16 runningMode);

		/*******************************************************************************
		* 函数名称: MC_GetCrdBufStatus
		* 函数功能: 连续插补模式下，获取buffer的空间大小
		* 输入参数: connect_no	连接号		
		WORD Crd	插补系号
		输出：	
		UInt16 curRunningMark	 当前执行的插补段mark
		WORD* freeSpace		剩余空间
		WORD* usedSpace		已用空间
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetCrdBufStatus(UInt16 ConnectNo, UInt16 Crd, ref UInt16 curRunningMark, ref UInt16 freeSpace, ref UInt16 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		该段的最大停止速度
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_MoveContiLinear(UInt16 ConnectNo, UInt16 Crd, UInt16 AxisNum, UInt16[] AxisList, double[] Dist, UInt16 Crd_Mode, UInt32 mark, UInt16 linkToLast, double feedVel, double endVel);
		/*******************************************************************************
		* 函数名称: MC_SetCrdCmdWait
		* 函数功能: 设置连续插补时，等待上位机指令启动运动。
		* 输入参数: connect_no	连接号		
		Crd		插补系号
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetCrdCmdWait(UInt16 ConnectNo, UInt16 Crd);

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

		* 输入参数: connect_no	连接号		
		Crd		插补系号
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetCrdCmdStart(UInt16 ConnectNo, UInt16 Crd);

		/*******************************************************************************
		* 函数名称: MC_SetCrdLookAhead
		* 函数功能: 配置连续前瞻插补的模式
		* 输入参数: connect_no	连接号		
		WORD Crd	插补系号	
		WORD lookaheadMode	前瞻插补模式，0表示连续插补，1表示前瞻处理插补	
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetCrdLookAhead(UInt16 ConnectNo, UInt16 Crd, UInt16 lookaheadMode);
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetCrdLookAhead(UInt16 ConnectNo, UInt16 Crd, ref UInt16 lookaheadMode);
		/*******************************************************************************
		* 函数名称: MC_SetCrdCornerPrm
		* 函数功能: 设置前瞻处理的拐角参数

		* 输入参数: connect_no	连接号		
		WORD Crd		插补系号
		WORD cornerFlag		拐角处理，0表示处理，1表示不处理
		double maxPathError		最大轨迹误差
		double maxVelLimit		最大速度限制
		double maxAccLimit		最大加速度限制
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetCrdCornerPrm(UInt16 ConnectNo, UInt16 Crd, UInt16 cornerFlag, double maxPathError,
											double maxVelLimit, double maxAccLimit);

		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetCrdCornerPrm(UInt16 ConnectNo, UInt16 Crd, ref UInt16 cornerFlag, ref double maxPathError,
											ref double maxVelLimit, ref double maxAccLimit);

		/**************************轴状态和参数信息****************************************/
		/*************************************************************
		* 函数名称: MC_Power
		说明：轴使能,在使用轴之前需要先使能轴控制
		输入：ifEnable: 0表示使能，1表示使能
		输出：无
		返回值：
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_Power(UInt16 connect_no, UInt16 axis, UInt16 ifEnable);
		/*******************************************************************************
		* 函数名称: MC_SetPulseMode
		* 函数功能: 脉冲输出模式配置

		* 输入参数: connect_no	连接号		
		axis	轴号	
		pulse_mode	脉冲模式
			0	脉冲高+方向高
			1	脉冲低+方向高
			2	脉冲高+方向低
			3	脉冲低+方向低
			4	双脉冲高
			5	双脉冲低
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetPulseMode(UInt16 connect_no, UInt16 axis, UInt16 pulse_mode);
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetPulseMode(UInt16 connect_no, UInt16 axis, ref UInt16 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： 计数方向取反
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetEncodeMode(UInt16 connect_no, UInt16 axis, UInt16 enc_mode, UInt16 enc_dir);
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetEncodeMode(UInt16 connect_no, UInt16 axis, ref UInt16 enc_mode, ref UInt16 enc_dir);


		/*************************************************************
		* 函数名称: MC_GetAxisMachineState
		说明：获取轴的状态机
		输入：connect_no	连接号
		axis	轴号
		输出：Axis_state	轴状态机
			0	轴运动中
			1	轴等待运动中
			2	402轴限位
			3	轴暂停中
			4	轴停止过程中
			5	轴未使能
			6	轴不存在
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetAxisMachineState(UInt16 connect_no, UInt16 axis, ref UInt16 Axis_state);
		/*************************************************************
		* 函数名称: MC_GetAxisCheckDone
		说明：判断轴是否运动完成,
		输入：connect_no	连接号
		axis	轴号
		输出：CheckDone
			0	表示运行
			1	表示使能并空闲状态
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetAxisCheckDone(UInt16 connect_no, UInt16 axis, ref UInt16 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 = 五轴+法向跟随
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetAxisMotionMode(UInt16 connect_no, UInt16 axis, ref UInt16 Motion_Mode);

		/*************************************************************
		* 函数名称: MC_SetAxisEquvi
		说明：设置轴当量
		输入：connect_no	连接号
		axis	轴号
		equvi	当量设置，最小值为0.001，最大值为100000
		输出：无
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetAxisEquvi(UInt16 connect_no, UInt16 axis, double equvi);
		/*************************************************************
		* 函数名称: MC_GetAxisEquvi
		说明：获取轴当量
		输入：connect_no	连接号
		axis	轴号
		输出：equvi	当量获取
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetAxisEquvi(UInt16 connect_no, UInt16 axis, ref double equvi);
		/*************************************************************

		/*************************************************************
		* 函数名称: MC_StopAxis
		说明：根据配置的停止方式，停止时间启动运动停止
		输入：connect_no	连接号
		axis	轴号
		stop_mode :0表示减速停止，1表示急停；stop_time单位为s
				轴在运动中时，执行一次运动停止，并且配置停止参数；
				轴在停止状态时，配置停止参数
		输出：无
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_StopAxis(UInt16 connect_no, UInt16 axis, UInt16 stop_mode, double stop_time);

		/*************************************************************
		* 函数名称: MC_GetAxisStopModeTime
		说明：获取轴停止方式，减速停止时间设置
		输入：connect_no	连接号
		axis	轴号
		输出：mode	轴停止模式
		stop_time	轴减速停止时间
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetAxisStopModeTime(UInt16 connect_no, UInt16 axis, ref UInt16 stop_mode, ref double stop_time);
		/*******************************************************************************
		* 函数名称: MC_SetAxisStopTime
		* 函数功能: 设置轴减速停止时间，单位为s
		* 输入参数: connect_no	连接号
		axis	轴号
		stop_time	减速停止时间
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetAxisStopTime(UInt16 connect_no, UInt16 axis, double stop_time);
		/*************************************************************
		* 函数名称: MC_StopEmgImd
		说明：紧急停止所有轴运动
		输入：connect_no	连接号
		输出：无
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_StopEmgImd(UInt16 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: 运动过大，异常停止
		}
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetAxisStopReason(UInt16 connect_no, UInt16 axis, ref UInt32 stop_reason);
		/*************************************************************
		* 函数名称: MC_ClearAxisStopReason
		说明：清除停止原因
		输入：connect_no	连接号
		axis	轴号
		输出：无
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_ClearAxisStopReason(UInt16 connect_no, UInt16 axis);
		/*************************************************************
		* 函数名称: MC_GetAxisCmdPos
		说明：读取当前指令位置
		输入：connect_no	连接号
		axis	轴号
		输出：cmd_pos	当前指令位置
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetAxisCmdPos(UInt16 connect_no, UInt16 axis, ref double cmd_pos);
		/*************************************************************
		* 函数名称: MC_GetAxisCmdSpeed
		说明：读取当前速度
		输入：connect_no	连接号
		axis	轴号
		输出：speed		当前速度
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetAxisCmdSpeed(UInt16 connect_no, UInt16 axis, ref double speed);
		
		/*************************************************************
		* 函数名称: MC_GetAxisFeedbackPos
		说明：读取反馈位置
		输入：connect_no	连接号
		axis	轴号
		输出：feedback_pos	反馈位置
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetAxisFeedbackPos(UInt16 connect_no, UInt16 axis, ref double feedback_pos);

		/*************************************************************
		* 函数名称: MC_SetAxisCmdPos
		说明：设置当前指令位置
		输入：connect_no	连接号
		axis	轴号
		cmd_pos	位置值
		输出：无
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetAxisCmdPos(UInt16 connect_no, UInt16 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 = 立即停止
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetAxisSoftELPrm(UInt16 connect_no, UInt16 axis, UInt16 enable, UInt16 pos_src, double max_pos, double min_pos, UInt16 stop_mode);

		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetAxisSoftELPrm(UInt16 connect_no, UInt16 axis, ref UInt16 enable, ref UInt16 pos_src, ref double max_pos, ref double min_pos, ref UInt16 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表示急停
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetLimitArcPrm(UInt16 connect_no, UInt16 enable, UInt16[] axis_list, double[] arc_cen, double limit_radius, UInt16 pos_src, UInt16 stop_mode);
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetLimitArcPrm(UInt16 connect_no, ref UInt16 enable, UInt16[] axis_list, double[] arc_cen, ref double limit_radius, ref UInt16 pos_src, ref UInt16 stop_mode);


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

		/*************************************************************
		* 函数名称: MC_GetInIoBit
		说明：获取输入口状态
		输入： connect_no	连接号
		io索引 PMC2012范围0~15
		输出：IoState	输入口状态
			0-低电平
			1- 高电平
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetInIoBit(UInt16 connect_no, UInt32 io_index, ref byte IoState);
		/*************************************************************
		* 函数名称: MC_GetInIoPort
		说明：读输入口,一次读取32位
		输入：connect_no	连接号
		port_index	端口索引 = 要读取的输入口%32， 
		输出：IoState 输入口状态，bit0对应Input0
				0-低电平
				1- 高电平
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetInIoPort(UInt16 connect_no, UInt32 port_index, ref UInt32 IoState);
		/*******************************************************************************
		* 函数名称: MC_GetInIoPtr
		* 函数功能: 按起始地址读取IO状态，最多一次读取64点

		* 输入参数: connect_no	连接号		
		start_index		起始索引	
		io_num		读取数量	
		输出：IoState	获取到的输入口状态，bit0对应Input(start_index)
				0-低电平
				1- 高电平
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetInIoPtr(UInt16 connect_no, UInt32 start_index, UInt32 io_num, ref UInt64 IoState);

		/*************************************************************
		* 函数名称: MC_SetOutIoBit
		说明：设置输出口电平
		输入：connect_no	连接号
		io_index	输出口索引
		IoState		写入状态 
					0-低电平
					1- 高电平
		输出：
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetOutIoBit(UInt16 connect_no, UInt32 io_index, byte IoState);
		/*************************************************************
		* 函数名称: MC_SetOutIoPort
		说明：写输出口,一次32点
		输入：connect_no	连接号
		port_index	端口索引 = 要设置的输出口%32 
		IoState	设置的输出口状态,bit0对应Output0
				0-低电平
				1- 高电平
		输出：
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetOutIoPort(UInt16 connect_no, UInt32 port_index, UInt32 IoState);
		/*******************************************************************************
		* 函数名称: MC_SetOutIoPtr
		* 函数功能: 根据起始IO序号，连续写多个IO点的状态，多个IO点写入相同的状态，最多连续写64点；
		* 输入参数: connect_no	连接号
		start_index	起始索引	
		IoState	需要写入的IO状态
		IoMask	bit位为零表示保持原来状态，为1表示写入IoState状态
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetOutIoPtr(UInt16 connect_no, UInt32 start_index, byte IoState, UInt64 IoMask);
		/*************************************************************
		* 函数名称: MC_GetOutIoBit
		说明：读输出口状态
		输入：connect_no	连接号
		io_index	输出口索引(从0开始)
		输出：IoState输出口状态
				0-低电平
				1- 高电平
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetOutIoBit(UInt16 connect_no, UInt32 io_index, ref byte IoState);

		/*************************************************************
		* 函数名称: MC_GetOutIoPort
		说明：读输出口状态,一次读取32点
		输入：connect_no	连接号
		port_index	端口索引 = 要读取的输出口%32 
		输出：IoState	返回输出口的状态，bit0对应Output0
			0-低电平
			1- 高电平
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetOutIoPort(UInt16 connect_no, UInt32 port_index, ref UInt32 IoState);
		/*******************************************************************************
		* 函数名称: MC_GetOutIoPtr
		* 函数功能: 按起始地址读取IO状态，最多一次读取64点
		* 输入参数: connect_no	连接号		
		start_index		起始索引
		io_num		读取数量
		IoState		返回读取到的输出口状态,bit0对应Output(start_index)
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetOutIoPtr(UInt16 connect_no, UInt32 start_index, UInt32 io_num, ref UInt64 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
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32  MC_SetIOCountPrm(UInt16 connect_no, UInt16 io_index, UInt16 enable, UInt16 counter_mode,UInt32 filter);
		[DllImport("mcdll.dll")]
		public static extern UInt32  MC_GetIOCountPrm(UInt16 connect_no, UInt16 io_index, ref UInt16 enable, ref UInt16 counter_mode, ref UInt32 filter);


		/*******************************************************************************
		* 函数名称: MC_GetIOCountValue
		* 函数功能: 获取当前IO的计数值
		* 输入参数: WORD connect_no	连接号
		DWORD io_index	 输入口号(从0开始)
		DWORD* io_count	返回计数值
		* 返 回 值: 错误码
		* 创 建 人: lhm
		* 创建时间: 2023-7-31
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32  MC_GetIOCountValue(UInt16 connect_no, UInt16 io_index, ref UInt32 io_count);
		[DllImport("mcdll.dll")]
		public static extern UInt32  MC_SetIOCountValue(UInt16 connect_no, UInt16 io_index, UInt32 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点	
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetReuseIoMap(UInt16 connect_no, UInt16 io_index, UInt16 map_io_type, UInt32 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	映射索引		
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetReuseIoMap(UInt16 connect_no, UInt16 io_index, ref UInt16 map_io_type, ref UInt32 map_index);

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

		* 输入参数: WORD connect_no		连接号
		DWORD io_index		虚拟IO索引	
		输出：IoState	状态
				0 低电平
				1 高电平
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetReuseInIoBit(UInt16 connect_no, UInt32 io_index, ref byte IoState);

		/**
		* @brief 复位虚拟IO配置
		* @param connect_no 连接号
		* @param io_index 虚拟IO索引
		* @return 错误码
		*/
		[DllImport("mcdll.dll")]
		public static extern UInt32  MC_ResetReuseInIo(UInt16 connect_no, UInt32 io_index);

		/*********************** 轴控制IO信号 操作部分  ************************/
		/*******************************************************************************
		* 函数名称: MC_SetAxisOutIo
		* 函数功能: 设置轴的专用输出口电平
		* 输入参数: WORD connect_no		连接号
		WORD axis		轴号
		WORD axis_io_type		轴IO类型 
				0,//伺服使能
				1//伺服报警清除
		WORD io_level	输出电平，0表示低电平；1表示高电平	
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetAxisOutIo(UInt16 connect_no,UInt16 axis,UInt16 axis_io_type, UInt16 io_level);
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetAxisOutIo(UInt16 connect_no,UInt16 axis,UInt16 axis_io_type, ref UInt16 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为立即停止
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetAxisInIoPrm(UInt16 connect_no, UInt16 axis, UInt16 axis_io_type, UInt16 enable, UInt16 io_logical, UInt16 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为立即停止	
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetAxisInIoPrm(UInt16 connect_no, UInt16 axis, UInt16 axis_io_type, ref UInt16 enable, ref UInt16 io_logical, ref UInt16 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口号，
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetAxisInIoMap(UInt16 connect_no, UInt16 axis, UInt16 axis_io_type, UInt16 map_io_type, UInt32 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索引	
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetAxisInIoMap(UInt16 connect_no, UInt16 axis, UInt16 axis_io_type, ref UInt16 map_io_type, ref UInt32 map_index);

		/**
		* @brief 复位轴专用信号映射配置
		* @param connect_no 卡的连接号
		* @param axis 轴号(从0开始)
		* @return 错误码
		*/
		[DllImport("mcdll.dll")]
		public static extern UInt32  MC_ReSetAxisInIoMap(UInt16 connect_no, UInt16 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+
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetAxisInIoState(UInt16 connect_no, UInt16 axis, ref UInt32 in_io_state);
		/*************************************************************
		* 函数名称: MC_GetAxisAlarmState
		说明：获取轴伺服报警信号(ALM)状态
		输入：connect_no		连接号
		axis	轴号
		输出：alarm_state 信号状态
				0-无效
				1- 有效
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetAxisAlarmState(UInt16 connect_no, UInt16 axis, ref byte alarm_state);

		/*************************************************************
		* 函数名称: MC_GetAxisHomeState
		说明：获取轴原点信号(ORG)状态
		输入： connect_no		连接号
		axis	轴号
		输出：home_state	信号状态
				0-无效
				1- 有效
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetAxisHomeState(UInt16 connect_no, UInt16 axis, ref byte home_state);

		/*************************************************************
		* 函数名称: MC_GetAxisELState
		说明：获取轴硬件限位(EL)状态
		输入：connect_no		连接号
		axis	轴号
		输出：el_minus_state	负限位状态
				0-无效
				1- 有效
			el_plus_state	正限位状态
				0-无效
				1- 有效
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetAxisELState(UInt16 connect_no, UInt16 axis, ref byte el_minus_state, ref byte el_plus_state);


		/*************************************************************
		* 函数名称: MC_GetAxisInpState
		说明：读取轴伺服到位信号(INP)状态
		输入：connect_no		连接号
		axis	轴号
		输出：inp_state		信号状态
				0-无效
				1- 有效
		返回值：错误码
		*************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetAxisInpState(UInt16 connect_no, UInt16 axis, ref 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： 计数方向取反
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_SetAuxEncoderPrm(UInt16 connect_no, UInt16 channel, UInt16 mode, UInt16 dir);
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetAuxEncoderPrm(UInt16 connect_no, UInt16 channel, ref UInt16 mode, ref UInt16 dir);

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

 
		/*******************************************************************************
		* 函数名称: 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,  //编码器源
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_StartCapture(UInt16 connect_no, UInt16 cap_object,  UInt16 cap_axis, UInt16 cap_chan,  UInt16 cap_io, UInt16 cap_mode, UInt16 cap_logic, UInt16 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,  //编码器源		
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetCapturePrm(UInt16 connect_no, UInt16 cap_object,UInt16 cap_axis,  UInt16 cap_chan, ref UInt16 cap_io, ref UInt16 cap_mode, ref UInt16 cap_logic, ref UInt16 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		捕获到的数据点数
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetCaptureCount(UInt16 connect_no, UInt16 cap_object, UInt16 cap_axis, UInt16 cap_chan, ref UInt32 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		读取到的位置数组
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetCapturePos(UInt16 connect_no, UInt16 cap_object, UInt16 cap_axis,UInt16 cap_chan,  UInt16 read_cap_counts, ref UInt16 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 捕获轴	
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_ReStartCapture(UInt16 connect_no, UInt16 cap_object, UInt16 cap_axis, UInt16 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 捕获轴	
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_StopCapture(UInt16 connect_no, UInt16 cap_object, UInt16 cap_axis, UInt16 cap_chan);
        #endregion
        #region compare_function


		/*******************************************************************************
		* 函数名称: MC_StartHSCmp
		* 函数功能: 停止高速比较口功能
		* 输入参数: WORD connect_no		连接号	
		WORD cmp_dim  比较维数  
				1, //一维比较
				2 //二维比较
		WORD cmp_chan	高速比较口0~3；对应IO序号index：12~15
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_StopHSCmp(UInt16 connect_no, UInt16 cmp_dim, UInt16 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  触发参数(输出端口号)
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetHSCmpPrm(UInt16 connect_no,UInt16 cmp_dim, UInt16 cmp_hs_io, UInt16[] cmp_mode, UInt16[] axis, 
													   UInt16[] cmp_source, ref UInt16 trigger_mode, ref UInt32 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)
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_StartHS1DCmp(UInt16 connect_no, UInt16 cmp_hs_io, UInt16 cmp_axis, UInt16 pos_src,  UInt32 cmp_counts, double[] cmp_pos,
														UInt16 cmp_mode, UInt16 trigger_mode, UInt32 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		剩余比较点个数
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetHSCmpStatus(UInt16 connect_no, UInt16 cmp_dim, UInt16 cmp_hs_io, ref UInt16 enable, ref double running_pos, ref UInt32 completed_points, ref UInt32 remained_points);

		/*******************************************************************************
		* 函数名称: MC_ClearHSCmp
		* 函数功能: 清除比较结果，重新比较一次
		* 输入参数: WORD connect_no		连接号
		WORD cmp_dim		
				1, //一维比较
				2 //二维比较
		WORD cmp_hs_io		高速比较口0~3；对应IO序号index：12~15
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_ClearHSCmp(UInt16 connect_no, UInt16 cmp_dim,	UInt16 cmp_hs_io);

		/*******************************************************************************
		* 函数名称: MC_StopSoftCmp
		* 函数功能: 停止比较
		* 输入参数: WORD connect_no		连接号
		WORD cmp_dim		
				1, //一维比较
				2 //二维比较
		WORD cmp_chan 比较通道,	一维软件比较：取值范围(0,3)；二维软件比较：取值范围(0,1)；
		* 返 回 值:错误码 
		*******************************************************************************/
        [DllImport("mcdll.dll")]
		public static extern UInt32 MC_StopSoftCmp(UInt16 connect_no,UInt16 cmp_dim, UInt16 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  触发参数
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetSoftCmpPrm(UInt16 connect_no,UInt16 cmp_dim, UInt16 cmp_hs_io, UInt16[] cmp_mode, UInt16[] axis, 
													    UInt16[] cmp_source, ref UInt16 trigger_mode, ref UInt32 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		剩余比较点
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetSoftCmpStatus(UInt16 connect_no,UInt16 cmp_dim, UInt16 cmp_chan, ref UInt16 enable, ref double running_pos, ref UInt32 completed_points, ref UInt32 remained_points );
		/*******************************************************************************
		* 函数名称: MC_ClearSoftCmp
		* 函数功能: 清除所有配置的比较点
		* 输入参数: WORD connect_no		连接号
		WORD cmp_dim		
				1, //一维比较
				2 //二维比较
		WORD cmp_chan 比较通道,	取值范围(0,3)；
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_ClearSoftCmp(UInt16 connect_no,UInt16 cmp_dim, UInt16 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	脉冲输出的时间	
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_StartSoft1DCmp(UInt16 connect_no,UInt16 cmp_chan, UInt16 cmp_axis, UInt16 pos_src,  UInt32 cmp_counts, double[] cmp_pos,
																UInt16 cmp_mode, UInt16 trigger_mode, UInt32 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	脉冲输出的时间	
		* 返 回 值:错误码 
		*******************************************************************************/
		[DllImport("mcdll.dll")]
		public static extern UInt32 MC_StartSoft2DCmp(UInt16 connect_no, UInt16 chan, UInt16[] axis, UInt16[] pos_src, UInt32 cmp_count, double[] pos, UInt16[] cmp_mode, UInt16 trigger_mode, UInt32 trigger_prm, double out_time);

       #endregion

		#region Pwm_function		
		/*******************************************************************************
		* 函数名称: 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 = (高电平时刻 / 脉冲总时刻)	
		* 返 回 值:错误码 
		*******************************************************************************/
        [DllImport("mcdll.dll")]
		public static extern UInt32 MC_StartPwm(UInt16 connect_no, UInt16 pwm_chan_type, UInt16 pwm_chan, UInt16 enable,UInt16 init_pin, double frequency, double duty);
		
        [DllImport("mcdll.dll")]
		public static extern UInt32 MC_GetPwmPrm(UInt16 connect_no,UInt16 pwm_chan_type, UInt16 pwm_chan, ref UInt16 enable,ref UInt16 init_pin, ref double frequency, ref double duty);
		#endregion

	}
}
