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)); }
/// <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); } }
/// <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); }
public static void SetInitParam(HTM.INIT_PARA initParam) { _initParam = initParam; _IsHtmParamInited = true; }
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); }
/// <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); }