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

namespace nRTMC //命名空间根据应用程序修改
{
    //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通讯
        public const ushort CONNECTION_MC_SIMULINK = 10;//运动控制算法仿真
    }

    //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 EMG_INDEX = 4;//急停信号
        public const ushort ALM_INDEX = 5;//伺服报警
        public const ushort RDY_INDEX = 6;//伺服准备
        public const ushort SD_INDEX = 7;//减速信号
        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 const ushort Axis_Halt = 2;//暂停
    }

    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 Equi_Compare_Value = 1; //等于比较点模式
        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

    #region 函数返回错误码
    public enum ERROR_CODE
	{
		SUCCESS = 0,
		ERR_CMD_UNKNOWN = 10001,
		ERR_CMD_PARAERR = 10002,
		ERR_CMD_TIMEOUT = 10003,
		ERR_CMD_CONTROLLER_BUSY = 10004,
		ERR_CMD_CONNECT_TOO_MANY = 10005,
		ERR_CMD_OS_ERR = 10006,
		ERR_CMD_CANNOT_OPEN_COM = 10007,
		ERR_CMD_CANNOT_CONNECTETH = 10008,
		ERR_CMD_HANDLE_ERR = 10009, //错误
		ERR_CMD_SEND_ERR = 10010, //
		ERR_CMD_GFILE_ERR = 10011, //G文件语法错误
		ERR_CMD_FIRMWARE_ERR = 10012, //固件文件错误
		ERR_CMD_FILENAME_TOO_LONG = 10013, //文件名太长
		ERR_CMD_FIRMWAR_MISMATCH = 10014, //固件文件不匹配
		ERR_CMD_CARD_NOT_SUPPORT = 10015, //对应的卡不支持这个功能
		ERR_CMD_BUFFER_TOO_SMALL = 10016, //输入的缓冲太小
		ERR_CMD_NEED_PASSWORD = 10017,    //密码保护
		ERR_CMD_PASSWORD_ENTER_TOO_FAST = 10018,    //密码输入太快
		ERR_CMD_GET_LENGTH_ERR = 10019, //收到的数据包的长度错误， 这个测试完成后不会出现, 字符串接口时可能超过缓冲长度
		ERR_CMD_COMPILE_OFFSET = 10020, //文件编译错误
		ERR_CMD_CONTROLLERERR_OFFSET = 10021, //控制器上面传来的错误，加上这个偏移
		ERR_CMD_NULL_POINTER = 10030, //输入参数的地址为空指针
		ERR_CMD_NULL_POINTER_MISMATCH = 10031, //输入指针长度，与数据不符合
		ERR_CMD_READ_CARD_ID_ERROR = 10032, //从卡上读回来的卡号超过最大限制
		ERR_CMD_Send_Beyond_Max_Bytes = 10033, //发送的数据长度超过最大值限制

		ERR_INPUT_AXIS_OUT_LIMIT = 10101, //输入的轴数超过最大限制
		ERR_INPUT_NULL_POINTER = 10102, //输入参数的地址为空指针
		ERR_INPUT_PARA_INVALID = 10103, //输入参数无效,输入卡号错误，或者没有开卡等
		ERR_INPUT_PARA_DIR_INVALID = 10104, //输入参数的vmove的方向无效
		ERR_INPUT_CONTROLLER_OUT_LIMIT = 10105, //输入的卡号超过最大限制
		ERR_INPUT_FIND_CONNECTOR_ETH = 10106, //搜索EtherNET时间超时
		ERR_INPUT_OUT_IO_LIMIT = 10107, //输入的输出IO数超过最大限制
		ERR_INPUT_IN_IO_LIMIT = 10108, //输入的输入IO数超过最大限制
		ERR_CONNECT_ID_RUNNING = 10109, //输入的控制器ID，显示在运行中	
		ERR_SIMULINK_NOT_SUPPORT = 10110,//仿真模式下，不支持该功能
		ERR_CRD_DIM = 10111,//坐标系维数错误

		ERR_PCI_DRIVER_OPEN_CARD = 10200, //开卡失败,或者开卡不成功
		ERR_PCI_DRIVER_OPEN_SIGNAL = 10201, //开卡时打开互斥信号量失败
		ERR_PCI_DRIVER_CREAT_SHARE_MEN = 10202, //开卡时创建共享内存失败
		ERR_PCI_DRIVER_CLOSE_CARD = 10203, //关卡失败
		ERR_PCI_DRIVER_BEYOND_MAX_LENTH = 10204, //超过最大传输数据长度
		ERR_PCI_DRIVER_BEYOND_MAX_CARD = 10205, //超过最大卡号限制
		ERR_PCI_DRIVER_ARM_HANDLE_TIMEOUT = 10206, //arm端处理数据超时，1.可能arm没有跑起来，2.arm端后台执行时间不够
		ERR_PCI_DRIVER_SEND_TIMEOUT = 10207, //发送数据超时,可能PCI的驱动安装不正确
		ERR_PCI_DRIVER_SEND_DATA_BEYOND_LEN = 10208, //需要发送的数据长度超过最大长度限制

	}
	#endregion


	public class RTMC
	{
        /**************************连接控制器操作****************************************/
        /*************************************************************
		说明：通过连接操作函数
		输入：
			WORD connect_no 连接的ID号：连接模式为CONNECTION_ETH情况下的设置ID号
										连接模式为CONNECTION_PCI情况下为空值

			type：连接类型  
				typedef enum 
				{
					CONNECTION_ETH = 1,//网络通讯
					CONNECTION_PCI = 2,//PCI通讯
					CONNECTION_MC_SIMULINK = 10	//运动控制算法仿真
				}enum_Connect_Type;

			*pconnectstring：连接类型为 	ethernet通讯的IP地址: "192.168.1.2"
			WORD* PcieNum ; 返回PCIe通讯控制器数
			WORD* PcieIndex;返回PCIe通讯控制器ID号
		输出：
		返回值：错误码
		*************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_Open(UInt16 connect_no, UInt16 type, string pconnectstring,
                                            ref UInt16 PcieNum, UInt16[] PcieIndex);
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_OpenCom(UInt16 connect_no, UInt16 com_id);
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_OpenEthernet(UInt16 connect_no, string ip_addr);
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_FindEthernetIP(UInt16 connect_no, string ip_addr, UInt32 addr_len, UInt32 timeout);
        /************************************************
        *
        *关闭控制器
        *
        *
        ************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_Close(UInt16 connect_no);
        /*******************************************************************************
		* 函数名称: MC_ColdReset
		* 函数功能: 硬件复位，控制器所有信息复位

		* 输入参数: WORD connect_no		
		* 返 回 值: 
		* 创 建 人: Forest
		* 创建时间: 2022-11-30
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_ColdReset(UInt16 connect_no);
        /*******************************************************************************
		* 函数名称: MC_WarmReset
		* 函数功能: 坐标系等信息复位

		* 输入参数: WORD connect_no		
		* 返 回 值: 
		* 创 建 人: Forest
		* 创建时间: 2022-11-30
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_WarmReset(UInt16 connect_no);

        /*********************************控制器信息******************************************/
        /************************************************
        *
        *controller的连接状态
        *typedef enum 
        *{
        *TASK_STATE_IDLE = 0,
        *TASK_STATE_RUNING = 1,
        *TASK_STATE_STOP = 2,
        *TASK_STATE_PAUSE = 3,
        *TASK_STATE_ERROR = 99,
        *SYS_STATE_CANNOT_CONNECT=100
        *}enum_Connector_Run_State;
        *
        ************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetConnectState(UInt16 connect_no, ref UInt16 connect_state);
        /************************************************
        *
        *设置控制器的socket超时时间，默认值为3000ms，最大值10000ms，最小值为1000ms
        *timeout：单位为ms
        *
        ************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_SetConnectTimeout(UInt16 connect_no, UInt32 timeout);
        /************************************************
        *
        *设置命令的最大延时时间，默认值为3000ms，最大值10000ms，最小值为0
        *timeout：单位为ms
        *
        ************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_SetCmdTimeout(UInt16 connect_no, UInt32 timeout);
        /************************************************
        *
        *获取命令的最大延时时间
        *
        *
        ************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetCmdTimeout(UInt16 connect_no, ref UInt32 timeout);
        /*******************************************************************************
		* 函数名称: MC_GetConnectLineBoxState
		* 函数功能: 

		* 输入参数: WORD connect_no		

		 WORD id 接线盒id = 0；

		 DWORD* conState		//MaxConnectCpldNum = 8;最多连接8个
		 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_485_Slave_Phase;

		* 返 回 值: 
		* 创 建 人: Forest
		* 创建时间: 2022-11-30
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetConnectLineBoxState(UInt16 connect_no, UInt16[] conState);

        /*************************************************************
        说明：获取，轴及IO口信息
        输入：

        输出：
        返回值：错误码
        *************************************************************/
        [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);
        /*************************************************************
        说明：获取，模拟量信息
        输入：

        输出：
        返回值：错误码
        *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetTotalAdAndDaNum(UInt16 connect_no, ref UInt16 total_ad_num, ref UInt16 total_da_num);
        /*************************************************************
        说明：获取控制系统版本信息
        输入：
		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);
        /*************************************************************
        说明：获取控制产品型号
        输入：

        输出：
        返回值：错误码
        *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetProductID(UInt16 connect_no, ref UInt32 product_id);

        /*******************************************************************************
		* 函数名称: 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		
		* 返 回 值: 
		* 创 建 人: Forest
		* 创建时间: 2022-10-13
		*******************************************************************************/
        [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
		* 函数功能: 获取手轮及编码器数
		
		* 输入参数: WORD connect_no 	
		
		 WORD* total_handlewheel_num		
		
		 WORD* total_enc_num		
		* 返 回 值: 
		* 创 建 人: Forest
		* 创建时间: 2022-10-13
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetHandWheelEncNum(UInt16 connect_no, ref UInt16 total_handlewheel_num, ref UInt16 total_enc_num);

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

        /*************************************************************
		说明：速度规划的最小匀速时间设定
		输入：
		minEvenTime：单位为s，最小值为0.001s
		输出：
		返回值：错误码
		*************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_SetAxisMinEvenTime(UInt16 connect_no, UInt16 axis, double minEvenTime);
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetAxisMinEvenTime(UInt16 connect_no, UInt16 axis, ref double minEvenTime);
        /*************************************************************
		说明：速度规划模式参数设置;如果设置为T型，sRatio 参数无效
		输入：
		vel_mode：0表示T型，1表示S型或（sin）型
		sRatio :S型的匀加速时间比值。取值范围[0~1];0表示T型速度规划；1表示没有匀加速阶段
		maxAcc ：最大加速度限制；
		输出：
		返回值：错误码
		*************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_SetAxisVelPlanMode(UInt16 connect_no, UInt16 axis, UInt16 vel_mode, double sRatio, double maxAcc);
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetAxisVelPlanMode(UInt16 connect_no, UInt16 axis, ref UInt16 vel_mode, ref double sRatio, ref double maxAcc);

        /*************************************************************
		说明：速度规划速度平滑
		输入：
		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);

        /*************************************************************
        说明：运动按时间参数设置
        输入：
            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);
        /*************************************************************
        说明：运动按加速度参数设置
        输入：
        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
		* 函数功能: 
		
		* 输入参数: UInt16 connect_no 	
		
		 UInt16 axis		
		
		 double pos 	目标位置
		
		 double start_V 	启动速度
		
		 double stop_V		停止速度
		
		 double Vel 	最大速度
		
		 double Acc 	加速度
		
		 double Dec 	减速度
		
		 double S_Ratio 	s段比例
		
		 double maxAcc		最大加速度
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-6-8
		*******************************************************************************/
        [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
		* 函数功能: 启动多段运动，目前支持两段；第一段运动完成以后，立马执行第二段，
					两段的衔接速度不会降到零。
		
		* 输入参数: 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		第二段目标位置；暂时不支持反向。
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-6-8
		*******************************************************************************/
        [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);

        /*************************************************************
        说明：单轴定长运动指令
        输入：
            mode: 0 表示 相对运动模式； 1表示 绝对运动模式 
        输出：
        返回值：错误码
        *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_MovePos(UInt16 connect_no, UInt16 axis, UInt16 pos_mode, double pos);
        /*************************************************************
        说明：多轴定长运动指令
        输入：
            mode: 0 表示 相对运动模式； 1表示 绝对运动模式 
        输出：
        返回值：错误码
        *************************************************************/
        [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
		* 函数功能: 
		
		* 输入参数: UInt16 connect_no 	
		
		 UInt16 axis		
		
		 double start_V 	启动速度
		
		 double stop_V		停止速度
		
		 double Vel 	最大速度，如果Vel>0为正向，vel<0为负向，为0参数无效
		
		 double Acc 	加速度
		
		 double Dec 	减速度
		
		 double S_Ratio 	s段规划比例
		
		 double maxAcc		最大允许加速度
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-6-8
		*******************************************************************************/
        [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);

        /*************************************************************
		说明：定速运动指令
		输入：
			vel: vel < 0 表示 负向运动； vel > 0表示 正向；
		输出：
		返回值：错误码
		*************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_MoveVel(UInt16 connect_no, UInt16 axis, double vel);
        /*************************************************************
        说明：多轴定长运动指令
        输入：
            mode: 0 表示 相对运动模式； 1表示 绝对运动模式  
        输出：
        返回值：错误码
        *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_MoveVelMultiAxes(UInt16 connect_no, UInt16 axis_num, ref UInt16 axis, ref short dir);
        /*************************************************************
		说明：单轴运动改变速度
		输入：
		   当前为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);
        /*************************************************************
		说明：单轴变倍率
		输入：
			ratio 取值范围[0,];0表示暂停状态
			如果当前未运动，该指令无效
		输出：
		返回值：错误码
		*************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_MoveUpateVelRatio(UInt16 connect_no, UInt16 axis, double ratio);
        /*************************************************************
		说明：启动回零运动
		输入：回零的原点开关参数设置通过 MC_SetAxisIo配置
			回零的模式等参数配置如下：
		    pos_object: 0表示指令位置，1表示编码器,主要针对锁存回零模式
			home_mode：回零模式设置
			home_dir：回零方向，-1表示负方向，1表示正方向
			home_logic: 回零逻辑电平0表示底有效；1表示高有效；
			ez_count: 如果回零模式为ez回零，回零的ez计数count数；最小值为1；
			pos_offset: 移动位置大小 
			offset_mode：模式使能
			//回零结束模式
			typedef enum 
			{
				HOME_CRD_NOT_CLEAR	= 0,		//回零后不做任何动作
				HOME_CRD_CLEAR_SHIFT	= 1,	//回零之后，清零，然后偏移
				HOME_CRD_SHIT_CLEAR = 2 		//回零之后，偏移，清零
			}enum_HOME_Crd_CLEAR_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);

        /*************************************************************
        说明：回零结果函数
        输入：
        输出：
            complete_state：
			typedef enum
			{
				HOME_RESULT_Dont_Complete = 0,			//回零未完成
				HOME_RESULT_DONE = 1,					//回零完成，找到原点位置
				HOME_RESULT_ERROR_NO_ORG_SIGNAL = 2,	//回零过程报错，没有原点信号
				HOME_RESULT_ERROR_DOUBLE_ORG = 3,		//回零过程发现设备有两个原点信号
				HOME_RESULT_ERROR_NO_EZ_SIGNAL = 4, 	//回零过程没有发现EZ信号
				HOME_RESULT_ERROR_DIR = 5,				//回零配置的方向错误
				HOME_RESULT_ERROR_EL = 6,				//回零过程限位停止
				HOME_RESULT_ERROR_SOFT_LIMIT_EXCEED = 7,//超出软件限位范围
				HOME_RESULT_ERROR_STOPPED = 100			//没有正常回零完成
			}enum_Home_Result;

        返回值：错误码
        *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetHomeResult(UInt16 connect_no, UInt16 axis, ref UInt16 complete_state);
        /**************************坐标系运动控制操作****************************************/
        /*************************************************************
        说明：根据配置的停止方式，停止时间启动运动停止
        输入：stop_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);
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetCrdStopModeTime(UInt16 connect_no, UInt16 crd, ref UInt16 stop_mode, ref double stop_time);
        /*******************************************************************************
		* 函数名称: MC_SetCrdStopTime
		* 函数功能: 插补减速停止时间，单位为s

		* 输入参数: WORD connect_no		

		 WORD crd		

		 double stop_time		
		* 返 回 值: 
		* 创 建 人: Forest
		* 创建时间: 2022-9-4
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_SetCrdStopTime(UInt16 connect_no, UInt16 crd, double stop_time);

        /*************************************************************
		说明：判断轴是否运动完成,0 表示运行，1表示使能并空闲状态
		输入：
		输出：无
		返回值：
		*************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetCrdCheckDone(UInt16 connect_no, UInt16 crd, ref UInt16 crd_state);
        /*************************************************************
		说明：读取当前插补器速度
		输入：
		输出：无
		返回值：
		*************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetCrdCmdSpeed(UInt16 connect_no, UInt16 crd, ref double speed);

        /*************************************************************
		说明：速度规划的最小匀速时间设定
		输入：
		
		输出：
		返回值：错误码
		*************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_SetCrdMinEvenTime(UInt16 connect_no, UInt16 crd, double minEvenTime);
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetCrdMinEvenTime(UInt16 connect_no, UInt16 crd, ref double minEvenTime);
        /*************************************************************
		说明：速度规划模式参数设置;如果设置为T型，sRatio 参数无效
		输入：
		vel_mode：0表示T型，1表示S型或（sin）型
		sRatio :S型的匀加速时间比值。取值范围[0~1];0表示T型速度规划；1表示没有匀加速阶段
		maxAcc ：最大加速度限制；
		输出：
		返回值：错误码
		*************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_SetCrdVelPlanMode(UInt16 connect_no, UInt16 crd, UInt16 vel_mode, double sRatio, double maxAcc);
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetCrdVelPlanMode(UInt16 connect_no, UInt16 crd, ref UInt16 vel_mode, ref double sRatio, ref double maxAcc);
        /*************************************************************
		说明：速度规划速度平滑
		输入：
		ifEnable：0表示禁止，1表示使能
		smTime :平滑时间
		输出：
		返回值：错误码
		*************************************************************/
        [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);
        /*************************************************************
        说明：运动按时间参数设置
        输入：
            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);
        [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);

        /*************************************************************
        说明：直线插补命令
        输入：
            start_vel: 启动速度 
            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);
        /*************************************************************
        说明：终点圆心的圆弧插补函数
        输入：
        AxisNum：轴数；
        AxisList：插补轴列表，超过三轴的其它轴为跟随轴；
        Target_Pos：目标位置；
        Cen_Pos：圆心位置；
        Arc_Dir：圆弧插补方向；分为顺时针，和逆时针；
        Circle：插补圈数；
        Pos_Mode：插补的位置模式；
        输出：无
        返回值：错误码
        *************************************************************/
        [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);
        /*************************************************************
        说明：终点半径圆弧插补函数
        输入：
            Arc_Radius：圆弧半径
            Arc_Dir: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);
        /*************************************************************
        说明：三点圆弧插补函数
        输入：
        输出：无
        返回值：错误码
        *************************************************************/
        [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_GetCrdStatus
		* 函数功能: 获取插补器的工作状态
		
		* 输入参数: UInt16 ConnectNo		
		
		 UInt16 Crd		
		
		 UInt16* runningState 	当前插补器的工作状态，0表示运行，1表示停止
		
		 DUInt16* mark		当前插补段的段号，如果是单段插补，返回1
		
		 UInt16* runningMode		当前插补器工作的模式
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-7-12
		*******************************************************************************/
        [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的空间大小
		
		* 输入参数: UInt16 ConnectNo		
		
		 UInt16 Crd		
		 UInt16 curRunningMark   当前执行的插补段mark
		 UInt16* freeSpace		剩余空间
		
		 UInt16* usedSpace		已用空间
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-7-12
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetCrdBufStatus(UInt16 ConnectNo, UInt16 Crd, ref UInt16 curRunningMark, ref UInt16 freeSpace, ref UInt16 usedSpace);

        /*******************************************************************************
		* 函数名称: MC_MoveContiLinear
		* 函数功能: 
		
		* 输入参数: UInt16 ConnectNo		
		
		 UInt16 Crd		插补器号
		
		 UInt16 AxisNum		插补轴数
		
		 UInt16* AxisList 	插补轴列表
		
		 double* Dist		目标位置
		
		 UInt16 Crd_Mode		位置模式，0表示相对，1表示绝对
		
		 DUInt16 mark 	   设置的插补段号
		
		 UInt16 linkToLast		是否连接上一段，0表示不连接，1表示连接。在前瞻模式下，该配置有效，连续插补模式下，无效
		
		 double feedVel 	该段的插补最大速度
		
		 double endVel		该段的最大停止速度
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-7-12
		*******************************************************************************/
        [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
		* 函数功能: 设置连续插补时，等待上位机指令启动运动。
		
		* 输入参数: WORD ConnectNo		
		
		 WORD Crd		
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-7-21
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_SetCrdCmdWait(UInt16 ConnectNo, UInt16 Crd);

        /*******************************************************************************
		* 函数名称: MC_SetCrdCmdWait
		* 函数功能: 设置连续插补时，等待上位机指令启动运动。
		与MC_SetCrdCmdWait指令配合使用，表示立马执行运动
		
		* 输入参数: WORD ConnectNo		
		
		 WORD Crd		
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-7-21
		*******************************************************************************/

        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_SetCrdCmdStart(UInt16 ConnectNo, UInt16 Crd);

        /*******************************************************************************
		* 函数名称: MC_SetCrdLookAhead
		* 函数功能: 配置连续前瞻插补的模式，0表示连续插补，1表示前瞻处理插补
		
		* 输入参数: UInt16 ConnectNo		
		
		 UInt16 Crd		
		
		 UInt16 lookaheadMode 	
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-7-12
		*******************************************************************************/
        [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
		* 函数功能: 设置前瞻处理的拐角参数
		
		* 输入参数: UInt16 ConnectNo		
		
		 UInt16 group 	
		
		 UInt16 cornerFlag		拐角处理，0表示处理，1表示不处理
		
		 double maxPathError		最大轨迹误差
		
		 double maxVelLimit 	最大速度限制
		
		 double maxAccLimit 	最大加速度限制
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-7-12
		*******************************************************************************/
        [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);

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

		* 输入参数: WORD connect_no		

		 WORD axis		

		 WORD pulse_mode	
		 	 	0~3 脉冲 + dir
	 			4~5 双脉冲
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-24
		*******************************************************************************/
        [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
		* 函数功能: 设置轴对应编码器的工作模式及方向
		
		* 输入参数: WORD connect_no 	
		
		 WORD axis		
		
		 WORD 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倍频计数
			
		 WORD enc_dir		0： 计数方向不取反 1： 计数方向取反
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-24
		*******************************************************************************/
        [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);

        /*************************************************************
		说明：终点圆心的空间圆弧插补函数
		输入：
		AxisNum：轴数；
		AxisList：插补轴列表，超过三轴的其它轴为跟随轴；
		Target_Pos：目标位置；
		Cen_Pos：圆心位置；
		Arc_Dir：圆弧插补方向；0分为顺时针，1逆时针；
		Circle：插补圈数；
		Pos_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);

        /*************************************************************
		说明：三点圆弧的空间插补函数
		输入：
		输出：无
		返回值：错误码
		*************************************************************/
        [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);
        /*************************************************************
		说明：椭圆插补函数
		输入：
		AxisNum：轴数；
		AxisList：插补轴列表，超过三轴的其它轴为跟随轴；
		Target_Pos：目标位置；
		Cen_Pos：圆心位置；
		double short_len 椭圆短轴;
		double long_len 椭圆长轴;
		Arc_Dir：圆弧插补方向；0分为顺时针，1逆时针；
		Circle：插补圈数；
		Pos_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 short_len, double long_len, UInt16 Arc_Dir, UInt32 Circle, UInt16 Crd_Mode);

        /*************************************************************
	   说明：判断轴是否运动完成,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       //轴不存在
		输入：
		输出：无
		返回值：
        *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetAxisMachineState(UInt16 connect_no, UInt16 axis, ref UInt16 Axis_state);
        /*************************************************************
		说明：判断轴是否运动完成,0 表示运行，1表示使能并空闲状态
		输入：
		输出：无
		返回值：
		*************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetAxisCheckDone(UInt16 connect_no, UInt16 axis, ref UInt16 CheckDone);
        /*************************************************************
		说明：轴当前的运动模式
		输入：
		typedef enum
		{
			Axis_Move_Idle		 = 0,//没运动。该状态只能在中断handle_machine_state 和急停的地方使用。切忌！！！
			Axis_Pmove			,	// 点到点运动
			Axis_Vmove			,	//	速度控制运动
			Axis_Hmove		,	//回零运动
			Axis_Handwheel_Move 	,	//手脉跟随运动
			Axis_Sine_Ascillate,//20 正弦振荡曲线模式	
			Axis_PT_Move		,
			Axis_PVT_Move,		//PVT	
			
			Axis_Line_Move			,	//直线插补
			Axis_Arc_Move		, //圆弧插补
			Axis_EcllipseMove, //椭圆插补
			Axis_SpindleMove, //螺旋线插补
			Axis_Contiue_Move	, //连续插补
			Axis_Lookahead_Move 	, //前瞻插补
			Axis_RTCP ,//28五轴+法向跟随
		
			//同步，跟随
			Axis_Gear_Move		,//齿轮
			Axis_Cam_Move		,// 凸轮
			Axis_Cam_Simplify ,//10 简化电子凸轮模式
			Axis_Gantry,   //16龙门模式
			Axis_Follow, //19 跟随模式
			Axis_Follow_Tangent,//27刀向跟随模式
		
			Axis_Cmd_Buffer ,//29 指令缓存
			Axis_U_MOVE,   //18 门型运动
		
		}Enum_Axis_Move_Mode;
		
		输出：无
		返回值：
		*************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetAxisMotionMode(UInt16 connect_no, UInt16 axis, ref UInt16 Motion_Mode);

        /*************************************************************
       说明：设置轴当量
       输入：最小值为0.001，最大值为100，000
       输出：无
       返回值：
       *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_SetAxisEquvi(UInt16 connect_no, UInt16 axis, double equvi);
        /*************************************************************
        说明：获取轴当量
        输入：
        输出：无
        返回值：
        *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetAxisEquvi(UInt16 connect_no, UInt16 axis, ref double equvi);
        /*************************************************************
        说明：停止类指令一共包括2种方式
        1.根据停止模式及停止时间参数，停止运动；支持急停与减速停止
        2.急停
        输入：
        输出：无
        返回值：
        *************************************************************/


        /*************************************************************
        说明：根据配置的停止方式，停止时间启动运动停止
        输入：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);
        [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

		* 输入参数: WORD connect_no		

		 WORD axis		

		 double stop_time		
		* 返 回 值: 
		* 创 建 人: Forest
		* 创建时间: 2022-9-4
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_SetAxisStopTime(UInt16 connect_no, UInt16 axis, double stop_time);
        /*************************************************************
        说明：紧急停止所有轴运动
        输入：
        输出：无
        返回值：
        *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_StopEmgImd(UInt16 connect_no);
        /*************************************************************
        说明：读取停止原因
        输入：
        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: 运动过大，异常停止
		}
        输出：无
        返回值：停止原因,0正常结束
        *************************************************************/

        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetAxisStopReason(UInt16 connect_no, UInt16 axis, ref UInt32 stop_reason);
        /*************************************************************
        说明：清除停止原因
        输入：
        输出：无
        返回值：停止原因,0正常结束
        *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_ClearAxisStopReason(UInt16 connect_no, UInt16 axis);
        /*************************************************************
        说明：读取当前指令位置
        输入：
        输出：无
        返回值：
        *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetAxisCmdPos(UInt16 connect_no, UInt16 axis, ref double cmd_pos);
        /*************************************************************
        说明：读取当前速度
        输入：
        输出：无
        返回值：
        *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetAxisCmdSpeed(UInt16 connect_no, UInt16 axis, ref double speed);
        /*************************************************************
        说明：读取编码器反馈位置
        输入：
        输出：无
        返回值：
        *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetEncoderPos(UInt16 connect_no, UInt16 axis, ref double encoder_pos);
        /*************************************************************
		说明：读取反馈位置
		输入：
		输出：无
		返回值：
		*************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetAxisFeedbackPos(UInt16 connect_no, UInt16 axis, ref double feedback_pos);

        /*************************************************************
        说明：设置当前指令位置
        输入：
        输出：无
        返回值：
        *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_SetAxisCmdPos(UInt16 connect_no, UInt16 axis, double cmd_pos);
        /*************************************************************
        说明：设置当前指令位置
        输入：
        输出：无
        返回值：
        *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_SetEncoderPos(UInt16 connect_no, UInt16 axis, double encoder_pos);
        /*******************************************************************************
		* 函数名称: MC_SetAxisSoftELPrm
		* 函数功能: 配置轴的软件限位参数
		
		* 输入参数: WORD connect_no 	
		
		 WORD axis		
		
		 WORD enable		
	 
 		 WORD pos_src  位置源，0表示指令位置，1表示编码器位置
 
		 double max_pos 	最大位移
		
		 double min_pos 	最小位移
		
		 WORD stop_mode 	限位发生时的轴停止模式
		* 返 回 值: 
		* 创 建 人: Forest
		* 创建时间: 2022-9-5
		*******************************************************************************/
        [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表示急停
		* 返 回 值: 
		* 创 建 人: Forest
		* 创建时间: 2022-9-18
		*******************************************************************************/
        [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);

        /*************************************************************
		说明：暂停
		输入：
		输出：无
		返回值：停止原因,0正常结束
		*************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_HaltAxis(UInt16 connect_no, UInt16 axis);

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

        /*************************************************************
        说明：读输入口
        输入： io编号，从0开始
        输出：0-低电平， 1- 高电平
        返回值：错误码
        *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetInIoBit(UInt16 connect_no, UInt32 io_index, ref byte IoState);
        /*************************************************************
        说明：读输入口,一次32点
        输入：io编号，从0开始 
              0-低电平， 1- 高电平
        输出：
        返回值：错误码
        *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetInIoPort(UInt16 connect_no, UInt32 port_index, ref UInt32 IoState);
        /*******************************************************************************
		* 函数名称: MC_GetInIoPtr
		* 函数功能: 按起始地址读取IO状态，最多一次读取64点

		* 输入参数: WORD connect_no		

		 DWORD start_index		

		 DWORD io_num		

		 unsigned long long*  IoState		
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-1
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetInIoPtr(UInt16 connect_no, UInt32 start_index, UInt32 io_num, ref UInt64 IoState);

        /*************************************************************
        说明：写输出口
        输入：io编号，从0开始 
              0-低电平， 1- 高电平
        输出：
        返回值：错误码
        *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_SetOutIoBit(UInt16 connect_no, UInt32 io_index, byte IoState);
        /*************************************************************
        说明：写输出口,一次32点
        输入：io编号，从0开始 
              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点；

		* 输入参数: WORD connect_no		

		 DWORD start_index		

		 byte IoState		

		 unsigned long long  IoMask		：bit位为零表示保持原来状态，为1表示写入IoState状态
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-1
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_SetOutIoPtr(UInt16 connect_no, UInt32 start_index, byte IoState, UInt64 IoMask);
        /*************************************************************
        说明：读输出口
        输入： io编号，从0开始
        输出：0-低电平， 1- 高电平
        返回值：错误码
        *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetOutIoBit(UInt16 connect_no, UInt32 io_index, ref byte IoState);

        /*************************************************************
        说明：读输出口,一次32点
        输入：io编号，从0开始 
              0-低电平， 1- 高电平
        输出：
        返回值：错误码
        *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetOutIoPort(UInt16 connect_no, UInt32 port_index, ref UInt32 IoState);
        /*******************************************************************************
		* 函数名称: MC_GetOutIoPtr
		* 函数功能: 按起始地址读取IO状态，最多一次读取64点

		* 输入参数: WORD connect_no		

		 DWORD start_index		

		 DWORD io_num		

		 unsigned long long*  IoMask		
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-1
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetOutIoPtr(UInt16 connect_no, UInt32 start_index, UInt32 io_num, ref UInt64 IoState);

        /*******************************************************************************
		* 函数名称: MC_SetIOCountStopAxisConfig
		* 函数功能: 计数到指定值后，停止轴运动
			0~7号通道为硬件计数，后续为普通计数，总共12路通道
			启动IO配置函数MC_StartIOCount前调用该函数配置计数功能
		* 输入参数: WORD connect_no		

		 WORD chan		比较通道，最多12路

		 DWORD io_index		计数IO的序号

		 uint32 count_value		计数比较值配置，大于设置值，触发轴停止

		 uint8 counter_mode	:	计数边沿配置
							 typedef enum{
							    up_edge_count = 1,//上升沿计数
							    down_edge_count = 2,
							    any_edge_count = 3,
							   
							}enum_io_count_source;

		 uint16* axis_list		停止轴列表

		 uint16 axis_num		轴数为零表示只计数

		 uint8 stop_mode		停止模式，0表示减速停止，1表示急停
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-1
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_SetIOCountPrm(UInt16 connect_no, UInt16 chan, UInt32 io_index, UInt32 compare_value, UInt16 counter_mode, double filter,
                                            ref UInt16 axis_list, UInt16 axis_num, UInt16 stop_mode);

        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetIOCountPrm(UInt16 connect_no, UInt16 chan, ref UInt32 io_index, ref UInt32 compare_value, ref UInt16 counter_mode, ref double filter,
                                            ref UInt16 axis_list, ref UInt16 axis_num, ref UInt16 stop_mode);

        /*******************************************************************************
		* 函数名称: MC_ClearIOCount
		* 函数功能: 清除IO 计数, 可以重新一次处理

		* 输入参数: WORD connect_no		

		 WORD chan		
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-1
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_ClearIOCount(UInt16 connect_no, UInt16 chan);
        /*******************************************************************************
		* 函数名称: MC_StartIOCount
		* 函数功能: 启动IO计数，需要先配置IO计数功能，然后启动计数

		* 输入参数: WORD connect_no		

		 WORD chan		
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-2
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_StartIOCount(UInt16 connect_no, UInt16 chan);
        /*******************************************************************************
		* 函数名称: MC_StopIOCount
		* 函数功能: 停止IO计数

		* 输入参数: WORD connect_no		

		 WORD chan		
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-2
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_StopIOCount(UInt16 connect_no, UInt16 chan);
        /*******************************************************************************
		* 函数名称: MC_GetIOCountValue
		* 函数功能: 获取当前IO的计数值

		* 输入参数: WORD connect_no		

		 WORD chan		

		 DWORD* io_index		

		 DWORD* io_count		
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-2
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetIOCountValue(UInt16 connect_no, UInt16 chan, ref UInt32 io_index, ref UInt32 io_count);
        /*******************************************************************************
		* 函数名称: MC_SetReuseIoMap，通过IO点数32点
		* 函数功能: 复用输入io映射，专用IO可通过虚拟IO映射，复用

		* 输入参数: WORD connect_no		

		 uint16 io_index		
		 typedef enum
		 {
			 NEL_INDEX		 = 0,//负限位
			 PEL_INDEX		 = 1,//正限位
			 ORG_INDEX		 = 2,//原点
			 INP_INDEX		 = 3,//伺服到位
			 EMG_INDEX		 = 4,//急停信号
			 ALM_INDEX		 = 5,//伺服报警
			 RDY_INDEX		 = 6,//伺服准备
			 SD_INDEX		 = 7,//减速信号
			 NORMAL_IO_TYPE  = 9,//通用IO信号
		 } IN_TYPE_INDEX;

		 uint8 map_io_type		：轴IO的专用信号，或者通用IO

		 uint32 map_index		: 轴号，或者通用IO点

		 double filter_time		
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-2
		*******************************************************************************/
        [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		

		 uint8* map_io_type		
		 typedef enum
		 {
			 NEL_INDEX		 = 0,//负限位
			 PEL_INDEX		 = 1,//正限位
			 ORG_INDEX		 = 2,//原点
			 INP_INDEX		 = 3,//伺服到位
			 EMG_INDEX		 = 4,//急停信号
			 ALM_INDEX		 = 5,//伺服报警
			 RDY_INDEX		 = 6,//伺服准备
			 SD_INDEX		 = 7,//减速信号
			 NORMAL_IO_TYPE  = 9,//通用IO信号
		 } IN_TYPE_INDEX;


		 uint32* map_index		

		 double* filter_time		
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-2
		*******************************************************************************/
        [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		

		 byte* IoState		
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-2
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetReuseInIoBit(UInt16 connect_no, UInt32 io_index, ref byte IoState);

        /*********************** 轴控制IO信号 操作部分  ************************/
        /*******************************************************************************
		* 函数名称: MC_SetAxisOutIo
		* 函数功能: 设置轴的专用输出口电平
		
		* 输入参数: WORD connect_no 	
		
		 WORD axis		轴号
		
		 WORD axis_io_type		轴IO类型
		  typedef enum
		  {
			  SERVON_INDEX	  = 0,//伺服使能
			  ERC_INDEX 	  = 1//伺服报警清除
		  
		  } OUT_TYPE_INDEX;
		
		 WORD io_level	输出电频，0表示低电平；1表示高电平	
		
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-2
		*******************************************************************************/
        [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类型
		  typedef enum
		  {
			  NEL_INDEX 	  = 0,//负限位
			  PEL_INDEX 	  = 1,//正限位
			  ORG_INDEX 	  = 2,//原点
			  INP_INDEX 	  = 3,//伺服到位
			  EMG_INDEX 	  = 4,//急停信号
			  ALM_INDEX 	  = 5,//伺服报警
			  RDY_INDEX 	  = 6,//伺服准备
			  SD_INDEX		  = 7,//原减速信号 
		  } AXIS_IO_IN_TYPE_INDEX;

		
		 WORD enable		轴IO是否有效
		
		 WORD io_logical	配置有效电频，0和1	
		
		 WORD stop_mode  停止模式，触发后的停止处理，0为减速停止，1为立即停止
		
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-2
		*******************************************************************************/
        [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类型
		  typedef enum
		  {
			  NEL_INDEX 	  = 0,//负限位
			  PEL_INDEX 	  = 1,//正限位
			  ORG_INDEX 	  = 2,//原点
			  INP_INDEX 	  = 3,//伺服到位
			  EMG_INDEX 	  = 4,//急停信号
			  ALM_INDEX 	  = 5,//伺服报警
			  RDY_INDEX 	  = 6,//伺服准备
			  SD_INDEX		  = 7,//原减速信号 
		  } AXIS_IO_IN_TYPE_INDEX;



		
		 WORD enable		轴IO是否有效
		
		 WORD io_logical	配置有效电频，0和1	
		
		 WORD stop_mode  停止模式，触发后的停止处理，0为减速停止，1为立即停止
		
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-2
		*******************************************************************************/
        [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类型 比如：限位，原点，减速停止，急停等 
		 typedef enum
		 {
			 NEL_INDEX		 = 0,//负限位
			 PEL_INDEX		 = 1,//正限位
			 ORG_INDEX		 = 2,//原点
			 INP_INDEX		 = 3,//伺服到位
			 EMG_INDEX		 = 4,//急停信号
			 ALM_INDEX		 = 5,//伺服报警
			 RDY_INDEX		 = 6,//伺服准备
			 SD_INDEX		 = 7,//原减速信号 
		 } AXIS_IO_IN_TYPE_INDEX;


		
		 WORD map_io_type	映射IO的类型，包括，其它轴的专用信号，通用IO等
		 typedef enum
		 {
			 NEL_INDEX		 = 0,//负限位
			 PEL_INDEX		 = 1,//正限位
			 ORG_INDEX		 = 2,//原点
			 INP_INDEX		 = 3,//伺服到位
			 EMG_INDEX		 = 4,//急停信号
			 ALM_INDEX		 = 5,//伺服报警
			 RDY_INDEX		 = 6,//伺服准备
			 SD_INDEX		 = 7,//减速信号
			 NORMAL_IO_TYPE  = 9,//通用IO信号
		 } IN_TYPE_INDEX;		
		 WORD map_index 	映射的轴号或者通用IO口号，
		
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-2
		*******************************************************************************/
        [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		
		
		 WORD* map_io_type		
		
		 DWORD* map_index		
		

		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-2
		*******************************************************************************/
        [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);

        /*************************************************************
        说明：读轴所有输入状态
        输入：卡链接handle 轴号，当0xFF的时候，表示读取所有的轴，
        输出：0-无效， 1- 有效
        返回值：错误码
        *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetAxisInIoState(UInt16 connect_no, UInt16 axis, ref UInt32 in_io_state);
        /*************************************************************
        说明：读伺服告警输入状态 
        输入：io编号，从1开始
        输出：0-无效， 1- 有效
        返回值：错误码
        *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetAxisAlarmState(UInt16 connect_no, UInt16 axis, ref byte alarm_state);

        /*************************************************************
        说明：读原点输入状态
        输入： io编号，从0开始
        输出：0-无效， 1- 有效
        返回值：错误码
        *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetAxisHomeState(UInt16 connect_no, UInt16 axis, ref byte home_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);

        /*************************************************************
        说明：读减速信号输入状态
        输入： io编号，从0开始
        输出：0-无效， 1- 有效
        返回值：错误码
        *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetAxisSDState(UInt16 connect_no, UInt16 axis, ref byte sd_state);

        /*************************************************************
        说明：读到位信号输入状态
        输入： io编号，从0开始
        输出：0-无效， 1- 有效
        返回值：错误码
        *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetAxisInpState(UInt16 connect_no, UInt16 axis, ref byte inp_state);

        /*************************************************************
        说明：读emg信号输入状态
        输入： io编号，从0开始
        输出：0-无效， 1- 有效
        返回值：错误码
        *************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetControllerEmgState(UInt16 connect_no, ref byte emg_state);
        /*******************************************************************************
		* 函数名称: MC_SetAuxEncoderPrm
		* 函数功能: 设置辅助编码器计数参数
			
		* 输入参数: WORD connect_no 	
		
		 WORD channel		辅助编码器通道，从0开始
		
		 WORD 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倍频计数
		 
		 WORD dir		0： 计数方向不取反 1： 计数方向取反

		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-22
		*******************************************************************************/
        [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	： 辅助编码器通道号
		
		 double CmdPos		
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-22
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_SetAuxEncoderPositon(UInt16 connect_no, UInt16 channel, double CmdPos);
        /*******************************************************************************
		* 函数名称: MC_GetAuxEncoderPositon
		* 函数功能: 获取辅助编码器位置
		
		* 输入参数: WORD connect_no 	
		
		 WORD channel		
		
		 double* CmdPos 	
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-22
		*******************************************************************************/
        [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		手轮的计数倍频，大于零为正向计数，小于零为负向计数
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-22
		*******************************************************************************/
        [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		
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-22
		*******************************************************************************/
        [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
		 typedef enum
		 {
			 CAPTURE_HOME	 = 0, //原点信号
			 CAPTURE_EZ = 1,//EZ信号
			 CAPTURE_HS_IN = 2,//高速IN0 IN1信号		 
			 CAPTURE_GEN_IN = 3//通用IN信号 
		
		 }enum_Capture_Object;
		
		
		 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		捕获模式 
		 typedef enum
		 {
			 CAPTURE_SINGLE    = 0, //单次锁存
			 CAPTURE_CONTINOUS = 1//连续锁存 注意：不支持cap_object对象为Home和EZ时情况
		 }enum_Capture_Mode;
		
		 WORD cap_logic 	捕获逻辑
		 typedef enum
		 {
			 CAPTURE_FALLING_EDGE			 = 0, //下降沿捕获
			 CAPTURE_RISING_EDGE			 = 1, //上升沿捕获
			 CAPTURE_DUAL_EDGE				 = 2 //双边沿捕获， 注意：不支持cap_object对象为Home和EZ时情况
		 }enum_Capture_Logic_Mode;
		
		 WORD* cap_pos_src	捕获位置源
		 typedef enum
		 {
			Cmd_Pos_Src = 0,//指令源
			Encode_Pos_Src = 1,  //编码器源
			
		 }enum_Pos_Src;
		 
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-22
		*******************************************************************************/
        [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		
		
		 WORD cap_chan		
		
		 WORD cap_axis	

		 WORD* cap_io
		
		 WORD* cap_mode 	
		
		 WORD* cap_logic		
		
		 WORD* cap_pos_src		
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-23
		*******************************************************************************/
        [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_chan		
		
		 DWORD* cap_counts		获取到的捕获点数。
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-23
		*******************************************************************************/
        [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_chan		
		
		 WORD read_cap_counts		读取的捕获点数
		
		 WORD cap_axis		捕获对应轴
		 
		 WORD* real_counts	 实际读取点数
		
		 double* cap_pos		读取位置数组
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-23
		*******************************************************************************/
        [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_chan		
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-23
		*******************************************************************************/
        [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_chan		
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-23
		*******************************************************************************/
        [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  比较维数  
		 typedef enum
		 {
			Compare_1D = 1, //一维比较
			Compare_2D = 2 //二维比较
		 }enum_Compare_Dim;
		 WORD cmp_chan				高速比较口0~3；对应IO序号index：12~15
		
		
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-25
		*******************************************************************************/
        [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维	
		 typedef enum
		 {
			Compare_1D = 1, //一维比较
			Compare_2D = 2 //二维比较
		 }enum_Compare_Dim;
		
		 WORD cmp_hs_io 	高速比较口0~3；对应IO序号index：12~15
		
		 WORD* enable	0表示静止，1表示使能	
		
		 WORD* cmp_mode 	比较维数   ；2维比较时，返回指针长度为2维
		 //比较输出模式
		 typedef enum
		 {
			 Less_Compare_Value = 0, //小于比较点模式
			 Equi_Compare_Value = 1, //等于比较点模式
			 Beyond_Compare_Value = 2,//大于比较点模式
			 Linear_Compare_Value = 3,//等增量比较模式
			 FIFO_Compare_Value = 4   //FIFO点比较输出
		 }enum_Compare_Mode;
		
		
		 WORD* axis 	比较轴 比较维数	 ；2维比较时，返回指针长度为2维
		
		 WORD* cmp_source		比较维数   ；2维比较时，返回指针长度为2维
		 //坐标位置源配置
		 typedef enum
		 {
			Cmd_Pos_Src = 0,		//指令位置源
			Encode_Pos_Src = 1, 	//编码器位置源
		 }enum_Pos_Src; 
		
		 WORD* trigger_mode 	
		 typedef enum
		 {
			 Trigger_IO_Low = 0,//表示低电平
			 Trigger_IO_High = 1,//表示高电平
			 Trigger_IO_Pulse = 3, // 需要输入IO时间
			 Trigger_Axis_Imd_Stop =4,
		 
			 Trigger_None = 100//没有触发
		 }enum_Compare_Trigger; 
		* 返 回 值: 
		* 创 建 人: Forest
		* 创建时间: 2022-12-25
		*******************************************************************************/
        [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			比较位置源
		 //坐标位置源配置
		 typedef enum
		 {
			Cmd_Pos_Src = 0,		//指令位置源
			Encode_Pos_Src = 1, 	//编码器位置源
		 }enum_Pos_Src; 
		
		 DWORD cmp_counts		比较位置点数（模式0~2下，该值为固定值1）
		
		 double* cmp_pos		比较位置点数组，（等增量比较模式下，该数组长度为2，第一点位起点位置点；第二点为增量值）
		 WORD cmp_mode		
		 //比较输出模式
		 typedef enum
		 {
			 Less_Compare_Value = 0, //小于比较点模式
			 Beyond_Compare_Value = 1,//大于比较点模式
			 Linear_Compare_Value = 2,//等增量比较模式
			 FIFO_Compare_Value = 3   //FIFO点比较输出
		 }enum_Compare_Mode;
		
		 WORD trigger_mode		
		 typedef enum
		 {
			 Trigger_IO_Low = 0,//表示低电平
			 Trigger_IO_High = 1,//表示高电平
			 Trigger_IO_Pulse = 3, // 需要输入IO时间
			 Trigger_Axis_Imd_Stop =4,
		 
			 Trigger_None = 100//没有触发
		 }enum_Compare_Trigger;
		
		 WORD trigger_prm
			trigger_mode 为0~3时，该参数为IO序号；
			trigger_mode 为4时，该参数为轴序号；

		
		 double hs_out_time 	
		* 返 回 值: 
		* 创 建 人: Forest
		* 创建时间: 2022-10-19
		*******************************************************************************/
        [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  比较维数  
		 typedef enum
		 {
			Compare_1D = 1, //一维比较
			Compare_2D = 2 //二维比较
		 }enum_Compare_Dim;
		
		 WORD cmp_hs_io 	高速比较口0~3；对应IO序号index：12~15
		 WORD* enable		比较器使能状态 0表示未启用，1表示使能
		
		 double* running_pos		当前比较点的位置信息
		
		 DWORD* completed_points	完成的比较点个数
		
		 DWORD* remained_points 	剩余比较点个数
		* 返 回 值: 
		* 创 建 人: Forest
		* 创建时间: 2022-10-19
		*******************************************************************************/
        [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		
		 typedef enum
		 {
			Compare_1D = 1, //一维比较
			Compare_2D = 2 //二维比较
		 }enum_Compare_Dim;
		
		 WORD cmp_hs_io 	高速比较口0~3；对应IO序号index：12~15
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-25
		*******************************************************************************/
        [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		
		 typedef enum
		 {
			Compare_1D = 1, //一维比较
			Compare_2D = 2 //二维比较
		 }enum_Compare_Dim;
		
		 WORD cmp_chan 比较通道,	一维软件比较：取值范围(0,3)；二维软件比较：取值范围(0,1)；
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-24
		*******************************************************************************/
        [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  比较维数   ；2维比较时，返回指针长度为2维
		 typedef enum
		 {
			Compare_1D = 1, //一维比较
			Compare_2D = 2 //二维比较
		 }enum_Compare_Dim;
		
		 WORD cmp_hs_io 	 
		
		 WORD* enable	0表示静止，1表示使能	
		
		 WORD* cmp_mode 	比较维数   ；2维比较时，返回指针长度为2维
		 //比较输出模式
		 typedef enum
		 {
			 Less_Compare_Value = 0, //小于比较点模式
			 Beyond_Compare_Value = 1,//大于比较点模式
			 Linear_Compare_Value = 2,//等增量比较模式
			 FIFO_Compare_Value = 3   //FIFO点比较输出
		 }enum_Compare_Mode;		
		
		 WORD* axis 	比较轴 比较维数	 ；2维比较时，返回指针长度为2维
		
		 WORD* cmp_source		比较维数   ；2维比较时，返回指针长度为2维
		 //坐标位置源配置
		 typedef enum
		 {
			Cmd_Pos_Src = 0,		//指令位置源
			Encode_Pos_Src = 1, 	//编码器位置源
		 }enum_Pos_Src; 
		
		 WORD* trigger_mode 	触发模式
		 typedef enum
		 {
			 Trigger_IO_Low = 0,//表示低电平
			 Trigger_IO_High = 1,//表示高电平
			 Trigger_IO_Pulse = 3, // 需要输入IO时间
			 Trigger_Axis_Imd_Stop =4,
		 
			 Trigger_None = 100//没有触发
		 }enum_Compare_Trigger; 
		
		  DWORD* trigger_Data  触发参数
		* 返 回 值: 
		* 创 建 人: Forest
		* 创建时间: 2022-12-25
		*******************************************************************************/
        [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		
		 typedef enum
		 {
			Compare_1D = 1, //一维比较
			Compare_2D = 2 //二维比较
		 }enum_Compare_Dim;
		
		 WORD cmp_chan		比较通道,	取值范围(0,3)
		
		 WORD* enable		比较器使能状态 0表示未启用，1表示使能
		
		 double* running_pos		当前比较位置点，如果为二位位置比较为两个轴位置
		
		 DWORD* completed_points	已完成比较点数
		
		 DWORD* remained_points 	剩余比较点
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-24
		*******************************************************************************/
        [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		
		 typedef enum
		 {
			Compare_1D = 1, //一维比较
			Compare_2D = 2 //二维比较
		 }enum_Compare_Dim;
		
		 WORD cmp_chan 比较通道,	取值范围(0,3)；
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-24
		*******************************************************************************/
        [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表示大于等于比较位置
		
		 WORD trigger_mode		
		 typedef enum
		 {
			 Trigger_IO_Low = 0,
			 Trigger_IO_High = 1,
			 Trigger_IO_Reverse = 2,
			 Trigger_IO_Pulse = 3, // 需要输入IO时间
			 Trigger_Axis_Imd_Stop =4,
		 
			 Trigger_None = 100//没有触发
		 }enum_Compare_Trigger;
		
		 WORD trigger_prm
			trigger_mode 为0~3时，该参数为IO序号；
			trigger_mode 为4时，该参数为轴序号；

		
		 double out_time	IO输出的时间	
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-24
		*******************************************************************************/
        [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
		* 函数功能: 添加2维比较点
		
		* 输入参数: WORD connect_no 	
		
		 WORD* axis 	
		
		 WORD* pos_src		
		
		 double* pos		
		
		 WORD* cmp_mode 	
		
		 WORD trigger_mode		
		
		 WORD trigger_prm		
		
		 double out_time		
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-8-24
		*******************************************************************************/
        [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
		* 函数功能: 发送PMW
		
		* 输入参数: WORD connect_no 	
		
		 WORD pwm_chan_type 	
		 typedef enum
		 {
			 PWM_Type_5V = 0, //5v PWM 
			 PWM_Type_24V = 1 //24 vPWM
		 }enum_PWM_Type;
		
		 WORD pwm_chan		:
							5v的通道为最后一个脉冲轴
							24v通道为高速IO口，对应取值范围为[0,3]
		 WORD enable		:0表示静止PWM输出，对应24V的IO口切换到通用IO模式下，对应5v的通道切换到轴控制脉冲输出模式
							
		 double frequency	： 
		
		 double duty	：取值范围[0 , 1] duty = (高电平时刻 / 脉冲总时刻)	
		* 返 回 值: 
		* 创 建 人: Forest
		* 创建时间: 2022-12-18
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_StartPwm(UInt16 connect_no, UInt16 pwm_chan_type, UInt16 pwm_chan, UInt16 enable, 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 double frequency, ref double duty);
        #endregion


        #region simulink_function
        /*******************************************************************************
		* 函数名称: MC_SimulinkMotionStartThread
		* 函数功能: 通过编程软件执行运动控制，注意用户软件使用线程
		
		* 输入参数: 无
		* 返 回 值: 无
		* 创 建 人: 
		* 创建时间: 2022-6-15
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_SimulinkMotionStartThread(UInt16 connect_no);
        /*******************************************************************************
		* 函数名称: MC_SimulinkMotionStartThread
		* 函数功能: 通过编程软件执行指令交互，注意用户软件使用线程
		
		* 输入参数: 无
		* 返 回 值: 无
		* 创 建 人: 
		* 创建时间: 2022-6-15
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_SimulinkCommandStartThread(UInt16 connect_no);
        /*******************************************************************************
		* 函数名称: MC_SimulinkMotionInit
		* 函数功能: 仿真初始化
		
		* 输入参数: 无
		* 返 回 值: 无
		* 创 建 人: 
		* 创建时间: 2022-6-15
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_SimulinkMotionInit(UInt16 connect_no);

        /*******************************************************************************
		* 函数名称: MC_SimulinkMotionClose
		* 函数功能: 仿真关闭
		
		* 输入参数: 无
		* 返 回 值: 无
		* 创 建 人: 
		* 创建时间: 2022-6-15
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_SimulinkMotionClose(UInt16 connect_no);
        #endregion

        #region trace_handle

        /*******************************************************************************
		* 函数名称: MC_TraceAddObjects
		* 函数功能: trace 添加采集数据
		
		* 输入参数: UInt16 connect_no 	
		
		 uint16 data_type		：定义的数据标号
		
		 uint16 axis_or_io_or_pdo_index 	：如果轴相关，则是轴序号，如果是IO，则是IO序号，ethercat的主索引等
		
		 uint16 data_sub_index		：如果是ethercat的对象字典，其为子索引。
		
		 uint16 mac_id		：从站的MAC ID
		
		 uint16 size		：数据的长度，按照byte来计算
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-7-4
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_TraceAddObjects(UInt16 connect_no, UInt16 data_type, UInt16 axis_or_io_or_pdo_index, UInt16 data_sub_index, UInt16 mac_id, UInt16 size);

        /*******************************************************************************
		* 函数名称: MC_TraceGetObjects
		* 函数功能: 根据添加的采集对象的顺序，可以获取添加对象的内容
		
		* 输入参数: UInt16 connect_no 	
		
		 uint16 objectIndex 	
		
		 uint16* data_type		
		
		 uint16* axis_or_io_or_pdo_index		
		
		 uint16* data_sub_index 	
		
		 uint16* mac_id 	
		
		 uint16* size		
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-7-4
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_TraceGetObjects(UInt16 connect_no, UInt16 objectIndex, ref UInt16 data_type, ref UInt16 axis_or_io_or_pdo_index, ref UInt16 data_sub_index, ref UInt16 mac_id, ref UInt16 size);

        /*******************************************************************************
		* 函数名称: MC_TraceResetObjects
		* 函数功能: 清除上次配置的采集对象
		
		* 输入参数: UInt16 connect_no 	
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-7-4
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_TraceResetObjects(UInt16 connect_no);
        /*******************************************************************************
		* 函数名称: MC_TraceSetTraceConfig
		* 函数功能: 数据采集的条件配置
		
		* 输入参数: UInt16 connect_no 	
		
		 uint16 traceType	: 0 连续追踪， 1：条件触发追踪	
		
		 uint16 sampleCycleFreqs	: 0:无效，N:每隔N-1个周期进行追踪	
		
		 uint16 triggerType 	：触发方式：0 掩码等于，1 大于, 2 小于 
		
		 uint32 conditionMask		: 按位触发时的掩码
		
		 double triggerCondition	： 比较的值
		
		 uint16 overflowHandle		：溢出后的处理：0 :停止采集;  1: 覆盖最后的;
		
		 uint16 triggerIndex	: 比较的对象的下标号
		
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-7-4
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_TraceSetTraceConfig(UInt16 connect_no, UInt16 traceType, UInt16 sampleCycleFreqs, UInt16 triggerType, UInt32 conditionMask,
                             double triggerCondition, UInt16 overflowHandle, UInt16 triggerIndex);
        /*******************************************************************************
		* 函数名称: MC_TraceGetTraceConfig
		* 函数功能: 获取数据采集的配置条件
		
		* 输入参数: UInt16 connect_no 	
		
		 UInt16* traceType		
		
		 UInt16* sampleCycleFreqs		
		
		 UInt16* triggerType		
		
		 uint32* conditionMask		
		
		 double* triggerCondition		
		
		 UInt16* overflowHandle 	
		
		 UInt16* triggerIndex		
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-7-4
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_TraceGetTraceConfig(UInt16 connect_no, ref UInt16 traceType, ref UInt16 sampleCycleFreqs, ref UInt16 triggerType, ref UInt32 conditionMask,
                            ref double triggerCondition, ref UInt16 overflowHandle, ref UInt16 triggerIndex);
        /*******************************************************************************
		* 函数名称: MC_TraceGetRunningFlag
		* 函数功能: 获取trace运行的标志
		
		* 输入参数: UInt16 connect_no 	
		
		 UInt16* startFlag		
		
		 UInt16* overflowFlag		
		
		 UInt16* trigerFlag 	
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-7-4
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_TraceGetRunningFlag(UInt16 connect_no, ref UInt16 startFlag, ref UInt16 overflowFlag, ref UInt16 trigerFlag);

        /*******************************************************************************
		* 函数名称: MC_TraceGetRunningInfo
		* 函数功能: 当前已采集的数据，及剩余空间
		
		* 输入参数: UInt16 connect_no 	
		
		 uint32* validInputNum		已存储的数据包个数
		
		 uint32* retainNum		剩余存储空间
		
		 uint32* bytesNumOnePackage 	一包数据的长度
		
		 UInt16* totalObjects		总的采集对象数
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-7-4
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_TraceGetRunningInfo(UInt16 connect_no, ref UInt32 validInputNum, ref UInt32 retainNum, ref UInt32 bytesNumOnePackage, ref UInt32 totalObjects);

        /*******************************************************************************
		* 函数名称: MC_TraceGetPackages
		* 函数功能: 读取采集的数据
		
		* 输入参数: UInt16 connect_no 	
		
		 uint32 readBytes		读取的数据个数，一次最多1024个bytes
		
		 unsigned char * data		数据
		
		 uint32 *realByteSize		实际读取的数据，（整数倍的每包长度）
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-7-4
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_TraceGetPackages(UInt16 connect_no, UInt32 readBytes, Byte[] data, ref UInt32 realByteSize);
        /*******************************************************************************
		* 函数名称: MC_TraceGetPackages
		* 函数功能: 
		重新采集数据	
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-7-4
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_TraceResetRunning(UInt16 connect_no);
        /*******************************************************************************
		* 函数名称: MC_TraceStart
		* 函数功能: 开始数据采集
		
		* 输入参数: UInt16 connect_no 	
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-7-4
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_TraceStart(UInt16 connect_no);

        /*******************************************************************************
		* 函数名称: MC_TraceStop
		* 函数功能: 停止采集
		
		* 输入参数: UInt16 connect_no 	
		* 返 回 值: 
		* 创 建 人: 
		* 创建时间: 2022-7-4
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_TraceStop(UInt16 connect_no);

        #endregion

        #region file_handle 
        /*******************************************************************************
		* 函数名称: MC_DownloadFile
		* 函数功能: 文件下载函数，包括所有类型的文件；
		
		* 输入参数: WORD connect_no 	
		
		 WORD fileType		文件类型
		
		 char* ptrFileNameDirectory 文件路径+文件名称
		
		* 返 回 值: 
		* 创 建 人: Forest
		* 创建时间: 2022-12-1
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_DownloadFile(UInt16 connect_no, UInt16 fileType, string ptrFileNameDirectory);
        /*******************************************************************************
		* 函数名称: MC_GetUpDownProgressRatio
		* 函数功能: 文件或字符串上传下载进度
		
		* 输入参数: WORD connect_no 	
		
		 double* progressRatio		0表示上传下载未开始，1表示上传下载完成
		* 返 回 值: 
		* 创 建 人: Forest
		* 创建时间: 2022-12-2
		*******************************************************************************/
        [DllImport("mcdll.dll")]
        public static extern UInt32 MC_GetUpDownProgressRatio(UInt16 connect_no, ref double progressRatio);


        #endregion
    
	}
}


