| | |
| | | using iWareCC.Common.Helper; |
| | | using Admin.NET.Application; |
| | | using iWareCC.Common.Helper; |
| | | using iWareCC.DeviceThreadFactory; |
| | | using iWareCC.Forms; |
| | | using iWareCC.RgvService; |
| | |
| | | using iWareCC.StationService; |
| | | using iWareCC.ThreadService; |
| | | using iWareCC.ThreadService._03_BZ12_机器人码包工位_; |
| | | using iWareCC.ThreadService._04_BZ21_搬运整垛机器人_; |
| | | using iWareCC.WCF; |
| | | using iWareCommon.Common.Globle; |
| | | using iWareCommon.Utils; |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Data; |
| | | using System.Data.Entity.Core.Metadata.Edm; |
| | | using System.Diagnostics; |
| | | using System.Drawing; |
| | | using System.Linq; |
| | | using System.Linq.Expressions; |
| | | using System.Net; |
| | | using System.ServiceModel; |
| | | using System.Threading; |
| | | using System.Threading.Tasks; |
| | | using System.Windows.Forms; |
| | | using XiGang.Core.Model; |
| | | using XiGang.Core.Model.ViewModels; |
| | | using static WZ.Useful.Commons.NativeMethods; |
| | | |
| | | |
| | | namespace iWareCC |
| | | { |
| | | public partial class FormCC : Form |
| | | { |
| | | /// <summary> |
| | | /// 全局-269位置最新扫描的板件数据(格式 包号|Upi|时间点) |
| | | /// </summary> |
| | | public static string Globle_269_LastPackageUpi = ""; |
| | | |
| | | /// <summary> |
| | | /// 全局-配置报警信息列表 |
| | | /// </summary> |
| | | public static DeviceWarningOutput configDeviceWarningList = DeviceWarningHandler.GetConfigWarningList(); |
| | | |
| | | /// <summary> |
| | | /// 全局—是否可以运行执行出库模式 |
| | | /// </summary> |
| | | public static bool IsAllowRunOutMode = false; |
| | | |
| | | /// <summary> |
| | | /// 当前下发出库任务的包号 |
| | | /// </summary> |
| | | public static string currHandlerPackageCodeForIssueOutboundTask = ""; |
| | | |
| | | /// <summary> |
| | | /// 1号堆垛机入库口扫码强制验证通过 |
| | |
| | | this.rBNormal.Checked = SystemValue.rBNormal_Checked = true; |
| | | this.rbHand.Checked = SystemValue.rbHand_Checked = false; |
| | | this.rBDebug.Checked = SystemValue.rBDebug_Checked = false; |
| | | this.rBOnlyIn.Checked = SystemValue.rBOnlyIn_Checked = false; |
| | | |
| | | |
| | | |
| | | SetModelCheckBoxToSystemValue(); |
| | |
| | | startModelTipsThread.Start(); |
| | | |
| | | #region 获取设备数据 |
| | | ParameterizedThreadStart parStart1 = new ParameterizedThreadStart(GetSrmInfo); |
| | | Thread thread1 = new Thread(parStart1); |
| | | object o1 = (int)EDevice.一号堆垛机; |
| | | thread1.Start(o1); |
| | | |
| | | ParameterizedThreadStart parStart2 = new ParameterizedThreadStart(GetSrmInfo); |
| | | Thread thread2 = new Thread(parStart2); |
| | | object o2 = (int)EDevice.二号堆垛机; |
| | | thread2.Start(o2); |
| | | |
| | | ParameterizedThreadStart parStart3 = new ParameterizedThreadStart(GetSrmInfo); |
| | | Thread thread3 = new Thread(parStart3); |
| | | object o3 = (int)EDevice.三号堆垛机; |
| | | thread3.Start(o3); |
| | | |
| | | ParameterizedThreadStart parStart4 = new ParameterizedThreadStart(GetSrmInfo); |
| | | Thread thread4 = new Thread(parStart4); |
| | | object o4 = (int)EDevice.四号堆垛机; |
| | | thread4.Start(o4); |
| | | |
| | | |
| | | |
| | | tskGetRgv1Info = new Thread(GetRgvInfo); |
| | | tskGetRgv1Info.Start(); |
| | | |
| | | var tskGetStationInfo = new Thread(GetStationInfo); |
| | | tskGetStationInfo.Start(); |
| | | |
| | | //堆垛机UI赋值 |
| | | SetSrmUI(); |
| | | var _GetStationWarningInfo = new Thread(GetStationWarningInfo); |
| | | _GetStationWarningInfo.Start(); |
| | | |
| | | |
| | | tskSetSrmLable = new Thread(SrmRead_Label); |
| | | tskSetSrmLable.Start(); |
| | | |
| | | #endregion |
| | | |
| | | #region 设置显示UI |
| | | tskSetSrmLable = new Thread(SrmRead_Label); |
| | | tskSetSrmLable.Start(); |
| | | tskSetRgvLable = new Thread(SetRgvLable); |
| | | tskSetRgvLable.Start(); |
| | | |
| | | |
| | | #endregion |
| | | |
| | | #region 服务线程启动 |
| | |
| | | // rgvService.StartService(); |
| | | |
| | | |
| | | //处理【下发中】的出库计划任务 |
| | | // new Thread(OutPlanTaskDecompose.HandlerIssuingTask).Start(); |
| | | |
| | | //任务分解线程-出库 |
| | | // new Thread(MainTaskDecompose.HandlerMainTaskDecompose).Start(); |
| | | //new Thread(DataProcess_RobotBuffer_ModeChange.Handler).Start(); |
| | | |
| | | //任务分解线程-组盘入库 |
| | | // new Thread(MainTaskDecompose_ZPRK.HandlerMainTaskDecompose_ZPRK).Start(); |
| | | new Thread(DataProcess_RobotBuffer_IssueOutboundTask.Handler).Start(); |
| | | |
| | | |
| | | //new Thread(DataProcess_RobotBuffer_AutoQiTaoOutbound.Handler).Start(); |
| | | new Thread(DataProcess_RobotBuffer_PesonOutbound.Handler).Start(); |
| | | |
| | | new Thread(DataProcess_RobotBuffer_FinishTaskForOutbound.Handler).Start(); |
| | | |
| | | //自动组盘任务 |
| | | new Thread(DataProcess_RobotBuffer_ForceOutbound.Handler).Start(); |
| | | |
| | | new Thread(DataProcess_RobotBuffer_FinishTask.Handler).Start(); |
| | | |
| | | new Thread(DataProcess_BZ01.Handler).Start(); |
| | | |
| | | //重新获取发动机信息 |
| | | |
| | | new Thread(DataProcess_269.Handler).Start(); |
| | | |
| | | //1014库位转运到1020线程 |
| | | |
| | | |
| | | new Thread(DataProcess_BZ39.Handler).Start(); |
| | | |
| | | new Thread(DataProcess_BZ39_IssueInboundTask.Handler).Start(); |
| | | new Thread(DataProcess_BZ12.Hander).Start(); |
| | | new Thread(DataProcess_BZ12_IssueTask.Handler).Start(); |
| | | |
| | | |
| | | new Thread(DataProcess_BZ12_FinishTask.Handler).Start(); |
| | | |
| | | new Thread(DataProcess_BZ21.Hander).Start(); |
| | | new Thread(DataProcess_BZ21_IssueTask.Handler).Start(); |
| | | |
| | | new Thread(DataProcess_BZ21_FinishTask.Handler).Start(); |
| | | new Thread(DeleteData).Start(); |
| | | |
| | | new Thread(LineInSacnResult.HandlerLineInSacnResult).Start(); |
| | | new Thread(PushPackageCodeToMes.Handler).Start(); |
| | | new Thread(PushPaperCutToMes.Handler).Start(); |
| | | |
| | | |
| | | //new Thread(DataProcess_ValidateQiTao.Handler).Start(); |
| | | |
| | | //*/ |
| | | #endregion |
| | |
| | | } |
| | | private void FormCC_Load(object sender, EventArgs e) |
| | | { |
| | | dateTimePicker_Start.Value = DateTime.Now; |
| | | dateTimePicker_End.Value = DateTime.Now; |
| | | |
| | | asc_panel_DeviceTaskList.controllInitializeSize(this.panel_DeviceTaskList); |
| | | asc_panel_DeviceTaskList_dgvPartTask_Finished.controllInitializeSize(this.panel_DeviceTaskList_dgvPartTask_Finished); |
| | | asc_panel_dataGridView__OutTaskList.controllInitializeSize(this.panel_dataGridView__OutTaskList); |
| | | asc_panel_WaitPlanDetail.controllInitializeSize(this.panel_WaitPlanDetail); |
| | | asc_panel_DeviceTaskList_dataGridView_RgvStore.controllInitializeSize(this.panel_DeviceTaskList_dataGridView_RgvStore); |
| | | asc_panel_dg_OutTaskRetryToMes.controllInitializeSize(this.panel_dg_OutTaskRetryToMes); |
| | | |
| | | this.dgvPartTask.ReadOnly = true; |
| | | |
| | | /* |
| | | trCancelBatchBackToStore = new Thread(CancelBatchBackToStore); |
| | |
| | | tr_reverseSplitFinishProdOutStoreThread.Start(); |
| | | //*/ |
| | | |
| | | this.SetInitPlaceValue(); |
| | | |
| | | #region 对外发布WCF形式数据访问服务 |
| | | try |
| | | Task.Run(() => |
| | | { |
| | | #region 对外发布WCF形式数据访问服务 |
| | | var lineServiceHost = new ServiceHost(typeof(CCWcfService)); |
| | | lineServiceHost.Open(); |
| | | lbl_WCFMsg.Text = "发布WCF成功," + lineServiceHost.BaseAddresses[0].AbsoluteUri; |
| | | lbl_WCFMsg.ForeColor = Color.Green; |
| | | #endregion |
| | | try |
| | | { |
| | | #region 对外发布WCF形式数据访问服务 |
| | | var lineServiceHost = new ServiceHost(typeof(CCWcfService)); |
| | | lineServiceHost.Open(); |
| | | lbl_WCFMsg.Text = "发布WCF成功," + lineServiceHost.BaseAddresses[0].AbsoluteUri; |
| | | lbl_WCFMsg.ForeColor = Color.Green; |
| | | #endregion |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.CCWCFService, "发布WCF失败", ex); |
| | | lbl_WCFMsg.Text = "发布WCF失败:" + ex.Message; |
| | | lbl_WCFMsg.ForeColor = Color.Red; |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.CCWCFService, "发布WCF失败", ex); |
| | | lbl_WCFMsg.Text = "发布WCF失败:" + ex.Message; |
| | | lbl_WCFMsg.ForeColor = Color.Red; |
| | | } |
| | | }); |
| | | |
| | | #endregion |
| | | |
| | |
| | | //btn_Start_Click(null, null); |
| | | } |
| | | |
| | | |
| | | |
| | | #region 堆垛机线程和UI处理 |
| | | |
| | | /// <summary> |
| | | /// 设置1/2号堆垛机的前端显示 |
| | | /// </summary> |
| | |
| | | |
| | | var showNowTime = "(" + DateTimeHelper.ConvertToStringForOnlyShowTime(DateTime.Now) + ")"; |
| | | //设置堆垛机任务下发和任务确认线程消息 |
| | | this.lbl_Alter_Srm1Release.Text = showNowTime + SystemWarningMsg._lbl_Alert_Srm1Release; |
| | | this.lbl_Alert_Srm2Release.Text = showNowTime + SystemWarningMsg._lbl_Alert_Srm2Release; |
| | | this.lbl_Alert_Srm3Release.Text = showNowTime + SystemWarningMsg._lbl_Alert_Srm3Release; |
| | | this.lbl_Alert_Srm4Release.Text = showNowTime + SystemWarningMsg._lbl_Alert_Srm4Release; |
| | | this.lbl_Alert_DataProcess_BZ39_IssueInboundTask.Text = showNowTime + SystemWarningMsg._lbl_Alert_DataProcess_BZ39_IssueInboundTask; |
| | | this.lbl_Alert_DataProcess_RobotBuffer_ForceOutbound.Text = showNowTime + SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_ForceOutbound; |
| | | this.lbl_Alert_DataProcess_BZ12.Text = showNowTime + SystemWarningMsg._lbl_alert_DataProcess_BZ12; |
| | | |
| | | //设置堆垛机任务下发和任务完成确认线程消息 |
| | | this.lbl_Alter_Srm1ReleaseFinish.Text = showNowTime + SystemWarningMsg._lbl_Alert_Srm1ReleaseFinish; |
| | | this.lbl_Alert_Srm2ReleaseFinish.Text = showNowTime + SystemWarningMsg._lbl_Alert_Srm2ReleaseFinish; |
| | | this.lbl_Alert_Srm3ReleaseFinish.Text = showNowTime + SystemWarningMsg._lbl_Alert_Srm3ReleaseFinish; |
| | | this.lbl_Alert_Srm4ReleaseFinish.Text = showNowTime + SystemWarningMsg._lbl_Alert_Srm4ReleaseFinish; |
| | | |
| | | this.lbl_Alert_RgvRelease.Text = showNowTime + SystemWarningMsg._lbl_Alert_RgvRelease; |
| | | this.lbl_Alert_RgvReleaseFinish.Text = showNowTime + SystemWarningMsg._lbl_Alert_RgvReleaseFinish; |
| | | this.lbl_Alert_RgvReleaseFinish_BuChang.Text = showNowTime + SystemWarningMsg._lbl_Alert_RgvReleaseFinish_BuChang; |
| | | this.lbl_Alert_DataProcess_BZ12_FinishTask.Text = showNowTime + SystemWarningMsg._lbl_Alert_DataProcess_BZ12_FinishTask; |
| | | this.lbl_Alert_DataProcess_BZ21_FinishTask.Text = showNowTime + SystemWarningMsg._lbl_Alert_DataProcess_BZ21_FinishTask; |
| | | |
| | | this.lbl_Alert_HandlerIssuingTask.Text = showNowTime + SystemWarningMsg._lbl_Alert_HandlerIssuingTask; |
| | | |
| | | |
| | | this.lbl_Alert_PushPaperCutToMes.Text = showNowTime + SystemWarningMsg._lbl_Alert_PushPaperCutToMes; |
| | | this.lbl_Alert_PushPackageCodeToMes.Text = showNowTime + SystemWarningMsg._lbl_Alert_PushPackageCodeToMes; |
| | | |
| | | this.lbl_Alert_DataProcess_BZ12_IssueTask.Text = showNowTime + SystemWarningMsg._lbl_Alert_DataProcess_BZ12_IssueTask; |
| | | |
| | | this.lbl_DataProcess_ValidateQiTao.Text = showNowTime + SystemWarningMsg._lbl_Alert_DataProcess_ValidateQiTao; |
| | | |
| | | this.lbl_Alert_DataProcess_RobotBuffer_FinishTask.Text = showNowTime + SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_FinishTask; |
| | | |
| | | this.lbl_MainTaskDecompose.Text = showNowTime + SystemWarningMsg._lbl_Alert_MainTaskDecompose; |
| | | this.lbl_DataProcess_BZ21_IssueTask.Text = showNowTime + SystemWarningMsg._lbl_Alert_DataProcess_BZ21_IssueTask; |
| | | |
| | | this.lbl_MainTaskDecompose_ZPRK.Text = showNowTime + SystemWarningMsg._lbl_Alert_MainTaskDecompose_ZPRK; |
| | | this.lbl_DataProcess_RobotBuffer_ModeChange.Text = showNowTime + SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_ModeChange; |
| | | |
| | | this.lbl_Alert_DataProcess_RobotBuffer_FinishTaskForOutbound.Text = showNowTime + SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_FinishTaskForOutbound; |
| | | |
| | | this.lbl_Alert_DeleteData.Text = showNowTime + SystemWarningMsg._lbl_Alert_DeleteData; |
| | | |
| | | this.lbl_Alert_EmptySalverTransfer.Text = showNowTime + SystemWarningMsg._lbl_Alert_EmptySalverTransfer; |
| | | this.lbl_Alert_DataProcess_RobotBuffer_AutoQiTaoOutbound.Text = showNowTime + SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_AutoQiTaoOutbound; |
| | | |
| | | this.lbl_Alter_DataProcess_BZ21.Text = showNowTime + SystemWarningMsg._lbl_Alert_DataProcess_BZ21; |
| | | |
| | | this.lbl_alert_DataProcess_BZ39.Text = showNowTime + SystemWarningMsg._lbl_alert_DataProcess_BZ39; |
| | | |
| | |
| | | |
| | | this.lbl_alert_DataProcess_269.Text = showNowTime + SystemWarningMsg._lbl_alert_DataProcess_269; |
| | | |
| | | this.lbl_Alert_Place1014ClearStoreTask.Text = showNowTime + SystemWarningMsg._lbl_Alert_Place1014To1020TaskTask; |
| | | |
| | | |
| | | this.lbl_Alter_OutTaskRetryToMes.Text = showNowTime + SystemWarningMsg._lbl_Alert_OutTaskRetryToMes; |
| | | this.lbl_Alert_DataProcess_RobotBuffer_IssueOutboundTask.Text = showNowTime + SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_IssueOutboundTask; |
| | | |
| | | |
| | | |
| | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.SrmTheadService, "方法SrmRead_Label出现异常:" + ex.Message, ex); |
| | | continue; |
| | | } |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取堆垛机的实时信息 |
| | | /// </summary> |
| | | private void GetSrmInfo(object int_device) |
| | | { |
| | | while (true) |
| | | { |
| | | EDevice device = (EDevice)Enum.Parse(typeof(EDevice), int_device.ToString()); |
| | | Thread.Sleep(cycleDelay_Device); |
| | | try |
| | | { |
| | | using (var opcClinet = new SrmService.SrmServiceClient()) |
| | | { |
| | | srmViewDict[(int)device] = opcClinet.GetSrmInfo((int)device); |
| | | CastToDevice_SrmRealTime(srmViewDict[(int)device]); |
| | | List<String> warningAddressList = new List<string>(); |
| | | if (srmViewDict[(int)device].R_WarningDBList != null && srmViewDict[(int)device].R_WarningDBList.Length > 0) |
| | | { |
| | | var waringList = srmViewDict[(int)device].R_WarningDBList.ToList(); |
| | | if (waringList != null && waringList.Count > 0) |
| | | { |
| | | for (int i = 0; i < waringList.Count; i++) |
| | | { |
| | | DeviceWarningHandler.SaveWarning(device, iWareCommon.Utils.LogType.SrmTheadService, |
| | | waringList[i].Code, waringList[i].Address, waringList[i].Context);//新增报警 |
| | | warningAddressList.Add(waringList[i].Address); |
| | | } |
| | | } |
| | | } |
| | | DeviceWarningHandler.AutoCloseWarning(device, iWareCommon.Utils.LogType.SrmTheadService, warningAddressList);//自动关闭报警 |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.SrmTheadService, "获取" + device.ToString() + "的实时信息异常:" + ex.Message, ex); |
| | | continue; |
| | | } |
| | | }; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 转换为SRM的实时状态 |
| | | /// </summary> |
| | | /// <param name="view"></param> |
| | | private void CastToDevice_SrmRealTime(SrmView view) |
| | | { |
| | | List<Device_SrmRealTime> realTimeList = new List<Device_SrmRealTime>(); |
| | | Device_SrmRealTime obj = new Device_SrmRealTime(); |
| | | EDevice device = (EDevice)Enum.Parse(typeof(EDevice), view.R_SrmNo.ToString()); |
| | | obj = new Device_SrmRealTime() |
| | | { |
| | | SrmCode = view.R_SrmNo.ToString(), |
| | | SrmName = device.ToString(), |
| | | Mode = view.R_Mode.ToString(), |
| | | ModeName = view.ModeName, |
| | | State = view.R_State.ToString(), |
| | | StateName = view.StateName, |
| | | |
| | | TaskID = view.R_TaskNo.ToString(), |
| | | LiftFull = view.R_LiftFull == 1, |
| | | PosX = view.R_PosX, |
| | | PosY = view.R_PosY, |
| | | PosZ = view.R_PosZ, |
| | | PosZName = EnumberHelper.GetEnumName<ESrmForkPosition>(view.R_PosZ).ToString(), |
| | | // XCoordinate=view.r_xc |
| | | |
| | | SrmToPlace = view.SrmToPlace, |
| | | SrmSourcePlace = view.SrmSourcePlace, |
| | | ZCoordinate = view.R_PosZmm.ToString(), |
| | | XCoordinate = view.R_PosXmm.ToString(), |
| | | YCoordinate = view.R_PosYmm.ToString() |
| | | |
| | | }; |
| | | realTimeList.Add(obj); |
| | | |
| | | DeviceSrmRealTimeHandler.Update(realTimeList, iWareCommon.Utils.LogType.SrmTheadService); |
| | | |
| | | } |
| | | #region 堆垛机线程和UI处理 |
| | | |
| | | |
| | | /// <summary> |
| | | /// 堆垛机的UI显示 |
| | | /// </summary> |
| | | /// <param name="device"></param> |
| | | private void SetSrmUI() |
| | | { |
| | | if (FormCC.IsSimulationPLC == false) |
| | | { |
| | | SrmDeviceList.ForEach(x => |
| | | { |
| | | ParameterizedThreadStart parStart = new ParameterizedThreadStart(SingleSetSrmUI); |
| | | Thread thread = new Thread(parStart); |
| | | object o = (int)x; |
| | | thread.Start(o); |
| | | }); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 堆垛机的UI显示 |
| | | /// </summary> |
| | | /// <param name="device"></param> |
| | | private void SingleSetSrmUI(object int_device) |
| | | { |
| | | while (true) |
| | | { |
| | | try |
| | | { |
| | | EDevice device = (EDevice)Enum.Parse(typeof(EDevice), int_device.ToString()); |
| | | SrmView srmInfo = srmViewDict[(int)device]; |
| | | var panel = GetSrmPanel(device); |
| | | List<PropertieModel> proList = ClassHelper.GetPropertieModels<SrmView>(srmInfo); |
| | | foreach (var item in DeviceDict.LabelSrmDict) |
| | | { |
| | | //var lbl = ControlHelper.GetLabel(this, panel, item.Key + (int)device); |
| | | Object obj = ControlHelper.GetControlInstance(panel, item.Key + (int)device); |
| | | if (obj != null) |
| | | { |
| | | Label lbl = (Label)obj; |
| | | lbl.Text = item.Value.LablePreStr + proList.Find(x => x.PropertyName == item.Value.LableProName).DataValue; |
| | | } |
| | | } |
| | | //特殊处理- 报警 |
| | | var lbSrmAlarm = GetSrmAlarmLabel(device); |
| | | if (srmInfo.R_Alarm != 1) |
| | | { |
| | | lbSrmAlarm.Text = string.Empty; |
| | | lbSrmAlarm.ForeColor = Color.SkyBlue; |
| | | lbSrmAlarm.BackColor = Color.Transparent; |
| | | lbSrmAlarm.ForeColor = Color.Maroon; |
| | | lbSrmAlarm.BackColor = Color.WhiteSmoke; |
| | | } |
| | | else |
| | | { //处于报警状态下 |
| | | if (srmInfo.R_WarningDBList != null && srmInfo.R_WarningDBList.Length > 0) |
| | | { |
| | | lbSrmAlarm.Text = String.Join(",", srmInfo.R_WarningDBList.Select(x => x.Context).ToArray()); |
| | | } |
| | | |
| | | lbSrmAlarm.ForeColor = Color.White; |
| | | lbSrmAlarm.BackColor = Color.Red; |
| | | lbSrmAlarm.ForeColor = Color.White; |
| | | lbSrmAlarm.BackColor = Color.Red; |
| | | } |
| | | //注释 |
| | | /* |
| | | if (lbSrmAlarm.Text == string.Empty) |
| | | { |
| | | using (var opcClinet = new SrmService.SrmServiceClient()) |
| | | { |
| | | var isHandShare = SrmBLL.IsHandShare(opcClinet, device); |
| | | if (!isHandShare) |
| | | { |
| | | lbSrmAlarm.Text = (int)device + "号堆垛机没有心跳"; |
| | | } |
| | | } |
| | | } |
| | | //*/ |
| | | } |
| | | catch (Exception) |
| | | { |
| | | throw; |
| | | } |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取堆垛机的报警Label |
| | | /// </summary> |
| | | /// <param name="device"></param> |
| | | /// <returns></returns> |
| | | private Label GetSrmAlarmLabel(EDevice device) |
| | | { |
| | | switch (device) |
| | | { |
| | | case EDevice.一号堆垛机: |
| | | return this.lblSrmAlarm1; |
| | | case EDevice.二号堆垛机: |
| | | return this.lblSrmAlarm2; |
| | | case EDevice.三号堆垛机: |
| | | return this.lblSrmAlarm3; |
| | | case EDevice.四号堆垛机: |
| | | return this.lblSrmAlarm4; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 获取堆垛机的Panel |
| | | /// </summary> |
| | | /// <param name="device"></param> |
| | | /// <returns></returns> |
| | | private Panel GetSrmPanel(EDevice device) |
| | | { |
| | | switch (device) |
| | | { |
| | | case EDevice.一号堆垛机: |
| | | return this.panel_Srm1; |
| | | case EDevice.二号堆垛机: |
| | | return this.panel_Srm2; |
| | | case EDevice.三号堆垛机: |
| | | return this.panel_Srm3; |
| | | case EDevice.四号堆垛机: |
| | | return this.panel_Srm4; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取RGV信息 |
| | | /// </summary> |
| | | /// <param name="obj"></param> |
| | | private void GetRgvInfo(object obj) |
| | | { |
| | | while (true) |
| | | { |
| | | Thread.Sleep(1000);//1秒钟读取一次 |
| | | try |
| | | { |
| | | if (rgvServiceClient == null) |
| | | { |
| | | continue; |
| | | } |
| | | rgvView = rgvServiceClient.GetRgvInfo((int)EDevice.RGV); |
| | | CalcRGV_1012_HasCategory_COUNT(); |
| | | CalcRGV_1011_HasCategory_COUNT(); |
| | | CalcRGV_1020_NoHasCategory_COUNT(); |
| | | |
| | | CalcRGV_HasCategory_COUNT(EDevice.堆垛机1出库口1001, ref RGV_1001_HasCategory_COUNT, lbl_RGV_1001_HasCategory_COUNT); |
| | | CalcRGV_HasCategory_COUNT(EDevice.堆垛机2出库口1003, ref RGV_1003_HasCategory_COUNT, lbl_RGV_1003_HasCategory_COUNT); |
| | | CalcRGV_HasCategory_COUNT(EDevice.堆垛机3出库口1005, ref RGV_1005_HasCategory_COUNT, lbl_RGV_1005_HasCategory_COUNT); |
| | | CalcRGV_HasCategory_COUNT(EDevice.堆垛机4出库口1008, ref RGV_1008_HasCategory_COUNT, lbl_RGV_1008_HasCategory_COUNT); |
| | | |
| | | _CommmonShowAgvStation(); |
| | | CastToDevice_RgvRealTime(rgvView); |
| | | |
| | | SetScanText(); |
| | | Set1009_HighText(); |
| | | //显示RGV任务完成和完成确认信号 |
| | | this.lbl_R_RGV_Finish.Text = "RGV任务完成:" + rgvView.R_RGV_Finish; |
| | | this.lbl_W_RGV_FinishACK.Text = "RGV任务完成确认:" + rgvView.W_RGV_FinishACK; |
| | | |
| | | this.lbl_RgvCoordinate.Text = "RGV实时坐标:" + rgvView.R_RGV_Coordinate; |
| | | |
| | | //解析RGV对象 |
| | | foreach (var item in rgvView.R_RgvForReadCommList) |
| | | { |
| | | var control = ControlHelper.GetControlInstance(this.tPTransAsrs, "btn_" + item.StationCode); |
| | | if (item.R_AlarmCode > 0) |
| | | {//有报警 |
| | | if (control != null) |
| | | { |
| | | var btn = control as Button; |
| | | btn.BackColor = Color.Red; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (control != null) |
| | | { |
| | | var btn = control as Button; |
| | | if (item.StationCode == ((int)EDevice.RGV1040).ToString()) |
| | | { |
| | | btn.BackColor = Color.Gold; |
| | | } |
| | | else if (item.StationCode == ((int)EDevice.拆盘机1020).ToString()) |
| | | { |
| | | btn.BackColor = Color.DodgerBlue; |
| | | } |
| | | else if (item.StationCode == ((int)EDevice.提升机1030).ToString()) |
| | | { |
| | | btn.BackColor = Color.SteelBlue; |
| | | } |
| | | else |
| | | { |
| | | btn.BackColor = Color.SeaGreen; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | //显示RGV报警信息 |
| | | List<String> warningAddressList = new List<string>(); |
| | | if (rgvView.R_Rgv_WarningDBList != null && rgvView.R_Rgv_WarningDBList.Length > 0) |
| | | { |
| | | tb_Rgv_Alter.Text = String.Join(",", rgvView.R_Rgv_WarningDBList.Select(x => x.Contextk__BackingField).ToArray()); |
| | | //保存报警 |
| | | var waringList = rgvView.R_Rgv_WarningDBList.ToList(); |
| | | if (waringList != null && waringList.Count > 0) |
| | | { |
| | | for (int i = 0; i < waringList.Count; i++) |
| | | { |
| | | DeviceWarningHandler.SaveWarning(EDevice.RGV, iWareCommon.Utils.LogType.StationThreadService, |
| | | waringList[i].Codek__BackingField, waringList[i].Addressk__BackingField, waringList[i].Contextk__BackingField);//新增报警 |
| | | warningAddressList.Add(waringList[i].Addressk__BackingField); |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | tb_Rgv_Alter.Text = ""; |
| | | } |
| | | DeviceWarningHandler.AutoCloseWarning(EDevice.RGV, iWareCommon.Utils.LogType.StationThreadService, warningAddressList);//自动关闭报警 |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | rgvView = null; |
| | | Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.StationThreadService, "获取RGV信息出现异常:" + ex.Message, ex); |
| | | continue; |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void SetScanText() |
| | | { |
| | | this.lbl_R_1015_Scan.Text = "1015扫码值:" + rgvView.R_1015_Scan; |
| | | this.lbl_R_1019_Scan.Text = "1019扫码值:" + rgvView.R_1019_Scan; |
| | | this.lblR_1019_CargoNoScan.Text = "1019发动机扫码:" + rgvView.R_1019_CargoNoScan; |
| | | this.lbl_R_1002_Scan.Text = "1002扫码值:" + rgvView.R_1002_Scan; |
| | | this.lbl_R_1004_Scan.Text = "1004扫码值:" + rgvView.R_1004_Scan; |
| | | this.lbl_R_1006_Scan.Text = "1006扫码值:" + rgvView.R_1006_Scan; |
| | | this.lbl_R_1007_Scan.Text = "1007扫码值:" + rgvView.R_1007_Scan; |
| | | |
| | | this.lbl_W_1002_ScanFailACK.Text = "1002扫描验证:" + rgvView.W_1002_ScanFailACK; |
| | | this.lbl_W_1004_ScanFailACK.Text = "1004扫描验证:" + rgvView.W_1004_ScanFailACK; |
| | | this.lbl_W_1006_ScanFailACK.Text = "1006扫描验证:" + rgvView.W_1006_ScanFailACK; |
| | | this.lbl_W_1007_ScanFailACK.Text = "1007扫描验证:" + rgvView.W_1007_ScanFailACK; |
| | | } |
| | | |
| | | private void Set1009_HighText() |
| | | { |
| | | this.lbl_R_1009_High1.Text = "1009站点1层光电:" + rgvView.R_1009_High1; |
| | | this.lbl_R_1009_High2.Text = "1009站点2层光电:" + rgvView.R_1009_High2; |
| | | this.lbl_R_1009_High3.Text = "1009站点3层光电:" + rgvView.R_1009_High3; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 转换为RGV的实时状态 |
| | | /// </summary> |
| | | /// <param name="rgvView"></param> |
| | | private void CastToDevice_RgvRealTime(RgvView rgvView) |
| | | { |
| | | List<Device_RgvRealTime> realTimeList = new List<Device_RgvRealTime>(); |
| | | Device_RgvRealTime obj = new Device_RgvRealTime(); |
| | | foreach (var item in rgvView.R_RgvForReadCommList) |
| | | { |
| | | EDevice device = (EDevice)Enum.Parse(typeof(EDevice), item.StationCode); |
| | | obj = new Device_RgvRealTime() |
| | | { |
| | | RgvCode = item.StationCode, |
| | | RgvName = device.ToString(), |
| | | Mode = item.R_Model.ToString(), |
| | | ModeName = EnumberHelper.GetEnumName<ERgvMode>(item.R_Model).ToString(), |
| | | State = item.R_State.ToString(), |
| | | StateName = EnumberHelper.GetEnumName<ERgvState>(item.R_State).ToString(), |
| | | WarningCode = item.R_AlarmCode.ToString(), |
| | | TaskID = item.R_TaskID.ToString(), |
| | | PH_1 = item.R_PH_1, |
| | | PH_2 = item.R_PH_2, |
| | | Shape = item.R_Shape.ToString(), |
| | | ShapeName = EnumberHelper.GetEnumName<ERgvBodyTest>(item.R_Shape).ToString(), |
| | | Destination = item.R_Destination.ToString(), |
| | | Coordinate = rgvView.R_RGV_Coordinate //赋值RGV坐标 |
| | | }; |
| | | realTimeList.Add(obj); |
| | | } |
| | | DeviceRgvRealTimeHandler.Update(realTimeList, iWareCommon.Utils.LogType.StationThreadService); |
| | | |
| | | } |
| | | |
| | | |
| | | #endregion |
| | |
| | | stationView = stationServiceClient.GetStationInfo((int)EDevice.Station); |
| | | |
| | | |
| | | _CommmonShowAgvStation(); |
| | | this.lbl_Mode_FJ.Text = "设备模式:" + PlcHelper.GetModeName(stationView.R_Mode_FJ); |
| | | this.lbl_XinTiao_FJ.Text = "心跳:" + stationView.R_HandShake_FJ; |
| | | this.lbl_Warning_FJ.Text = "报警类型:" + PlcHelper.GetWarningTypeName(stationView.R_Warning_FJ); |
| | | |
| | | this.lbl_Mode_MB.Text = "设备模式:" + PlcHelper.GetModeName(stationView.R_Mode_MB); |
| | | this.lbl_XinTiao_MB.Text = "心跳:" + stationView.R_HandShake_MB; |
| | | this.lbl_Warning_MB.Text = "报警类型:" + PlcHelper.GetWarningTypeName(stationView.R_Warning_MB); |
| | | |
| | | this.lbl_Mode_HB.Text = "设备模式:" + PlcHelper.GetModeName(stationView.R_Mode_HB); |
| | | this.lbl_XinTiao_HB.Text = "心跳:" + stationView.R_HandShake_HB; |
| | | this.lbl_Warning_HB.Text = "报警类型:" + PlcHelper.GetWarningTypeName(stationView.R_Warning_HB); |
| | | |
| | | this.lbl_Mode_FX.Text = "设备模式:" + PlcHelper.GetModeName(stationView.R_Mode_FX); |
| | | this.lbl_XinTiao_FX.Text = "心跳:" + stationView.R_HandShake_FX; |
| | | this.lbl_Warning_FX.Text = "报警类型:" + PlcHelper.GetWarningTypeName(stationView.R_Warning_FX); |
| | | |
| | | ////显示RGV任务完成和完成确认信号 |
| | | //this.lbl_R_RGV_Finish.Text = "RGV任务完成:" + rgvView.R_RGV_Finish; |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | #endregion |
| | | |
| | | #region AGV |
| | | |
| | | |
| | | /// <summary> |
| | | /// 获取AGV车辆列表 |
| | | /// 获取Station 报警信息 |
| | | /// </summary> |
| | | public void GetAgvVehicles() |
| | | /// <param name="obj"></param> |
| | | private async void GetStationWarningInfo(object obj) |
| | | { |
| | | while (true) |
| | | { |
| | | Thread.Sleep(3000);//1秒钟读取一次 |
| | | try |
| | | { |
| | | if (SystemValue.isAllowRuning_Agv && SystemValue.isStartedModel) |
| | | if (stationServiceClient == null) |
| | | { |
| | | AGVRetModel list = AgvRequestHelper.GetVehicles(); |
| | | AgvHandler.SaveAgvData(list); |
| | | |
| | | List<String> warningAddressList = new List<string>(); |
| | | if (list.alarms != null && list.alarms.errors != null && list.alarms.errors.Count > 0) |
| | | { |
| | | var waringList = list.alarms.errors; |
| | | if (waringList != null && waringList.Count > 0) |
| | | { |
| | | for (int i = 0; i < waringList.Count; i++) |
| | | { |
| | | DeviceWarningHandler.SaveWarning(EDevice.AGV, iWareCommon.Utils.LogType.AGVTheadService, |
| | | waringList[i].code, waringList[i].code, waringList[i].desc);//新增报警 |
| | | warningAddressList.Add(waringList[i].code); |
| | | } |
| | | } |
| | | } |
| | | DeviceWarningHandler.AutoCloseWarning(EDevice.AGV, iWareCommon.Utils.LogType.AGVTheadService, warningAddressList);//自动关闭报警 |
| | | this.lbl_Alert_Agv.Text = "获取AGV车辆信息成功"; |
| | | continue; |
| | | } |
| | | |
| | | Stopwatch main = new Stopwatch(); |
| | | main.Start(); |
| | | |
| | | iWareCC.StationService.DeviceWarningInfo[] waringList = await stationServiceClient.GetWaringInfoListAsync((int)EDevice.Station, configDeviceWarningList.wmsConfigDeviceWarnings.ToArray()); |
| | | |
| | | main.Stop(); |
| | | var milliseconds = main.ElapsedMilliseconds; //-- 操作时间(毫秒) |
| | | |
| | | //显示报警信息 |
| | | List<String> warningCodeList = new List<string>(); |
| | | if (waringList != null && waringList.Length > 0) |
| | | { |
| | | for (int i = 0; i < waringList.Length; i++) |
| | | { |
| | | var findObj = configDeviceWarningList.wms_config_device_warning_list.Where(x => x.WarningCode == waringList[i].Codek__BackingField).FirstOrDefault(); |
| | | DeviceWarningHandler.SaveWarning(EDevice.Station, iWareCommon.Utils.LogType.StationThreadService, |
| | | findObj.WarningCode, findObj.DeviceAreaCode, findObj.WarningContent, findObj.DeviceWarningType);//新增报警 |
| | | warningCodeList.Add(findObj.WarningCode); |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | |
| | | } |
| | | DeviceWarningHandler.AutoCloseWarning(EDevice.Station, iWareCommon.Utils.LogType.StationThreadService, warningCodeList);//自动关闭报警 |
| | | |
| | | //*/ |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.CCWCFService, "获取AGV车辆列表 出现异常:" + ex.Message, ex); |
| | | this.lbl_Alert_Agv.Text = "获取AGV车辆信息异常:" + ex.Message; |
| | | } |
| | | finally |
| | | { |
| | | Thread.Sleep(5000);//5秒一次 |
| | | rgvView = null; |
| | | Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.StationThreadService, "获取站点信息出现异常:" + ex.Message, ex); |
| | | continue; |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | #endregion |
| | | |
| | | |
| | | #region 其他线程 |
| | | |
| | |
| | | { |
| | | if (SystemValue.isAllowRuning_DeleteData && SystemValue.isStartedModel) |
| | | { |
| | | ClearDataHandler.Delete_Base_SysExceptionInfo(7); |
| | | ClearDataHandler.Delete_Task_RequestLog(7); |
| | | ClearDataHandler.Delete_Task_Part(10); |
| | | ClearDataHandler.Delete_Device_Warning(30); |
| | | ClearDataHandler.Delete_HttpRequestRecord(14); |
| | | ClearDataHandler.Delete_wms_record_print(7); |
| | | ClearDataHandler.Delete_mes_push_papercut(7); |
| | | ClearDataHandler.Delete_mes_push_packagecode(10); |
| | | ClearDataHandler.Delete_wms_rbline_task(10); |
| | | |
| | | ClearDataHandler.Delete_MES_BTJReceiveReq(30); |
| | | ClearDataHandler.Delete_MES_OnLineReq(30); |
| | | //ClearDataHandler.Delete_Device_Warning(30); |
| | | //ClearDataHandler.Delete_HttpRequestRecord(14); |
| | | |
| | | //ClearDataHandler.Delete_MES_BTJReceiveReq(30); |
| | | //ClearDataHandler.Delete_MES_OnLineReq(30); |
| | | |
| | | LogTextHelper.BatchDeleteLog(); |
| | | |
| | |
| | | |
| | | #region 私有方法 |
| | | |
| | | /// <summary> |
| | | /// 计算 某个站点的有货 值 |
| | | /// </summary> |
| | | private void CalcRGV_HasCategory_COUNT(EDevice device, ref int RGV_HasCategory_COUNT, Label lbl_RGV_HasCategory_COUNT) |
| | | { |
| | | //改为 只判断有两个信号都有 |
| | | var isGD_HasCatogryForRgvStattion = MyExtendHelper.IsGD_HasCatogryForRgvStattionFor2(((int)device).ToString()); |
| | | //改为 只判断有一个信号有货即可 |
| | | //var isGD_HasCatogryForRgvStattion = MyExtendHelper.IsGD_HasCatogryForRgvStattion(((int)EDevice.出库口1012).ToString()); |
| | | if (isGD_HasCatogryForRgvStattion) |
| | | { |
| | | RGV_HasCategory_COUNT += 1; |
| | | } |
| | | else |
| | | { |
| | | RGV_HasCategory_COUNT = 0; |
| | | } |
| | | lbl_RGV_HasCategory_COUNT.Text = ((int)device).ToString() + "站点持续有货时间:" + RGV_HasCategory_COUNT; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 计算 RGV_1012_HasCategory_COUNT值 |
| | | /// </summary> |
| | | private void CalcRGV_1012_HasCategory_COUNT() |
| | | { |
| | | //改为 只判断有两个信号都有 |
| | | var isGD_HasCatogryForRgvStattion = MyExtendHelper.IsGD_HasCatogryForRgvStattionFor2(((int)EDevice.出库口1012).ToString()); |
| | | //改为 只判断有一个信号有货即可 |
| | | //var isGD_HasCatogryForRgvStattion = MyExtendHelper.IsGD_HasCatogryForRgvStattion(((int)EDevice.出库口1012).ToString()); |
| | | if (isGD_HasCatogryForRgvStattion) |
| | | { |
| | | RGV_1012_HasCategory_COUNT += 1; |
| | | } |
| | | else |
| | | { |
| | | RGV_1012_HasCategory_COUNT = 0; |
| | | } |
| | | this.lbl_RGV_1012_HasCategory_COUNT.Text = "1012站点持续有货时间:" + RGV_1012_HasCategory_COUNT; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 计算 RGV_1011_HasCategory_COUNT值 |
| | | /// </summary> |
| | | private void CalcRGV_1011_HasCategory_COUNT() |
| | | { |
| | | //改为 只判断有两个信号都有 |
| | | var isGD_HasCatogryForRgvStattion = MyExtendHelper.IsGD_HasCatogryForRgvStattionFor2(((int)EDevice.空托缓存1011).ToString()); |
| | | //改为 只判断有一个信号有货即可 |
| | | //var isGD_HasCatogryForRgvStattion = MyExtendHelper.IsGD_HasCatogryForRgvStattion(((int)EDevice.空托缓存1011).ToString()); |
| | | if (isGD_HasCatogryForRgvStattion) |
| | | { |
| | | RGV_1011_HasCategory_COUNT += 1; |
| | | } |
| | | else |
| | | { |
| | | RGV_1011_HasCategory_COUNT = 0; |
| | | } |
| | | this.lbl_RGV_1011_HasCategory_COUNT.Text = "1011站点持续有货时间:" + RGV_1011_HasCategory_COUNT; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 计算 RGV_1020_NoHasCategory_COUNT值 |
| | | /// </summary> |
| | | private void CalcRGV_1020_NoHasCategory_COUNT() |
| | | { |
| | | var isGD_HasCatogryForRgvStattion = MyExtendHelper.IsGD_HasCatogryForRgvStattion(((int)EDevice.拆盘机1020).ToString()); |
| | | if (isGD_HasCatogryForRgvStattion) |
| | | { |
| | | RGV_1020_NoHasCategory_COUNT = 0; |
| | | } |
| | | else |
| | | { |
| | | RGV_1020_NoHasCategory_COUNT += 1; |
| | | } |
| | | this.lbl_RGV_1020_NoHasCategory_COUNT.Text = "1020站点持续无货时间:" + RGV_1020_NoHasCategory_COUNT; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 初始化实时堆垛机的字典 |
| | |
| | | }); |
| | | } |
| | | |
| | | private void SetInitPlaceValue() |
| | | { |
| | | this.tbSrm1TaskId.Text = this.tbSrm2TaskId.Text = this.tbSrm3TaskId.Text = this.tbSrm4TaskId.Text = "11"; |
| | | |
| | | var sourcePlace = "02-02-01"; |
| | | this.tB_Srm1SourcePlace.Text = this.tB_Srm2SourcePlace.Text = this.tB_Srm3SourcePlace.Text = this.tB_Srm4SourcePlace.Text = sourcePlace; |
| | | |
| | | var toPlace = "02-03-01"; |
| | | this.tB_Srm1ToPlace.Text = this.tB_Srm2ToPlace.Text = this.tB_Srm3ToPlace.Text = this.tB_Srm4ToPlace.Text = toPlace; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | private void btnSrm1Send_Click(object sender, EventArgs e) |
| | | { |
| | | CommonSendSrmTask(ESrmCmd.库内搬运, "1-", tbSrm1TaskId, tB_Srm1SourcePlace, tB_Srm1ToPlace, EDevice.一号堆垛机); |
| | | } |
| | | |
| | | private void btnSrm1Move_Click(object sender, EventArgs e) |
| | | { |
| | | CommonSendSrmTask(ESrmCmd.移动, "1-", tbSrm1TaskId, tB_Srm1SourcePlace, tB_Srm1ToPlace, EDevice.一号堆垛机); |
| | | } |
| | | |
| | | private void btnSrm1Confirm_Click(object sender, EventArgs e) |
| | | { |
| | | CommonSrmConfirm(EDevice.一号堆垛机, tbSrm1TaskId); |
| | | } |
| | | |
| | | private void btnSrm1EStop_Click(object sender, EventArgs e) |
| | | { |
| | | CommonSrmEStop(EDevice.一号堆垛机); |
| | | } |
| | | |
| | | private void btnSrm1RlsAlert_Click(object sender, EventArgs e) |
| | | { |
| | | using (var opcClinet = new SrmService.SrmServiceClient()) |
| | | { |
| | | opcClinet.ReleaseAlert((int)EDevice.一号堆垛机); |
| | | } |
| | | } |
| | | |
| | | private void btnSrm1Delete_Click(object sender, EventArgs e) |
| | | { |
| | | CommonDeleteSrmTask(EDevice.一号堆垛机); |
| | | } |
| | | |
| | | private void btnSrm2Send_Click(object sender, EventArgs e) |
| | | { |
| | | CommonSendSrmTask(ESrmCmd.库内搬运, "2-", tbSrm2TaskId, tB_Srm2SourcePlace, tB_Srm2ToPlace, EDevice.二号堆垛机); |
| | | } |
| | | |
| | | #region 公共 |
| | | |
| | |
| | | using (var opcClinet = new SrmService.SrmServiceClient()) |
| | | { |
| | | var result = opcClinet.SendEStop((int)_EDevice); |
| | | Log4NetHelper.WriteInfoLog(iWareCommon.Utils.LogType.SrmTheadService, "字符串:" + JsonConvert.SerializeObject(result)); |
| | | Log4NetHelper.WriteInfoLog(iWareCommon.Utils.LogType.DataProcess_BZ39_IssueInboundTask, "字符串:" + JsonConvert.SerializeObject(result)); |
| | | if (result.result) |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowTips("发送" + _EDevice.ToString() + "急停指令成功"); |
| | |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 公共发送堆垛机命令(搬运/移动) |
| | | /// </summary> |
| | | /// <param name="pre_Srm"></param> |
| | | /// <param name="tbTaskId"></param> |
| | | /// <param name="tbSourcePlace"></param> |
| | | /// <param name="tbToPlace"></param> |
| | | /// <param name="_EDevice"></param> |
| | | private void CommonSendSrmTask(ESrmCmd srmCmd, string pre_Srm, TextBox tbTaskId, TextBox tbSourcePlace, TextBox tbToPlace, EDevice _EDevice) |
| | | { |
| | | if (SystemValue.isStartedModel) |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowError("手动发任务,需要将模式关闭!"); |
| | | return; |
| | | } |
| | | |
| | | MessageBoxButtons messButton = MessageBoxButtons.OKCancel; |
| | | var deviceName = _EDevice.ToString(); |
| | | var cmdName = srmCmd.ToString(); |
| | | DialogResult dr = MessageBox.Show("确定要给" + deviceName + "发送" + cmdName + "命令吗?", "确认", messButton); |
| | | if (dr == DialogResult.OK)//如果点击“确定”按钮 |
| | | { |
| | | try |
| | | { |
| | | using (var opcClinet = new SrmService.SrmServiceClient()) |
| | | { |
| | | var sourcePlce = tbSourcePlace.Text.Trim(); |
| | | var toPlace = tbToPlace.Text.Trim(); |
| | | |
| | | if (!IsNumeric(tbTaskId.Text.Trim())) |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowError("任务号格式错误,必须是数字!"); |
| | | return; |
| | | } |
| | | var taskId = int.Parse(tbTaskId.Text.Trim()); |
| | | if (!(taskId >= 1 && taskId <= 100)) |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowError("手动任务号必须是在1-100之间!"); |
| | | return; |
| | | } |
| | | iWareCC.SrmService.SdaResEntity sdaResult = opcClinet.SendSrmTask((int)_EDevice, int.Parse(tbTaskId.Text.Trim()), pre_Srm + sourcePlce, pre_Srm + toPlace, (short)srmCmd); |
| | | if (sdaResult.result) |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowTips(deviceName + cmdName + "命令发送成功!"); |
| | | // tB_Srm1SourcePlace.Clear(); |
| | | // tB_Srm1ToPlace.Clear(); |
| | | Log4NetHelper.WriteInfoLog(iWareCommon.Utils.LogType.CCWCFService, "手动堆垛机任务发送成功,任务号:" + taskId + ",起点:" + sourcePlce + ",目标点:" + toPlace + ",堆垛机:" + deviceName); |
| | | } |
| | | else |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowError(deviceName + cmdName + "命令发送失败!返回代码:" + sdaResult.resMsg); |
| | | Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.CCWCFService, "手动堆垛机任务发送失败!返回代码:" + sdaResult.resMsg + ",任务号:" + taskId + ",起点:" + sourcePlce + ",目标点:" + toPlace + ",堆垛机:" + deviceName); |
| | | } |
| | | } |
| | | tbSourcePlace.Focus(); |
| | | tbSourcePlace.SelectAll(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowError(deviceName + cmdName + "命令发送出现异常:" + ex.Message); |
| | | Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.CCWCFService, deviceName + cmdName + "命令发送出现异常:" + ex.Message, ex); |
| | | } |
| | | } |
| | | else//如果点击“取消”按钮 |
| | | { |
| | | |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 堆垛机任务确认 |
| | |
| | | |
| | | #endregion |
| | | |
| | | private void btnSrm2Move_Click(object sender, EventArgs e) |
| | | { |
| | | CommonSendSrmTask(ESrmCmd.移动, "2-", tbSrm2TaskId, tB_Srm2SourcePlace, tB_Srm2ToPlace, EDevice.二号堆垛机); |
| | | } |
| | | |
| | | private void btnSrmTransSend_Click(object sender, EventArgs e) |
| | | { |
| | | if (SystemValue.isStartedModel) |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowError("手动发任务,需要将模式关闭!"); |
| | | return; |
| | | } |
| | | MessageBoxButtons messButton = MessageBoxButtons.OKCancel; |
| | | DialogResult dr = MessageBox.Show("确定要发送命令吗?", "确认", messButton); |
| | | if (dr == DialogResult.OK)//如果点击“确定”按钮 |
| | | { |
| | | try |
| | | { |
| | | using (var opcClinet = new RgvService.RgvServiceClient()) |
| | | { |
| | | var sourcePlce = tBSrmTransSouce.Text.Trim(); |
| | | if (sourcePlce == "1010") |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowError("站点1010不能发任务!"); |
| | | return; |
| | | } |
| | | var toPlace = tBSrmTransToPlace.Text.Trim(); |
| | | |
| | | if (!IsNumeric(tBSrmTransTskId.Text.Trim())) |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowError("任务号格式错误,必须是数字!"); |
| | | return; |
| | | } |
| | | var taskId = int.Parse(tBSrmTransTskId.Text.Trim()); |
| | | if (!(taskId >= 1 && taskId <= 100)) |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowError("手动任务号必须是在1-100之间!"); |
| | | return; |
| | | } |
| | | iWareCC.RgvService.SdaResEntity sdaResult = opcClinet.SendRgvTask((int)EDevice.RGV, Convert.ToInt32(tBSrmTransTskId.Text.Trim()), sourcePlce, toPlace); |
| | | if (sdaResult.result) |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowTips("命令发送成功!"); |
| | | // tB_Srm1SourcePlace.Clear(); |
| | | // tB_Srm1ToPlace.Clear(); |
| | | |
| | | } |
| | | else |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowError("命令发送失败!返回消息:" + sdaResult.resMsg); |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowError("命令发送出现异常:" + ex.Message); |
| | | } |
| | | } |
| | | else//如果点击“取消”按钮 |
| | | { |
| | | |
| | | } |
| | | } |
| | | |
| | | private void btnSrm2Confirm_Click(object sender, EventArgs e) |
| | | { |
| | | CommonSrmConfirm(EDevice.二号堆垛机, tbSrm2TaskId); |
| | | } |
| | | |
| | | private void btnSrm2EStop_Click(object sender, EventArgs e) |
| | | { |
| | | CommonSrmEStop(EDevice.二号堆垛机); |
| | | } |
| | | |
| | | private void btnSrm2RlsAlert_Click(object sender, EventArgs e) |
| | | { |
| | | using (var opcClinet = new SrmService.SrmServiceClient()) |
| | | { |
| | | opcClinet.ReleaseAlert((int)EDevice.二号堆垛机); |
| | | } |
| | | } |
| | | |
| | | private void btnSrm2Delete_Click(object sender, EventArgs e) |
| | | { |
| | | CommonDeleteSrmTask(EDevice.二号堆垛机); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 校验输入的库位ID是否符合格式 |
| | | /// </summary> |
| | | /// <param name="str">库位号</param> |
| | | /// <returns></returns> |
| | | private bool IsNumeric(string str) |
| | | { |
| | | try |
| | | { |
| | | return (WZ.Useful.Commons.Util.IsNumeric(int.Parse(str))); |
| | | } |
| | | catch (Exception) |
| | | { |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | private void rBNormal_CheckedChanged(object sender, EventArgs e) |
| | | { |
| | |
| | | SystemValue.rBNormal_Checked = this.rBNormal.Checked ? true : false; |
| | | SystemValue.rbHand_Checked = this.rbHand.Checked ? true : false; |
| | | SystemValue.rBDebug_Checked = this.rBDebug.Checked ? true : false; |
| | | SystemValue.rBOnlyIn_Checked = this.rBOnlyIn.Checked ? true : false; |
| | | |
| | | |
| | | var title = "当前模式: "; |
| | |
| | | this.lbl_ModelText.Text = title + currentCheckModelText; |
| | | SetAllCheckBoxChecked(true); |
| | | //将特殊的取消 |
| | | this.ckHandlerIssuingTask.Checked = false; |
| | | this.ckMainTaskDecompose.Checked = false; |
| | | this.ck_DataProcess_BZ12_IssueTask.Checked = false; |
| | | this.ck_DataProcess_BZ21_IssueTask.Checked = false; |
| | | |
| | | this.gBoxThread.Enabled = true; |
| | | } |
| | |
| | | private void CommonCheckedChanged(object sender, EventArgs e) |
| | | { |
| | | //堆垛机1任务下发 |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_SrmTaskThreadService_1, ckBSrm1Release); |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_SrmTaskThreadService_1_Finish, ckBSrm1FinishedHandle); |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_SrmTaskThreadService_1, ckB_DataProcess_BZ39_IssueInboundTask); |
| | | |
| | | |
| | | //堆垛机2任务下发 |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_SrmTaskThreadService_2, ckBSrm2Release); |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_SrmTaskThreadService_2_Finish, ckBSrm2FinishedHandle); |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_SrmTaskThreadService_2, ckBDataProcess_RobotBuffer_ForceOutbound); |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_SrmTaskThreadService_2_Finish, ckBDataProcess_BZ12_FinishTask); |
| | | |
| | | //堆垛机3任务下发 |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_SrmTaskThreadService_3, ckBSrm3Release); |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_SrmTaskThreadService_3_Finish, ckBSrm3FinishedHandle); |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_SrmTaskThreadService_3, ckBDataProcess_BZ12); |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_SrmTaskThreadService_3_Finish, ckBDataProcess_BZ21_FinishTask); |
| | | |
| | | //堆垛机4任务下发 |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_SrmTaskThreadService_4, ckBSrm4Release); |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_SrmTaskThreadService_4_Finish, ckBSrm4FinishedHandle); |
| | | |
| | | |
| | | |
| | | //RGV任务下发 |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_RgvThreadService, ckBRgvRelease); |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_RgvThreadService_Finish, ckBRgvFinishedHandle); |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_RgvThreadService_Finish_BuChang, ckBRgvFinishedHandle_BuChang); |
| | | |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_HandlerIssuingTask, ckHandlerIssuingTask); |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_RgvThreadService_Finish, ckB_PushPaperCutToMes); |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_RgvThreadService_Finish_BuChang, ck_PushPackageCodeToMes); |
| | | |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_HandlerIssuingTask, ck_DataProcess_BZ12_IssueTask); |
| | | |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_DataProcess_RobotBuffer_FinishTask, ck_DataProcess_RobotBuffer_FinishTask); |
| | | |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_MainTaskDecompose, ckMainTaskDecompose); |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_MainTaskDecompose, ck_DataProcess_BZ21_IssueTask); |
| | | |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_MainTaskDecompose_ZPRK, ckMainTaskDecompose_ZPRK); |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_DataProcess_RobotBuffer_ModeChange, ck_DataProcess_RobotBuffer_ModeChange); |
| | | |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_DataProcess_ValidateQiTao, ck_DataProcess_ValidateQiTao); |
| | | |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_DataProcess_RobotBuffer_FinishTaskForOutbound, checkBox_DataProcess_RobotBuffer_FinishTaskForOutbound); |
| | | |
| | | |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_DeleteData, ckDeleteData); |
| | | |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_Agv, ckAgv); |
| | | |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_EmptySalverTransfer, ckEmptySalverTransfer); |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_DataProcess_RobotBuffer_AutoQiTaoOutbound, ckDataProcess_RobotBuffer_AutoQiTaoOutbound); |
| | | |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_DataProcess_BZ39, ck_DataProcess_BZ39); |
| | | |
| | |
| | | |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_DataProcess_269, ck_DataProcess_269); |
| | | |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_Place1014To1020Task, ckPlace1014ClearStoreTask); |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_DataProcess_RobotBuffer_IssueOutboundTask, ck_DataProcess_RobotBuffer_IssueOutboundTask); |
| | | |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_OutTaskRetryToMes, checkBox_OutTaskRetryToMes); |
| | | DoCommonCheckedChanged(ref SystemValue.isAllowRuning_OutTaskRetryToMes, checkBox_DataProcess_BZ21); |
| | | } |
| | | |
| | | private void DoCommonCheckedChanged(ref bool isAllowValue, CheckBox cb) |
| | |
| | | |
| | | private void FormCC_SizeChanged(object sender, EventArgs e) |
| | | { |
| | | asc_panel_DeviceTaskList.controlAutoSize(this.panel_DeviceTaskList); |
| | | asc_panel_DeviceTaskList_dgvPartTask_Finished.controlAutoSize(this.panel_DeviceTaskList_dgvPartTask_Finished); |
| | | asc_panel_dataGridView__OutTaskList.controlAutoSize(this.panel_dataGridView__OutTaskList); |
| | | asc_panel_WaitPlanDetail.controlAutoSize(this.panel_WaitPlanDetail); |
| | | asc_panel_DeviceTaskList_dataGridView_RgvStore.controlAutoSize(this.panel_DeviceTaskList_dataGridView_RgvStore); |
| | | asc_panel_dg_OutTaskRetryToMes.controlAutoSize(this.panel_dg_OutTaskRetryToMes); |
| | | |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | this.btn_Start.BackColor = default_btn_Start_Color;//还原颜色 |
| | | } |
| | | } |
| | | |
| | | this.lbl_RobotMode.Text = "缓存岛机器人模式:" + (IsAllowRunOutMode ? "出库模式" : "入库模式"); |
| | | this.lbl_currHandlerPackageCodeForIssueOutboundTask.Text = "当前下发出库任务的包号:" + currHandlerPackageCodeForIssueOutboundTask; |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 起始位和目标位互换 |
| | | /// </summary> |
| | | /// <param name="sender"></param> |
| | | /// <param name="e"></param> |
| | | private void btn_Change1_Click(object sender, EventArgs e) |
| | | { |
| | | var old_source = this.tB_Srm1SourcePlace.Text; |
| | | var old_to = this.tB_Srm1ToPlace.Text; |
| | | this.tB_Srm1SourcePlace.Text = old_to; |
| | | this.tB_Srm1ToPlace.Text = old_source; |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | private void button24_Click(object sender, EventArgs e) |
| | | { |
| | | ////强制该包号出库 |
| | | //var packageCode = this.tb_PackageCode.Text.Trim(); |
| | | |
| | | //var alertMsg = ""; |
| | | //CC_DataProcess_RobotBuffer_ForceOutbound.Handler(packageCode, ref alertMsg); |
| | | //if (!string.IsNullOrEmpty(alertMsg)) |
| | | //{ |
| | | // MessageBox.Show("错误:" + alertMsg); |
| | | //} |
| | | //else |
| | | //{ |
| | | // MessageBox.Show("已处理"); |
| | | //} |
| | | } |
| | | |
| | | private void btn_Change2_Click(object sender, EventArgs e) |
| | | private void button25_Click(object sender, EventArgs e) |
| | | { |
| | | var old_source = this.tB_Srm2SourcePlace.Text; |
| | | var old_to = this.tB_Srm2ToPlace.Text; |
| | | this.tB_Srm2SourcePlace.Text = old_to; |
| | | this.tB_Srm2ToPlace.Text = old_source; |
| | | } |
| | | var packageCode = this.tb_PackageCode.Text.Trim(); |
| | | |
| | | |
| | | private void tPTransAsrs_Click(object sender, EventArgs e) |
| | | { |
| | | |
| | | } |
| | | |
| | | private void panel16_Paint(object sender, PaintEventArgs e) |
| | | { |
| | | |
| | | } |
| | | |
| | | |
| | | private void btnSrm4Send_Click(object sender, EventArgs e) |
| | | { |
| | | CommonSendSrmTask(ESrmCmd.库内搬运, "4-", tbSrm4TaskId, tB_Srm4SourcePlace, tB_Srm4ToPlace, EDevice.四号堆垛机); |
| | | } |
| | | |
| | | |
| | | private void btnSrm4RlsAlert_Click(object sender, EventArgs e) |
| | | { |
| | | using (var opcClinet = new SrmService.SrmServiceClient()) |
| | | var alertMsg = ""; |
| | | using (WmsDBModel db = new WmsDBModel()) |
| | | { |
| | | opcClinet.ReleaseAlert((int)EDevice.四号堆垛机); |
| | | var upiList = db.mes_batchOrderUPI_new.Where(x => x.PackageCode == packageCode).ToList(); |
| | | foreach (var item in upiList) |
| | | { |
| | | item.AreaCode = (int)AreaCodeEnum.无区域; |
| | | item.UpiStatus = (int)UpiStatusEnum.初始; |
| | | } |
| | | |
| | | var pList = db.mes_package_gather.Where(x => x.PackageCode == packageCode).ToList(); |
| | | foreach (var item in pList) |
| | | { |
| | | item.AreaCode = (int)AreaCodeEnum.无区域; |
| | | item.UpiStatus = (int)UpiStatusEnum.初始; |
| | | } |
| | | |
| | | //清空队列数据 |
| | | var list = db.mes_upi_linequeue.ToList(); |
| | | db.mes_upi_linequeue.RemoveRange(list); |
| | | |
| | | db.SaveChanges(); |
| | | } |
| | | } |
| | | |
| | | private void btn_Srm4EStop_Click(object sender, EventArgs e) |
| | | { |
| | | CommonSrmEStop(EDevice.四号堆垛机); |
| | | } |
| | | |
| | | private void btn_Srm3EStop_Click(object sender, EventArgs e) |
| | | { |
| | | CommonSrmEStop(EDevice.三号堆垛机); |
| | | } |
| | | |
| | | private void btnSrm3RlsAlert_Click(object sender, EventArgs e) |
| | | { |
| | | using (var opcClinet = new SrmService.SrmServiceClient()) |
| | | if (!string.IsNullOrEmpty(alertMsg)) |
| | | { |
| | | opcClinet.ReleaseAlert((int)EDevice.三号堆垛机); |
| | | } |
| | | } |
| | | |
| | | private void btnSrm4Confirm_Click(object sender, EventArgs e) |
| | | { |
| | | CommonSrmConfirm(EDevice.四号堆垛机, tbSrm4TaskId); |
| | | } |
| | | |
| | | private void btn_Change4_Click(object sender, EventArgs e) |
| | | { |
| | | var old_source = this.tB_Srm4SourcePlace.Text; |
| | | var old_to = this.tB_Srm4ToPlace.Text; |
| | | this.tB_Srm4SourcePlace.Text = old_to; |
| | | this.tB_Srm4ToPlace.Text = old_source; |
| | | } |
| | | |
| | | private void btn_Change3_Click(object sender, EventArgs e) |
| | | { |
| | | var old_source = this.tB_Srm3SourcePlace.Text; |
| | | var old_to = this.tB_Srm3ToPlace.Text; |
| | | this.tB_Srm3SourcePlace.Text = old_to; |
| | | this.tB_Srm3ToPlace.Text = old_source; |
| | | } |
| | | |
| | | private void btnSrm3Send_Click(object sender, EventArgs e) |
| | | { |
| | | CommonSendSrmTask(ESrmCmd.库内搬运, "3-", tbSrm3TaskId, tB_Srm3SourcePlace, tB_Srm3ToPlace, EDevice.三号堆垛机); |
| | | } |
| | | |
| | | private void btnSrm4Move_Click(object sender, EventArgs e) |
| | | { |
| | | CommonSendSrmTask(ESrmCmd.移动, "4-", tbSrm4TaskId, tB_Srm4SourcePlace, tB_Srm4ToPlace, EDevice.四号堆垛机); |
| | | } |
| | | |
| | | private void btnSrm3Confirm_Click(object sender, EventArgs e) |
| | | { |
| | | CommonSrmConfirm(EDevice.三号堆垛机, tbSrm3TaskId); |
| | | } |
| | | |
| | | private void btnSrm4Delete_Click(object sender, EventArgs e) |
| | | { |
| | | CommonDeleteSrmTask(EDevice.四号堆垛机); |
| | | } |
| | | |
| | | private void btnSrm3Delete_Click_1(object sender, EventArgs e) |
| | | { |
| | | CommonDeleteSrmTask(EDevice.三号堆垛机); |
| | | |
| | | } |
| | | |
| | | private void btnSrm3Move_Click(object sender, EventArgs e) |
| | | { |
| | | CommonSendSrmTask(ESrmCmd.移动, "3-", tbSrm3TaskId, tB_Srm3SourcePlace, tB_Srm3ToPlace, EDevice.三号堆垛机); |
| | | } |
| | | |
| | | private void panel15_Paint(object sender, PaintEventArgs e) |
| | | { |
| | | |
| | | } |
| | | |
| | | private void CommmonShowAgvStation(object sender) |
| | | { |
| | | var btn = sender as Button; |
| | | var stationName = ""; |
| | | int stationCode = 0; |
| | | if (int.TryParse(btn.Text, out stationCode)) |
| | | { |
| | | stationName = btn.Text; |
| | | MessageBox.Show("错误:" + alertMsg); |
| | | } |
| | | else |
| | | { |
| | | stationName = BusinessHelper.ConvertStationCodeForRGV(btn.Text).ToString(); |
| | | MessageBox.Show("已处理"); |
| | | } |
| | | current_rgv_stationName = stationName; |
| | | |
| | | _CommmonShowAgvStation(); |
| | | } |
| | | |
| | | private void _CommmonShowAgvStation() |
| | | private void button1_Click(object sender, EventArgs e) |
| | | { |
| | | if (string.IsNullOrEmpty(current_rgv_stationName)) |
| | | |
| | | |
| | | var alertMsg = ""; |
| | | using (WmsDBModel db = new WmsDBModel()) |
| | | { |
| | | this.lbl_StationCode.Text = "当前位置号:" + ""; |
| | | this.lbl_PH_1.Text = "光电1状态:" + ""; |
| | | this.lbl_PH_2.Text = "光电2状态:" + ""; |
| | | this.lbl_ACK.Text = "收到任务下发反馈:" + ""; |
| | | this.lbl_Model.Text = "模式:" + ""; |
| | | this.lbl_State.Text = "运行状态:" + ""; |
| | | this.lbl_AlarmCode.Text = "报警代码:" + ""; |
| | | this.lbl_Destination.Text = "当前目标地址:" + ""; |
| | | this.lbl_Shape.Text = "外形检测:" + ""; |
| | | this.lbl_TaskID.Text = "当前任务号:" + ""; |
| | | this.lbl_Rgv_STP.Text = "STP:" + ""; |
| | | this.lbl_Rgv_WriteTaskNo.Text = "写入任务号:" + ""; |
| | | this.lbl_Rgv_WriteToPlace.Text = "写入目标地址:" + ""; |
| | | //查询立体库中的upi列表 |
| | | var quanList = db.wms_stock_quan.ToList().Select(x => x.Upi).ToList(); |
| | | var upiList = db.mes_batchOrderUPI_new.Where(x => !quanList.Contains(x.UPI)).ToList(); |
| | | foreach (var item in upiList) |
| | | { |
| | | item.AreaCode = (int)AreaCodeEnum.无区域; |
| | | item.UpiStatus = (int)UpiStatusEnum.初始; |
| | | } |
| | | |
| | | var packageCodeList = upiList.Select(x => x.PackageCode).ToList(); |
| | | var pList = db.mes_package_gather.Where(x => packageCodeList.Contains(x.PackageCode)).ToList(); |
| | | foreach (var item in pList) |
| | | { |
| | | item.AreaCode = (int)AreaCodeEnum.无区域; |
| | | item.UpiStatus = (int)UpiStatusEnum.初始; |
| | | } |
| | | //清空队列数据 |
| | | var list = db.mes_upi_linequeue.ToList(); |
| | | db.mes_upi_linequeue.RemoveRange(list); |
| | | |
| | | db.SaveChanges(); |
| | | } |
| | | if (!string.IsNullOrEmpty(alertMsg)) |
| | | { |
| | | MessageBox.Show("错误:" + alertMsg); |
| | | } |
| | | else |
| | | { |
| | | var r_station = rgvView.R_RgvForReadCommList.Where(x => x.StationCode == current_rgv_stationName).FirstOrDefault(); |
| | | var w_station = rgvView.W_RgvForWriteCommList.Where(x => x.StationCode == current_rgv_stationName).FirstOrDefault(); |
| | | |
| | | this.lbl_StationCode.Text = "当前位置号:" + r_station.StationCode; |
| | | this.lbl_PH_1.Text = "光电1状态:" + r_station.R_PH_1; |
| | | this.lbl_PH_2.Text = "光电2状态:" + r_station.R_PH_2; |
| | | this.lbl_ACK.Text = "收到任务下发反馈:" + r_station.R_ACK; |
| | | this.lbl_Model.Text = "模式:" + EnumberHelper.GetEnumName<ERgvMode>(r_station.R_Model); |
| | | this.lbl_State.Text = "运行状态:" + EnumberHelper.GetEnumName<ERgvState>(r_station.R_State); |
| | | this.lbl_AlarmCode.Text = "报警:" + (r_station.R_AlarmCode == 1 ? "有报警" : "无"); |
| | | this.lbl_Destination.Text = "当前目标地址:" + r_station.R_Destination; |
| | | this.lbl_Shape.Text = "外形检测:" + EnumberHelper.GetEnumName<ERgvBodyTest>(r_station.R_Shape); |
| | | this.lbl_TaskID.Text = "当前任务号:" + r_station.R_TaskID; |
| | | this.lbl_Rgv_STP.Text = "STP:" + w_station.W_STP; |
| | | this.lbl_Rgv_WriteTaskNo.Text = "写入任务号:" + w_station.W_TaskID; |
| | | this.lbl_Rgv_WriteToPlace.Text = "写入目标地址:" + w_station.W_Destination; |
| | | MessageBox.Show("已处理"); |
| | | } |
| | | } |
| | | |
| | | private void btn_1001_Click(object sender, EventArgs e) |
| | | private void btn1_Click(object sender, EventArgs e) |
| | | { |
| | | CommmonShowAgvStation(sender); |
| | | } |
| | | var taskNo = this.tb_taskNo.Text.Trim(); |
| | | |
| | | private void btn_1002_Click(object sender, EventArgs e) |
| | | { |
| | | CommmonShowAgvStation(sender); |
| | | } |
| | | |
| | | private void btn_1003_Click(object sender, EventArgs e) |
| | | { |
| | | CommmonShowAgvStation(sender); |
| | | } |
| | | |
| | | private void btn_1004_Click(object sender, EventArgs e) |
| | | { |
| | | CommmonShowAgvStation(sender); |
| | | } |
| | | |
| | | private void btn_1005_Click(object sender, EventArgs e) |
| | | { |
| | | CommmonShowAgvStation(sender); |
| | | } |
| | | |
| | | private void btn_1006_Click(object sender, EventArgs e) |
| | | { |
| | | CommmonShowAgvStation(sender); |
| | | } |
| | | |
| | | private void btn_1007_Click(object sender, EventArgs e) |
| | | { |
| | | CommmonShowAgvStation(sender); |
| | | } |
| | | |
| | | private void btn_1008_Click(object sender, EventArgs e) |
| | | { |
| | | CommmonShowAgvStation(sender); |
| | | } |
| | | |
| | | private void btn_1009_Click(object sender, EventArgs e) |
| | | { |
| | | CommmonShowAgvStation(sender); |
| | | } |
| | | |
| | | private void btn_1010_Click(object sender, EventArgs e) |
| | | { |
| | | CommmonShowAgvStation(sender); |
| | | } |
| | | |
| | | private void btn_1011_Click(object sender, EventArgs e) |
| | | { |
| | | CommmonShowAgvStation(sender); |
| | | } |
| | | |
| | | private void btn_1012_Click(object sender, EventArgs e) |
| | | { |
| | | CommmonShowAgvStation(sender); |
| | | } |
| | | |
| | | private void btn_1013_Click(object sender, EventArgs e) |
| | | { |
| | | CommmonShowAgvStation(sender); |
| | | } |
| | | |
| | | private void btn_1030_Click(object sender, EventArgs e) |
| | | { |
| | | CommmonShowAgvStation(sender); |
| | | } |
| | | |
| | | private void btn_1014_Click(object sender, EventArgs e) |
| | | { |
| | | CommmonShowAgvStation(sender); |
| | | } |
| | | |
| | | private void btn_1020_Click(object sender, EventArgs e) |
| | | { |
| | | CommmonShowAgvStation(sender); |
| | | } |
| | | |
| | | private void btn_1015_Click(object sender, EventArgs e) |
| | | { |
| | | CommmonShowAgvStation(sender); |
| | | } |
| | | |
| | | private void btn_RGV_Click(object sender, EventArgs e) |
| | | { |
| | | CommmonShowAgvStation(sender); |
| | | } |
| | | |
| | | private void btn_ResetSTP_Click(object sender, EventArgs e) |
| | | { |
| | | CommmonResetSTP(sender); |
| | | } |
| | | |
| | | private void CommmonResetSTP(object sender) |
| | | { |
| | | var btn = sender as Button; |
| | | var stationName = current_rgv_stationName; |
| | | if (string.IsNullOrEmpty(stationName)) |
| | | var alertMsg = ""; |
| | | using (WmsDBModel wmsDB = new WmsDBModel()) |
| | | { |
| | | MessageBox.Show("请选择站点号"); |
| | | return; |
| | | } |
| | | |
| | | using (RgvService.RgvServiceClient client = new RgvServiceClient()) |
| | | { |
| | | var result = client.WriteStp((int)EDevice.RGV, false, stationName); |
| | | if (result.result == false) |
| | | var task = wmsDB.wms_rbline_task.Where(x => x.TaskNo == taskNo && x.RbTaskType == (int)RbTaskTypeEnum.入库任务 && x.TaskStatus == (int)TaskStatusEnum.已下发).FirstOrDefault(); |
| | | if (task == null) |
| | | { |
| | | MessageBox.Show("失败:" + result.resMsg); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void btnFind_Click_1(object sender, EventArgs e) |
| | | { |
| | | //查询设备任务列表 |
| | | dgvPartTask.AutoGenerateColumns = false; |
| | | for (int i = 0; i < dgvPartTask.Columns.Count; i++) |
| | | { |
| | | if (i == (dgvPartTask.Columns.Count - 1)) |
| | | {//最后一列填充 |
| | | dgvPartTask.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; |
| | | } |
| | | else |
| | | {//其他列自动适应宽度 |
| | | dgvPartTask.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; |
| | | } |
| | | } |
| | | |
| | | BindData(); |
| | | |
| | | //this.dgvPartTask.Columns["CreateTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; |
| | | //this.dgvPartTask.Columns["IssueTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; |
| | | //this.dgvPartTask.Columns["FinishTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; |
| | | //this.dgvPartTask.Columns["AllowSimulateExecute_Time"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; |
| | | FormHelper.DataGridViewSelfAdaptionWidth(this.dgvPartTask); |
| | | } |
| | | |
| | | public void BindData() |
| | | { |
| | | List<Task_Part> partList = new List<Task_Part>(); |
| | | dgvPartTask.ClearSelection(); //可消除所有选择的行 |
| | | dgvPartTask.DataSource = null; |
| | | |
| | | dgvPartTask.CurrentCell = null; //可消除选择行的行头箭头 |
| | | using (DbModel db = new DbModel()) |
| | | { |
| | | //取 最后一个未结束的任务,然后取前5条已经结束的任务 |
| | | var queryState1 = (int)DeviceTaskStatusEnum.已取消; |
| | | var queryState2 = (int)DeviceTaskStatusEnum.已完成; |
| | | var firstNoFinishedTaskList = db.Task_Part.Where(x => x.TaskState != queryState1 && x.TaskState != queryState2).OrderBy(x => x.CreateTime).ToList(); |
| | | if (firstNoFinishedTaskList == null) |
| | | { |
| | | partList = new List<Task_Part>(); |
| | | } |
| | | else |
| | | { |
| | | List<int> mainIdList = new List<int>(); |
| | | foreach (var item in firstNoFinishedTaskList) |
| | | { |
| | | if (!mainIdList.Contains(item.MainTaskId)) |
| | | { |
| | | mainIdList.Add(item.MainTaskId); |
| | | } |
| | | } |
| | | var partList2 = db.Task_Part.Where(x => mainIdList.Contains(x.MainTaskId)).ToList(); |
| | | |
| | | //partList.AddRange(partList1); |
| | | partList.AddRange(partList2); |
| | | } |
| | | if (partList != null && partList.Count > 0) |
| | | { |
| | | partList = partList.OrderBy(x => x.MainTaskId).ThenByDescending(x => x.CreateTime).ToList();//重新 升序排序 |
| | | dgvPartTask.DataSource = null; |
| | | dgvPartTask.DataSource = partList; |
| | | } |
| | | else |
| | | { |
| | | //if (dgvPartTask.Rows.Count > 0) |
| | | //{ |
| | | // int i = dgvPartTask.Rows[0].Cells.Count; |
| | | // var cells = dgvPartTask.Rows[0].Cells; |
| | | // for (int j = 0; j < i; j++) |
| | | // { |
| | | // cells[j].Value = null; |
| | | // } |
| | | //} |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void btnFinish_Click_1(object sender, EventArgs e) |
| | | { |
| | | //强制完成 |
| | | try |
| | | { |
| | | var _AllowSimulateExecute_Rmark = this.tb_AllowSimulateExecute_Rmark.Text; |
| | | if (string.IsNullOrEmpty(_AllowSimulateExecute_Rmark)) |
| | | { |
| | | MessageBox.Show("请输入强制完成原因说明!"); |
| | | return; |
| | | } |
| | | using (DbModel context = new DbModel()) |
| | | { |
| | | var row = dgvPartTask.SelectedRows; |
| | | |
| | | if (row.Count > 0) |
| | | { |
| | | var cell = row[0].Cells; |
| | | // var id = cell[0].Value.ToString(); |
| | | var id = cell["Id"].Value.ToString(); |
| | | var task = context.Task_Part.FirstOrDefault(x => x.Id == id); |
| | | if (task != null) |
| | | { |
| | | #region 数据处理 |
| | | MessageBoxButtons messButton = MessageBoxButtons.OKCancel; |
| | | DialogResult dr = MessageBox.Show("确定要将该任务" + task.PlcTaskId + "标记为强制完成吗?", "确认", messButton); |
| | | if (dr == DialogResult.OK)//如果点击“确定”按钮 |
| | | { |
| | | |
| | | task.IsAllowSimulateExecute = true; |
| | | task.AllowSimulateExecute_User = SysGloble.WCSSystem; |
| | | task.AllowSimulateExecute_Time = DateTime.Now; |
| | | task.AllowSimulateExecute_Rmark = _AllowSimulateExecute_Rmark; |
| | | |
| | | task.ModifyTime = DateTime.Now; |
| | | task.OperationRemark = "用户强制完成," + _AllowSimulateExecute_Rmark; |
| | | task.ModifyBy = SysGloble.WCSSystem; |
| | | |
| | | //保存人工处理日志 [EditBy shaocx,2022-05-01] |
| | | Base_PersonHandlerRecord record = new Base_PersonHandlerRecord() |
| | | { |
| | | MainTaskNo = task.MainTaskNo, |
| | | HandlerType = "标记任务强制完成", |
| | | PartTaskId = task.Id, |
| | | PlcTaskId = task.PlcTaskId, |
| | | RealSourcePlace = task.RealSourcePlace, |
| | | RealToPlace = task.RealToPlace, |
| | | SalverCode = task.SalverCode, |
| | | SerialNumber = task.SerialNumber, |
| | | OrderNo = task.OrderNo, |
| | | TaskTypeName = task.TaskTypeName, |
| | | Qty = task.Qty, |
| | | |
| | | ManualHandlerRemark = _AllowSimulateExecute_Rmark |
| | | |
| | | }; |
| | | PersonHandlerRecordHandler.SavePersonHandlerRecord(context, record); |
| | | |
| | | context.SaveChanges(); |
| | | |
| | | |
| | | MessageBox.Show("标记任务强制完成成功!注意:标记强制完成只是更新标记,要想处理完库存,您还需要运行自动模式,让其自动处理库存!"); |
| | | |
| | | BindData(); |
| | | } |
| | | else//如果点击“取消”按钮 |
| | | { |
| | | BindData(); |
| | | } |
| | | #endregion |
| | | } |
| | | else |
| | | { |
| | | MessageBox.Show("未找到该任务!"); |
| | | return; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | MessageBox.Show("请先选中要标记任务强制完成的行!"); |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MessageBox.Show("标记任务强制完成异常:" + ex.Message); |
| | | } |
| | | } |
| | | |
| | | private void btnDelete_Click_1(object sender, EventArgs e) |
| | | { |
| | | //任务取消 |
| | | try |
| | | { |
| | | if (SystemValue.isStartedModel) |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowError("手动取消任务,需要将模式关闭!"); |
| | | MessageBox.Show("没找到任务"); |
| | | return; |
| | | } |
| | | |
| | | var _AllowSimulateExecute_Rmark = this.tb_AllowSimulateExecute_Rmark.Text; |
| | | if (string.IsNullOrEmpty(_AllowSimulateExecute_Rmark)) |
| | | var upiCode = task.Upi; |
| | | var upiObj = wmsDB.mes_batchOrderUPI_new.Where(x => x.UPI == upiCode).FirstOrDefault(); |
| | | if (upiObj == null) |
| | | { |
| | | MessageBox.Show("请输入取消原因说明!"); |
| | | MessageBox.Show($"根据UPI:{upiCode}没有找到对象 "); |
| | | return; |
| | | } |
| | | var myNotext = "人工取消任务,原因:" + _AllowSimulateExecute_Rmark; |
| | | MessageBoxButtons messButton = MessageBoxButtons.OKCancel; |
| | | DialogResult dr = MessageBox.Show("【取消任务只是将状态变更为取消,并不处理库存,请谨慎操作。确认取消后,还需人工校验下该任务库存是否正确!】,确定要取消任务吗?", "提示", messButton); |
| | | if (dr == DialogResult.OK)//如果点击“确定”按钮 |
| | | //增加库存 |
| | | wms_stock_quan qun = new wms_stock_quan() |
| | | { |
| | | using (DbModel context = new DbModel()) |
| | | { |
| | | var row = dgvPartTask.SelectedRows; |
| | | Id = Yitter.IdGenerator.YitIdHelper.NextId(), |
| | | Shelf = upiObj.Shelf, |
| | | Upi = upiCode, |
| | | PlanNo = task.PlanNo, |
| | | DetailName = upiObj.DetailName, |
| | | OrderId = task.OrderId, |
| | | CreateTime = DateTime.Now, |
| | | CreateUserName = SysGloble.WCSSystem, |
| | | InTime = DateTime.Now, |
| | | OperReason = "入库", |
| | | PackageCode = task.PackageCode, |
| | | Length = task.Length, |
| | | Width = task.Width, |
| | | Thk = task.Thk, |
| | | PlaceCode = task.PlaceCode, |
| | | StockStatus = (int)StockStatusEnum.在库, |
| | | StockStatusName = StockStatusEnum.在库.ToString(), |
| | | |
| | | if (row.Count > 0) |
| | | { |
| | | var cell = row[0].Cells; |
| | | //var id = cell[0].Value.ToString(); |
| | | var id = cell["Id"].Value.ToString(); |
| | | var partTask = context.Task_Part.FirstOrDefault(x => x.Id == id); |
| | | if (partTask != null) |
| | | { |
| | | //找到主任务 |
| | | var mainTask = context.Task_Main.Where(x => x.Id == partTask.MainTaskId).FirstOrDefault(); |
| | | if (mainTask == null) |
| | | { |
| | | MessageBox.Show("未找到该任务的主任务!"); |
| | | return; |
| | | } |
| | | //找另一个partTask |
| | | var partTask2 = context.Task_Part.FirstOrDefault(x => x.Id != partTask.Id && x.MainTaskId == mainTask.Id); |
| | | }; |
| | | wmsDB.wms_stock_quan.Add(qun); |
| | | |
| | | var mainTaskType = (MainTaskTypeEnum)Enum.Parse(typeof(MainTaskTypeEnum), mainTask.TaskType.ToString()); |
| | | var partTaskType = (DeviceTaskTypeEnum)Enum.Parse(typeof(DeviceTaskTypeEnum), partTask.TaskType.ToString()); |
| | | switch (partTaskType) |
| | | { |
| | | case DeviceTaskTypeEnum.组盘入库: |
| | | //判断库存现在在哪里,然后删掉他 |
| | | var store = context.V_AllStore.Where(x => x.SerialNumber == mainTask.SerialNumber).FirstOrDefault(); |
| | | if (store != null) |
| | | { |
| | | var place = context.Base_Station.Where(x => x.Id == store.StationId).First(); |
| | | StoreHandler.ClearStockByPlaceId(context, place, "人工取消任务"); |
| | | } |
| | | //解绑起点和终点 |
| | | |
| | | var place1 = context.Base_Station.Where(x => x.Id == partTask2.SourcePlace).First(); |
| | | var place2 = context.Base_Station.Where(x => x.Id == partTask2.ToPlace).First(); |
| | | StationHandler.SetPlaceLockStatus(false, SysGloble.WCSSystem, ref place1, myNotext); |
| | | StationHandler.SetPlaceTaskDoingStatus(false, SysGloble.WCSSystem, ref place1, myNotext); |
| | | StationHandler.SetPlaceLockStatus(false, SysGloble.WCSSystem, ref place2, myNotext); |
| | | StationHandler.SetPlaceTaskDoingStatus(false, SysGloble.WCSSystem, ref place2, myNotext); |
| | | |
| | | var place3 = context.Base_Station.Where(x => x.Id == partTask.SourcePlace).First(); |
| | | var place4 = context.Base_Station.Where(x => x.Id == partTask.ToPlace).First(); |
| | | StationHandler.SetPlaceLockStatus(false, SysGloble.WCSSystem, ref place3, myNotext); |
| | | StationHandler.SetPlaceTaskDoingStatus(false, SysGloble.WCSSystem, ref place3, myNotext); |
| | | StationHandler.SetPlaceLockStatus(false, SysGloble.WCSSystem, ref place4, myNotext); |
| | | StationHandler.SetPlaceTaskDoingStatus(false, SysGloble.WCSSystem, ref place4, myNotext); |
| | | |
| | | //判断堆垛机上现在是否正在执行该任务,如果执行了,就删掉他 |
| | | var srmPlcTaskId = ""; |
| | | int deviceId = 0; |
| | | if (partTask.DeviceType == (int)(EDeviceType.堆垛机)) |
| | | { |
| | | srmPlcTaskId = partTask.PlcTaskId; |
| | | deviceId = (int)partTask.DeviceId; |
| | | } |
| | | else if (partTask2.DeviceType == (int)(EDeviceType.堆垛机)) |
| | | { |
| | | srmPlcTaskId = partTask2.PlcTaskId; |
| | | deviceId = (int)partTask2.DeviceId; |
| | | } |
| | | if (srmViewDict[deviceId].R_TaskNo.ToString() == srmPlcTaskId) |
| | | {//删除堆垛机任务 |
| | | using (SrmService.SrmServiceClient opcClinet = new SrmServiceClient()) |
| | | { |
| | | var result = opcClinet.SendSrmDelete((int)deviceId); |
| | | if (result.result == false) |
| | | { |
| | | MessageBox.Show("删除堆垛机任务失败:" + result.resMsg); |
| | | return; |
| | | } |
| | | } |
| | | } |
| | | |
| | | break; |
| | | default: |
| | | MessageBox.Show("不支持的业务类型"); |
| | | return; |
| | | } |
| | | |
| | | var changeState = DeviceTaskStatusEnum.已取消; |
| | | partTask.TaskState = (int)changeState; |
| | | partTask.TaskStateName = changeState.ToString(); |
| | | |
| | | partTask.ModifyTime = DateTime.Now; |
| | | partTask.OperationRemark = "用户取消任务," + _AllowSimulateExecute_Rmark; |
| | | partTask.ModifyBy = SysGloble.WCSSystem; |
| | | if (partTask2 != null) |
| | | { |
| | | partTask2.TaskState = (int)changeState; |
| | | partTask2.TaskStateName = changeState.ToString(); |
| | | |
| | | partTask2.ModifyTime = DateTime.Now; |
| | | partTask2.OperationRemark = "用户取消任务," + _AllowSimulateExecute_Rmark; |
| | | partTask2.ModifyBy = SysGloble.WCSSystem; |
| | | } |
| | | |
| | | //主任务也要修改为取消 |
| | | mainTask.TaskState = (int)MainTaskStatusEnum.已取消; |
| | | mainTask.TaskStateName = MainTaskStatusEnum.已取消.ToString(); |
| | | mainTask.FinishTime = DateTime.Now; |
| | | mainTask.OperationRemark = "用户取消任务," + _AllowSimulateExecute_Rmark; |
| | | task.TaskStatus = (int)TaskStatusEnum.已完成; |
| | | task.FinishedTime = DateTime.Now; |
| | | |
| | | |
| | | //同时将目标点和起点解除锁定 |
| | | //我想了想,还是别解锁了,万一有别的问题呢? |
| | | var place = StationHandler.GetPlaceByPlaceCode(task.PlaceCode, wmsDB); |
| | | place.PlaceStatus = (int)PlaceStatusEnum.正常; |
| | | |
| | | //保存人工处理日志 [EditBy shaocx,2022-05-01] |
| | | Base_PersonHandlerRecord record = new Base_PersonHandlerRecord() |
| | | { |
| | | MainTaskNo = partTask.MainTaskNo, |
| | | HandlerType = "取消任务", |
| | | PartTaskId = partTask.Id, |
| | | PlcTaskId = partTask.PlcTaskId, |
| | | RealSourcePlace = partTask.RealSourcePlace, |
| | | RealToPlace = partTask.RealToPlace, |
| | | SalverCode = partTask.SalverCode, |
| | | SerialNumber = partTask.SerialNumber, |
| | | OrderNo = partTask.OrderNo, |
| | | TaskTypeName = partTask.TaskTypeName, |
| | | Qty = partTask.Qty, |
| | | |
| | | ManualHandlerRemark = _AllowSimulateExecute_Rmark |
| | | WmsRecordUpiProcessHandler.SaveWmsRecordUpiProcess(wmsDB, upiObj, task.PlaceCode, "缓存入库完成:" + task.PlaceCode); |
| | | |
| | | }; |
| | | PersonHandlerRecordHandler.SavePersonHandlerRecord(context, record); |
| | | |
| | | context.SaveChanges(); |
| | | } |
| | | else |
| | | { |
| | | MessageBox.Show("未找到该任务!"); |
| | | return; |
| | | } |
| | | |
| | | MessageBox.Show("取消任务成功!"); |
| | | |
| | | BindData(); |
| | | } |
| | | else |
| | | { |
| | | MessageBox.Show("请先选中要执行的行!"); |
| | | } |
| | | } |
| | | } |
| | | else//如果点击“取消”按钮 |
| | | { |
| | | |
| | | } |
| | | wmsDB.SaveChanges(); |
| | | } |
| | | catch (Exception ex) |
| | | if (!string.IsNullOrEmpty(alertMsg)) |
| | | { |
| | | MessageBox.Show("取消任务异常:" + ex.Message); |
| | | Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.CCWCFService, "取消任务异常:" + ex.Message, ex); |
| | | MessageBox.Show("错误:" + alertMsg); |
| | | } |
| | | } |
| | | |
| | | private void btnReset_Click_1(object sender, EventArgs e) |
| | | { |
| | | //任务重发 |
| | | try |
| | | else |
| | | { |
| | | var _AllowSimulateExecute_Rmark = this.tb_AllowSimulateExecute_Rmark.Text; |
| | | if (string.IsNullOrEmpty(_AllowSimulateExecute_Rmark)) |
| | | { |
| | | MessageBox.Show("请输入任务重发原因说明!"); |
| | | return; |
| | | } |
| | | if (SystemValue.isStartedModel) |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowError("手动发任务,需要将模式关闭!"); |
| | | return; |
| | | } |
| | | |
| | | MessageBoxButtons messButton = MessageBoxButtons.OKCancel; |
| | | |
| | | using (DbModel db = new DbModel()) |
| | | { |
| | | var row = dgvPartTask.SelectedRows; |
| | | |
| | | if (row.Count > 0) |
| | | { |
| | | var cell = row[0].Cells; |
| | | //var id = cell[0].Value.ToString(); |
| | | var id = cell["Id"].Value.ToString(); |
| | | var task = db.Task_Part.FirstOrDefault(x => x.Id == id); |
| | | if (task != null) |
| | | { |
| | | if (task.TaskState != (int)DeviceTaskStatusEnum.已下发) |
| | | {//增加限制 【Editby shaocx,2022-11-04】 |
| | | WZ.Useful.Commons.MessageUtil.ShowError("任务状态必须是'已下发'才能重试发任务!"); |
| | | return; |
| | | } |
| | | //判断设备类型 |
| | | DialogResult dr = MessageBox.Show(string.Format("确定要手动重新发送{0}任务,起点:{1},目标点:{2}吗?", task.DeviceName, task.RealSourcePlace, task.RealToPlace), "提示", messButton); |
| | | if (dr == DialogResult.OK)//如果点击“确定”按钮 |
| | | { |
| | | var sourcePlce = task.RealSourcePlace; |
| | | var toPlace = task.RealToPlace; |
| | | var tbTaskId = task.PlcTaskId; |
| | | |
| | | |
| | | EDeviceType deviceType = (EDeviceType)Enum.Parse(typeof(EDeviceType), task.DeviceType.ToString()); |
| | | switch (deviceType) |
| | | { |
| | | case EDeviceType.堆垛机: |
| | | using (var opcClinet = new SrmService.SrmServiceClient()) |
| | | { |
| | | |
| | | iWareCC.SrmService.SdaResEntity sdaResult = opcClinet.SendSrmTask((int)task.DeviceId, int.Parse(tbTaskId), |
| | | sourcePlce, toPlace, (short)ESrmCmd.库内搬运); |
| | | if (sdaResult.result) |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowTips(task.DeviceName + ESrmCmd.库内搬运.ToString() + "命令发送成功!"); |
| | | } |
| | | else |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowError(task.DeviceName + ESrmCmd.库内搬运.ToString() + "命令发送失败!返回代码:" + sdaResult.resMsg); |
| | | } |
| | | } |
| | | break; |
| | | case EDeviceType.RGV: |
| | | using (var opcClinet = new RgvService.RgvServiceClient()) |
| | | { |
| | | if (sourcePlce == "1010") |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowError("站点1010不能发任务!"); |
| | | return; |
| | | } |
| | | iWareCC.RgvService.SdaResEntity sdaResult = opcClinet.SendRgvTask((int)EDevice.RGV, Convert.ToInt32(tbTaskId), sourcePlce, toPlace); |
| | | if (sdaResult.result) |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowTips("RGV命令发送成功!"); |
| | | } |
| | | else |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowError("RGV命令发送失败!返回消息:" + sdaResult.resMsg); |
| | | } |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | else//如果点击“取消”按钮 |
| | | { |
| | | return; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | MessageBox.Show("未找到该任务!"); |
| | | return; |
| | | } |
| | | |
| | | using (DbModel context = new DbModel()) |
| | | { |
| | | //保存人工处理日志 [EditBy shaocx,2022-05-01] |
| | | Base_PersonHandlerRecord record = new Base_PersonHandlerRecord() |
| | | { |
| | | MainTaskNo = task.MainTaskNo, |
| | | HandlerType = "任务重发", |
| | | PartTaskId = task.Id, |
| | | PlcTaskId = task.PlcTaskId, |
| | | RealSourcePlace = task.RealSourcePlace, |
| | | RealToPlace = task.RealToPlace, |
| | | SalverCode = task.SalverCode, |
| | | SerialNumber = task.SerialNumber, |
| | | OrderNo = task.OrderNo, |
| | | TaskTypeName = task.TaskTypeName, |
| | | Qty = task.Qty, |
| | | |
| | | ManualHandlerRemark = _AllowSimulateExecute_Rmark |
| | | |
| | | }; |
| | | PersonHandlerRecordHandler.SavePersonHandlerRecord(context, record); |
| | | |
| | | context.SaveChanges(); |
| | | } |
| | | |
| | | |
| | | MessageBox.Show("任务重发成功!"); |
| | | |
| | | BindData(); |
| | | } |
| | | else |
| | | { |
| | | MessageBox.Show("请先选中要执行的行!"); |
| | | } |
| | | } |
| | | |
| | | MessageBox.Show("已处理"); |
| | | } |
| | | catch (Exception ex) |
| | | } |
| | | |
| | | private void button2_Click(object sender, EventArgs e) |
| | | { |
| | | //更新库存表中的次序字段 |
| | | var alertMsg = ""; |
| | | using (WmsDBModel db = new WmsDBModel()) |
| | | { |
| | | MessageBox.Show("任务重发出现异常:" + ex.Message); |
| | | } |
| | | } |
| | | //查询立体库中的upi列表 |
| | | var quanList = db.wms_stock_quan.ToList(); |
| | | var query_quanList = quanList.Select(x => x.Upi).ToList(); |
| | | var upiList = db.mes_batchOrderUPI_new.Where(x => query_quanList.Contains(x.UPI)).ToList(); |
| | | foreach (var item in quanList) |
| | | { |
| | | var _shelf = upiList.Find(x => x.UPI == item.Upi); |
| | | item.Shelf = _shelf.Shelf; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 关闭1015重新扫描 |
| | | /// </summary> |
| | | /// <param name="sender"></param> |
| | | /// <param name="e"></param> |
| | | private void button3_Click(object sender, EventArgs e) |
| | | { |
| | | using (var opcClinet = new RgvService.RgvServiceClient()) |
| | | |
| | | db.SaveChanges(); |
| | | } |
| | | if (!string.IsNullOrEmpty(alertMsg)) |
| | | { |
| | | iWareCC.RgvService.SdaResEntity sdaResult = opcClinet.Write1015ReScan((int)EDevice.RGV, false); |
| | | if (sdaResult.result) |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowTips("关闭命令发送成功!"); |
| | | } |
| | | else |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowError("关闭命令发送失败!返回消息:" + sdaResult.resMsg); |
| | | } |
| | | MessageBox.Show("错误:" + alertMsg); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 关闭1019重新扫描 |
| | | /// </summary> |
| | | /// <param name="sender"></param> |
| | | /// <param name="e"></param> |
| | | private void button21_Click(object sender, EventArgs e) |
| | | { |
| | | using (var opcClinet = new RgvService.RgvServiceClient()) |
| | | else |
| | | { |
| | | iWareCC.RgvService.SdaResEntity sdaResult = opcClinet.Write1019ReScan((int)EDevice.RGV, false); |
| | | if (sdaResult.result) |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowTips("关闭命令发送成功!"); |
| | | } |
| | | else |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowError("关闭命令发送失败!返回消息:" + sdaResult.resMsg); |
| | | } |
| | | MessageBox.Show("已处理"); |
| | | } |
| | | |
| | | } |
| | | |
| | | private void dgvPartTask_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) |
| | | { |
| | | SolidBrush b = new SolidBrush(this.dgvPartTask.RowHeadersDefaultCellStyle.ForeColor); |
| | | e.Graphics.DrawString((e.RowIndex + 1).ToString(System.Globalization.CultureInfo.CurrentUICulture), this.dgvPartTask.DefaultCellStyle.Font, b, e.RowBounds.Location.X + 20, e.RowBounds.Location.Y + 4); |
| | | } |
| | | |
| | | private void label3_Click(object sender, EventArgs e) |
| | | { |
| | | |
| | | } |
| | | |
| | | private void panel_DeviceTaskList_Paint(object sender, PaintEventArgs e) |
| | | { |
| | | |
| | | } |
| | | |
| | | private void button5_Click(object sender, EventArgs e) |
| | | { |
| | | if (SystemValue.isStartedModel) |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowError("手动库位维护,需要将模式关闭!"); |
| | | return; |
| | | } |
| | | //手动库位维护 |
| | | SrmStockForm frm = new SrmStockForm(); |
| | | frm.ShowDialog(); |
| | | } |
| | | |
| | | private void button7_Click(object sender, EventArgs e) |
| | | { |
| | | //查询RGV&输送线库存 |
| | | dataGridView_RgvStore.AutoGenerateColumns = false; |
| | | for (int i = 0; i < dataGridView_RgvStore.Columns.Count; i++) |
| | | { |
| | | if (i == (dataGridView_RgvStore.Columns.Count - 1)) |
| | | {//最后一列填充 |
| | | dataGridView_RgvStore.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; |
| | | } |
| | | else |
| | | {//其他列自动适应宽度 |
| | | dataGridView_RgvStore.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; |
| | | } |
| | | } |
| | | |
| | | BindDataForRgvStore(); |
| | | |
| | | //this.dgvPartTask.Columns["CreateTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; |
| | | //this.dgvPartTask.Columns["IssueTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; |
| | | //this.dgvPartTask.Columns["FinishTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; |
| | | //this.dgvPartTask.Columns["AllowSimulateExecute_Time"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; |
| | | FormHelper.DataGridViewSelfAdaptionWidth(this.dataGridView_RgvStore); |
| | | } |
| | | |
| | | public void BindDataForRgvStore() |
| | | { |
| | | dataGridView_RgvStore.ClearSelection(); //可消除所有选择的行 |
| | | dataGridView_RgvStore.DataSource = null; |
| | | |
| | | dataGridView_RgvStore.CurrentCell = null; //可消除选择行的行头箭头 |
| | | using (DbModel db = new DbModel()) |
| | | { |
| | | var storeList = db.V_AllStationStore.Where(x => x.IsRgvStation == true).ToList(); |
| | | |
| | | if (storeList != null && storeList.Count > 0) |
| | | { |
| | | storeList = storeList.OrderBy(x => x.RgvStationCode).ToList();//重新 升序排序 |
| | | dataGridView_RgvStore.DataSource = null; |
| | | dataGridView_RgvStore.DataSource = storeList; |
| | | } |
| | | else |
| | | { |
| | | //if (dataGridView_RgvStore.Rows.Count > 0) |
| | | //{ |
| | | // int i = dataGridView_RgvStore.Rows[0].Cells.Count; |
| | | // var cells = dataGridView_RgvStore.Rows[0].Cells; |
| | | // for (int j = 0; j < i; j++) |
| | | // { |
| | | // cells[j].Value = null; |
| | | // } |
| | | //} |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void dataGridView_RgvStore_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) |
| | | { |
| | | SolidBrush b = new SolidBrush(this.dataGridView_RgvStore.RowHeadersDefaultCellStyle.ForeColor); |
| | | e.Graphics.DrawString((e.RowIndex + 1).ToString(System.Globalization.CultureInfo.CurrentUICulture), this.dataGridView_RgvStore.DefaultCellStyle.Font, b, e.RowBounds.Location.X + 20, e.RowBounds.Location.Y + 4); |
| | | } |
| | | |
| | | private void btn_RgvConfirmFinishTask_Click(object sender, EventArgs e) |
| | | { |
| | | if (SystemValue.isStartedModel) |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowError("手动RGV任务完成确认,需要将模式关闭!"); |
| | | return; |
| | | } |
| | | MessageBoxButtons messButton = MessageBoxButtons.OKCancel; |
| | | DialogResult dr = MessageBox.Show("确定要发送任务完成确认吗?", "确认", messButton); |
| | | if (dr == DialogResult.OK)//如果点击“确定”按钮 |
| | | { |
| | | try |
| | | { |
| | | //读取1040上的任务号 |
| | | int taskId = 0; |
| | | var queryRgv = ((int)EDevice.RGV1040).ToString(); |
| | | var rgv = rgvView.R_RgvForReadCommList.Where(x => x.StationCode == queryRgv).FirstOrDefault(); |
| | | if (rgv != null) |
| | | { |
| | | taskId = rgv.R_TaskID; |
| | | } |
| | | |
| | | using (var opcClinet = new RgvService.RgvServiceClient()) |
| | | { |
| | | //if (!IsNumeric(tBSrmTransTskId.Text.Trim())) |
| | | //{ |
| | | // WZ.Useful.Commons.MessageUtil.ShowError("任务号格式错误,必须是数字!"); |
| | | // return; |
| | | //} |
| | | //var taskId = int.Parse(tBSrmTransTskId.Text.Trim()); |
| | | |
| | | iWareCC.RgvService.SdaResEntity sdaResult = opcClinet.WriteRGV_FinishACK((int)EDevice.RGV, true, taskId); |
| | | if (sdaResult.result) |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowTips("命令发送成功!"); |
| | | // tB_Srm1SourcePlace.Clear(); |
| | | // tB_Srm1ToPlace.Clear(); |
| | | Log4NetHelper.WriteInfoLog(iWareCommon.Utils.LogType.CCWCFService, "手动RGV任务确认成功,任务号:" + taskId); |
| | | } |
| | | else |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowError("命令发送失败!返回消息:" + sdaResult.resMsg); |
| | | Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.CCWCFService, "手动RGV任务确认失败:" + sdaResult.resMsg + ",任务号:" + taskId); |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowError("命令发送出现异常:" + ex.Message); |
| | | Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.CCWCFService, "手动RGV任务确认异常:" + ex.Message, ex); |
| | | |
| | | } |
| | | } |
| | | else//如果点击“取消”按钮 |
| | | { |
| | | |
| | | } |
| | | } |
| | | |
| | | //查询已完成的设备任务 |
| | | private void button17_Click(object sender, EventArgs e) |
| | | { |
| | | //查询设备任务列表 |
| | | dgvPartTask_Finished.AutoGenerateColumns = false; |
| | | for (int i = 0; i < dgvPartTask_Finished.Columns.Count; i++) |
| | | { |
| | | if (i == (dgvPartTask_Finished.Columns.Count - 1)) |
| | | {//最后一列填充 |
| | | dgvPartTask_Finished.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; |
| | | } |
| | | else |
| | | {//其他列自动适应宽度 |
| | | dgvPartTask_Finished.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; |
| | | } |
| | | } |
| | | |
| | | BindData_dgvPartTask_Finished(); |
| | | |
| | | //this.dgvPartTask.Columns["CreateTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; |
| | | //this.dgvPartTask.Columns["IssueTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; |
| | | //this.dgvPartTask.Columns["FinishTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; |
| | | //this.dgvPartTask.Columns["AllowSimulateExecute_Time"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; |
| | | FormHelper.DataGridViewSelfAdaptionWidth(this.dgvPartTask_Finished); |
| | | } |
| | | |
| | | public void BindData_dgvPartTask_Finished() |
| | | { |
| | | List<Task_Part> partList = new List<Task_Part>(); |
| | | dgvPartTask_Finished.ClearSelection(); //可消除所有选择的行 |
| | | dgvPartTask_Finished.DataSource = null; |
| | | |
| | | dgvPartTask_Finished.CurrentCell = null; //可消除选择行的行头箭头 |
| | | |
| | | var query_plc_taskNo = this.tb_Query_PlcTaskNo.Text.Trim(); |
| | | var query_Salver = this.tb_query_Salver.Text.Trim(); |
| | | |
| | | |
| | | //取 最后一个未结束的任务,然后取前5条已经结束的任务 |
| | | var queryState1 = (int)MainTaskStatusEnum.已取消; |
| | | var queryState2 = (int)MainTaskStatusEnum.已完成; |
| | | |
| | | using (DbModel db = new DbModel()) |
| | | { |
| | | List<Task_Main> firstNoFinishedTaskList = new List<Task_Main>(); |
| | | if (!string.IsNullOrEmpty(query_plc_taskNo) || !string.IsNullOrEmpty(query_Salver)) |
| | | { |
| | | Expression<Func<Task_Part, bool>> predicate_plc_taskno = a => 1 == 1; |
| | | Expression<Func<Task_Part, bool>> predicate_query_Salver = a => 1 == 1; |
| | | if (!string.IsNullOrEmpty(query_plc_taskNo)) |
| | | { |
| | | predicate_plc_taskno = a => a.PlcTaskId == query_plc_taskNo; |
| | | } |
| | | if (!string.IsNullOrEmpty(query_Salver)) |
| | | { |
| | | predicate_query_Salver = a => a.SalverCode == query_Salver; |
| | | } |
| | | |
| | | partList = db.Task_Part.Where(predicate_plc_taskno).Where(predicate_query_Salver).ToList(); |
| | | } |
| | | else |
| | | { |
| | | //增加 显示 ,最近已完成的任务,要 最近30个任务 【Editby shaocx,2023-04-03】 |
| | | firstNoFinishedTaskList = db.Task_Main.Where(x => |
| | | (x.TaskState == queryState1 || x.TaskState == queryState2) |
| | | ).OrderByDescending(x => x.CreateTime).Take(30).ToList(); |
| | | if (firstNoFinishedTaskList == null) |
| | | { |
| | | partList = new List<Task_Part>(); |
| | | } |
| | | else |
| | | { |
| | | List<int> mainIdList = new List<int>(); |
| | | foreach (var item in firstNoFinishedTaskList) |
| | | { |
| | | if (!mainIdList.Contains(item.Id)) |
| | | { |
| | | mainIdList.Add(item.Id); |
| | | } |
| | | } |
| | | var partList2 = db.Task_Part.Where(x => mainIdList.Contains(x.MainTaskId)).ToList(); |
| | | |
| | | //partList.AddRange(partList1); |
| | | partList.AddRange(partList2); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | if (partList != null && partList.Count > 0) |
| | | { |
| | | partList = partList.OrderBy(x => x.MainTaskId).ThenByDescending(x => x.CreateTime).ToList();//重新 升序排序 |
| | | dgvPartTask_Finished.DataSource = null; |
| | | dgvPartTask_Finished.DataSource = partList; |
| | | } |
| | | else |
| | | { |
| | | //if (dgvPartTask_Finished.Rows.Count > 0) |
| | | //{ |
| | | // int i = dgvPartTask_Finished.Rows[0].Cells.Count; |
| | | // var cells = dgvPartTask_Finished.Rows[0].Cells; |
| | | // for (int j = 0; j < i; j++) |
| | | // { |
| | | // cells[j].Value = null; |
| | | // } |
| | | //} |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void button18_Click(object sender, EventArgs e) |
| | | { |
| | | //查询设备任务列表 |
| | | dataGridView__OutTaskList.AutoGenerateColumns = false; |
| | | for (int i = 0; i < dataGridView__OutTaskList.Columns.Count; i++) |
| | | { |
| | | if (i == (dataGridView__OutTaskList.Columns.Count - 1)) |
| | | {//最后一列填充 |
| | | dataGridView__OutTaskList.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; |
| | | } |
| | | else |
| | | {//其他列自动适应宽度 |
| | | dataGridView__OutTaskList.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; |
| | | } |
| | | } |
| | | |
| | | BindData_OutTaskList(); |
| | | |
| | | //this.dgvPartTask.Columns["CreateTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; |
| | | //this.dgvPartTask.Columns["IssueTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; |
| | | //this.dgvPartTask.Columns["FinishTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; |
| | | //this.dgvPartTask.Columns["AllowSimulateExecute_Time"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; |
| | | FormHelper.DataGridViewSelfAdaptionWidth(this.dataGridView__OutTaskList); |
| | | } |
| | | |
| | | public void BindData_OutTaskList() |
| | | { |
| | | List<Task_Main> mainList = new List<Task_Main>(); |
| | | dataGridView__OutTaskList.ClearSelection(); //可消除所有选择的行 |
| | | dataGridView__OutTaskList.DataSource = null; |
| | | |
| | | dataGridView__OutTaskList.CurrentCell = null; //可消除选择行的行头箭头 |
| | | using (DbModel db = new DbModel()) |
| | | { |
| | | var queryState1 = (int)MainTaskStatusEnum.已取消; |
| | | var queryState2 = (int)MainTaskStatusEnum.已完成; |
| | | var queryInOutFlag = (int)MainInOutFlagEnum.出库; |
| | | mainList = db.Task_Main.Where(x => x.TaskState != queryState1 && x.TaskState != queryState2 |
| | | && x.InOutFlag == queryInOutFlag |
| | | ).OrderBy(x => x.TaskSequence).ThenBy(x => x.CreateTime).ToList(); |
| | | |
| | | if (mainList != null && mainList.Count > 0) |
| | | { |
| | | dataGridView__OutTaskList.DataSource = null; |
| | | dataGridView__OutTaskList.DataSource = mainList; |
| | | } |
| | | else |
| | | { |
| | | //if (dataGridView__OutTaskList.Rows.Count > 0) |
| | | //{ |
| | | // int i = dataGridView__OutTaskList.Rows[0].Cells.Count; |
| | | // var cells = dataGridView__OutTaskList.Rows[0].Cells; |
| | | // for (int j = 0; j < i; j++) |
| | | // { |
| | | // cells[j].Value = null; |
| | | // } |
| | | //} |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void panel_DeviceTaskList_dgvPartTask_Finished_Paint(object sender, PaintEventArgs e) |
| | | { |
| | | |
| | | } |
| | | |
| | | private void btn_TongJi_Click(object sender, EventArgs e) |
| | | { |
| | | //统计 |
| | | |
| | | int store_FDJ = 0;//现有发动机数 |
| | | int store_EmptySalver = 0;//空托盘数量 |
| | | int store_EmptySalver_TS = 0;//空托盘托数 |
| | | |
| | | int count_In_FDJ = 0;//查询某天入库了多少发动机 |
| | | int count_In_EmptySalver = 0;//查询某天入库了多少 空托盘 |
| | | int count_In_EmptySalver_TS = 0;//查询某天入库了多少 空托盘托数 |
| | | |
| | | int count_Out_FDJ = 0;//查询某天出库了多少发动机 |
| | | int count_Out_EmptySalver = 0;//查询某天出库了多少 空托盘 |
| | | int count_Out_EmptySalver_TS = 0;//查询某天出库了多少 空托盘托数 |
| | | |
| | | int count_ZY_EmptySalver = 0;//查询某天转运了多少 空托盘 |
| | | int count_ZY_EmptySalver_TS = 0;//查询某天转运了多少 空托盘托数 |
| | | |
| | | //某段时间的统计 |
| | | var str_start = this.dateTimePicker_Start.Value.ToString("yyyy-MM-dd" + " " + "00:00:00"); |
| | | var str_end = this.dateTimePicker_End.Value.ToString("yyyy-MM-dd" + " " + "23:59:59"); |
| | | var start = Convert.ToDateTime(str_start); |
| | | var end = Convert.ToDateTime(str_end); |
| | | |
| | | int allPlacesCount = 0; |
| | | using (DbModel edm = new DbModel()) |
| | | { |
| | | |
| | | var queryMaterialType_一般物料 = (int)MaterialTypeEnum.一般物料; |
| | | var queryMaterialType_托盘 = (int)MaterialTypeEnum.托盘; |
| | | var queryInOutFlag_In = (int)MainInOutFlagEnum.入库; |
| | | var queryInOutFlag_Out = (int)MainInOutFlagEnum.出库; |
| | | var queryInOutFlag_ZY = (int)MainInOutFlagEnum.转运; |
| | | |
| | | var allPlaces = edm.Base_Station.Where(x => x.IsSrmStation == true).ToList(); |
| | | allPlaces = StationHandler.FindCommonFilter(allPlaces); |
| | | allPlacesCount = allPlaces.Count; |
| | | |
| | | store_FDJ = edm.V_Store.Where(x => x.MaterialType == queryMaterialType_一般物料).Count(); |
| | | |
| | | |
| | | store_EmptySalver_TS = edm.V_Store.Where(x => x.MaterialType == queryMaterialType_托盘).Count(); |
| | | store_EmptySalver = store_EmptySalver_TS == 0 ? 0 : edm.V_Store.Where(x => x.MaterialType == queryMaterialType_托盘).Sum(x => (int)x.Qty); |
| | | |
| | | |
| | | |
| | | //查询某天入库了多少发动机 |
| | | var taskState = (int)MainTaskStatusEnum.已完成; |
| | | count_In_FDJ = edm.Task_Main.Where(x => x.MaterialType == queryMaterialType_一般物料 && x.InOutFlag == queryInOutFlag_In && x.TaskState == taskState && (x.FinishTime >= start && x.FinishTime <= end)).Count(); |
| | | |
| | | //查询某天入库了多少托盘 |
| | | count_In_EmptySalver_TS = edm.Task_Main.Where(x => x.MaterialType == queryMaterialType_托盘 && x.InOutFlag == queryInOutFlag_In && x.TaskState == taskState && (x.FinishTime >= start && x.FinishTime <= end)).Count(); |
| | | count_In_EmptySalver = count_In_EmptySalver_TS == 0 ? 0 : edm.Task_Main.Where(x => x.MaterialType == queryMaterialType_托盘 && x.InOutFlag == queryInOutFlag_In && x.TaskState == taskState && (x.FinishTime >= start && x.FinishTime <= end)).Sum(x => (int)x.Qty); |
| | | |
| | | //查询某天出库了多少发动机 |
| | | count_Out_FDJ = edm.Task_Main.Where(x => x.MaterialType == queryMaterialType_一般物料 && x.InOutFlag == queryInOutFlag_Out && x.TaskState == taskState && (x.FinishTime >= start && x.FinishTime <= end)).Count(); |
| | | |
| | | //查询某天入库了多少托盘 |
| | | count_Out_EmptySalver_TS = edm.Task_Main.Where(x => x.MaterialType == queryMaterialType_托盘 && x.InOutFlag == queryInOutFlag_Out && x.TaskState == taskState && (x.FinishTime >= start && x.FinishTime <= end)).Count(); |
| | | count_Out_EmptySalver = count_Out_EmptySalver_TS == 0 ? 0 : edm.Task_Main.Where(x => x.MaterialType == queryMaterialType_托盘 && x.InOutFlag == queryInOutFlag_Out && x.TaskState == taskState && (x.FinishTime >= start && x.FinishTime <= end)).Sum(x => (int)x.Qty); |
| | | |
| | | //查询某天转运了多少托盘(注意:只查询去1014位置的) |
| | | count_ZY_EmptySalver_TS = edm.Task_Main.Where(x => x.MaterialType == queryMaterialType_托盘 && x.InOutFlag == queryInOutFlag_ZY && x.TaskState == taskState && (x.FinishTime >= start && x.FinishTime <= end) && x.RealToPlace == "1014").Count(); |
| | | count_ZY_EmptySalver = count_ZY_EmptySalver_TS == 0 ? 0 : edm.Task_Main.Where(x => x.MaterialType == queryMaterialType_托盘 && x.InOutFlag == queryInOutFlag_ZY && x.TaskState == taskState && (x.FinishTime >= start && x.FinishTime <= end) && x.RealToPlace == "1014").Sum(x => (int)x.Qty); |
| | | |
| | | } |
| | | |
| | | //显示 |
| | | //var aa = "\r\n"; |
| | | var str = ""; |
| | | str += "时间范围: " + str_start + "至" + str_end + " \r\n"; |
| | | str += "==================【库存】========================= \r\n"; |
| | | str += "现有发动机数: " + store_FDJ + " \r\n"; |
| | | str += "现有空托盘数: " + store_EmptySalver + " \r\n"; |
| | | str += "现有空托盘托数: " + store_EmptySalver_TS + " \r\n"; |
| | | str += "总库位" + allPlacesCount + ",有发动机或托盘库位" + (store_FDJ + store_EmptySalver_TS) + ",库存占比: " + CSharpHelper.ExecPercent((store_FDJ + store_EmptySalver_TS), allPlacesCount) + " \r\n"; |
| | | str += "\r\n"; |
| | | |
| | | str += "==================【入库】========================= \r\n"; |
| | | str += "入库发动机数: " + count_In_FDJ + " \r\n"; |
| | | str += "入库空托盘数: " + count_In_EmptySalver + " \r\n"; |
| | | str += "入库空托盘托数: " + count_In_EmptySalver_TS + " \r\n"; |
| | | str += "\r\n"; |
| | | |
| | | str += "==================【出库】========================= \r\n"; |
| | | str += "出库发动机数: " + count_Out_FDJ + " \r\n"; |
| | | str += "出库空托盘数: " + count_Out_EmptySalver + " \r\n"; |
| | | str += "出库空托盘托数: " + count_Out_EmptySalver_TS + " \r\n"; |
| | | str += "\r\n"; |
| | | |
| | | str += "==================【转运托盘】========================= \r\n"; |
| | | str += "转运空托盘数: " + count_ZY_EmptySalver + " \r\n"; |
| | | str += "转运空托盘托数: " + count_ZY_EmptySalver_TS + " \r\n"; |
| | | str += "\r\n"; |
| | | |
| | | this.tb_TongJi.Text = str; |
| | | } |
| | | |
| | | private void checkBox_NowDay_CheckedChanged(object sender, EventArgs e) |
| | | { |
| | | if (this.checkBox_NowDay.Checked) |
| | | { |
| | | dateTimePicker_Start.Value = DateTime.Now; |
| | | dateTimePicker_End.Value = DateTime.Now; |
| | | } |
| | | } |
| | | |
| | | private void rBOnlyIn_CheckedChanged(object sender, EventArgs e) |
| | | { |
| | | SetModelCheckBoxToSystemValue(); |
| | | } |
| | | |
| | | private void btnSMQZYZTG1_Click(object sender, EventArgs e) |
| | | { |
| | | DobtnSMQZYZTG(EDevice.一号堆垛机); |
| | | } |
| | | |
| | | private void DobtnSMQZYZTG(EDevice device) |
| | | { |
| | | MessageBoxButtons messButton = MessageBoxButtons.OKCancel; |
| | | DialogResult dr = MessageBox.Show("注意:入库口扫码强制验证通过功能,仅适用于扫码器没有扫到码,但是实际托盘码和堆垛机要执行的任务托盘码一致的情况!如果堆垛机要执行的任务跟实际托盘码不符,请不要点击该按钮,及时联系管理员过来处理。您确定要操作吗?", "确认", messButton); |
| | | if (dr == DialogResult.OK)//如果点击“确定”按钮 |
| | | { |
| | | var stationCode = MyExtendHelper.GetRgvStationCodeBySrm(device); |
| | | var srm = FormCC.srmViewDict[(int)device]; |
| | | //只有当堆垛机有任务执行时,并且是入库任务的时候才判断 |
| | | var realSrmSourcePlace = (int)device + "-" + srm.SrmSourcePlace; |
| | | if (srm.R_TaskNo > 0 && (srm.R_State == (int)ESrmState.取货中 || srm.R_State == (int)ESrmState.取货定位中) |
| | | && SysGloble.Dict_SpecialPlace_IN.ContainsKey(realSrmSourcePlace)) |
| | | { |
| | | var result = MyExtendHelper.WriteScanValidateACK(false, "入库口扫码强制验证通过", stationCode, srm.R_TaskNo, true, "", ""); |
| | | if (result) |
| | | { |
| | | MyExtendHelper.SetSrm_IN_SMQZYZTG(device, true); |
| | | MessageBox.Show("入库口扫码强制验证通过 成功!"); |
| | | } |
| | | else |
| | | { |
| | | MessageBox.Show("入库口扫码强制验证通过 失败!"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | MessageBox.Show(device.ToString() + "任务号不是大于0,或者 状态不是 '取货中'或'取货定位中',不允许操作"); |
| | | } |
| | | } |
| | | else//如果点击“取消”按钮 |
| | | { |
| | | |
| | | } |
| | | } |
| | | |
| | | private void btnSMQZYZTG4_Click(object sender, EventArgs e) |
| | | { |
| | | DobtnSMQZYZTG(EDevice.四号堆垛机); |
| | | } |
| | | |
| | | private void btnSMQZYZTG3_Click(object sender, EventArgs e) |
| | | { |
| | | DobtnSMQZYZTG(EDevice.三号堆垛机); |
| | | } |
| | | |
| | | private void btnSMQZYZTG2_Click(object sender, EventArgs e) |
| | | { |
| | | DobtnSMQZYZTG(EDevice.二号堆垛机); |
| | | } |
| | | |
| | | private void btn_WaitPlanDetail_Click(object sender, EventArgs e) |
| | | { |
| | | //查询设备任务列表 |
| | | dataGridView_WaitPlanDetail.AutoGenerateColumns = false; |
| | | for (int i = 0; i < dataGridView_WaitPlanDetail.Columns.Count; i++) |
| | | { |
| | | if (i == (dataGridView_WaitPlanDetail.Columns.Count - 1)) |
| | | {//最后一列填充 |
| | | dataGridView_WaitPlanDetail.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; |
| | | } |
| | | else |
| | | {//其他列自动适应宽度 |
| | | dataGridView_WaitPlanDetail.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; |
| | | } |
| | | } |
| | | |
| | | BindData_WaitPlanDetail(); |
| | | |
| | | //this.dgvPartTask.Columns["CreateTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; |
| | | //this.dgvPartTask.Columns["IssueTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; |
| | | //this.dgvPartTask.Columns["FinishTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; |
| | | //this.dgvPartTask.Columns["AllowSimulateExecute_Time"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; |
| | | FormHelper.DataGridViewSelfAdaptionWidth(this.dataGridView_WaitPlanDetail); |
| | | } |
| | | |
| | | public void BindData_WaitPlanDetail() |
| | | { |
| | | List<Plan_OutTaskDetail> mainList = new List<Plan_OutTaskDetail>(); |
| | | dataGridView_WaitPlanDetail.ClearSelection(); //可消除所有选择的行 |
| | | dataGridView_WaitPlanDetail.DataSource = null; |
| | | |
| | | dataGridView_WaitPlanDetail.CurrentCell = null; //可消除选择行的行头箭头 |
| | | using (DbModel db = new DbModel()) |
| | | { |
| | | var queryState1 = (int)OutTaskDetailStateEnum.等待中; |
| | | var queryState2 = (int)OutTaskDetailStateEnum.缺料; |
| | | mainList = db.Plan_OutTaskDetail.Where(x => x.OutTaskDetailState == queryState1 |
| | | || x.OutTaskDetailState == queryState2 |
| | | ).OrderBy(x => x.TaskSequence).ThenBy(x => x.CreateTime).ToList(); |
| | | |
| | | if (mainList != null && mainList.Count > 0) |
| | | { |
| | | dataGridView_WaitPlanDetail.DataSource = null; |
| | | dataGridView_WaitPlanDetail.DataSource = mainList; |
| | | } |
| | | else |
| | | { |
| | | //if (dataGridView__OutTaskList.Rows.Count > 0) |
| | | //{ |
| | | // int i = dataGridView__OutTaskList.Rows[0].Cells.Count; |
| | | // var cells = dataGridView__OutTaskList.Rows[0].Cells; |
| | | // for (int j = 0; j < i; j++) |
| | | // { |
| | | // cells[j].Value = null; |
| | | // } |
| | | //} |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void btnDeleteTask_Click(object sender, EventArgs e) |
| | | { |
| | | //任务强制删除 |
| | | try |
| | | { |
| | | if (SystemValue.isStartedModel) |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowError("手动任务强制删除,需要将模式关闭!"); |
| | | return; |
| | | } |
| | | |
| | | var _AllowSimulateExecute_Rmark = this.tb_AllowSimulateExecute_Rmark.Text; |
| | | if (string.IsNullOrEmpty(_AllowSimulateExecute_Rmark)) |
| | | { |
| | | MessageBox.Show("请输入任务强制删除原因说明!"); |
| | | return; |
| | | } |
| | | var myNotext = "人工任务强制删除任务,原因:" + _AllowSimulateExecute_Rmark; |
| | | MessageBoxButtons messButton = MessageBoxButtons.OKCancel; |
| | | DialogResult dr = MessageBox.Show("【任务强制删除,并不处理库存,请谨慎操作。确认任务强制删除后,还需人工校验下该任务库存是否正确!】,确定要任务强制删除吗?", "提示", messButton); |
| | | if (dr == DialogResult.OK)//如果点击“确定”按钮 |
| | | { |
| | | using (DbModel context = new DbModel()) |
| | | { |
| | | var row = dgvPartTask.SelectedRows; |
| | | |
| | | if (row.Count > 0) |
| | | { |
| | | var cell = row[0].Cells; |
| | | //var id = cell[0].Value.ToString(); |
| | | var id = cell["Id"].Value.ToString(); |
| | | var partTask = context.Task_Part.FirstOrDefault(x => x.Id == id); |
| | | if (partTask != null) |
| | | { |
| | | //找到主任务 |
| | | var mainTask = context.Task_Main.Where(x => x.Id == partTask.MainTaskId).FirstOrDefault(); |
| | | if (mainTask == null) |
| | | { |
| | | MessageBox.Show("未找到该任务的主任务!"); |
| | | return; |
| | | } |
| | | //找另一个partTask |
| | | var partTask2 = context.Task_Part.FirstOrDefault(x => x.Id != partTask.Id && x.MainTaskId == mainTask.Id); |
| | | |
| | | if (partTask2 != null) |
| | | { |
| | | //解绑起点和终点 |
| | | |
| | | var place1 = context.Base_Station.Where(x => x.Id == partTask2.SourcePlace).First(); |
| | | var place2 = context.Base_Station.Where(x => x.Id == partTask2.ToPlace).First(); |
| | | StationHandler.SetPlaceLockStatus(false, SysGloble.WCSSystem, ref place1, myNotext); |
| | | StationHandler.SetPlaceTaskDoingStatus(false, SysGloble.WCSSystem, ref place1, myNotext); |
| | | StationHandler.SetPlaceLockStatus(false, SysGloble.WCSSystem, ref place2, myNotext); |
| | | StationHandler.SetPlaceTaskDoingStatus(false, SysGloble.WCSSystem, ref place2, myNotext); |
| | | } |
| | | |
| | | var place3 = context.Base_Station.Where(x => x.Id == partTask.SourcePlace).First(); |
| | | var place4 = context.Base_Station.Where(x => x.Id == partTask.ToPlace).First(); |
| | | StationHandler.SetPlaceLockStatus(false, SysGloble.WCSSystem, ref place3, myNotext); |
| | | StationHandler.SetPlaceTaskDoingStatus(false, SysGloble.WCSSystem, ref place3, myNotext); |
| | | StationHandler.SetPlaceLockStatus(false, SysGloble.WCSSystem, ref place4, myNotext); |
| | | StationHandler.SetPlaceTaskDoingStatus(false, SysGloble.WCSSystem, ref place4, myNotext); |
| | | |
| | | |
| | | |
| | | |
| | | //主任务也要修改为取消 |
| | | mainTask.TaskState = (int)MainTaskStatusEnum.已取消; |
| | | mainTask.TaskStateName = MainTaskStatusEnum.已取消.ToString(); |
| | | mainTask.FinishTime = DateTime.Now; |
| | | mainTask.OperationRemark = "用户任务强制删除," + _AllowSimulateExecute_Rmark; |
| | | |
| | | if (partTask2 != null) |
| | | { |
| | | context.Task_Part.Remove(partTask2); |
| | | } |
| | | context.Task_Part.Remove(partTask); |
| | | |
| | | //保存人工处理日志 [EditBy shaocx,2022-05-01] |
| | | Base_PersonHandlerRecord record = new Base_PersonHandlerRecord() |
| | | { |
| | | MainTaskNo = partTask.MainTaskNo, |
| | | HandlerType = "任务强制删除", |
| | | PartTaskId = partTask.Id, |
| | | PlcTaskId = partTask.PlcTaskId, |
| | | RealSourcePlace = partTask.RealSourcePlace, |
| | | RealToPlace = partTask.RealToPlace, |
| | | SalverCode = partTask.SalverCode, |
| | | SerialNumber = partTask.SerialNumber, |
| | | OrderNo = partTask.OrderNo, |
| | | TaskTypeName = partTask.TaskTypeName, |
| | | Qty = partTask.Qty, |
| | | |
| | | ManualHandlerRemark = _AllowSimulateExecute_Rmark |
| | | |
| | | }; |
| | | PersonHandlerRecordHandler.SavePersonHandlerRecord(context, record); |
| | | |
| | | context.SaveChanges(); |
| | | } |
| | | else |
| | | { |
| | | MessageBox.Show("未找到该任务!"); |
| | | return; |
| | | } |
| | | |
| | | MessageBox.Show("任务强制删除成功!"); |
| | | |
| | | BindData(); |
| | | } |
| | | else |
| | | { |
| | | MessageBox.Show("请先选中要执行的行!"); |
| | | } |
| | | } |
| | | } |
| | | else//如果点击“取消”按钮 |
| | | { |
| | | |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MessageBox.Show("任务强制删除异常:" + ex.Message); |
| | | Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.CCWCFService, "任务强制删除异常:" + ex.Message, ex); |
| | | } |
| | | } |
| | | |
| | | private void btn_Find_OutTaskRetryToMes_Click(object sender, EventArgs e) |
| | | { |
| | | //查询设备任务列表 |
| | | dg_OutTaskRetryToMes.AutoGenerateColumns = false; |
| | | for (int i = 0; i < dg_OutTaskRetryToMes.Columns.Count; i++) |
| | | { |
| | | if (i == (dg_OutTaskRetryToMes.Columns.Count - 1)) |
| | | {//最后一列填充 |
| | | dg_OutTaskRetryToMes.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; |
| | | } |
| | | else |
| | | {//其他列自动适应宽度 |
| | | dg_OutTaskRetryToMes.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; |
| | | } |
| | | } |
| | | |
| | | BindData_OutTaskRetryToMesList(); |
| | | |
| | | //this.dgvPartTask.Columns["CreateTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; |
| | | //this.dgvPartTask.Columns["IssueTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; |
| | | //this.dgvPartTask.Columns["FinishTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; |
| | | //this.dgvPartTask.Columns["AllowSimulateExecute_Time"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; |
| | | FormHelper.DataGridViewSelfAdaptionWidth(this.dg_OutTaskRetryToMes); |
| | | } |
| | | |
| | | public void BindData_OutTaskRetryToMesList() |
| | | { |
| | | List<Task_Main> mainList = new List<Task_Main>(); |
| | | dg_OutTaskRetryToMes.ClearSelection(); //可消除所有选择的行 |
| | | dg_OutTaskRetryToMes.DataSource = null; |
| | | |
| | | dg_OutTaskRetryToMes.CurrentCell = null; //可消除选择行的行头箭头 |
| | | using (DbModel db = new DbModel()) |
| | | { |
| | | mainList = db.Task_Main.Where(x => (x.IsNeedOnLine != null && x.IsNeedOnLine == true) && (x.IsOnLine == null || x.IsOnLine == false)).OrderBy(x => x.TaskSequence).ThenBy(x => x.CreateTime).ToList(); |
| | | |
| | | if (mainList != null && mainList.Count > 0) |
| | | { |
| | | dg_OutTaskRetryToMes.DataSource = null; |
| | | dg_OutTaskRetryToMes.DataSource = mainList; |
| | | } |
| | | else |
| | | { |
| | | //if (dataGridView__OutTaskList.Rows.Count > 0) |
| | | //{ |
| | | // int i = dataGridView__OutTaskList.Rows[0].Cells.Count; |
| | | // var cells = dataGridView__OutTaskList.Rows[0].Cells; |
| | | // for (int j = 0; j < i; j++) |
| | | // { |
| | | // cells[j].Value = null; |
| | | // } |
| | | //} |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void button19_Click(object sender, EventArgs e) |
| | | { |
| | | //重新通知MES出库 |
| | | try |
| | | { |
| | | if (SystemValue.isStartedModel) |
| | | { |
| | | WZ.Useful.Commons.MessageUtil.ShowError("手动重新通知MES出库,需要将模式关闭!"); |
| | | return; |
| | | } |
| | | |
| | | MessageBoxButtons messButton = MessageBoxButtons.OKCancel; |
| | | |
| | | using (DbModel db = new DbModel()) |
| | | { |
| | | var row = dg_OutTaskRetryToMes.SelectedRows; |
| | | |
| | | if (row.Count > 0) |
| | | { |
| | | var cell = row[0].Cells; |
| | | //var id = cell[0].Value.ToString(); |
| | | var id = Convert.ToInt32(cell["MesId"].Value.ToString()); |
| | | var task = db.Task_Main.FirstOrDefault(x => x.Id == id); |
| | | if (task != null) |
| | | { |
| | | //判断设备类型 |
| | | DialogResult dr = MessageBox.Show(string.Format("确定要手动重新通知MES出库吗?序列号{0},订货号{1}", task.SerialNumber, task.OrderNo), "提示", messButton); |
| | | if (dr == DialogResult.OK)//如果点击“确定”按钮 |
| | | { |
| | | MesRetModel<string> ret = MesService.updateOnlineStatusWithNoTask(task); |
| | | if (ret.code == 200) |
| | | { |
| | | using (DbModel context = new DbModel()) |
| | | { |
| | | //保存人工处理日志 [EditBy shaocx,2022-05-01] |
| | | Base_PersonHandlerRecord record = new Base_PersonHandlerRecord() |
| | | { |
| | | MainTaskNo = task.TaskNo, |
| | | HandlerType = "重新通知MES出库", |
| | | PartTaskId = "", |
| | | PlcTaskId = "", |
| | | RealSourcePlace = task.RealSourcePlace, |
| | | RealToPlace = task.RealToPlace, |
| | | SalverCode = task.SalverCode, |
| | | SerialNumber = task.SerialNumber, |
| | | OrderNo = task.OrderNo, |
| | | TaskTypeName = task.TaskTypeName, |
| | | Qty = task.Qty, |
| | | |
| | | ManualHandlerRemark = "重新推送" |
| | | |
| | | }; |
| | | PersonHandlerRecordHandler.SavePersonHandlerRecord(context, record); |
| | | |
| | | context.SaveChanges(); |
| | | } |
| | | |
| | | |
| | | MessageBox.Show("已重新给MES推送出库成功!"); |
| | | BindData(); |
| | | } |
| | | else |
| | | { |
| | | MessageBox.Show("已重新给MES推送出库失败!" + ret.msg); |
| | | BindData(); |
| | | } |
| | | } |
| | | else//如果点击“取消”按钮 |
| | | { |
| | | return; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | MessageBox.Show("未找到该任务!"); |
| | | return; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | MessageBox.Show("请先选中要执行的行!"); |
| | | } |
| | | } |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MessageBox.Show("任务重发出现异常:" + ex.Message); |
| | | } |
| | | } |
| | | |
| | | private void panel_dg_OutTaskRetryToMes_Paint(object sender, PaintEventArgs e) |
| | | { |
| | | |
| | | } |
| | | |
| | | private void btn_1019_Click(object sender, EventArgs e) |
| | | { |
| | | CommmonShowAgvStation(sender); |
| | | } |
| | | |
| | | private void button22_Click(object sender, EventArgs e) |
| | | { |
| | | var cargNo = this.tb_wlm.Text.Trim(); |
| | | var ret = WmsRequestHelper.test_getEngineInfo(cargNo); |
| | | |
| | | |
| | | //转换后 |
| | | MesRetModel2<MesRetProductModel> retModel = JsonConvert.DeserializeObject<MesRetModel2<MesRetProductModel>>(ret); |
| | | |
| | | this.tb_TongJi.Text = "MES返回:" + ret + "\r\n" + |
| | | "转换后:" + "\r\n" + |
| | | JsonConvert.SerializeObject(retModel) |
| | | ; |
| | | } |
| | | |
| | | private void button23_Click(object sender, EventArgs e) |
| | | { |
| | | var cargNo = this.tb_wlm.Text.Trim(); |
| | | var ret = WmsRequestHelper.test_btjReceive(cargNo); |
| | | |
| | | |
| | | //转换后 |
| | | MessageModel<string> retModel = JsonConvert.DeserializeObject<MessageModel<string>>(ret); |
| | | |
| | | this.tb_TongJi.Text = "WMS返回:" + ret + "\r\n" + |
| | | "转换后:" + "\r\n" + |
| | | JsonConvert.SerializeObject(retModel); |
| | | } |
| | | } |
| | | } |