|
|
@@ -31,6 +31,7 @@ using System.Linq;
|
|
|
using System.Net.Sockets;
|
|
|
using System.Reflection.Metadata;
|
|
|
using System.Security.Cryptography;
|
|
|
+using System.Security.Policy;
|
|
|
using System.Text;
|
|
|
using System.Threading;
|
|
|
using System.Threading.Tasks;
|
|
|
@@ -116,6 +117,8 @@ namespace TeamAAS_VP.Core
|
|
|
/// </summary>
|
|
|
private int _pressureMaxDurationSeconds = 30; //超时自动停止秒数
|
|
|
List<LockResult> lockResultsAll = new List<LockResult>();//一个产品的总结果
|
|
|
+ string productSn = "";//产品sn
|
|
|
+ DateTime StartScrewTime = DateTime.Now;//开始锁附的时间
|
|
|
#endregion
|
|
|
|
|
|
#region 属性
|
|
|
@@ -184,16 +187,6 @@ namespace TeamAAS_VP.Core
|
|
|
|
|
|
public Dictionary<string, object> BackupObject { get; set; } = new Dictionary<string, object>();
|
|
|
|
|
|
- private string _COM;
|
|
|
- /// <summary>
|
|
|
- /// 扭力测量仪COM
|
|
|
- /// </summary>
|
|
|
- public string COM
|
|
|
- {
|
|
|
- get { return _COM; }
|
|
|
- set { SetProperty(ref _COM, value); }
|
|
|
- }
|
|
|
-
|
|
|
private string _SignalValue = "0";
|
|
|
/// <summary>
|
|
|
/// 扭力测量仪获取的最大值
|
|
|
@@ -204,16 +197,6 @@ namespace TeamAAS_VP.Core
|
|
|
set { SetProperty(ref _SignalValue, value); }
|
|
|
}
|
|
|
|
|
|
- private double _Value;
|
|
|
- /// <summary>
|
|
|
- /// 电批扭力值
|
|
|
- /// </summary>
|
|
|
- public double Value
|
|
|
- {
|
|
|
- get { return _Value; }
|
|
|
- set { SetProperty(ref _Value, value); }
|
|
|
- }
|
|
|
-
|
|
|
private NumberStatistics _NumStatistics;
|
|
|
/// <summary>
|
|
|
/// 数量(批头、吸嘴、供料器)
|
|
|
@@ -242,7 +225,15 @@ namespace TeamAAS_VP.Core
|
|
|
set { _TorqueStatus = value; }
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ private ObservableCollection<DataFormCtq> _dfc = new ObservableCollection<DataFormCtq>();
|
|
|
+ /// <summary>
|
|
|
+ /// CTQ数据集合
|
|
|
+ /// </summary>
|
|
|
+ public ObservableCollection<DataFormCtq> DFC
|
|
|
+ {
|
|
|
+ get { return _dfc; }
|
|
|
+ set { SetProperty(ref _dfc, value); }
|
|
|
+ }
|
|
|
#endregion
|
|
|
|
|
|
#region 命令
|
|
|
@@ -1713,6 +1704,7 @@ namespace TeamAAS_VP.Core
|
|
|
if (state == 1)
|
|
|
{
|
|
|
SendTaskMessage(Lang.收到开始锁付信号, MessageLevel.Debug);
|
|
|
+ StartScrewTime = DateTime.Now;
|
|
|
//位置编号
|
|
|
Int16 positionIndex = plc.ReadNode<Int16>(addressConfig.In_ProductNum.Address);
|
|
|
SendTaskMessage(string.Format(Lang.编号0, positionIndex), MessageLevel.Info);
|
|
|
@@ -1767,6 +1759,7 @@ namespace TeamAAS_VP.Core
|
|
|
var headRecord = await _systemDatabaseService.GetLatestHeadChangeRecordAsync();
|
|
|
//最后一次的披头编号
|
|
|
string headNumber = headRecord != null ? headRecord.HeadBatchNumber : "N/A";
|
|
|
+ var cdata = _configService.GetCTQDataInfo();//获取ctq数据参数
|
|
|
|
|
|
await Task.Delay(60);
|
|
|
//获取电批结果
|
|
|
@@ -1836,6 +1829,75 @@ namespace TeamAAS_VP.Core
|
|
|
await plc.WriteNodeAsync(addressConfig.In_WorkDone.Address, (Int16)0);
|
|
|
// 停止采集压力并保存
|
|
|
await StopAndSavePressureCollectionAsync(currentProduct.Name, _productService.CurrentProductCode, positionIndex);
|
|
|
+
|
|
|
+ DFC.Clear();
|
|
|
+ DFC.Add(new DataFormCtq
|
|
|
+ {
|
|
|
+ PPID = productSn,
|
|
|
+ PROCESS_NAME = cdata.PROCESS_NAME,
|
|
|
+ PROCESS_START_TIME = StartScrewTime.ToString(),
|
|
|
+ CTQ_NAME = "Torque",
|
|
|
+ CTQ_VALUE = lockResult.LockTorque,
|
|
|
+ CTQ_LSL = lockResult.TargetTorqueLowerLimit,
|
|
|
+ CTQ_USL = lockResult.TargetTorqueUpperLimit,
|
|
|
+ PROCESS_END_TIME = DateTime.Now.ToString(),
|
|
|
+ SUPPLIER_NAME = cdata.SUPPLIER_NAME,
|
|
|
+ COMMODITY_TYPE = cdata.COMMODITY_TYPE,
|
|
|
+ REVISION = cdata.REVISION,
|
|
|
+ WO = cdata.WO,
|
|
|
+ MFG_LOT = cdata.MFG_LOT,
|
|
|
+ MFG_ASSY_LINE = cdata.MFG_ASSY_LINE,
|
|
|
+ PROCESS_OUTCOME = lockResult.LockPassed ? "PASS" : "FAIL",
|
|
|
+ PROCESS_MACHINE_ID = cdata.PROCESS_MACHINE_ID,
|
|
|
+ CTQ_UNIT_OF_MEASURE = "kgf.cm",
|
|
|
+ ERROR_MESSAGE = lockResult.LockPassed ? "" : "Torque_Spec OOS"
|
|
|
+ });
|
|
|
+ DFC.Add(new DataFormCtq
|
|
|
+ {
|
|
|
+ PPID = productSn,
|
|
|
+ PROCESS_NAME = cdata.PROCESS_NAME,
|
|
|
+ PROCESS_START_TIME = StartScrewTime.ToString(),
|
|
|
+ CTQ_NAME = "Turn",
|
|
|
+ CTQ_VALUE = lockResult.LockTurns,
|
|
|
+ CTQ_LSL = lockResult.TargetTurnsLowerLimit,
|
|
|
+ CTQ_USL = lockResult.TargetTurnsUpperLimit,
|
|
|
+ PROCESS_END_TIME = DateTime.Now.ToString(),
|
|
|
+ SUPPLIER_NAME = cdata.SUPPLIER_NAME,
|
|
|
+ COMMODITY_TYPE = cdata.COMMODITY_TYPE,
|
|
|
+ REVISION = cdata.REVISION,
|
|
|
+ WO = cdata.WO,
|
|
|
+ MFG_LOT = cdata.MFG_LOT,
|
|
|
+ MFG_ASSY_LINE = cdata.MFG_ASSY_LINE,
|
|
|
+ PROCESS_OUTCOME = lockResult.LockPassed ? "PASS" : "FAIL",
|
|
|
+ PROCESS_MACHINE_ID = cdata.PROCESS_MACHINE_ID,
|
|
|
+ CTQ_UNIT_OF_MEASURE = "圈",
|
|
|
+ ERROR_MESSAGE = lockResult.LockPassed ? "" : "Turn_Spec OOS"
|
|
|
+ });
|
|
|
+ DFC.Add(new DataFormCtq
|
|
|
+ {
|
|
|
+ PPID = productSn,
|
|
|
+ PROCESS_NAME = cdata.PROCESS_NAME,
|
|
|
+ PROCESS_START_TIME = StartScrewTime.ToString(),
|
|
|
+ CTQ_NAME = "Pressure",
|
|
|
+ CTQ_VALUE = lockResult.Pressure,
|
|
|
+ CTQ_LSL = cdata.CTQ_LSL_Pressure,
|
|
|
+ CTQ_USL = cdata.CTQ_USL_Pressure,
|
|
|
+ PROCESS_END_TIME = DateTime.Now.ToString(),
|
|
|
+ SUPPLIER_NAME = cdata.SUPPLIER_NAME,
|
|
|
+ COMMODITY_TYPE = cdata.COMMODITY_TYPE,
|
|
|
+ REVISION = cdata.REVISION,
|
|
|
+ WO = cdata.WO,
|
|
|
+ MFG_LOT = cdata.MFG_LOT,
|
|
|
+ MFG_ASSY_LINE = cdata.MFG_ASSY_LINE,
|
|
|
+ PROCESS_OUTCOME = lockResult.LockPassed ? "PASS" : "FAIL",
|
|
|
+ PROCESS_MACHINE_ID = cdata.PROCESS_MACHINE_ID,
|
|
|
+ CTQ_UNIT_OF_MEASURE = "N",
|
|
|
+ ERROR_MESSAGE = lockResult.LockPassed ? "" : "Pressure_Spec OOS"
|
|
|
+ });
|
|
|
+ foreach (var item in DFC)
|
|
|
+ {
|
|
|
+ FileHelper.WriteDataToCSV(item);
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -2060,7 +2122,9 @@ namespace TeamAAS_VP.Core
|
|
|
else
|
|
|
{
|
|
|
code = plc.ReadNode<string>(string.Format(addressConfig.In_Code.Address, i));
|
|
|
+ //code = "JSTEST045";
|
|
|
}
|
|
|
+ productSn = code;
|
|
|
|
|
|
//询问mes
|
|
|
if (state == 1)
|
|
|
@@ -2068,8 +2132,9 @@ namespace TeamAAS_VP.Core
|
|
|
//这里缺少从MES获取产品配方的内容,需要补充
|
|
|
|
|
|
_LastMesCheckTime[i] = DateTime.UtcNow;
|
|
|
-
|
|
|
- (bool isSuccess, string response) = await _mesService.StationGetAsync(code, 2);
|
|
|
+ LogHelper.WriteLogMes($"【mes开始QUERY】");
|
|
|
+ SendTaskMessage($"mes开始QUERY", MessageLevel.Info);
|
|
|
+ (bool isSuccess, string response) = await _mesService.StationGetAsync(code,"", 2);//询问mes
|
|
|
if (i == 0)
|
|
|
{
|
|
|
SendTaskMessage($"收到当前过站检查请求(当站是否生产)...", MessageLevel.Debug);
|
|
|
@@ -2082,16 +2147,22 @@ namespace TeamAAS_VP.Core
|
|
|
{
|
|
|
//产品发生改变并且供料器发生了变化时,需要通知PLC进行取料更改
|
|
|
await plc.WriteNodeAsync(addressConfig.Out_ScrewFeederIsChanged.Address, (Int16)1); //不发生改变
|
|
|
-
|
|
|
await plc.WriteNodeAsync(string.Format(addressConfig.Out_MesStatus.Address, i), (Int16)1);
|
|
|
+
|
|
|
+ LogHelper.WriteLogMes($"询问mes成功");
|
|
|
+ SendTaskMessage($"询问mes成功", MessageLevel.Debug);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//产品发生改变并且供料器发生了变化时,需要通知PLC进行取料更改
|
|
|
await plc.WriteNodeAsync(addressConfig.Out_ScrewFeederIsChanged.Address, (Int16)1); //不发生改变
|
|
|
+ await plc.WriteNodeAsync(string.Format(addressConfig.Out_MesStatus.Address, i), (Int16)2);
|
|
|
|
|
|
- await plc.WriteNodeAsync(string.Format(addressConfig.Out_MesStatus.Address, i), (Int16)0);
|
|
|
+ LogHelper.WriteLogMes($"询问mes失败");
|
|
|
+ SendTaskMessage($"询问mes失败:{response}", MessageLevel.Error);
|
|
|
}
|
|
|
+ LogHelper.WriteLogMes($"【mes结束QUERY】");
|
|
|
+ SendTaskMessage($"mes结束QUERY", MessageLevel.Info);
|
|
|
}
|
|
|
// 上传本站数据
|
|
|
else if (state == 2)
|
|
|
@@ -2121,12 +2192,36 @@ namespace TeamAAS_VP.Core
|
|
|
Remark = $"TotalSeconds:{DateTime.UtcNow.Subtract(_LastMesCheckTime[i]).TotalSeconds.ToString("F2")}",
|
|
|
});
|
|
|
|
|
|
- (bool isSuccess, string response) = await _mesService.SubmitGetAsync(code, resultIndex == 1 ? true : false, _LastMesCheckTime[i], DateTime.UtcNow);
|
|
|
- //假设上传成功,这里缺少上传失败的处理
|
|
|
-
|
|
|
+ LogHelper.WriteLogMes($"【mes开始ADD】");
|
|
|
+ SendTaskMessage($"mes开始ADD", MessageLevel.Info);
|
|
|
+ //上传mes
|
|
|
+ string torque = ""; string pressure = ""; string turn = "";
|
|
|
+ //string torque = "1-1.11,2-2.22,3-1.11,4-2.22,5-1.11,6-2.22,7-1.11,8-2.22,9-1.11,10-2.22,1-1.11,2-2.22,3-1.11,4-2.22,5-1.11,6-2.22,7-1.11,8-2.22,9-1.11,10-2.22" +
|
|
|
+ // "1-1.11,2-2.22,3-1.11,4-2.22,5-1.11,6-2.22,7-1.11,8-2.22,9-1.11,10-2.22,1-1.11,2-2.22,3-1.11,4-2.22,5-1.11,6-2.22,7-1.11,8-2.22,9-1.11,10-2.22" +
|
|
|
+ // "1-1.11,2-2.22,3-1.11,4-2.22,5-1.11,6-2.22,7-1.11,8-2.22,9-1.11,10-2.22,1-1.11,2-2.22,3-1.11,4-2.22,5-1.11,6-2.22,7-1.11,8-2.22,9-1.11,10-2.22,61-3.33";
|
|
|
+ //string pressure = "1-1.11,2-2.22,3-1.11,4-2.22,5-1.11,6-2.22,7-1.11,8-2.22,9-1.11,10-2.22,1-1.11,2-2.22,3-1.11,4-2.22,5-1.11,6-2.22,7-1.11,8-2.22,9-1.11,10-2.22" +
|
|
|
+ // "1-1.11,2-2.22,3-1.11,4-2.22,5-1.11,6-2.22,7-1.11,8-2.22,9-1.11,10-2.22,1-1.11,2-2.22,3-1.11,4-2.22,5-1.11,6-2.22,7-1.11,8-2.22,9-1.11,10-2.22" +
|
|
|
+ // "1-1.11,2-2.22,3-1.11,4-2.22,5-1.11,6-2.22,7-1.11,8-2.22,9-1.11,10-2.22,1-1.11,2-2.22,3-1.11,4-2.22,5-1.11,6-2.22,7-1.11,8-2.22,9-1.11,10-2.22,61-3.33";
|
|
|
+ //string turn = "1-1.11,2-2.22,3-1.11,4-2.22,5-1.11,6-2.22,7-1.11,8-2.22,9-1.11,10-2.22,1-1.11,2-2.22,3-1.11,4-2.22,5-1.11,6-2.22,7-1.11,8-2.22,9-1.11,10-2.22" +
|
|
|
+ // "1-1.11,2-2.22,3-1.11,4-2.22,5-1.11,6-2.22,7-1.11,8-2.22,9-1.11,10-2.22,1-1.11,2-2.22,3-1.11,4-2.22,5-1.11,6-2.22,7-1.11,8-2.22,9-1.11,10-2.22" +
|
|
|
+ // "1-1.11,2-2.22,3-1.11,4-2.22,5-1.11,6-2.22,7-1.11,8-2.22,9-1.11,10-2.22,1-1.11,2-2.22,3-1.11,4-2.22,5-1.11,6-2.22,7-1.11,8-2.22,9-1.11,10-2.22,61-3.33";
|
|
|
+ (bool isSuccess, string response) = await _mesService.SubmitGetAsync(code,"",torque,pressure,turn, resultIndex == 1 ? true : false, _LastMesCheckTime[i], DateTime.UtcNow);
|
|
|
+ if (isSuccess)
|
|
|
+ {
|
|
|
+ LogHelper.WriteLogMes($"上传mes成功");
|
|
|
+ SendTaskMessage($"上传mes成功", MessageLevel.Debug);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ LogHelper.WriteLogMes($"上传mes失败");
|
|
|
+ SendTaskMessage($"上传mes失败", MessageLevel.Error);
|
|
|
+ }
|
|
|
await plc.WriteNodeAsync(string.Format(addressConfig.Out_MesStatus.Address, i), (Int16)3);
|
|
|
|
|
|
WriteProductLog(lockResultsAll, code, CTtime);
|
|
|
+
|
|
|
+ LogHelper.WriteLogMes($"【mes结束ADD】");
|
|
|
+ SendTaskMessage($"mes结束ADD", MessageLevel.Info);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -2149,7 +2244,7 @@ namespace TeamAAS_VP.Core
|
|
|
|
|
|
#region 方法
|
|
|
|
|
|
- private void SendTaskMessage(string msg, MessageLevel level)
|
|
|
+ public void SendTaskMessage(string msg, MessageLevel level)
|
|
|
{
|
|
|
App.Current.Dispatcher.Invoke(() =>
|
|
|
{
|