using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Data.Entity.Migrations;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace iWare_SCADA_BusinessLogical
{
///
/// HMI写入
///
public class HMI_WorkpieceWrite : DataCaptureHandler
{
public static readonly HMI_WorkpieceWrite Instance = new HMI_WorkpieceWrite();
///
///
///
public HMI_WorkpieceWrite()
{
}
///
///
///
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)
{
}
///
/// 数据采集开始
///
public override void DataCaptureStart()
{
if (IsCaptureflag)
{
var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
if (plcService == null)
{
switch (_dataCaptureConfig.DataCapturePointCode)
{
case "WHMIOP104002":
SystemValue.lbl_Alert_HMIOP104001 = $"{RandomHelper.GenerateRandomCode(4)} 没有找到{_dataCaptureConfig.WorkingProcedure}的PLC设备";
break;
case "WHMIOP2002":
SystemValue.lbl_Alert_HMIOP2001 = $"{RandomHelper.GenerateRandomCode(4)} 没有找到{_dataCaptureConfig.WorkingProcedure}的PLC设备";
break;
case "WHMIOP303502":
SystemValue.lbl_Alert_HMIOP303501 = $"{RandomHelper.GenerateRandomCode(4)} 没有找到{_dataCaptureConfig.WorkingProcedure}的PLC设备";
break;
case "WHMIOP5002":
SystemValue.lbl_Alert_HMIOP5001 = $"{RandomHelper.GenerateRandomCode(4)} 没有找到{_dataCaptureConfig.WorkingProcedure}的PLC设备";
break;
case "WHMIOP6002":
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)
{
switch (_dataCaptureConfig.DataCapturePointCode)
{
case "WHMIOP104002":
SystemValue.lbl_Alert_HMIOP104001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
break;
case "WHMIOP2002":
SystemValue.lbl_Alert_HMIOP2001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
break;
case "WHMIOP303502":
SystemValue.lbl_Alert_HMIOP303501 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
break;
case "WHMIOP5002":
SystemValue.lbl_Alert_HMIOP5001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
break;
case "WHMIOP6002":
SystemValue.lbl_Alert_HMIOP6001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
break;
default:
break;
}
plcService.Close();
plcService.OpenService();
Thread.Sleep(100);
continue;
}
else
{
Object WorkPieceID = null;
Object QualityState = null;
Object CheckUpdate = null;
Object QualityErrorInfo = null;
int UpdateIsOK = 0;
// 把对应的工件信息写入PLC对应地址
foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
{
switch (col.DataCaptureColumnTabelName)
{
case "WorkPieceID":
WorkPieceID = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
break;
case "QualityState":
QualityState = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
break;
case "CheckUpdate":
CheckUpdate = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
//plcService.WriteValuePoint(col.DbNumber, col.Offset, 0, PLCManger.GetTypeForString(col.DataCaptureColumnType));
break;
case "QualityErrorInfo":
QualityErrorInfo = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
break;
case "UpdateIsOK":
UpdateIsOK = col.IsFeedback;
break;
default:
break;
}
}
if ((bool)CheckUpdate)
{
// 读取内容检查
StringBuilder builder = new StringBuilder();
if (WorkPieceID != null)
{
if (WorkPieceID.ToString().Length != 22)
{
builder.AppendLine("工件二维码值:【" + WorkPieceID + "】长度异常,长度不等于22位!");
}
if (QualityState == null)
{
builder.AppendLine("工件二维码值:【" + WorkPieceID + "】质量状态不能为空");
}
else
{
if ((int)QualityState != 1 && (int)QualityState != 2 && (int)QualityState != 3)
{
builder.AppendLine("工件二维码值:【" + WorkPieceID + "】质量状态【" + QualityState + "】错误,只能为1:合格 2:不合格 3:疑似");
}
else if ((int)QualityState == 2 || (int)QualityState == 3)
{
if (QualityErrorInfo == null|| string.IsNullOrEmpty(QualityErrorInfo.ToString()))
{
builder.AppendLine("工件二维码值:【" + WorkPieceID + "】质量不合格原因不能为空");
}
}
}
}
if (!string.IsNullOrEmpty(builder.ToString()))
{
switch (_dataCaptureConfig.DataCapturePointCode)
{
case "WHMIOP104002":
SystemValue.lbl_Alert_HMIOP104001 = $"{WorkingProcedure}工序HML写入监控,数据返回格式异常:" + builder.ToString();
break;
case "WHMIOP2002":
SystemValue.lbl_Alert_HMIOP2001 = $"{WorkingProcedure}工序HML写入监控,数据返回格式异常:" + builder.ToString();
break;
case "WHMIOP303502":
SystemValue.lbl_Alert_HMIOP303501 = $"{WorkingProcedure}工序HML写入监控,数据返回格式异常:" + builder.ToString();
break;
case "WHMIOP5002":
SystemValue.lbl_Alert_HMIOP5001 = $"{WorkingProcedure}工序HML写入监控,数据返回格式异常:" + builder.ToString();
break;
case "WHMIOP6002":
SystemValue.lbl_Alert_HMIOP6001 = $"{WorkingProcedure}工序HML写入监控,数据返回格式异常:" + builder.ToString();
break;
default:
break;
}
// 把对应的工件信息写入PLC对应地址
foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
{
switch (col.DataCaptureColumnTabelName)
{
case "UpdateIsOK":
var aa = plcService.WriteValuePointNew(col.DbNumber, col.Offset, false);
break;
default:
//plcService.WriteValuePoint(col.DbNumber, col.Offset, "", PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
break;
}
}
Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"工序HML写入监控,数据返回格式异常:" + builder.ToString());
continue;
}
// 工件信息
WorkPieceInfo info = null;
// 工件接收信息履历
WorkPieceLog wplog = new WorkPieceLog();
using (DbModel db = new DbModel())
{
info = new WorkPieceInfo();
info = db.WorkPieceInfo.Where(o => o.WorkPieceID == WorkPieceID.ToString()&&o.IsDeleted==false).FirstOrDefault();
if (info == null)
{
switch (_dataCaptureConfig.DataCapturePointCode)
{
case "WHMIOP104002":
SystemValue.lbl_Alert_HMIOP104001 = $"工件{WorkPieceID},{WorkingProcedure}工序HML写入监控时,工件信息表中不存在";
break;
case "WHMIOP2002":
SystemValue.lbl_Alert_HMIOP2001 = $"工件{WorkPieceID},{WorkingProcedure}工序HML写入监控时,工件信息表中不存在";
break;
case "WHMIOP303502":
SystemValue.lbl_Alert_HMIOP303501 = $"工件{WorkPieceID},{WorkingProcedure}工序HML写入监控时,工件信息表中不存在";
break;
case "WHMIOP5002":
SystemValue.lbl_Alert_HMIOP5001 = $"工件{WorkPieceID},{WorkingProcedure}工序HML写入监控时,工件信息表中不存在";
break;
case "WHMIOP6002":
SystemValue.lbl_Alert_HMIOP6001 = $"工件{WorkPieceID},{WorkingProcedure}工序HML写入监控时,工件信息表中不存在";
break;
default:
break;
}
Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"工序HML写入监控,数据返回格式异常:" + builder.ToString());
continue;
}
info.QualityState = Convert.ToInt32(QualityState);
info.QualityStateUpdateUser = "HMI";
info.QualityStateUpdateTime = DateTime.Now;
info.QualityStateUpdateMode = "自动";
info.QualityErrorInfo = QualityErrorInfo.ToString();
// 写入工件接收信息履历
//wplog = CommonManager.Instance.GetWorkPieceID(wplog, LogType.PLCHMI04);
wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
wplog.WorkPieceID = info.WorkPieceID;
wplog.WorkingProcedure = WorkingProcedure;
wplog.EquipmentID = WorkingProcedure;
wplog.Remarks = WorkingProcedure;
wplog.MonitoringPoint = DataCapturePointCode;
wplog.QualityState = Convert.ToInt32(QualityState);
wplog.CreatedTime = DateTimeHelper.GetDateTime();
wplog.CreatedUserName = DataCapturePointCode;
wplog.IsDeleted = false;
db.WorkPieceLog.Add(wplog);
db.SaveChanges();
}
if (UpdateIsOK == 1)
{
// 把对应的工件信息写入PLC对应地址
foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
{
switch (col.DataCaptureColumnTabelName)
{
case "UpdateIsOK":
var aa = plcService.WriteValuePointNew(col.DbNumber, col.Offset, true);
break;
//case "WorkPieceID":
// plcService.WriteValuePointNew(col.DbNumber, col.Offset, "");
// break;
default:
//plcService.WriteValuePoint(col.DbNumber, col.Offset, "", PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
break;
}
}
}
}
}
if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
{
Thread.Sleep(5000);
}
else
{
Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
}
}
catch (Exception ex)
{
foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
{
switch (col.DataCaptureColumnTabelName)
{
case "UpdateIsOK":
var aa = plcService.WriteValuePointNew(col.DbNumber, col.Offset, true);
break;
default:
break;
}
}
switch (_dataCaptureConfig.DataCapturePointCode)
{
case "WHMIOP104002":
SystemValue.lbl_Alert_HMIOP104001 = $" {RandomHelper.GenerateRandomCode(4)} 读取{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!";
break;
case "WHMIOP2002":
SystemValue.lbl_Alert_HMIOP2001 = $" {RandomHelper.GenerateRandomCode(4)} 读取{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!";
break;
case "WHMIOP303502":
SystemValue.lbl_Alert_HMIOP303501 = $" {RandomHelper.GenerateRandomCode(4)} 读取{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!";
break;
case "WHMIOP5002":
SystemValue.lbl_Alert_HMIOP5001 = $" {RandomHelper.GenerateRandomCode(4)} 读取{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!";
break;
case "WHMIOP6002":
SystemValue.lbl_Alert_HMIOP6001 = $" {RandomHelper.GenerateRandomCode(4)} 读取{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!";
break;
default:
break;
}
Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {WorkingProcedure}工序HML写入监控,数据时异常:", ex);
}
}
}
else
{
switch (_dataCaptureConfig.DataCapturePointCode)
{
case "WHMIOP104002":
SystemValue.lbl_Alert_HMIOP104001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 不做数据采集,请确认配置信息!";
break;
case "WHMIOP2002":
SystemValue.lbl_Alert_HMIOP2001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 不做数据采集,请确认配置信息!";
break;
case "WHMIOP303502":
SystemValue.lbl_Alert_HMIOP303501 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 不做数据采集,请确认配置信息!";
break;
case "WHMIOP5002":
SystemValue.lbl_Alert_HMIOP5001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 不做数据采集,请确认配置信息!";
break;
case "WHMIOP6002":
SystemValue.lbl_Alert_HMIOP6001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 不做数据采集,请确认配置信息!";
break;
default:
break;
}
Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{WorkingProcedure}工序HML写入监控, 不做校验,请确认是否配置异常");
}
}
}
}