void DOButtonClicked(object sender, EventArgs eventArgs) { LampButton doBt = sender as LampButton; string doName = doBt.Text; JFDevCellInfo ci = JFHubCenter.Instance.MDCellNameMgr.GetDoCellInfo(doName); if (ci == null) //名称在配置中不存在 { ShowTips("DO操作失败:名称 \"" + doName + "\" 不存在"); return; } IJFDevice_MotionDaq dev = JFHubCenter.Instance.InitorManager.GetInitor(ci.DeviceID) as IJFDevice_MotionDaq; if (null == dev) { ShowTips(string.Format("DO: \"{0}\" 操作失败:所属设备 \"{1}\" 在系统中不存在", doName, ci.DeviceID)); return; } if (!dev.IsDeviceOpen) { ShowTips(string.Format("DO \"{0}\" 操作失败:所属设备 \"{1}\" 未打开(关闭状态)", doName, ci.DeviceID)); return; } if (dev.DioCount <= ci.ModuleIndex) { ShowTips(string.Format("DO \"{0}\" 操作失败:所属设备 \"{1}\" 所属模块Index = {2} 超出范围0~{3}", doName, ci.DeviceID, ci.ModuleIndex, dev.DioCount == 0 ? 0 : dev.DioCount - 1)); return; } IJFModule_DIO md = dev.GetDio(ci.ModuleIndex); if (md.DOCount <= ci.ChannelIndex) { ShowTips(string.Format("DO \"{0}\" 操作失败:通道序号:{1} 超出范围0~{2}", doName, ci.ChannelIndex, md.DOCount == 0 ? 0 : md.DOCount - 1)); return; } bool isON = false; int errCode = md.GetDO(ci.ChannelIndex, out isON); if (0 != errCode) { ShowTips(string.Format("DO \"{0}\" 操作失败:未能获取当前状态,信息:{1}", doName, md.GetErrorInfo(errCode))); return; } errCode = md.SetDO(ci.ChannelIndex, !isON); if (0 != errCode) { ShowTips(string.Format("DO \"{0}\" {1}操作失败:未能,信息:{2}", doName, isON?"关闭":"打开", md.GetErrorInfo(errCode))); return; } }
//delegate void dlgtUpdateIO(); public void UpdateIO() { if (InvokeRequired) { Invoke(new Action(UpdateIO)); return; } if (null == _dio) { return; } if (_ioIndex < 0 || (_isDo?_ioIndex >= _dio.DOCount:_ioIndex >= _dio.DICount)) { return; } bool isSigOn = false; if (0 != (_isDo ? _dio.GetDO(_ioIndex, out isSigOn): _dio.GetDI(_ioIndex, out isSigOn))) { return; } IsTurnOn = isSigOn; }
/// <summary> /// 将工站IO状态更新到界面上 /// </summary> void UpdateStationUI() { if (_station == null) { return; } for (int i = 0; i < doNamesInView.Count; i++) { string doName = doNamesInView[i]; LampButton lmpdo = panelDOs.Controls[i] as LampButton; JFDevCellInfo ci = JFHubCenter.Instance.MDCellNameMgr.GetDoCellInfo(doName); do { if (ci == null) //名称在配置中不存在 { lmpdo.LampColor = LampButton.LColor.Gray; break; } IJFDevice_MotionDaq dev = JFHubCenter.Instance.InitorManager.GetInitor(ci.DeviceID) as IJFDevice_MotionDaq; if (null == dev) { lmpdo.LampColor = LampButton.LColor.Gray; break; } if (!dev.IsDeviceOpen) { lmpdo.LampColor = LampButton.LColor.Gray; break; } if (dev.DioCount <= ci.ModuleIndex) { lmpdo.LampColor = LampButton.LColor.Gray; break; } IJFModule_DIO md = dev.GetDio(ci.ModuleIndex); if (md.DOCount <= ci.ChannelIndex) { lmpdo.LampColor = LampButton.LColor.Gray; break; } bool isOn = false; int errCode = md.GetDO(ci.ChannelIndex, out isOn); if (0 == errCode) { lmpdo.ForeColor = Color.Black; lmpdo.LampColor = isOn ? LampButton.LColor.Green : LampButton.LColor.Gray; } else { lmpdo.LampColor = LampButton.LColor.Gray; lmpdo.ForeColor = Color.Orange;//ucdo.IONameTextColor = Color.Red; } } while (false); } for (int i = 0; i < diNamesInView.Count; i++) { string diName = diNamesInView[i]; LampButton lmpdi = panelDIs.Controls[i] as LampButton; JFDevCellInfo ci = JFHubCenter.Instance.MDCellNameMgr.GetDiCellInfo(diName); do { if (ci == null) //名称在配置中不存在 { lmpdi.LampColor = LampButton.LColor.Gray; break; } IJFDevice_MotionDaq dev = JFHubCenter.Instance.InitorManager.GetInitor(ci.DeviceID) as IJFDevice_MotionDaq; if (null == dev) { lmpdi.LampColor = LampButton.LColor.Gray; break; } if (!dev.IsDeviceOpen) { lmpdi.LampColor = LampButton.LColor.Gray; break; } if (dev.DioCount <= ci.ModuleIndex) { lmpdi.LampColor = LampButton.LColor.Gray; break; } IJFModule_DIO md = dev.GetDio(ci.ModuleIndex); if (md.DICount <= ci.ChannelIndex) { lmpdi.LampColor = LampButton.LColor.Gray; break; } bool isOn = false; int errCode = md.GetDI(ci.ChannelIndex, out isOn); if (0 == errCode) { lmpdi.ForeColor = Color.Black; lmpdi.LampColor = isOn ? LampButton.LColor.Green : LampButton.LColor.Gray; } else { lmpdi.LampColor = LampButton.LColor.Gray; lmpdi.ForeColor = Color.Orange;//ucdo.IONameTextColor = Color.Red; } } while (false); } }
protected override bool ActionGenuine(out string errorInfo) { _isRunning = true; string doName = GetInitParamValue(PN_DOID) as string; if (!JFHubCenter.Instance.MDCellNameMgr.ContainDoName(doName)) { errorInfo = "参数项:\"DO通道名称\" = " + doName + " 在设备名称表中不存在"; return(false); } bool isDOEnable = (bool)GetInitParamValue(PN_WaitDOStatus); int timeoutMilSeconds = (int)GetInitParamValue(PN_TimeoutMilliSeconds); int cycleMilliSeconds = (int)GetInitParamValue(PN_CycleMilliSeconds); JFDevChannel doChn = new JFDevChannel(JFDevCellType.DO, doName); string avalidInfo; if (!doChn.CheckAvalid(out avalidInfo)) { errorInfo = avalidInfo; return(false); } _dev = doChn.Device() as IJFDevice_MotionDaq; _ci = doChn.CellInfo(); _dio = _dev.GetDio(_ci.ModuleIndex); DateTime startTime = DateTime.Now; while (true) { if (0 == _workCmd) //正常工作 { // DI状态检查 bool isON = false; int errCode = _dio.GetDO(_ci.ChannelIndex, out isON); if (errCode != 0) { errorInfo = "获取DO状态失败!" + _dio.GetErrorInfo(errCode); _workCmd = 0; _isRunning = false; SetOutputParamValue(ON_Result, JFWorkCmdResult.Timeout); return(false); } if (isDOEnable == isON) { errorInfo = "Success"; _workCmd = 0; _isRunning = false; SetOutputParamValue(ON_Result, JFWorkCmdResult.Success); return(true); } if (timeoutMilSeconds >= 0) { TimeSpan ts = DateTime.Now - startTime; if (ts.TotalMilliseconds >= timeoutMilSeconds) { errorInfo = "超时未等到DO:\" " + doName + "\"状态为" + isDOEnable.ToString(); _workCmd = 0; _isRunning = false; SetOutputParamValue(ON_Result, JFWorkCmdResult.Timeout); return(true); } } Thread.Sleep(cycleMilliSeconds); } else if (1 == _workCmd)//当前为暂停状态 { Thread.Sleep(cycleMilliSeconds); continue; } else//指令退出 { errorInfo = "收到退出指令"; _workCmd = 0; _isRunning = false; SetOutputParamValue(ON_Result, JFWorkCmdResult.ActionError); return(false); } } }