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; } }
protected override bool ActionGenuine(out string errorInfo) { _isRunning = true; string diName = GetMethodInputValue(PN_DIID) as string; if (!JFHubCenter.Instance.MDCellNameMgr.ContainDiName(diName)) { errorInfo = "参数项:\"DI通道名称\" = " + diName + " 在设备名称表中不存在"; return(false); } bool isDIEnable = (bool)GetMethodInputValue(PN_WaitDIStatus); int timeoutMilSeconds = (int)GetMethodInputValue(PN_TimeoutMilliSeconds); int cycleMilliSeconds = (int)GetInitParamValue(PN_CycleMilliSeconds); JFDevChannel diChn = new JFDevChannel(JFDevCellType.DI, diName); string avalidInfo; if (!diChn.CheckAvalid(out avalidInfo)) { errorInfo = avalidInfo; return(false); } _dev = diChn.Device() as IJFDevice_MotionDaq; _ci = diChn.CellInfo(); _dio = _dev.GetDio(_ci.ModuleIndex); DateTime startTime = DateTime.Now; while (true) { if (0 == _workCmd) //正常工作 { // DI状态检查 bool isON = false; int errCode = _dio.GetDI(_ci.ChannelIndex, out isON); if (errCode != 0) { errorInfo = "获取DI状态失败!" + _dio.GetErrorInfo(errCode); _workCmd = 0; _isRunning = false; SetOutputParamValue(ON_Result, JFWorkCmdResult.Timeout); return(false); } if (isDIEnable == 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 = "超时未等到DI:\" " + diName + "\"状态为" + isDIEnable.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); } } }
protected bool JFWaitDi(string diName, out string errorInfo, bool isTurnOn, int delaytime = -1) { if (!JFHubCenter.Instance.MDCellNameMgr.ContainDiName(diName)) { errorInfo = "参数项:\"DI通道名称\" = " + diName + " 在设备名称表中不存在"; return(false); } JFDevChannel diChn = new JFDevChannel(JFDevCellType.DI, diName); string avalidInfo; if (!diChn.CheckAvalid(out avalidInfo)) { errorInfo = avalidInfo; return(false); } IJFDevice_MotionDaq _dev = null; IJFModule_DIO _dio = null; JFDevCellInfo _ci = null; _dev = diChn.Device() as IJFDevice_MotionDaq; _ci = diChn.CellInfo(); _dio = _dev.GetDio(_ci.ModuleIndex); DateTime startTime = DateTime.Now; while (true) { if (0 == _workCmd) //正常工作 { // DI状态检查 bool isON = false; int errCode = _dio.GetDI(_ci.ChannelIndex, out isON); if (errCode != 0) { errorInfo = "获取DI状态失败!" + _dio.GetErrorInfo(errCode); _workCmd = 0; _isRunning = false; return(false); } if (isTurnOn == isON) { errorInfo = "Success"; _workCmd = 0; _isRunning = false; return(true); } if (delaytime >= 0) { TimeSpan ts = DateTime.Now - startTime; if (ts.TotalMilliseconds >= delaytime) { errorInfo = "超时未等到DI:\" " + diName + "\"状态为" + isTurnOn.ToString(); _workCmd = 0; _isRunning = false; return(false); } } Thread.Sleep(10); } else if (1 == _workCmd)//当前为暂停状态 { Thread.Sleep(10); continue; } else//指令退出 { errorInfo = "收到退出指令"; _workCmd = 0; _isRunning = false; return(false); } } }