using iWareCC.Common.Helper;
|
using iWareCC.DeviceThreadFactory;
|
using iWareCC.Forms;
|
using iWareCC.RgvService;
|
using iWareCC.SrmService;
|
using iWareCC.StationService;
|
using iWareCC.ThreadService;
|
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;
|
|
namespace iWareCC
|
{
|
public partial class FormCC : Form
|
{
|
|
/// <summary>
|
/// 全局—是否可以运行执行出库模式
|
/// </summary>
|
public static bool IsAllowRunOutMode = false;
|
|
/// <summary>
|
/// 1号堆垛机入库口扫码强制验证通过
|
/// </summary>
|
public static bool Srm1_IN_SMQZYZTG = false;
|
/// <summary>
|
/// 2号堆垛机入库口扫码强制验证通过
|
/// </summary>
|
public static bool Srm2_IN_SMQZYZTG = false;
|
/// <summary>
|
/// 3号堆垛机入库口扫码强制验证通过
|
/// </summary>
|
public static bool Srm3_IN_SMQZYZTG = false;
|
/// <summary>
|
/// 4号堆垛机入库口扫码强制验证通过
|
/// </summary>
|
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;
|
/// <summary>
|
/// 1012站点持续有货的持续计数,一旦没有货了,就重置为0
|
/// </summary>
|
public static int RGV_1012_HasCategory_COUNT = 0;
|
|
/// <summary>
|
/// 1011站点持续有货的持续计数,一旦没有货了,就重置为0
|
/// </summary>
|
public static int RGV_1011_HasCategory_COUNT = 0;
|
|
/// <summary>
|
/// 1020持续无货时间,一旦有货了,就重置为0
|
/// </summary>
|
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;
|
|
/// <summary>
|
/// 是否模拟PLC
|
/// </summary>
|
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 堆垛机变量
|
/// <summary>
|
/// 堆垛机的枚举变量列表
|
/// </summary>
|
public static List<EDevice> SrmDeviceList;
|
/// <summary>
|
/// 堆垛机的实时数据对象字典
|
/// key:EDevice的Int值, Value:SrmView
|
/// </summary>
|
public static IDictionary<int, SrmView> 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();
|
|
#endregion
|
|
#region 设置显示UI
|
tskSetSrmLable = new Thread(SrmRead_Label);
|
tskSetSrmLable.Start();
|
tskSetRgvLable = new Thread(SetRgvLable);
|
tskSetRgvLable.Start();
|
#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(DeleteData).Start();
|
|
new Thread(LineInSacnResult.HandlerLineInSacnResult).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);
|
}
|
|
|
|
#region 堆垛机线程和UI处理
|
|
/// <summary>
|
/// 设置1/2号堆垛机的前端显示
|
/// </summary>
|
private void SrmRead_Label()
|
{
|
while (true)
|
{
|
Thread.Sleep(1000);
|
try
|
{
|
|
var showNowTime = "(" + DateTimeHelper.ConvertToStringForOnlyShowTime(DateTime.Now) + ")";
|
//设置堆垛机任务下发和任务确认线程消息
|
this.lbl_Alter_Srm1Release.Text = showNowTime + SystemWarningMsg._lbl_Alert_Srm1Release;
|
this.lbl_Alert_Srm2Release.Text = showNowTime + SystemWarningMsg._lbl_Alert_Srm2Release;
|
this.lbl_Alert_Srm3Release.Text = showNowTime + SystemWarningMsg._lbl_Alert_Srm3Release;
|
this.lbl_Alert_Srm4Release.Text = showNowTime + SystemWarningMsg._lbl_Alert_Srm4Release;
|
//设置堆垛机任务下发和任务完成确认线程消息
|
this.lbl_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_HandlerIssuingTask.Text = showNowTime + SystemWarningMsg._lbl_Alert_HandlerIssuingTask;
|
|
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)
|
{
|
Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.SrmTheadService, "方法SrmRead_Label出现异常:" + ex.Message, ex);
|
continue;
|
}
|
}
|
}
|
|
/// <summary>
|
/// 获取堆垛机的实时信息
|
/// </summary>
|
private void GetSrmInfo(object int_device)
|
{
|
while (true)
|
{
|
EDevice device = (EDevice)Enum.Parse(typeof(EDevice), int_device.ToString());
|
Thread.Sleep(cycleDelay_Device);
|
try
|
{
|
using (var opcClinet = new SrmService.SrmServiceClient())
|
{
|
srmViewDict[(int)device] = opcClinet.GetSrmInfo((int)device);
|
CastToDevice_SrmRealTime(srmViewDict[(int)device]);
|
List<String> warningAddressList = new List<string>();
|
if (srmViewDict[(int)device].R_WarningDBList != null && srmViewDict[(int)device].R_WarningDBList.Length > 0)
|
{
|
var waringList = srmViewDict[(int)device].R_WarningDBList.ToList();
|
if (waringList != null && waringList.Count > 0)
|
{
|
for (int i = 0; i < waringList.Count; i++)
|
{
|
DeviceWarningHandler.SaveWarning(device, iWareCommon.Utils.LogType.SrmTheadService,
|
waringList[i].Code, waringList[i].Address, waringList[i].Context);//新增报警
|
warningAddressList.Add(waringList[i].Address);
|
}
|
}
|
}
|
DeviceWarningHandler.AutoCloseWarning(device, iWareCommon.Utils.LogType.SrmTheadService, warningAddressList);//自动关闭报警
|
}
|
}
|
catch (Exception ex)
|
{
|
Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.SrmTheadService, "获取" + device.ToString() + "的实时信息异常:" + ex.Message, ex);
|
continue;
|
}
|
};
|
}
|
|
/// <summary>
|
/// 转换为SRM的实时状态
|
/// </summary>
|
/// <param name="view"></param>
|
private void CastToDevice_SrmRealTime(SrmView view)
|
{
|
List<Device_SrmRealTime> realTimeList = new List<Device_SrmRealTime>();
|
Device_SrmRealTime obj = new Device_SrmRealTime();
|
EDevice device = (EDevice)Enum.Parse(typeof(EDevice), view.R_SrmNo.ToString());
|
obj = new Device_SrmRealTime()
|
{
|
SrmCode = view.R_SrmNo.ToString(),
|
SrmName = device.ToString(),
|
Mode = view.R_Mode.ToString(),
|
ModeName = view.ModeName,
|
State = view.R_State.ToString(),
|
StateName = view.StateName,
|
|
TaskID = view.R_TaskNo.ToString(),
|
LiftFull = view.R_LiftFull == 1,
|
PosX = view.R_PosX,
|
PosY = view.R_PosY,
|
PosZ = view.R_PosZ,
|
PosZName = EnumberHelper.GetEnumName<ESrmForkPosition>(view.R_PosZ).ToString(),
|
// XCoordinate=view.r_xc
|
|
SrmToPlace = view.SrmToPlace,
|
SrmSourcePlace = view.SrmSourcePlace,
|
ZCoordinate = view.R_PosZmm.ToString(),
|
XCoordinate = view.R_PosXmm.ToString(),
|
YCoordinate = view.R_PosYmm.ToString()
|
|
};
|
realTimeList.Add(obj);
|
|
DeviceSrmRealTimeHandler.Update(realTimeList, iWareCommon.Utils.LogType.SrmTheadService);
|
|
}
|
|
|
/// <summary>
|
/// 堆垛机的UI显示
|
/// </summary>
|
/// <param name="device"></param>
|
private void SetSrmUI()
|
{
|
if (FormCC.IsSimulationPLC == false)
|
{
|
SrmDeviceList.ForEach(x =>
|
{
|
ParameterizedThreadStart parStart = new ParameterizedThreadStart(SingleSetSrmUI);
|
Thread thread = new Thread(parStart);
|
object o = (int)x;
|
thread.Start(o);
|
});
|
}
|
}
|
|
/// <summary>
|
/// 堆垛机的UI显示
|
/// </summary>
|
/// <param name="device"></param>
|
private void SingleSetSrmUI(object int_device)
|
{
|
while (true)
|
{
|
try
|
{
|
EDevice device = (EDevice)Enum.Parse(typeof(EDevice), int_device.ToString());
|
SrmView srmInfo = srmViewDict[(int)device];
|
var panel = GetSrmPanel(device);
|
List<PropertieModel> proList = ClassHelper.GetPropertieModels<SrmView>(srmInfo);
|
foreach (var item in DeviceDict.LabelSrmDict)
|
{
|
//var lbl = ControlHelper.GetLabel(this, panel, item.Key + (int)device);
|
Object obj = ControlHelper.GetControlInstance(panel, item.Key + (int)device);
|
if (obj != null)
|
{
|
Label lbl = (Label)obj;
|
lbl.Text = item.Value.LablePreStr + proList.Find(x => x.PropertyName == item.Value.LableProName).DataValue;
|
}
|
}
|
//特殊处理- 报警
|
var lbSrmAlarm = GetSrmAlarmLabel(device);
|
if (srmInfo.R_Alarm != 1)
|
{
|
lbSrmAlarm.Text = string.Empty;
|
lbSrmAlarm.ForeColor = Color.SkyBlue;
|
lbSrmAlarm.BackColor = Color.Transparent;
|
lbSrmAlarm.ForeColor = Color.Maroon;
|
lbSrmAlarm.BackColor = Color.WhiteSmoke;
|
}
|
else
|
{ //处于报警状态下
|
if (srmInfo.R_WarningDBList != null && srmInfo.R_WarningDBList.Length > 0)
|
{
|
lbSrmAlarm.Text = String.Join(",", srmInfo.R_WarningDBList.Select(x => x.Context).ToArray());
|
}
|
|
lbSrmAlarm.ForeColor = Color.White;
|
lbSrmAlarm.BackColor = Color.Red;
|
lbSrmAlarm.ForeColor = Color.White;
|
lbSrmAlarm.BackColor = Color.Red;
|
}
|
//注释
|
/*
|
if (lbSrmAlarm.Text == string.Empty)
|
{
|
using (var opcClinet = new SrmService.SrmServiceClient())
|
{
|
var isHandShare = SrmBLL.IsHandShare(opcClinet, device);
|
if (!isHandShare)
|
{
|
lbSrmAlarm.Text = (int)device + "号堆垛机没有心跳";
|
}
|
}
|
}
|
//*/
|
}
|
catch (Exception)
|
{
|
throw;
|
}
|
}
|
}
|
|
/// <summary>
|
/// 获取堆垛机的报警Label
|
/// </summary>
|
/// <param name="device"></param>
|
/// <returns></returns>
|
private Label GetSrmAlarmLabel(EDevice device)
|
{
|
switch (device)
|
{
|
case EDevice.一号堆垛机:
|
return this.lblSrmAlarm1;
|
case EDevice.二号堆垛机:
|
return this.lblSrmAlarm2;
|
case EDevice.三号堆垛机:
|
return this.lblSrmAlarm3;
|
case EDevice.四号堆垛机:
|
return this.lblSrmAlarm4;
|
}
|
return null;
|
}
|
|
|
/// <summary>
|
/// 获取堆垛机的Panel
|
/// </summary>
|
/// <param name="device"></param>
|
/// <returns></returns>
|
private Panel GetSrmPanel(EDevice device)
|
{
|
switch (device)
|
{
|
case EDevice.一号堆垛机:
|
return this.panel_Srm1;
|
case EDevice.二号堆垛机:
|
return this.panel_Srm2;
|
case EDevice.三号堆垛机:
|
return this.panel_Srm3;
|
case EDevice.四号堆垛机:
|
return this.panel_Srm4;
|
}
|
return null;
|
}
|
|
|
|
#endregion
|
|
#region RGV线程和UI处理
|
|
/// <summary>
|
/// 设置Rgv的UI显示
|
/// </summary>
|
/// <param name="obj"></param>
|
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;
|
}
|
}
|
}
|
|
/// <summary>
|
/// 获取RGV信息
|
/// </summary>
|
/// <param name="obj"></param>
|
private void GetRgvInfo(object obj)
|
{
|
while (true)
|
{
|
Thread.Sleep(1000);//1秒钟读取一次
|
try
|
{
|
if (rgvServiceClient == null)
|
{
|
continue;
|
}
|
rgvView = rgvServiceClient.GetRgvInfo((int)EDevice.RGV);
|
CalcRGV_1012_HasCategory_COUNT();
|
CalcRGV_1011_HasCategory_COUNT();
|
CalcRGV_1020_NoHasCategory_COUNT();
|
|
CalcRGV_HasCategory_COUNT(EDevice.堆垛机1出库口1001, ref RGV_1001_HasCategory_COUNT, lbl_RGV_1001_HasCategory_COUNT);
|
CalcRGV_HasCategory_COUNT(EDevice.堆垛机2出库口1003, ref RGV_1003_HasCategory_COUNT, lbl_RGV_1003_HasCategory_COUNT);
|
CalcRGV_HasCategory_COUNT(EDevice.堆垛机3出库口1005, ref RGV_1005_HasCategory_COUNT, lbl_RGV_1005_HasCategory_COUNT);
|
CalcRGV_HasCategory_COUNT(EDevice.堆垛机4出库口1008, ref RGV_1008_HasCategory_COUNT, lbl_RGV_1008_HasCategory_COUNT);
|
|
_CommmonShowAgvStation();
|
CastToDevice_RgvRealTime(rgvView);
|
|
SetScanText();
|
Set1009_HighText();
|
//显示RGV任务完成和完成确认信号
|
this.lbl_R_RGV_Finish.Text = "RGV任务完成:" + rgvView.R_RGV_Finish;
|
this.lbl_W_RGV_FinishACK.Text = "RGV任务完成确认:" + rgvView.W_RGV_FinishACK;
|
|
this.lbl_RgvCoordinate.Text = "RGV实时坐标:" + rgvView.R_RGV_Coordinate;
|
|
//解析RGV对象
|
foreach (var item in rgvView.R_RgvForReadCommList)
|
{
|
var control = ControlHelper.GetControlInstance(this.tPTransAsrs, "btn_" + item.StationCode);
|
if (item.R_AlarmCode > 0)
|
{//有报警
|
if (control != null)
|
{
|
var btn = control as Button;
|
btn.BackColor = Color.Red;
|
}
|
}
|
else
|
{
|
if (control != null)
|
{
|
var btn = control as Button;
|
if (item.StationCode == ((int)EDevice.RGV1040).ToString())
|
{
|
btn.BackColor = Color.Gold;
|
}
|
else if (item.StationCode == ((int)EDevice.拆盘机1020).ToString())
|
{
|
btn.BackColor = Color.DodgerBlue;
|
}
|
else if (item.StationCode == ((int)EDevice.提升机1030).ToString())
|
{
|
btn.BackColor = Color.SteelBlue;
|
}
|
else
|
{
|
btn.BackColor = Color.SeaGreen;
|
}
|
}
|
}
|
}
|
|
//显示RGV报警信息
|
List<String> warningAddressList = new List<string>();
|
if (rgvView.R_Rgv_WarningDBList != null && rgvView.R_Rgv_WarningDBList.Length > 0)
|
{
|
tb_Rgv_Alter.Text = String.Join(",", rgvView.R_Rgv_WarningDBList.Select(x => x.Contextk__BackingField).ToArray());
|
//保存报警
|
var waringList = rgvView.R_Rgv_WarningDBList.ToList();
|
if (waringList != null && waringList.Count > 0)
|
{
|
for (int i = 0; i < waringList.Count; i++)
|
{
|
DeviceWarningHandler.SaveWarning(EDevice.RGV, iWareCommon.Utils.LogType.StationThreadService,
|
waringList[i].Codek__BackingField, waringList[i].Addressk__BackingField, waringList[i].Contextk__BackingField);//新增报警
|
warningAddressList.Add(waringList[i].Addressk__BackingField);
|
}
|
}
|
}
|
else
|
{
|
tb_Rgv_Alter.Text = "";
|
}
|
DeviceWarningHandler.AutoCloseWarning(EDevice.RGV, iWareCommon.Utils.LogType.StationThreadService, warningAddressList);//自动关闭报警
|
}
|
catch (Exception ex)
|
{
|
rgvView = null;
|
Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.StationThreadService, "获取RGV信息出现异常:" + ex.Message, ex);
|
continue;
|
}
|
}
|
}
|
|
private void SetScanText()
|
{
|
this.lbl_R_1015_Scan.Text = "1015扫码值:" + rgvView.R_1015_Scan;
|
this.lbl_R_1019_Scan.Text = "1019扫码值:" + rgvView.R_1019_Scan;
|
this.lblR_1019_CargoNoScan.Text = "1019发动机扫码:" + rgvView.R_1019_CargoNoScan;
|
this.lbl_R_1002_Scan.Text = "1002扫码值:" + rgvView.R_1002_Scan;
|
this.lbl_R_1004_Scan.Text = "1004扫码值:" + rgvView.R_1004_Scan;
|
this.lbl_R_1006_Scan.Text = "1006扫码值:" + rgvView.R_1006_Scan;
|
this.lbl_R_1007_Scan.Text = "1007扫码值:" + rgvView.R_1007_Scan;
|
|
this.lbl_W_1002_ScanFailACK.Text = "1002扫描验证:" + rgvView.W_1002_ScanFailACK;
|
this.lbl_W_1004_ScanFailACK.Text = "1004扫描验证:" + rgvView.W_1004_ScanFailACK;
|
this.lbl_W_1006_ScanFailACK.Text = "1006扫描验证:" + rgvView.W_1006_ScanFailACK;
|
this.lbl_W_1007_ScanFailACK.Text = "1007扫描验证:" + rgvView.W_1007_ScanFailACK;
|
}
|
|
private void Set1009_HighText()
|
{
|
this.lbl_R_1009_High1.Text = "1009站点1层光电:" + rgvView.R_1009_High1;
|
this.lbl_R_1009_High2.Text = "1009站点2层光电:" + rgvView.R_1009_High2;
|
this.lbl_R_1009_High3.Text = "1009站点3层光电:" + rgvView.R_1009_High3;
|
}
|
|
/// <summary>
|
/// 转换为RGV的实时状态
|
/// </summary>
|
/// <param name="rgvView"></param>
|
private void CastToDevice_RgvRealTime(RgvView rgvView)
|
{
|
List<Device_RgvRealTime> realTimeList = new List<Device_RgvRealTime>();
|
Device_RgvRealTime obj = new Device_RgvRealTime();
|
foreach (var item in rgvView.R_RgvForReadCommList)
|
{
|
EDevice device = (EDevice)Enum.Parse(typeof(EDevice), item.StationCode);
|
obj = new Device_RgvRealTime()
|
{
|
RgvCode = item.StationCode,
|
RgvName = device.ToString(),
|
Mode = item.R_Model.ToString(),
|
ModeName = EnumberHelper.GetEnumName<ERgvMode>(item.R_Model).ToString(),
|
State = item.R_State.ToString(),
|
StateName = EnumberHelper.GetEnumName<ERgvState>(item.R_State).ToString(),
|
WarningCode = item.R_AlarmCode.ToString(),
|
TaskID = item.R_TaskID.ToString(),
|
PH_1 = item.R_PH_1,
|
PH_2 = item.R_PH_2,
|
Shape = item.R_Shape.ToString(),
|
ShapeName = EnumberHelper.GetEnumName<ERgvBodyTest>(item.R_Shape).ToString(),
|
Destination = item.R_Destination.ToString(),
|
Coordinate = rgvView.R_RGV_Coordinate //赋值RGV坐标
|
};
|
realTimeList.Add(obj);
|
}
|
DeviceRgvRealTimeHandler.Update(realTimeList, iWareCommon.Utils.LogType.StationThreadService);
|
|
}
|
|
|
#endregion
|
|
#region 站点线程和UI处理
|
|
/// <summary>
|
/// 设置站点的UI显示
|
/// </summary>
|
/// <param name="obj"></param>
|
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;
|
}
|
}
|
}
|
|
/// <summary>
|
/// 获取Station信息
|
/// </summary>
|
/// <param name="obj"></param>
|
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<String> warningAddressList = new List<string>();
|
if (rgvView.R_Rgv_WarningDBList != null && rgvView.R_Rgv_WarningDBList.Length > 0)
|
{
|
tb_Rgv_Alter.Text = String.Join(",", rgvView.R_Rgv_WarningDBList.Select(x => x.Contextk__BackingField).ToArray());
|
//保存报警
|
var waringList = rgvView.R_Rgv_WarningDBList.ToList();
|
if (waringList != null && waringList.Count > 0)
|
{
|
for (int i = 0; i < waringList.Count; i++)
|
{
|
DeviceWarningHandler.SaveWarning(EDevice.RGV, iWareCommon.Utils.LogType.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 AGV
|
|
|
/// <summary>
|
/// 获取AGV车辆列表
|
/// </summary>
|
public void GetAgvVehicles()
|
{
|
while (true)
|
{
|
try
|
{
|
if (SystemValue.isAllowRuning_DataProcess_RobotBuffer_AutoQiTaoOutbound && SystemValue.isStartedModel)
|
{
|
AGVRetModel list = AgvRequestHelper.GetVehicles();
|
AgvHandler.SaveAgvData(list);
|
|
List<String> warningAddressList = new List<string>();
|
if (list.alarms != null && list.alarms.errors != null && list.alarms.errors.Count > 0)
|
{
|
var waringList = list.alarms.errors;
|
if (waringList != null && waringList.Count > 0)
|
{
|
for (int i = 0; i < waringList.Count; i++)
|
{
|
DeviceWarningHandler.SaveWarning(EDevice.AGV, iWareCommon.Utils.LogType.DataProcess_RobotBuffer_AutoQiTaoOutbound,
|
waringList[i].code, waringList[i].code, waringList[i].desc);//新增报警
|
warningAddressList.Add(waringList[i].code);
|
}
|
}
|
}
|
DeviceWarningHandler.AutoCloseWarning(EDevice.AGV, iWareCommon.Utils.LogType.DataProcess_RobotBuffer_AutoQiTaoOutbound, warningAddressList);//自动关闭报警
|
this.lbl_Alert_DataProcess_RobotBuffer_AutoQiTaoOutbound.Text = "获取AGV车辆信息成功";
|
}
|
}
|
catch (Exception ex)
|
{
|
Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.CCWCFService, "获取AGV车辆列表 出现异常:" + ex.Message, ex);
|
this.lbl_Alert_DataProcess_RobotBuffer_AutoQiTaoOutbound.Text = "获取AGV车辆信息异常:" + ex.Message;
|
}
|
finally
|
{
|
Thread.Sleep(5000);//5秒一次
|
}
|
}
|
}
|
#endregion
|
|
#region 其他线程
|
|
#region 定时删除数据
|
|
/// <summary>
|
/// 定时删除数据
|
/// </summary>
|
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 私有方法
|
|
/// <summary>
|
/// 计算 某个站点的有货 值
|
/// </summary>
|
private void CalcRGV_HasCategory_COUNT(EDevice device, ref int RGV_HasCategory_COUNT, Label lbl_RGV_HasCategory_COUNT)
|
{
|
//改为 只判断有两个信号都有
|
var isGD_HasCatogryForRgvStattion = MyExtendHelper.IsGD_HasCatogryForRgvStattionFor2(((int)device).ToString());
|
//改为 只判断有一个信号有货即可
|
//var isGD_HasCatogryForRgvStattion = MyExtendHelper.IsGD_HasCatogryForRgvStattion(((int)EDevice.出库口1012).ToString());
|
if (isGD_HasCatogryForRgvStattion)
|
{
|
RGV_HasCategory_COUNT += 1;
|
}
|
else
|
{
|
RGV_HasCategory_COUNT = 0;
|
}
|
lbl_RGV_HasCategory_COUNT.Text = ((int)device).ToString() + "站点持续有货时间:" + RGV_HasCategory_COUNT;
|
}
|
|
/// <summary>
|
/// 计算 RGV_1012_HasCategory_COUNT值
|
/// </summary>
|
private void CalcRGV_1012_HasCategory_COUNT()
|
{
|
//改为 只判断有两个信号都有
|
var isGD_HasCatogryForRgvStattion = MyExtendHelper.IsGD_HasCatogryForRgvStattionFor2(((int)EDevice.出库口1012).ToString());
|
//改为 只判断有一个信号有货即可
|
//var isGD_HasCatogryForRgvStattion = MyExtendHelper.IsGD_HasCatogryForRgvStattion(((int)EDevice.出库口1012).ToString());
|
if (isGD_HasCatogryForRgvStattion)
|
{
|
RGV_1012_HasCategory_COUNT += 1;
|
}
|
else
|
{
|
RGV_1012_HasCategory_COUNT = 0;
|
}
|
this.lbl_RGV_1012_HasCategory_COUNT.Text = "1012站点持续有货时间:" + RGV_1012_HasCategory_COUNT;
|
}
|
|
/// <summary>
|
/// 计算 RGV_1011_HasCategory_COUNT值
|
/// </summary>
|
private void CalcRGV_1011_HasCategory_COUNT()
|
{
|
//改为 只判断有两个信号都有
|
var isGD_HasCatogryForRgvStattion = MyExtendHelper.IsGD_HasCatogryForRgvStattionFor2(((int)EDevice.空托缓存1011).ToString());
|
//改为 只判断有一个信号有货即可
|
//var isGD_HasCatogryForRgvStattion = MyExtendHelper.IsGD_HasCatogryForRgvStattion(((int)EDevice.空托缓存1011).ToString());
|
if (isGD_HasCatogryForRgvStattion)
|
{
|
RGV_1011_HasCategory_COUNT += 1;
|
}
|
else
|
{
|
RGV_1011_HasCategory_COUNT = 0;
|
}
|
this.lbl_RGV_1011_HasCategory_COUNT.Text = "1011站点持续有货时间:" + RGV_1011_HasCategory_COUNT;
|
}
|
|
/// <summary>
|
/// 计算 RGV_1020_NoHasCategory_COUNT值
|
/// </summary>
|
private void CalcRGV_1020_NoHasCategory_COUNT()
|
{
|
var isGD_HasCatogryForRgvStattion = MyExtendHelper.IsGD_HasCatogryForRgvStattion(((int)EDevice.拆盘机1020).ToString());
|
if (isGD_HasCatogryForRgvStattion)
|
{
|
RGV_1020_NoHasCategory_COUNT = 0;
|
}
|
else
|
{
|
RGV_1020_NoHasCategory_COUNT += 1;
|
}
|
this.lbl_RGV_1020_NoHasCategory_COUNT.Text = "1020站点持续无货时间:" + RGV_1020_NoHasCategory_COUNT;
|
}
|
|
/// <summary>
|
/// 初始化实时堆垛机的字典
|
/// </summary>
|
private static void InitSrmDict()
|
{
|
srmViewDict = new Dictionary<int, SrmView>();
|
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 公共
|
|
/// <summary>
|
/// 公共堆垛机急停命令
|
/// </summary>
|
private void CommonSrmEStop(EDevice _EDevice)
|
{
|
try
|
{
|
using (var opcClinet = new SrmService.SrmServiceClient())
|
{
|
var result = opcClinet.SendEStop((int)_EDevice);
|
Log4NetHelper.WriteInfoLog(iWareCommon.Utils.LogType.SrmTheadService, "字符串:" + 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);
|
}
|
}
|
|
|
/// <summary>
|
/// 公共发送堆垛机命令(搬运/移动)
|
/// </summary>
|
/// <param name="pre_Srm"></param>
|
/// <param name="tbTaskId"></param>
|
/// <param name="tbSourcePlace"></param>
|
/// <param name="tbToPlace"></param>
|
/// <param name="_EDevice"></param>
|
private void CommonSendSrmTask(ESrmCmd srmCmd, string pre_Srm, TextBox tbTaskId, TextBox tbSourcePlace, TextBox tbToPlace, EDevice _EDevice)
|
{
|
if (SystemValue.isStartedModel)
|
{
|
WZ.Useful.Commons.MessageUtil.ShowError("手动发任务,需要将模式关闭!");
|
return;
|
}
|
|
MessageBoxButtons messButton = MessageBoxButtons.OKCancel;
|
var deviceName = _EDevice.ToString();
|
var cmdName = srmCmd.ToString();
|
DialogResult dr = MessageBox.Show("确定要给" + deviceName + "发送" + cmdName + "命令吗?", "确认", messButton);
|
if (dr == DialogResult.OK)//如果点击“确定”按钮
|
{
|
try
|
{
|
using (var opcClinet = new SrmService.SrmServiceClient())
|
{
|
var sourcePlce = tbSourcePlace.Text.Trim();
|
var toPlace = tbToPlace.Text.Trim();
|
|
if (!IsNumeric(tbTaskId.Text.Trim()))
|
{
|
WZ.Useful.Commons.MessageUtil.ShowError("任务号格式错误,必须是数字!");
|
return;
|
}
|
var taskId = int.Parse(tbTaskId.Text.Trim());
|
if (!(taskId >= 1 && taskId <= 100))
|
{
|
WZ.Useful.Commons.MessageUtil.ShowError("手动任务号必须是在1-100之间!");
|
return;
|
}
|
iWareCC.SrmService.SdaResEntity sdaResult = opcClinet.SendSrmTask((int)_EDevice, int.Parse(tbTaskId.Text.Trim()), pre_Srm + sourcePlce, pre_Srm + toPlace, (short)srmCmd);
|
if (sdaResult.result)
|
{
|
WZ.Useful.Commons.MessageUtil.ShowTips(deviceName + cmdName + "命令发送成功!");
|
// tB_Srm1SourcePlace.Clear();
|
// tB_Srm1ToPlace.Clear();
|
Log4NetHelper.WriteInfoLog(iWareCommon.Utils.LogType.CCWCFService, "手动堆垛机任务发送成功,任务号:" + taskId + ",起点:" + sourcePlce + ",目标点:" + toPlace + ",堆垛机:" + deviceName);
|
}
|
else
|
{
|
WZ.Useful.Commons.MessageUtil.ShowError(deviceName + cmdName + "命令发送失败!返回代码:" + sdaResult.resMsg);
|
Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.CCWCFService, "手动堆垛机任务发送失败!返回代码:" + sdaResult.resMsg + ",任务号:" + taskId + ",起点:" + sourcePlce + ",目标点:" + toPlace + ",堆垛机:" + deviceName);
|
}
|
}
|
tbSourcePlace.Focus();
|
tbSourcePlace.SelectAll();
|
}
|
catch (Exception ex)
|
{
|
WZ.Useful.Commons.MessageUtil.ShowError(deviceName + cmdName + "命令发送出现异常:" + ex.Message);
|
Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.CCWCFService, deviceName + cmdName + "命令发送出现异常:" + ex.Message, ex);
|
}
|
}
|
else//如果点击“取消”按钮
|
{
|
|
}
|
}
|
|
/// <summary>
|
/// 堆垛机任务确认
|
/// </summary>
|
/// <param name="device"></param>
|
/// <param name="tbTaskId"></param>
|
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.二号堆垛机);
|
}
|
|
/// <summary>
|
/// 校验输入的库位ID是否符合格式
|
/// </summary>
|
/// <param name="str">库位号</param>
|
/// <returns></returns>
|
private bool IsNumeric(string str)
|
{
|
try
|
{
|
return (WZ.Useful.Commons.Util.IsNumeric(int.Parse(str)));
|
}
|
catch (Exception)
|
{
|
return false;
|
}
|
}
|
|
private void rBNormal_CheckedChanged(object sender, EventArgs e)
|
{
|
SetModelCheckBoxToSystemValue();
|
}
|
|
private void rBDebug_CheckedChanged(object sender, EventArgs e)
|
{
|
SetModelCheckBoxToSystemValue();
|
}
|
|
|
/// <summary>
|
/// 根据选择的模式配置不同的值
|
/// </summary>
|
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.ckHandlerIssuingTask.Checked = false;
|
this.ckMainTaskDecompose.Checked = false;
|
|
this.gBoxThread.Enabled = true;
|
}
|
else
|
{
|
currentCheckModelText = "无效模式";
|
}
|
}
|
|
/// <summary>
|
/// 遍历所有的Checkbox,并配置是否被选中
|
/// </summary>
|
/// <param name="enabled"></param>
|
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;
|
}
|
}
|
}
|
|
|
/// <summary>
|
/// 通用的checkbox改变事件
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
private void CommonCheckedChanged(object sender, EventArgs e)
|
{
|
//堆垛机1任务下发
|
DoCommonCheckedChanged(ref SystemValue.isAllowRuning_SrmTaskThreadService_1, ckBSrm1Release);
|
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, ckHandlerIssuingTask);
|
|
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_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);
|
}
|
|
/// <summary>
|
/// 停止
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
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//如果点击“取消”按钮
|
{
|
|
}
|
}
|
|
/// <summary>
|
/// 控制模式中的RadioButton禁启用
|
/// </summary>
|
/// <param name="enabled"></param>
|
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;
|
}
|
}
|
}
|
|
/// <summary>
|
/// 启动
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
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//如果点击“取消”按钮
|
{
|
|
}
|
|
}
|
|
/// <summary>
|
/// 公共停止服务的处理
|
/// </summary>
|
/// <returns></returns>
|
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);
|
}
|
|
|
/// <summary>
|
/// 模式启动后,按钮闪烁
|
/// </summary>
|
/// <param name="obj"></param>
|
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;//还原颜色
|
}
|
}
|
}
|
}
|
|
private void panel27_Paint(object sender, PaintEventArgs e)
|
{
|
|
}
|
|
/// <summary>
|
/// 起始位和目标位互换
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
private void btn_Change1_Click(object sender, EventArgs e)
|
{
|
var old_source = this.tB_Srm1SourcePlace.Text;
|
var old_to = this.tB_Srm1ToPlace.Text;
|
this.tB_Srm1SourcePlace.Text = old_to;
|
this.tB_Srm1ToPlace.Text = old_source;
|
|
}
|
|
private void 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<ERgvMode>(r_station.R_Model);
|
this.lbl_State.Text = "运行状态:" + EnumberHelper.GetEnumName<ERgvState>(r_station.R_State);
|
this.lbl_AlarmCode.Text = "报警:" + (r_station.R_AlarmCode == 1 ? "有报警" : "无");
|
this.lbl_Destination.Text = "当前目标地址:" + r_station.R_Destination;
|
this.lbl_Shape.Text = "外形检测:" + EnumberHelper.GetEnumName<ERgvBodyTest>(r_station.R_Shape);
|
this.lbl_TaskID.Text = "当前任务号:" + r_station.R_TaskID;
|
this.lbl_Rgv_STP.Text = "STP:" + w_station.W_STP;
|
this.lbl_Rgv_WriteTaskNo.Text = "写入任务号:" + w_station.W_TaskID;
|
this.lbl_Rgv_WriteToPlace.Text = "写入目标地址:" + w_station.W_Destination;
|
}
|
}
|
|
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<Task_Part> partList = new List<Task_Part>();
|
dgvPartTask.ClearSelection(); //可消除所有选择的行
|
dgvPartTask.DataSource = null;
|
|
dgvPartTask.CurrentCell = null; //可消除选择行的行头箭头
|
using (DbModel db = new DbModel())
|
{
|
//取 最后一个未结束的任务,然后取前5条已经结束的任务
|
var queryState1 = (int)DeviceTaskStatusEnum.已取消;
|
var queryState2 = (int)DeviceTaskStatusEnum.已完成;
|
var firstNoFinishedTaskList = db.Task_Part.Where(x => x.TaskState != queryState1 && x.TaskState != queryState2).OrderBy(x => x.CreateTime).ToList();
|
if (firstNoFinishedTaskList == null)
|
{
|
partList = new List<Task_Part>();
|
}
|
else
|
{
|
List<int> mainIdList = new List<int>();
|
foreach (var item in firstNoFinishedTaskList)
|
{
|
if (!mainIdList.Contains(item.MainTaskId))
|
{
|
mainIdList.Add(item.MainTaskId);
|
}
|
}
|
var partList2 = db.Task_Part.Where(x => mainIdList.Contains(x.MainTaskId)).ToList();
|
|
//partList.AddRange(partList1);
|
partList.AddRange(partList2);
|
}
|
if (partList != null && partList.Count > 0)
|
{
|
partList = partList.OrderBy(x => x.MainTaskId).ThenByDescending(x => x.CreateTime).ToList();//重新 升序排序
|
dgvPartTask.DataSource = null;
|
dgvPartTask.DataSource = partList;
|
}
|
else
|
{
|
//if (dgvPartTask.Rows.Count > 0)
|
//{
|
// int i = dgvPartTask.Rows[0].Cells.Count;
|
// var cells = dgvPartTask.Rows[0].Cells;
|
// for (int j = 0; j < i; j++)
|
// {
|
// cells[j].Value = null;
|
// }
|
//}
|
}
|
}
|
}
|
|
private void btnFinish_Click_1(object sender, EventArgs e)
|
{
|
//强制完成
|
try
|
{
|
var _AllowSimulateExecute_Rmark = this.tb_AllowSimulateExecute_Rmark.Text;
|
if (string.IsNullOrEmpty(_AllowSimulateExecute_Rmark))
|
{
|
MessageBox.Show("请输入强制完成原因说明!");
|
return;
|
}
|
using (DbModel context = new DbModel())
|
{
|
var row = dgvPartTask.SelectedRows;
|
|
if (row.Count > 0)
|
{
|
var cell = row[0].Cells;
|
// var id = cell[0].Value.ToString();
|
var id = cell["Id"].Value.ToString();
|
var task = context.Task_Part.FirstOrDefault(x => x.Id == id);
|
if (task != null)
|
{
|
#region 数据处理
|
MessageBoxButtons messButton = MessageBoxButtons.OKCancel;
|
DialogResult dr = MessageBox.Show("确定要将该任务" + task.PlcTaskId + "标记为强制完成吗?", "确认", messButton);
|
if (dr == DialogResult.OK)//如果点击“确定”按钮
|
{
|
|
task.IsAllowSimulateExecute = true;
|
task.AllowSimulateExecute_User = SysGloble.WCSSystem;
|
task.AllowSimulateExecute_Time = DateTime.Now;
|
task.AllowSimulateExecute_Rmark = _AllowSimulateExecute_Rmark;
|
|
task.ModifyTime = DateTime.Now;
|
task.OperationRemark = "用户强制完成," + _AllowSimulateExecute_Rmark;
|
task.ModifyBy = SysGloble.WCSSystem;
|
|
//保存人工处理日志 [EditBy shaocx,2022-05-01]
|
Base_PersonHandlerRecord record = new Base_PersonHandlerRecord()
|
{
|
MainTaskNo = task.MainTaskNo,
|
HandlerType = "标记任务强制完成",
|
PartTaskId = task.Id,
|
PlcTaskId = task.PlcTaskId,
|
RealSourcePlace = task.RealSourcePlace,
|
RealToPlace = task.RealToPlace,
|
SalverCode = task.SalverCode,
|
SerialNumber = task.SerialNumber,
|
OrderNo = task.OrderNo,
|
TaskTypeName = task.TaskTypeName,
|
Qty = task.Qty,
|
|
ManualHandlerRemark = _AllowSimulateExecute_Rmark
|
|
};
|
PersonHandlerRecordHandler.SavePersonHandlerRecord(context, record);
|
|
context.SaveChanges();
|
|
|
MessageBox.Show("标记任务强制完成成功!注意:标记强制完成只是更新标记,要想处理完库存,您还需要运行自动模式,让其自动处理库存!");
|
|
BindData();
|
}
|
else//如果点击“取消”按钮
|
{
|
BindData();
|
}
|
#endregion
|
}
|
else
|
{
|
MessageBox.Show("未找到该任务!");
|
return;
|
}
|
}
|
else
|
{
|
MessageBox.Show("请先选中要标记任务强制完成的行!");
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
MessageBox.Show("标记任务强制完成异常:" + ex.Message);
|
}
|
}
|
|
private void btnDelete_Click_1(object sender, EventArgs e)
|
{
|
//任务取消
|
try
|
{
|
if (SystemValue.isStartedModel)
|
{
|
WZ.Useful.Commons.MessageUtil.ShowError("手动取消任务,需要将模式关闭!");
|
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);
|
}
|
}
|
|
/// <summary>
|
/// 关闭1015重新扫描
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
private void button3_Click(object sender, EventArgs e)
|
{
|
using (var opcClinet = new RgvService.RgvServiceClient())
|
{
|
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);
|
}
|
}
|
}
|
|
/// <summary>
|
/// 关闭1019重新扫描
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
private void button21_Click(object sender, EventArgs e)
|
{
|
using (var opcClinet = new RgvService.RgvServiceClient())
|
{
|
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<Task_Part> partList = new List<Task_Part>();
|
dgvPartTask_Finished.ClearSelection(); //可消除所有选择的行
|
dgvPartTask_Finished.DataSource = null;
|
|
dgvPartTask_Finished.CurrentCell = null; //可消除选择行的行头箭头
|
|
var query_plc_taskNo = this.tb_Query_PlcTaskNo.Text.Trim();
|
var query_Salver = this.tb_query_Salver.Text.Trim();
|
|
|
//取 最后一个未结束的任务,然后取前5条已经结束的任务
|
var queryState1 = (int)MainTaskStatusEnum.已取消;
|
var queryState2 = (int)MainTaskStatusEnum.已完成;
|
|
using (DbModel db = new DbModel())
|
{
|
List<Task_Main> firstNoFinishedTaskList = new List<Task_Main>();
|
if (!string.IsNullOrEmpty(query_plc_taskNo) || !string.IsNullOrEmpty(query_Salver))
|
{
|
Expression<Func<Task_Part, bool>> predicate_plc_taskno = a => 1 == 1;
|
Expression<Func<Task_Part, bool>> predicate_query_Salver = a => 1 == 1;
|
if (!string.IsNullOrEmpty(query_plc_taskNo))
|
{
|
predicate_plc_taskno = a => a.PlcTaskId == query_plc_taskNo;
|
}
|
if (!string.IsNullOrEmpty(query_Salver))
|
{
|
predicate_query_Salver = a => a.SalverCode == query_Salver;
|
}
|
|
partList = db.Task_Part.Where(predicate_plc_taskno).Where(predicate_query_Salver).ToList();
|
}
|
else
|
{
|
//增加 显示 ,最近已完成的任务,要 最近30个任务 【Editby shaocx,2023-04-03】
|
firstNoFinishedTaskList = db.Task_Main.Where(x =>
|
(x.TaskState == queryState1 || x.TaskState == queryState2)
|
).OrderByDescending(x => x.CreateTime).Take(30).ToList();
|
if (firstNoFinishedTaskList == null)
|
{
|
partList = new List<Task_Part>();
|
}
|
else
|
{
|
List<int> mainIdList = new List<int>();
|
foreach (var item in firstNoFinishedTaskList)
|
{
|
if (!mainIdList.Contains(item.Id))
|
{
|
mainIdList.Add(item.Id);
|
}
|
}
|
var partList2 = db.Task_Part.Where(x => mainIdList.Contains(x.MainTaskId)).ToList();
|
|
//partList.AddRange(partList1);
|
partList.AddRange(partList2);
|
}
|
}
|
|
|
|
if (partList != null && partList.Count > 0)
|
{
|
partList = partList.OrderBy(x => x.MainTaskId).ThenByDescending(x => x.CreateTime).ToList();//重新 升序排序
|
dgvPartTask_Finished.DataSource = null;
|
dgvPartTask_Finished.DataSource = partList;
|
}
|
else
|
{
|
//if (dgvPartTask_Finished.Rows.Count > 0)
|
//{
|
// int i = dgvPartTask_Finished.Rows[0].Cells.Count;
|
// var cells = dgvPartTask_Finished.Rows[0].Cells;
|
// for (int j = 0; j < i; j++)
|
// {
|
// cells[j].Value = null;
|
// }
|
//}
|
}
|
}
|
}
|
|
private void button18_Click(object sender, EventArgs e)
|
{
|
//查询设备任务列表
|
dataGridView__OutTaskList.AutoGenerateColumns = false;
|
for (int i = 0; i < dataGridView__OutTaskList.Columns.Count; i++)
|
{
|
if (i == (dataGridView__OutTaskList.Columns.Count - 1))
|
{//最后一列填充
|
dataGridView__OutTaskList.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
|
}
|
else
|
{//其他列自动适应宽度
|
dataGridView__OutTaskList.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
|
}
|
}
|
|
BindData_OutTaskList();
|
|
//this.dgvPartTask.Columns["CreateTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss";
|
//this.dgvPartTask.Columns["IssueTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss";
|
//this.dgvPartTask.Columns["FinishTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss";
|
//this.dgvPartTask.Columns["AllowSimulateExecute_Time"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss";
|
FormHelper.DataGridViewSelfAdaptionWidth(this.dataGridView__OutTaskList);
|
}
|
|
public void BindData_OutTaskList()
|
{
|
List<Task_Main> mainList = new List<Task_Main>();
|
dataGridView__OutTaskList.ClearSelection(); //可消除所有选择的行
|
dataGridView__OutTaskList.DataSource = null;
|
|
dataGridView__OutTaskList.CurrentCell = null; //可消除选择行的行头箭头
|
using (DbModel db = new DbModel())
|
{
|
var queryState1 = (int)MainTaskStatusEnum.已取消;
|
var queryState2 = (int)MainTaskStatusEnum.已完成;
|
var queryInOutFlag = (int)MainInOutFlagEnum.出库;
|
mainList = db.Task_Main.Where(x => x.TaskState != queryState1 && x.TaskState != queryState2
|
&& x.InOutFlag == queryInOutFlag
|
).OrderBy(x => x.TaskSequence).ThenBy(x => x.CreateTime).ToList();
|
|
if (mainList != null && mainList.Count > 0)
|
{
|
dataGridView__OutTaskList.DataSource = null;
|
dataGridView__OutTaskList.DataSource = mainList;
|
}
|
else
|
{
|
//if (dataGridView__OutTaskList.Rows.Count > 0)
|
//{
|
// int i = dataGridView__OutTaskList.Rows[0].Cells.Count;
|
// var cells = dataGridView__OutTaskList.Rows[0].Cells;
|
// for (int j = 0; j < i; j++)
|
// {
|
// cells[j].Value = null;
|
// }
|
//}
|
}
|
}
|
}
|
|
private void panel_DeviceTaskList_dgvPartTask_Finished_Paint(object sender, PaintEventArgs e)
|
{
|
|
}
|
|
private void btn_TongJi_Click(object sender, EventArgs e)
|
{
|
//统计
|
|
int store_FDJ = 0;//现有发动机数
|
int store_EmptySalver = 0;//空托盘数量
|
int store_EmptySalver_TS = 0;//空托盘托数
|
|
int count_In_FDJ = 0;//查询某天入库了多少发动机
|
int count_In_EmptySalver = 0;//查询某天入库了多少 空托盘
|
int count_In_EmptySalver_TS = 0;//查询某天入库了多少 空托盘托数
|
|
int count_Out_FDJ = 0;//查询某天出库了多少发动机
|
int count_Out_EmptySalver = 0;//查询某天出库了多少 空托盘
|
int count_Out_EmptySalver_TS = 0;//查询某天出库了多少 空托盘托数
|
|
int count_ZY_EmptySalver = 0;//查询某天转运了多少 空托盘
|
int count_ZY_EmptySalver_TS = 0;//查询某天转运了多少 空托盘托数
|
|
//某段时间的统计
|
var str_start = this.dateTimePicker_Start.Value.ToString("yyyy-MM-dd" + " " + "00:00:00");
|
var str_end = this.dateTimePicker_End.Value.ToString("yyyy-MM-dd" + " " + "23:59:59");
|
var start = Convert.ToDateTime(str_start);
|
var end = Convert.ToDateTime(str_end);
|
|
int allPlacesCount = 0;
|
using (DbModel edm = new DbModel())
|
{
|
|
var queryMaterialType_一般物料 = (int)MaterialTypeEnum.一般物料;
|
var queryMaterialType_托盘 = (int)MaterialTypeEnum.托盘;
|
var queryInOutFlag_In = (int)MainInOutFlagEnum.入库;
|
var queryInOutFlag_Out = (int)MainInOutFlagEnum.出库;
|
var queryInOutFlag_ZY = (int)MainInOutFlagEnum.转运;
|
|
var allPlaces = edm.Base_Station.Where(x => x.IsSrmStation == true).ToList();
|
allPlaces = StationHandler.FindCommonFilter(allPlaces);
|
allPlacesCount = allPlaces.Count;
|
|
store_FDJ = edm.V_Store.Where(x => x.MaterialType == queryMaterialType_一般物料).Count();
|
|
|
store_EmptySalver_TS = edm.V_Store.Where(x => x.MaterialType == queryMaterialType_托盘).Count();
|
store_EmptySalver = store_EmptySalver_TS == 0 ? 0 : edm.V_Store.Where(x => x.MaterialType == queryMaterialType_托盘).Sum(x => (int)x.Qty);
|
|
|
|
//查询某天入库了多少发动机
|
var taskState = (int)MainTaskStatusEnum.已完成;
|
count_In_FDJ = edm.Task_Main.Where(x => x.MaterialType == queryMaterialType_一般物料 && x.InOutFlag == queryInOutFlag_In && x.TaskState == taskState && (x.FinishTime >= start && x.FinishTime <= end)).Count();
|
|
//查询某天入库了多少托盘
|
count_In_EmptySalver_TS = edm.Task_Main.Where(x => x.MaterialType == queryMaterialType_托盘 && x.InOutFlag == queryInOutFlag_In && x.TaskState == taskState && (x.FinishTime >= start && x.FinishTime <= end)).Count();
|
count_In_EmptySalver = count_In_EmptySalver_TS == 0 ? 0 : edm.Task_Main.Where(x => x.MaterialType == queryMaterialType_托盘 && x.InOutFlag == queryInOutFlag_In && x.TaskState == taskState && (x.FinishTime >= start && x.FinishTime <= end)).Sum(x => (int)x.Qty);
|
|
//查询某天出库了多少发动机
|
count_Out_FDJ = edm.Task_Main.Where(x => x.MaterialType == queryMaterialType_一般物料 && x.InOutFlag == queryInOutFlag_Out && x.TaskState == taskState && (x.FinishTime >= start && x.FinishTime <= end)).Count();
|
|
//查询某天入库了多少托盘
|
count_Out_EmptySalver_TS = edm.Task_Main.Where(x => x.MaterialType == queryMaterialType_托盘 && x.InOutFlag == queryInOutFlag_Out && x.TaskState == taskState && (x.FinishTime >= start && x.FinishTime <= end)).Count();
|
count_Out_EmptySalver = count_Out_EmptySalver_TS == 0 ? 0 : edm.Task_Main.Where(x => x.MaterialType == queryMaterialType_托盘 && x.InOutFlag == queryInOutFlag_Out && x.TaskState == taskState && (x.FinishTime >= start && x.FinishTime <= end)).Sum(x => (int)x.Qty);
|
|
//查询某天转运了多少托盘(注意:只查询去1014位置的)
|
count_ZY_EmptySalver_TS = edm.Task_Main.Where(x => x.MaterialType == queryMaterialType_托盘 && x.InOutFlag == queryInOutFlag_ZY && x.TaskState == taskState && (x.FinishTime >= start && x.FinishTime <= end) && x.RealToPlace == "1014").Count();
|
count_ZY_EmptySalver = count_ZY_EmptySalver_TS == 0 ? 0 : edm.Task_Main.Where(x => x.MaterialType == queryMaterialType_托盘 && x.InOutFlag == queryInOutFlag_ZY && x.TaskState == taskState && (x.FinishTime >= start && x.FinishTime <= end) && x.RealToPlace == "1014").Sum(x => (int)x.Qty);
|
|
}
|
|
//显示
|
//var aa = "\r\n";
|
var str = "";
|
str += "时间范围: " + str_start + "至" + str_end + " \r\n";
|
str += "==================【库存】========================= \r\n";
|
str += "现有发动机数: " + store_FDJ + " \r\n";
|
str += "现有空托盘数: " + store_EmptySalver + " \r\n";
|
str += "现有空托盘托数: " + store_EmptySalver_TS + " \r\n";
|
str += "总库位" + allPlacesCount + ",有发动机或托盘库位" + (store_FDJ + store_EmptySalver_TS) + ",库存占比: " + CSharpHelper.ExecPercent((store_FDJ + store_EmptySalver_TS), allPlacesCount) + " \r\n";
|
str += "\r\n";
|
|
str += "==================【入库】========================= \r\n";
|
str += "入库发动机数: " + count_In_FDJ + " \r\n";
|
str += "入库空托盘数: " + count_In_EmptySalver + " \r\n";
|
str += "入库空托盘托数: " + count_In_EmptySalver_TS + " \r\n";
|
str += "\r\n";
|
|
str += "==================【出库】========================= \r\n";
|
str += "出库发动机数: " + count_Out_FDJ + " \r\n";
|
str += "出库空托盘数: " + count_Out_EmptySalver + " \r\n";
|
str += "出库空托盘托数: " + count_Out_EmptySalver_TS + " \r\n";
|
str += "\r\n";
|
|
str += "==================【转运托盘】========================= \r\n";
|
str += "转运空托盘数: " + count_ZY_EmptySalver + " \r\n";
|
str += "转运空托盘托数: " + count_ZY_EmptySalver_TS + " \r\n";
|
str += "\r\n";
|
|
this.tb_TongJi.Text = str;
|
}
|
|
private void checkBox_NowDay_CheckedChanged(object sender, EventArgs e)
|
{
|
if (this.checkBox_NowDay.Checked)
|
{
|
dateTimePicker_Start.Value = DateTime.Now;
|
dateTimePicker_End.Value = DateTime.Now;
|
}
|
}
|
|
private void rBOnlyIn_CheckedChanged(object sender, EventArgs e)
|
{
|
SetModelCheckBoxToSystemValue();
|
}
|
|
private void btnSMQZYZTG1_Click(object sender, EventArgs e)
|
{
|
DobtnSMQZYZTG(EDevice.一号堆垛机);
|
}
|
|
private void DobtnSMQZYZTG(EDevice device)
|
{
|
MessageBoxButtons messButton = MessageBoxButtons.OKCancel;
|
DialogResult dr = MessageBox.Show("注意:入库口扫码强制验证通过功能,仅适用于扫码器没有扫到码,但是实际托盘码和堆垛机要执行的任务托盘码一致的情况!如果堆垛机要执行的任务跟实际托盘码不符,请不要点击该按钮,及时联系管理员过来处理。您确定要操作吗?", "确认", messButton);
|
if (dr == DialogResult.OK)//如果点击“确定”按钮
|
{
|
var stationCode = MyExtendHelper.GetRgvStationCodeBySrm(device);
|
var srm = FormCC.srmViewDict[(int)device];
|
//只有当堆垛机有任务执行时,并且是入库任务的时候才判断
|
var realSrmSourcePlace = (int)device + "-" + srm.SrmSourcePlace;
|
if (srm.R_TaskNo > 0 && (srm.R_State == (int)ESrmState.取货中 || srm.R_State == (int)ESrmState.取货定位中)
|
&& SysGloble.Dict_SpecialPlace_IN.ContainsKey(realSrmSourcePlace))
|
{
|
var result = MyExtendHelper.WriteScanValidateACK(false, "入库口扫码强制验证通过", stationCode, srm.R_TaskNo, true, "", "");
|
if (result)
|
{
|
MyExtendHelper.SetSrm_IN_SMQZYZTG(device, true);
|
MessageBox.Show("入库口扫码强制验证通过 成功!");
|
}
|
else
|
{
|
MessageBox.Show("入库口扫码强制验证通过 失败!");
|
}
|
}
|
else
|
{
|
MessageBox.Show(device.ToString() + "任务号不是大于0,或者 状态不是 '取货中'或'取货定位中',不允许操作");
|
}
|
}
|
else//如果点击“取消”按钮
|
{
|
|
}
|
}
|
|
private void btnSMQZYZTG4_Click(object sender, EventArgs e)
|
{
|
DobtnSMQZYZTG(EDevice.四号堆垛机);
|
}
|
|
private void btnSMQZYZTG3_Click(object sender, EventArgs e)
|
{
|
DobtnSMQZYZTG(EDevice.三号堆垛机);
|
}
|
|
private void btnSMQZYZTG2_Click(object sender, EventArgs e)
|
{
|
DobtnSMQZYZTG(EDevice.二号堆垛机);
|
}
|
|
private void btn_WaitPlanDetail_Click(object sender, EventArgs e)
|
{
|
//查询设备任务列表
|
dataGridView_WaitPlanDetail.AutoGenerateColumns = false;
|
for (int i = 0; i < dataGridView_WaitPlanDetail.Columns.Count; i++)
|
{
|
if (i == (dataGridView_WaitPlanDetail.Columns.Count - 1))
|
{//最后一列填充
|
dataGridView_WaitPlanDetail.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
|
}
|
else
|
{//其他列自动适应宽度
|
dataGridView_WaitPlanDetail.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
|
}
|
}
|
|
BindData_WaitPlanDetail();
|
|
//this.dgvPartTask.Columns["CreateTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss";
|
//this.dgvPartTask.Columns["IssueTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss";
|
//this.dgvPartTask.Columns["FinishTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss";
|
//this.dgvPartTask.Columns["AllowSimulateExecute_Time"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss";
|
FormHelper.DataGridViewSelfAdaptionWidth(this.dataGridView_WaitPlanDetail);
|
}
|
|
public void BindData_WaitPlanDetail()
|
{
|
List<Plan_OutTaskDetail> mainList = new List<Plan_OutTaskDetail>();
|
dataGridView_WaitPlanDetail.ClearSelection(); //可消除所有选择的行
|
dataGridView_WaitPlanDetail.DataSource = null;
|
|
dataGridView_WaitPlanDetail.CurrentCell = null; //可消除选择行的行头箭头
|
using (DbModel db = new DbModel())
|
{
|
var queryState1 = (int)OutTaskDetailStateEnum.等待中;
|
var queryState2 = (int)OutTaskDetailStateEnum.缺料;
|
mainList = db.Plan_OutTaskDetail.Where(x => x.OutTaskDetailState == queryState1
|
|| x.OutTaskDetailState == queryState2
|
).OrderBy(x => x.TaskSequence).ThenBy(x => x.CreateTime).ToList();
|
|
if (mainList != null && mainList.Count > 0)
|
{
|
dataGridView_WaitPlanDetail.DataSource = null;
|
dataGridView_WaitPlanDetail.DataSource = mainList;
|
}
|
else
|
{
|
//if (dataGridView__OutTaskList.Rows.Count > 0)
|
//{
|
// int i = dataGridView__OutTaskList.Rows[0].Cells.Count;
|
// var cells = dataGridView__OutTaskList.Rows[0].Cells;
|
// for (int j = 0; j < i; j++)
|
// {
|
// cells[j].Value = null;
|
// }
|
//}
|
}
|
}
|
}
|
|
private void btnDeleteTask_Click(object sender, EventArgs e)
|
{
|
//任务强制删除
|
try
|
{
|
if (SystemValue.isStartedModel)
|
{
|
WZ.Useful.Commons.MessageUtil.ShowError("手动任务强制删除,需要将模式关闭!");
|
return;
|
}
|
|
var _AllowSimulateExecute_Rmark = this.tb_AllowSimulateExecute_Rmark.Text;
|
if (string.IsNullOrEmpty(_AllowSimulateExecute_Rmark))
|
{
|
MessageBox.Show("请输入任务强制删除原因说明!");
|
return;
|
}
|
var myNotext = "人工任务强制删除任务,原因:" + _AllowSimulateExecute_Rmark;
|
MessageBoxButtons messButton = MessageBoxButtons.OKCancel;
|
DialogResult dr = MessageBox.Show("【任务强制删除,并不处理库存,请谨慎操作。确认任务强制删除后,还需人工校验下该任务库存是否正确!】,确定要任务强制删除吗?", "提示", messButton);
|
if (dr == DialogResult.OK)//如果点击“确定”按钮
|
{
|
using (DbModel context = new DbModel())
|
{
|
var row = dgvPartTask.SelectedRows;
|
|
if (row.Count > 0)
|
{
|
var cell = row[0].Cells;
|
//var id = cell[0].Value.ToString();
|
var id = cell["Id"].Value.ToString();
|
var partTask = context.Task_Part.FirstOrDefault(x => x.Id == id);
|
if (partTask != null)
|
{
|
//找到主任务
|
var mainTask = context.Task_Main.Where(x => x.Id == partTask.MainTaskId).FirstOrDefault();
|
if (mainTask == null)
|
{
|
MessageBox.Show("未找到该任务的主任务!");
|
return;
|
}
|
//找另一个partTask
|
var partTask2 = context.Task_Part.FirstOrDefault(x => x.Id != partTask.Id && x.MainTaskId == mainTask.Id);
|
|
if (partTask2 != null)
|
{
|
//解绑起点和终点
|
|
var place1 = context.Base_Station.Where(x => x.Id == partTask2.SourcePlace).First();
|
var place2 = context.Base_Station.Where(x => x.Id == partTask2.ToPlace).First();
|
StationHandler.SetPlaceLockStatus(false, SysGloble.WCSSystem, ref place1, myNotext);
|
StationHandler.SetPlaceTaskDoingStatus(false, SysGloble.WCSSystem, ref place1, myNotext);
|
StationHandler.SetPlaceLockStatus(false, SysGloble.WCSSystem, ref place2, myNotext);
|
StationHandler.SetPlaceTaskDoingStatus(false, SysGloble.WCSSystem, ref place2, myNotext);
|
}
|
|
var place3 = context.Base_Station.Where(x => x.Id == partTask.SourcePlace).First();
|
var place4 = context.Base_Station.Where(x => x.Id == partTask.ToPlace).First();
|
StationHandler.SetPlaceLockStatus(false, SysGloble.WCSSystem, ref place3, myNotext);
|
StationHandler.SetPlaceTaskDoingStatus(false, SysGloble.WCSSystem, ref place3, myNotext);
|
StationHandler.SetPlaceLockStatus(false, SysGloble.WCSSystem, ref place4, myNotext);
|
StationHandler.SetPlaceTaskDoingStatus(false, SysGloble.WCSSystem, ref place4, myNotext);
|
|
|
|
|
//主任务也要修改为取消
|
mainTask.TaskState = (int)MainTaskStatusEnum.已取消;
|
mainTask.TaskStateName = MainTaskStatusEnum.已取消.ToString();
|
mainTask.FinishTime = DateTime.Now;
|
mainTask.OperationRemark = "用户任务强制删除," + _AllowSimulateExecute_Rmark;
|
|
if (partTask2 != null)
|
{
|
context.Task_Part.Remove(partTask2);
|
}
|
context.Task_Part.Remove(partTask);
|
|
//保存人工处理日志 [EditBy shaocx,2022-05-01]
|
Base_PersonHandlerRecord record = new Base_PersonHandlerRecord()
|
{
|
MainTaskNo = partTask.MainTaskNo,
|
HandlerType = "任务强制删除",
|
PartTaskId = partTask.Id,
|
PlcTaskId = partTask.PlcTaskId,
|
RealSourcePlace = partTask.RealSourcePlace,
|
RealToPlace = partTask.RealToPlace,
|
SalverCode = partTask.SalverCode,
|
SerialNumber = partTask.SerialNumber,
|
OrderNo = partTask.OrderNo,
|
TaskTypeName = partTask.TaskTypeName,
|
Qty = partTask.Qty,
|
|
ManualHandlerRemark = _AllowSimulateExecute_Rmark
|
|
};
|
PersonHandlerRecordHandler.SavePersonHandlerRecord(context, record);
|
|
context.SaveChanges();
|
}
|
else
|
{
|
MessageBox.Show("未找到该任务!");
|
return;
|
}
|
|
MessageBox.Show("任务强制删除成功!");
|
|
BindData();
|
}
|
else
|
{
|
MessageBox.Show("请先选中要执行的行!");
|
}
|
}
|
}
|
else//如果点击“取消”按钮
|
{
|
|
}
|
}
|
catch (Exception ex)
|
{
|
MessageBox.Show("任务强制删除异常:" + ex.Message);
|
Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.CCWCFService, "任务强制删除异常:" + ex.Message, ex);
|
}
|
}
|
|
private void btn_Find_OutTaskRetryToMes_Click(object sender, EventArgs e)
|
{
|
//查询设备任务列表
|
dg_OutTaskRetryToMes.AutoGenerateColumns = false;
|
for (int i = 0; i < dg_OutTaskRetryToMes.Columns.Count; i++)
|
{
|
if (i == (dg_OutTaskRetryToMes.Columns.Count - 1))
|
{//最后一列填充
|
dg_OutTaskRetryToMes.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
|
}
|
else
|
{//其他列自动适应宽度
|
dg_OutTaskRetryToMes.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
|
}
|
}
|
|
BindData_OutTaskRetryToMesList();
|
|
//this.dgvPartTask.Columns["CreateTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss";
|
//this.dgvPartTask.Columns["IssueTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss";
|
//this.dgvPartTask.Columns["FinishTime"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss";
|
//this.dgvPartTask.Columns["AllowSimulateExecute_Time"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss";
|
FormHelper.DataGridViewSelfAdaptionWidth(this.dg_OutTaskRetryToMes);
|
}
|
|
public void BindData_OutTaskRetryToMesList()
|
{
|
List<Task_Main> mainList = new List<Task_Main>();
|
dg_OutTaskRetryToMes.ClearSelection(); //可消除所有选择的行
|
dg_OutTaskRetryToMes.DataSource = null;
|
|
dg_OutTaskRetryToMes.CurrentCell = null; //可消除选择行的行头箭头
|
using (DbModel db = new DbModel())
|
{
|
mainList = db.Task_Main.Where(x => (x.IsNeedOnLine != null && x.IsNeedOnLine == true) && (x.IsOnLine == null || x.IsOnLine == false)).OrderBy(x => x.TaskSequence).ThenBy(x => x.CreateTime).ToList();
|
|
if (mainList != null && mainList.Count > 0)
|
{
|
dg_OutTaskRetryToMes.DataSource = null;
|
dg_OutTaskRetryToMes.DataSource = mainList;
|
}
|
else
|
{
|
//if (dataGridView__OutTaskList.Rows.Count > 0)
|
//{
|
// int i = dataGridView__OutTaskList.Rows[0].Cells.Count;
|
// var cells = dataGridView__OutTaskList.Rows[0].Cells;
|
// for (int j = 0; j < i; j++)
|
// {
|
// cells[j].Value = null;
|
// }
|
//}
|
}
|
}
|
}
|
|
private void button19_Click(object sender, EventArgs e)
|
{
|
//重新通知MES出库
|
try
|
{
|
if (SystemValue.isStartedModel)
|
{
|
WZ.Useful.Commons.MessageUtil.ShowError("手动重新通知MES出库,需要将模式关闭!");
|
return;
|
}
|
|
MessageBoxButtons messButton = MessageBoxButtons.OKCancel;
|
|
using (DbModel db = new DbModel())
|
{
|
var row = dg_OutTaskRetryToMes.SelectedRows;
|
|
if (row.Count > 0)
|
{
|
var cell = row[0].Cells;
|
//var id = cell[0].Value.ToString();
|
var id = Convert.ToInt32(cell["MesId"].Value.ToString());
|
var task = db.Task_Main.FirstOrDefault(x => x.Id == id);
|
if (task != null)
|
{
|
//判断设备类型
|
DialogResult dr = MessageBox.Show(string.Format("确定要手动重新通知MES出库吗?序列号{0},订货号{1}", task.SerialNumber, task.OrderNo), "提示", messButton);
|
if (dr == DialogResult.OK)//如果点击“确定”按钮
|
{
|
MesRetModel<string> ret = MesService.updateOnlineStatusWithNoTask(task);
|
if (ret.code == 200)
|
{
|
using (DbModel context = new DbModel())
|
{
|
//保存人工处理日志 [EditBy shaocx,2022-05-01]
|
Base_PersonHandlerRecord record = new Base_PersonHandlerRecord()
|
{
|
MainTaskNo = task.TaskNo,
|
HandlerType = "重新通知MES出库",
|
PartTaskId = "",
|
PlcTaskId = "",
|
RealSourcePlace = task.RealSourcePlace,
|
RealToPlace = task.RealToPlace,
|
SalverCode = task.SalverCode,
|
SerialNumber = task.SerialNumber,
|
OrderNo = task.OrderNo,
|
TaskTypeName = task.TaskTypeName,
|
Qty = task.Qty,
|
|
ManualHandlerRemark = "重新推送"
|
|
};
|
PersonHandlerRecordHandler.SavePersonHandlerRecord(context, record);
|
|
context.SaveChanges();
|
}
|
|
|
MessageBox.Show("已重新给MES推送出库成功!");
|
BindData();
|
}
|
else
|
{
|
MessageBox.Show("已重新给MES推送出库失败!" + ret.msg);
|
BindData();
|
}
|
}
|
else//如果点击“取消”按钮
|
{
|
return;
|
}
|
}
|
else
|
{
|
MessageBox.Show("未找到该任务!");
|
return;
|
}
|
}
|
else
|
{
|
MessageBox.Show("请先选中要执行的行!");
|
}
|
}
|
|
}
|
catch (Exception ex)
|
{
|
MessageBox.Show("任务重发出现异常:" + ex.Message);
|
}
|
}
|
|
private void panel_dg_OutTaskRetryToMes_Paint(object sender, PaintEventArgs e)
|
{
|
|
}
|
|
private void btn_1019_Click(object sender, EventArgs e)
|
{
|
CommmonShowAgvStation(sender);
|
}
|
|
private void button22_Click(object sender, EventArgs e)
|
{
|
var cargNo = this.tb_wlm.Text.Trim();
|
var ret = WmsRequestHelper.test_getEngineInfo(cargNo);
|
|
|
//转换后
|
MesRetModel2<MesRetProductModel> retModel = JsonConvert.DeserializeObject<MesRetModel2<MesRetProductModel>>(ret);
|
|
this.tb_TongJi.Text = "MES返回:" + ret + "\r\n" +
|
"转换后:" + "\r\n" +
|
JsonConvert.SerializeObject(retModel)
|
;
|
}
|
|
private void button23_Click(object sender, EventArgs e)
|
{
|
var cargNo = this.tb_wlm.Text.Trim();
|
var ret = WmsRequestHelper.test_btjReceive(cargNo);
|
|
|
//转换后
|
MessageModel<string> retModel = JsonConvert.DeserializeObject<MessageModel<string>>(ret);
|
|
this.tb_TongJi.Text = "WMS返回:" + ret + "\r\n" +
|
"转换后:" + "\r\n" +
|
JsonConvert.SerializeObject(retModel);
|
}
|
|
private void lbl_Alert_Place1014ClearStoreTask_Click(object sender, EventArgs e)
|
{
|
|
}
|
}
|
}
|