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.

1550 lines
71 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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;
}
savedb = false;
#endregion
#region 本地存储
//存本地库
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;
}
#endregion
#region 上传MES
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();
}
else
{
isCheck = ok;
}
#endregion
#region Delete By wenjy 2024-03-07
//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地址不存在");
}
}
}
}
#endregion