using iWareCC.BLL;
using iWareCC.SrmService;
using iWareCommon;
using iWareCommon.Utils;
using iWareModel;
using iWareSql;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace iWareCC.Forms
{
public partial class SystemCheckForm : Form
{
private string strOK = "成功!";
private string strFail = "失败!";
Boolean DeviceStats = false;
public SystemCheckForm()
{
InitializeComponent();
this.BtnDection.Enabled = false;
this.btn_Skip.Enabled = false;
}
///
/// 显示登陆窗体.(公共静态方法)
///
public static bool Frm_SystemCheckResult()
{
SystemCheckForm LoadDetectionFM = new SystemCheckForm();
LoadDetectionFM.StartPosition = FormStartPosition.CenterScreen;
DialogResult result = LoadDetectionFM.ShowDialog();
return (result == DialogResult.OK);
}
private void Bgw1_DoWork(object sender, DoWorkEventArgs e)
{
StartDection();
}
private void StartDection()
{
this.BtnDection.Enabled = false;
this.btn_Skip.Enabled = false;
Boolean result1, result2, result3, result4, result5, result6, result7;
result1 = result2 = result3 = result4 = result5 = result6 = result7 = false;
int checkAllCount = 7;
int checkIndex = 0;
var tipsMsg = "";
//1、通讯检测
tipsMsg = "正在检测 WCS通讯...(" + (++checkIndex) + "/" + checkAllCount + ")";
SetLablelMsg(tipsMsg);
this.Bgw1.ReportProgress(10, tipsMsg);
result1 = this.DeviceDection(txt_WCS, txt_WCS, "WCS通讯检测", "");
Thread.Sleep(500);
//2、MES接口反馈
tipsMsg = "正在检测 MES服务...(" + (++checkIndex) + "/" + checkAllCount + ")";
SetLablelMsg(tipsMsg);
this.Bgw1.ReportProgress(20, tipsMsg);
result2 = this.MesDection();
Thread.Sleep(500);
//3、堆垛机反馈
tipsMsg = "正在检测 1号堆垛机连接...(" + (++checkIndex) + "/" + checkAllCount + ")";
SetLablelMsg(tipsMsg);
this.Bgw1.ReportProgress(30, tipsMsg);
result3 = this.SrmDection(EDevice.一号堆垛机, "1号堆垛机");
Thread.Sleep(500);
tipsMsg = "正在检测 2号堆垛机连接...(" + (++checkIndex) + "/" + checkAllCount + ")";
SetLablelMsg(tipsMsg);
this.Bgw1.ReportProgress(40, tipsMsg);
result4 = this.SrmDection(EDevice.二号堆垛机, "2号堆垛机");
Thread.Sleep(500);
//4、RGV和输送线反馈
tipsMsg = "正在检测 RGV连接...(" + (++checkIndex) + "/" + checkAllCount + ")";
SetLablelMsg(tipsMsg);
this.Bgw1.ReportProgress(60, tipsMsg);
result6 = this.RgvDection();
Thread.Sleep(500);
tipsMsg = "正在检测 输送线连接...(" + (++checkIndex) + "/" + checkAllCount + ")";
SetLablelMsg(tipsMsg);
this.Bgw1.ReportProgress(70, tipsMsg);
//result7 = this.ConveyorDection();
Thread.Sleep(500);
tipsMsg = "检测完成...(" + (checkIndex) + "/" + checkAllCount + ")";
SetLablelMsg(tipsMsg);
DeviceStats = result1 && result2 && result3 && result4 && result5 && result6 && result7;
this.Bgw1.ReportProgress(100, "检测完成...(" + checkIndex + "/" + checkAllCount + ")");
Thread.Sleep(2000);
this.BtnDection.Enabled = true;
this.btn_Skip.Enabled = true;
}
#region MES检测
private bool MesDection()
{
try
{
////根据MatId取MES那里获取Mat对象,,这里还没写
//MesMatInfo matInfo = new MesMatInfo()
//{
// MatID = "DBCWMJS18_B2",
// MatName = ""
//};
//string resData = new MesWebService.MesWebServiceSoapClient().GetMesMatInfo(JsonConvert.SerializeObject(matInfo));
//ResEntity re = JsonConvert.DeserializeObject(resData);
//if (re.resCode == "1")
//{
// txtMESDec.Invoke(new Action(() => { txtMESDec.BackColor = Color.Salmon; }));
// txtMESDec.Invoke(new Action(() => { txtMESDec.Text = "MES服务检测失败!" + re.resMsg; }));
// return false;
//}
//txtMESDec.Invoke(new Action(() => { txtMESDec.BackColor = Color.LimeGreen; }));
//txtMESDec.Invoke(new Action(() => { txtMESDec.Text = "MES服务检测成功!"; }));
return true;
}
catch (Exception ex)
{
txtMESDec.Invoke(new Action(() => { txtMESDec.BackColor = Color.Salmon; }));
txtMESDec.Invoke(new Action(() => { txtMESDec.Text = "MES服务检测失败!出现异常:" + ex.Message; }));
return false;
}
}
#endregion
#region 堆垛机检测
///
/// 堆垛机检测
///
///
///
///
private bool SrmDection(EDevice deviceId, string msg)
{
TextBox tb = null;
switch (deviceId)
{
case EDevice.一号堆垛机:
tb = txt_Srm1;
break;
case EDevice.二号堆垛机:
tb = txt_Srm2;
break;
}
try
{
var result = false;
string errMsg = "";
int int_deviceId = (int)deviceId;
using (var srmService = new SrmService.SrmServiceClient())
{
var isHandShare = SrmBLL.IsHandShare(srmService, deviceId);
if (!isHandShare)
{
errMsg = deviceId.ToString() + "没有心跳";
tb.Invoke(new Action(() => { tb.BackColor = Color.Salmon; }));
tb.Invoke(new Action(() => { tb.Text = msg + "检测失败!" + errMsg; }));
return false;
}
SdaResEntity sdaResult = srmService.IsReady(int_deviceId, out errMsg);
if (sdaResult.result == false)
{
Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.DataProcess_BZ39_IssueInboundTask, "验证堆垛机是否可以接受任务出现错误,int_deviceId:" + int_deviceId + ",sdaResultStr:" + JsonConvert.SerializeObject(sdaResult));
result = false;
}
else
{
result = true;
}
if (result)
{
tb.Invoke(new Action(() => { tb.BackColor = Color.LimeGreen; }));
tb.Invoke(new Action(() => { tb.Text = msg + "检测成功!"; }));
}
else
{
if (sdaResult.resMsg == ESrmAlarm.无报警.ToString())
{
tb.Invoke(new Action(() => { tb.BackColor = Color.LimeGreen; }));
tb.Invoke(new Action(() => { tb.Text = msg + "检测成功!"; }));
return true;
}
tb.Invoke(new Action(() => { tb.BackColor = Color.Salmon; }));
tb.Invoke(new Action(() => { tb.Text = msg + "检测失败!" + sdaResult.resMsg; }));
return false;
}
return true;
}
}
catch (Exception ex)
{
tb.Invoke(new Action(() => { tb.BackColor = Color.Salmon; }));
tb.Invoke(new Action(() => { tb.Text = msg + "检测失败!" + ex.Message; }));
return false;
}
}
#endregion
#region 桁架、RGV、输送线
///
/// RGV检测
///
///
///
///
private bool RgvDection()
{
var msg = "RGV";
try
{
string errMsg = "";
using (var rgvService = new RgvService.RgvServiceClient())
{
//检测是否有心跳
var isRgvHandShare = RgvBLL.IsRgvHandShare(rgvService);
if (!isRgvHandShare)
{
text_RGV.Invoke(new Action(() => { text_RGV.BackColor = Color.Salmon; }));
text_RGV.Invoke(new Action(() => { text_RGV.Text = msg + "检测失败!RGV没有心跳"; }));
return false;
}
iWareCC.RgvService.SdaResEntity sdaResult = rgvService.IsRgvAuto((int)EDevice.RGV, Convert.ToInt32(EDevice.RGV).ToString());
if (sdaResult.result == false)
{
Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.DataProcess_RobotBuffer_ModeChange, "验证RGV是否可以接受任务出现错误,int_deviceId:" + (int)EDevice.RGV + ",sdaResultStr:" + JsonConvert.SerializeObject(sdaResult));
text_RGV.Invoke(new Action(() => { text_RGV.BackColor = Color.Salmon; }));
text_RGV.Invoke(new Action(() => { text_RGV.Text = msg + "检测失败!" + sdaResult.resMsg; }));
return false;
}
else
{
text_RGV.Invoke(new Action(() => { text_RGV.BackColor = Color.LimeGreen; }));
text_RGV.Invoke(new Action(() => { text_RGV.Text = msg + "检测成功!"; }));
return true;
}
}
}
catch (Exception ex)
{
text_RGV.Invoke(new Action(() => { text_RGV.BackColor = Color.Salmon; }));
text_RGV.Invoke(new Action(() => { text_RGV.Text = msg + "检测失败!" + ex.Message; }));
return false;
}
}
#endregion
#region 通讯测试
private bool DeviceDection(TextBox txt1, TextBox txt2, string strMsg1, string strMsg2)
{
try
{
string _sip = "192.168.1.29";
Ping ping = new Ping();
PingReply pingReply = ping.Send(IPAddress.Parse(_sip));
if (pingReply.Status == IPStatus.Success)
{
txt1.Invoke(new Action(() => { txt1.BackColor = Color.LimeGreen; }));
txt1.Invoke(new Action(() => { txt1.Text = strMsg1 + strOK; }));
if (txt2.Name != txt1.Name)
{
txt2.Invoke(new Action(() => { txt2.BackColor = Color.LimeGreen; }));
txt2.Invoke(new Action(() => { txt2.Text = strMsg2 + strOK; }));
}
return true;
}
else
{
//SysLog.saveLog(strMsg1 + strFail);
txt1.Invoke(new Action(() => { txt1.BackColor = Color.Salmon; }));
txt1.Invoke(new Action(() => { txt1.Text = strMsg1 + strFail; }));
if (txt2.Name != txt1.Name)
{
//SysLog.saveLog(strMsg2 + strFail);
txt2.Invoke(new Action(() => { txt2.BackColor = Color.Salmon; }));
txt2.Invoke(new Action(() => { txt2.Text = strMsg2 + strFail; }));
}
return false;
}
}
catch (Exception ex)
{
//SysLog.saveLog(strMsg1 + strFail + ex);
txt1.Invoke(new Action(() => { txt1.BackColor = Color.Salmon; }));
txt1.Invoke(new Action(() => { txt1.Text = strMsg1 + strFail; }));
if (txt2.Name != txt1.Name)
{
//SysLog.saveLog(strMsg2 + strFail + ex);
txt2.Invoke(new Action(() => { txt2.BackColor = Color.Salmon; }));
txt2.Invoke(new Action(() => { txt2.Text = strMsg2 + strFail; }));
}
return false;
}
}
#endregion
#region 消息赋值
private void SetLablelMsg(string strMsg)
{
lbl_Msg.Invoke(new Action(() => { lbl_Msg.Text = strMsg; }));
}
#endregion
private void Bgw1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e == null)
{
this.DialogResult = DialogResult.OK;
return;
}
if (e.Error != null)
{
MessageBox.Show(e.Error.Message);
}
else if (e.Cancelled)
{
MessageBox.Show("任务取消。");
}
else if (!DeviceStats)
{
//WZ.Useful.Commons.MessageUtil.ShowError("通讯设备检测失败!");
}
else
{
//MessageBox.Show("检测完成!");
this.DialogResult = DialogResult.OK;
}
}
private void Bgw1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
this.pgbDec.Value = e.ProgressPercentage;
}
private void SystemCheckForm_Load(object sender, EventArgs e)
{
this.Bgw1.RunWorkerAsync(); // 运行 backgroundWorker 组件
}
private void BtnDection_Click(object sender, EventArgs e)
{
this.pgbDec.Value = 0;
TxtClear();
this.Bgw1.RunWorkerAsync(); // 运行 backgroundWorker 组件
}
private void TxtClear()
{
TextBox[] txts = new TextBox[] { txt_WCS, txtMESDec, txt_Srm1, txt_Srm2, txt_Truss, txt_Conveyor, text_RGV };
foreach (TextBox txt in txts)
{
string strTxt = txt.Text.ToString().Trim();
txt.BackColor = Color.WhiteSmoke;
txt.Text = strTxt.Contains(strOK) ? strTxt.Substring(0, strTxt.Length - 3) : strTxt;
txt.Text = strTxt.Contains(strFail) ? strTxt.Substring(0, strTxt.Length - 3) : strTxt;
}
}
private void btn_Skip_Click(object sender, EventArgs e)
{
this.DeviceStats = true;
Bgw1_RunWorkerCompleted(null, null);
}
}
}