using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
///
/// 读码完成标记,读取工控机中读取二维码信息
///
public class DataCaptureHandler_OP0502 : DataCaptureHandler
{
public static readonly DataCaptureHandler_OP0502 Instance = new DataCaptureHandler_OP0502();
public DataCaptureHandler_OP0502()
{
}
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)
{
// plc连接
var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
if (plcService == null)
{
SystemValue.lbl_Alert_OP0501 = $"{RandomHelper.GenerateRandomCode(4)} 没有找到{_dataCaptureConfig.WorkingProcedure}的PLC设备";
return;
}
if (plcService != null && !plcService.IsConnected)
{
plcService.Close();
plcService.OpenService();
}
while (true)
{
try
{
if (plcService == null || !plcService.IsConnected)
{
SystemValue.lbl_Alert_OP0502 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
plcService.Close();
plcService.OpenService();
Thread.Sleep(100);
continue;
}
else
{
var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
if (SystemValue.value_OP0502.Equals("0") && value.ToString().Equals("1"))
{
#region 从工控机获取相关二维码
//打码机打码二维码路径
var path = ConfigHelper.GetConfigString("WorkPeiceIDPath");
//扫描共享目录并将新的文件扫描返回 一般节拍在15秒左右(可以确认一下)
var newFiles = FileHelper.DetectNewFilesCSV(path, 10, DateTimeHelper.GetDateTime(), DateTimeHelper.GetDateTime());
foreach (System.IO.FileInfo file in newFiles)
{
DataTable dt = null;
dt = CSVHelper.ReadCSV(file.FullName);
if (dt == null)
{
continue;
}
lock (SystemValue.lock5QRcodeList)
{
#region 清过期缓存
try
{
//清过期缓存
var lstRemoveKey = SystemValue.QRcodeList
.Where(p => p.Value < DateTimeHelper.GetDateTime().AddMinutes(-600))
.Select(p => p.Key).ToList();
if (lstRemoveKey.Count > 0)
{
foreach (var key in lstRemoveKey) SystemValue.QRcodeList.Remove(key);
Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"清除缓存数量:({lstRemoveKey.Count}) 剩余缓存数量:({SystemValue.QRcodeList.Count})");
}
}
catch (Exception ex)
{
Log4NetHelper.WriteErrorLog(LogType.PLCOP05, "清除告警报文ID缓存错误!", ex);
}
#endregion
// 工件号(二维码值)
string WorkPieceID = dt.Rows[0][""].ToString();
if (WorkPieceID.Length != 22)
{
//获取到的工件号异常
SystemValue.lbl_Alert_OP0502 = $"{_dataCaptureConfig.WorkingProcedure}工序读码完成标记,读取工控机中读取二维码信息:【" + WorkPieceID + "】长度异常,长度不等于22位";
Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),
$"{_dataCaptureConfig.WorkingProcedure}工序读码完成标记,读取工控机中读取二维码信息:【" + WorkPieceID + "】长度异常,长度不等于22位");
}
if (SystemValue.QRcodeList.ContainsKey(WorkPieceID))
{
// 存在清理缓存
SystemValue.QRcodeList.Remove(WorkPieceID);
}
else
{
// 不存在反馈PLC
var col = colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode).ToList();
if (col.Count == 0)
{
SystemValue.lbl_Alert_OP0502 = $"{_dataCaptureConfig.WorkingProcedure}工序读码完成标记,读取工控机中读取二维码信息不存在,请先配置数据收集点对于字段表信息!";
Log4NetHelper.WriteErrorLog(LogType.PLCOP05, $"{_dataCaptureConfig.WorkingProcedure}工序读码完成标记,读取工控机中读取二维码信息不存在,请先配置数据收集点对于字段表信息!");
}
plcService.WriteValuePoint(col[0].DbNumber, col[0].Offset, col[0].DataCaptureColumnTabelName);
}
SystemValue.QRcodeList.Add("", DateTimeHelper.GetDateTime());//二维码添加到列表中
//WorkPieceLog wplog = new WorkPieceLog();
//wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
//wplog.WorkingProcedure = WorkingProcedure;
////wplog.EquipmentID = WorkingProcedure;
//wplog.Remarks = WorkingProcedure;
//wplog.MonitoringPoint = DataCapturePointCode;
//wplog.CreatedTime = DateTimeHelper.GetDateTime();
//wplog.CreatedUserName = DataCapturePointCode;
//wplog.UpdatedTime = DateTimeHelper.GetDateTime();
//wplog.UpdatedUserName = DataCapturePointCode;
//wplog.IsDeleted = false;
//wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
//wplog.OnlineTime = DateTimeHelper.GetDateTime();//给上线时间用
//wplog.WorkPieceID = dt.Rows[0][""].ToString();
// 读取二维码后更新数据库
// var info = WorkPieceInfoManager.ReadQRcode(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), plcService, _dataCaptureConfig.IsFeedback);
}
}
#endregion
}
SystemValue.value_OP0502 = value.ToString();
}
}
catch (Exception ex)
{
SystemValue.lbl_Alert_OP0502 = $" {_dataCaptureConfig.WorkingProcedure}工序读码完成标记,读取工控机中读取二维码信息,出现异常,请查看日志!";
Log4NetHelper.WriteErrorLog(LogType.PLCOP05, $" {_dataCaptureConfig.WorkingProcedure}工序读码完成标记,读取工控机中读取二维码信息,出现异常:", ex);
}
//线程多久执行一次(不包含业务处理时间)
if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
{
Thread.Sleep(5000);
}
else
{
Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
}
}
}
else
{
SystemValue.lbl_Alert_OP0502 = $"{_dataCaptureConfig.WorkingProcedure}工序读码完成标记,读取工控机中读取二维码信息,不做校验,请确认配置信息!";
Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"{_dataCaptureConfig.WorkingProcedure}工序读码完成标记,读取工控机中读取二维码信息,不做校验,请确认配置异常");
}
}
}
}