|
|
using Admin.Core.IService;
|
|
|
using Admin.Core.Model;
|
|
|
using Aucma.Core.HwPLc;
|
|
|
using log4net;
|
|
|
|
|
|
/// <summary>
|
|
|
/// 灌注数据采集
|
|
|
/// </summary>
|
|
|
namespace Aucma.Core.Tasks
|
|
|
{
|
|
|
public class Job_PerfusionTask
|
|
|
{
|
|
|
private static readonly log4net.ILog log = LogManager.GetLogger(typeof(Job_PerfusionTask));
|
|
|
protected readonly IBaseOrderInfoServices _baseOrderInfoServices;
|
|
|
protected readonly IPerfusionDeviceStatusServices _perfusionDeviceStatusServices;
|
|
|
protected readonly IPerfusionAlarmServices _perfusionAlarmServices;
|
|
|
protected readonly IPerfusionRecordServices _perfusionRecordServices;
|
|
|
|
|
|
public Job_PerfusionTask(IPerfusionDeviceStatusServices perfusionDeviceStatusServices, IPerfusionAlarmServices perfusionAlarmServices,
|
|
|
IPerfusionRecordServices perfusionRecordServices)
|
|
|
{
|
|
|
_perfusionDeviceStatusServices = perfusionDeviceStatusServices;
|
|
|
_perfusionAlarmServices = perfusionAlarmServices;
|
|
|
_perfusionRecordServices = perfusionRecordServices;
|
|
|
}
|
|
|
public async Task Execute()
|
|
|
{
|
|
|
await SaveDbRun();
|
|
|
await DeviceStatusRun();
|
|
|
}
|
|
|
|
|
|
#region 检测设备状态
|
|
|
private async Task DeviceStatusRun()
|
|
|
{
|
|
|
var obj = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("PerfusionPlc"));
|
|
|
if (obj.plc.IsConnected)
|
|
|
{
|
|
|
var status = obj.plc.ReadInt32("DB55.46.0");//设备状态;1运行、2停机、3故障
|
|
|
//更新灌注设备状态
|
|
|
var deviceStatus = await _perfusionDeviceStatusServices.FirstAsync();
|
|
|
deviceStatus.PerfusionStatus = status;
|
|
|
await _perfusionDeviceStatusServices.UpdateAsync(deviceStatus);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
log.Error("灌注PLC连接异常!");
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 保存灌注数据
|
|
|
public async Task SaveDbRun()
|
|
|
{
|
|
|
string alarmName = string.Empty;
|
|
|
var obj = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("PerfusionPlc"));
|
|
|
if (obj.plc.IsConnected)
|
|
|
{
|
|
|
var endSignal = obj.plc.ReadInt16("DB55.44.0");//任务结束信号存盘
|
|
|
/*
|
|
|
* 8:正常结束,充注成功
|
|
|
* 4:异常结束,充注不成功
|
|
|
* */
|
|
|
if (endSignal == 8)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
var barCode = obj.plc.ReadString("DB55.20.0");//箱体条码
|
|
|
var perfusionRecord = await _perfusionRecordServices.FirstAsync(d=>d.PerfusionBoxCode.Equals(barCode));
|
|
|
if (perfusionRecord == null) return;
|
|
|
|
|
|
var refrigerantTypeLeft = obj.plc.ReadString("DB55.58.0");//冷媒类型——左侧冷媒型号
|
|
|
var refrigerantTypeRight = obj.plc.ReadString("DB55.68.0");//冷媒类型——右侧冷媒型号
|
|
|
var setVolume = obj.plc.ReadDouble("DB55.78.0");//设定灌注量
|
|
|
var actualVolume = obj.plc.ReadDouble("DB55.0.0");//实际灌注量
|
|
|
var pressureR = obj.plc.ReadDouble("DB55.8.0");//灌注压力——灌注压力_R
|
|
|
var pressureL = obj.plc.ReadDouble("DB55.50.0");//灌注压力——灌注压力_L
|
|
|
var duration = obj.plc.ReadInt16("DB55.12.0");//灌注时长
|
|
|
var system = obj.plc.ReadInt32("DB55.82.0");//0,右系统 1,左系统
|
|
|
|
|
|
Perfusion_Record record = new Perfusion_Record();
|
|
|
record.PerfusionBoxCode = barCode;
|
|
|
record.PerfusionRefrigerantTypeLeft = refrigerantTypeLeft;
|
|
|
record.PerfusionRefrigerantTypeRight = refrigerantTypeRight;
|
|
|
record.PerfusionSetVolume = setVolume.ToString();
|
|
|
record.PerfusionActualVolume = actualVolume.ToString();
|
|
|
record.PerfusionR = pressureR.ToString();
|
|
|
record.PerfusionL = pressureL.ToString();
|
|
|
record.PerfusionDuration = duration.ToString();
|
|
|
record.PerfusionSystem = system.ToString();
|
|
|
|
|
|
var r = await _perfusionRecordServices.AddAsync(record);
|
|
|
if (r > 0)
|
|
|
{
|
|
|
//数据采集完成设为2
|
|
|
obj.plc.WriteInt32("DB55.44.0", 2);//应答字:1数据采集,2存盘成功
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
log.Error($"存盘数据失败,箱体码[{barCode}]");
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
log.Error(ex.Message);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
/*
|
|
|
*2:充注枪真空不合格
|
|
|
*4:充注故障
|
|
|
*8:充注时真空度超限定
|
|
|
*16:回升检测不合格
|
|
|
*32:工件真空不合格
|
|
|
*64:平衡缸接近开关异常
|
|
|
*128:增压超时
|
|
|
*256:风压不足
|
|
|
* */
|
|
|
if (endSignal == 4)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
var barCode = obj.plc.ReadString("DB55.20.0");//箱体条码
|
|
|
var perfusionAlarm = await _perfusionAlarmServices.FirstAsync(d => d.PerfusionBoxcode.Equals(barCode));
|
|
|
if (perfusionAlarm != null) return;
|
|
|
|
|
|
var alarm = obj.plc.ReadInt32("DB55.48.0");
|
|
|
//保存到异常任务表中,通知返修检测
|
|
|
switch (alarm)
|
|
|
{
|
|
|
case 0:
|
|
|
alarmName = "充注枪真空不合格";
|
|
|
break;
|
|
|
case 4:
|
|
|
alarmName = "充注故障";
|
|
|
break;
|
|
|
case 8:
|
|
|
alarmName = "充注时真空度超限定";
|
|
|
break;
|
|
|
case 16:
|
|
|
alarmName = "回升检测不合格";
|
|
|
break;
|
|
|
case 32:
|
|
|
alarmName = "工件真空不合格";
|
|
|
break;
|
|
|
case 64:
|
|
|
alarmName = "平衡缸接近开关异常";
|
|
|
break;
|
|
|
case 128:
|
|
|
alarmName = "增压超时";
|
|
|
break;
|
|
|
case 256:
|
|
|
alarmName = "风压不足";
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
Perfusion_Alarm alarm1 = new Perfusion_Alarm();
|
|
|
alarm1.PerfusionBoxcode = barCode;
|
|
|
alarm1.PerfusionStatus = (short)alarm;
|
|
|
alarm1.PerfusionAlarm = alarmName;
|
|
|
alarm1.PerfusionCompleted = "1";//异常取消
|
|
|
await _perfusionAlarmServices.AddAsync(alarm1);
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
log.Error(ex.Message);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
}
|
|
|
}
|