|
@@ -169,6 +169,16 @@ namespace TeamAAS_VP.Core
|
|
|
set { SetProperty(ref _CTtime, value); }
|
|
set { SetProperty(ref _CTtime, value); }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private double _CTtime2;
|
|
|
|
|
+ /// <summary>
|
|
|
|
|
+ /// ct2
|
|
|
|
|
+ /// </summary>
|
|
|
|
|
+ public double CTtime2
|
|
|
|
|
+ {
|
|
|
|
|
+ get { return _CTtime2; }
|
|
|
|
|
+ set { SetProperty(ref _CTtime2, value); }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
|
|
|
private ObservableCollection<DataFormCtq> _dfc = new ObservableCollection<DataFormCtq>();
|
|
private ObservableCollection<DataFormCtq> _dfc = new ObservableCollection<DataFormCtq>();
|
|
|
/// <summary>
|
|
/// <summary>
|
|
@@ -190,38 +200,6 @@ namespace TeamAAS_VP.Core
|
|
|
set { SetProperty(ref _dfc2, value); }
|
|
set { SetProperty(ref _dfc2, value); }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
- private Int64 _ThrowNumber;
|
|
|
|
|
- /// <summary>
|
|
|
|
|
- /// 抛料数
|
|
|
|
|
- /// </summary>
|
|
|
|
|
- public Int64 ThrowNumber
|
|
|
|
|
- {
|
|
|
|
|
- get { return _ThrowNumber; }
|
|
|
|
|
- set { SetProperty(ref _ThrowNumber, value); }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- private Int64 _NgNumber;
|
|
|
|
|
- /// <summary>
|
|
|
|
|
- /// ng数量
|
|
|
|
|
- /// </summary>
|
|
|
|
|
- public Int64 NgNumber
|
|
|
|
|
- {
|
|
|
|
|
- get { return _NgNumber; }
|
|
|
|
|
- set { SetProperty(ref _NgNumber, value); }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- private double _Yield;
|
|
|
|
|
- /// <summary>
|
|
|
|
|
- /// 良率
|
|
|
|
|
- /// </summary>
|
|
|
|
|
- public double Yield
|
|
|
|
|
- {
|
|
|
|
|
- get { return _Yield; }
|
|
|
|
|
- set { SetProperty(ref _Yield, value); }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
private ObservableCollection<ProductModel> _ProductList;
|
|
private ObservableCollection<ProductModel> _ProductList;
|
|
|
public ObservableCollection<ProductModel> ProductList
|
|
public ObservableCollection<ProductModel> ProductList
|
|
|
{
|
|
{
|
|
@@ -1065,6 +1043,7 @@ namespace TeamAAS_VP.Core
|
|
|
addressConfig.ManualMode.Address,
|
|
addressConfig.ManualMode.Address,
|
|
|
addressConfig.AutoRunning.Address,
|
|
addressConfig.AutoRunning.Address,
|
|
|
addressConfig.ClearMode.Address,
|
|
addressConfig.ClearMode.Address,
|
|
|
|
|
+ addressConfig.WorkCt.Address,
|
|
|
// addressConfig.Fault.Address,
|
|
// addressConfig.Fault.Address,
|
|
|
};
|
|
};
|
|
|
for (int i = 0; i < 10; i++)
|
|
for (int i = 0; i < 10; i++)
|
|
@@ -1320,6 +1299,7 @@ namespace TeamAAS_VP.Core
|
|
|
bool _LastClearMode = false;
|
|
bool _LastClearMode = false;
|
|
|
bool _LastThrowExe = false;
|
|
bool _LastThrowExe = false;
|
|
|
bool _LastRunModel = false;
|
|
bool _LastRunModel = false;
|
|
|
|
|
+ bool _Lastworkct = false;
|
|
|
bool _LastFault = false;
|
|
bool _LastFault = false;
|
|
|
Int16[] _LastWorkStart = new Int16[7];
|
|
Int16[] _LastWorkStart = new Int16[7];
|
|
|
Int16 _LastQrCodePhotoRequest = 0;
|
|
Int16 _LastQrCodePhotoRequest = 0;
|
|
@@ -2729,6 +2709,27 @@ namespace TeamAAS_VP.Core
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+ //读取PLC生产CT
|
|
|
|
|
+ else if (addressConfig.WorkCt.Address.Contains(tuple.nodeId))
|
|
|
|
|
+ {
|
|
|
|
|
+ if (tuple.value is bool state)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (_Lastworkct != state)
|
|
|
|
|
+ {
|
|
|
|
|
+ _Lastworkct = state;
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (state)
|
|
|
|
|
+ {
|
|
|
|
|
+ Int32 cttime = plc.ReadNode<Int32>(addressConfig.In_CycleTimeBefor.Address);
|
|
|
|
|
+ SendTaskMessage($"读取PLC记录CT:{cttime}", MessageLevel.Info);
|
|
|
|
|
+ CTtime2 = Convert.ToDouble(cttime);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|
|
|
// 过站检查
|
|
// 过站检查
|
|
@@ -3194,7 +3195,8 @@ namespace TeamAAS_VP.Core
|
|
|
PD_ATTR_02 = ProductMainSN[i],
|
|
PD_ATTR_02 = ProductMainSN[i],
|
|
|
PD_ATTR_03 = PartSN,
|
|
PD_ATTR_03 = PartSN,
|
|
|
PD_ATTR_04 = code,
|
|
PD_ATTR_04 = code,
|
|
|
- PD_ATTR_05 = "NA",
|
|
|
|
|
|
|
+ PD_ATTR_05 = CTtime.ToString(),
|
|
|
|
|
+ PD_ATTR_06 = CTtime2.ToString(),
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -3223,7 +3225,8 @@ namespace TeamAAS_VP.Core
|
|
|
PD_ATTR_02 = ProductMainSN[i],
|
|
PD_ATTR_02 = ProductMainSN[i],
|
|
|
PD_ATTR_03 = PartSN,
|
|
PD_ATTR_03 = PartSN,
|
|
|
PD_ATTR_04 = code,
|
|
PD_ATTR_04 = code,
|
|
|
- PD_ATTR_05 = "NA",
|
|
|
|
|
|
|
+ PD_ATTR_05 = CTtime.ToString(),
|
|
|
|
|
+ PD_ATTR_06 = CTtime2.ToString(),
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
try
|
|
try
|
|
@@ -3255,7 +3258,7 @@ namespace TeamAAS_VP.Core
|
|
|
//PD_ATTR_02 = DISDict["RightDis1"],//右1
|
|
//PD_ATTR_02 = DISDict["RightDis1"],//右1
|
|
|
//PD_ATTR_03 = DISDict["DownDis2"],//下2
|
|
//PD_ATTR_03 = DISDict["DownDis2"],//下2
|
|
|
//PD_ATTR_04 = DISDict["RightDis2"],//右2
|
|
//PD_ATTR_04 = DISDict["RightDis2"],//右2
|
|
|
- //PD_ATTR_05 = DISDict["UpDis2"],//上2
|
|
|
|
|
|
|
+ PD_ATTR_06 = "",//上2
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
bool recordResult2 = RecordStationResult2(i, DFC2, ProductMainSN[i], serverTimeResult.Now.Subtract(_LastMesCheckTime[i]).TotalSeconds, _LastMesCheckTime[i], stationConfig.SaveCsvPath);
|
|
bool recordResult2 = RecordStationResult2(i, DFC2, ProductMainSN[i], serverTimeResult.Now.Subtract(_LastMesCheckTime[i]).TotalSeconds, _LastMesCheckTime[i], stationConfig.SaveCsvPath);
|
|
@@ -3335,7 +3338,8 @@ namespace TeamAAS_VP.Core
|
|
|
PD_ATTR_02 = ProductMainSN[i],
|
|
PD_ATTR_02 = ProductMainSN[i],
|
|
|
PD_ATTR_03 = "NA",
|
|
PD_ATTR_03 = "NA",
|
|
|
PD_ATTR_04 = code,
|
|
PD_ATTR_04 = code,
|
|
|
- PD_ATTR_05 = "NA",
|
|
|
|
|
|
|
+ PD_ATTR_05 = CTtime.ToString(),
|
|
|
|
|
+ PD_ATTR_06 = CTtime2.ToString(),
|
|
|
});
|
|
});
|
|
|
midValue = ((currentProduct.GlobalParamEx.DownPressure.PressureTime + currentProduct.GlobalParamEx.DownPressure.PressureTime) / 2).ToString("F3");
|
|
midValue = ((currentProduct.GlobalParamEx.DownPressure.PressureTime + currentProduct.GlobalParamEx.DownPressure.PressureTime) / 2).ToString("F3");
|
|
|
DFC.Add(new DataFormCtq
|
|
DFC.Add(new DataFormCtq
|
|
@@ -3362,7 +3366,8 @@ namespace TeamAAS_VP.Core
|
|
|
PD_ATTR_02 = ProductMainSN[i],
|
|
PD_ATTR_02 = ProductMainSN[i],
|
|
|
PD_ATTR_03 = "NA",
|
|
PD_ATTR_03 = "NA",
|
|
|
PD_ATTR_04 = code,
|
|
PD_ATTR_04 = code,
|
|
|
- PD_ATTR_05 = "NA",
|
|
|
|
|
|
|
+ PD_ATTR_05 = CTtime.ToString(),
|
|
|
|
|
+ PD_ATTR_06 = CTtime2.ToString(),
|
|
|
});
|
|
});
|
|
|
#endregion
|
|
#endregion
|
|
|
|
|
|
|
@@ -3877,23 +3882,23 @@ namespace TeamAAS_VP.Core
|
|
|
//TotalQuantityToday = await _systemDatabaseService.GetTodayProductionAsync(currentproduct.Name);
|
|
//TotalQuantityToday = await _systemDatabaseService.GetTodayProductionAsync(currentproduct.Name);
|
|
|
//CurrentUPH = await _systemDatabaseService.GetLastHourProductionAsync(currentproduct.Name);
|
|
//CurrentUPH = await _systemDatabaseService.GetLastHourProductionAsync(currentproduct.Name);
|
|
|
////
|
|
////
|
|
|
- ThrowNumber = await _systemDatabaseService.GetThrowNumberAsync();
|
|
|
|
|
|
|
+ //ThrowNumber = await _systemDatabaseService.GetThrowNumberAsync();
|
|
|
//NgNumber = await _systemDatabaseService.GetNGProductionAsync(currentproduct.Name);
|
|
//NgNumber = await _systemDatabaseService.GetNGProductionAsync(currentproduct.Name);
|
|
|
//Yield = ((double)TotalQuantityToday - (double)NgNumber) / (double)TotalQuantityToday * 100;
|
|
//Yield = ((double)TotalQuantityToday - (double)NgNumber) / (double)TotalQuantityToday * 100;
|
|
|
|
|
|
|
|
TotalQuantityToday = 0;
|
|
TotalQuantityToday = 0;
|
|
|
CurrentUPH = 0;
|
|
CurrentUPH = 0;
|
|
|
- NgNumber = 0;
|
|
|
|
|
- Yield = 0;
|
|
|
|
|
|
|
+ //NgNumber = 0;
|
|
|
|
|
+ //Yield = 0;
|
|
|
ObservableCollection<ProductModel> ProductList = new ObservableCollection<ProductModel>(_productService.GetAllProducts());
|
|
ObservableCollection<ProductModel> ProductList = new ObservableCollection<ProductModel>(_productService.GetAllProducts());
|
|
|
foreach (var product in ProductList)
|
|
foreach (var product in ProductList)
|
|
|
{
|
|
{
|
|
|
//TotalQuantity += await _systemDatabaseService.GetOverallProductionAsync(product.Name);
|
|
//TotalQuantity += await _systemDatabaseService.GetOverallProductionAsync(product.Name);
|
|
|
TotalQuantityToday += await _systemDatabaseService.GetTodayProductionAsync(product.Name);
|
|
TotalQuantityToday += await _systemDatabaseService.GetTodayProductionAsync(product.Name);
|
|
|
CurrentUPH += await _systemDatabaseService.GetLastHourProductionAsync(product.Name);
|
|
CurrentUPH += await _systemDatabaseService.GetLastHourProductionAsync(product.Name);
|
|
|
- NgNumber += await _systemDatabaseService.GetNGProductionAsync(product.Name);
|
|
|
|
|
|
|
+ //NgNumber += await _systemDatabaseService.GetNGProductionAsync(product.Name);
|
|
|
}
|
|
}
|
|
|
- Yield += ((double)TotalQuantityToday - (double)NgNumber) / (double)TotalQuantityToday * 100;
|
|
|
|
|
|
|
+ //Yield += ((double)TotalQuantityToday - (double)NgNumber) / (double)TotalQuantityToday * 100;
|
|
|
}
|
|
}
|
|
|
catch (Exception)
|
|
catch (Exception)
|
|
|
{
|
|
{
|
|
@@ -3983,7 +3988,7 @@ namespace TeamAAS_VP.Core
|
|
|
if (!File.Exists(fullPath))
|
|
if (!File.Exists(fullPath))
|
|
|
{
|
|
{
|
|
|
sb.Append("PPID,PROCESS_NAME,PROCESS_START_TIME,CTQ_NAME,CTQ_VALUE,CTQ_LSL,CTQ_USL,PROCESS_END_TIME,SUPPLIER_NAME,COMMODITY_TYPE,REVISION,WO#,MFG_LOT#," +
|
|
sb.Append("PPID,PROCESS_NAME,PROCESS_START_TIME,CTQ_NAME,CTQ_VALUE,CTQ_LSL,CTQ_USL,PROCESS_END_TIME,SUPPLIER_NAME,COMMODITY_TYPE,REVISION,WO#,MFG_LOT#," +
|
|
|
- "MFG_ASSY_LINE,PROCESS_OUTCOME,PROCESS_MACHINE_ID,CTQ_UNIT_OF_MEASURE,ERROR_MESSAGE,PD_ATTR_01,PD_ATTR_02,PD_ATTR_03,PD_ATTR_04,PD_ATTR_05");
|
|
|
|
|
|
|
+ "MFG_ASSY_LINE,PROCESS_OUTCOME,PROCESS_MACHINE_ID,CTQ_UNIT_OF_MEASURE,ERROR_MESSAGE,PD_ATTR_01,PD_ATTR_02,PD_ATTR_03,PD_ATTR_04,PD_ATTR_05,PD_ATTR_06");
|
|
|
sb.AppendLine();
|
|
sb.AppendLine();
|
|
|
}
|
|
}
|
|
|
if (dfcs == null || dfcs.Count() == 0)
|
|
if (dfcs == null || dfcs.Count() == 0)
|
|
@@ -3992,7 +3997,7 @@ namespace TeamAAS_VP.Core
|
|
|
}
|
|
}
|
|
|
foreach (var dfc in dfcs)
|
|
foreach (var dfc in dfcs)
|
|
|
{
|
|
{
|
|
|
- sb.Append($"{dfc.PPID},{dfc.PROCESS_NAME},{dfc.PROCESS_START_TIME},{dfc.CTQ_NAME},{dfc.CTQ_VALUE},{dfc.CTQ_LSL},{dfc.CTQ_USL},{dfc.PROCESS_END_TIME},{dfc.SUPPLIER_NAME},{dfc.COMMODITY_TYPE},{dfc.REVISION},{dfc.WO},{dfc.MFG_LOT},{dfc.MFG_ASSY_LINE},{dfc.PROCESS_OUTCOME},{dfc.PROCESS_MACHINE_ID},{dfc.CTQ_UNIT_OF_MEASURE},{dfc.ERROR_MESSAGE},{dfc.PD_ATTR_01},{dfc.PD_ATTR_02},{dfc.PD_ATTR_03},{dfc.PD_ATTR_04},{dfc.PD_ATTR_05}");
|
|
|
|
|
|
|
+ sb.Append($"{dfc.PPID},{dfc.PROCESS_NAME},{dfc.PROCESS_START_TIME},{dfc.CTQ_NAME},{dfc.CTQ_VALUE},{dfc.CTQ_LSL},{dfc.CTQ_USL},{dfc.PROCESS_END_TIME},{dfc.SUPPLIER_NAME},{dfc.COMMODITY_TYPE},{dfc.REVISION},{dfc.WO},{dfc.MFG_LOT},{dfc.MFG_ASSY_LINE},{dfc.PROCESS_OUTCOME},{dfc.PROCESS_MACHINE_ID},{dfc.CTQ_UNIT_OF_MEASURE},{dfc.ERROR_MESSAGE},{dfc.PD_ATTR_01},{dfc.PD_ATTR_02},{dfc.PD_ATTR_03},{dfc.PD_ATTR_04},{dfc.PD_ATTR_05},{dfc.PD_ATTR_06}");
|
|
|
sb.AppendLine();
|
|
sb.AppendLine();
|
|
|
}
|
|
}
|
|
|
// 使用 StreamWriter 以追加模式打开文件
|
|
// 使用 StreamWriter 以追加模式打开文件
|
|
@@ -4054,7 +4059,7 @@ namespace TeamAAS_VP.Core
|
|
|
if (!File.Exists(fullPath))
|
|
if (!File.Exists(fullPath))
|
|
|
{
|
|
{
|
|
|
sb.Append("PPID,SN,PROCESS_START_TIME,dis1,dis2,dis3,dis4,PROCESS_END_TIME,Product_Name,CodeSn,dis5,WO#,MFG_LOT#," +
|
|
sb.Append("PPID,SN,PROCESS_START_TIME,dis1,dis2,dis3,dis4,PROCESS_END_TIME,Product_Name,CodeSn,dis5,WO#,MFG_LOT#," +
|
|
|
- "MFG_ASSY_LINE,PROCESS_OUTCOME,Left1,Down1,Left2,Up1,Right1,Down2,Right2,Up2");
|
|
|
|
|
|
|
+ "MFG_ASSY_LINE,PROCESS_OUTCOME,Left1,Down1,Left2,Up1,Right1,Down2,Right2,Up2,PD_ATTR_06");
|
|
|
sb.AppendLine();
|
|
sb.AppendLine();
|
|
|
}
|
|
}
|
|
|
if (dfcs == null || dfcs.Count() == 0)
|
|
if (dfcs == null || dfcs.Count() == 0)
|
|
@@ -4063,7 +4068,7 @@ namespace TeamAAS_VP.Core
|
|
|
}
|
|
}
|
|
|
foreach (var dfc in dfcs)
|
|
foreach (var dfc in dfcs)
|
|
|
{
|
|
{
|
|
|
- sb.Append($"{dfc.PPID},{dfc.PROCESS_NAME},{dfc.PROCESS_START_TIME},{dfc.CTQ_NAME},{dfc.CTQ_VALUE},{dfc.CTQ_LSL},{dfc.CTQ_USL},{dfc.PROCESS_END_TIME},{dfc.SUPPLIER_NAME},{dfc.COMMODITY_TYPE},{dfc.REVISION},{dfc.WO},{dfc.MFG_LOT},{dfc.MFG_ASSY_LINE},{dfc.PROCESS_OUTCOME},{dfc.PROCESS_MACHINE_ID},{dfc.CTQ_UNIT_OF_MEASURE},{dfc.ERROR_MESSAGE},{dfc.PD_ATTR_01},{dfc.PD_ATTR_02},{dfc.PD_ATTR_03},{dfc.PD_ATTR_04},{dfc.PD_ATTR_05}");
|
|
|
|
|
|
|
+ sb.Append($"{dfc.PPID},{dfc.PROCESS_NAME},{dfc.PROCESS_START_TIME},{dfc.CTQ_NAME},{dfc.CTQ_VALUE},{dfc.CTQ_LSL},{dfc.CTQ_USL},{dfc.PROCESS_END_TIME},{dfc.SUPPLIER_NAME},{dfc.COMMODITY_TYPE},{dfc.REVISION},{dfc.WO},{dfc.MFG_LOT},{dfc.MFG_ASSY_LINE},{dfc.PROCESS_OUTCOME},{dfc.PROCESS_MACHINE_ID},{dfc.CTQ_UNIT_OF_MEASURE},{dfc.ERROR_MESSAGE},{dfc.PD_ATTR_01},{dfc.PD_ATTR_02},{dfc.PD_ATTR_03},{dfc.PD_ATTR_04},{dfc.PD_ATTR_05},{dfc.PD_ATTR_06}");
|
|
|
sb.AppendLine();
|
|
sb.AppendLine();
|
|
|
}
|
|
}
|
|
|
// 使用 StreamWriter 以追加模式打开文件
|
|
// 使用 StreamWriter 以追加模式打开文件
|