Пример #1
0
        bool _InitParamEqualExisted() //内外参数设置一样一样的
        {
            if (null == config_file || null == use_aps_card || use_htnet_card == null ||
                offline_mode == null || max_axis_num == null || max_io_num == null ||
                max_dev_num == null || max_module_num == null)
            {
                return(false);
            }
            HTM.INIT_PARA currParam = new HTM.INIT_PARA();
            currParam.para_file      = config_file;
            currParam.use_aps_card   = (byte)(use_aps_card == yesnoRange[0] as string? 1 : 0);
            currParam.use_htnet_card = (byte)(use_htnet_card == yesnoRange[0] as string? 1 : 0);


            currParam.offline_mode = (byte)Array.IndexOf(openModeRange, offline_mode);

            currParam.max_axis_num = (ushort)max_axis_num;
            currParam.max_io_num   = (ushort)max_io_num;

            currParam.max_dev_num = (ushort)max_dev_num;

            currParam.max_module_num = (ushort)max_module_num;
            return(HtmDllManager.InitParamEqualExisted(currParam));
        }
Пример #2
0
        /// <summary>
        /// 打开设备
        /// </summary>
        public int OpenDevice()
        {
            lock (asynLocker)
            {
                if (!IsInitOK)
                {
                    return((int)ErrorDef.InitFailedWhenOpen);
                }

                if (IsDeviceOpen)
                {
                    return((int)ErrorDef.Success);
                }
                HTM.INIT_PARA initParam = new HTM.INIT_PARA();
                initParam.para_file      = config_file;
                initParam.use_aps_card   = (byte)(Array.IndexOf(yesnoRange, use_aps_card) == 0?1:0);
                initParam.use_htnet_card = (byte)(Array.IndexOf(yesnoRange, use_htnet_card) == 0 ? 1 : 0);
                initParam.offline_mode   = (byte)(Array.IndexOf(openModeRange, offline_mode));
                initParam.max_axis_num   = (ushort)max_axis_num;
                initParam.max_io_num     = (ushort)max_io_num;
                initParam.max_dev_num    = (ushort)max_dev_num;
                initParam.max_module_num = (ushort)max_module_num;
                initParam.language       = 0;
                int nErr = 0;
                lock (HtmDllManager.AsynLocker)
                {
                    if (HtmDllManager.OpendDevCount == 0)
                    {
                        HTM.Discard();
                        nErr = HTM.Init(ref initParam);
                        if (nErr < 0)
                        {
                            return((int)ErrorDef.InvokeFailed);
                        }
                    }
                    HtmDllManager.OpendDevCount++;//HtmDllManager.LightTrigOpend++;
                    IsDeviceOpen = true;
                }

                nErr = HTM.SetLightTrigSrc((int)devIndex, 0); //关闭所有通道
                if (0 != nErr)
                {
                    throw new Exception("Turn off all channels failed when open HtmLightTrig devIndex = " + devIndex);
                }
                for (int i = 0; i < TrigChannelCount; i++)
                {
                    srcChannels[i]    = 0;
                    channelEnables[i] = false;
                }


                nErr = HTM.SetLightTrigTime((int)devIndex, 0);
                if (0 != nErr)
                {
                    throw new Exception("SetLightTrigTime(devIndex, 0) failed when open HtmLightTrig devIndex = " + devIndex);
                }
                trigDuration = 0;
                IsDeviceOpen = true;
                return((int)ErrorDef.Success);
            }
        }
Пример #3
0
        /// <summary>
        /// 对象初始化
        /// </summary>
        /// <returns>操作成功返回True,失败返回false,可通过GetInitErrorInfo()获取错误信息</returns>
        public bool Initialize()
        {
            bool ret = false;

            //string errorInfo = "Unknown-Error!";
            lock (HtmDllManager.AsynLocker)
            {
                if (IsDeviceOpen)
                {
                    CloseDevice();
                }
                do
                {
                    if (null == config_file)
                    {
                        _initErrorInfo = "初始化参数:\"配置文件\"未设置!";
                        break;
                    }
                    if (use_aps_card == null)
                    {
                        _initErrorInfo = "初始化参数:\"使用凌华控制卡\"未设置!";;
                        break;
                    }
                    if (use_htnet_card == null)
                    {
                        _initErrorInfo = "初始化参数:\"使用HTM控制卡\"未设置!";
                        break;
                    }
                    if (offline_mode == null)
                    {
                        _initErrorInfo = "初始化参数:\"板卡打开模式\"未设置!";
                        break;
                    }
                    if (max_axis_num == null)
                    {
                        _initErrorInfo = "初始化参数:\"最大轴数\"未设置!";
                        break;
                    }
                    if (max_io_num == null)
                    {
                        _initErrorInfo = "初始化参数:\"最大IO数量\"未设置!";
                        break;
                    }
                    if (max_dev_num == null)
                    {
                        _initErrorInfo = "初始化参数:\"其他设备数量\"未设置!";
                        break;
                    }
                    if (max_module_num == null)
                    {
                        _initErrorInfo = "初始化参数:\"模块数量\"未设置!";
                        break;
                    }

                    if (null == devIndex)
                    {
                        _initErrorInfo = "初始化参数:\"设备序号\"未设置!";
                        break;
                    }
                    lock (HtmDllManager.AsynLocker)
                    {
                        if (HtmDllManager.IsHtmParamInited()) //HTM控制卡已打开
                        {
                            if (!_InitParamEqualExisted())    //当前预设参数和已打开的控制卡参数不同
                            {
                                _initErrorInfo = "HtmLightTrig初始化参数和已打开的HTM库中的初始化参数不同!";
                                break;
                            }
                        }
                        if (HtmDllManager.LightTrigInited.Contains((int)devIndex))
                        {
                            _initErrorInfo = "系统中已存在DevIndex = " + devIndex + " 的光源触发板对象!";
                            break;
                        }

                        HTM.INIT_PARA currParam = new HTM.INIT_PARA();
                        currParam.para_file      = config_file;
                        currParam.use_aps_card   = (byte)(use_aps_card == yesnoRange[0] as string? 1 : 0);
                        currParam.use_htnet_card = (byte)(use_htnet_card == yesnoRange[0] as string? 1 : 0);


                        currParam.offline_mode = (byte)Array.IndexOf(openModeRange, offline_mode);

                        currParam.max_axis_num = (ushort)max_axis_num;
                        currParam.max_io_num   = (ushort)max_io_num;

                        currParam.max_dev_num = (ushort)max_dev_num;

                        currParam.max_module_num = (ushort)max_module_num;
                        HtmDllManager.SetInitParam(currParam);

                        HtmDllManager.LightTrigInited.Add((int)devIndex);
                    }
                    ret            = true;
                    _initErrorInfo = "Success";
                } while (false);
            }
            IsInitOK = ret;
            return(ret);
        }
Пример #4
0
 public static void SetInitParam(HTM.INIT_PARA initParam)
 {
     _initParam        = initParam;
     _IsHtmParamInited = true;
 }
Пример #5
0
        public int OpenDevice()
        {
            if (!IsInitOK)
            {
                return((int)ErrorDef.InitFailedWhenOpenCard);
            }

            if (IsDeviceOpen)
            {
                return((int)ErrorDef.Success);
            }
            HTM.INIT_PARA initParam = new HTM.INIT_PARA();
            initParam.para_file      = config_file;
            initParam.use_aps_card   = (byte)(Array.IndexOf(yesnoRange, use_aps_card) == 0 ? 1 : 0);
            initParam.use_htnet_card = (byte)(Array.IndexOf(yesnoRange, use_htnet_card) == 0 ? 1 : 0);
            initParam.offline_mode   = (byte)(Array.IndexOf(openModeRange, offline_mode));
            initParam.max_axis_num   = (ushort)max_axis_num;
            initParam.max_io_num     = (ushort)max_io_num;
            initParam.max_dev_num    = (ushort)max_dev_num;
            initParam.max_module_num = (ushort)max_module_num;
            initParam.language       = 0;
            lock (HtmDllManager.AsynLocker)
            {
                if (0 != HTM.Init(ref initParam))
                {
                    HTM.Discard();
                    int nErr = 0;// HTM.Init(ref initParam);

                    for (int i = 0; i < 3; i++)
                    {
                        System.Threading.Thread.Sleep(500);
                        nErr = HTM.Init(ref initParam);
                        if (0 == nErr)
                        {
                            break;
                        }
                    }
                    if (nErr < 0)
                    {
                        return((int)ErrorDef.InvokeFailed);
                    }
                }

                HtmDllManager.OpendDevCount++;
                IsDeviceOpen = true;
            }


            if (HasAxis())
            {
                McCount = 1;
                mc.Open();
            }
            else
            {
                McCount = 0;
            }


            if (HasDio())
            {
                DioCount = 1;
                dio.Open();
            }
            else
            {
                DioCount = 0;
            }

            if (HasAio())
            {
                AioCount = 1;
                aio.Open();
            }
            else
            {
                AioCount = 0;
            }

            //if (HasCompareTrigger())
            //{
            //    cmpTrig.Open();
            //    CompareTriggerCount = 1;
            //}
            //else
            //    CompareTriggerCount = 0;
            GenCompareTrigs();
            return((int)ErrorDef.Success);
        }
Пример #6
0
        /// <summary>
        /// 初始化动作,并不打开卡,只是检查参数的合法性,打开卡的动作在Open()函数中
        /// </summary>
        /// <returns></returns>
        public bool Initialize()
        {
            bool ret = false;

            //string errorInfo = "Unknown-Error!";
            lock (HtmDllManager.AsynLocker)
            {
                //if (IsDeviceOpen)
                //    CloseDevice();
                do
                {
                    //if (HtmDllManager.MotionDaqCount > 0)
                    //{
                    //    _initErrorInfo = "系统中已存在HTM类型的MDD_Htm设备实例对象,不能初始化多个MDD_Htm设备对象!";
                    //    break;
                    //}
                    if (null == config_file)
                    {
                        _initErrorInfo = "初始化参数:\"配置文件\"未设置!";
                        break;
                    }
                    if (use_aps_card == null)
                    {
                        _initErrorInfo = "初始化参数:\"使用凌华控制卡\"未设置!";;
                        break;
                    }
                    if (use_htnet_card == null)
                    {
                        _initErrorInfo = "初始化参数:\"使用HTM控制卡\"未设置!";
                        break;
                    }
                    if (offline_mode == null)
                    {
                        _initErrorInfo = "初始化参数:\"板卡打开模式\"未设置!";
                        break;
                    }
                    if (max_axis_num == null)
                    {
                        _initErrorInfo = "初始化参数:\"最大轴数\"未设置!";
                        break;
                    }
                    if (max_io_num == null)
                    {
                        _initErrorInfo = "初始化参数:\"最大IO数量\"未设置!";
                        break;
                    }
                    if (max_dev_num == null)
                    {
                        _initErrorInfo = "初始化参数:\"其他设备数量\"未设置!";
                        break;
                    }
                    if (max_module_num == null)
                    {
                        _initErrorInfo = "初始化参数:\"模块数量\"未设置!";
                        break;
                    }
                    lock (HtmDllManager.AsynLocker)
                    {
                        if (HtmDllManager.IsHtmParamInited()) //HTM控制卡参数已设置
                        {
                            if (!_InitParamEqualExisted())    //当前预设参数和已打开的控制卡参数不同
                            {
                                _initErrorInfo = "MDD_Htm初始化参数和已打开的HTM库中的初始化参数不同!";
                                break;
                            }
                        }
                        //else
                        if (HtmDllManager.OpendDevCount > 0)
                        {
                            IsDeviceOpen = true;
                            HtmDllManager.OpendDevCount++;
                        }
                        else
                        {
                            HTM.INIT_PARA currParam = new HTM.INIT_PARA();
                            currParam.para_file      = config_file;
                            currParam.use_aps_card   = (byte)(use_aps_card == yesnoRange[0] as string? 1 : 0);
                            currParam.use_htnet_card = (byte)(use_htnet_card == yesnoRange[0] as string? 1 : 0);


                            currParam.offline_mode = (byte)Array.IndexOf(openModeRange, offline_mode);

                            currParam.max_axis_num = (ushort)max_axis_num;
                            currParam.max_io_num   = (ushort)max_io_num;

                            currParam.max_dev_num = (ushort)max_dev_num;

                            currParam.max_module_num = (ushort)max_module_num;
                            HtmDllManager.SetInitParam(currParam);
                        }

                        //HtmDllManager.MotionDaqCount++;
                    }
                    ret            = true;
                    _initErrorInfo = "Success";
                    //errorInfo = "Success";
                } while (false);
            }
            //_initErrorInfo = errorInfo;
            IsInitOK = ret;
            return(ret);
        }