/// <summary> /// 使能属性改变 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void chkEnable_CheckedChanged(object sender, EventArgs e) { if (isChnEnableChkSetting) { return; } if (!IsChnValid) { MessageBox.Show("操作失败:模块对象未设置/通道号超出范围!"); return; } int err = _module.SetTrigChannelEnable(_chn, chkEnable.Checked); if (0 != err) { isChnEnableChkSetting = true; chkEnable.Checked = !chkEnable.Checked; isChnEnableChkSetting = false; MessageBox.Show(chkEnable.Checked ? "使能": "禁用" + _chnID + "失败,错误信息:" + _module.GetErrorInfo(err)); return; } }
///// <summary> ///// 使通道可用(如伺服上电,光源/触发可用) ///// 建议在 打开设备->检查通道可用性 之后调用 ///// </summary> ///// <param name="errorInfo"></param> ///// <returns></returns> public bool EnabledChannel(out string errorInfo) { errorInfo = "Unknown-Error"; bool isOK = false; if (!CheckAvalid(out errorInfo)) { return(false); } int errorCode = 0; IJFDevice dev = Device(); switch (CellType) { case JFDevCellType.DI: isOK = true; errorInfo = "Success"; break; case JFDevCellType.DO: errorInfo = "Success"; isOK = true; break; case JFDevCellType.Axis: { IJFDevice_MotionDaq devMD = Device() as IJFDevice_MotionDaq; JFDevCellInfo ci = CellInfo(); IJFModule_Motion mm = devMD.GetMc(ci.ModuleIndex); errorCode = mm.ServoOn(ci.ChannelIndex); if (errorCode != 0) { errorInfo = mm.GetErrorInfo(errorCode); } else { isOK = true; errorInfo = "Success"; } } break; case JFDevCellType.AI: errorInfo = "Success"; isOK = true; break; case JFDevCellType.AO: errorInfo = "Success"; isOK = true; break; case JFDevCellType.CmpTrig: errorInfo = "Success"; isOK = true; break; case JFDevCellType.Light: dev = Device(); if (dev is IJFDevice_LightControllerWithTrig) //光源控制器 { IJFDevice_LightControllerWithTrig devLT = dev as IJFDevice_LightControllerWithTrig; errorCode = devLT.SetWorkMode(JFLightWithTrigWorkMode.TurnOnOff); //切换为开关模式 if (errorCode != 0) { errorInfo = "切换为开关模式失败:" + devLT.GetErrorInfo(errorCode); break; } } IJFDevice_LightController devl = dev as IJFDevice_LightController; errorCode = devl.SetLightChannelEnable(CellInfo().ChannelIndex, true); if (errorCode != 0) { errorInfo = "通道使能失败:" + devl.GetErrorInfo(errorCode); break; } isOK = true; errorInfo = "Success"; break; case JFDevCellType.Trig: dev = Device(); if (dev is IJFDevice_LightControllerWithTrig) //光源控制器 { IJFDevice_LightControllerWithTrig devLT = dev as IJFDevice_LightControllerWithTrig; errorCode = devLT.SetWorkMode(JFLightWithTrigWorkMode.Trigger); //切换为触发模式 if (errorCode != 0) { errorInfo = "切换为触发模式失败:" + devLT.GetErrorInfo(errorCode); break; } } IJFDevice_TrigController devt = dev as IJFDevice_TrigController; errorCode = devt.SetTrigChannelEnable(CellInfo().ChannelIndex, true); if (errorCode != 0) { errorInfo = "通道使能失败:" + devt.GetErrorInfo(errorCode); break; } isOK = true; errorInfo = "Success"; break; default: errorInfo = "未定义的通道类型"; break; } return(isOK); }
protected override bool ActionGenuine(out string errorInfo) { string chnID = GetInitParamValue("触发通道ID") as string; bool isAutoSwitchWorkMode = (bool)GetInitParamValue("自动切换到触发模式"); bool isAutoEnable = (bool)GetInitParamValue("自动使能"); int intensity = (int)GetInitParamValue("触发强度"); bool ignoreIntensity = (bool)GetInitParamValue("忽略不支持强度设置"); int duration = (int)GetInitParamValue("触发时长"); bool ignoreDuration = (bool)GetInitParamValue("忽略不支持时长设置"); int[] srcChannels = GetInitParamValue("输入源通道") as int[]; bool ignoreSrcChannels = (bool)GetInitParamValue("忽略不支持源通道设置"); IJFInitializable initor = null; JFDevCellInfo ci = null; if (!JFCMFunction.CheckDevCellName(JFCMFunction.LightTrig, chnID, out initor, out ci, out errorInfo)) { return(false); } int errCode = 0; IJFDevice_TrigController dev = initor as IJFDevice_TrigController; if (typeof(IJFDevice_LightControllerWithTrig).IsAssignableFrom(dev.GetType())) //当前设备同时也是开关式光源控制器 { IJFDevice_LightControllerWithTrig lightCtrlWithT = dev as IJFDevice_LightControllerWithTrig; JFLightWithTrigWorkMode wm; errCode = lightCtrlWithT.GetWorkMode(out wm); if (errCode != 0) { errorInfo = "获取工作模式失败:" + lightCtrlWithT.GetErrorInfo(errCode); return(false); } if (wm == JFLightWithTrigWorkMode.TurnOnOff) //当前处于开关模式 { if (!isAutoSwitchWorkMode) { errorInfo = "当前工作模式为开关光源模式"; return(false); } errCode = lightCtrlWithT.SetWorkMode(JFLightWithTrigWorkMode.Trigger); if (errCode != 0) { errorInfo = "未能将光源控制器切换为触发模式:" + lightCtrlWithT.GetErrorInfo(errCode); return(false); } } } bool isChnEnabled = false; errCode = dev.GetTrigChannelEnable(ci.ChannelIndex, out isChnEnabled); if (0 != errCode) { errorInfo = "获取通道使能状态失败:" + dev.GetErrorInfo(errCode); return(false); } if (!isChnEnabled) { if (!isAutoEnable) { errorInfo = "触发通道当前未使能"; return(false); } errCode = dev.SetTrigChannelEnable(ci.ChannelIndex, true); if (errCode != 0) { errorInfo = "使能触发通道失败:" + dev.GetErrorInfo(errCode); return(false); } } if (null != srcChannels && srcChannels.Length != 0) //需要绑定输入源通道 { int mask = 0; //输入通道掩码 foreach (int srcChn in srcChannels) { mask += 1 << mask; } errCode = dev.SetTrigChannelSrc(ci.ChannelIndex, mask); if (errCode != 0 && !ignoreSrcChannels) { errorInfo = "绑定触发源通道失败:" + dev.GetErrorInfo(errCode); return(false); } } errCode = dev.SetTrigChannelIntensity(ci.ChannelIndex, intensity); if (errCode != 0 && !ignoreIntensity) { errorInfo = "设置触发强度:" + intensity + " 失败:" + dev.GetErrorInfo(errCode); return(false); } errCode = dev.SetTrigChannelDuration(ci.ChannelIndex, duration); if (errCode != 0 && !ignoreDuration) { errorInfo = "设置触发时长:" + duration + " 失败:" + dev.GetErrorInfo(errCode); return(false); } errorInfo = "Success"; return(true); }