804 lines
28 KiB
C#
804 lines
28 KiB
C#
|
using Aitex.Common.Util;
|
|||
|
using Aitex.Core.Common.DeviceData;
|
|||
|
using Aitex.Core.RT.DBCore;
|
|||
|
using Aitex.Core.RT.Device.Devices;
|
|||
|
using Aitex.Core.RT.Device;
|
|||
|
using Aitex.Core.RT.Event;
|
|||
|
using Aitex.Core.RT.Routine;
|
|||
|
using Aitex.Core.RT.SCCore;
|
|||
|
using MECF.Framework.Common.Aitex.Core.Common.DeviceData.IoDevice;
|
|||
|
using MECF.Framework.Common.Equipment;
|
|||
|
using SicModules.PMs.Routines.Base;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Diagnostics;
|
|||
|
using System.Linq;
|
|||
|
using System.Reflection;
|
|||
|
using System.Text;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using System.Xml;
|
|||
|
using Aitex.Core.RT.Log;
|
|||
|
|
|||
|
namespace SicModules.PMs.Routines
|
|||
|
{
|
|||
|
public delegate bool ConditionMethodDelegate(string name, double value, out string reason);
|
|||
|
|
|||
|
public class PMMfcValueTestRoutine : PMBaseRoutine
|
|||
|
{
|
|||
|
enum RoutineStep
|
|||
|
{
|
|||
|
SetOpenOrClose,
|
|||
|
OpenMfc,
|
|||
|
TimeDelay,
|
|||
|
Inspect,
|
|||
|
CloseMfc,
|
|||
|
SetReset,
|
|||
|
WriteDatabase
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// XML配置中Mfc名称
|
|||
|
/// </summary>
|
|||
|
public List<string> MfcNameList = new List<string>();
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// XML配置中气阀名称
|
|||
|
/// </summary>
|
|||
|
public List<string> ValueNameList = new List<string>();
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// XML配置中PC名称
|
|||
|
/// </summary>
|
|||
|
public List<string> PCNameList = new List<string>();
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// MFC所有测试数据
|
|||
|
/// </summary>
|
|||
|
public List<MfcTestData> MfcTestList { get; set; } = new List<MfcTestData>();
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 气阀所有测试数据
|
|||
|
/// </summary>
|
|||
|
public List<ControlNameData> ValueTestList { get; set; } = new List<ControlNameData>();
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// PC所有测试数据
|
|||
|
/// </summary>
|
|||
|
public List<ControlNameData> PCTestList { get; set; } = new List<ControlNameData>();
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 单个MFC测试数据
|
|||
|
/// </summary>
|
|||
|
public MfcTestData MfcTest = new MfcTestData();
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 输入项数据,重要用来存储数据库操作对象,保存输入条件中,所有气阀/PC/MFC测试结果
|
|||
|
/// </summary>
|
|||
|
public List<ControlNameData> AllControlNameDataList { get; set; } = new List<ControlNameData>();
|
|||
|
|
|||
|
private ControlNameData ControlNameData = new ControlNameData();
|
|||
|
|
|||
|
private List<MfcTestCondition> mfcDoTestList = new List<MfcTestCondition>();
|
|||
|
|
|||
|
private MfcTestCondition mfcDoTest = new MfcTestCondition();
|
|||
|
|
|||
|
ConditionMethodDelegate MethodDelegate;
|
|||
|
|
|||
|
private string moduleName;
|
|||
|
|
|||
|
private PMModule _pmModule;
|
|||
|
|
|||
|
private string MfcName;
|
|||
|
|
|||
|
private double _timeDelay;
|
|||
|
|
|||
|
private double _scValue;
|
|||
|
|
|||
|
private double _mfcDefaultValue;
|
|||
|
|
|||
|
private double _upperLimit;
|
|||
|
|
|||
|
private Stopwatch _swTimer = new Stopwatch();
|
|||
|
|
|||
|
private string _startTime;
|
|||
|
|
|||
|
private string _endTime;
|
|||
|
|
|||
|
private string _mfcValueConfigPath = PathManager.GetCfgDir() + @"MfcDeviationValue\MfcTest.xml";
|
|||
|
private string _controlUnitConfigPath = PathManager.GetCfgDir() + @"MfcDeviationValue\ControlUnit.xml";
|
|||
|
|
|||
|
public PMMfcValueTestRoutine(ModuleName module, PMModule pm) : base(module, pm)
|
|||
|
{
|
|||
|
moduleName = module.ToString();
|
|||
|
_pmModule = pm;
|
|||
|
Name = "MfcValueTest";
|
|||
|
|
|||
|
MethodDelegate += SetValve;
|
|||
|
MethodDelegate += SetPC;
|
|||
|
MethodDelegate += SetMfcState;
|
|||
|
|
|||
|
InitializeMfc();
|
|||
|
InitializeValue();
|
|||
|
InitializeDataList();
|
|||
|
}
|
|||
|
private void InitializeMfc()
|
|||
|
{
|
|||
|
string reason = string.Empty;
|
|||
|
try
|
|||
|
{
|
|||
|
XmlDocument xml = new XmlDocument();//初始化一个xml实例
|
|||
|
xml.Load(_mfcValueConfigPath);
|
|||
|
XmlElement root = xml.DocumentElement;
|
|||
|
XmlNodeList nodelist = root.ChildNodes;
|
|||
|
//遍历输出.
|
|||
|
|
|||
|
foreach (XmlNode node in nodelist)
|
|||
|
{
|
|||
|
MfcTestCondition mfcDoTest = new MfcTestCondition();
|
|||
|
|
|||
|
var nodeBlocks = node.SelectNodes("Condition/Names/Name");
|
|||
|
if (nodeBlocks != null)
|
|||
|
{
|
|||
|
foreach (var nodeBlock in nodeBlocks)
|
|||
|
{
|
|||
|
if (!(nodeBlock is XmlElement xmlBlock))
|
|||
|
{
|
|||
|
continue;
|
|||
|
}
|
|||
|
mfcDoTest.Name = xmlBlock.GetAttribute("Name");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
nodeBlocks = node.SelectNodes("Condition/Inputs/Input");
|
|||
|
if (nodeBlocks != null)
|
|||
|
{
|
|||
|
foreach (var nodeBlock in nodeBlocks)
|
|||
|
{
|
|||
|
if (!(nodeBlock is XmlElement xmlBlock))
|
|||
|
{
|
|||
|
continue;
|
|||
|
}
|
|||
|
NameValue keyValue = new NameValue()
|
|||
|
{
|
|||
|
Name = xmlBlock.GetAttribute("Name"),
|
|||
|
Value = Convert.ToDouble(xmlBlock.GetAttribute("Value")),
|
|||
|
ControlName = xmlBlock.GetAttribute("ControlName")
|
|||
|
};
|
|||
|
mfcDoTest.StateList.Add(keyValue);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
nodeBlocks = node.SelectNodes("Condition/Outputs/Output");
|
|||
|
if (nodeBlocks != null)
|
|||
|
{
|
|||
|
foreach (var nodeBlock in nodeBlocks)
|
|||
|
{
|
|||
|
if (!(nodeBlock is XmlElement xmlBlock))
|
|||
|
{
|
|||
|
continue;
|
|||
|
}
|
|||
|
NameValue keyValue = new NameValue()
|
|||
|
{
|
|||
|
Name = xmlBlock.GetAttribute("Name"),
|
|||
|
Value = Convert.ToDouble(xmlBlock.GetAttribute("Value")),
|
|||
|
ControlName = xmlBlock.GetAttribute("ControlName")
|
|||
|
};
|
|||
|
mfcDoTest.CarryOut = keyValue;
|
|||
|
}
|
|||
|
}
|
|||
|
mfcDoTestList.Add(mfcDoTest);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LOG.Error(ex.Message, ex);
|
|||
|
}
|
|||
|
}
|
|||
|
private void InitializeValue()
|
|||
|
{
|
|||
|
string reason = string.Empty;
|
|||
|
try
|
|||
|
{
|
|||
|
XmlDocument xml = new XmlDocument();//初始化一个xml实例
|
|||
|
xml.Load(_controlUnitConfigPath);
|
|||
|
XmlElement root = xml.DocumentElement;
|
|||
|
XmlNodeList nodelist = root.ChildNodes;
|
|||
|
//遍历输出.
|
|||
|
|
|||
|
foreach (XmlNode node in nodelist)
|
|||
|
{
|
|||
|
var nodeBlocks = node.SelectNodes("Condition/Mfcs/Mfc");
|
|||
|
if (nodeBlocks != null)
|
|||
|
{
|
|||
|
foreach (var nodeBlock in nodeBlocks)
|
|||
|
{
|
|||
|
if (!(nodeBlock is XmlElement xmlBlock))
|
|||
|
{
|
|||
|
continue;
|
|||
|
}
|
|||
|
MfcNameList.Add(xmlBlock.GetAttribute("Name"));
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
nodeBlocks = node.SelectNodes("Condition/Values/Value");
|
|||
|
if (nodeBlocks != null)
|
|||
|
{
|
|||
|
foreach (var nodeBlock in nodeBlocks)
|
|||
|
{
|
|||
|
if (!(nodeBlock is XmlElement xmlBlock))
|
|||
|
{
|
|||
|
continue;
|
|||
|
}
|
|||
|
ValueNameList.Add(xmlBlock.GetAttribute("Name"));
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
nodeBlocks = node.SelectNodes("Condition/PCs/PC");
|
|||
|
if (nodeBlocks != null)
|
|||
|
{
|
|||
|
foreach (var nodeBlock in nodeBlocks)
|
|||
|
{
|
|||
|
if (!(nodeBlock is XmlElement xmlBlock))
|
|||
|
{
|
|||
|
continue;
|
|||
|
}
|
|||
|
PCNameList.Add(xmlBlock.GetAttribute("Name"));
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LOG.Error(ex.Message, ex);
|
|||
|
}
|
|||
|
}
|
|||
|
private void InitializeDataList()
|
|||
|
{
|
|||
|
//初始化所有MFC
|
|||
|
foreach (var name in MfcNameList)
|
|||
|
MfcTestList.Add(new MfcTestData() { MfcName = name });
|
|||
|
QueryAllMfcTestData();
|
|||
|
|
|||
|
//初始化所有气阀
|
|||
|
foreach (var name in ValueNameList)
|
|||
|
ValueTestList.Add(new ControlNameData() { ControlName = name });
|
|||
|
|
|||
|
//初始化所有PC
|
|||
|
foreach (var name in PCNameList)
|
|||
|
PCTestList.Add(new ControlNameData() { ControlName = name });
|
|||
|
|
|||
|
|
|||
|
QueryAllControlNameData();
|
|||
|
}
|
|||
|
public void DelectAllData()
|
|||
|
{
|
|||
|
foreach (var item in MfcTestList)
|
|||
|
item.Delect();
|
|||
|
foreach (var item in ValueTestList)
|
|||
|
item.Delect();
|
|||
|
foreach (var item in PCTestList)
|
|||
|
item.Delect();
|
|||
|
//truncate table
|
|||
|
|
|||
|
DB.ExcuteTransAction(new List<string> { "truncate control_name_data", "truncate mfc_test_data" });
|
|||
|
}
|
|||
|
public override Result Start(params object[] objs)
|
|||
|
{
|
|||
|
MfcTest = new MfcTestData();
|
|||
|
AllControlNameDataList = new List<ControlNameData>();
|
|||
|
Reset();
|
|||
|
string selectedMfcName = (string)objs[0];
|
|||
|
mfcDoTestList.ForEach(t =>
|
|||
|
{
|
|||
|
if (t.Name == selectedMfcName)
|
|||
|
mfcDoTest = t;
|
|||
|
});
|
|||
|
MfcName = selectedMfcName.Contains("s") ? selectedMfcName.Replace("s", "") : selectedMfcName;
|
|||
|
//开始测试
|
|||
|
//有一个集合为空,不用循环
|
|||
|
if (mfcDoTest.StateList.Count == 0 || mfcDoTest.CarryOut.Name == null)
|
|||
|
return Result.FAIL;
|
|||
|
|
|||
|
_timeDelay = SC.GetValue<int>($"PM.MfcTestingDelayedTime");
|
|||
|
_upperLimit = SC.GetValue<int>($"PM.{Module}.ThrottlePressureTimeout");
|
|||
|
_mfcDefaultValue = SC.GetValue<double>($"PM.{Module}.MFC.{MfcName}.DefaultSetPoint") * mfcDoTest.CarryOut.Value;//将mfc设定到表XML中设定的倍数
|
|||
|
_scValue = SC.GetValue<double>($"PM.MfcTestingPercentage");//上限参数
|
|||
|
|
|||
|
_startTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fff");
|
|||
|
_swTimer.Restart();
|
|||
|
|
|||
|
|
|||
|
//初始化MFC操作对象,做界面显示用
|
|||
|
MfcTest.MfcName = selectedMfcName;
|
|||
|
MfcTest.Module = moduleName;
|
|||
|
MfcTest.Result = "";
|
|||
|
MfcTest.Values = "";
|
|||
|
MfcTest.Infor = "";
|
|||
|
MfcTest.BaseValue = _mfcDefaultValue.ToString();
|
|||
|
|
|||
|
Notify($"Start {MfcName} Test");
|
|||
|
return Result.RUN;
|
|||
|
}
|
|||
|
|
|||
|
public override Result Monitor()
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
//根据XML配置测试气路,打开或关闭气阀、PC、MFC
|
|||
|
PreSetValve((int)RoutineStep.SetOpenOrClose, false);
|
|||
|
|
|||
|
//打开要测试的MFC
|
|||
|
PreMfcRamp((int)RoutineStep.OpenMfc, _mfcDefaultValue);
|
|||
|
|
|||
|
//延时等待气流上升
|
|||
|
TimeDelay((int)RoutineStep.TimeDelay, _timeDelay);
|
|||
|
|
|||
|
//统计数据,并分析结果
|
|||
|
PreInspect((int)RoutineStep.Inspect);
|
|||
|
|
|||
|
//关闭检测的MFC
|
|||
|
PreMfcRamp((int)RoutineStep.CloseMfc, 0);
|
|||
|
|
|||
|
//根据XML配置测试气路,关闭气阀、PC、MFC
|
|||
|
PreSetValve((int)RoutineStep.SetOpenOrClose, true);
|
|||
|
|
|||
|
//数据结果写入数据库
|
|||
|
PreWriteDatabase((int)RoutineStep.WriteDatabase);
|
|||
|
}
|
|||
|
catch (RoutineBreakException)
|
|||
|
{
|
|||
|
return Result.RUN;
|
|||
|
}
|
|||
|
catch (RoutineFaildException)
|
|||
|
{
|
|||
|
return Result.FAIL;
|
|||
|
}
|
|||
|
|
|||
|
Notify($"Finished ! Elapsed time: {(int)(_swTimer.ElapsedMilliseconds / 1000)} s");
|
|||
|
_swTimer.Stop();
|
|||
|
|
|||
|
return Result.DONE;
|
|||
|
|
|||
|
}
|
|||
|
protected void PreSetValve(int id, bool isReset)
|
|||
|
{
|
|||
|
Tuple<bool, Result> ret = Execute(id, () =>
|
|||
|
{
|
|||
|
if (!SetInputs(isReset, out string reason))
|
|||
|
{
|
|||
|
Stop(reason);
|
|||
|
return false;
|
|||
|
}
|
|||
|
return true;
|
|||
|
});
|
|||
|
|
|||
|
if (ret.Item1)
|
|||
|
{
|
|||
|
if (ret.Item2 == Result.FAIL)
|
|||
|
{
|
|||
|
throw (new RoutineFaildException());
|
|||
|
}
|
|||
|
else
|
|||
|
throw (new RoutineBreakException());
|
|||
|
}
|
|||
|
}
|
|||
|
private bool SetInputs(bool isReset, out string reason)
|
|||
|
{
|
|||
|
reason = "";
|
|||
|
for (int i = 0; i < mfcDoTest.StateList.Count; i++)
|
|||
|
{
|
|||
|
if (!MethodDelegate(mfcDoTest.StateList[i].ControlName, isReset ? 0 : mfcDoTest.StateList[i].Value, out reason))
|
|||
|
return false;
|
|||
|
}
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
private bool SetValve(string ioValveName, double value, out string reason)
|
|||
|
{
|
|||
|
reason = "";
|
|||
|
if (!ioValveName.Contains("V"))
|
|||
|
return true;
|
|||
|
bool isOpen = value == 1 ? true : false;
|
|||
|
var ioValve = DEVICE.GetDevice<IoValve>($"{moduleName}.{ioValveName}");
|
|||
|
if (ioValve.TurnValve(isOpen, out reason))
|
|||
|
return true;
|
|||
|
reason = $" {(isOpen ? "Open" : "Close")} {ioValve} failed , {reason}";
|
|||
|
return false;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
private bool SetPC(string pcName, double value, out string reason)
|
|||
|
{
|
|||
|
reason = "";
|
|||
|
if (!pcName.Contains("PC"))
|
|||
|
return true;
|
|||
|
var isOpen = value == 1 ? PcCtrlMode.Open : PcCtrlMode.Close;
|
|||
|
var pc = DEVICE.GetDevice<IoPressure>($"{moduleName}.{pcName}");
|
|||
|
if (pc.SetPcMode(isOpen, out reason))
|
|||
|
return true;
|
|||
|
reason = $" {isOpen} {pcName} failed , {reason}";
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
private bool SetMfcState(string mfcName, double value, out string reason)
|
|||
|
{
|
|||
|
reason = "";
|
|||
|
if (!mfcName.Contains("M"))
|
|||
|
return true;
|
|||
|
var isOpen = value == 1 ? MfcCtrlMode.Open : MfcCtrlMode.Close;
|
|||
|
var mfc = DEVICE.GetDevice<IoMFC>($"{moduleName}.{mfcName}");
|
|||
|
if (mfc.SetMfcMode(isOpen, out reason))
|
|||
|
return true;
|
|||
|
reason = $" {isOpen} {mfcName} failed , {reason}";
|
|||
|
return false;
|
|||
|
|
|||
|
}
|
|||
|
protected void PreMfcRamp(int id, double value)
|
|||
|
{
|
|||
|
Tuple<bool, Result> ret = Execute(id, () =>
|
|||
|
{
|
|||
|
Notify($"{mfcDoTest.CarryOut.ControlName} ramp to {value} ");
|
|||
|
MfcRamp(value);
|
|||
|
return true;
|
|||
|
});
|
|||
|
|
|||
|
if (ret.Item1)
|
|||
|
{
|
|||
|
if (ret.Item2 == Result.FAIL)
|
|||
|
{
|
|||
|
throw (new RoutineFaildException());
|
|||
|
}
|
|||
|
else
|
|||
|
throw (new RoutineBreakException());
|
|||
|
}
|
|||
|
}
|
|||
|
private void MfcRamp(double value)
|
|||
|
{
|
|||
|
var mfc = DEVICE.GetDevice<IoMFC>($"{Module}.{MfcName}");
|
|||
|
mfc.Ramp(value, 0);
|
|||
|
}
|
|||
|
|
|||
|
protected void PreInspect(int id)
|
|||
|
{
|
|||
|
Tuple<bool, Result> ret = Execute(id, () =>
|
|||
|
{
|
|||
|
Notify($"Inspect values ");
|
|||
|
Inspect();
|
|||
|
return true;
|
|||
|
});
|
|||
|
|
|||
|
if (ret.Item1)
|
|||
|
{
|
|||
|
if (ret.Item2 == Result.FAIL)
|
|||
|
{
|
|||
|
throw (new RoutineFaildException());
|
|||
|
}
|
|||
|
else
|
|||
|
throw (new RoutineBreakException());
|
|||
|
}
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// 对结果进行检查,赋值各种数据作为显示使用
|
|||
|
/// </summary>
|
|||
|
/// <param name="mfc"></param>
|
|||
|
/// <param name="mfcDefaultDoubleValue"></param>
|
|||
|
private void Inspect()
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var mfc = DEVICE.GetDevice<IoMFC>($"{Module}.{MfcName}");
|
|||
|
double volue = 0;
|
|||
|
|
|||
|
List<double> volueList = new List<double>();
|
|||
|
StringBuilder strResult = new StringBuilder();
|
|||
|
StringBuilder strValues = new StringBuilder();
|
|||
|
for (int i = 0; i < 10; i++)
|
|||
|
{
|
|||
|
double feedBack = mfc.FeedBack;
|
|||
|
volue = (feedBack - _mfcDefaultValue) / _mfcDefaultValue * 100;
|
|||
|
volueList.Add(volue);
|
|||
|
strValues.Append($"<{i + 1}>{feedBack.ToString("0.00")} ; ");
|
|||
|
strResult.Append($"<{i + 1}>{volue.ToString("0.00")}% ; ");
|
|||
|
System.Threading.Thread.Sleep(500);
|
|||
|
}
|
|||
|
|
|||
|
EV.PostInfoLog($"{Module}", $" {MfcName} FeedBack Value {strValues} ");
|
|||
|
EV.PostInfoLog($"{Module}", $" {MfcName} Deviation Value {strResult} ");
|
|||
|
MfcTest.Values = strValues.ToString();
|
|||
|
MfcTest.Result = strResult.ToString();
|
|||
|
|
|||
|
strResult.Clear();//清空后存储气路元器件名称
|
|||
|
foreach (var item in mfcDoTest.StateList)
|
|||
|
{
|
|||
|
string operation = item.Value == 1 ? "Open" : "Close";
|
|||
|
strResult.Append(item.Name + $"-{operation}; ");//提取所有气阀名称,打印输出用
|
|||
|
}
|
|||
|
|
|||
|
for (int i = 0; i < volueList.Count; i++)
|
|||
|
{
|
|||
|
if (Math.Abs(volueList[i]) > _scValue)//循环判断是否有超设定值
|
|||
|
{
|
|||
|
|
|||
|
EV.PostInfoLog($"{Module}", $" {MfcName} test failed,Please check {strResult}");
|
|||
|
MfcTest.Infor = strResult.ToString();
|
|||
|
MfcTest.IsPass = "NG";
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
MfcTest.Infor = strResult.ToString();
|
|||
|
MfcTest.IsPass = "OK";
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
EV.PostAlarmLog($"{Module}", $" failed {ex}");
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
protected void PreWriteDatabase(int id)
|
|||
|
{
|
|||
|
Tuple<bool, Result> ret = Execute(id, () =>
|
|||
|
{
|
|||
|
if (!WriteDatabase(out string reason))
|
|||
|
{
|
|||
|
Stop(reason);
|
|||
|
return false;
|
|||
|
}
|
|||
|
return true;
|
|||
|
});
|
|||
|
|
|||
|
if (ret.Item1)
|
|||
|
{
|
|||
|
if (ret.Item2 == Result.FAIL)
|
|||
|
{
|
|||
|
throw (new RoutineFaildException());
|
|||
|
}
|
|||
|
else
|
|||
|
throw (new RoutineBreakException());
|
|||
|
}
|
|||
|
}
|
|||
|
private bool WriteDatabase(out string reason)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
reason = "";
|
|||
|
Notify($"Test over updata to database");
|
|||
|
MfcTest.Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|||
|
|
|||
|
ReceiveMfcTestData();//MFC数据库操作
|
|||
|
|
|||
|
ReceiveControlNameData();//气阀数据库操作
|
|||
|
return true;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
reason = ex.Message;
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#region MFC数据库操作
|
|||
|
public void ReceiveMfcTestData()
|
|||
|
{
|
|||
|
UpdataMfcTestData();
|
|||
|
UpdateMfcTestDataDatabase();
|
|||
|
QueryAllMfcTestData();
|
|||
|
}
|
|||
|
|
|||
|
private void UpdataMfcTestData()
|
|||
|
{
|
|||
|
foreach (var data in MfcTestList)
|
|||
|
{
|
|||
|
if (data.MfcName == MfcTest.MfcName)
|
|||
|
{
|
|||
|
data.Update(MfcTest);
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
private void UpdateMfcTestDataDatabase()
|
|||
|
{
|
|||
|
string cmdID = $"select * from mfc_test_data where mfc_name = '{MfcTest.MfcName}'";
|
|||
|
var dt = DB.ExecuteDataset(cmdID);
|
|||
|
if (dt is null || dt.Tables[0].Rows.Count == 0)
|
|||
|
DB.ExcuteTransAction(new List<string>() { InsertMfcTestDataCmd() });
|
|||
|
else
|
|||
|
DB.ExcuteTransAction(new List<string>() { UpdateMfcTestDataCmd() });
|
|||
|
}
|
|||
|
|
|||
|
private string InsertMfcTestDataCmd()
|
|||
|
{
|
|||
|
string cmd_data_insert =
|
|||
|
"insert into mfc_test_data" +
|
|||
|
"(module,mfc_name,is_pass, result,values,base_value,infor,time)" +
|
|||
|
$"values ('{MfcTest.Module}'," +
|
|||
|
$"'{MfcTest.MfcName}'," +
|
|||
|
$"'{MfcTest.IsPass}'," +
|
|||
|
$"'{MfcTest.Result}'," +
|
|||
|
$"'{MfcTest.Values}'," +
|
|||
|
$"'{MfcTest.BaseValue}'," +
|
|||
|
$"'{MfcTest.Infor}'," +
|
|||
|
$"'{MfcTest.Time}')";
|
|||
|
return cmd_data_insert;
|
|||
|
}
|
|||
|
private string UpdateMfcTestDataCmd()
|
|||
|
{
|
|||
|
string cmd_update =
|
|||
|
$"update mfc_test_data set " +
|
|||
|
$"is_pass= '{MfcTest.IsPass}'," +
|
|||
|
$"result = '{MfcTest.Result}', " +
|
|||
|
$"values= '{MfcTest.Values}'," +
|
|||
|
$"base_value= '{MfcTest.BaseValue}'," +
|
|||
|
$"infor= '{MfcTest.Infor}'," +
|
|||
|
$"time= '{MfcTest.Time}'" +
|
|||
|
$"where mfc_name = '{MfcTest.MfcName}' and module = '{MfcTest.Module}' ";
|
|||
|
return cmd_update;
|
|||
|
}
|
|||
|
private List<MfcTestData> QueryAllMfcTestData()
|
|||
|
{
|
|||
|
|
|||
|
try
|
|||
|
{
|
|||
|
string cmd = $"select * from mfc_test_data ";
|
|||
|
var dt = DB.ExecuteDataset(cmd);
|
|||
|
if (dt is null || dt.Tables[0].Rows.Count == 0)
|
|||
|
return null;
|
|||
|
|
|||
|
for (int i = 0; i < dt.Tables[0].Rows.Count; i++)
|
|||
|
{
|
|||
|
if (dt.Tables[0].Rows[i].ItemArray.Length != 0)
|
|||
|
{
|
|||
|
MfcTestData mfcTestData = new MfcTestData()
|
|||
|
{
|
|||
|
Module = dt.Tables[0].Rows[i]["moudle"].ToString(),
|
|||
|
MfcName = dt.Tables[0].Rows[i]["mfc_name"].ToString(),
|
|||
|
IsPass = dt.Tables[0].Rows[i]["is_pass"].ToString(),
|
|||
|
Result = dt.Tables[0].Rows[i]["result"].ToString(),
|
|||
|
Values = dt.Tables[0].Rows[i]["values"].ToString(),
|
|||
|
BaseValue = dt.Tables[0].Rows[i]["base_value"].ToString(),
|
|||
|
Infor = dt.Tables[0].Rows[i]["infor"].ToString(),
|
|||
|
Time = dt.Tables[0].Rows[i]["time"].ToString()
|
|||
|
};
|
|||
|
|
|||
|
MfcTestList.ForEach(t =>
|
|||
|
{
|
|||
|
if (t.MfcName == mfcTestData.MfcName)
|
|||
|
t.Update(mfcTestData);
|
|||
|
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
return MfcTestList;
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{
|
|||
|
return null;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
|
|||
|
#region 气阀数据库操作
|
|||
|
public void ReceiveControlNameData()
|
|||
|
{
|
|||
|
UpDataControlNameData();
|
|||
|
foreach (var item in AllControlNameDataList)
|
|||
|
{
|
|||
|
UpdateControlNameDataDatabase(item);
|
|||
|
}
|
|||
|
|
|||
|
QueryAllControlNameData();
|
|||
|
}
|
|||
|
private void UpDataControlNameData()
|
|||
|
{
|
|||
|
string _time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|||
|
string str = MfcTest.IsPass == "NG" ? "NG" : "OK";
|
|||
|
foreach (var item in mfcDoTest.StateList)
|
|||
|
{
|
|||
|
AllControlNameDataList.Add(new ControlNameData()
|
|||
|
{
|
|||
|
Module= moduleName,//这里是使用字段赋值所属PM名称
|
|||
|
ControlName = item.Name,
|
|||
|
State = str,
|
|||
|
Time = _time
|
|||
|
});;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
private void UpdateControlNameDataDatabase(ControlNameData controlNameData)
|
|||
|
{
|
|||
|
string cmdID = $"select * from control_name_data where control_name = '{controlNameData.ControlName}'";
|
|||
|
var dt = DB.ExecuteDataset(cmdID);
|
|||
|
if (dt is null || dt.Tables[0].Rows.Count == 0)
|
|||
|
DB.ExcuteTransAction(new List<string>() { InsertControlNameDataCmd(controlNameData) });
|
|||
|
else
|
|||
|
DB.ExcuteTransAction(new List<string>() { UpdateControlNameDataCmd(controlNameData) });
|
|||
|
}
|
|||
|
//public string ControlName { get; set; }
|
|||
|
//public string State { get; set; }
|
|||
|
//public string Time { get; set; }
|
|||
|
private string InsertControlNameDataCmd(ControlNameData controlNameData)
|
|||
|
{
|
|||
|
string cmd_data_insert =
|
|||
|
"insert into control_name_data" +
|
|||
|
"(module,control_name,state,time)" +
|
|||
|
$"values ('{controlNameData.Module}'," +
|
|||
|
$"'{controlNameData.ControlName}'," +
|
|||
|
$"'{controlNameData.State}'," +
|
|||
|
$"'{controlNameData.Time}')";
|
|||
|
return cmd_data_insert;
|
|||
|
}
|
|||
|
private string UpdateControlNameDataCmd(ControlNameData controlNameData)
|
|||
|
{
|
|||
|
string cmd_update =
|
|||
|
$"update control_name_data set " +
|
|||
|
$"state= '{controlNameData.State}'," +
|
|||
|
$"time= '{controlNameData.Time}'" +
|
|||
|
$"where control_name = '{controlNameData.ControlName}' and module = '{controlNameData.Module}'";
|
|||
|
return cmd_update;
|
|||
|
}
|
|||
|
private List<MfcTestData> QueryAllControlNameData()
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
string cmd = $"select * from control_name_data ";
|
|||
|
var dt = DB.ExecuteDataset(cmd);
|
|||
|
if (dt is null || dt.Tables[0].Rows.Count == 0)
|
|||
|
return null;
|
|||
|
|
|||
|
for (int i = 0; i < dt.Tables[0].Rows.Count; i++)
|
|||
|
{
|
|||
|
if (dt.Tables[0].Rows[i].ItemArray.Length != 0)
|
|||
|
{
|
|||
|
ControlNameData _controlNameData = new ControlNameData()
|
|||
|
{
|
|||
|
Module = dt.Tables[0].Rows[i]["module"].ToString(),
|
|||
|
ControlName = dt.Tables[0].Rows[i]["control_name"].ToString(),
|
|||
|
State = dt.Tables[0].Rows[i]["state"].ToString(),
|
|||
|
Time = dt.Tables[0].Rows[i]["time"].ToString()
|
|||
|
};
|
|||
|
|
|||
|
if (_controlNameData.ControlName.Contains("V"))
|
|||
|
{
|
|||
|
ValueTestList.ForEach(t =>
|
|||
|
{
|
|||
|
if (t.ControlName == _controlNameData.ControlName)
|
|||
|
t.Update(_controlNameData);
|
|||
|
|
|||
|
});
|
|||
|
}
|
|||
|
else if (_controlNameData.ControlName.Contains("PC"))
|
|||
|
{
|
|||
|
PCTestList.ForEach(t =>
|
|||
|
{
|
|||
|
if (t.ControlName == _controlNameData.ControlName)
|
|||
|
t.Update(_controlNameData);
|
|||
|
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
return MfcTestList;
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{
|
|||
|
return null;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
}
|