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
|
{
|
/// <summary>
|
/// HML读取
|
/// </summary>
|
public class HMI_WorkpieceReading : DataCaptureHandler
|
{
|
public static readonly HMI_WorkpieceReading Instance = new HMI_WorkpieceReading();
|
|
/// <summary>
|
///
|
/// </summary>
|
public HMI_WorkpieceReading()
|
{
|
}
|
|
/// <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 "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();
|
if ("21" .Equals(value2))
|
{
|
//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)
|
{
|
// 根据工件号获取工件信息
|
WorkPieceInfo info = null;
|
using (DbModel db = new DbModel())
|
{
|
info = new WorkPieceInfo();
|
info = db.WorkPieceInfo.Where(o => o.WorkPieceID == WorkPieceID&&o.IsDeleted==false).FirstOrDefault();
|
}
|
|
if (info != null && info.Id > 0)
|
{
|
// 把对应的工件信息写入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, info.WorkingProcedureCurrent);
|
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;
|
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
|
{
|
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读取二维码监控 不做数据采集,请确认是否配置异常");
|
}
|
}
|
}
|
}
|