using iWareCC.Common.Helper; using iWareCC.DeviceThreadFactory; using iWareCC.Forms; using iWareCC.RgvService; using iWareCC.SrmService; 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 iWareModel; using iWareModel.Entity.AGV; using iWareSql.DataAccess; using iWareSql.DBModel; using iWareSql.WmsDBModel; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Data; using System.Drawing; using System.Linq; using System.Linq.Expressions; using System.Net; using System.ServiceModel; using System.Threading; using System.Windows.Forms; using XiGang.Core.Model; using XiGang.Core.Model.ViewModels; using static iWareCC.ThreadService._04_BZ21_搬运整垛机器人_.DataProcess_BZ21; namespace iWareCC { public partial class FormCC : Form { /// /// 全局—是否可以运行执行出库模式 /// public static bool IsAllowRunOutMode = false; /// /// 当前下发出库任务的包号 /// public static string currHandlerPackageCodeForIssueOutboundTask = ""; /// /// 1号堆垛机入库口扫码强制验证通过 /// public static bool Srm1_IN_SMQZYZTG = false; /// /// 2号堆垛机入库口扫码强制验证通过 /// public static bool Srm2_IN_SMQZYZTG = false; /// /// 3号堆垛机入库口扫码强制验证通过 /// public static bool Srm3_IN_SMQZYZTG = false; /// /// 4号堆垛机入库口扫码强制验证通过 /// public static bool Srm4_IN_SMQZYZTG = false; AutoSizeFormClass asc_panel_DeviceTaskList = new AutoSizeFormClass(); AutoSizeFormClass asc_panel_DeviceTaskList_dgvPartTask_Finished = new AutoSizeFormClass(); AutoSizeFormClass asc_panel_dataGridView__OutTaskList = new AutoSizeFormClass(); AutoSizeFormClass asc_panel_WaitPlanDetail = new AutoSizeFormClass(); AutoSizeFormClass asc_panel_DeviceTaskList_dataGridView_RgvStore = new AutoSizeFormClass(); AutoSizeFormClass asc_panel_dg_OutTaskRetryToMes = new AutoSizeFormClass(); public static string current_rgv_stationName; /// /// 1012站点持续有货的持续计数,一旦没有货了,就重置为0 /// public static int RGV_1012_HasCategory_COUNT = 0; /// /// 1011站点持续有货的持续计数,一旦没有货了,就重置为0 /// public static int RGV_1011_HasCategory_COUNT = 0; /// /// 1020持续无货时间,一旦有货了,就重置为0 /// public static int RGV_1020_NoHasCategory_COUNT = 0; public static int RGV_1001_HasCategory_COUNT = 0; public static int RGV_1003_HasCategory_COUNT = 0; public static int RGV_1005_HasCategory_COUNT = 0; public static int RGV_1008_HasCategory_COUNT = 0; /// /// 是否模拟PLC /// public static bool IsSimulationPLC = ConfigHelper.GetConfigBool("IsSimulationPLC"); private string currentCheckModelText = ""; const int cycleDelay_Device = 1000;//各个线程的延迟毫秒数 const int cycleDelay_Task = 1000; Thread startModelTipsThread;//启动线程提示 private bool isStartModelTipsThread = false;//是否启动了线程提示 private Color default_btn_Start_Color = Color.FromArgb(0, 192, 0);//默认的开始模拟按钮颜色 private Color ss_btn_Start_Color1 = Color.FromArgb(255, 255, 192);//开始模拟按钮后闪烁的颜色1 private Color ss_btn_Start_Color2 = Color.FromArgb(192, 192, 255);//开始模拟按钮后闪烁的颜色1 #region 信息获取线程 Thread tskSetSrmLable;//各种堆垛机工作状态的显示的控制线程 //Thread tskGetSrmTransStationInfo;//获取立库输送机信息的线程 Thread tskGetSrmConveyorInfo;//获取立库输送线的任务完成等信息的线程 Thread tskSetSrmTransLable;//各种立库输送机工作状态的显示的控制线程 Thread tskGetRgv1Info;//获取RGV信息的线程 Thread tskSetRgvLable;//各种Rgv工作状态的显示的控制线程 #endregion #region 堆垛机变量 /// /// 堆垛机的枚举变量列表 /// public static List SrmDeviceList; /// /// 堆垛机的实时数据对象字典 /// key:EDevice的Int值, Value:SrmView /// public static IDictionary srmViewDict; #endregion public static RgvView rgvView;//Rgv实体类 public static RgvService.RgvServiceClient rgvServiceClient = null; public static StationView stationView;//站点实体类 public static StationServiceClient stationServiceClient = null; public FormCC() { InitializeComponent(); SrmDeviceList = BusinessHelper.GetSrmDeviceList(); //初始化数据 InitSrmDict(); //暂时注释 //tp_Thread.Parent = null;//隐藏标签[线程控制] CheckForIllegalCrossThreadCalls = false; //设置界面初始化的选项 //暂时注释 /* this.rBNormal.Checked = SystemValue.rBNormal_Checked = true; this.rBPrepare.Checked = SystemValue.rBPrepare_Checked = false; this.rBDebug.Checked = SystemValue.rBDebug_Checked = false; this.ckBRgv上料任务.Checked = SystemValue.ckBRgv上料任务 = true; this.ckBRgv提前配板任务.Checked = SystemValue.ckBRgv提前配板任务 = false; //*/ //暂时 默认就选中自动模式 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 = new Thread(ShowTipsWhenStartModel); 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(); tskSetSrmLable = new Thread(SrmRead_Label); tskSetSrmLable.Start(); #endregion #region 设置显示UI #endregion #region 服务线程启动 //堆垛机任务服务线程启动 //var srmService = DeviceThreadServiceFactory.GetHandle(EDeviceType.堆垛机); // srmService.StartService(); //RGV任务服务线程启动 //var rgvService = DeviceThreadServiceFactory.GetHandle(EDeviceType.RGV); // rgvService.StartService(); new Thread(DataProcess_RobotBuffer_ModeChange.Handler).Start(); new Thread(DataProcess_RobotBuffer_IssueOutboundTask.Handler).Start(); new Thread(DataProcess_RobotBuffer_AutoQiTaoOutbound.Handler).Start(); new Thread(DataProcess_RobotBuffer_FinishTaskForOutbound.Handler).Start(); new Thread(DataProcess_RobotBuffer_FinishTask.Handler).Start(); new Thread(DataProcess_BZ01.Handler).Start(); new Thread(DataProcess_269.Handler).Start(); 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_FinishTask.Handler).Start(); new Thread(DeleteData).Start(); //new Thread(PrintHandler.Handler).Start(); //*/ #endregion // new Thread(GetAgvVehicles).Start();//AGV车辆信息 // new Thread(OutTaskRetryToMes.Handler).Start(); //暂时不启用虚拟出入库功能 // new Thread(VirtualTaskNoOutPlanTaskHandler.Handler).Start(); } 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); trCancelBatchBackToStore.Start(); //*/ /* var tr_reverseSplitFinishProdOutStoreThread = new Thread(ReverseSplitFinishProdOutStoreThread); tr_reverseSplitFinishProdOutStoreThread.Start(); //*/ this.SetInitPlaceValue(); #region 对外发布WCF形式数据访问服务 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; } #endregion this.lbl_IsSimulationPLC.Text = "是否模拟PLC:" + (IsSimulationPLC ? "是" : "否"); if (IsSimulationPLC) { this.panel_Model.BackColor = Color.Tomato; } else {//正式模式 stationServiceClient = new StationServiceClient(); } this.lbl_IsSimulationPLC.BackColor = IsSimulationPLC ? Color.Red : Color.Green; //此处快速启动 调试模式,用于开发用 //btn_Start_Click(null, null); } /// /// 设置1/2号堆垛机的前端显示 /// private void SrmRead_Label() { while (true) { Thread.Sleep(1000); try { var showNowTime = "(" + DateTimeHelper.ConvertToStringForOnlyShowTime(DateTime.Now) + ")"; //设置堆垛机任务下发和任务确认线程消息 this.lbl_Alert_DataProcess_BZ39_IssueInboundTask.Text = showNowTime + SystemWarningMsg._lbl_Alert_DataProcess_BZ39_IssueInboundTask; 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_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_DataProcess_RobotBuffer_ModeChange; this.lbl_Alert_RgvReleaseFinish_BuChang.Text = showNowTime + SystemWarningMsg._lbl_Alert_RgvReleaseFinish_BuChang; this.lbl_Alert_DataProcess_BZ12_IssueTask.Text = showNowTime + SystemWarningMsg._lbl_Alert_DataProcess_BZ12_IssueTask; 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_RobotBuffer_ModeChange.Text = showNowTime + SystemWarningMsg._lbl_Alert_MainTaskDecompose_ZPRK; 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_DataProcess_RobotBuffer_AutoQiTaoOutbound.Text = showNowTime + SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_AutoQiTaoOutbound; this.lbl_alert_DataProcess_BZ39.Text = showNowTime + SystemWarningMsg._lbl_alert_DataProcess_BZ39; this.lbl_alert_DataProcess_BZ01.Text = showNowTime + SystemWarningMsg._lbl_alert_DataProcess_BZ01; this.lbl_alert_DataProcess_269.Text = showNowTime + SystemWarningMsg._lbl_alert_DataProcess_269; this.lbl_Alert_DataProcess_RobotBuffer_IssueOutboundTask.Text = showNowTime + SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_IssueOutboundTask; this.lbl_Alter_OutTaskRetryToMes.Text = showNowTime + SystemWarningMsg._lbl_Alert_OutTaskRetryToMes; //this.lblSrmPosX1.Text="111"; } catch (Exception ex) { continue; } } } #region 堆垛机线程和UI处理 /// /// 获取堆垛机的实时信息 /// 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 warningAddressList = new List(); 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.DataProcess_BZ39_IssueInboundTask, waringList[i].Code, waringList[i].Address, waringList[i].Context);//新增报警 warningAddressList.Add(waringList[i].Address); } } } DeviceWarningHandler.AutoCloseWarning(device, iWareCommon.Utils.LogType.DataProcess_BZ39_IssueInboundTask, warningAddressList);//自动关闭报警 } } catch (Exception ex) { Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.DataProcess_BZ39_IssueInboundTask, "获取" + device.ToString() + "的实时信息异常:" + ex.Message, ex); continue; } }; } /// /// 转换为SRM的实时状态 /// /// private void CastToDevice_SrmRealTime(SrmView view) { List realTimeList = new List(); 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(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.DataProcess_BZ39_IssueInboundTask); } /// /// 堆垛机的UI显示 /// /// 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); }); } } /// /// 堆垛机的UI显示 /// /// 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 proList = ClassHelper.GetPropertieModels(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; } } } /// /// 获取堆垛机的报警Label /// /// /// 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; } /// /// 获取堆垛机的Panel /// /// /// 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; } #endregion #region RGV线程和UI处理 /// /// 设置Rgv的UI显示 /// /// private void SetRgvLable(object obj) { while (true) { Thread.Sleep(cycleDelay_Device); try { //lbRgv_Y.Text = "当前行走位置: " + rgv.R_RgvPosition; //lbRgv_X.Text = "当前区域位置: " + rgv.R_RgvPosition; //ERgvState _ERgvState = (ERgvState)Enum.Parse(typeof(ERgvState), rgv.R_State.ToString()); //lbRgvWorkState.Text = "工作状态: " + _ERgvState.ToString(); //lbRgvTaskId.Text = "任务号: " + rgv.R_TaskNo; //lbRgvIsAuto.Text = "工作模式: " + (rgv.ModeName); //lbRgvAlert.Text = rgv.R_AlarmCode.ToString(); //if (rgv.R_Alarm == false) //{ // //检测是否有心跳 // using (var rgvService = new RgvService.RgvServiceClient()) // { // //检测是否有心跳 // var isRgvHandShare = RgvBLL.IsRgvHandShare(rgvService); // if (!isRgvHandShare) // { // lbRgvAlert.Text = "RGV没有心跳"; // } // } //} //else //{ // lbRgvAlert.Text = rgv.R_AlarmCode.ToString(); //} //// ERgvEvent _ERgvEvent = (ERgvEvent)Enum.Parse(typeof(ERgvEvent), rgv.r_ev.ToString()); ////lbRgvEvent.Text = "事 件:" + _ERgvEvent.ToString(); //lbRgvTaskFinish.Text = "任务完成:" + rgv.R_TaskFinish; } catch (Exception) { continue; } } } /// /// 获取RGV信息 /// /// 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 warningAddressList = new List(); 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; } /// /// 转换为RGV的实时状态 /// /// private void CastToDevice_RgvRealTime(RgvView rgvView) { List realTimeList = new List(); 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(item.R_Model).ToString(), State = item.R_State.ToString(), StateName = EnumberHelper.GetEnumName(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(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 #region 站点线程和UI处理 /// /// 设置站点的UI显示 /// /// private void SetStationLable(object obj) { while (true) { Thread.Sleep(cycleDelay_Device); try { //lbRgv_Y.Text = "当前行走位置: " + rgv.R_RgvPosition; //lbRgv_X.Text = "当前区域位置: " + rgv.R_RgvPosition; //ERgvState _ERgvState = (ERgvState)Enum.Parse(typeof(ERgvState), rgv.R_State.ToString()); //lbRgvWorkState.Text = "工作状态: " + _ERgvState.ToString(); //lbRgvTaskId.Text = "任务号: " + rgv.R_TaskNo; //lbRgvIsAuto.Text = "工作模式: " + (rgv.ModeName); //lbRgvAlert.Text = rgv.R_AlarmCode.ToString(); //if (rgv.R_Alarm == false) //{ // //检测是否有心跳 // using (var rgvService = new RgvService.RgvServiceClient()) // { // //检测是否有心跳 // var isRgvHandShare = RgvBLL.IsRgvHandShare(rgvService); // if (!isRgvHandShare) // { // lbRgvAlert.Text = "RGV没有心跳"; // } // } //} //else //{ // lbRgvAlert.Text = rgv.R_AlarmCode.ToString(); //} //// ERgvEvent _ERgvEvent = (ERgvEvent)Enum.Parse(typeof(ERgvEvent), rgv.r_ev.ToString()); ////lbRgvEvent.Text = "事 件:" + _ERgvEvent.ToString(); //lbRgvTaskFinish.Text = "任务完成:" + rgv.R_TaskFinish; } catch (Exception) { continue; } } } /// /// 获取Station信息 /// /// private void GetStationInfo(object obj) { while (true) { Thread.Sleep(1000);//1秒钟读取一次 try { if (stationServiceClient == null) { continue; } stationView = stationServiceClient.GetStationInfo((int)EDevice.Station); _CommmonShowAgvStation(); ////显示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 warningAddressList = new List(); 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.RgvThreadService, 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.RgvThreadService, warningAddressList);//自动关闭报警 //*/ } catch (Exception ex) { rgvView = null; Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.StationThreadService, "获取站点信息出现异常:" + ex.Message, ex); continue; } } } #endregion #region 其他线程 #region 定时删除数据 /// /// 定时删除数据 /// public void DeleteData() { while (true) { try { 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_MES_BTJReceiveReq(30); ClearDataHandler.Delete_MES_OnLineReq(30); LogTextHelper.BatchDeleteLog(); Thread.Sleep(8 * 60 * 60 * 1000);//每天8小时一次 } else { Thread.Sleep(6 * 1000); } } catch (Exception ex) { SystemWarningMsg._lbl_Alert_DeleteData = "出现异常:" + ex.Message; Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.CCWCFService, "定时删除数据 出现异常", ex); } finally { } } } #endregion #endregion #region 私有方法 /// /// 计算 某个站点的有货 值 /// 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; } /// /// 计算 RGV_1012_HasCategory_COUNT值 /// 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; } /// /// 计算 RGV_1011_HasCategory_COUNT值 /// 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; } /// /// 计算 RGV_1020_NoHasCategory_COUNT值 /// 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; } /// /// 初始化实时堆垛机的字典 /// private static void InitSrmDict() { srmViewDict = new Dictionary(); SrmDeviceList.ForEach(singeDevice => { srmViewDict.Add((int)singeDevice, new SrmView()); }); } 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 公共 /// /// 公共堆垛机急停命令 /// private void CommonSrmEStop(EDevice _EDevice) { try { using (var opcClinet = new SrmService.SrmServiceClient()) { var result = opcClinet.SendEStop((int)_EDevice); Log4NetHelper.WriteInfoLog(iWareCommon.Utils.LogType.DataProcess_BZ39_IssueInboundTask, "字符串:" + JsonConvert.SerializeObject(result)); if (result.result) { WZ.Useful.Commons.MessageUtil.ShowTips("发送" + _EDevice.ToString() + "急停指令成功"); } else { WZ.Useful.Commons.MessageUtil.ShowTips("发送" + _EDevice.ToString() + "急停指令失败:" + result.resMsg); } } } catch (Exception ex) { WZ.Useful.Commons.MessageUtil.ShowError("发送" + _EDevice.ToString() + "急停指令异常:" + ex.Message); } } /// /// 公共发送堆垛机命令(搬运/移动) /// /// /// /// /// /// 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//如果点击“取消”按钮 { } } /// /// 堆垛机任务确认 /// /// /// private void CommonSrmConfirm(EDevice device, TextBox tbTaskId) { try { if (SystemValue.isStartedModel) { WZ.Useful.Commons.MessageUtil.ShowError("手动堆垛机任务确认,需要将模式关闭!"); return; } iWareCC.SrmService.SdaResEntity sdaResult = new SrmService.SrmServiceClient().ConfirmTaskFinish ((int)device, int.Parse(tbTaskId.Text.Trim())); if (sdaResult.result) { //tbSrm1TaskId.Clear(); Log4NetHelper.WriteInfoLog(iWareCommon.Utils.LogType.CCWCFService, "手动堆垛机任务确认成功,任务号:" + tbTaskId); } else { WZ.Useful.Commons.MessageUtil.ShowError("手动堆垛机任务确认失败:" + sdaResult.resMsg + "!"); Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.CCWCFService, "手动堆垛机任务确认失败:" + sdaResult.resMsg + "!,任务号:" + tbTaskId, null); } } catch (Exception ex) { WZ.Useful.Commons.MessageUtil.ShowError("手动堆垛机任务确认异常:" + ex.Message); Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.CCWCFService, "手动堆垛机任务确认异常:" + ex.Message, ex); } } private void CommonDeleteSrmTask(EDevice device) { if (SystemValue.isStartedModel) { WZ.Useful.Commons.MessageUtil.ShowError("手动删除堆垛机任务,需要将模式关闭!"); return; } MessageBoxButtons messButton = MessageBoxButtons.OKCancel; DialogResult dr = MessageBox.Show("确定要删除" + device.ToString() + "任务吗?", "确认", messButton); if (dr == DialogResult.OK)//如果点击“确定”按钮 { using (var opcClinet = new SrmService.SrmServiceClient()) { opcClinet.SendSrmDelete((int)device); } } else//如果点击“取消”按钮 { } } #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.二号堆垛机); } /// /// 校验输入的库位ID是否符合格式 /// /// 库位号 /// 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) { SetModelCheckBoxToSystemValue(); } private void rBDebug_CheckedChanged(object sender, EventArgs e) { SetModelCheckBoxToSystemValue(); } /// /// 根据选择的模式配置不同的值 /// private void SetModelCheckBoxToSystemValue() { 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 = "当前模式: "; if (SystemValue.rBNormal_Checked) {//选中了 自动模式 currentCheckModelText = "自动模式"; this.lbl_ModelText.Text = title + currentCheckModelText; this.gBoxThread.Enabled = false; SetAllCheckBoxChecked(true); } else if (SystemValue.rbHand_Checked) { currentCheckModelText = "手动模式"; this.lbl_ModelText.Text = title + currentCheckModelText; this.gBoxThread.Enabled = false; SetAllCheckBoxChecked(false); } else if (SystemValue.rBDebug_Checked) { currentCheckModelText = "调试模式"; this.lbl_ModelText.Text = title + currentCheckModelText; SetAllCheckBoxChecked(false); this.gBoxThread.Enabled = true; } else if (SystemValue.rBOnlyIn_Checked) { currentCheckModelText = "入库模式"; this.lbl_ModelText.Text = title + currentCheckModelText; SetAllCheckBoxChecked(true); //将特殊的取消 this.ck_DataProcess_BZ12_IssueTask.Checked = false; this.ckMainTaskDecompose.Checked = false; this.gBoxThread.Enabled = true; } else { currentCheckModelText = "无效模式"; } } /// /// 遍历所有的Checkbox,并配置是否被选中 /// /// private void SetAllCheckBoxChecked(bool _checked) { var contorls = this.groupBox1.Controls; foreach (var control in contorls) { if (control is CheckBox) { CheckBox c = (CheckBox)control; c.Checked = _checked; } } } /// /// 通用的checkbox改变事件 /// /// /// private void CommonCheckedChanged(object sender, EventArgs e) { //堆垛机1任务下发 DoCommonCheckedChanged(ref SystemValue.isAllowRuning_SrmTaskThreadService_1, ckB_DataProcess_BZ39_IssueInboundTask); DoCommonCheckedChanged(ref SystemValue.isAllowRuning_SrmTaskThreadService_1_Finish, ckBSrm1FinishedHandle); //堆垛机2任务下发 DoCommonCheckedChanged(ref SystemValue.isAllowRuning_SrmTaskThreadService_2, ckBSrm2Release); DoCommonCheckedChanged(ref SystemValue.isAllowRuning_SrmTaskThreadService_2_Finish, ckBSrm2FinishedHandle); //堆垛机3任务下发 DoCommonCheckedChanged(ref SystemValue.isAllowRuning_SrmTaskThreadService_3, ckBSrm3Release); DoCommonCheckedChanged(ref SystemValue.isAllowRuning_SrmTaskThreadService_3_Finish, ckBSrm3FinishedHandle); //堆垛机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, 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_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_DataProcess_RobotBuffer_AutoQiTaoOutbound, ckDataProcess_RobotBuffer_AutoQiTaoOutbound); DoCommonCheckedChanged(ref SystemValue.isAllowRuning_DataProcess_BZ39, ck_DataProcess_BZ39); DoCommonCheckedChanged(ref SystemValue.isAllowRuning_DataProcess_BZ01, ck_AutoIssueInStoreTask); DoCommonCheckedChanged(ref SystemValue.isAllowRuning_DataProcess_269, ck_DataProcess_269); DoCommonCheckedChanged(ref SystemValue.isAllowRuning_DataProcess_RobotBuffer_IssueOutboundTask, ck_DataProcess_RobotBuffer_IssueOutboundTask); DoCommonCheckedChanged(ref SystemValue.isAllowRuning_OutTaskRetryToMes, checkBox_OutTaskRetryToMes); } private void DoCommonCheckedChanged(ref bool isAllowValue, CheckBox cb) { isAllowValue = cb.Checked ? true : false; } 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); } /// /// 停止 /// /// /// private void btn_End_Click(object sender, EventArgs e) { //首先确认下,是不是选择的是 自动模式或者是 提前配板模式 //注意:这里增加模式时,要处理的 !!!! if (!(SystemValue.rBNormal_Checked || SystemValue.rbHand_Checked || SystemValue.rBDebug_Checked || SystemValue.rBOnlyIn_Checked )) { WZ.Useful.Commons.MessageUtil.ShowError("当前没有选择模式,停止动作无效!"); return; } if (isStartModelTipsThread == false) { WZ.Useful.Commons.MessageUtil.ShowError("当前没有模式在运行,停止动作无效!"); return; } MessageBoxButtons messButton = MessageBoxButtons.OKCancel; DialogResult dr = MessageBox.Show("确定要停止【" + currentCheckModelText + "】模式吗?", "停止模式", messButton); if (dr == DialogResult.OK)//如果点击“确定”按钮 { var doResult = CommonStopService(); if (!doResult) { return; } this.btn_Start.Text = "启动模式"; this.btn_Start.Enabled = true; SystemValue.isStartedModel = false; //启用选择模式的checkbox SetEnableForModelRadioButton(true); //this.rBNormal.Enabled = true; //this.rBClose.Enabled = true; //this.rBDebug.Enabled = true; //this.rBPrepare.Enabled = true; //this.rBPersonRaw.Enabled = true; //this.rBInOutStore.Enabled = true; //this.rBCancelBatchBackToStore.Enabled = true; //不需要重新关闭checkbox //SetAllCheckBoxChecked(false); isStartModelTipsThread = false; this.btn_Start.BackColor = default_btn_Start_Color;//还原颜色 } else//如果点击“取消”按钮 { } } /// /// 控制模式中的RadioButton禁启用 /// /// private void SetEnableForModelRadioButton(bool enabled) { var ctls = this.panel_Model.Controls; foreach (var item in ctls) { if (item is RadioButton) { RadioButton rb = (RadioButton)item; rb.Enabled = enabled; } } } /// /// 启动 /// /// /// private void btn_Start_Click(object sender, EventArgs e) { //首先确认下,是不是选择的是 自动模式或者是 提前配板模式 if (!(SystemValue.rBNormal_Checked || SystemValue.rbHand_Checked || SystemValue.rBDebug_Checked || SystemValue.rBOnlyIn_Checked )) { WZ.Useful.Commons.MessageUtil.ShowError("请选择其中一个模式!"); return; } MessageBoxButtons messButton = MessageBoxButtons.OKCancel; DialogResult dr = MessageBox.Show("确定要启动【" + currentCheckModelText + "】模式吗?", "启动模式", messButton); if (dr == DialogResult.OK)//如果点击“确定”按钮 { using (WmsDBModel edm = new WmsDBModel()) { var ccSystem = BasicDataSetHandler.GetCCSystem(edm); if (ccSystem == null) { WZ.Useful.Commons.MessageUtil.ShowError("请联系管理员维护系统调度相关的数据!"); return; }; //判断是否是自己开启的软件 if (!string.IsNullOrEmpty(ccSystem.Machine) && ccSystem.Machine != Dns.GetHostName()) {//默认的空值 WZ.Useful.Commons.MessageUtil.ShowError(string.Format("调度系统已经在其他地方启动配板模式,机器名:{0},启动时间:{1}!" , ccSystem.Machine, DateTimeHelper.ConvertToString(ccSystem.OnLineTime))); return; } ccSystem.BasicDataValue = SystemValue.SystemStartGuid = Guid.NewGuid().ToString(); ccSystem.OnLineTime = DateTime.Now; ccSystem.Machine = Dns.GetHostName(); int i = edm.SaveChanges(); if (i <= 0) { WZ.Useful.Commons.MessageUtil.ShowError("保存系统调度相关的数据失败!"); return; } } this.btn_Start.Text = "【" + currentCheckModelText + "】模式运行中..."; this.btn_Start.Enabled = false; this.btn_End.Enabled = true; SystemValue.isStartedModel = true; //禁用选择模式的checkbox SetEnableForModelRadioButton(false); //this.rBNormal.Enabled = false; //this.rBClose.Enabled = false; //this.rBDebug.Enabled = false; //this.rBPersonRaw.Enabled = false; //this.rBPrepare.Enabled = false; //this.rBInOutStore.Enabled = false; isStartModelTipsThread = true; } else//如果点击“取消”按钮 { } } /// /// 公共停止服务的处理 /// /// private bool CommonStopService() { using (WmsDBModel edm = new WmsDBModel()) { var ccSystem = BasicDataSetHandler.GetCCSystem(edm); if (ccSystem == null) { WZ.Useful.Commons.MessageUtil.ShowError("请联系管理员维护系统调度相关的数据!"); return false; }; //判断是否是自己开启的软件模式 if (SystemValue.SystemStartGuid == ccSystem.BasicDataValue) { ccSystem.BasicDataValue = "000000";//默认的空值 ccSystem.OnLineTime = null; ccSystem.Machine = string.Empty; ccSystem.LastMachine = Dns.GetHostName(); ccSystem.LastUnLineTime = DateTime.Now; ccSystem.UpdateTime = DateTime.Now; int i = edm.SaveChanges(); if (i <= 0) { WZ.Useful.Commons.MessageUtil.ShowError("保存系统调度相关的数据失败!"); return false; } } } return true; } private void FormCC_FormClosing(object sender, FormClosingEventArgs e) { MessageBoxButtons messButton = MessageBoxButtons.OKCancel; DialogResult dr = MessageBox.Show("确定要退出吗?", "确认", messButton); if (dr == DialogResult.OK)//如果点击“确定”按钮 { try { var doResult = CommonStopService(); if (!doResult) { e.Cancel = true; return; } e.Cancel = false; } catch (Exception ex) { WZ.Useful.Commons.MessageUtil.ShowError("出现错误!" + ex.Message); e.Cancel = true; } } else//如果点击“取消”按钮 { e.Cancel = true; } } private void FormCC_FormClosed(object sender, FormClosedEventArgs e) { try { Dispose(); } catch (Exception) { } Environment.Exit(0); } /// /// 模式启动后,按钮闪烁 /// /// private void ShowTipsWhenStartModel(object obj) { while (true) { Thread.Sleep(1000); if (isStartModelTipsThread) { try { this.btn_Start.BackColor = ss_btn_Start_Color2; Thread.Sleep(1000); this.btn_Start.BackColor = ss_btn_Start_Color1; } catch (Exception) { continue; } } else { if (this.btn_Start.BackColor != default_btn_Start_Color) { this.btn_Start.BackColor = default_btn_Start_Color;//还原颜色 } } this.lbl_RobotMode.Text = "缓存岛机器人模式:" + (IsAllowRunOutMode ? "出库模式" : "入库模式"); this.lbl_currHandlerPackageCodeForIssueOutboundTask.Text = "当前下发出库任务的包号:" + currHandlerPackageCodeForIssueOutboundTask; } } private void panel27_Paint(object sender, PaintEventArgs e) { } /// /// 起始位和目标位互换 /// /// /// 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 btn_Change2_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; } 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()) { opcClinet.ReleaseAlert((int)EDevice.四号堆垛机); } } 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()) { 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; } else { stationName = BusinessHelper.ConvertStationCodeForRGV(btn.Text).ToString(); } current_rgv_stationName = stationName; _CommmonShowAgvStation(); } private void _CommmonShowAgvStation() { if (string.IsNullOrEmpty(current_rgv_stationName)) { 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 = "写入目标地址:" + ""; } 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(r_station.R_Model); this.lbl_State.Text = "运行状态:" + EnumberHelper.GetEnumName(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(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; } } private void btn_1001_Click(object sender, EventArgs e) { CommmonShowAgvStation(sender); } 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)) { MessageBox.Show("请选择站点号"); return; } using (RgvService.RgvServiceClient client = new RgvServiceClient()) { var result = client.WriteStp((int)EDevice.RGV, false, stationName); if (result.result == false) { 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 partList = new List(); 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(); } else { List mainIdList = new List(); 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("手动取消任务,需要将模式关闭!"); 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); 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; //同时将目标点和起点解除锁定 //我想了想,还是别解锁了,万一有别的问题呢? //保存人工处理日志 [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 btnReset_Click_1(object sender, EventArgs e) { //任务重发 try { 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("请先选中要执行的行!"); } } } catch (Exception ex) { MessageBox.Show("任务重发出现异常:" + ex.Message); } } /// /// 关闭1015重新扫描 /// /// /// private void button3_Click(object sender, EventArgs e) { using (var opcClinet = new RgvService.RgvServiceClient()) { 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); } } } /// /// 关闭1019重新扫描 /// /// /// private void button21_Click(object sender, EventArgs e) { using (var opcClinet = new RgvService.RgvServiceClient()) { 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); } } } 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 partList = new List(); 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 firstNoFinishedTaskList = new List(); if (!string.IsNullOrEmpty(query_plc_taskNo) || !string.IsNullOrEmpty(query_Salver)) { Expression> predicate_plc_taskno = a => 1 == 1; Expression> 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(); } else { List mainIdList = new List(); 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 mainList = new List(); 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 mainList = new List(); 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 mainList = new List(); 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 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 retModel = JsonConvert.DeserializeObject>(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 retModel = JsonConvert.DeserializeObject>(ret); this.tb_TongJi.Text = "WMS返回:" + ret + "\r\n" + "转换后:" + "\r\n" + JsonConvert.SerializeObject(retModel); } private void lbl_Alert_Place1014ClearStoreTask_Click(object sender, EventArgs e) { } private void button24_Click(object sender, EventArgs e) { //强制该包号出库 var packageCode = this.tb_PackageCode.Text.Trim(); var alertMsg = ""; DataProcess_RobotBuffer_ForceOutbound.Handler(packageCode, ref alertMsg); if (!string.IsNullOrEmpty(alertMsg)) { MessageBox.Show("错误:" + alertMsg); } else { MessageBox.Show("已处理"); } } } }