diff --git a/RIZO.Admin.WebApi/PLC/Model/Dto/PlcProductionDataDto.cs b/RIZO.Admin.WebApi/PLC/Model/Dto/PlcProductionDataDto.cs
index 5a9d454..39d2744 100644
--- a/RIZO.Admin.WebApi/PLC/Model/Dto/PlcProductionDataDto.cs
+++ b/RIZO.Admin.WebApi/PLC/Model/Dto/PlcProductionDataDto.cs
@@ -1,5 +1,6 @@
-using RIZO.Model;
+using MDM.Model;
+using MiniExcelLibs.Attributes;
using System.ComponentModel.DataAnnotations;
namespace RIZO.Admin.WebApi.PLC.Model.Dto
@@ -7,15 +8,8 @@ namespace RIZO.Admin.WebApi.PLC.Model.Dto
///
/// 产线PLC生产参数数据表查询对象
///
- public class PlcProductionDataQueryDto : PagerInfo
+ public class PlcProductionDataQueryDto : PagerInfo
{
- public DateTime? startTime { get; set; }
- public DateTime? endTime { get; set; }
- public string? ProductCode { get; set; }
- public string? ProductName { get; set; }
- public string? PartCode { get; set; }
- public string? PartName { get; set; }
- public string? ReworkFlag { get; set; }
}
///
@@ -27,17 +21,13 @@ namespace RIZO.Admin.WebApi.PLC.Model.Dto
public int Id { get; set; }
public string? LineCode { get; set; }
- public string? WorkstationCode { get; set; }
+
public string? PlcIp { get; set; }
public string? ProductCode { get; set; }
public string? ProductName { get; set; }
- public string? ProductModel { get; set; }
-
- public string? WorkstationName { get; set; }
-
public string? ParamName { get; set; }
public string? ParamValue { get; set; }
@@ -49,19 +39,9 @@ namespace RIZO.Admin.WebApi.PLC.Model.Dto
public string? ReworkFlag { get; set; }
public int? ProductionCycle { get; set; }
- public int? AutoManual { get; set; }
- public int? RunStatus { get; set; }
- public string? TrayNo { get; set; }
- public string? ProduceModel { get; set; }
-
- public string? OnlineStatus { get; set; }
public string? Remark { get; set; }
- public string? SN1 { get; set; }
- public string? SN2 { get; set; }
- public string? CameraResult { get; set; }
-
public string? CreatedBy { get; set; }
public DateTime? CreatedTime { get; set; }
@@ -70,7 +50,113 @@ namespace RIZO.Admin.WebApi.PLC.Model.Dto
public DateTime? UpdatedTime { get; set; }
+ public int? Automanual { get; set; }
+
+ public int? Runstatus { get; set; }
+
+ public string? TrayNo { get; set; }
+
+ public string? ProduceModel { get; set; }
+
+ public string? OnlineStatus { get; set; }
+
+ public string? WorkstationCode { get; set; }
+
+ public string? ProductModel { get; set; }
+
+ public string? WorkstationName { get; set; }
+
+ public string? Sn1 { get; set; }
+
+ public string? Sn2 { get; set; }
+
+ public string? CameraResult { get; set; }
+
+ public string? AssemblyHousingSN { get; set; }
+
+ public string? AssemblyPCBSN { get; set; }
+
+ public string? TightenHousingSN { get; set; }
+
+ public string? TightenPCBSN { get; set; }
+
+ public string? AssemblyTrayNo { get; set; }
+
+ public string? TightenTrayNo { get; set; }
+
+ public string? Screw1Result { get; set; }
+
+ public string? Screw1Torque { get; set; }
+
+ public string? Screw1Depth { get; set; }
+
+ public string? Screw1Angle { get; set; }
+
+ public string? Screw1TightenTime { get; set; }
+
+ public string? Screw2Result { get; set; }
+
+ public string? Screw2Torque { get; set; }
+
+ public string? Screw2Depth { get; set; }
+
+ public string? Screw2Angle { get; set; }
+
+ public string? Screw2TightenTime { get; set; }
+
+ public string? Screw3Result { get; set; }
+
+ public string? Screw3Torque { get; set; }
+
+ public string? Screw3Depth { get; set; }
+
+ public string? Screw3Angle { get; set; }
+
+ public string? Screw3TightenTime { get; set; }
+
+ public string? Screw4Result { get; set; }
+
+ public string? Screw4Torque { get; set; }
+
+ public string? Screw4Depth { get; set; }
+
+ public string? Screw4Angle { get; set; }
+
+ public string? Screw4TightenTime { get; set; }
+
+ public string? Screw5Result { get; set; }
+
+ public string? Screw5Torque { get; set; }
+
+ public string? Screw5Depth { get; set; }
+
+ public string? Screw5Angle { get; set; }
+
+ public string? Screw5TightenTime { get; set; }
+
+ public string? Screw6Result { get; set; }
+
+ public string? Screw6Torque { get; set; }
+
+ public string? Screw6Depth { get; set; }
+
+ public string? Screw6Angle { get; set; }
+
+ public string? Screw6TightenTime { get; set; }
+
+ public string? Screw7Result { get; set; }
+
+ public string? Screw7Torque { get; set; }
+
+ public string? Screw7Depth { get; set; }
+
+ public string? Screw7Angle { get; set; }
+
+ public string? Screw7TightenTime { get; set; }
+
+ [ExcelColumn(Name = "运行状态:1=空闲,2=运行中,3=故障;")]
+ public string? RunstatusLabel { get; set; }
}
}
\ No newline at end of file
diff --git a/RIZO.Admin.WebApi/PLC/Model/PlcProductionData.cs b/RIZO.Admin.WebApi/PLC/Model/PlcProductionData.cs
index 2dc8ee0..43205e0 100644
--- a/RIZO.Admin.WebApi/PLC/Model/PlcProductionData.cs
+++ b/RIZO.Admin.WebApi/PLC/Model/PlcProductionData.cs
@@ -12,7 +12,7 @@ namespace RIZO.Admin.WebApi.PLC.Model
///
/// 主键ID
///
- [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+ [SugarColumn(IsPrimaryKey = false, IsIdentity = true)]
public int Id { get; set; }
///
@@ -21,18 +21,6 @@ namespace RIZO.Admin.WebApi.PLC.Model
[SugarColumn(ColumnName = "line_code")]
public string LineCode { get; set; }
- ///
- /// 工站编码
- ///
- [SugarColumn(ColumnName = "workstationCode")]
- public string WorkstationCode { get; set; }
-
- ///
- /// 工站名称
- ///
- [SugarColumn(ColumnName = "workstationName")]
- public string WorkstationName { get; set; }
-
///
/// PLC IP地址
///
@@ -51,12 +39,6 @@ namespace RIZO.Admin.WebApi.PLC.Model
[SugarColumn(ColumnName = "product_name")]
public string ProductName { get; set; }
- ///
- /// 产品型号
- ///
- [SugarColumn(ColumnName = "product_model")]
- public string ProductModel { get; set; }
-
///
/// 参数名称
///
@@ -76,7 +58,7 @@ namespace RIZO.Admin.WebApi.PLC.Model
public DateTime? OccurTime { get; set; }
///
- /// 合格标志:0-默认,1-合格,2-不合格
+ /// 合格标志:站位结果1,OK,2,NG
///
[SugarColumn(ColumnName = "qualification_flag")]
public string QualificationFlag { get; set; }
@@ -93,38 +75,10 @@ namespace RIZO.Admin.WebApi.PLC.Model
[SugarColumn(ColumnName = "production_cycle")]
public int? ProductionCycle { get; set; }
- ///
- /// 设备自动手动:0-自动,1-手动
- ///
- [SugarColumn(ColumnName = "automanual")]
- public int? AutoManual { get; set; }
-
- ///
- /// 运行状态:1=空闲,2=运行中,3=故障;
- ///
- [SugarColumn(ColumnName = "runstatus")]
- public int? RunStatus { get; set; }
-
- ///
- /// 托盘号
- ///
- [SugarColumn(ColumnName = "trayNo")]
- public string TrayNo { get; set; }
-
- ///
- /// 生产模式
- ///
- [SugarColumn(ColumnName = "produceModel")]
- public string ProduceModel { get; set; }
-
- ///
- /// 设备在线状态1=离线,0=在线
- ///
- [SugarColumn(ColumnName = "onlineStatus")]
- public string OnlineStatus { get; set; }
///
/// 备注
///
+ [SugarColumn(ColumnName = "remark")]
public string Remark { get; set; }
///
@@ -151,6 +105,54 @@ namespace RIZO.Admin.WebApi.PLC.Model
[SugarColumn(ColumnName = "uPDATED_TIME")]
public DateTime? UpdatedTime { get; set; }
+ ///
+ /// 设备模式:0-自动,1-手动
+ ///
+ [SugarColumn(ColumnName = "automanual")]
+ public int? Automanual { get; set; }
+
+ ///
+ /// 运行状态:1=空闲,2=运行中,3=故障;
+ ///
+ [SugarColumn(ColumnName = "runstatus")]
+ public int? Runstatus { get; set; }
+
+ ///
+ /// 托盘号
+ ///
+ [SugarColumn(ColumnName = "trayNo")]
+ public string TrayNo { get; set; }
+
+ ///
+ /// 生产模式模式(1:正常模式;2:清线模式;4:返工模式;8:换型模式;16:预热模式)
+ ///
+ [SugarColumn(ColumnName = "produceModel")]
+ public string ProduceModel { get; set; }
+
+ ///
+ /// 设备在线状态1=离线,0=在线
+ ///
+ [SugarColumn(ColumnName = "onlineStatus")]
+ public string OnlineStatus { get; set; }
+
+ ///
+ /// 工站编码
+ ///
+ [SugarColumn(ColumnName = "workstationCode")]
+ public string WorkstationCode { get; set; }
+
+ ///
+ /// 产品型号
+ ///
+ [SugarColumn(ColumnName = "productModel")]
+ public string ProductModel { get; set; }
+
+ ///
+ /// 工站名称
+ ///
+ [SugarColumn(ColumnName = "workstationName")]
+ public string WorkstationName { get; set; }
+
///
/// 条码查询
///
@@ -164,10 +166,256 @@ namespace RIZO.Admin.WebApi.PLC.Model
public string SN2 { get; set; }
///
- /// 相机结果1,OK,2,NG
+ /// 相机结果1,OK,2,NG
///
[SugarColumn(ColumnName = "cameraResult")]
public string CameraResult { get; set; }
+ ///
+ /// 合装位机壳 SN
+ ///
+ [SugarColumn(ColumnName = "AssemblyHousingSN")]
+ public string AssemblyHousingSN { get; set; }
+
+ ///
+ /// 合装位 PCB SN
+ ///
+ [SugarColumn(ColumnName = "AssemblyPCBSN")]
+ public string AssemblyPCBSN { get; set; }
+
+ ///
+ /// 拧紧位机壳 SN
+ ///
+ [SugarColumn(ColumnName = "TightenHousingSN")]
+ public string TightenHousingSN { get; set; }
+
+ ///
+ /// 拧紧位 PCB SN
+ ///
+ [SugarColumn(ColumnName = "TightenPCBSN")]
+ public string TightenPCBSN { get; set; }
+
+ ///
+ /// 合装位托盘号
+ ///
+ [SugarColumn(ColumnName = "AssemblyTrayNo")]
+ public string AssemblyTrayNo { get; set; }
+
+ ///
+ /// 拧紧位托盘号
+ ///
+ [SugarColumn(ColumnName = "TightenTrayNo")]
+ public string TightenTrayNo { get; set; }
+
+ ///
+ /// 1 号螺钉拧紧结果(1 = 合格,0 = 不合格)
+ ///
+ [SugarColumn(ColumnName = "Screw1Result")]
+ public string Screw1Result { get; set; }
+
+ ///
+ /// 1 号螺钉扭矩Nm
+ ///
+ [SugarColumn(ColumnName = "Screw1Torque")]
+ public string Screw1Torque { get; set; }
+
+ ///
+ /// 1 号螺钉深度mm
+ ///
+ [SugarColumn(ColumnName = "Screw1Depth")]
+ public string Screw1Depth { get; set; }
+
+ ///
+ /// 1 号螺钉角度°
+ ///
+ [SugarColumn(ColumnName = "Screw1Angle")]
+ public string Screw1Angle { get; set; }
+
+ ///
+ /// 1 号螺钉拧紧时间秒
+ ///
+ [SugarColumn(ColumnName = "Screw1TightenTime")]
+ public string Screw1TightenTime { get; set; }
+
+ ///
+ /// 2 号螺钉拧紧结果(1 = 合格,0 = 不合格)
+ ///
+ [SugarColumn(ColumnName = "Screw2Result")]
+ public string Screw2Result { get; set; }
+
+ ///
+ /// 2 号螺钉扭矩Nm
+ ///
+ [SugarColumn(ColumnName = "Screw2Torque")]
+ public string Screw2Torque { get; set; }
+
+ ///
+ /// 2号螺钉深度mm
+ ///
+ [SugarColumn(ColumnName = "Screw2Depth")]
+ public string Screw2Depth { get; set; }
+
+ ///
+ /// 2号螺钉角度°
+ ///
+ [SugarColumn(ColumnName = "Screw2Angle")]
+ public string Screw2Angle { get; set; }
+
+ ///
+ /// 2 号螺钉拧紧时间秒
+ ///
+ [SugarColumn(ColumnName = "Screw2TightenTime")]
+ public string Screw2TightenTime { get; set; }
+
+ ///
+ /// 3 号螺钉拧紧结果(1 = 合格,0 = 不合格)
+ ///
+ [SugarColumn(ColumnName = "Screw3Result")]
+ public string Screw3Result { get; set; }
+
+ ///
+ /// 3 号螺钉扭矩Nm
+ ///
+ [SugarColumn(ColumnName = "Screw3Torque")]
+ public string Screw3Torque { get; set; }
+
+ ///
+ /// 3 号螺钉深度mm
+ ///
+ [SugarColumn(ColumnName = "Screw3Depth")]
+ public string Screw3Depth { get; set; }
+
+ ///
+ /// 3 号螺钉角度°
+ ///
+ [SugarColumn(ColumnName = "Screw3Angle")]
+ public string Screw3Angle { get; set; }
+
+ ///
+ /// 3号螺钉拧紧时间秒
+ ///
+ [SugarColumn(ColumnName = "Screw3TightenTime")]
+ public string Screw3TightenTime { get; set; }
+
+ ///
+ /// 4号螺钉拧紧结果(1 = 合格,0 = 不合格)
+ ///
+ [SugarColumn(ColumnName = "Screw4Result")]
+ public string Screw4Result { get; set; }
+
+ ///
+ /// 4号螺钉扭矩Nm
+ ///
+ [SugarColumn(ColumnName = "Screw4Torque")]
+ public string Screw4Torque { get; set; }
+
+ ///
+ /// 4号螺钉深度mm
+ ///
+ [SugarColumn(ColumnName = "Screw4Depth")]
+ public string Screw4Depth { get; set; }
+
+ ///
+ /// 4 号螺钉角度°
+ ///
+ [SugarColumn(ColumnName = "Screw4Angle")]
+ public string Screw4Angle { get; set; }
+
+ ///
+ /// 4号螺钉拧紧时间秒
+ ///
+ [SugarColumn(ColumnName = "Screw4TightenTime")]
+ public string Screw4TightenTime { get; set; }
+
+ ///
+ /// 5 号螺钉拧紧结果(1 = 合格,0 = 不合格)
+ ///
+ [SugarColumn(ColumnName = "Screw5Result")]
+ public string Screw5Result { get; set; }
+
+ ///
+ /// 5号螺钉扭矩Nm
+ ///
+ [SugarColumn(ColumnName = "Screw5Torque")]
+ public string Screw5Torque { get; set; }
+
+ ///
+ /// 5号螺钉深度mm
+ ///
+ [SugarColumn(ColumnName = "Screw5Depth")]
+ public string Screw5Depth { get; set; }
+
+ ///
+ /// 5 号螺钉角度°
+ ///
+ [SugarColumn(ColumnName = "Screw5Angle")]
+ public string Screw5Angle { get; set; }
+
+ ///
+ /// 5号螺钉拧紧时间秒
+ ///
+ [SugarColumn(ColumnName = "Screw5TightenTime")]
+ public string Screw5TightenTime { get; set; }
+
+ ///
+ /// 6 号螺钉拧紧结果(1 = 合格,0 = 不合格)
+ ///
+ [SugarColumn(ColumnName = "Screw6Result")]
+ public string Screw6Result { get; set; }
+
+ ///
+ /// 6号螺钉扭矩Nm
+ ///
+ [SugarColumn(ColumnName = "Screw6Torque")]
+ public string Screw6Torque { get; set; }
+
+ ///
+ /// 6 号螺钉深度mm
+ ///
+ [SugarColumn(ColumnName = "Screw6Depth")]
+ public string Screw6Depth { get; set; }
+
+ ///
+ /// 6 号螺钉角度°
+ ///
+ [SugarColumn(ColumnName = "Screw6Angle")]
+ public string Screw6Angle { get; set; }
+
+ ///
+ /// 6号螺钉拧紧时间秒
+ ///
+ [SugarColumn(ColumnName = "Screw6TightenTime")]
+ public string Screw6TightenTime { get; set; }
+
+ ///
+ /// 7号螺钉拧紧结果(1 = 合格,0 = 不合格)
+ ///
+ [SugarColumn(ColumnName = "Screw7Result")]
+ public string Screw7Result { get; set; }
+
+ ///
+ /// 7 号螺钉扭矩Nm
+ ///
+ [SugarColumn(ColumnName = "Screw7Torque")]
+ public string Screw7Torque { get; set; }
+
+ ///
+ /// 7号螺钉深度mm
+ ///
+ [SugarColumn(ColumnName = "Screw7Depth")]
+ public string Screw7Depth { get; set; }
+
+ ///
+ /// 7号螺钉角度°
+ ///
+ [SugarColumn(ColumnName = "Screw7Angle")]
+ public string Screw7Angle { get; set; }
+
+ ///
+ /// 7 号螺钉拧紧时间秒
+ ///
+ [SugarColumn(ColumnName = "Screw7TightenTime")]
+ public string Screw7TightenTime { get; set; }
+
}
}
\ No newline at end of file
diff --git a/RIZO.Admin.WebApi/PLC/Service/PlcService.cs b/RIZO.Admin.WebApi/PLC/Service/PlcService.cs
index 01a60e2..654386c 100644
--- a/RIZO.Admin.WebApi/PLC/Service/PlcService.cs
+++ b/RIZO.Admin.WebApi/PLC/Service/PlcService.cs
@@ -89,10 +89,9 @@ namespace RIZO.Admin.WebApi.PLC.Service
{ "实际产量", "DB1001.DBD1104" }, // DInt
{ "合格数量", "DB1001.DBD1108" }, // DInt
{ "失败数量", "DB1001.DBD1112" }, // DInt
- { "合装工位查询", "DB1001.DBW2000" }, // Int
+ { "合装工位查询请求", "DB1001.DBW2000" }, // Int
{ "合装结果保存请求", "DB1001.DBW2004" }, // Int
{ "拧紧结果保存请求", "DB1001.DBW2006" }, // Int
- { "托盘号", "DB1001.DBW2004" }, // Int
{ "合装位托盘号", "DB1001.DBW2100" }, // Int
{ "拧紧位托盘号", "DB1001.DBW3152" }, // Int
// 2号螺钉
@@ -155,172 +154,6 @@ namespace RIZO.Admin.WebApi.PLC.Service
#region 核心业务方法
- ///
- /// 读取PLC生产数据(优化版:连接池+并发控制+批量读取+异常防护)
- ///
- /// PLC IP地址
- /// 机架号
- /// 槽位号
- /// PLC型号(默认S7-1500)
- /// 读取结果(状态+数据+消息)
- //public async Task<(bool Success, PlcProductionData Data, string Message)> ReadProductionDataAsync(
- // string ip,
- // string plcName,
- // short rack,
- // short slot,
- // CpuType cpuType = CpuType.S71500)
- //{
- // // 1. 强化参数校验(源头避免无效请求)
- // if (string.IsNullOrWhiteSpace(ip))
- // return (false, null, "PLC IP地址不能为空");
- // if (rack < 0 || rack > 10) // 工业场景机架号常规范围
- // return (false, null, $"PLC机架号{rack}无效(有效值0-10)");
- // if (slot < 0 || slot > 4) // 工业场景槽位号常规范围
- // return (false, null, $"PLC槽位号{slot}无效(有效值0-4)");
-
- // Plc plc = null;
- // bool isConnReused = false; // 标记是否复用连接
- // var poolKey = $"{ip}_{rack}_{slot}_{cpuType}"; // 连接池唯一标识
-
- // // 2. 并发控制(防止50台PLC同时访问导致端口/线程耗尽)
- // await _concurrencySemaphore.WaitAsync();
-
- // try
- // {
- // // 3. 连接池复用(核心优化:避免高频创建/销毁连接)
- // if (_plcConnPool.TryGetValue(poolKey, out var poolItem) && poolItem.Client.IsConnected)
- // {
- // plc = poolItem.Client;
- // _plcConnPool.TryUpdate(poolKey, (plc, DateTime.Now), poolItem); // 更新最后使用时间
- // isConnReused = true;
- // }
- // else
- // {
- // // 初始化新连接(保留你的原始逻辑,增加重试)
- // plc = CreatePlcClient(cpuType, ip, rack, slot);
- // // 连接重试(应对临时网络波动)
- // int retryCount = 2;
- // bool isConnected = false;
- // while (retryCount-- > 0 && !isConnected)
- // {
- // try
- // {
- // await OpenPlcConnectionAsync(plc);
- // isConnected = plc.IsConnected;
- // }
- // catch
- // {
- // if (retryCount > 0) await Task.Delay(100); // 重试间隔
- // }
- // }
-
- // if (!isConnected)
- // return (false, null, "PLC连接失败(含2次重试)");
-
- // // 新连接加入池
- // _plcConnPool.TryAdd(poolKey, (plc, DateTime.Now));
- // }
-
- // //先读取查询请求标志,判断是否需要读取生产数据
- // int iQueryRequest = await ReadPlcIntAsync(plc, _plcIntMap["QueryRequest"]);
- // if (iQueryRequest != 1)
- // {
- // return (false, null, "PLC查询请求标志未设置,跳过生产数据读取");
- // }
- // if (plcName == "OP070-1")
- // {
-
-
- // }
- // // 4. 批量并行读取(核心优化:替代串行await,提升效率30%+)
- // // 4.1 字符串字段批量读取
- // var stringTasks = new Dictionary>
- // {
- // { "LineCode", ReadPlcStringAsync(plc, _plcStringMap["LineCode"].Addr, _plcStringMap["LineCode"].Len) },
- // { "ProductCode", ReadPlcStringAsync(plc, _plcStringMap["ProductCode"].Addr, _plcStringMap["ProductCode"].Len) },
- // { "ProductName", ReadPlcStringAsync(plc, _plcStringMap["ProductName"].Addr, _plcStringMap["ProductName"].Len) },
- // { "PartCode", ReadPlcStringAsync(plc, _plcStringMap["PartCode"].Addr, _plcStringMap["PartCode"].Len) },
- // { "PartName", ReadPlcStringAsync(plc, _plcStringMap["PartName"].Addr, _plcStringMap["PartName"].Len) },
- // { "ProcessName", ReadPlcStringAsync(plc, _plcStringMap["ProcessName"].Addr, _plcStringMap["ProcessName"].Len) },
- // { "ParamName", ReadPlcStringAsync(plc, _plcStringMap["ParamName"].Addr, _plcStringMap["ParamName"].Len) },
- // { "ParamValue", ReadPlcStringAsync(plc, _plcStringMap["ParamValue"].Addr, _plcStringMap["ParamValue"].Len) }
- // };
-
- // // 4.2 整数字段批量读取
- // var intTasks = new Dictionary>
- // {
- // { "QualificationFlag", ReadPlcIntAsync(plc, _plcIntMap["QualificationFlag"]) },
- // { "ReworkFlag", ReadPlcIntAsync(plc, _plcIntMap["ReworkFlag"]) },
- // { "AutoManual", ReadPlcIntAsync(plc, _plcIntMap["AutoManual"]) },
- // { "RunStatus", ReadPlcIntAsync(plc, _plcIntMap["RunStatus"]) },
- // { "ProductionCycle", ReadPlcIntAsync(plc, _plcIntMap["ProductionCycle"]) }
- // };
-
- // // 等待所有读取完成(并行执行,减少等待时间)
- // IEnumerable allTasks = stringTasks.Values.Cast()
- // .Concat(intTasks.Values.Cast());
- // await Task.WhenAll(allTasks);
-
- // // 5. 构建数据实体(空值安全处理,单个字段失败不影响整体)
- // var prodData = new PlcProductionData
- // {
- // PlcIp = ip.Trim(),
- // OccurTime = DateTime.Now,
-
- // // 字符串字段(空值兜底)
- // LineCode = await stringTasks["LineCode"] ?? string.Empty,
- // ProductCode = await stringTasks["ProductCode"] ?? string.Empty,
- // ProductName = await stringTasks["ProductName"] ?? string.Empty,
- // PartCode = await stringTasks["PartCode"] ?? string.Empty,
- // PartName = await stringTasks["PartName"] ?? string.Empty,
- // ProcessName = await stringTasks["ProcessName"] ?? string.Empty,
- // ParamName = await stringTasks["ParamName"] ?? string.Empty,
- // ParamValue = await stringTasks["ParamValue"] ?? string.Empty,
-
- // // 整数字段(读取失败返回0,不中断流程)
- // QualificationFlag = (await intTasks["QualificationFlag"]).ToString(),
- // ReworkFlag = (await intTasks["ReworkFlag"]).ToString(),
- // AutoManual = await intTasks["AutoManual"],
- // RunStatus = await intTasks["RunStatus"],
- // ProductionCycle = await intTasks["ProductionCycle"]
- // };
-
- // // 空值兜底(保留你的原始逻辑)
- // prodData.QualificationFlag ??= "0";
- // prodData.ReworkFlag ??= "0";
- // prodData.ProductionCycle ??= 0;
-
- // // 6. 异步保存数据(非阻塞,提升响应速度)
- // _ = Task.Run(() => _plcProductionDataService.AddPlcProductionData(prodData))
- // .ContinueWith(t =>
- // {
- // if (t.IsFaulted)
- // {
- // // 记录保存失败日志(建议替换为ILogger)
- // Console.WriteLine($"PLC({ip})数据保存失败:{t.Exception?.InnerException?.Message}");
- // }
- // });
-
- // var successMsg = isConnReused ? "生产数据读取成功(复用连接)" : "生产数据读取成功(新建连接)";
- // return (true, prodData, successMsg);
- // }
- // catch (Exception ex)
- // {
- // // 精细化异常日志(便于定位具体PLC故障)
- // Console.WriteLine($"PLC({ip})生产数据读取异常:{ex.Message}\n{ex.StackTrace}");
- // return (false, null, $"生产数据读取失败:{ex.Message}");
- // }
- // finally
- // {
- // // 7. 资源安全释放(核心:复用连接不释放,仅新建连接释放;必须释放并发信号量)
- // if (!isConnReused)
- // {
- // ReleasePlcConnection(plc);
- // }
- // _concurrencySemaphore.Release(); // 防止死锁的关键
- // }
- //}
-
///
/// 读取PLC生产数据(优化版:连接池+并发控制+OP070-1/OP080专属适配)
///
@@ -397,8 +230,19 @@ namespace RIZO.Admin.WebApi.PLC.Service
iQueryRequest = await ReadPlcIntAsync(plc, _op070_1IntMap["查询请求"]);
iSaveRequest = await ReadPlcIntAsync(plc, _op070_1IntMap["保存请求"]);
}
- // 无效请求直接返回(避免无谓资源消耗)
- if (iQueryRequest != 1 && iSaveRequest != 1)
+ else if (plcName == "OP080-1")
+ {
+ iQueryRequest = await ReadPlcIntAsync(plc, _op080_1IntMap["合装工位查询请求"]);
+ //考虑一条数据更新两次,还是生成两条数据
+ int iSaveRequest1 = await ReadPlcIntAsync(plc, _op080_1IntMap["合装结果保存请求"]);
+ int iSaveRequest2 = await ReadPlcIntAsync(plc, _op080_1IntMap["拧紧结果保存请求"]);
+ if (iSaveRequest1 == 1 || iSaveRequest2 == 1)
+ {
+ iSaveRequest = 1;
+ }
+
+ } // 无效请求直接返回(避免无谓资源消耗)
+ if (iQueryRequest != 1 && iSaveRequest != 1)
{
return (false, null, $"");
}
@@ -415,9 +259,9 @@ namespace RIZO.Admin.WebApi.PLC.Service
{
prodData = await ReadOP070_1DataAsync(plc, ip, plcName);
}
- else if (plcName == "OP080")
+ else if (plcName == "OP080-1" || plcName == "OP080-2")
{
- //prodData = await ReadOP080DataAsync(plc, ip);
+ prodData = await ReadOP080_1DataAsync(plc, ip, plcName);
}
// 6. 统一空值兜底(避免空引用)
@@ -462,6 +306,11 @@ namespace RIZO.Admin.WebApi.PLC.Service
}
}
+ private async Task ReadOP080_1DataAsync(Plc plc, string ip, string plcName)
+ {
+ throw new NotImplementedException();
+ }
+
#region 工位专属读取方法
///
/// OP070-1数据读取
@@ -548,8 +397,8 @@ namespace RIZO.Admin.WebApi.PLC.Service
SN2 = sn2 ?? string.Empty,
QualificationFlag = qualificationFlag,
ReworkFlag = reworkFlag,
- AutoManual = machineModel,
- RunStatus = runStatus,
+ Automanual = machineModel,
+ Runstatus = runStatus,
OnlineStatus = onlineStatusDesc,
//ByPass = byPassDesc,
ProduceModel = produceModelDesc,