using iWare.Wms.Core;
|
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
|
{
|
/// <summary>
|
/// HMI写入
|
/// </summary>
|
public class HMI_WorkpieceWrite : DataCaptureHandler
|
{
|
public static readonly HMI_WorkpieceWrite Instance = new HMI_WorkpieceWrite();
|
|
/// <summary>
|
///
|
/// </summary>
|
public HMI_WorkpieceWrite()
|
{
|
|
}
|
|
/// <summary>
|
///
|
/// </summary>
|
public override string WorkingProcedure
|
{
|
get { return _dataCaptureConfig.WorkingProcedure; }
|
}
|
|
/// <summary>
|
///
|
/// </summary>
|
public override string DataCapturePointCode
|
{
|
get { return _dataCaptureConfig.DataCapturePointCode; }
|
}
|
|
/// <summary>
|
///
|
/// </summary>
|
public override string DataCapturePointCname
|
{
|
get { return _dataCaptureConfig.DataCapturePointCname; }
|
}
|
|
/// <summary>
|
/// 刷新数据列表
|
/// </summary>
|
/// <param name="dataCaptureConfig"></param>
|
public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
|
{
|
|
}
|
|
/// <summary>
|
/// 数据采集开始
|
/// </summary>
|
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;
|
Object WorkingProcedureInt = null;
|
string WorkingProcedureCurrent = "";
|
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));
|
|
if ((bool)CheckUpdate)
|
{
|
var check = plcService.WriteValuePointNew(col.DbNumber, col.Offset, false);
|
}
|
//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;
|
case "WorkingProcedureCurrent":
|
WorkingProcedureInt = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
|
|
WorkingProcedureCurrent = EnumberHelper.GetEnumName<WorkingProcedureForHMI>((int)WorkingProcedureInt).ToString();
|
break;
|
|
default:
|
break;
|
}
|
}
|
|
if ((bool)CheckUpdate)
|
{
|
// 读取内容检查
|
StringBuilder builder = new StringBuilder();
|
if (WorkPieceID != null)
|
{
|
if (WorkPieceID.ToString().Trim().Length == 0)
|
{
|
builder.AppendLine("工件二维码值:【" + WorkPieceID.ToString().Trim() + "】长度异常,长度不等于22位!");
|
}
|
//if (WorkPieceID.ToString().Length != 22)
|
//{
|
// builder.AppendLine("工件二维码值:【" + WorkPieceID.ToString().Trim() + "】长度异常,长度不等于22位!");
|
//}
|
|
if (WorkingProcedureCurrent.Length < 4)
|
{
|
builder.AppendLine("工件工序:【" + WorkingProcedureInt + "】长度异常,不在约定枚举范围内!");
|
}
|
|
|
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;
|
}
|
|
plcService.WriteValuePointNew(_dataCaptureConfig.DbNumber, "88", 30);
|
//// 把对应的工件信息写入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;
|
}
|
plcService.WriteValuePointNew(_dataCaptureConfig.DbNumber, "88", 30);
|
|
Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"工序HML写入监控,数据返回格式异常:" + builder.ToString());
|
continue;
|
}
|
|
QualityStateEnum qualityStateEnum = (QualityStateEnum)Enum.Parse(typeof(QualityStateEnum), QualityState.ToString());
|
|
info.QualityState = Convert.ToInt32(QualityState);
|
if (qualityStateEnum == QualityStateEnum.OK)
|
{
|
info.QualityNoOk = 0;//清理不合格原因 【Editby shaocx,2024-12-19】
|
info.QualityNoOkReason = "";
|
}
|
info.QualityStateUpdateUser = "HMI";
|
info.QualityStateUpdateTime = DateTime.Now;
|
info.QualityStateUpdateMode = Environment.MachineName + "自动";
|
info.QualityErrorInfo = QualityErrorInfo.ToString();
|
if (!info.WorkingProcedureCurrent.Equals(WorkingProcedureCurrent))
|
{
|
info.Remarks = ($"HMI修改工序{info.WorkingProcedureCurrent}到{WorkingProcedureCurrent}");
|
info.WorkingProcedureCurrent = WorkingProcedureCurrent;
|
info.WorkingProcedureCurrent = WorkingProcedureCurrent;
|
}
|
|
|
// 写入工件接收信息履历
|
////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;
|
//wplog.OnlineTime = info.WorkPieceinitOnlineTime;
|
|
wplog = EntityPropHelper.Mapper<WorkPieceLog, WorkPieceInfo>(info);
|
wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
|
|
//1:合格 2:不合格 3:疑似"
|
|
wplog.Remarks = $"HMI更新工件质量信息,修改为[{qualityStateEnum.ToString()}]";
|
wplog.PieceLogType = (int)PieceLogTypeEnum.HMI修改质量状态;
|
wplog.PieceLogTypeName = PieceLogTypeEnum.HMI修改质量状态.ToString();
|
wplog.OnlineTime = info.WorkPieceinitOnlineTime;
|
|
if (qualityStateEnum == QualityStateEnum.OK)
|
{
|
wplog.QualityNoOk = 0;//清理不合格原因 【Editby shaocx,2024-12-19】
|
wplog.QualityNoOkReason = "";
|
}
|
|
db.WorkPieceLog.Add(wplog);
|
db.WorkPieceInfoLog.Add(WorkPieceInfoManager.GetAddWorkPieceInfoLog(info));
|
db.SaveChanges();
|
}
|
|
|
|
plcService.WriteValuePointNew(_dataCaptureConfig.DbNumber, "88", 31);
|
//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)
|
{
|
|
plcService.WriteValuePointNew(_dataCaptureConfig.DbNumber, "88", 30);
|
//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:
|
// 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写入监控, 不做校验,请确认是否配置异常");
|
}
|
}
|
}
|
}
|