using MaterialTraceability.Common;
using MaterialTraceability.Entity.DAO;
using MaterialTraceability.Entity.DTO;
using MaterialTraceability.Entity.Enum;
using MaterialTraceability.Entity.UpLoad;
using MaterialTraceability.SqlSugar;
using MaterialTraceability.SqlSugar.ServiceImpl;
using MaterialTraceability.WebService;
using MaterialTraceability.WebService.GetParametricValueServiceService;
using MaterialTraceability.WebService.MachineIntegrationServiceService;
using MaterialTraceability.WebService.MiBatchCompleteSfcAndAdujustQtyServiceService;
using MaterialTraceability.WebService.MiFirstOperationForsfcServiceService;
using MaterialTraceability.WebService.Param;
using MaterialTraceability.WebService.ProcessLotServiceWSService;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MaterialTraceability.Business.Impl
{
public class LYSignalReadBusiness : ISignalReadFunction
{
///
/// INIFile配置文件
///
private INIFile inifile = new INIFile(System.Environment.CurrentDirectory + "/MesConfig/App.InI");
private AppConfigDto appConfig = AppConfigDto.Instance;
///
/// 日志刷新
///
/// 日志内容
///
public delegate void LogRefresh(LogType logType, string massage);
public static event LogRefresh LogRefreshEvent;
///
/// 视图层数据刷新
///
///
public delegate void ViewModelRefresh(ViewModelDto viewModelDto);
public static event ViewModelRefresh ViewModelRefreshEvent;
///
/// PLC信号事件
///
///
///
public delegate void SignalReadInvoke(int status, int position);
///
/// RFID读写器业务
///
private EquipBusiness equipBusiness = new EquipBusiness();
///
/// Mes WebService接口
///
private IMesWebServices MesWebServices = new MesWebServicesImpl();
//卷轴信息
private IBaseServices shaftInfoServices = new BaseServices();
//收卷记录
private IBaseServices downRecordServices = new BaseServices();
//上料记录
private IBaseServices upRecordServices = new BaseServices();
private IBaseServices sysClientServices = new BaseServices();
private MesAlarmInfo mesAlarmInfo = new MesAlarmInfo();
private PlcBusiness plcBusiness = new PlcBusiness();
private UpLoadBusiness upLoadBusiness = UpLoadBusiness.Instance;
///add by yinzf
///
///
///
///
public void UpBegin(int position)
{
}
//end add
///
/// 放卷涨紧
///
///
public void UpMaterialBegin(int position)
{
try
{
#region 未登录不让放卷涨紧生产,便于记录生产者
/*if (StringExtension.IsBlank(ConfigHelper.GetConfig("roleId")))
{
MessageBox.Show("请先登录再开始生产");
LogHelper.Info("请先登录再开始生产");
LogRefreshEvent?.Invoke(LogType.AlarmLog, "请先登录再开始生产");
return;
}*/
#endregion
LogRefreshEvent?.Invoke(LogType.PlcLog, "冷压放卷位涨紧信号触发成功");
LogRefreshEvent?.Invoke(LogType.RfidLog, "冷压放卷位涨紧信号触发成功");
LogHelper.Info("冷压放卷位涨紧信号触发成功");
//读取卷筒RFID物料信息
ProEquip proEquip = equipBusiness.Equiplist.Where(x => x.positionId == position).FirstOrDefault();
if (proEquip == null)
{
LogRefreshEvent?.Invoke(LogType.AlarmLog, "获取放卷位读写器设备信息异常");
return;
}
string epc = equipBusiness.ReadEPCByAntana(proEquip.equipId);
epc = epc.Replace("\0", "").Trim();
SaveReadRecord(proEquip, epc);
if (StringExtension.IsBlank(epc))
{
plcBusiness.writePlc(appConfig.LyAddress.RFID异常, 1);
LogHelper.Info("放卷位RFID条码信息读取失败,下发PLC报警D6024写1");
LogRefreshEvent?.Invoke(LogType.AlarmLog, "放卷位RFID条码信息读取失败");
ViewModelRefreshEvent?.Invoke(new ViewModelDto()
{
rfidInfo = new RfidInfoDto()
{
rfid = "",
sfc = "",
ea = "",
position = position,
},
plcStatus = true,
});
return;
}
LogHelper.Info(String.Format("放卷位RFID条码信息读取成功:{0}", epc));
LogRefreshEvent?.Invoke(LogType.RfidLog, String.Format("放卷位RFID条码信息读取成功,RFID为{0}", epc));
//判断RFID标签是否重复
LogHelper.Info("判断RFID标签是否重复");
if (BusinessHelper.UpRfidIsRecur(epc, position).Result)
{
//判断是否已经生产结束
if (UpMaterialIsEndProduction(epc).Result)
{
plcBusiness.writePlc(appConfig.LyAddress.RFID异常, 1);
LogRefreshEvent?.Invoke(LogType.AlarmLog, String.Format("当前读取的RFID:{0},已经生产结束不允许再次上料", epc));
LogHelper.Info(String.Format("当前读取的RFID:{0},已经生产结束不允许再次上料", epc));
return;
}
else
{
Expression> exp = s1 => true;
Expression> order = (x) => x.RecordTime;
ProUpRecord upRecord = upRecordServices.QueryFirst(exp, order, false).Result;
if (upRecord != null)
{
PlcBusiness.writeStrPlc(appConfig.LyAddress.放卷SFC, upRecord.Sfc);
ViewModelRefreshEvent?.Invoke(new ViewModelDto()
{
rfidInfo = new RfidInfoDto()
{
rfid = epc,
sfc = upRecord.Sfc,
position = position,
},
plcStatus = true,
});
}
LogHelper.Info("放卷位RFID读取到的条码:" + epc + "与前一读取相同并且生产未结束,可以继续生产");
LogRefreshEvent?.Invoke(LogType.RfidLog, "放卷位RFID读取到的条码:" + epc + "与前一读取相同并且生产未结束,可以继续生产");
LogHelper.Info("冷压放卷流程处理成功,D6014写0");
plcBusiness.writePlc(appConfig.LyAddress.放卷OK, 0);
return;
}
}
//读取数据刷新
ViewModelRefreshEvent?.Invoke(new ViewModelDto()
{
rfidInfo = new RfidInfoDto()
{
rfid = epc,
//sfc = "",
position = position,
},
plcStatus = true,
});
MesBegin(position, epc, true);
}
catch (Exception ex)
{
LogHelper.Error("冷压放卷涨紧逻辑处理异常", ex);
LogRefreshEvent?.Invoke(LogType.AlarmLog, "冷压放卷涨紧逻辑处理异常" + ex.Message);
}
}
///
/// 放卷结束
///
///
public async void UpMaterialEnd(int position)
{
try
{
LogRefreshEvent?.Invoke(LogType.PlcLog, "冷压放卷位结束信号触发成功");
LogRefreshEvent?.Invoke(LogType.RfidLog, "冷压放卷位结束信号触发成功");
LogHelper.Info("冷压放卷位结束信号触发成功");
ProShaftInfo shaftInfo = await this.GetShaftInfoByPosition(position);
if (shaftInfo == null)
{
LogRefreshEvent?.Invoke(LogType.RfidLog, "放卷结束,获取卷轴绑定的信息为空");
return;
}
Expression> upExp = s1 => true;
upExp = upExp.And(x => x.Sfc == shaftInfo.bindSfc && x.Rfid == shaftInfo.bindRfid && x.IsProduction == 0);
Expression> upOrder = (x) => x.RecordTime;
ProUpRecord upRecord = await upRecordServices.QueryFirst(upExp, upOrder, false);
if (upRecord == null)
{
LogRefreshEvent?.Invoke(LogType.AlarmLog, "放卷结束,获取上料信息为空");
return;
}
//清空绑定信息
//shaftInfo.bindSfc = String.Empty;
//shaftInfo.bindRfid = String.Empty;
//shaftInfo.bindEaValue = String.Empty;
//await shaftInfoServices.Update(shaftInfo);
//LogRefreshEvent?.Invoke(LogType.RfidLog, "放卷结束,清除卷轴绑定信息");
LogRefreshEvent?.Invoke(LogType.RfidLog, "获取当前正在生产的收卷轴");
if (PlcBusiness.readPlc(appConfig.LyAddress.收卷1A状态) == 1) UpdateShaftEndFlag(1);
if (PlcBusiness.readPlc(appConfig.LyAddress.收卷1B状态) == 1) UpdateShaftEndFlag(2);
if (PlcBusiness.readPlc(appConfig.LyAddress.收卷2A状态) == 1) UpdateShaftEndFlag(3);
if (PlcBusiness.readPlc(appConfig.LyAddress.收卷2B状态) == 1) UpdateShaftEndFlag(4);
//更新放卷信息
upRecord.endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
upRecord.IsProduction = 1;
upRecord.isFinish = 1;
await upRecordServices.Update(upRecord);
LogRefreshEvent?.Invoke(LogType.RfidLog, "生成放卷信息");
upLoadBusiness.UpdateUpRecord(upRecord);
}
catch (Exception ex)
{
LogHelper.Error("冷压放卷位结束逻辑处理异常", ex);
LogRefreshEvent?.Invoke(LogType.AlarmLog, "冷压放卷位结束逻辑处理异常" + ex.Message);
}
}
///
/// 收卷涨紧
///
///
public async void DownMaterialBegin(int position)
{
#region 参数定义
List proEquips = new List();
List positionList = PositionToList(position);
List tagInfoList = new List();
string logStr = Which(position);
#endregion
try
{
LogRefreshEvent?.Invoke(LogType.PlcLog, logStr + "收卷位涨紧信号触发成功");
LogRefreshEvent?.Invoke(LogType.RfidLog, logStr + "收卷位涨紧信号触发成功");
LogHelper.Info(logStr + "收卷位涨紧信号触发成功");
if (StringExtension.IsBlank(PlcBusiness.readStrPlc(appConfig.LyAddress.放卷SFC, 32)))
{
LogRefreshEvent?.Invoke(LogType.AlarmLog, "放卷位物料信息为空,先触发放卷位物料信息");
return;
}
LogRefreshEvent?.Invoke(LogType.RfidLog, String.Format("开始读取{0}卷筒RFID物料信息", logStr));
List positionTag = equipBusiness.ReadEPCByAntanaGroup(positionList);
foreach (var item in positionList)
{
if (item == 1) logStr = "1A轴小天线";
if (item == 2) logStr = "1A轴大天线";
if (item == 3) logStr = "1B轴大天线";
if (item == 4) logStr = "1B轴小天线";
if (item == 5) logStr = "2A轴小天线";
if (item == 6) logStr = "2A轴大天线";
if (item == 7) logStr = "2B轴大天线";
if (item == 8) logStr = "2B轴小天线";
string epc = "";
//add by wenjy 判断读取结果是否为null 20220825
if (positionTag != null)
{
foreach (var Tag in positionTag)
{
if (Tag.position == item)
{
epc = Tag.EPC;
break;
}
}
}
//epc = System.Guid.NewGuid().ToString("N").Substring(0, 14);
LogRefreshEvent?.Invoke(LogType.RfidLog, logStr + "读到标签条码信息:" + epc);
epc = epc.Replace("\0", "").Trim();
SaveReadRecord(new ProEquip() {
machineId = appConfig.machineId,
positionId = position,
equipId = appConfig.machineId,
equipAnt = position.ToString(),
}, epc);
if (StringExtension.IsBlank(epc))
{
LogHelper.Info(logStr + "读取RFID条码信息失败");
LogRefreshEvent?.Invoke(LogType.AlarmLog, logStr + "读取RFID条码信息失败");
sendError(position, 2, false, 1);
ViewModelRefreshEvent?.Invoke(new ViewModelDto()
{
rfidInfo = new RfidInfoDto()
{
rfid = "",
sfc = "",
ea = "",
position = item,
},
plcStatus = true,
});
continue;
}
LogHelper.Info(logStr + "读取RFID条码信息成功:" + epc);
LogRefreshEvent?.Invoke(LogType.RfidLog, logStr + "读取RFID条码信息成功:" + epc);
//判断是否串读 Add by wenjy 2022-10-05
if (PdRfidIsChuanDu(epc, item).Result)
{
sendError(position, 2, false, 1);
LogHelper.Info(logStr + "RFID条码" + epc + "已存在其它位置,检查是否重复");
LogRefreshEvent?.Invoke(LogType.AlarmLog, logStr + "RFID条码" + epc + "已存在其它位置,检查是否重复");
continue;
}
ViewModelRefreshEvent?.Invoke(new ViewModelDto()
{
rfidInfo = new RfidInfoDto()
{
rfid = epc,
position = item,
},
plcStatus = true,
});
tagInfoList.Add(epc);
//绑定卷轴与物料信息
ProShaftInfo shaftInfo = await this.GetShaftInfoByPosition(item);
if (shaftInfo == null)
{
LogRefreshEvent?.Invoke(LogType.RfidLog, "绑定卷轴与物料信息,获取卷轴信息为空");
LogRefreshEvent?.Invoke(LogType.AlarmLog, "绑定卷轴与物料信息,获取卷轴信息为空");
LogHelper.Info("绑定卷轴与物料信息,获取卷轴信息为空");
continue;
}
shaftInfo.bindRfid = epc;
shaftInfo.bindTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
shaftInfo.endFlag = 0;
await shaftInfoServices.Update(shaftInfo);
LogHelper.Info(String.Format("{0}绑定RFID条码信息:{1}", logStr, epc));
//判断RFID标签是否重复
LogHelper.Info("判断RFID标签是否重复");
if (BusinessHelper.DownRfidIsRecur(epc, item).Result)
{
LogHelper.Info(logStr + "RFID读取到的条码:" + epc + "与前一读取相同不做MES处理");
LogRefreshEvent?.Invoke(LogType.RfidLog, logStr + "RFID读取到的条码:" + epc + "与前一读取相同不做MES处理");
LogRefreshEvent?.Invoke(LogType.AlarmLog, logStr + "RFID读取到的条码:" + epc + "与前一读取相同不做MES处理");
continue;
}
//解绑RFID与SFC的绑定信息
LogHelper.Info("解绑RFID条码" + epc + "绑定的SFC信息");
LogRefreshEvent?.Invoke(LogType.RfidLog, logStr + "解绑RFID条码:" + epc + "绑定的SFC信息");
this.UnBindRfidAndSfc(epc);
//添加下料记录
ProDownRecord downRecord = new ProDownRecord()
{
Id = System.Guid.NewGuid().ToString("N"),
MachineId = appConfig.machineId,
PositionId = item,
Rfid = epc,
IsProduction = 0,
beginTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
RecordTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
};
await downRecordServices.Add(downRecord);
upLoadBusiness.SaveDownRecord(downRecord);
}
LogHelper.Info(String.Format("收卷流程处理完成,判断读取结果是否OK,位置:{0},标签数量:{1},条码信息:{2}", position, tagInfoList.Count, JsonChange.ModeToJson(tagInfoList)));
if (ConfigHelper.GetConfig("tagAmount") == "2")
{
if (tagInfoList.Count == 1)
{
LogHelper.Info("收卷位涨紧流程处理完工,下发OK信号");
this.sendSuccessByDownBegin(position);
}
}
else if (ConfigHelper.GetConfig("tagAmount") == "3")
{
if (position < 3)
{
if (tagInfoList.Count == 2)
{
LogHelper.Info("收卷位涨紧流程处理完工,下发OK信号");
this.sendSuccessByDownBegin(position);
}
}
else
{
if (tagInfoList.Count == 1)
{
LogHelper.Info("收卷位涨紧流程处理完工,下发OK信号");
this.sendSuccessByDownBegin(position);
}
}
}
else if (ConfigHelper.GetConfig("tagAmount") == "4")
{
if (tagInfoList.Count == 2)
{
LogHelper.Info("收卷位涨紧流程处理完工,下发OK信号");
this.sendSuccessByDownBegin(position);
}
}
}
catch (Exception ex)
{
LogHelper.Error("冷压收卷涨紧信号逻辑处理异常", ex);
LogRefreshEvent?.Invoke(LogType.AlarmLog, "冷压收卷涨紧信号逻辑处理异常" + ex.Message);
}
finally
{
tagInfoList = new List();
}
}
///
/// 收卷结束
///
///
public async void DownMaterialEnd(int position)
{
#region 参数定义
List shaftInfos = new List();
List positionList = PositionToList(position);
string logStr = Which(position);
int realEaValue = 0;
#endregion
try
{
LogRefreshEvent?.Invoke(LogType.PlcLog, logStr + "收卷结束信号触发成功");
LogRefreshEvent?.Invoke(LogType.RfidLog, logStr + "收卷结束信号触发成功");
LogHelper.Info(logStr + "收卷结束信号触发成功");
//通过PLC读取收卷轴绑定的放卷位SFC信息
ProShaftInfo upMaterialInfo = new ProShaftInfo();
if (position == 1) upMaterialInfo.bindSfc = PlcBusiness.readStrPlc(appConfig.LyAddress.收卷1ASFC, (ushort)18).Replace("\0", "").Trim();
if (position == 2) upMaterialInfo.bindSfc = PlcBusiness.readStrPlc(appConfig.LyAddress.收卷1BSFC, (ushort)18).Replace("\0", "").Trim();
if (position == 3) upMaterialInfo.bindSfc = PlcBusiness.readStrPlc(appConfig.LyAddress.收卷2ASFC, (ushort)18).Replace("\0", "").Trim();
if (position == 4) upMaterialInfo.bindSfc = PlcBusiness.readStrPlc(appConfig.LyAddress.收卷2BSFC, (ushort)18).Replace("\0", "").Trim();
if (StringExtension.IsBlank(upMaterialInfo.bindSfc))
{
LogRefreshEvent?.Invoke(LogType.AlarmLog, "通过PLC获取SFC为空");
this.sendSuccess(position);
return;
}
if (upMaterialInfo.bindSfc.Length > 0)
{
if(upMaterialInfo.bindSfc.Substring(0,2) == "L3")
{
if (upMaterialInfo.bindSfc.Length > 14)
{
LogRefreshEvent?.Invoke(LogType.RfidLog, "PLC获取的14位SFC为:" + upMaterialInfo.bindSfc + "长度超过14位进行截取");
upMaterialInfo.bindSfc = upMaterialInfo.bindSfc.Substring(0, 14);
}
}
else
{
if (upMaterialInfo.bindSfc.Length > 18)
{
LogRefreshEvent?.Invoke(LogType.RfidLog, "PLC获取的18位SFC为:" + upMaterialInfo.bindSfc + "长度超过18位进行截取");
upMaterialInfo.bindSfc = upMaterialInfo.bindSfc.Substring(0, 18);
}
}
}
LogRefreshEvent?.Invoke(LogType.RfidLog, "PLC获取的SFC为:" + upMaterialInfo.bindSfc);
//获取卷轴绑定的物料信息
foreach (var item in positionList)
{
//获取当前卷轴绑定的物料信息
ProShaftInfo shaftInfo = await this.GetShaftInfoByPosition(item);
if (shaftInfo == null || StringExtension.IsBlank(shaftInfo.bindRfid))
{
LogRefreshEvent?.Invoke(LogType.RfidLog, String.Format("{0}收卷完工获取绑定信息为空不进入结束流程", logStr));
LogRefreshEvent?.Invoke(LogType.AlarmLog, String.Format("{0}收卷完工获取绑定信息为空不进入结束流程", logStr));
LogHelper.Info(String.Format("{0}收卷完工获取绑定信息为空不进入结束流程", logStr));
continue;
}
LogHelper.Info(String.Format("{0}当前绑定的物料信息为:{1}", logStr, JsonChange.ModeToJson(shaftInfo)));
//1A轴:1,1B轴:2,2A轴:3,2B轴:4
//读取卷轴的EA值
LogHelper.Info("读取" + logStr + "的EA值");
if (position == 1) realEaValue = PlcBusiness.readPlc(appConfig.LyAddress.收卷1AEA);
if (position == 2) realEaValue = PlcBusiness.readPlc(appConfig.LyAddress.收卷1BEA);
if (position == 3) realEaValue = PlcBusiness.readPlc(appConfig.LyAddress.收卷2AEA);
if (position == 4) realEaValue = PlcBusiness.readPlc(appConfig.LyAddress.收卷2BEA);
LogHelper.Info(logStr + "设备EA值:" + realEaValue);
LogRefreshEvent?.Invoke(LogType.PlcLog, logStr + "设备EA值:" + realEaValue);
shaftInfo.bindEaValue = realEaValue.ToString();
shaftInfos.Add(shaftInfo);
//if (realEaValue >= 700)
//{
// LogRefreshEvent?.Invoke(LogType.AlarmLog, String.Format("{0}获取实物EA数量:{1},大于700EA不进行拆分完工", logStr, realEaValue));
// LogHelper.Info(String.Format("{0}获取实物EA数量:{1},大于700EA不进行拆分完工", logStr, realEaValue));
// this.sendSuccess(position);
// return;
//}
ViewModelRefreshEvent?.Invoke(new ViewModelDto()
{
rfidInfo = new RfidInfoDto()
{
rfid = shaftInfo.bindRfid,
sfc = "",
ea = shaftInfo.bindEaValue,
position = item,
},
plcStatus = true,
});
}
LogRefreshEvent?.Invoke(LogType.RfidLog, "PLC获取的最终SFC为:" + upMaterialInfo.bindSfc);
if (StringExtension.IsBlank(upMaterialInfo.bindSfc))
{
LogRefreshEvent?.Invoke(LogType.AlarmLog, String.Format("{0}收卷完工获取卷轴绑定的SFC为空不进入结束流程", logStr));
LogRefreshEvent?.Invoke(LogType.RfidLog, String.Format("{0}收卷完工获取卷轴绑定的SFC为空不进入结束流程", logStr));
LogHelper.Info(String.Format("{0}收卷完工获取卷轴绑定的SFC为空不进入结束流程", logStr));
//下发PLC下料信号
this.sendSuccess(position);
return;
}
Expression> upExp = s1 => true;
upExp = upExp.And(x => x.Sfc == upMaterialInfo.bindSfc);
Expression> upOrder = s => s.RecordTime;
ProUpRecord upRecord = await upRecordServices.QueryFirst(upExp, upOrder, false);
if (upRecord == null)
{
LogRefreshEvent?.Invoke(LogType.AlarmLog, String.Format("{0}收卷完工获取放卷位物料信息为空不进入结束流程", logStr));
LogRefreshEvent?.Invoke(LogType.RfidLog, String.Format("{0}收卷完工获取放卷位物料信息为空不进入结束流程", logStr));
LogHelper.Info(String.Format("{0}收卷完工获取放卷位物料信息为空不进入结束流程", logStr));
//下发PLC下料信号
this.sendSuccess(position);
return;
}
//下发禁止下料
sendError(position);
upMaterialInfo.bindRfid = upRecord.Rfid;
upMaterialInfo.bindEaValue = upRecord.eaValue.ToString();
//获取放卷物料MES账目
#region 获取放卷物料EA
string upMaterialEaValue = GetUpMaterialQty(position,upMaterialInfo.bindSfc, logStr);
if (StringExtension.IsBlank(upMaterialEaValue))
{
LogRefreshEvent?.Invoke(LogType.MesLog, String.Format("通过MES获取放卷位{0}物料EA值为空", upMaterialInfo.bindSfc));
return;
}
upMaterialInfo.bindEaValue = upMaterialEaValue;
#endregion
LogRefreshEvent?.Invoke(LogType.RfidLog, "放卷位物料EA:" + upMaterialInfo.bindEaValue);
int i = 0;
//获取绑定的SFC
foreach (ProShaftInfo x in shaftInfos)
{
Expression> exp = s1 => true;
exp = exp.And(z => z.Rfid == x.bindRfid && z.IsProduction == 0);
Expression> order = (s) => s.beginTime;
ProDownRecord downRecord = await downRecordServices.QueryFirst(exp, order, false);
if (downRecord == null)
{
LogRefreshEvent?.Invoke(LogType.AlarmLog, "收卷流程结束,获取下料信息异常");
LogHelper.Info("收卷流程结束,获取下料信息异常");
return;
}
if (upLoadBusiness.JudgeResourceIsUplpadData())
{
x.bindSfc = upMaterialInfo.bindSfc;
x.bindEaValue = realEaValue + "";
await shaftInfoServices.Update(x);
machineIntegrationParametricData[] data = GetMaterialWeight(x, upRecord, downRecord);
UpLoadMaterialWeight(position, upMaterialInfo.bindSfc, downRecord.Id, data);
}
if (x.endFlag == 1)
{
LogRefreshEvent?.Invoke(LogType.RfidLog, "完工最后一卷:" + x.bindRfid);
LogHelper.Info("完工最后一卷:" + x.bindRfid);
int mesEaValue = StringChange.ParseToInt(upMaterialInfo.bindEaValue);
#region Add by wenjy 20220826 最后一卷触发添加防呆过滤,避免四个收卷轴都有料时先完工最后一卷物料
//判断PLC地址中是否还存在该SFC
if (GetSameSfcByPlc(upMaterialInfo.bindSfc, position))
{
LogRefreshEvent?.Invoke(LogType.AlarmLog, String.Format("{0}其它收卷位还有物料未完工,请勿提前完工最后一卷料", upMaterialInfo.bindSfc));
plcBusiness.writePlc(appConfig.LyAddress.MES异常, 1);
return;
}
#endregion
// 最后一卷全部按照账目数量拆分
LogHelper.Info(String.Format("最后一卷MES账目{0},实物账目{1},全部按照账目拆分", mesEaValue, realEaValue));
if (!SpiltAccount(position, x, mesEaValue, upMaterialInfo.bindSfc, upRecord, downRecord).Result)
{
LogHelper.Info(logStr + "拆分MES账目数量异常");
continue;
}
else
{
i = i + 1;
}
x.bindEaValue = mesEaValue.ToString();
}
else
{
// 非最后一卷实物>700不拆分,最后一卷不验证超过700不拆分
if (realEaValue >= 700)
{
LogRefreshEvent?.Invoke(LogType.AlarmLog, String.Format("{0}获取实物EA数量:{1},大于700EA不进行拆分完工", logStr, realEaValue));
LogHelper.Info(String.Format("{0}获取实物EA数量:{1},大于700EA不进行拆分完工", logStr, realEaValue));
this.sendSuccess(position);
return;
}
//拆分MES账目数量
if (!SpiltAccount(position, x, realEaValue, upMaterialInfo.bindSfc, upRecord, downRecord).Result)
{
LogHelper.Info(logStr + "拆分MES账目数量异常");
continue;
}
else
{
i = i + 1;
}
x.bindEaValue = realEaValue.ToString();
}
x.bindSfc = GetBindSfcByMes(x.bindRfid);
LogRefreshEvent?.Invoke(LogType.MesLog, String.Format("RFID:{0}绑定的膜卷号:{1}", x.bindRfid, x.bindSfc));
ViewModelRefreshEvent?.Invoke(new ViewModelDto()
{
rfidInfo = new RfidInfoDto()
{
rfid = x.bindRfid,
sfc = x.bindSfc,
ea = x.bindEaValue,
position = StringChange.ParseToInt(x.positionId)
},
plcStatus = true,
});
//本地保存绑定信息
await BusinessHelper.BindRfidAndSfc(x.bindRfid, x.bindSfc);
//更新下料记录
downRecord.Sfc = x.bindSfc;
downRecord.eaValue = StringChange.ParseToInt(x.bindEaValue);
downRecord.IsProduction = 1;
downRecord.endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
await downRecordServices.Update(downRecord);
upLoadBusiness.UpdateDownRecord(downRecord);
//清除收卷轴绑定信息
x.bindRfid = "";
x.bindSfc = "";
x.bindEaValue = "";
x.endFlag = 0;
await shaftInfoServices.Update(x);
};
if (i == shaftInfos.Count)
{
LogRefreshEvent?.Invoke(LogType.RfidLog, logStr + "下料流程结束,下发PLC下料信号");
LogRefreshEvent?.Invoke(LogType.PlcLog, logStr + "下料流程结束,下发PLC下料信号");
LogHelper.Info(logStr + "下料流程结束,下发PLC下料信号");
//下发PLC下料信号
this.sendSuccess(position);
}
}
catch (Exception ex)
{
LogHelper.Error("冷压收卷结束信号逻辑处理异常", ex);
LogRefreshEvent?.Invoke(LogType.AlarmLog, "冷压收卷结束信号逻辑处理异常" + ex.Message);
}
}
///
/// 调整MES数量
///
///
///
///
///
private bool UpdateMesEaValue(int position,string bindSfc, string bindRfid, int eaValue)
{
//调取MES调整数量接口
LogRefreshEvent?.Invoke(LogType.MesLog, "调用MES调整数量接口");
MiBatchCompleteSfcAndAdujustQtyServiceServiceParam miBatchCompleteSfcAndAdujustQtyServiceServiceParam = new MiBatchCompleteSfcAndAdujustQtyServiceServiceParam()
{
url = inifile.IniReadValue("AdujustQtyParam","url"),
site = inifile.IniReadValue("AdujustQtyParam", "site"),
sfcPre = bindSfc,
processLotPre = "",
operation = appConfig.operationByA,
operationRevision = inifile.IniReadValue("AdujustQtyParam", "operationRevision"),
resource = appConfig.resource,
user = inifile.IniReadValue("AdujustQtyParam", "user"),
activity = inifile.IniReadValue("AdujustQtyParam", "activity"),
modeProcessSfc = WebService.MiBatchCompleteSfcAndAdujustQtyServiceService.ModeProcessSfc.MODE_NONE,
sfcList = new miBatchCompleteSfcAndAdujustQtySfcEntity[]
{
new miBatchCompleteSfcAndAdujustQtySfcEntity()
{
processLot = bindRfid,
sfc = "",
qty =eaValue.ToString(),
unit = "EA"
}
}
};
LogHelper.Info("调用MES接口调整物料" + bindSfc + "数量");
LogHelper.Info("MES调整数量接口请求参数:" + JsonChange.ModeToJson(miBatchCompleteSfcAndAdujustQtyServiceServiceParam));
if (appConfig.isMesFlag == 1)
{
var requestResult = MesWebServices.iMiBatchCompleteSfcAndAdujustQtyServiceService(miBatchCompleteSfcAndAdujustQtyServiceServiceParam);
LogHelper.Info("MES调整数量接口返回参数:" + JsonChange.ModeToJson(requestResult));
if (requestResult.@return.code > 0)
{
LogHelper.Info("MES调整数量接口调用失败:" + requestResult.@return.message);
LogRefreshEvent?.Invoke(LogType.AlarmLog, "MES调整数量接口调用失败:" + upLoadBusiness.GetMesMessage(requestResult.@return.code, requestResult.@return.message));
plcBusiness.writePlc(appConfig.LyAddress.MES异常, requestResult.@return.code);
return false;
}
}
LogRefreshEvent?.Invoke(LogType.MesLog, "MES调整数量接口调用成功");
return true;
}
///
/// 通过MES获取拆分后绑定的SFC
///
///
///
private string GetBindSfcByMes(string rfidStr)
{
string sfcStr = "";
DateTime beginTime = new DateTime();
ProcessLotServiceWSServiceParam processLotServiceWSServiceParam = new ProcessLotServiceWSServiceParam()
{
url = inifile.IniReadValue("ProcessLotServiceWSServiceParam", "url"),
site = inifile.IniReadValue("ProcessLotServiceWSServiceParam", "site"),
processlotref = String.Format("ProcessLotBO:2100,{0}", rfidStr)
};
try
{
LogRefreshEvent?.Invoke(LogType.MesLog, "调用MES接口获取RFID绑定的SFC");
LogHelper.Info("MES获取膜卷号接口请求参数:" + JsonChange.ModeToJson(processLotServiceWSServiceParam));
if (appConfig.isMesFlag == 1)
{
readProcessLotResponse readProcessLotResponse = MesWebServices.readProcessLot(processLotServiceWSServiceParam);
LogHelper.Info("MES获取膜卷号接口返回参数:" + JsonChange.ModeToJson(readProcessLotResponse));
if (readProcessLotResponse.Response.processLotMemberList != null)
{
sfcStr = readProcessLotResponse.Response.processLotMemberList[0].memberContext.Substring(11);
LogHelper.Info("RFID条码:" + rfidStr + "绑定的SFC条码为:" + sfcStr);
LogRefreshEvent?.Invoke(LogType.MesLog, "RFID条码:" + rfidStr + "绑定的SFC条码为:" + sfcStr);
}
}
else
{
sfcStr = System.Guid.NewGuid().ToString("N").Substring(0, 14);
}
}
catch (Exception ex)
{
LogHelper.Info("MES获取膜卷号接口调用异常:" + ex.Message);
LogRefreshEvent?.Invoke(LogType.AlarmLog, "MES获取膜卷号接口调用异常:" + ex.Message);
WebServiceLog.saveReadProcessLot(processLotServiceWSServiceParam, null, beginTime, ex.Message);
}
return sfcStr;
}
///
/// 获取放卷位EA值
///
///
///
///
private string GetUpMaterialQty(int position,string bindSfc, string logStr)
{
LogHelper.Info(logStr + "通过MES接口获取放卷物料的EA值");
MiSFCQueryQtyServiceServiceParam sFCQueryQtyServiceServiceParam = new MiSFCQueryQtyServiceServiceParam()
{
url = inifile.IniReadValue("MiSFCQueryQtyServiceServiceParam", "url"),
site = inifile.IniReadValue("MiSFCQueryQtyServiceServiceParam", "site"),
sfc = bindSfc
};
LogHelper.Info(logStr + "完工,MES获取物料EA值接口请求参数:" + JsonChange.ModeToJson(sFCQueryQtyServiceServiceParam));
DateTime beginTime = DateTime.Now;
try
{
if (appConfig.isMesFlag == 1)
{
var sfcQueryQtyResponse = MesWebServices.iMiSFCQueryQtyServiceService(sFCQueryQtyServiceServiceParam);
LogHelper.Info(logStr + "MES获取物料EA值接口返回参数:" + JsonChange.ModeToJson(sfcQueryQtyResponse));
if (sfcQueryQtyResponse.@return.code > 0)
{
LogHelper.Info(logStr + "MES获取物料EA值接口请求失败:" + sfcQueryQtyResponse.@return.message);
LogRefreshEvent?.Invoke(LogType.MesLog, String.Format(logStr + "通过MES接口获取放卷物料{0}的SFC数量失败:{1}", bindSfc, upLoadBusiness.GetMesMessage(sfcQueryQtyResponse.@return.code, sfcQueryQtyResponse.@return.message)));
LogRefreshEvent?.Invoke(LogType.AlarmLog, String.Format(logStr + "通过MES接口获取放卷物料{0}的SFC数量失败:{1}", bindSfc, upLoadBusiness.GetMesMessage(sfcQueryQtyResponse.@return.code, sfcQueryQtyResponse.@return.message)));
return "";
}
return sfcQueryQtyResponse.@return.qty;
}
else
{
return "2600";
}
}
catch (Exception ex)
{
LogHelper.Info(String.Format(logStr + "MES获取SFC数量接口异常:{1}", ex.Message));
WebServiceLog.saveMiSFCQueryQtyServiceService(sFCQueryQtyServiceServiceParam, null, beginTime, ex.Message);
LogRefreshEvent?.Invoke(LogType.MesLog, String.Format(logStr + "MES获取SFC数量接口异常:{1}", ex.Message));
LogRefreshEvent?.Invoke(LogType.AlarmLog, String.Format(logStr + "MES获取SFC数量接口异常:{1}", ex.Message));
return "";
}
}
///
/// 拆分MES账目数量
///
///
///
///
///
private async Task SpiltAccount(int position, ProShaftInfo shaftInfos, int eaValue, string upMaterialSfc, ProUpRecord upRecord, ProDownRecord downRecord)
{
LogHelper.Info("拆分MES账目数量");
LogRefreshEvent?.Invoke(LogType.MesLog, "拆分MES账目数量:" + eaValue);
miBatchCompleteSfcAndAdujustQtySfcEntity[] miBatchCompleteSfcAndAdujustQtySfcEntities = new miBatchCompleteSfcAndAdujustQtySfcEntity[1];
shaftInfos.bindEaValue = eaValue.ToString();
miBatchCompleteSfcAndAdujustQtySfcEntities[0] = new miBatchCompleteSfcAndAdujustQtySfcEntity()
{
processLot = shaftInfos.bindRfid,
qty = shaftInfos.bindEaValue,
unit = "EA",
};
//更新绑定信息
await shaftInfoServices.Update(shaftInfos);
LogRefreshEvent?.Invoke(LogType.RfidLog, "调用MES拆分接口");
LogHelper.Info("调用MES拆分接口");
WebService.MiBatchCompleteSfcAndAdujustQtyServiceService.ModeProcessSfc modeProcessSfc = WebService.MiBatchCompleteSfcAndAdujustQtyServiceService.ModeProcessSfc.MODE_COMPLETE_SFC_POST_DC;
#region 重量特征数据上传 Add By wenjy 2022-12-02 过账模式只拆分不完工
if (upLoadBusiness.JudgeResourceIsUplpadData())
{
modeProcessSfc = WebService.MiBatchCompleteSfcAndAdujustQtyServiceService.ModeProcessSfc.MODE_NONE;
}
#endregion
MiBatchCompleteSfcAndAdujustQtyServiceServiceParam requestParam = new MiBatchCompleteSfcAndAdujustQtyServiceServiceParam()
{
url = inifile.IniReadValue("SplitSfcParam","url"),
site = inifile.IniReadValue("SplitSfcParam", "site"),
sfcPre = upMaterialSfc,
processLotPre = "",
operation = appConfig.operation, //阳极ANCAP1 //阴极CACAP1
operationRevision = inifile.IniReadValue("SplitSfcParam", "operationRevision"),
resource = appConfig.resource,
user = inifile.IniReadValue("SplitSfcParam", "user"),
activity = inifile.IniReadValue("SplitSfcParam", "activity"),
//modeProcessSfc = WebService.MiBatchCompleteSfcAndAdujustQtyServiceService.ModeProcessSfc.MODE_NONE,
modeProcessSfc = modeProcessSfc,
sfcList = miBatchCompleteSfcAndAdujustQtySfcEntities,
};
MiBatchCompleteSfcAndAdujustQtyResponse batchCompleteSfcAndAdujustQtyResponse = new MiBatchCompleteSfcAndAdujustQtyResponse();
DateTime beginTime = DateTime.Now;
try
{
LogHelper.Info("MES拆分接口请求参数:" + JsonChange.ModeToJson(requestParam));
if (appConfig.isMesFlag == 1)
{
if (StringExtension.IsBlank(downRecord.Sfc))
{
batchCompleteSfcAndAdujustQtyResponse = MesWebServices.iMiBatchCompleteSfcAndAdujustQtyServiceService(requestParam);
LogHelper.Info("MES拆分接口返回参数:" + JsonChange.ModeToJson(batchCompleteSfcAndAdujustQtyResponse));
var result = batchCompleteSfcAndAdujustQtyResponse.@return;
if (result.code > 0)
{
LogHelper.Info("MES自动拆分接口调用失败:" + result.message);
LogRefreshEvent?.Invoke(LogType.AlarmLog, "MES自动拆分接口调用失败:" + upLoadBusiness.GetMesMessage(result.code, result.message));
LogRefreshEvent?.Invoke(LogType.MesLog, "MES自动拆分接口调用失败:" + upLoadBusiness.GetMesMessage(result.code, result.message));
plcBusiness.writePlc(appConfig.LyAddress.MES异常, result.code);
return false;
}
}
LogHelper.Info("MES自动拆分接口调用成功");
LogRefreshEvent?.Invoke(LogType.RfidLog, "MES自动拆分接口调用成功");
#region 重量特征数据上传 Add By 2022-12-02
if (upLoadBusiness.JudgeResourceIsUplpadData()) //判断是否为190品种
{
string downSplitMaterialSfc = GetBindSfcByMes(shaftInfos.bindRfid);
downRecord.Sfc = downSplitMaterialSfc;
downRecord.eaValue = StringChange.ParseToInt(shaftInfos.bindEaValue);
downRecord.endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
await downRecordServices.Update(downRecord);
shaftInfos.bindSfc = downSplitMaterialSfc;
machineIntegrationParametricData[] data = GetMaterialWeight(shaftInfos, upRecord, downRecord);
if (UpLYMesData(shaftInfos, upRecord, downRecord, data))
{
LogHelper.Info("冷压物料特征数据上传成功");
LogRefreshEvent?.Invoke(LogType.RfidLog, "冷压物料特征数据上传成功");
return true;
}
else
{
LogHelper.Info("冷压物料特征数据上传失败");
LogRefreshEvent?.Invoke(LogType.AlarmLog, "冷压物料特征数据上传失败");
return false;
}
}
#endregion
}
}
catch (Exception ex)
{
LogHelper.Error("MES自动完工接口调用异常", ex);
LogHelper.Info("MES自动完工接口调用异常:" + ex.Message);
WebServiceLog.saveMiBatchCompleteSfcAndAdujustQtyServiceService(requestParam, null, beginTime, ex.Message);
LogRefreshEvent?.Invoke(LogType.AlarmLog, "MES自动完工接口异常:" + ex.Message);
LogRefreshEvent?.Invoke(LogType.MesLog, "MES自动完工接口异常:" + ex.Message);
plcBusiness.writePlc(appConfig.LyAddress.MES异常, 1);
return false;
}
return true;
}
///
/// 完工数据
///
///
///
///
///
private async Task CompleteAccount(int position, ProShaftInfo shaftInfos, int eaValue, string upMaterialSfc)
{
LogHelper.Info("调用MES完工接口");
LogRefreshEvent?.Invoke(LogType.MesLog, "调用MES完工接口");
miBatchCompleteSfcAndAdujustQtySfcEntity[] miBatchCompleteSfcAndAdujustQtySfcEntities = new miBatchCompleteSfcAndAdujustQtySfcEntity[1];
shaftInfos.bindEaValue = eaValue.ToString();
miBatchCompleteSfcAndAdujustQtySfcEntities[0] = new miBatchCompleteSfcAndAdujustQtySfcEntity()
{
processLot = shaftInfos.bindRfid,
qty = shaftInfos.bindEaValue,
unit = "EA",
};
//更新绑定信息
await shaftInfoServices.Update(shaftInfos);
LogRefreshEvent?.Invoke(LogType.RfidLog, "调用MES完工接口");
LogHelper.Info("调用MES完工接口");
MiBatchCompleteSfcAndAdujustQtyServiceServiceParam requestParam = new MiBatchCompleteSfcAndAdujustQtyServiceServiceParam()
{
//url = "http://lymesa.catlbattery.com:8103/atlmeswebservice/MiBatchCompleteSfcAndAdujustQtyServiceService?wsdl",
//site = "2100",
//sfcPre = shaftInfos.bindSfc,
//processLotPre = "",
//operation = appConfig.operation, //阳极ANCAP1 //阴极CACAP1
//operationRevision = "A",
//resource = appConfig.resource,
//user = "SUP_LYA_RF01",
//activity = "Z_PR571",
url = inifile.IniReadValue("SplitSfcParam","url"),
site = inifile.IniReadValue("SplitSfcParam", "site"),
sfcPre = shaftInfos.bindSfc,
processLotPre = "",
operation = appConfig.operation, //阳极ANCAP1 //阴极CACAP1
operationRevision = inifile.IniReadValue("SplitSfcParam", "operationRevision"),
resource = appConfig.resource,
user = inifile.IniReadValue("SplitSfcParam", "user"),
activity = inifile.IniReadValue("SplitSfcParam", "activity"),
modeProcessSfc = WebService.MiBatchCompleteSfcAndAdujustQtyServiceService.ModeProcessSfc.MODE_COMPLETE_SFC_POST_DC,//只拆分-new
sfcList = miBatchCompleteSfcAndAdujustQtySfcEntities,
};
MiBatchCompleteSfcAndAdujustQtyResponse batchCompleteSfcAndAdujustQtyResponse = new MiBatchCompleteSfcAndAdujustQtyResponse();
DateTime beginTime = DateTime.Now;
try
{
LogHelper.Info("MES完工接口请求参数:" + JsonChange.ModeToJson(requestParam));
if (appConfig.isMesFlag == 1)
{
batchCompleteSfcAndAdujustQtyResponse = MesWebServices.iMiBatchCompleteSfcAndAdujustQtyServiceService(requestParam);
LogHelper.Info("MES完工接口返回参数:" + JsonChange.ModeToJson(batchCompleteSfcAndAdujustQtyResponse));
var result = batchCompleteSfcAndAdujustQtyResponse.@return;
if (result.code > 0)
{
LogHelper.Info("MES自动完工接口调用失败:" + result.message);
LogRefreshEvent?.Invoke(LogType.AlarmLog, "MES自动完工接口调用失败:" + upLoadBusiness.GetMesMessage(result.code, result.message));
LogRefreshEvent?.Invoke(LogType.MesLog, "MES自动完工接口调用失败:" + upLoadBusiness.GetMesMessage(result.code, result.message));
//sendError(position, 1, true,result.code);
plcBusiness.writePlc(appConfig.LyAddress.MES异常, result.code);
return false;
}
}
}
catch (Exception ex)
{
LogHelper.Info("MES自动完工接口调用异常:" + ex.Message);
WebServiceLog.saveMiBatchCompleteSfcAndAdujustQtyServiceService(requestParam, null, beginTime, ex.Message);
LogRefreshEvent?.Invoke(LogType.AlarmLog, "MES自动完工接口异常:" + ex.Message);
LogRefreshEvent?.Invoke(LogType.MesLog, "MES自动完工接口异常:" + ex.Message);
//sendError(position, 1, true,1);
plcBusiness.writePlc(appConfig.LyAddress.MES异常, 1);
return false;
}
LogRefreshEvent?.Invoke(LogType.MesLog, "MES自动完工接口调用成功");
return true;
}
///
/// 判断PLC地址中是否还存在该膜卷号,避免直接拆最后一卷
///
///
///
private bool GetSameSfcByPlc(string bindSfc, int position)
{
if (position != 1)
{
if (PlcBusiness.readStrPlc(appConfig.LyAddress.收卷1ASFC, (ushort)18).Replace("\0", "").Trim() == bindSfc)
return true;
}
if (position != 2)
{
if (PlcBusiness.readStrPlc(appConfig.LyAddress.收卷1BSFC, (ushort)18).Replace("\0", "").Trim() == bindSfc)
return true;
}
if (position != 3)
{
if (PlcBusiness.readStrPlc(appConfig.LyAddress.收卷2ASFC, (ushort)18).Replace("\0", "").Trim() == bindSfc)
return true;
}
if (position != 4)
{
if (PlcBusiness.readStrPlc(appConfig.LyAddress.收卷2BSFC, (ushort)18).Replace("\0", "").Trim() == bindSfc)
return true;
}
return false;
}
///
/// 判断是否为最后一卷,20220826弃用,delete by wenjy
///
///
private bool isEndMaterial(int position, string bindSfc, string logStr, int realEaValue)
{
LogRefreshEvent?.Invoke(LogType.RfidLog, "判断是否为最后一卷料");
//获取放卷位SFC
string upMaterialSfc = PlcBusiness.readStrPlc(appConfig.LyAddress.放卷SFC, (ushort)18).Replace("\0", "").Trim();
try
{
if (upMaterialSfc != bindSfc)
{
LogRefreshEvent?.Invoke(LogType.RfidLog, logStr + "收卷结束,收卷位与放卷位SFC不一致," + bindSfc + ";最后一轮收卷");
LogHelper.Info(logStr + "收卷结束,收卷位与放卷位SFC不一致," + bindSfc + ";最后一轮收卷");
//通过MES获取PLC绑定的SFC MES账目中数量还有多少
int qty = StringChange.ParseToInt(GetUpMaterialQty(position,bindSfc, logStr));
#region 根据账目数量筛选最后一卷,已弃用
//if(qty > realEaValue)
//{
// if (qty - realEaValue > realEaValue)
// {
// LogHelper.Info("MES账目数量:" + qty + ",设备实际数量:" + realEaValue);
// return false;
// }
// else
// {
// ////最后一轮
// if (position > 2)
// {
// return true;
// }
// return true;
// }
//}
//else
//{
// return true;
//}
#endregion
//最后一轮,根据PLC设定下料顺序
if (position > 2)
{
ProShaftInfo shaftInfo = this.GetShaftInfoByPosition(position).Result;
if (shaftInfo.endFlag == 1)
return true;
}
}
}
catch (Exception ex)
{
LogRefreshEvent?.Invoke(LogType.AlarmLog, "判断是否为最后一卷料异常:" + ex.Message);
LogHelper.Info("判断是否为最后一卷料异常:" + ex.Message);
}
return false;
}
///
/// 放卷涨紧手动写入
///
///
///
///
public async void MesBegin(int position, string epc, bool auto)
{
string sfc = "";
string qty = "";
try
{
//手动写入清除放卷位报警
if (!auto)
{
plcBusiness.writePlc(appConfig.LyAddress.RFID异常, 0);
plcBusiness.writePlc(appConfig.LyAddress.MES异常, 0);
}
string binSfc = GetBindSfcByMes(epc);//add by liulb 2022-11-09
LogHelper.Info($"获取涂布材料膜卷号{binSfc}");
LogHelper.Info("调用MES首工序获取SFC接口");
LogRefreshEvent?.Invoke(LogType.MesLog, "调用MES首工序获取SFC接口");
LogRefreshEvent?.Invoke(LogType.RfidLog, "调用MES首工序获取SFC接口");
//调MES首工序获取SFC接口
MiFirstOperationForsfcServiceServiceParam miFirstOperationForsfcServiceServiceParam = new MiFirstOperationForsfcServiceServiceParam()
{
url = inifile.IniReadValue("MiFirstOperationForsfcServiceServiceParam", "url"),
site = inifile.IniReadValue("MiFirstOperationForsfcServiceServiceParam", "site"),
sfc = "",
processLot = epc,
operation = appConfig.operation,
operationRevision = inifile.IniReadValue("MiFirstOperationForsfcServiceServiceParam", "operationRevision"),
resource = appConfig.resource,
user = inifile.IniReadValue("MiFirstOperationForsfcServiceServiceParam", "user"),
activity = inifile.IniReadValue("MiFirstOperationForsfcServiceServiceParam", "activity"),
modeProcessSfc = inifile.IniReadValue("MiFirstOperationForsfcServiceServiceParam", "modeProcessSfc"),
loginUser = "",
password = "",
};
LogHelper.Info("MES首工序获取SFC接口请求参数:" + JsonChange.ModeToJson(miFirstOperationForsfcServiceServiceParam));
miFirstOperationForsfcResponse firstOperationForsfcResponse = new miFirstOperationForsfcResponse();
if (appConfig.isMesFlag == 1)
{
DateTime beginTime = DateTime.Now;
try
{
firstOperationForsfcResponse = MesWebServices.iMiFirstOperationForsfcServiceService(miFirstOperationForsfcServiceServiceParam);
LogHelper.Info("MES首工序获取SFC接口返回参数:" + JsonChange.ModeToJson(firstOperationForsfcResponse));
//判断返回结果
if (firstOperationForsfcResponse.@return.code > 0)
{
LogHelper.Info("MES首工序获取SFC接口请求失败:" + firstOperationForsfcResponse.@return.message);
plcBusiness.writePlc(appConfig.LyAddress.放卷OK, 1);
plcBusiness.writePlc(appConfig.LyAddress.MES异常, firstOperationForsfcResponse.@return.code);
LogHelper.Info("MES首工序获取SFC接口调用失败,下发PLC泄气D6014报警D6025信号," + firstOperationForsfcResponse.@return.message);
LogRefreshEvent?.Invoke(LogType.RfidLog, "MES首工序获取SFC接口调用失败");
LogRefreshEvent?.Invoke(LogType.MesLog, "MES首工序获取SFC接口调用失败" + upLoadBusiness.GetMesMessage(firstOperationForsfcResponse.@return.code, firstOperationForsfcResponse.@return.message));
LogRefreshEvent?.Invoke(LogType.AlarmLog, "MES首工序获取SFC接口调用失败" + upLoadBusiness.GetMesMessage(firstOperationForsfcResponse.@return.code, firstOperationForsfcResponse.@return.message));
LogRefreshEvent?.Invoke(LogType.PlcLog, "MES首工序获取SFC接口调用失败,下发PLC泄气D6014报警D6025信号");
return;
}
sfc = firstOperationForsfcResponse.@return.sfc;
qty = firstOperationForsfcResponse.@return.qty;
LogRefreshEvent?.Invoke(LogType.RfidLog, String.Format("MES首工序获取SFC接口调用成功,SFC:{0};EA:{1}", sfc, qty));
LogHelper.Info(String.Format("MES首工序获取SFC接口调用成功,SFC:{0};EA:{1}", sfc, qty));
}
catch (Exception ex)
{
LogHelper.Info("调用MES首工序获取SFC接口异常:" + ex.Message);
LogRefreshEvent?.Invoke(LogType.AlarmLog, "调用MES首工序获取SFC接口异常:" + ex.Message);
LogRefreshEvent?.Invoke(LogType.MesLog, "调用MES首工序获取SFC接口异常:" + ex.Message);
WebServiceLog.saveMiFirstOperationForsfcServiceService(miFirstOperationForsfcServiceServiceParam, null
, beginTime, ex.Message);
plcBusiness.writePlc(appConfig.LyAddress.MES异常, 1);
return;
}
}
else
{
sfc = System.Guid.NewGuid().ToString("N").Substring(0, 14);
qty = "2000";
LogRefreshEvent?.Invoke(LogType.RfidLog, String.Format("MES首工序获取SFC接口调用成功,SFC:{0};EA:{1}", sfc, qty));
}
//放卷位膜卷号写入PLC地址
PlcBusiness.writeStrPlc(appConfig.LyAddress.放卷SFC, sfc);
LogRefreshEvent?.Invoke(LogType.PlcLog, "放卷位物料SFC写入PLC地址:" + sfc);
ViewModelRefreshEvent?.Invoke(new ViewModelDto()
{
rfidInfo = new RfidInfoDto()
{
rfid = epc,
sfc = sfc,
position = position,
ea = qty,
},
plcStatus = true,
});
//实时绑定卷轴与RFID信息
LogHelper.Info(String.Format("绑定放卷轴与RFID:{0};获取卷轴信息", epc));
ProShaftInfo shaftInfo = await this.GetShaftInfoByPosition(position);
if (shaftInfo == null || StringExtension.IsBlank(shaftInfo.processId))
{
LogRefreshEvent?.Invoke(LogType.RfidLog, "绑定卷轴与RFID,获取卷轴信息为空");
LogRefreshEvent?.Invoke(LogType.AlarmLog, "绑定卷轴与RFID,获取卷轴信息为空");
LogHelper.Info("绑定卷轴与RFID,获取卷轴信息为空");
return;
}
LogHelper.Info("获取卷轴信息为:" + JsonChange.ModeToJson(shaftInfo));
shaftInfo.bindRfid = epc;
shaftInfo.bindSfc = sfc;
shaftInfo.bindEaValue = qty;
shaftInfo.bindTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
await shaftInfoServices.Update(shaftInfo);
//本地保存SFC,上料记录
ProUpRecord upRecord = new ProUpRecord()
{
Id = System.Guid.NewGuid().ToString(),
MachineId = appConfig.machineId,
UpMaterialId = binSfc, //存放涂布来料膜卷号
PositionId = position,
Rfid = epc,
Sfc = sfc,
eaValue = StringChange.ParseToInt(qty),
IsProduction = 0,
beginTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
RecordTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
};
await upRecordServices.Add(upRecord);
upLoadBusiness.SaveUpRecord(upRecord);
//判断是否合卷
if (JudgementMaterial(sfc))
{
LogHelper.Info("上料成功,收卷位SFC与放卷SFC不同触发合卷报警");
plcBusiness.writePlc(appConfig.LyAddress.合卷报警, 1);
}
LogHelper.Info("冷压放卷流程处理成功,D6014写0");
plcBusiness.writePlc(appConfig.LyAddress.放卷OK, 0);
//手动写入自动下降U型块
plcBusiness.writePlc(appConfig.LyAddress.手动上料, 1);
}
catch (Exception ex)
{
LogHelper.Error("放卷涨紧手动写入异常", ex);
}
}
///
/// 判断是否合卷
///
///
private bool JudgementMaterial(string sfc)
{
if (ConfigHelper.GetConfig("isJudgementMaterial") == "0")
{
LogHelper.Info("冷压合卷判断功能未启用");
LogRefreshEvent?.Invoke(LogType.RfidLog, "冷压合卷判断功能未启用");
return false;
}
LogHelper.Info("判断是否合卷,放卷位SFC:" + sfc);
LogRefreshEvent?.Invoke(LogType.RfidLog, "判断是否合卷,放卷位SFC:" + sfc);
//获取正在生产收卷轴绑定的SFC
string downSfc = "";
//1A
if (PlcBusiness.readPlc(appConfig.LyAddress.收卷1A状态) == 1)
{
downSfc = PlcBusiness.readStrPlc(appConfig.LyAddress.收卷1ASFC, (ushort)18).Replace("\0", "").Trim();
LogHelper.Info("1A轴在生产,SFC:" + downSfc);
if (StringExtension.IsBlank(downSfc))
{
LogHelper.Info("1A轴绑定膜卷号为空,不触发合卷报警");
LogRefreshEvent?.Invoke(LogType.RfidLog, "1A轴绑定膜卷号为空,不触发合卷报警");
return false;
}
if (downSfc == sfc)
{
LogHelper.Info("1A轴在生产,SFC:" + downSfc + ",和放卷位SFC:" + sfc + "相同不触发合卷报警");
LogRefreshEvent?.Invoke(LogType.RfidLog, "1A轴在生产,SFC:" + downSfc + ",和放卷位SFC:" + sfc + "相同不触发合卷报警");
return false;
}
else
{
LogHelper.Info("1A轴在生产,SFC:" + downSfc + ",和放卷位SFC:" + sfc + "不相同触发合卷异常");
LogRefreshEvent?.Invoke(LogType.RfidLog, "1A轴在生产,SFC:" + downSfc + ",和放卷位SFC:" + sfc + "不相同触发合卷异常");
return true;
}
}
//1B
if (PlcBusiness.readPlc(appConfig.LyAddress.收卷1B状态) == 1)
{
downSfc = PlcBusiness.readStrPlc(appConfig.LyAddress.收卷1BSFC, (ushort)18).Replace("\0", "").Trim();
LogHelper.Info("1B轴在生产,SFC:" + downSfc);
if (StringExtension.IsBlank(downSfc))
{
LogHelper.Info("1B轴绑定膜卷号为空,不触发合卷报警");
LogRefreshEvent?.Invoke(LogType.RfidLog, "1A轴绑定膜卷号为空,不触发合卷报警");
return false;
}
if (downSfc == sfc)
{
LogHelper.Info("1B轴在生产,SFC:" + downSfc + ",和放卷位SFC:" + sfc + "相同不触发合卷报警");
LogRefreshEvent?.Invoke(LogType.RfidLog, "1B轴在生产,SFC:" + downSfc + ",和放卷位SFC:" + sfc + "相同不触发合卷报警");
return false;
}
else
{
LogHelper.Info("1B轴在生产,SFC:" + downSfc + ",和放卷位SFC:" + sfc + "不相同触发合卷异常");
LogRefreshEvent?.Invoke(LogType.RfidLog, "1B轴在生产,SFC:" + downSfc + ",和放卷位SFC:" + sfc + "不相同触发合卷异常");
return true;
}
}
//2A
if (PlcBusiness.readPlc(appConfig.LyAddress.收卷2A状态) == 1)
{
downSfc = PlcBusiness.readStrPlc(appConfig.LyAddress.收卷2ASFC, (ushort)18).Replace("\0", "").Trim();
LogHelper.Info("2A轴在生产,SFC:" + downSfc);
if (StringExtension.IsBlank(downSfc))
{
LogHelper.Info("2A轴绑定膜卷号为空,不触发合卷报警");
LogRefreshEvent?.Invoke(LogType.RfidLog, "1A轴绑定膜卷号为空,不触发合卷报警");
return false;
}
if (downSfc == sfc)
{
LogHelper.Info("2A轴在生产,SFC:" + downSfc + ",和放卷位SFC:" + sfc + "相同不触发合卷报警");
LogRefreshEvent?.Invoke(LogType.RfidLog, "2A轴在生产,SFC:" + downSfc + ",和放卷位SFC:" + sfc + "相同不触发合卷报警");
return false;
}
else
{
LogHelper.Info("2A轴在生产,SFC:" + downSfc + ",和放卷位SFC:" + sfc + "不相同触发合卷异常");
LogRefreshEvent?.Invoke(LogType.RfidLog, "2A轴在生产,SFC:" + downSfc + ",和放卷位SFC:" + sfc + "不相同触发合卷异常");
return true;
}
}
//2B
if (PlcBusiness.readPlc(appConfig.LyAddress.收卷2B状态) == 1)
{
downSfc = PlcBusiness.readStrPlc(appConfig.LyAddress.收卷2BSFC, (ushort)18).Replace("\0", "").Trim();
LogHelper.Info("2B轴在生产,SFC:" + downSfc);
if (StringExtension.IsBlank(downSfc))
{
LogHelper.Info("2B轴绑定膜卷号为空,不触发合卷报警");
LogRefreshEvent?.Invoke(LogType.RfidLog, "1A轴绑定膜卷号为空,不触发合卷报警");
return false;
}
if (downSfc == sfc)
{
LogHelper.Info("2B轴在生产,SFC:" + downSfc + ",和放卷位SFC:" + sfc + "相同不触发合卷报警");
LogRefreshEvent?.Invoke(LogType.RfidLog, "2B轴在生产,SFC:" + downSfc + ",和放卷位SFC:" + sfc + "相同不触发合卷报警");
return false;
}
else
{
LogHelper.Info("2B轴在生产,SFC:" + downSfc + ",和放卷位SFC:" + sfc + "不相同触发合卷异常");
LogRefreshEvent?.Invoke(LogType.RfidLog, "2B轴在生产,SFC:" + downSfc + ",和放卷位SFC:" + sfc + "不相同触发合卷异常");
return true;
}
}
return false;
}
///
/// 收卷成功气胀信号
///
///
public void sendSuccessByDownBegin(int position)
{
if (position == 1) plcBusiness.writePlc(appConfig.LyAddress.收卷1AOK, 0);
if (position == 2) plcBusiness.writePlc(appConfig.LyAddress.收卷1BOK, 0);
if (position == 3) plcBusiness.writePlc(appConfig.LyAddress.收卷2AOK, 0);
if (position == 4) plcBusiness.writePlc(appConfig.LyAddress.收卷2BOK, 0);
}
///
/// 下料成功
///
///
public void sendSuccess(int position)
{
if (position == 1)
{
plcBusiness.writePlc(appConfig.LyAddress.收卷1A控制下料, 0);
plcBusiness.writePlc(appConfig.LyAddress.收卷1AOK, 1);
}
if (position == 2)
{
plcBusiness.writePlc(appConfig.LyAddress.收卷1B控制下料, 0);
plcBusiness.writePlc(appConfig.LyAddress.收卷1BOK, 1);
}
if (position == 3)
{
plcBusiness.writePlc(appConfig.LyAddress.收卷2A控制下料, 0);
plcBusiness.writePlc(appConfig.LyAddress.收卷2AOK, 1);
}
if (position == 4)
{
plcBusiness.writePlc(appConfig.LyAddress.收卷2B控制下料, 0);
plcBusiness.writePlc(appConfig.LyAddress.收卷2BOK, 1);
}
}
///
/// 禁止下料
///
///
public void sendError(int position)
{
if (position == 1) plcBusiness.writePlc(appConfig.LyAddress.收卷1A控制下料, 1);
if (position == 2) plcBusiness.writePlc(appConfig.LyAddress.收卷1B控制下料, 1);
if (position == 3) plcBusiness.writePlc(appConfig.LyAddress.收卷2A控制下料, 1);
if (position == 4) plcBusiness.writePlc(appConfig.LyAddress.收卷2B控制下料, 1);
}
///
/// 异常下发
///
///
///
///
public void sendError(int position, int errorType, bool isFinish, int mesCode)
{
if (isFinish)
{
if (errorType == 1) //MES异常
{
plcBusiness.writePlc(appConfig.LyAddress.MES异常, mesCode);
}
}
else
{
if (errorType == 1) //MES异常
{
plcBusiness.writePlc(appConfig.LyAddress.MES异常, mesCode);
}
if (errorType == 2)
{
plcBusiness.writePlc(appConfig.LyAddress.RFID异常, 1);
}
}
}
///
/// 解绑RFID与SFC
///
///
private void UnBindRfidAndSfc(string rfidStr)
{
DateTime beginTime = new DateTime();
string sfcStr = GetSfcByRfid(rfidStr);
if (!StringExtension.IsBlank(sfcStr))
{
ProcessLotServiceWSServiceParam lotServiceWSServiceParam = new ProcessLotServiceWSServiceParam()
{
url = inifile.IniReadValue("ProcessLotServiceWSServiceParam","url"),
site = inifile.IniReadValue("ProcessLotServiceWSServiceParam", "site"),
processlotref = "ProcessLotBO:2100," + rfidStr,
memberlist = new string[] { "SFCBO:2100," + sfcStr }
};
LogHelper.Info("MES解绑接口请求参数:" + JsonChange.ModeToJson(lotServiceWSServiceParam));
beginTime = DateTime.Now;
try
{
if (appConfig.isMesFlag == 1)
{
removeMemberResponse removeMember = MesWebServices.iRemoveMember(lotServiceWSServiceParam);
LogHelper.Info("MES解绑接口返回参数:" + JsonChange.ModeToJson(removeMember));
}
}
catch (Exception ex)
{
WebServiceLog.saveRemoveMember(lotServiceWSServiceParam, null, beginTime, ex.Message);
LogRefreshEvent?.Invoke(LogType.MesLog, String.Format("解绑接口调用异常:{0}", ex.Message));
LogRefreshEvent?.Invoke(LogType.AlarmLog, String.Format("RFID条码:{0}解绑失败:{1}!!!", rfidStr, ex.Message));
LogRefreshEvent?.Invoke(LogType.RfidLog, String.Format("RFID条码:{0}解绑失败!!!", rfidStr));
return;
}
}
else
{
LogHelper.Info("RFID条码:" + rfidStr + "未绑定SFC信息");
LogRefreshEvent?.Invoke(LogType.RfidLog, "RFID条码:" + rfidStr + "未绑定SFC信息");
}
}
///
/// 根据设备位置获取卷轴信息
///
///
///
public async Task GetShaftInfoByPosition(int position)
{
try
{
string str = appConfig.processId;
Expression> exp = s1 => true;
exp = exp.And(x => x.positionId == position.ToString() && x.processId == str);
List result = await shaftInfoServices.Query(exp);
if (result != null || result.Count > 0)
{
ProShaftInfo shaftInfo = result.FirstOrDefault();
return shaftInfo;
}
return null;
}
catch (Exception ex)
{
LogRefreshEvent?.Invoke(LogType.RfidLog, "获取卷轴信息为空");
LogHelper.Info("获取卷轴信息异常:" + ex.Message);
return null;
}
}
///
/// 放卷结束获取最后一卷
///
private async void UpdateShaftEndFlag(int position)
{
#region 参数定义
List shaftInfos = new List();
string logStr = "";
List positionList = PositionToList(position);
/*List positionList = new List();
if (position == 1)
{
positionList.Clear();
logStr = "1A轴";
if (ConfigHelper.GetConfig("tagAmount") == "2")
{
positionList.Add(2);
}
else
{
positionList.Add(1);
positionList.Add(2);
}
}
if (position == 2)
{
positionList.Clear();
logStr = "1B轴";
if (ConfigHelper.GetConfig("tagAmount") == "2")
{
positionList.Add(3);
}
else
{
positionList.Add(3);
positionList.Add(4);
}
}
if (position == 3)
{
logStr = "2A轴";
positionList.Clear();
if (ConfigHelper.GetConfig("tagAmount") == "3" || ConfigHelper.GetConfig("tagAmount") == "2")
{
positionList.Add(6);
}
else
{
positionList.Add(6);
positionList.Add(5);
}
}
if (position == 4)
{
logStr = "2B轴";
positionList.Clear();
if (ConfigHelper.GetConfig("tagAmount") == "3" || ConfigHelper.GetConfig("tagAmount") == "2")
{
positionList.Add(7);
}
else
{
positionList.Add(7);
positionList.Add(8);
}
}*/
#endregion
try
{
LogRefreshEvent?.Invoke(LogType.RfidLog, "当前收卷位生产轴:" + logStr);
//获取卷轴绑定的物料信息
foreach (var item in positionList)
{
//获取当前卷轴绑定的物料信息
ProShaftInfo shaftInfo = await this.GetShaftInfoByPosition(item);
if (StringExtension.IsBlank(shaftInfo.bindRfid))
{
LogRefreshEvent?.Invoke(LogType.RfidLog, "放卷结束,判断最后一卷收卷物料获取收卷位绑定信息为空," + logStr);
LogHelper.Info("放卷结束,判断最后一卷收卷物料获取收卷位绑定信息为空," + logStr);
continue;
}
LogHelper.Info(String.Format("{0}当前绑定的物料信息为:{1}", logStr, JsonChange.ModeToJson(shaftInfo)));
if (ConfigHelper.GetConfig("tagAmount") == "3" || ConfigHelper.GetConfig("tagAmount") == "2")
{
if (position > 2)
{
shaftInfo.endFlag = 1;
LogHelper.Info("放卷结束,确定最后一卷收卷物料RFID条码为:" + shaftInfo.bindRfid);
LogRefreshEvent?.Invoke(LogType.RfidLog, "放卷结束,确定最后一卷收卷物料RFID条码为:" + shaftInfo.bindRfid);
if (await shaftInfoServices.Update(shaftInfo))
{
LogRefreshEvent?.Invoke(LogType.RfidLog, "最后收卷物料标识修改成功");
LogHelper.Info("最后收卷物料标识修改成功");
}
else
{
LogRefreshEvent?.Invoke(LogType.RfidLog, "最后收卷物料标识修改失败");
LogHelper.Info("最后收卷物料标识修改失败");
}
}
else
{
if (item == 5 || item == 8)
{
shaftInfo.endFlag = 1;
LogHelper.Info("放卷结束,确定最后一卷收卷物料RFID条码为:" + shaftInfo.bindRfid);
LogRefreshEvent?.Invoke(LogType.RfidLog, "放卷结束,确定最后一卷收卷物料RFID条码为:" + shaftInfo.bindRfid);
if (await shaftInfoServices.Update(shaftInfo))
{
LogRefreshEvent?.Invoke(LogType.RfidLog, "最后收卷物料标识修改成功");
LogHelper.Info("最后收卷物料标识修改成功");
}
else
{
LogRefreshEvent?.Invoke(LogType.RfidLog, "最后收卷物料标识修改失败");
LogHelper.Info("最后收卷物料标识修改失败");
}
}
}
}
}
}
catch (Exception ex)
{
LogHelper.Error("放卷结束判断最后一卷物料逻辑处理异常", ex);
}
}
///
/// 强制下料
///
///
public void ForceDown(int position)
{
switch (position)
{
case 1:
LogRefreshEvent?.Invoke(LogType.PlcLog, "1A轴异常下料信号触发,下发下料信号");
LogHelper.Info("1A轴异常下料信号触发,下发下料信号");
plcBusiness.writePlc(appConfig.LyAddress.收卷1A控制下料, 0);
plcBusiness.writePlc(appConfig.LyAddress.收卷1AOK, 1);
break;
case 2:
LogRefreshEvent?.Invoke(LogType.PlcLog, "1B轴异常下料信号触发,下发下料信号");
LogHelper.Info("1B轴异常下料信号触发,下发下料信号");
plcBusiness.writePlc(appConfig.LyAddress.收卷1B控制下料, 0);
plcBusiness.writePlc(appConfig.LyAddress.收卷1BOK, 1);
break;
case 3:
LogRefreshEvent?.Invoke(LogType.PlcLog, "2A轴异常下料信号触发,下发下料信号");
LogHelper.Info("2A轴异常下料信号触发,下发下料信号");
plcBusiness.writePlc(appConfig.LyAddress.收卷2A控制下料, 0);
plcBusiness.writePlc(appConfig.LyAddress.收卷2AOK, 1);
break;
case 4:
LogRefreshEvent?.Invoke(LogType.PlcLog, "2B轴异常下料信号触发,下发下料信号");
LogHelper.Info("2B轴异常下料信号触发,下发下料信号");
plcBusiness.writePlc(appConfig.LyAddress.收卷2B控制下料, 0);
plcBusiness.writePlc(appConfig.LyAddress.收卷2BOK, 1);
break;
default:
break;
}
}
///
/// 收卷位开始信号
///
///
public void DownBegin(int position)
{
throw new NotImplementedException();
}
///
/// 判断收卷位是否合卷
///
///
///
///
private async Task PdRfidIsChuanDu(string epc, int position)
{
try
{
LogHelper.Info("RFID条码:" + epc + "判断是否串读逻辑处理");
Expression> exp = s1 => true;
exp = exp.And(x => x.bindRfid == epc && x.positionId != position.ToString() && x.processId == appConfig.processId);
List shaftInfos = await shaftInfoServices.Query(exp);
if (shaftInfos.Count > 0)
{
return true;
}
return false;
}
catch (Exception ex)
{
LogHelper.Error("串读逻辑处理异常", ex);
return false;
}
}
private List PositionToList(int position)
{
string logStr = "";
List positionList = new List();
if (position == 1)
{
positionList.Clear();
logStr = "1A轴";
if (ConfigHelper.GetConfig("tagAmount") == "2")
{
positionList.Add(2);
}
else
{
positionList.Add(1);
positionList.Add(2);
}
}
if (position == 2)
{
positionList.Clear();
logStr = "1B轴";
if (ConfigHelper.GetConfig("tagAmount") == "2")
{
positionList.Add(3);
}
else
{
positionList.Add(4);
positionList.Add(3);
}
}
if (position == 3)
{
logStr = "2A轴";
positionList.Clear();
if (ConfigHelper.GetConfig("tagAmount") == "3" || ConfigHelper.GetConfig("tagAmount") == "2")
{
positionList.Add(6);
}
else
{
positionList.Add(6);
positionList.Add(5);
}
}
if (position == 4)
{
logStr = "2B轴";
positionList.Clear();
if (ConfigHelper.GetConfig("tagAmount") == "3" || ConfigHelper.GetConfig("tagAmount") == "2")
{
positionList.Add(7);
}
else
{
positionList.Add(8);
positionList.Add(7);
}
}
return positionList;
}
///
///判断当前是哪个轴
///
///
private string Which(int position)
{
string logStr = "";
if (position == 1) logStr = "1A轴";
if (position == 2) logStr = "1B轴";
if (position == 3) logStr = "2A轴";
if (position == 4) logStr = "2B轴";
return logStr;
}
///
/// 获取配置列表
///
///
private List GetSysConfigList(string paramType)
{
try
{
Expression> exp = s1 => true;
if (StringExtension.IsNotBlank(paramType))
{
exp = exp.And(x => x.paramType == paramType);
}
exp = exp.And(x => x.processId == appConfig.processId);
List info = sysClientServices.Query(exp).Result;
return info;
}
catch (Exception ex)
{
LogHelper.Error("获取配置列表异常", ex);
return null;
}
}
///
/// 设备启动
///
public void MachineStartUp()
{
#region Delete By wenjy 2022-12-27 ME要求改为原逻辑
// throw new NotImplementedException();
//LogRefreshEvent?.Invoke(LogType.PlcLog, "开机启动信号触发成功");
//LogHelper.Info("开机启动信号触发成功");
////通过PLC地址获取放卷膜卷号
//string sfc = PlcBusiness.readStrPlc("D6034", (ushort)18).Replace("\0", "").Trim();
////JudgementMaterial(放卷膜卷号),返回true合卷报警=>PLC 写报警值,返回false不处理
//if (StringExtension.IsNotBlank(sfc))
//{
// // 判断合卷
// if (JudgementMaterial(sfc))
// {
// LogHelper.Info("触发合卷报警,下发PLC报警指令");
// LogRefreshEvent?.Invoke(LogType.AlarmLog, "放卷位与收卷位膜卷号不同触发合卷报警");
// // 写入合卷报警
// plcBusiness.writePlc("D6114", 1);
// }
//}
#endregion
}
///
/// 放卷位物料是否结束生产
///
///
private async Task UpMaterialIsEndProduction(string rfidStr)
{
bool result = false;
//通过MES获取RFID绑定的SFC并判断是否结束,冷压来料RFID绑定为涂布膜卷号,暂不使用SFC判断,使用RFID判断
string sfcStr = GetSfcByRfid(rfidStr);
LogRefreshEvent?.Invoke(LogType.RfidLog, String.Format("当前RFID:{0}绑定的SFC为:{1}", rfidStr, sfcStr));
//通过SFC判断该卷物料是否已经生产结束,如果已生产返回true,未生产返回false
//upRecordServices
Expression> exp = s1 => true;
exp = exp.And(x => x.Rfid == rfidStr);
Expression> order = s1 => s1.RecordTime;
ProUpRecord upRecord = await upRecordServices.QueryFirst(exp, order, false);
if (upRecord != null)
{
if (StringExtension.IsBlank(upRecord.endTime))
{
LogRefreshEvent?.Invoke(LogType.RfidLog, String.Format("当前SFC:{0}放卷结束时间为空,生产未结束", sfcStr));
result = false;
}
else
{
LogRefreshEvent?.Invoke(LogType.RfidLog, String.Format("当前SFC:{0}放卷结束时间为:{1}", sfcStr, upRecord.endTime));
result = true;
}
}
return result;
}
///
/// 通过RFID获取SFC
///
///
///
private string GetSfcByRfid(string rfidStr)
{
string sfcStr = "";
DateTime beginTime = new DateTime();
ProcessLotServiceWSServiceParam processLotServiceWSServiceParam = new ProcessLotServiceWSServiceParam()
{
url = inifile.IniReadValue("ProcessLotServiceWSServiceParam", "url"),
site = inifile.IniReadValue("ProcessLotServiceWSServiceParam", "site"),
processlotref = String.Format("ProcessLotBO:2100,{0}", rfidStr)
};
try
{
LogRefreshEvent?.Invoke(LogType.MesLog, "调用MES接口获取RFID绑定的SFC");
LogHelper.Info("MES获取膜卷号接口请求参数:" + JsonChange.ModeToJson(processLotServiceWSServiceParam));
if (appConfig.isMesFlag == 1)
{
readProcessLotResponse readProcessLotResponse = MesWebServices.readProcessLot(processLotServiceWSServiceParam);
LogHelper.Info("MES获取膜卷号接口返回参数:" + JsonChange.ModeToJson(readProcessLotResponse));
if (readProcessLotResponse.Response.processLotMemberList != null)
{
sfcStr = readProcessLotResponse.Response.processLotMemberList[0].memberContext.Substring(11);
LogHelper.Info("RFID条码:" + rfidStr + "绑定的SFC条码为:" + sfcStr);
LogRefreshEvent?.Invoke(LogType.MesLog, "RFID条码:" + rfidStr + "绑定的SFC条码为:" + sfcStr);
}
}
else
{
sfcStr = System.Guid.NewGuid().ToString("N").Substring(0, 14);
}
}
catch (Exception ex)
{
LogHelper.Info("MES获取膜卷号接口调用异常:" + ex.Message);
LogRefreshEvent?.Invoke(LogType.MesLog, "MES获取膜卷号接口调用异常:" + ex.Message);
LogRefreshEvent?.Invoke(LogType.AlarmLog, "MES获取膜卷号接口调用异常:" + ex.Message);
WebServiceLog.saveReadProcessLot(processLotServiceWSServiceParam, null, beginTime, ex.Message);
}
return sfcStr;
}
///
/// 上传冷压数据 2022-11-7
///
///
///
///
private bool UpLYMesData(ProShaftInfo x, ProUpRecord upRecord,ProDownRecord downRecord, machineIntegrationParametricData[] data)
{
bool upResult = false;
try
{
#region 将物料上传到mes中
MachineIntegrationServiceParam machineIntegrationServiceParam = new MachineIntegrationServiceParam()
{
url = inifile.IniReadValue("MachineIntegrationServiceParam","url"),
site = inifile.IniReadValue("MachineIntegrationServiceParam", "site"),
sfc = x.bindSfc, //将数据上传至拆分后的冷压下料膜卷号
operation = appConfig.operation,
operationRevision = inifile.IniReadValue("MachineIntegrationServiceParam", "operationRevision"),
activityId = inifile.IniReadValue("MachineIntegrationServiceParam", "activityId"),
resource = appConfig.resource,
dcGroup = inifile.IniReadValue("MachineIntegrationServiceParam", "dcGroup"),
dcGroupRevision = inifile.IniReadValue("MachineIntegrationServiceParam", "dcGroupRevision"),
parametricArray = data,
user = inifile.IniReadValue("MachineIntegrationServiceParam", "user"),
modeProcessSfc = WebService.MachineIntegrationServiceService.ModeProcessSfc.MODE_COMPLETE_SFC_POST_DC
};
LogHelper.Info("上传MES数据接口请求参数:" + JsonChange.ModeToJson(machineIntegrationServiceParam));
var dataCollectForSfcExResponse = MesWebServices.machineIntegration(machineIntegrationServiceParam);
var result = dataCollectForSfcExResponse.@return;
if (result.code > 0)
{
LogHelper.Info("冷压数据上传MES失败:" + result.message);
LogRefreshEvent?.Invoke(LogType.AlarmLog, "冷压数据上传MES失败:" + upLoadBusiness.GetMesMessage(result.code, result.message));
LogRefreshEvent?.Invoke(LogType.MesLog, "冷压数据上传MES失败:" + upLoadBusiness.GetMesMessage(result.code, result.message));
upResult = false;
}
else
{
LogRefreshEvent?.Invoke(LogType.MesLog, "冷压数据上传MES成功");
LogHelper.Info("冷压数据上传MES成功");
upResult = true;
}
#endregion
return upResult;
}
catch (Exception ex)
{
LogHelper.Info($"冷压数据异常:{ex.Message}");
return upResult = false;
}
}
///
/// 获取物料特征数据
///
///
///
///
///
private machineIntegrationParametricData[] GetMaterialWeight(ProShaftInfo x, ProUpRecord upRecord, ProDownRecord downRecord)
{
try
{
string LY_SJFX = string.Empty;//收卷轴方向
string LY_FJFX = string.Empty;//放卷轴方向
string LY_SJZ = x.shaftName;//收卷轴1A轴小天线
string LY_HXMQ = string.Empty;//横向膜区方向
int LY_ZXMQ = 0;//L2 SFC拆分第几轮
string LY_WLMX = string.Empty;//物料面向 小轴方向
double LY_S_X01 = 0.00;//冷压S面某膜区特征值-01
double LY_S_X02 = 0.00;//冷压S面某膜区特征值-02
double LY_B_X01 = 0.00;//冷压B面某膜区特征值-01
double LY_B_X02 = 0.00;//冷压B面某膜区特征值-02
double S_TARGETCW = 0.00; // 单面目标净重
string upMaterialSfc = upRecord.UpMaterialId;
//获取涂布下料EA
//string upMaterialEaValue = GetUpMaterialQty(position,upMaterialInfo.bindSfc, logStr);
LogHelper.Info($"收卷轴:{LY_SJZ}");
#region 横向膜区
//1、判断轴的方向
LY_FJFX = PlcBusiness.readPlc(appConfig.LyAddress.放卷方向) == 0 ? "顺时针" : "逆时针";
LogHelper.Info($"放卷轴方向:{LY_FJFX}");
if (x.positionId == "1" || x.positionId == "2") LY_SJFX = PlcBusiness.readPlc(appConfig.LyAddress.收卷1A方向) == 0 ? "顺时针" : "逆时针";
if (x.positionId == "3" || x.positionId == "4") LY_SJFX = PlcBusiness.readPlc(appConfig.LyAddress.收卷1B方向) == 0 ? "顺时针" : "逆时针";
if (x.positionId == "5" || x.positionId == "6") LY_SJFX = PlcBusiness.readPlc(appConfig.LyAddress.收卷2A方向) == 0 ? "顺时针" : "逆时针";
if (x.positionId == "7" || x.positionId == "8") LY_SJFX = PlcBusiness.readPlc(appConfig.LyAddress.收卷2B方向) == 0 ? "顺时针" : "逆时针";
LogHelper.Info($"收卷轴方向:{LY_SJFX}");
//2、 根据posttion判断料是左中右那个膜区
string tagAmount = ConfigHelper.GetConfig("tagAmount");
if (tagAmount == "3")
{
//顺时针
if (LY_SJFX == "顺时针" && x.positionId == "1") LY_HXMQ = "右";
if (LY_SJFX == "顺时针" && x.positionId == "2") LY_HXMQ = "左";
if (LY_SJFX == "顺时针" && x.positionId == "3") LY_HXMQ = "左";
if (LY_SJFX == "顺时针" && x.positionId == "4") LY_HXMQ = "右";
if (LY_SJFX == "顺时针" && x.positionId == "5") LY_HXMQ = "中";
if (LY_SJFX == "顺时针" && x.positionId == "6") LY_HXMQ = "中";
if (LY_SJFX == "顺时针" && x.positionId == "7") LY_HXMQ = "中";
if (LY_SJFX == "顺时针" && x.positionId == "8") LY_HXMQ = "中";
//逆时针
if (LY_SJFX == "逆时针" && x.positionId == "1") LY_HXMQ = "左";
if (LY_SJFX == "逆时针" && x.positionId == "2") LY_HXMQ = "右";
if (LY_SJFX == "逆时针" && x.positionId == "3") LY_HXMQ = "右";
if (LY_SJFX == "逆时针" && x.positionId == "4") LY_HXMQ = "左";
if (LY_SJFX == "逆时针" && x.positionId == "5") LY_HXMQ = "中";
if (LY_SJFX == "逆时针" && x.positionId == "6") LY_HXMQ = "中";
if (LY_SJFX == "逆时针" && x.positionId == "7") LY_HXMQ = "中";
if (LY_SJFX == "逆时针" && x.positionId == "8") LY_HXMQ = "中";
LogHelper.Info($"横向膜区:{LY_HXMQ}");
}
else
{
//顺时针
if (LY_SJFX == "顺时针" && x.positionId == "1") LY_HXMQ = "右";
if (LY_SJFX == "顺时针" && x.positionId == "2") LY_HXMQ = "左";
if (LY_SJFX == "顺时针" && x.positionId == "3") LY_HXMQ = "左";
if (LY_SJFX == "顺时针" && x.positionId == "4") LY_HXMQ = "右";
if (LY_SJFX == "顺时针" && x.positionId == "5") LY_HXMQ = "右";
if (LY_SJFX == "顺时针" && x.positionId == "6") LY_HXMQ = "左";
if (LY_SJFX == "顺时针" && x.positionId == "7") LY_HXMQ = "左";
if (LY_SJFX == "顺时针" && x.positionId == "8") LY_HXMQ = "右";
//逆时针
if (LY_SJFX == "逆时针" && x.positionId == "1") LY_HXMQ = "左";
if (LY_SJFX == "逆时针" && x.positionId == "2") LY_HXMQ = "右";
if (LY_SJFX == "逆时针" && x.positionId == "3") LY_HXMQ = "右";
if (LY_SJFX == "逆时针" && x.positionId == "4") LY_HXMQ = "左";
if (LY_SJFX == "逆时针" && x.positionId == "5") LY_HXMQ = "左";
if (LY_SJFX == "逆时针" && x.positionId == "6") LY_HXMQ = "右";
if (LY_SJFX == "逆时针" && x.positionId == "7") LY_HXMQ = "右";
if (LY_SJFX == "逆时针" && x.positionId == "8") LY_HXMQ = "左";
LogHelper.Info($"膜区:{LY_HXMQ}");
}
//3、物料面向
if (LY_SJFX == "顺时针" && LY_FJFX == "顺时针")
{
LY_WLMX = "S面";
}
if (LY_SJFX == "顺时针" && LY_FJFX == "逆时针")
{
LY_WLMX = "B面";
}
if (LY_SJFX == "逆时针" && LY_FJFX == "顺时针")
{
LY_WLMX = "B面";
}
if (LY_SJFX == "逆时针" && LY_FJFX == "逆时针")
{
LY_WLMX = "S面";
}
LogHelper.Info($"物料面向:{LY_WLMX}");
#endregion
#region 纵向膜区 update by wenjy 2022-11-11
//4、根据膜卷号和配置文件中的tagAmount,再根据膜卷号从数据库中查询条数、与tagAmount比较判断是第几轮
if (StringExtension.IsBlank(upMaterialSfc))
upMaterialSfc = ConfigHelper.GetConfig("LYsfc");
LogHelper.Info(String.Format("涂布来料膜卷号:{0};冷压上料膜卷号:{1};下料拆分膜卷号:{2}", upMaterialSfc, upRecord.Sfc, x.shaftName));
LY_ZXMQ = upLoadBusiness.GetLengthwaysArea(upMaterialSfc);
LogHelper.Info(String.Format("纵向膜区第几轮:{0}", LY_ZXMQ));
#endregion
#region 从mes中获取值
GetParametricValueRequestData[] t = null;
if (LY_HXMQ == "左" && LY_ZXMQ == 1)
{
t = new GetParametricValueRequestData[] {
new GetParametricValueRequestData { parameter= "S_EIGENVALUE_1_1" },
new GetParametricValueRequestData { parameter= "S_EIGENVALUE_1_2" },
new GetParametricValueRequestData { parameter= "B_EIGENVALUE_1_1" },
new GetParametricValueRequestData { parameter= "B_EIGENVALUE_1_2" },
new GetParametricValueRequestData { parameter= "S_TARGETCW" }
};
}
if (LY_HXMQ == "中" && LY_ZXMQ == 1)
{
t = new GetParametricValueRequestData[] {
new GetParametricValueRequestData { parameter= "S_EIGENVALUE_2_1" },
new GetParametricValueRequestData { parameter= "S_EIGENVALUE_2_2" },
new GetParametricValueRequestData { parameter= "B_EIGENVALUE_2_1" },
new GetParametricValueRequestData { parameter= "B_EIGENVALUE_2_2" },
new GetParametricValueRequestData { parameter= "S_TARGETCW" }
};
}
if (LY_HXMQ == "右" && LY_ZXMQ == 1)
{
t = new GetParametricValueRequestData[] {
new GetParametricValueRequestData { parameter= "S_EIGENVALUE_3_1" },
new GetParametricValueRequestData { parameter= "S_EIGENVALUE_3_2" },
new GetParametricValueRequestData { parameter= "B_EIGENVALUE_3_1" },
new GetParametricValueRequestData { parameter= "B_EIGENVALUE_3_2" },
new GetParametricValueRequestData { parameter= "S_TARGETCW" }
};
}
if (LY_HXMQ == "左" && LY_ZXMQ != 1)
{
t = new GetParametricValueRequestData[] {
new GetParametricValueRequestData { parameter= "S_EIGENVALUE_4_1" },
new GetParametricValueRequestData { parameter= "S_EIGENVALUE_4_2" },
new GetParametricValueRequestData { parameter= "B_EIGENVALUE_4_1" },
new GetParametricValueRequestData { parameter= "B_EIGENVALUE_4_2" },
new GetParametricValueRequestData { parameter= "S_TARGETCW" }
};
}
if (LY_HXMQ == "中" && LY_ZXMQ != 1)
{
t = new GetParametricValueRequestData[] {
new GetParametricValueRequestData { parameter= "S_EIGENVALUE_5_1" },
new GetParametricValueRequestData { parameter= "S_EIGENVALUE_5_2" },
new GetParametricValueRequestData { parameter= "B_EIGENVALUE_5_1" },
new GetParametricValueRequestData { parameter= "B_EIGENVALUE_5_2" },
new GetParametricValueRequestData { parameter= "S_TARGETCW" }
};
}
if (LY_HXMQ == "右" && LY_ZXMQ != 1)
{
t = new GetParametricValueRequestData[] {
new GetParametricValueRequestData { parameter= "S_EIGENVALUE_6_1" },
new GetParametricValueRequestData { parameter= "S_EIGENVALUE_6_2" },
new GetParametricValueRequestData { parameter= "B_EIGENVALUE_6_1" },
new GetParametricValueRequestData { parameter= "B_EIGENVALUE_6_2" },
new GetParametricValueRequestData { parameter= "S_TARGETCW" }
};
}
TBDataServiceParam tbServiceParam = new TBDataServiceParam()
{
url = inifile.IniReadValue("TBParametricValueParam","url"),
site = inifile.IniReadValue("TBParametricValueParam", "site"),
sfc = upMaterialSfc, //使用涂布膜卷号获取涂布重量特征数据
memberlist = t
};
try
{
var tbresult = MesWebServices.findTBData(tbServiceParam);
LogHelper.Info($"从mes中获取涂布数据:{JsonChange.ModeToJson(tbresult)}");
foreach (var item in tbresult.paramValues)
{
if (LY_HXMQ == "左" && LY_ZXMQ == 1)
{
if (item.parameter == "S_EIGENVALUE_1_1") LY_S_X01 = Convert.ToDouble((item.value));
if (item.parameter == "S_EIGENVALUE_1_2") LY_S_X02 = Convert.ToDouble((item.value));
if (item.parameter == "B_EIGENVALUE_1_1") LY_B_X01 = Convert.ToDouble((item.value));
if (item.parameter == "B_EIGENVALUE_1_2") LY_B_X02 = Convert.ToDouble((item.value));
if (item.parameter == "S_TARGETCW") S_TARGETCW = Convert.ToDouble((item.value));
}
if (LY_HXMQ == "中" && LY_ZXMQ == 1)
{
if (item.parameter == "S_EIGENVALUE_2_1") LY_S_X01 = Convert.ToDouble((item.value));
if (item.parameter == "S_EIGENVALUE_2_2") LY_S_X02 = Convert.ToDouble((item.value));
if (item.parameter == "B_EIGENVALUE_2_1") LY_B_X01 = Convert.ToDouble((item.value));
if (item.parameter == "B_EIGENVALUE_2_2") LY_B_X02 = Convert.ToDouble((item.value));
if (item.parameter == "S_TARGETCW") S_TARGETCW = Convert.ToDouble((item.value));
}
if (LY_HXMQ == "右" && LY_ZXMQ == 1)
{
if (item.parameter == "S_EIGENVALUE_3_1") LY_S_X01 = Convert.ToDouble((item.value));
if (item.parameter == "S_EIGENVALUE_3_2") LY_S_X02 = Convert.ToDouble((item.value));
if (item.parameter == "B_EIGENVALUE_3_1") LY_B_X01 = Convert.ToDouble((item.value));
if (item.parameter == "B_EIGENVALUE_3_2") LY_B_X02 = Convert.ToDouble((item.value));
if (item.parameter == "S_TARGETCW") S_TARGETCW = Convert.ToDouble((item.value));
}
if (LY_HXMQ == "左" && LY_ZXMQ != 1)
{
if (item.parameter == "S_EIGENVALUE_4_1") LY_S_X01 = Convert.ToDouble((item.value));
if (item.parameter == "S_EIGENVALUE_4_2") LY_S_X02 = Convert.ToDouble((item.value));
if (item.parameter == "B_EIGENVALUE_4_1") LY_B_X01 = Convert.ToDouble((item.value));
if (item.parameter == "B_EIGENVALUE_4_2") LY_B_X02 = Convert.ToDouble((item.value));
if (item.parameter == "S_TARGETCW") S_TARGETCW = Convert.ToDouble((item.value));
}
if (LY_HXMQ == "中" && LY_ZXMQ != 1)
{
if (item.parameter == "S_EIGENVALUE_5_1") LY_S_X01 = Convert.ToDouble((item.value));
if (item.parameter == "S_EIGENVALUE_5_2") LY_S_X02 = Convert.ToDouble((item.value));
if (item.parameter == "B_EIGENVALUE_5_1") LY_B_X01 = Convert.ToDouble((item.value));
if (item.parameter == "B_EIGENVALUE_5_2") LY_B_X02 = Convert.ToDouble((item.value));
if (item.parameter == "S_TARGETCW") S_TARGETCW = Convert.ToDouble((item.value));
}
if (LY_HXMQ == "右" && LY_ZXMQ != 1)
{
if (item.parameter == "S_EIGENVALUE_6_1") LY_S_X01 = Convert.ToDouble((item.value));
if (item.parameter == "S_EIGENVALUE_6_2") LY_S_X02 = Convert.ToDouble((item.value));
if (item.parameter == "B_EIGENVALUE_6_1") LY_B_X01 = Convert.ToDouble((item.value));
if (item.parameter == "B_EIGENVALUE_6_2") LY_B_X02 = Convert.ToDouble((item.value));
if (item.parameter == "S_TARGETCW") S_TARGETCW = Convert.ToDouble((item.value));
}
}
LogHelper.Info(String.Format("涂布特征数据:LY_S_X01:{0};LY_S_X02:{1};LY_B_X01:{2};LY_B_X02:{3};S_TARGETCW:{4}", LY_S_X01, LY_S_X02, LY_B_X01, LY_B_X02, S_TARGETCW));
}
catch (Exception ex)
{
LogHelper.Info("冷压获取数值失败:" + ex.Message);
}
#endregion
LogHelper.Info($"冷压物料特征数据:LY_FJFX:{LY_FJFX}-LY_SJFX:{LY_SJFX}-LY_SJZ:{LY_SJZ}-LY_HXMQ:{LY_HXMQ}-:LY_ZXMQ{LY_ZXMQ}-LY_WLMX:{LY_WLMX}-LY_S_X01:{LY_S_X01}-LY_S_X02:{LY_S_X02}-LY_B_X01:{LY_B_X01}-LY_B_X02:{LY_B_X02}-S_TARGETCW:{S_TARGETCW}");
machineIntegrationParametricData[] data = {
new machineIntegrationParametricData() {name ="LY_FJFX",dataType=ParameterDataType.TEXT, value=string.IsNullOrEmpty(LY_FJFX.ToString())?"0":LY_FJFX.ToString()},
new machineIntegrationParametricData() {name ="LY_SJFX",dataType=ParameterDataType.TEXT, value=string.IsNullOrEmpty(LY_SJFX.ToString())?"0":LY_SJFX.ToString()},
new machineIntegrationParametricData() {name ="LY_SJZ",dataType=ParameterDataType.TEXT, value=string.IsNullOrEmpty(LY_SJZ.ToString())?"0":LY_SJZ.ToString()},
new machineIntegrationParametricData() {name ="LY_HXMQ",dataType=ParameterDataType.TEXT, value=string.IsNullOrEmpty(LY_HXMQ.ToString())?"0":LY_HXMQ.ToString()},
new machineIntegrationParametricData() {name ="LY_ZXMQ",dataType=ParameterDataType.NUMBER, value=LY_ZXMQ.ToString()},
new machineIntegrationParametricData() {name ="LY_WLMX",dataType=ParameterDataType.TEXT, value=string.IsNullOrEmpty(LY_WLMX.ToString())?"0":LY_WLMX.ToString()},
new machineIntegrationParametricData() {name ="LY_S_X01",dataType=ParameterDataType.NUMBER, value=string.IsNullOrEmpty(LY_S_X01.ToString())?"0":LY_S_X01.ToString()},
new machineIntegrationParametricData() {name ="LY_S_X02",dataType=ParameterDataType.NUMBER, value=string.IsNullOrEmpty(LY_S_X02.ToString())?"0":LY_S_X02.ToString()},
new machineIntegrationParametricData() {name ="LY_B_X01",dataType=ParameterDataType.NUMBER, value=string.IsNullOrEmpty(LY_B_X01.ToString())?"0":LY_B_X01.ToString()},
new machineIntegrationParametricData() {name ="LY_B_X02",dataType=ParameterDataType.NUMBER, value=string.IsNullOrEmpty(LY_B_X02.ToString())?"0":LY_B_X02.ToString()},
new machineIntegrationParametricData() {name ="S_TARGETCW",dataType=ParameterDataType.NUMBER, value=string.IsNullOrEmpty(S_TARGETCW.ToString())?"0":S_TARGETCW.ToString()},
};
return data;
}catch(Exception ex)
{
LogHelper.Info("冷压物料特征数据获取异常:"+ex.Message);
LogRefreshEvent?.Invoke(LogType.AlarmLog, "冷压物料特征数据获取异常:" + ex.Message);
return null;
}
}
///
/// 物料特征数据上传至服务器
///
///
///
///
///
private void UpLoadMaterialWeight(int position,string sfcStr,string downRecordId, machineIntegrationParametricData[] datas)
{
//冷压特征数据上传至服务器
try
{
LyUpLoad lyUpLoad = new LyUpLoad()
{
sfcStr = sfcStr,
clientId = downRecordId,
positionId = position,
resource = appConfig.resource,
operation = appConfig.operation,
dcGroup = inifile.IniReadValue("MachineIntegrationServiceParam", "dcGroup"),
upDirection = datas.Where(x => x.name == "LY_FJFX").FirstOrDefault().value,
downDirection = datas.Where(x => x.name == "LY_SJFX").FirstOrDefault().value,
downPosition = datas.Where(x => x.name == "LY_SJZ").FirstOrDefault().value,
crosswiseArea = datas.Where(x => x.name == "LY_HXMQ").FirstOrDefault().value,
erectArea = datas.Where(x => x.name == "LY_ZXMQ").FirstOrDefault().value,
materialFace = datas.Where(x => x.name == "LY_WLMX").FirstOrDefault().value,
sx01 = datas.Where(x => x.name == "LY_S_X01").FirstOrDefault().value,
sx02 = datas.Where(x => x.name == "LY_S_X02").FirstOrDefault().value,
bx01 = datas.Where(x => x.name == "LY_B_X01").FirstOrDefault().value,
bx02 = datas.Where(x => x.name == "LY_B_X02").FirstOrDefault().value,
s_targetcws = datas.Where(x => x.name == "S_TARGETCW").FirstOrDefault().value,
recordTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
};
upLoadBusiness.SaveLyUpLoad(lyUpLoad);
}catch(Exception ex)
{
LogHelper.Info("冷压物料特征数据上传服务器异常:"+ex.Message);
LogRefreshEvent?.Invoke(LogType.AlarmLog, "冷压物料特征数据上传服务器异常:" + ex.Message);
}
}
private void SaveReadRecord(ProEquip equip, string rfidStr)
{
ProReadRecord readRecord = new ProReadRecord()
{
MachineID = equip.machineId,
EquipID = equip.equipId,
PositionID = equip.positionId,
Ant = StringChange.ParseToInt(equip.equipAnt),
ReadEPC = rfidStr,
Result = StringExtension.IsBlank(rfidStr) ? "0" : "1",
ReadTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
};
upLoadBusiness.SaveReadRecord(readRecord);
}
}
}