diff --git a/Learun.Application.Web/AppApi/IOModuleApiController.cs b/Learun.Application.Web/AppApi/IOModuleApiController.cs
index 95e49413..8582a605 100644
--- a/Learun.Application.Web/AppApi/IOModuleApiController.cs
+++ b/Learun.Application.Web/AppApi/IOModuleApiController.cs
@@ -1,4 +1,5 @@
using DocumentFormat.OpenXml.Drawing.Spreadsheet;
+using DocumentFormat.OpenXml.Spreadsheet;
using Learun.Application.Organization;
using Learun.Application.TwoDevelopment.ZZDT_EC;
using Learun.Application.TwoDevelopment.ZZDT_EC.Frame;
@@ -47,7 +48,7 @@ namespace Learun.Application.Web.AppApi
///
- /// 找到某一个预分配箱子 附近的某一个箱子
+ /// 找到某一个预分配箱子 附近的某一个箱子。且io类型能匹配上
///
///
///
@@ -55,9 +56,10 @@ namespace Learun.Application.Web.AppApi
/// Digital,4-20mA,10v,pt100,pulse
///
- private ec_PanelEntity FindPanelNearby(string curPanelId, List frameLists, List allPanel,
+ private ec_PanelEntity FindPanelNearby(ec_CableEntity cableObj, List frameLists, List allPanel,
Dictionary> allPanelProps, string IOTypeOnCable)
{
+ var curPanelId = cableObj.PanelID;
double GetPanelXYDistance2Target(string panelId, double targetX, double targetY)
{
var nearPanel = allPanel.FirstOrDefault(x => x.PanelID == panelId);
@@ -88,7 +90,7 @@ namespace Learun.Application.Web.AppApi
return -1;//无效的x off导致的
}
if (double.TryParse(nearPanelProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_YOff)?.PropertyValue,
- , out double YOffValue))
+ out double YOffValue))
{
}
@@ -129,7 +131,7 @@ namespace Learun.Application.Web.AppApi
return null;//无效的x off导致的
}
if (double.TryParse(curPanelProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_YOff)?.PropertyValue,
-, out double AssignPanelYValue))
+ out double AssignPanelYValue))
{
}
@@ -141,33 +143,49 @@ namespace Learun.Application.Web.AppApi
foreach (var panel in allPanel.Where(x => x.PanelID != curPanelId))
{
#region io
+ var IOMatched = true;
+ var IOsOnPanel = panel.allowedIOTypes.Split(',').ToList();
+ //剩下的感觉都可以是set上的参数?
+ foreach (var set in cableObj.Sets)
+ {
+ #region 判断下io匹配程度
+ var setNew = ec_CableBLL.SetIOMatchPanel(cableObj.PreAssignIOType, set, IOsOnPanel);
- #endregion
- #region distance
- //拿到每一个的xy属性
- //然后和预分配箱子进行对比
- var DISTANCE = GetPanelXYDistance2Target(panel.PanelID, AssignPanelXValue + AssignPanelXOffValue, AssignPanelYValue);
-
- if (0.1 == minDistance && DISTANCE > 0)
- {
- minDistance = DISTANCE; nearestPanel = panel;
- }
- else if (DISTANCE < minDistance && DISTANCE > 0)
- {
- minDistance = DISTANCE; nearestPanel = panel;
+ if (IOsOnPanel.Contains(setNew.IOType.ToString()))
+ {
+ setNew.IOTypeMatch = true;
+
+ }
+ else
+ {
+ setNew.IOTypeMatch = false; IOMatched = false;
+ //不匹配
+ break;
+ }
+ #endregion
}
#endregion
+ if (IOMatched)
+ {
+ //如果io匹配了,再找附近的
+ #region distance
+ //拿到每一个的xy属性
+ //然后和预分配箱子进行对比
+ var DISTANCE = GetPanelXYDistance2Target(panel.PanelID, AssignPanelXValue + AssignPanelXOffValue, AssignPanelYValue);
- }
- //根据电缆上的信号,去找匹配的排序第一位(已经按照距离排序过)的箱子
- switch (IOTypeOnCable.ToUpper())
- {
- case "DIGITAL":
- //其他就近箱子的 allowIOTypes里有DI DO
- break;
- default:
- break;
- }
+ if (0.1 == minDistance && DISTANCE > 0)
+ {
+ minDistance = DISTANCE; nearestPanel = panel;
+ }
+ else if (DISTANCE < minDistance && DISTANCE > 0)
+ {
+ minDistance = DISTANCE; nearestPanel = panel;
+ }
+ #endregion
+ }
+
+
+ }
return nearestPanel;
}
@@ -421,7 +439,7 @@ namespace Learun.Application.Web.AppApi
bool nearbyFound = false;
foreach (var cable in cablesNotMatchIO)
{
- var nearPanel = FindPanelNearby(cable.PanelID, allFrames, allPanel, allPanelProp, cable.PreAssignIOType);
+ var nearPanel = FindPanelNearby(cable, allFrames, allPanel, allPanelProp, cable.PreAssignIOType);
if (nearPanel == null)
{
nearbyFound = false;
diff --git a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_cable/ec_CableBLL.cs b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_cable/ec_CableBLL.cs
index 46cc3663..b79e078b 100644
--- a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_cable/ec_CableBLL.cs
+++ b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_cable/ec_CableBLL.cs
@@ -1,4 +1,5 @@
using DocumentFormat.OpenXml.Drawing.Spreadsheet;
+using DocumentFormat.OpenXml.Spreadsheet;
using Learun.Util;
using Learun.Util.SqlSugar;
using SqlSugar;
@@ -7,6 +8,7 @@ using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using System.Linq;
+using System.Windows;
namespace Learun.Application.TwoDevelopment.ZZDT_EC
{
@@ -314,70 +316,27 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC
foreach (var set in sets)
{
#region 判断下io匹配程度
- if (set.PreAssignInOrOut == GlobalEnum.inOrOut.输入.ToString() && cable.PreAssignIOType.ToLower() == "digital")
+ var setNew = SetIOMatchPanel(cable.PreAssignIOType, set, IOsOnPanel);
+
+ if (IOsOnPanel.Contains(setNew.IOType.ToString()))
{
- set.IOType = GlobalEnum.IOType.DI;
- }
- else if (set.PreAssignInOrOut == GlobalEnum.inOrOut.输出.ToString() && cable.PreAssignIOType.ToLower() == "digital")
- {
- set.IOType = GlobalEnum.IOType.DO;
- }
- else if (set.PreAssignInOrOut == GlobalEnum.inOrOut.输入.ToString() && cable.PreAssignIOType == "4~20mA")
- {
- set.IOType = GlobalEnum.IOType.AI;
- }
- else if (set.PreAssignInOrOut == GlobalEnum.inOrOut.输出.ToString() && cable.PreAssignIOType == "4~20mA")
- {
- set.IOType = GlobalEnum.IOType.AO;
- }
- else if (cable.PreAssignIOType == "10v")
- {
- set.IOType = GlobalEnum.IOType.TenVolt;
- }
- else if (cable.PreAssignIOType == GlobalEnum.signalType.PT100.ToString())
- {
- set.IOType = GlobalEnum.IOType.PT100;
- }
- else if (cable.PreAssignIOType.ToUpper() == GlobalEnum.signalType.PULSE.ToString())
- {
- set.IOType = GlobalEnum.IOType.PULSE;
- }
- else if (cable.PreAssignIOType == GlobalEnum.signalType.PT100.ToString())
- {
- set.IOType = GlobalEnum.IOType.PT100;
- }
- //下面是通讯的
- else
- {
-
- }
-
- if (IOsOnPanel.Contains(set.IOType.ToString()))
- {
- set.IOTypeMatch = true;
+ setNew.IOTypeMatch = true;
}
else
{
- set.IOTypeMatch = false;
- cable.IOTypesNotMatchedList.Add(set.IOType.ToString());//从电缆上就能知道哪些io是匹配补上的
+ setNew.IOTypeMatch = false;
+ cable.IOTypesNotMatchedList.Add(setNew.IOType.ToString());//从电缆上就能知道哪些io是匹配补上的
}
#endregion
- var wires = Wires.Where(x => x.CableSetID == set.CableSetID);
- set.Wires = wires.ToList();
+ var wires = Wires.Where(x => x.CableSetID == setNew.CableSetID);
+ setNew.Wires = wires.ToList();
+ cable.Sets.Add(setNew);
}
- cable.Sets = sets;
- //if (cable.Sets.Any(x => !x.IOTypeMatch))
- //{
- // cable.IOTypeMatch = true;
- //}
- //else
- //{
- // cable.IOTypeMatch = false;
- //}
+ //cable.Sets = sets;
}
- //分组
+ //排序
preAssignedCables = preAssignedCables.OrderBy(x => x.PreAssignIOType).ToList();
@@ -397,7 +356,59 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC
else { ec_CableService.DeleteEntity(ProjectId, CableID); }
}
+ ///
+ /// 预分配的电缆上的io,是否和电缆上的io能匹配
+ ///
+ ///
+ public static ec_CableSetEntity SetIOMatchPanel(string signalOnCable, ec_CableSetEntity set, List IOsOnPanel)
+ {
+ //var IOsOnPanel = panelObj.allowedIOTypes.Split(',').ToList();
+ //剩下的感觉都可以是set上的参数?
+
+
+ #region 判断下io匹配程度
+ if (set.PreAssignInOrOut == GlobalEnum.inOrOut.输入.ToString() && signalOnCable.ToLower() == "digital")
+ {
+ set.IOType = GlobalEnum.IOType.DI;
+ }
+ else if (set.PreAssignInOrOut == GlobalEnum.inOrOut.输出.ToString() && signalOnCable.ToLower() == "digital")
+ {
+ set.IOType = GlobalEnum.IOType.DO;
+ }
+ else if (set.PreAssignInOrOut == GlobalEnum.inOrOut.输入.ToString() && signalOnCable == "4~20mA")
+ {
+ set.IOType = GlobalEnum.IOType.AI;
+ }
+ else if (set.PreAssignInOrOut == GlobalEnum.inOrOut.输出.ToString() && signalOnCable == "4~20mA")
+ {
+ set.IOType = GlobalEnum.IOType.AO;
+ }
+ else if (signalOnCable == "10v")
+ {
+ set.IOType = GlobalEnum.IOType.TenVolt;
+ }
+ else if (signalOnCable == GlobalEnum.signalType.PT100.ToString())
+ {
+ set.IOType = GlobalEnum.IOType.PT100;
+ }
+ else if (signalOnCable.ToUpper() == GlobalEnum.signalType.PULSE.ToString())
+ {
+ set.IOType = GlobalEnum.IOType.PULSE;
+ }
+ else if (signalOnCable == GlobalEnum.signalType.PT100.ToString())
+ {
+ set.IOType = GlobalEnum.IOType.PT100;
+ }
+ //下面是通讯的
+ else
+ {
+ }
+
+ #endregion
+
+ return set;
+ }
///
/// 保存实体数据(新增、修改)
/// 主键
diff --git a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_cable/ec_CableEntity.cs b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_cable/ec_CableEntity.cs
index bea6c0f0..f9bf1f49 100644
--- a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_cable/ec_CableEntity.cs
+++ b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_cable/ec_CableEntity.cs
@@ -147,7 +147,8 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC
///
- /// From连接处的工程位号信息。同时,也表达下预分配电缆panelid对应的柜子信息。
+ /// From连接处的工程位号信息。
+ /// 同时,也表达下预分配电缆panelid对应的柜子信息。
///
[SugarColumn(IsIgnore = true)]
public ec_PanelEntity ToPanel { set; get; }