You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1600 lines
74 KiB
C#

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
using System.Windows.Forms;
using System.Xml;
using ZJ_BYD.Common;
using ZJ_BYD.DB;
using ZJ_BYD.Enums;
using ZJ_BYD.Model;
using ZJ_BYD.Untils;
using ZJ_BYD.ViewModel;
namespace ZJ_BYD
{
public class DoSomething : MyEventHandler
{
private StationInfo _stationInfo;
private List<LogVm> _logs;
private List<PointKeyValue> _plcPoints;
//打印条码
private string BarCode = "";
private bool startprint = true;
private bool savedb = true;
private bool runMainMatch = true;
private bool runSubMatch = true;
private bool runRequestMes = true;
private bool runStationData = true;
private static int tempMachineType = -1;//临时存放机型
#region 公共操作
private (bool ok, string value) ReadPlcValue(string pointCode)
{
try
{
bool ok = false;
string value = null;
var point = _plcPoints.FirstOrDefault(m => m.Key == pointCode);
if (point != null)
{
var plcValue = PlcHelper.GetPlcVal(point.DataType, point.Address);
ok = plcValue.ok;
if (plcValue.ok)
{
value = plcValue.val.Replace("\r", "");
}
else
{
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>读取{pointCode}值为失败");
}
}
else
{
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>{pointCode}地址不存在");
}
return (ok, value);
}
catch (Exception ex)
{
var errMsg = ex == null ? "未知异常" : ex.Message;
MessageBox.Show($"DoSomething中ReadPlcValue方法出发异常:{errMsg},请联系管理员!");
return (false, "");
}
}
private void LogHandler(string log)
{
_logs.Add(new LogVm
{
StationCode = _stationInfo.StationCode,
HisLog = Log
});
StationCode = _stationInfo.StationCode;
Log = log + Environment.NewLine;
}
#endregion
#region 数据处理逻辑
/// <summary>
/// 开始读取PLC数据
/// </summary>
/// <param name="stationInfo"></param>
/// <param name="logs"></param>
public void ReadPlc(StationInfo stationInfo, List<LogVm> logs)
{
try
{
_stationInfo = stationInfo;
_logs = logs;
_plcPoints = Program.PointKeyValues.Where(m => m.StationCode == _stationInfo.StationCode).ToList();
Task.Factory.StartNew(() =>
{
while (true)
{
Thread.Sleep(Program.readplcrate);
DataChange();
}
});
}
catch (Exception ex)
{
var errMsg = ex == null ? "未知异常" : ex.Message;
MessageBox.Show($"DoSomething中ReadPlc方法出发异常:{errMsg},请联系管理员!");
}
}
/// <summary>
/// 轮训读取PLC数据并进行处理
/// </summary>
private void DataChange()
{
try
{
if (_plcPoints != null && _plcPoints.Count > 0)
{
foreach (var plcPoint in _plcPoints)
{
var plcResult = PlcHelper.GetPlcVal(plcPoint.DataType, plcPoint.Address);
if (plcResult.ok)
{
string strVal = plcResult.val;
switch (plcPoint.Key)
{
//工位状态
case "M3":
var stationEnumVal = EnumHelper.GetEnumByValue(typeof(StationStatusEnum), int.Parse(plcResult.val));
if (stationEnumVal != null)
{
strVal = EnumHelper.GetEnumDescription(stationEnumVal);
}
else
{
strVal = "UNDEFINED";
}
break;
//产品总状态
case "M5":
var enumVal = EnumHelper.GetEnumByValue(typeof(StatusEnum), int.Parse(plcResult.val));
if (enumVal != null)
{
strVal = EnumHelper.GetEnumDescription(enumVal);
}
else
{
strVal = "UNDEFINED";
}
break;
//机台状态
case "M7":
strVal = plcResult.val.ToLower() == "true" ? "手动" : "自动";
break;
//机型
case "M14":
MacType_M14(strVal, plcPoint.DataType, plcPoint.Address);
break;
//请求条码打印
case "M16":
Print_M16_M17(strVal);
break;
//请求主条码匹配
case "M19":
MainMatch_M19_M20(strVal);
break;
//请求组件条码匹配
case "M21":
SubMatch_M21_M22(strVal);
break;
//请求数据上传
case "M23":
RequestMes_M23_M24(strVal);
break;
//请求指定工位数据
case "M25":
GetStationData_M25_M26(strVal);
break;
default:
break;
}
plcPoint.Val = strVal;
}
}
}
}
catch (Exception ex)
{
var errMsg = ex == null ? "未知异常" : ex.Message;
LogHandler($"数据处理异常:{errMsg}");
}
}
/// <summary>
/// 机型
/// </summary>
/// <param name="strVal"></param>
private void MacType_M14(string strVal, string dataType, string address)
{
try
{
//重新读取PLC点位值
var readResult = PlcHelper.GetPlcVal(dataType, address);
if (readResult.ok)
{
strVal = readResult.val;
}
else
{
LogHelper.WriteErrorLog($"MacType_M14方法读取机型失败机型值={strVal}");
}
if (strVal.Contains("."))
{
strVal = strVal.Substring(0, strVal.LastIndexOf("."));
}
int.TryParse(strVal, out int sortIndex);
//如果PLC传入的机型和上一次的不一样则重新赋值并且重新查数据库校验-2023-04-10
if (tempMachineType != sortIndex)
{
if (sortIndex > 0)
{
if (_stationInfo == null)
{
LogHelper.WriteLog($"MacType_M14方法中的工位信息为空机型值={strVal}");
return;
}
var maskCode = Program.t_MaskCodes.FirstOrDefault(m => m.StationCode == _stationInfo.StationCode && m.SortIndex == sortIndex);
if (maskCode == null)
{
var msg = $"{DateTime.Now:HH:mm:ss}>>>>>{_stationInfo.StationCode}工位PLC发送机型在一体机不存在{sortIndex}{Environment.NewLine}";
LogHelper.WriteLog(msg);
_logs.Add(new LogVm
{
StationCode = _stationInfo.StationCode,
HisLog = msg
});
StationCode = _stationInfo.StationCode;
Log = msg;
}
else
{
bool needChange = false;
Program.MachineType = maskCode.Category;//机型
if (!maskCode.IsUsed)
{
needChange = true;
}
if (needChange)
{
var rows = MskCodeHelper.UpdateMskCodeIsUsedBySortIndex(sortIndex);
if (rows > 0)
{
var msg = $"{DateTime.Now:HH:mm:ss}>>>>>{_stationInfo.StationCode}工位进行了机型切换,机型={sortIndex},请重启上位机{Environment.NewLine}";
LogHelper.WriteLog(msg);
_logs.Add(new LogVm
{
StationCode = _stationInfo.StationCode,
HisLog = msg
});
StationCode = _stationInfo.StationCode;
Log = msg;
}
else
{
var msg = $"{DateTime.Now:HH:mm:ss}>>>>>{_stationInfo.StationCode}工位进行机型切换失败,机型={sortIndex}{Environment.NewLine}";
LogHelper.WriteLog(msg);
_logs.Add(new LogVm
{
StationCode = _stationInfo.StationCode,
HisLog = msg
});
StationCode = _stationInfo.StationCode;
Log = msg;
}
}
}
}
}
}
catch (Exception ex)
{
var errMsg = ex == null ? "未知异常" : ex.Message;
MessageBox.Show($"DoSomething中MacType_M14方法出发异常:{errMsg},请联系管理员!");
}
}
/// <summary>
/// 打印条码
/// </summary>
/// <param name="strVal"></param>
private void Print_M16_M17(string strVal)
{
if ((!string.IsNullOrWhiteSpace(strVal)) && (strVal.ToLower() == "true" || strVal == "1") && startprint && _stationInfo.IsShowPrintBtn)
{
startprint = false;
var plcMsg = $"{DateTime.Now:HH:mm:ss}>>>>>PLC请求打印{Environment.NewLine}";
_logs.Add(new LogVm
{
StationCode = _stationInfo.StationCode,
HisLog = plcMsg
});
StationCode = _stationInfo.StationCode;
Log = plcMsg;
//主条码点位
var M28 = _plcPoints.FirstOrDefault(m => m.Key == "M28");
//打印条码反馈点位
var M17 = _plcPoints.FirstOrDefault(m => m.Key == "M17");
//机种信息
var M14 = _plcPoints.FirstOrDefault(m => m.Key == "M14");
//产品总状态
var M5 = _plcPoints.FirstOrDefault(m => m.Key == "M5");
//启动反馈点位
var M20 = _plcPoints.FirstOrDefault(m => m.Key == "M20");
if (M28 != null && !string.IsNullOrWhiteSpace(M28.Val))
{
try
{
//调用打印
var (ok, resultBarcode, msg) = PrintByHttp_1(M28.Val, _stationInfo);
if (ok)
{
BarCode = resultBarcode;
//打印反馈
Program.siemensS7Net.Write(M17.Address, ushort.Parse("1"));
}
else
{
//打印反馈
Program.siemensS7Net.Write(M17.Address, ushort.Parse("2"));
}
_logs.Add(new LogVm
{
StationCode = _stationInfo.StationCode,
HisLog = msg
});
StationCode = _stationInfo.StationCode;
Log = msg;
}
catch (Exception ex)
{
startprint = true;
var msg = ex == null ? "操作异常" : ex.Message;
LogHelper.WriteErrorLog($"标签打印时异常:{msg}");
//打印反馈
Program.siemensS7Net.Write(M17.Address, ushort.Parse("2"));
}
}
else
{
var msg = $"{DateTime.Now:HH:mm:ss}>>>>>一体机打印时反馈主条码为空无法匹配机型{Environment.NewLine}";
_logs.Add(new LogVm
{
StationCode = _stationInfo.StationCode,
HisLog = msg
});
StationCode = _stationInfo.StationCode;
Log = msg;
startprint = true;
}
}
else
{
startprint = true;
}
}
/// <summary>
/// 主条码变化-匹配
/// </summary>
private void MainMatch_M19_M20(string strVal)
{
if (!string.IsNullOrWhiteSpace(strVal) && strVal == "1" && runMainMatch)
{
runMainMatch = false;
LogHandler($"{Environment.NewLine}{DateTime.Now:HH:mm:ss}>>>>>PLC请求主条码匹配");
var M20 = _plcPoints.FirstOrDefault(m => m.Key == "M20");
try
{
//主条码校验
var (ok, valresult, msg) = CheckCode.StartCheck(_stationInfo, _plcPoints);
_logs.Add(new LogVm
{
StationCode = _stationInfo.StationCode,
HisLog = $"{DateTime.Now:HH:mm:ss}>>>>>主条码匹配反馈:{(ok ? "OK" : "NG")},详情:{msg}{Environment.NewLine}"
});
StationCode = _stationInfo.StationCode;
Log = $"{DateTime.Now:HH:mm:ss}>>>>>主条码匹配反馈:{(ok ? "OK" : "NG")},详情:{msg}{Environment.NewLine}";
if (ok)
{
Program.siemensS7Net.Write(M20.Address, ushort.Parse("1"));
}
else
{
Program.siemensS7Net.Write(M20.Address, ushort.Parse("2"));
}
}
catch (Exception ex)
{
Program.siemensS7Net.Write(M20.Address, ushort.Parse("2"));
var errMsg = ex == null ? "未知异常" : ex.Message;
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>{errMsg}");
runMainMatch = true;
}
}
else
{
runMainMatch = true;
}
}
/// <summary>
/// 组件条码变化-匹配
/// </summary>
private void SubMatch_M21_M22(string strVal)
{
if (!string.IsNullOrWhiteSpace(strVal) && (strVal == "1" || strVal == "2") && runSubMatch)
{
runSubMatch = false;
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>PLC请求组件条码匹配");
try
{
string errmsg;
//机种
var M14 = _plcPoints.FirstOrDefault(m => m.Key == "M14");
int.TryParse(M14.Val, out int intMachineType);
var mskCode = Program.t_MaskCodes.FirstOrDefault(m => m.StationCode == _stationInfo.StationCode && m.SortIndex == intMachineType);
if (mskCode == null)
{
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>组件条码匹配反馈NG未查询到掩码表数据工位{_stationInfo.StationCode},机型={M14.Val}");
runSubMatch = true;
CodeMatchUploadResult(false);
return;
}
//支线查询逻辑
T_BranchInfo branchInfo = new T_BranchInfo();
var subPoints = _plcPoints.Where(m => m.IsSub).OrderBy(m => m.Key).ToList();
if (mskCode.IsUseStator)
{
branchInfo = BranchInfoHelper.GetBranchInfoByStationCodeAndProductSfcCode(_stationInfo.StationCode, mskCode.ProductSfcCode);
if (branchInfo == null)
{
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>验证组件码反馈NG未查询到支线配置信息工位{_stationInfo.StationCode},机壳条码:{mskCode.ProductSfcCode}");
runSubMatch = true;
CodeMatchUploadResult(false);
return;
}
}
if (subPoints.Count <= 0)
{
errmsg = $"{_stationInfo.StationName}组件条码本地匹配反馈NGPLC点位表未获取到组件条码配置";
LogHelper.WriteLog(errmsg);
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>{errmsg}");
runSubMatch = true;
CodeMatchUploadResult(false);
return;
}
var subCodeVms = new List<SubCodeVM>();
for (int i = 0; i < subPoints.Count; i++)
{
//重新读取组件条码
if (string.IsNullOrWhiteSpace(subPoints[i].Val))
{
subPoints[i].Val = PlcHelper.GetPlcVal(subPoints[i].DataType, subPoints[i].Address, subPoints[i].Length).val;
}
if (!string.IsNullOrWhiteSpace(subPoints[i].Val))
{
subCodeVms.Add(new SubCodeVM { SubCode = subPoints[i].Val, SortIndex = i + 1 });
}
}
if (subCodeVms.Count <= 0)
{
errmsg = $"{_stationInfo.StationName}组件条码本地匹配反馈NG未获取到组件条码";
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>{errmsg}");
runSubMatch = true;
CodeMatchUploadResult(false);
return;
}
//组件条码本地校验
var (ok, msg) = CheckCode.MachCode(mskCode, subCodeVms);
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>{msg}");
//本地校验失败,就无需往下执行
if (!ok)
{
CodeMatchUploadResult(ok);
runSubMatch = true;
return;
}
//在线模式
if (Program.SysMode)
{
//支线查询逻辑
if (mskCode.IsUseStator)
{
//构建查询参数
var subCode = subCodeVms.FirstOrDefault()?.SubCode;
string[] lins = null;
if (!string.IsNullOrWhiteSpace(branchInfo.BranchResource))
{
if (branchInfo.BranchResource.Contains(","))
{
lins = branchInfo.BranchResource.Split(',');
}
else
{
lins = new string[1];
lins[0] = branchInfo.BranchResource;
}
}
var checkSubResult = CheckCode.CheckSubCodesByOnLine(_stationInfo, lins, branchInfo.BranchSite, branchInfo.BranchProcedure, branchInfo.BranchPara, subCodeVms);
ok = checkSubResult.ok;
if (ok)
{
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>{checkSubResult.msg}");
}
else
{
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>{checkSubResult.msg}");
CodeMatchUploadResult(ok);
runSubMatch = true;
return;
}
}
}
CodeMatchUploadResult(ok);
runSubMatch = true;
}
catch (Exception ex)
{
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>{ex}");
CodeMatchUploadResult(false);
runSubMatch = true;
}
}
else
{
runSubMatch = true;
}
}
/// <summary>
/// 上报MES操作
/// </summary>
/// <param name="stationInfo"></param>
/// <param name="plcPoints"></param>
/// <param name="logs"></param>
/// <param name="strVal"></param>
private void RequestMes_M23_M24(string strVal)
{
if (!string.IsNullOrWhiteSpace(strVal) && strVal == "1" && savedb && runRequestMes)
{
runRequestMes = false;
//执行结果状态
bool isCheck = false;
try
{
#region 开始执行
//主条码
var M28 = _plcPoints.FirstOrDefault(m => m.Key == "M28");
//重新读取主条码
var plcResult = PlcHelper.GetPlcVal(M28?.DataType, M28?.Address);
if (plcResult.ok)
{
M28.Val = plcResult.val.Replace("\r", "");
}
var plcMsg = $"{DateTime.Now:HH:mm:ss}>>>>>PLC请求数据上传主条码={M28.Val}{Environment.NewLine}";
_logs.Add(new LogVm
{
StationCode = _stationInfo.StationCode,
HisLog = plcMsg
});
StationCode = _stationInfo.StationCode;
Log = plcMsg;
if (string.IsNullOrWhiteSpace(M28.Val) || M28.Val == "ERROR")
{
var errMsg = $"一体机数据上传反馈:{_stationInfo.StationCode}工位数据上传NG壳体条码异常";
_logs.Add(new LogVm
{
StationCode = _stationInfo.StationCode,
HisLog = $"{DateTime.Now:HH:mm:ss}>>>>>{errMsg}{Environment.NewLine}"
});
StationCode = _stationInfo.StationCode;
Log = $"{DateTime.Now:HH:mm:ss}>>>>>{errMsg}{Environment.NewLine}";
DataUploadResult(false);
return;
}
//铭牌打印工位从PLC读取组件码手持扫码枪扫的铭牌码和上位机自动生成的进行比对
if (_stationInfo.IsShowPrintBtn)
{
//组件条码
var strSubCode = "";
var subCodes = Program.PointKeyValues.Where(m => m.StationCode == Program.ActiveStatinCode && m.IsSub && m.Key != "M100").ToList();
if (subCodes.Count > 0)
{
for (int i = 0; i < subCodes.Count; i++)
{
if (!string.IsNullOrEmpty(subCodes[i].Val))
{
strSubCode += ($"{subCodes[i].Val}");
}
}
}
if (string.IsNullOrEmpty(BarCode))
{
var errMsg = $"一体机数据上传反馈:{_stationInfo.StationCode}工位数据上传NG打印条码值为空";
_logs.Add(new LogVm
{
StationCode = _stationInfo.StationCode,
HisLog = $"{DateTime.Now:HH:mm:ss}>>>>>{errMsg}{Environment.NewLine}"
});
StationCode = _stationInfo.StationCode;
Log = $"{DateTime.Now:HH:mm:ss}>>>>>{errMsg}{Environment.NewLine}";
DataUploadResult(false);
return;
}
strSubCode = strSubCode.TrimEnd('');
if (string.IsNullOrEmpty(strSubCode))
{
var errMsg = $"一体机数据上传反馈:{_stationInfo.StationCode}工位数据上传NG扫描铭牌码值为空";
_logs.Add(new LogVm
{
StationCode = _stationInfo.StationCode,
HisLog = $"{DateTime.Now:HH:mm:ss}>>>>>{errMsg}{Environment.NewLine}"
});
StationCode = _stationInfo.StationCode;
Log = $"{DateTime.Now:HH:mm:ss}>>>>>{errMsg}{Environment.NewLine}";
DataUploadResult(false);
return;
}
if (BarCode != strSubCode)
{
var errMsg = $"一体机数据上传反馈:{_stationInfo.StationCode}工位数据上传NG打印条码{BarCode}与组件条码:{strSubCode}不一致!";
_logs.Add(new LogVm
{
StationCode = _stationInfo.StationCode,
HisLog = $"{DateTime.Now:HH:mm:ss}>>>>>{errMsg}{Environment.NewLine}"
});
StationCode = _stationInfo.StationCode;
Log = $"{DateTime.Now:HH:mm:ss}>>>>>{errMsg}{Environment.NewLine}";
DataUploadResult(false);
return;
}
else if (!ResultHelper.CheckBarcodeAndProductCode(M28.Val, BarCode))
{
var errMsg = $"一体机数据上传反馈:{_stationInfo.StationCode}工位数据上传NG打印条码{BarCode}已在其他产品上绑定!";
_logs.Add(new LogVm
{
StationCode = _stationInfo.StationCode,
HisLog = $"{DateTime.Now:HH:mm:ss}>>>>>{errMsg}{Environment.NewLine}"
});
StationCode = _stationInfo.StationCode;
Log = $"{DateTime.Now:HH:mm:ss}>>>>>{errMsg}{Environment.NewLine}";
DataUploadResult(false);
return;
}
}
savedb = false;
#endregion
//存本地库
var (ok, msg) = CheckCode.SaveDb(_stationInfo.StationCode, BarCode);
_logs.Add(new LogVm
{
StationCode = _stationInfo.StationCode,
HisLog = $"{DateTime.Now:HH:mm:ss}>>>>>{msg}{Environment.NewLine}"
});
StationCode = _stationInfo.StationCode;
Log = $"{DateTime.Now:HH:mm:ss}>>>>>{msg}{Environment.NewLine}";
if (!ok)
{
DataUploadResult(ok);
return;
}
if (Program.SysMode)
{
//机种信息
var M14 = _plcPoints.FirstOrDefault(m => m.Key == "M14");
var mskCode = Program.t_MaskCodes.First(m => m.StationCode == _stationInfo.StationCode && m.SortIndex == int.Parse(M14.Val));
if (mskCode != null)
{
var M5 = _plcPoints.FirstOrDefault(m => m.Key == "M5");
var testList = Program.PointKeyValues
.Where(m => m.StationCode == _stationInfo.StationCode && m.IsTestItem).ToList();
var showTestList = testList.Where(m => m.IsShowMain).ToList();
if (showTestList.Count > 0)
{
for (int i = 0; i < showTestList.Count; i++)
{
var data = testList.FirstOrDefault(m => m.Key.Contains(showTestList[i].Key) && !m.IsShowMain);
if (data != null)
{
showTestList[i].Result = (data.Val == "1" || data.Val == "1.000") ? "OK" : ((data.Val == "2" || data.Val == "2.000") ? "NG" : $"{data.Val}");
}
}
var postMesList = showTestList.Select(m => new PostMesTestItemVM
{
TestItem = m.KeyDesc,
TestResult = m.Result,
TestVal = m.Val
}).ToList();
List<PostMesSubInfo> list_postMesList_Sub = new List<PostMesSubInfo>();
if (_stationInfo.StationCode == Program.DongJingPanST)
{
var M29_value = ReadPlcValue("M29");
list_postMesList_Sub.Add(new PostMesSubInfo()
{
SubCode = M29_value.value,
MaterialNum = mskCode.Sub1SfcItemCode,
VersionNo = mskCode.Sub1ItemVersion,
ItemType = mskCode.Sub1ItemType
});
var M30_value = ReadPlcValue("M30");
list_postMesList_Sub.Add(new PostMesSubInfo()
{
SubCode = M30_value.value,
MaterialNum = mskCode.Sub2SfcItemCode,
VersionNo = mskCode.Sub2ItemVersion,
ItemType = mskCode.Sub2ItemType
});
}
else
{
var sub_Code = _plcPoints.Where(m => m.IsSub && m.Key != "M100").ToList();
LogHelper.WriteLog($"离散绑定时获取到的组件条码:{JsonConvert.SerializeObject(sub_Code)}");
foreach (var item_Sub_code in sub_Code)
{
if (!string.IsNullOrWhiteSpace(item_Sub_code.Val))
{
var postMesList_Sub = new PostMesSubInfo
{
SubCode = item_Sub_code.Val,
MaterialNum = mskCode.Sub1SfcItemCode,
VersionNo = mskCode.Sub1ItemVersion,
ItemType = mskCode.Sub1ItemType
};
list_postMesList_Sub.Add(postMesList_Sub);
}
}
}
if (_stationInfo.IsBindAssembleCode)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
//离散装配条码绑定
var MesResult = RequestMes.BindCode(mskCode.Site, M28.Val, mskCode.Resource, mskCode.Procedure, CurrentUser.UserName, list_postMesList_Sub);
stopwatch.Stop();
if (MesResult.ok)
{
_logs.Add(new LogVm
{
StationCode = _stationInfo.StationCode,
HisLog = $"{DateTime.Now:HH:mm:ss}>>>>>离散绑定组件成功:{MesResult.msg},耗时:{stopwatch.ElapsedMilliseconds}{Environment.NewLine}"
});
StationCode = _stationInfo.StationCode;
Log = $"{DateTime.Now:HH:mm:ss}>>>>>离散绑定组件成功:{MesResult.msg},耗时:{stopwatch.ElapsedMilliseconds}{Environment.NewLine}";
}
else
{
_logs.Add(new LogVm
{
StationCode = _stationInfo.StationCode,
HisLog = $"{DateTime.Now:HH:mm:ss}>>>>>离散绑定组件NG{MesResult.msg},请注意,耗时:{stopwatch.ElapsedMilliseconds}{Environment.NewLine}"
});
StationCode = _stationInfo.StationCode;
Log = $"{DateTime.Now:HH:mm:ss}>>>>>离散绑定组件NG{MesResult.msg},请注意,耗时:{stopwatch.ElapsedMilliseconds}{Environment.NewLine}";
var updateRow = ResultHelper.UpdateResultByProductSfcCode(_stationInfo.StationCode, M28.Val, false, MesResult.msg);
if (updateRow > 0)
{
LogHelper.WriteLog($"调用MES的离散绑定接口失败时更新结果表成功工位编码={_stationInfo.StationCode},条码={M28.Val}");
}
else
{
LogHelper.WriteLog($"调用MES的离散绑定接口失败时更新结果表失败工位编码={_stationInfo.StationCode},条码={M28.Val}");
}
return;
}
}
//PASS
if (M5.Val.ToUpper() == "UNDEFINED")
{
var M5PlcResult = PlcHelper.GetPlcVal(M5.DataType, M5.Address);
if (M5PlcResult.ok)
{
M5.Val = M5PlcResult.val;
}
else
{
LogHelper.WriteLog($"调用MES接口前读取M5点位{M5.Address},值时失败");
}
}
if (M5.Val == "OK" || M5.Val == "1" || M5.Val == "1.000")
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
var MesResult = RequestMes.Pass(mskCode.Site, M28.Val, mskCode.Resource, mskCode.Procedure, CurrentUser.UserName, Program.testfilename, Program.programversion, postMesList);
stopwatch.Stop();
isCheck = MesResult.ok;
if (MesResult.ok)
{
Log = $"{DateTime.Now:HH:mm:ss}>>>>>PASS接口调用成功主条码={M28.Val}上传MES成功!,耗时:{stopwatch.ElapsedMilliseconds}{Environment.NewLine}";
_logs.Add(new LogVm
{
StationCode = _stationInfo.StationCode,
HisLog = Log,
});
}
else
{
try
{
LogHelper.WriteLog($"调用MES的PASS接口失败工位编码={_stationInfo.StationCode},条码={M28.Val}");
var updateRow = ResultHelper.UpdateResultByProductSfcCode(_stationInfo.StationCode, M28.Val, false, MesResult.msg);
if (updateRow > 0)
{
LogHelper.WriteLog($"调用MES的PASS接口失败时更新结果表成功工位编码={_stationInfo.StationCode},条码={M28.Val}");
}
else
{
LogHelper.WriteLog($"调用MES的PASS接口失败时更新结果表失败工位编码={_stationInfo.StationCode},条码={M28.Val}");
}
}
catch (Exception ex)
{
var errMsg = ex == null ? "修改结果表失败" : $"修改结果表失败:{ex.Message}";
LogHelper.WriteLog(errMsg);
}
_logs.Add(new LogVm
{
StationCode = _stationInfo.StationCode,
HisLog = $"{DateTime.Now:HH:mm:ss}>>>>>PASS接口调用NG主条码={M28.Val},耗时:{stopwatch.ElapsedMilliseconds},详情:{MesResult.msg},请取走产品!{Environment.NewLine}"
});
StationCode = _stationInfo.StationCode;
Log = $"{DateTime.Now:HH:mm:ss}>>>>>PASS接口调用NG主条码={M28.Val},耗时:{stopwatch.ElapsedMilliseconds},详情:{MesResult.msg},请取走产品!{Environment.NewLine}";
}
}
else
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
var MesResult = RequestMes.Error(mskCode.Site, M28.Val, mskCode.Resource, mskCode.Procedure, CurrentUser.UserName, Program.testfilename, Program.programversion, mskCode.NgCode, postMesList);
stopwatch.Stop();
isCheck = MesResult.ok;
if (MesResult.ok)
{
_logs.Add(new LogVm
{
StationCode = _stationInfo.StationCode,
HisLog = $"{DateTime.Now:HH:mm:ss}>>>>>ERROR接口调用成功耗时{stopwatch.ElapsedMilliseconds}{Environment.NewLine}"
});
StationCode = _stationInfo.StationCode;
Log = $"{DateTime.Now:HH:mm:ss}>>>>>ERROR接口调用成功耗时{stopwatch.ElapsedMilliseconds}{Environment.NewLine}";
}
else
{
try
{
LogHelper.WriteLog($"调用MES的ERROR接口NG工位编码={_stationInfo.StationCode},条码={M28.Val}");
var updateRow = ResultHelper.UpdateResultByProductSfcCode(_stationInfo.StationCode, M28.Val, false, MesResult.msg);
if (updateRow > 0)
{
LogHelper.WriteLog($"调用MES的ERROR接口失败时更新结果表成功工位编码={_stationInfo.StationCode},条码={M28.Val}");
}
else
{
LogHelper.WriteLog($"调用MES的ERROR接口失败时更新结果表失败工位编码={_stationInfo.StationCode},条码={M28.Val}");
}
}
catch (Exception ex)
{
var errMsg = ex == null ? "修改结果表失败" : $"修改结果表失败:{ex.Message}";
LogHelper.WriteLog(errMsg);
}
_logs.Add(new LogVm
{
StationCode = _stationInfo.StationCode,
HisLog = $"{DateTime.Now:HH:mm:ss}>>>>>ERROR接口调用NG耗时{stopwatch.ElapsedMilliseconds},详情:{MesResult.msg},请取走产品!{Environment.NewLine}"
});
StationCode = _stationInfo.StationCode;
Log = $"{DateTime.Now:HH:mm:ss}>>>>>ERROR接口调用NG耗时{stopwatch.ElapsedMilliseconds},详情:{MesResult.msg},请取走产品!{Environment.NewLine}";
}
}
}
}
}
else
{
//离线模式
isCheck = ok;
}
#endregion
}
catch (Exception ex)
{
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>{ex.ToString()}");
}
#region 返回结果
DataUploadResult(isCheck);
#endregion
}
else
{
runRequestMes = true;
}
}
/// <summary>
/// 请求指定工位数据
/// </summary>
/// <param name="strVal"></param>
private void GetStationData_M25_M26(string strVal)
{
if (!string.IsNullOrWhiteSpace(strVal) && strVal != "0" && runStationData)
{
runStationData = false;
var plcMsg = $"{DateTime.Now:HH:mm:ss}>>>>>PLC请求指定工位数据,M25.val={strVal}{Environment.NewLine}";
try
{
_logs.Add(new LogVm
{
StationCode = _stationInfo.StationCode,
HisLog = plcMsg
});
StationCode = _stationInfo.StationCode;
Log = plcMsg;
if (strVal.Length != 5)
{
var checkMsg = $"{DateTime.Now:HH:mm:ss}>>>>>PLC请求指定工位数据时传递的值NG{strVal}{Environment.NewLine}";
_logs.Add(new LogVm
{
StationCode = _stationInfo.StationCode,
HisLog = checkMsg
});
StationCode = _stationInfo.StationCode;
Log = checkMsg;
}
else
{
//在线模式
if (Program.SysMode)
{
if (_stationInfo.StationCode == Program.YZCS_ST)
{
var M8 = _plcPoints.FirstOrDefault(m => m.Key == "M8");
if (M8 != null)
{
var (ok, val) = PlcHelper.GetPlcVal(M8.DataType, M8.Address);
//判断是否是返修品上线,此处只有补油工位使用
if (ok && val.ToLower() == "true")
{
CheckCode.SearchEmptyTotalWeight(_plcPoints, out var emptyTotalWeight);
var M31 = _plcPoints.FirstOrDefault(m => m.Key == "M31");
var writeOk = Program.siemensS7Net.Write(M31.Address, emptyTotalWeight);
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>一体机启动反馈:获取压缩机总空重成功,数据值:{emptyTotalWeight}写入M31");
var M26 = _plcPoints.FirstOrDefault(m => m.Key == "M26");
if (writeOk.IsSuccess)
{
Program.siemensS7Net.Write(M26.Address, ushort.Parse("1"));
}
else
{
Program.siemensS7Net.Write(M26.Address, ushort.Parse("2"));
}
}
else
{
BYKZ();
}
}
else
{
BYKZ();
}
}
}
else
{
//请求指定工位数据
var (ok, msg) = CheckCode.SearchAskData(_plcPoints);
var M26 = _plcPoints.FirstOrDefault(m => m.Key == "M26");
if (ok.HasValue)
{
if (ok.Value)
{
Program.siemensS7Net.Write(M26.Address, ushort.Parse("1"));
}
else
{
Program.siemensS7Net.Write(M26.Address, ushort.Parse("2"));
}
}
_logs.Add(new LogVm
{
StationCode = _stationInfo.StationCode,
HisLog = $"{DateTime.Now:HH:mm:ss}>>>>>{msg}{Environment.NewLine}"
});
StationCode = _stationInfo.StationCode;
Log = $"{DateTime.Now:HH:mm:ss}>>>>>{msg}{Environment.NewLine}";
}
}
}
catch (Exception ex)
{
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>NG:{ex}");
}
}
else
{
runStationData = true;
}
}
#region 动静盘操作
//动静盘相关参数
double? _dongPanValue = null;
double? _jingPanValue = null;
/// <summary>
/// 动静盘操作(先扫动盘,再扫静盘)
/// </summary>
private bool DongJingPan(List<SubCodeVM> subCodeVMs)
{
bool isOk = false;
var _dongPanCode = subCodeVMs.FirstOrDefault(m => m.SortIndex == 1)?.SubCode;
var jingPanCode = subCodeVMs.FirstOrDefault(m => m.SortIndex == 2)?.SubCode;
if (Program.DongJingDvalue.Count > 0)
{
if (_dongPanValue == null)
{
//置空动静盘缓存值
ClearDongJingCache();
//动盘判断获取M29数据
isOk = DongPan_M29(_dongPanCode);
}
else
{
//静盘判断获取M30数据
isOk = JingPan_M30(jingPanCode);
//置空动静盘缓存值
ClearDongJingCache();
}
}
else
{
if (Program.DongPanLines != null && Program.DongPanLines.Length > 0)
{
isOk = DongPan_M29(_dongPanCode);
}
if (Program.JingPanLines != null && Program.JingPanLines.Length > 0)
{
isOk = JingPan_M30(jingPanCode);
}
}
if (!isOk)
{
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>调用MES获取动盘/静盘数据时校验未通过!");
}
return isOk;
}
/// <summary>
/// 获取动盘参数值
/// </summary>
/// <param name="stationInfo"></param>
/// <param name="logs"></param>
/// <param name="strVal"></param>
/// <param name="plcPoints"></param>
private bool DongPan_M29(string _dongPanCode)
{
//执行结果状态
bool isOk = false;
try
{
//在线模式读取MES数据
if (Program.DongPanLines != null && Program.DongPanLines.Length > 0)
{
List<string> dongpanParam = new List<string>() { Program.DongPan_Param };
foreach (string line in Program.DongPanLines)
{
var info = RequestMes.GetIntegratedData("查询动盘支线参数", _stationInfo.Site, _dongPanCode, line, Program.DongPanProcedure, CurrentUser.UserName, dongpanParam);
//若没有配置则不校验
if (Program.DongJingDvalue.Count > 0)
{
if (info.ok)
{
var panValue = ParsePanValue(info.msg);
isOk = panValue.ok;
if (panValue.ok)
{
_dongPanValue = panValue.value;
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>获取动盘支线参数:{_dongPanValue}PASS");
break;
}
}
}
else
{
isOk = info.ok;
if (info.ok)
{
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>验证动动盘成功PASS");
break;
}
}
}
}
else
{
isOk = true;
}
}
catch (Exception ex)
{
var errMsg = ex == null ? "未知异常" : ex.Message;
LogHelper.WriteErrorLog($"DoSomething中DongPan_M29方法出发异常:{errMsg},请联系管理员!");
}
return isOk;
}
/// <summary>
/// 获取静盘参数值
/// </summary>
/// <param name="stationInfo"></param>
/// <param name="logs"></param>
/// <param name="strVal"></param>
/// <param name="plcPoints"></param>
private bool JingPan_M30(string jingCode)
{
try
{
//执行结果状态
bool isOk = false;
//在线模式读取MES数据
if (Program.JingPanLines != null && Program.JingPanLines.Length > 0)
{
List<string> jingpanParam = new List<string>() { Program.JingPan_Param };
foreach (string line in Program.JingPanLines)
{
var info = RequestMes.GetIntegratedData("查询静盘支线参数", _stationInfo.Site, jingCode, line, Program.JingPanProcedure, CurrentUser.UserName, jingpanParam);
//若没有配置则不校验
if (Program.DongJingDvalue.Count > 0)
{
if (info.ok)
{
var panValue = ParsePanValue(info.msg);
isOk = panValue.ok;
if (panValue.ok)
{
_jingPanValue = panValue.value;
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>获取静盘支线参数:{_jingPanValue}PASS");
//动静盘验证
var computeResult = CheckDongJingPanValue();
isOk = computeResult.ok;
if (computeResult.ok)
{
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>验证动静盘成功PASS");
break;
}
}
}
}
else
{
isOk = info.ok;
if (info.ok)
{
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>验证动静盘成功PASS");
}
else
{
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>" + info.msg);
}
break;
}
}
}
else
{
isOk = true;
}
return isOk;
}
catch (Exception ex)
{
var errMsg = ex == null ? "未知异常" : ex.Message;
LogHelper.WriteErrorLog($"DoSomething中JingPan_M30方法出发异常:{errMsg},请联系管理员!");
return false;
}
}
/// <summary>
/// 置空动静盘缓存值
/// </summary>
private void ClearDongJingCache()
{
//置空动静盘缓存值
_dongPanValue = null;
_jingPanValue = null;
}
/// <summary>
/// 解析参数返回值(动静盘)
/// </summary>
/// <param name="msg"></param>
/// <returns></returns>
private (bool ok, double value, string error) ParsePanValue(string msg)
{
bool ok = false;
double value = 0;
string error = string.Empty;
try
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(msg.Replace("Return info", "").Trim());
XmlNode xmlNode = xmlDoc.SelectSingleNode("/PRODUCTION_RESPONSE/SIDE/LIST/ITEM");
string[] values = xmlNode.InnerText.Split(',');
value = Convert.ToDouble(values[2]);
ok = true;
}
catch (Exception ex)
{
ok = false;
value = 0;
error = "解析数据错误," + ex.Message;
}
return (ok, value, error);
}
/// <summary>
/// 检验动静盘验证结果
/// </summary>
/// <returns></returns>
private (bool ok, double dvalue, string error) CheckDongJingPanValue()
{
double dvalue = new double();
try
{
if (_jingPanValue == null && _jingPanValue.Value == 0.0)
{
return (false, dvalue, "静盘板厚平均值为空NG");
}
if (_dongPanValue == null && _dongPanValue.Value == 0.0)
{
return (false, dvalue, "动盘板厚平均值为空NG");
}
dvalue = _jingPanValue.Value - _dongPanValue.Value;
LogHandler($"当前动静盘差值:{dvalue},设定的范围({Program.DongJingDvalue[0]}-{Program.DongJingDvalue[1]}OK");
if (dvalue < Program.DongJingDvalue[0] || dvalue > Program.DongJingDvalue[1])
{
return (false, dvalue, $"当前动静盘差值超过设定的范围NG");
}
return (true, dvalue, string.Empty);
}
catch (Exception ex)
{
return (false, dvalue, ex.Message);
}
}
#endregion
#region 补油空重
/// <summary>
/// 补油空重
/// </summary>
private void BYKZ()
{
try
{
bool isCheck = false;
//请求MES“空重”参数
var M28 = ReadPlcValue("M28");
if (M28.ok)
{
var aheadParas = AheadParaHelper.QueryAheadVM(_stationInfo.StationCode, _stationInfo.Category).ToList().Select(m => m.PointCode).ToList();
var aheadlist_stationcode = AheadParaHelper.Query_Ahead(_stationInfo.StationCode, _stationInfo.MachineType);
var mskCode_ahead = MskCodeHelper.QueryMaskCodeByStationCodeAndLastStationCode(_stationInfo.StationCode, aheadlist_stationcode);
if (aheadParas.Count > 0)
{
var mesResult = RequestMes.GetIntegratedData("查询上工位数据", _stationInfo.Site, M28.value, mskCode_ahead.Resource, mskCode_ahead.Procedure, CurrentUser.UserName, aheadParas);
isCheck = mesResult.ok;
if (mesResult.ok)
{
//获取数值
var values = GetItemValues(mesResult.msg);
if (values.ok && values.keyValues != null)
{
if (values.keyValues.Count > 0)
{
var value = values.keyValues.ElementAt(0);
var M31 = _plcPoints.FirstOrDefault(m => m.Key == "M31");
if (string.IsNullOrWhiteSpace(value.Value))
{
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>一体机启动反馈BYKZ()获取值为空!");
}
else
{
var parseResult = float.TryParse(value.Value, out var weight);
if (!parseResult)
{
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>一体机启动反馈BYKZ()值转换float失败值={value.Value}");
}
else
{
Program.siemensS7Net.Write(M31.Address, weight);
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>一体机启动反馈:获取[{value.Key}]成功,数据值:{value.Value}写入M31");
}
}
}
if (values.keyValues.Count > 1)
{
var value = values.keyValues.ElementAt(1);
var M32 = _plcPoints.FirstOrDefault(m => m.Key == "M32");
Program.siemensS7Net.Write(M32.Address, float.Parse(value.Value));
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>一体机启动反馈:获取[{value.Key}]成功,数据值:{value.Value}写入M32");
}
}
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>一体机启动反馈:调用上工位接口成功");
}
else
{
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>一体机启动反馈:调用上工位接口失败," + mesResult.msg);
}
}
else
{
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>一体机启动反馈NG未匹配到{_stationInfo.StationName}工位前置参数的配置记录)");
}
}
var M26 = _plcPoints.FirstOrDefault(m => m.Key == "M26");
if (isCheck)
{
Program.siemensS7Net.Write(M26.Address, ushort.Parse("1"));
}
else
{
Program.siemensS7Net.Write(M26.Address, ushort.Parse("2"));
}
}
catch (Exception ex)
{
var errMsg = ex == null ? "未知异常" : ex.Message;
MessageBox.Show($"DoSomething中BYKZ方法出发异常:{errMsg},请联系管理员!");
}
}
private (bool ok, Dictionary<string, string> keyValues, string error) GetItemValues(string msg)
{
bool ok = false;
Dictionary<string, string> keyValues = null;
string error = string.Empty;
try
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(msg.Replace("Return info", "").Trim());
XmlNodeList xmlNodeList = xmlDoc.SelectNodes("/PRODUCTION_RESPONSE/SIDE/LIST");
if (xmlNodeList != null && xmlNodeList.Count > 0)
{
keyValues = new Dictionary<string, string>();
foreach (XmlNode xmlNode in xmlNodeList)
{
string[] arrays = xmlNode.InnerText.Split(',');
keyValues.Add(arrays[0], arrays[2]);
}
}
ok = true;
}
catch (Exception ex)
{
ok = false;
keyValues = null;
error = "解析数据错误," + ex.Message;
}
return (ok, keyValues, error);
}
#endregion
#region 贴标打印
/// <summary>
/// 通过BatTender打印条码
/// </summary>
/// <param name="productSfcCode"></param>
/// <param name="stationCode"></param>
/// <returns></returns>
public (bool ok, string barCode, string msg) PrintByHttp_1(string productSfcCode, StationInfo stationInfo)
{
var mskcode = MskCodeHelper.QueryMask_codeByStationAndSfcCode(stationInfo.StationCode, productSfcCode);
if (mskcode == null)
{
return (false, "", $"{DateTime.Now:HH:mm:ss}>>>>>一体机反馈打印时根据工位和机壳码查询掩码表异常,工位编码={stationInfo.StationCode},机壳码={productSfcCode}{Environment.NewLine}");
}
string barCode = Program.PrintBarCode;
LogHelper.WriteLog($"打印时生成的barcode{barCode}");
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>一体机反馈打印时开始进行232通讯");
(bool isOk, string barCode, string msg) result = (false, "", "");
string _serialNum = string.Empty;//序列号
//根据掩码表配置的程序块号调用不通的通讯方法
switch (mskcode.ProgramBlockNum)
{
case 1:
//CAN1通讯
result = CAN1Helper.CanCommunication(mskcode, barCode);
break;
case 2:
//CAN2通讯
result = CAN2Helper.CanCommunication(mskcode, barCode, Program.SerialNum, out _serialNum);
break;
case 3:
//LIN通讯
result = LINHelper.LinCommunication(mskcode, barCode);
break;
default:
break;
}
if (!result.isOk)
{
return result;
}
//http打印
try
{
string version = $"SW:{result.msg}/BC34-1200V-C-V0.11";
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
T_PrintInfo t_PrintInfo = new T_PrintInfo
{
Id = Guid.NewGuid().ToString(),
FileName = mskcode.ProductSfcCode.Trim('*'),
BarCode = barCode,
SoftVersion = version,
CreatedTime = DateTime.Now
};
var row = MskCodeHelper.AddPrintInfo(t_PrintInfo);
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>一体机反馈打印时存储打印参数,存储结果:{row}");
if (row <= 0)
{
return (false, barCode, $"{DateTime.Now:HH:mm:ss}>>>>>一体机反馈:打印信息发送失败,保存打印参数耗时:{stopwatch.ElapsedMilliseconds}毫秒{Environment.NewLine}");
}
#region 监听打印结果
bool printResult = false;
Stopwatch stopwatch1 = new Stopwatch();
stopwatch1.Start();
bool doWhile = true;
while (doWhile)
{
Thread.Sleep(500);
doWhile = false;
if (stopwatch1.ElapsedMilliseconds >= 10000)
{
break;//超时跳出循环
}
var printInfo = MskCodeHelper.QueryPrintInfo(barCode);
if (printInfo == null)
{
break;//查询打印参数为空跳出循环
}
else if (printInfo.PrintResult.HasValue && printInfo.PrintResult.Value)
{
printResult = true;
break;//打印成功跳出循环
}
else if (printInfo.PrintResult.HasValue && !printInfo.PrintResult.Value)
{
break;//打印失败跳出循环
}
doWhile = true;
}
#endregion
stopwatch.Stop();
if (printResult)
{
return (true, barCode, $"{DateTime.Now:HH:mm:ss}>>>>>一体机反馈:打印成功,打印条码信息:{barCode},序列号:{_serialNum},耗时:{stopwatch.ElapsedMilliseconds}毫秒{Environment.NewLine}");
}
else
{
return (false, barCode, $"{DateTime.Now:HH:mm:ss}>>>>>一体机反馈:打印失败,序列号:{_serialNum},耗时:{stopwatch.ElapsedMilliseconds}毫秒{Environment.NewLine}");
}
}
catch (Exception ex)
{
var msg = ex == null ? "操作异常" : ex.Message;
return (false, barCode, $"{DateTime.Now:HH:mm:ss}>>>>>一体机反馈:调用外挂打印时失败,{msg}");
}
}
#endregion
/// <summary>
/// 数据上传反馈
/// </summary>
/// <param name="isCheck"></param>
private void DataUploadResult(bool isOk)
{
//数据上传反馈
var M24 = _plcPoints.FirstOrDefault(m => m.Key == "M24");
if (M24 != null)
{
if (isOk)
{
var result = Program.siemensS7Net.Write(M24.Address, ushort.Parse("1"));
if (!result.IsSuccess)
{
Program.siemensS7Net.Write(M24.Address, ushort.Parse("1"));
}
savedb = true;
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>写入PLC地址M24数据值1");
}
else
{
var result = Program.siemensS7Net.Write(M24.Address, ushort.Parse("2"));
if (!result.IsSuccess)
{
Program.siemensS7Net.Write(M24.Address, ushort.Parse("2"));
}
savedb = true;
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>写入PLC地址M24数据值2");
}
}
else
{
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>M24地址不存在");
}
}
/// <summary>
/// 条码匹配反馈
/// </summary>
/// <param name="isOk"></param>
private void CodeMatchUploadResult(bool isOk)
{
var M22 = _plcPoints.FirstOrDefault(m => m.Key == "M22");
if (M22 != null)
{
if (isOk)
{
Program.siemensS7Net.Write(M22.Address, ushort.Parse("1"));
savedb = true;
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>写入PLC地址M22数据值1");
}
else
{
Program.siemensS7Net.Write(M22.Address, ushort.Parse("2"));
savedb = true;
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>写入PLC地址M22数据值2");
}
}
else
{
LogHandler($"{DateTime.Now:HH:mm:ss}>>>>>M22地址不存在");
}
}
}
}