/// <summary> /// 设置器件信息 /// </summary> /// <param name="list">器件列表</param> /// <param name="type">控制器类型</param> /// <returns>是否成功</returns> public bool SetDeviceSetup(List <DeviceInfoBase> list, int deviceCount, ControllerType type) { bool isSuccess = false; try { if (!IsConnected) { return(false); } List <NTP> ntpList = new List <NTP>(); foreach (var item in list) { NTP ntp = NTPBuildRequest.GetSetDeviceInfoRequest(item, deviceCount, type); if (ntp != null) { ntpList.Add(ntp); } } isSuccess = SerialClient.ExecuteSetTask(ntpList, type); } catch (Exception ex) { logger.Error(ex.Message, ex); } return(isSuccess); }
/// <summary> /// 执行步骤 /// </summary> private static void ExecuteStep() { NTP request = null; switch (CurrentExecuteState) { case ExecuteState.SetInvalidType: //获取控制器类型 request = NTPBuildRequest.GetControllerTypeRequest(); SendCommand(request); break; case ExecuteState.SetOver: //单步完成 发送 发送完毕 指令 request = NTPBuildRequest.GetSendOverRequest(); SendCommand(request); break; case ExecuteState.SetState: //发送请求指令 如果没有请求 结束 if (CurrentNTPList != null && CurrentNTPList.Count > 0) { request = CurrentNTPList[0]; SendCommand(request); } else { CurrentFinishState = FinishState.Succeessed; CurrentExecuteState = ExecuteState.Untreated; } break; } }
/// <summary> /// 设置手控盘信息 /// </summary> /// <param name="list">手控盘列表</param> /// <param name="type">控制器类型</param> /// <returns>是否成功</returns> public bool SetManualBoardSetup(List <ManualControlBoard> list, ControllerType type) { if (!IsConnected) { return(false); } List <NTP> ntpList = new List <NTP>(); foreach (var item in list) { NTP ntp = NTPBuildRequest.GetSetManualBoardRequest(item, type); if (ntp != null) { ntpList.Add(ntp); } } return(SerialClient.ExecuteSetTask(ntpList, type)); }
/// <summary> /// 设置控制器信息 /// </summary> /// <param name="model">控制器信息</param> /// <param name="type">控制器类型</param> /// <returns>是否成功</returns> public bool SetMachineSetup(ControllerModel model, ControllerType type) { if (!IsConnected) { return(false); } List <NTP> ntpList = new List <NTP>(); //器件 int deviceCount = 0; foreach (var loop in model.Loops) { deviceCount = loop.DeviceAmount; List <DeviceInfo8053> list = loop.GetDevices <DeviceInfo8053>(); foreach (var item in list) { NTP ntp = NTPBuildRequest.GetSetDeviceInfoRequest(item, deviceCount, type); if (ntp != null) { ntpList.Add(ntp); } } } //标准组态 foreach (var standard in model.StandardConfig) { NTP ntp = NTPBuildRequest.GetSetStandardConfigRequest(standard, type); if (ntp != null) { ntpList.Add(ntp); } } //混合组态 foreach (var mixed in model.MixedConfig) { NTP ntp = NTPBuildRequest.GetSetMixedConfigRequest(mixed, type); if (ntp != null) { ntpList.Add(ntp); } } //通用组态 foreach (var general in model.GeneralConfig) { NTP ntp = NTPBuildRequest.GetSetGeneralConfigRequest(general, type); if (ntp != null) { ntpList.Add(ntp); } } //手控盘 foreach (var manual in model.ControlBoard) { NTP ntp = NTPBuildRequest.GetSetManualBoardRequest(manual, type); if (ntp != null) { ntpList.Add(ntp); } } return(SerialClient.ExecuteSetTask(ntpList, type)); }
/// <summary> /// 执行获取指令 /// </summary> private static void ExecuteGet(NTP ntp) { NTP request = null; switch (ntp.PState) { case NTPState.Successed: case NTPState.Failed: break; case NTPState.Normal: switch (ntp.Command) { case CommandType.MachineTypeResponose: //控制器类型 if (CheckIsValidType(ntp)) { logger.Debug("machine type matched!"); CurrentExecuteState = ExecuteState.GetState; request = NTPBuildRequest.GetConfirmRequest(true); SendCommand(request); } else { CurrentExecuteState = ExecuteState.Untreated; CurrentFinishState = FinishState.Failed; logger.Error("machine type unmatched!"); } break; case CommandType.Patrol: //巡检 break; case CommandType.Ready: //准备发送 logger.Debug("ready!"); CurrentExecuteState = ExecuteState.GetState; request = NTPBuildRequest.GetConfirmRequest(true); SendCommand(request); break; case CommandType.DeviceUp: //器件设置 logger.Debug("device up!"); if (CurrentNTPList != null) { CurrentNTPList.Add(ntp); } CurrentExecuteState = ExecuteState.GetState; request = NTPBuildRequest.GetConfirmRequest(true); SendCommand(request); break; case CommandType.StandardUp: //标准组态 logger.Debug("Standard up!"); if (CurrentNTPList != null) { CurrentNTPList.Add(ntp); } CurrentExecuteState = ExecuteState.GetState; request = NTPBuildRequest.GetConfirmRequest(true); SendCommand(request); break; case CommandType.MixedUp: //混合组态 logger.Debug("Mixed up!"); if (CurrentNTPList != null) { CurrentNTPList.Add(ntp); } CurrentExecuteState = ExecuteState.GetState; request = NTPBuildRequest.GetConfirmRequest(true); SendCommand(request); break; case CommandType.GeneralUp: //通用组态 logger.Debug("General up!"); if (CurrentNTPList != null) { CurrentNTPList.Add(ntp); } CurrentExecuteState = ExecuteState.GetState; request = NTPBuildRequest.GetConfirmRequest(true); SendCommand(request); break; case CommandType.ManualUp: //手控盘 logger.Debug("Manual up!"); if (CurrentNTPList != null) { CurrentNTPList.Add(ntp); } CurrentExecuteState = ExecuteState.GetState; request = NTPBuildRequest.GetConfirmRequest(true); SendCommand(request); break; case CommandType.Over: //发送完毕 case CommandType.Over8003: logger.Debug("Get over!"); CurrentExecuteState = ExecuteState.Untreated; CurrentFinishState = FinishState.Succeessed; request = NTPBuildRequest.GetConfirmRequest(true); SendCommand(request); break; } break; } }
/// <summary> /// 执行设置指令 /// </summary> private static void ExecuteSet(NTP ntp) { switch (ntp.PState) { case NTPState.Successed: switch (CurrentExecuteState) { case ExecuteState.SetState: //移除已经发送的指令 等待巡检 发送 发送完毕 CurrentExecuteState = ExecuteState.SetOver; break; case ExecuteState.SetOver: //等待巡检 发送下一条指令 if (CurrentNTPList != null && CurrentNTPList.Count > 0) { CurrentNTPList.RemoveAt(0); } if (CurrentNTPList != null && CurrentNTPList.Count > 0) { CurrentExecuteState = ExecuteState.SetState; } else { CurrentFinishState = FinishState.Succeessed; CurrentExecuteState = ExecuteState.Untreated; } break; } break; case NTPState.Failed: if (ErrorMaxCount <= 0) //暂未使用 { CurrentExecuteState = ExecuteState.Untreated; CurrentFinishState = FinishState.Failed; logger.Error("控制器验证错误数量太多!"); } break; case NTPState.Normal: switch (ntp.Command) { case CommandType.MachineTypeResponose: //控制器类型 if (CheckIsValidType(ntp)) { logger.Debug("machine type matched!"); CurrentExecuteState = ExecuteState.SetState; NTP request = NTPBuildRequest.GetConfirmRequest(true); SendCommand(request); } else { CurrentExecuteState = ExecuteState.Untreated; CurrentFinishState = FinishState.Failed; logger.Error("machine type unmatched!"); } break; case CommandType.Patrol: //巡检 ExecuteStep(); break; } break; } }