using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
///
/// HML读取
///
public class HMI_WorkpieceReading : DataCaptureHandler
{
public static readonly HMI_WorkpieceReading Instance = new HMI_WorkpieceReading();
///
///
///
public HMI_WorkpieceReading()
{
}
///
///
///
public override string WorkingProcedure
{
get { return _dataCaptureConfig.WorkingProcedure; }
}
///
///
///
public override string DataCapturePointCode
{
get { return _dataCaptureConfig.DataCapturePointCode; }
}
///
///
///
public override string DataCapturePointCname
{
get { return _dataCaptureConfig.DataCapturePointCname; }
}
///
/// 刷新数据列表
///
///
public override void RefreshDataList(List dataCaptureConfig)
{
}
///
/// 清除HMI上显示(二维码不能清)
///
///
public void ClertHMI(PLCService plcService,List colConfig)
{
foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
{
switch (col.DataCaptureColumnTabelName)
{
case "WorkPieceID":
//plcService.WriteValuePointNew(col.DbNumber, col.Offset, info.WorkPieceID);
break;
case "WorkingProcedureCurrent":
plcService.WriteValuePointNew(col.DbNumber, col.Offset, 0);
break;
case "WorkPieceState":
plcService.WriteValuePointNew(col.DbNumber, col.Offset, 0);
break;
case "QualityState":
plcService.WriteValuePointNew(col.DbNumber, col.Offset, 0);
break;
case "QualityErrorInfo":
plcService.WriteValuePointNew(col.DbNumber, col.Offset, 0);
break;
default:
break;
}
}
}
///
/// 数据采集开始
///
public override void DataCaptureStart()
{
if (IsCaptureflag)
{
var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
if (plcService == null)
{
switch (_dataCaptureConfig.DataCapturePointCode)
{
case "RHMIOP104001":
SystemValue.lbl_Alert_HMIOP104001 = $"{RandomHelper.GenerateRandomCode(4)} 没有找到{_dataCaptureConfig.WorkingProcedure}的PLC设备";
break;
case "RHMIOP2001":
SystemValue.lbl_Alert_HMIOP2001 = $"{RandomHelper.GenerateRandomCode(4)} 没有找到{_dataCaptureConfig.WorkingProcedure}的PLC设备";
break;
case "RHMIOP303501":
SystemValue.lbl_Alert_HMIOP303501 = $"{RandomHelper.GenerateRandomCode(4)} 没有找到{_dataCaptureConfig.WorkingProcedure}的PLC设备";
break;
case "RHMIOP5001":
SystemValue.lbl_Alert_HMIOP5001 = $"{RandomHelper.GenerateRandomCode(4)} 没有找到{_dataCaptureConfig.WorkingProcedure}的PLC设备";
break;
case "RHMIOP6001":
SystemValue.lbl_Alert_HMIOP6001 = $"{RandomHelper.GenerateRandomCode(4)} 没有找到{_dataCaptureConfig.WorkingProcedure}的PLC设备";
break;
default:
break;
}
return;
}
if (plcService != null && !plcService.IsConnected)
{
plcService.Close();
plcService.OpenService();
}
while (true)
{
try
{
if (plcService == null || !plcService.IsConnected)
{
SystemValue.lbl_Alert_HMIOP104001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
SystemValue.lbl_Alert_HMIOP2001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
SystemValue.lbl_Alert_HMIOP303501 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
SystemValue.lbl_Alert_HMIOP5001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
SystemValue.lbl_Alert_HMIOP6001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
//switch (_dataCaptureConfig.DataCapturePointCode)
//{
// case "RHMIOP104001":
// SystemValue.lbl_Alert_HMIOP104001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
// break;
// case "RHMIOP2001":
// SystemValue.lbl_Alert_HMIOP2001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
// break;
// case "RHMIOP303501":
// SystemValue.lbl_Alert_HMIOP303501 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
// break;
// case "RHMIOP5001":
// SystemValue.lbl_Alert_HMIOP5001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
// break;
// case "RHMIOP6001":
// SystemValue.lbl_Alert_HMIOP6001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
// break;
// default:
// break;
//}
plcService.Close();
plcService.OpenService();
Thread.Sleep(100);
continue;
}
else
{
SystemValue.lbl_Alert_HMIOP104001 = $" {RandomHelper.GenerateRandomCode(4)}";
SystemValue.lbl_Alert_HMIOP2001 = $" {RandomHelper.GenerateRandomCode(4)}";
SystemValue.lbl_Alert_HMIOP303501 = $" {RandomHelper.GenerateRandomCode(4)}";
SystemValue.lbl_Alert_HMIOP5001 = $" {RandomHelper.GenerateRandomCode(4)}";
SystemValue.lbl_Alert_HMIOP6001 = $" {RandomHelper.GenerateRandomCode(4)}";
object value1 = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, "88", 2, PLCManger.GetTypeForString("int"));
string value2 = value1 == null ? "" : value1.ToString().Trim();
if ("50" .Equals(value2))
{
ClertHMI(plcService, colConfig);
}
else if ("21" .Equals(value2))
{
ClertHMI(plcService, colConfig);
//10:数采读取失败
//11 :数采读取成功
//21:扫码成功标记
plcService.WriteValuePointNew(_dataCaptureConfig.DbNumber, "88", 11);
object value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, _dataCaptureConfig.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
if (value != null)
{
string WorkPieceID = value.ToString().Trim();
//if (WorkPieceID.Length == 22)
if (WorkPieceID.Length>20)
{
// 根据工件号获取工件信息
WorkPieceInfo info = null;
WorkPieceProcess process = null;
using (DbModel db = new DbModel())
{
info = new WorkPieceInfo();
info = db.WorkPieceInfo.Where(o => o.WorkPieceID == WorkPieceID&&o.IsDeleted==false).FirstOrDefault();
process = db.WorkPieceProcess.Where(o => o.WorkPieceID == WorkPieceID &&!o.OperationType.Equals("SPC")&& o.IsDeleted == false)
.OrderByDescending(o=>o.CreatedTime).FirstOrDefault();
}
if (info != null && info.Id > 0)
{
var workProcedure = EnumberHelper.GetEnumForString(info.WorkingProcedureCurrent);
// 把对应的工件信息写入PLC对应地址
foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
{
switch (col.DataCaptureColumnTabelName)
{
case "WorkPieceID":
//plcService.WriteValuePointNew(col.DbNumber, col.Offset, info.WorkPieceID);
break;
case "WorkingProcedureCurrent":
plcService.WriteValuePointNew(col.DbNumber, col.Offset, (int)workProcedure);
break;
case "WorkPieceState":
plcService.WriteValuePointNew(col.DbNumber, col.Offset, info.WorkPieceState);
break;
case "QualityState":
plcService.WriteValuePointNew(col.DbNumber, col.Offset, info.QualityState);
break;
case "ReaderEndState":
plcService.WriteValuePointNew(col.DbNumber, col.Offset, 11);
break;
case "DataSource":
if(process!=null)
{
plcService.WriteValuePointNew(col.DbNumber, col.Offset, process.CreatedUserName?? "Empty");
}
else
{
plcService.WriteValuePointNew(col.DbNumber, col.Offset, "NOSource");
}
break;
default:
break;
}
}
}
else
{
foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
{
switch (col.DataCaptureColumnTabelName)
{
case "ReaderEndState":
plcService.WriteValuePointNew(col.DbNumber, col.Offset, 10);
break;
default:
break;
}
}
switch (_dataCaptureConfig.DataCapturePointCode)
{
case "RHMIOP104001":
SystemValue.lbl_Alert_HMIOP104001 = $"HMI读取监控 二维码值:【" + WorkPieceID + "】在数据库中不存在";
break;
case "RHMIOP2001":
SystemValue.lbl_Alert_HMIOP2001 = $"HMI读取监控 二维码值:【" + WorkPieceID + "】在数据库中不存在";
break;
case "RHMIOP303501":
SystemValue.lbl_Alert_HMIOP303501 = $"HMI读取监控 二维码值:【" + WorkPieceID + "】在数据库中不存在";
break;
case "RHMIOP5001":
SystemValue.lbl_Alert_HMIOP5001 = $"HMI读取监控 二维码值:【" + WorkPieceID + "】在数据库中不存在";
break;
case "RHMIOP6001":
SystemValue.lbl_Alert_HMIOP6001 = $"HMI读取监控 二维码值:【" + WorkPieceID + "】在数据库中不存在";
break;
default:
break;
}
Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"HMI读取监控 二维码值:【" + WorkPieceID + "】在数据库中不存在");
}
}
else if(WorkPieceID.Length > 0)
{
foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
{
switch (col.DataCaptureColumnTabelName)
{
case "ReaderEndState":
plcService.WriteValuePointNew(col.DbNumber, col.Offset, 10);
break;
default:
break;
}
}
switch (_dataCaptureConfig.DataCapturePointCode)
{
case "RHMIOP104001":
SystemValue.lbl_Alert_HMIOP104001 = $"HMI读取监控 二维码值:【" + WorkPieceID + "】长度异常,长度不等于22位";
break;
case "RHMIOP2001":
SystemValue.lbl_Alert_HMIOP2001 = $"HMI读取监控 二维码值:【" + WorkPieceID + "】长度异常,长度不等于22位";
break;
case "RHMIOP303501":
SystemValue.lbl_Alert_HMIOP303501 = $"HMI读取监控 二维码值:【" + WorkPieceID + "】长度异常,长度不等于22位";
break;
case "RHMIOP5001":
SystemValue.lbl_Alert_HMIOP5001 = $"HMI读取监控 二维码值:【" + WorkPieceID + "】长度异常,长度不等于22位";
break;
case "RHMIOP6001":
SystemValue.lbl_Alert_HMIOP6001 = $"HMI读取监控 二维码值:【" + WorkPieceID + "】长度异常,长度不等于22位";
break;
default:
break;
}
Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"HMI读取监控 二维码值:【" + WorkPieceID + "】长度异常,长度不等于22位");
}
}
//else
//{
// foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
// {
// switch (col.DataCaptureColumnTabelName)
// {
// case "ReaderEndState":
// plcService.WriteValuePointNew(col.DbNumber, col.Offset, 10);
// break;
// default:
// break;
// }
// }
//}
}
}
if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
{
Thread.Sleep(1000);
}
else
{
Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
}
}
catch (Exception ex)
{
switch (_dataCaptureConfig.DataCapturePointCode)
{
case "RHMIOP104001":
SystemValue.lbl_Alert_HMIOP104001 = $" {RandomHelper.GenerateRandomCode(4)} 读取{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!";
break;
case "RHMIOP2001":
SystemValue.lbl_Alert_HMIOP2001 = $" {RandomHelper.GenerateRandomCode(4)} 读取{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!";
break;
case "RHMIOP303501":
SystemValue.lbl_Alert_HMIOP303501 = $" {RandomHelper.GenerateRandomCode(4)} 读取{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!";
break;
case "RHMIOP5001":
SystemValue.lbl_Alert_HMIOP5001 = $" {RandomHelper.GenerateRandomCode(4)} 读取{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!";
break;
case "RHMIOP6001":
SystemValue.lbl_Alert_HMIOP6001 = $" {RandomHelper.GenerateRandomCode(4)} 读取{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!";
break;
default:
break;
}
Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {WorkingProcedure}工序HMI读取二维码监控,数据时异常:", ex);
}
}
}
else
{
switch (_dataCaptureConfig.DataCapturePointCode)
{
case "RHMIOP104001":
SystemValue.lbl_Alert_HMIOP104001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 不做数据采集,请确认配置信息!";
break;
case "RHMIOP2001":
SystemValue.lbl_Alert_HMIOP2001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 不做数据采集,请确认配置信息!";
break;
case "RHMIOP303501":
SystemValue.lbl_Alert_HMIOP303501 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 不做数据采集,请确认配置信息!";
break;
case "RHMIOP5001":
SystemValue.lbl_Alert_HMIOP5001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 不做数据采集,请确认配置信息!";
break;
case "RHMIOP6001":
SystemValue.lbl_Alert_HMIOP6001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 不做数据采集,请确认配置信息!";
break;
default:
break;
}
Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{WorkingProcedure}工序HML读取二维码监控 不做数据采集,请确认是否配置异常");
}
}
}
}