Commit 39059f5b LN

1

1 个父辈 44252d09
using OnlineStore.Common; using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary; using OnlineStore.LoadCSVLibrary;
using System; using System;
using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
...@@ -14,10 +15,9 @@ namespace OnlineStore.DeviceLibrary ...@@ -14,10 +15,9 @@ namespace OnlineStore.DeviceLibrary
public bool IsDebug = false; public bool IsDebug = false;
public bool UseAxis = false; public bool UseAxis = false;
public List<InOutParam> waitOutStoreList = new List<InOutParam>(); public ConcurrentQueue<InOutParam> waitOutStoreList = new ConcurrentQueue<InOutParam>();
public List<InOutParam> waitInStoreList = new List<InOutParam>(); public List<InOutParam> waitInStoreList = new List<InOutParam>();
internal object waitInListLock = ""; internal object waitInListLock = "";
internal object waitOutListLock = "";
/// <summary> /// <summary>
///移栽装置后面分为两条移动线 ///移栽装置后面分为两条移动线
/// </summary> /// </summary>
......
...@@ -231,7 +231,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -231,7 +231,7 @@ namespace OnlineStore.DeviceLibrary
} }
private void RHomeOp() private void RHomeOp()
{ {
TrayManager.SidesWayStateMap = new Dictionary<int, int>(); TrayManager.SidesWayStateMap = new System.Collections.Concurrent.ConcurrentDictionary<int, int>() ;
alarmType = LineAlarmType.None; alarmType = LineAlarmType.None;
mainTimer.Enabled = false; mainTimer.Enabled = false;
IoCheckTimer.Enabled = false; IoCheckTimer.Enabled = false;
......
...@@ -235,15 +235,9 @@ namespace OnlineStore.DeviceLibrary ...@@ -235,15 +235,9 @@ namespace OnlineStore.DeviceLibrary
if (IsDebug.Equals(false) && MoveInfo.MoveType.Equals(LineMoveType.None) && runStatus.Equals(LineRunStatus.Runing)) if (IsDebug.Equals(false) && MoveInfo.MoveType.Equals(LineMoveType.None) && runStatus.Equals(LineRunStatus.Runing))
{ {
InOutParam waitOutParma = null; InOutParam waitOutParma = null;
lock (waitOutListLock) bool ok = waitOutStoreList.TryDequeue(out waitOutParma);
{
if (waitOutStoreList.Count > 0) if (ok)
{
waitOutParma = waitOutStoreList[0];
waitOutStoreList.RemoveAt(0);
}
}
if (waitOutParma != null)
{ {
LogUtil.info(Name + "开始 执行排队中的出库【" + waitOutParma.ToStr() + "】"); LogUtil.info(Name + "开始 执行排队中的出库【" + waitOutParma.ToStr() + "】");
//出库 //出库
...@@ -258,8 +252,6 @@ namespace OnlineStore.DeviceLibrary ...@@ -258,8 +252,6 @@ namespace OnlineStore.DeviceLibrary
} }
public void AddWaitOutInfo(InOutParam param) public void AddWaitOutInfo(InOutParam param)
{ {
lock (waitOutListLock)
{
//判断是否已经加入,不重复加 //判断是否已经加入,不重复加
List<InOutParam> paramList = (from m in waitOutStoreList where m.PosId.Equals(param.PosId) select m).ToList<InOutParam>(); List<InOutParam> paramList = (from m in waitOutStoreList where m.PosId.Equals(param.PosId) select m).ToList<InOutParam>();
if (paramList.Count > 0) if (paramList.Count > 0)
...@@ -268,8 +260,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -268,8 +260,7 @@ namespace OnlineStore.DeviceLibrary
} }
else else
{ {
waitOutStoreList.Add(param); waitOutStoreList.Enqueue(param);
}
} }
} }
......
using OnlineStore.Common; using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary; using OnlineStore.LoadCSVLibrary;
using System; using System;
using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
...@@ -17,8 +18,8 @@ namespace OnlineStore.DeviceLibrary ...@@ -17,8 +18,8 @@ namespace OnlineStore.DeviceLibrary
/// <summary> /// <summary>
/// 放在公共地方,方便存取,夹料编码盘列表,key=编码(1-6),value=是否有物品,true=有物品 /// 放在公共地方,方便存取,夹料编码盘列表,key=编码(1-6),value=是否有物品,true=有物品
/// </summary> /// </summary>
private static Dictionary<int, TrayInfo> fixtureCodeFullMap = new Dictionary<int, TrayInfo>(); private static ConcurrentDictionary<int, TrayInfo> fixtureCodeFullMap = new ConcurrentDictionary<int, TrayInfo>();
private static object fixtureMapLock = "";
/// <summary> /// <summary>
/// 流水线需要的空盘数量 /// 流水线需要的空盘数量
/// </summary> /// </summary>
...@@ -50,8 +51,6 @@ namespace OnlineStore.DeviceLibrary ...@@ -50,8 +51,6 @@ namespace OnlineStore.DeviceLibrary
{ {
Interlocked.Decrement(ref LineNeedEmptyTrayNum); Interlocked.Decrement(ref LineNeedEmptyTrayNum);
} }
/// <summary> /// <summary>
/// 对应的盘号(1-6)是否有料盘 /// 对应的盘号(1-6)是否有料盘
/// </summary> /// </summary>
...@@ -59,32 +58,24 @@ namespace OnlineStore.DeviceLibrary ...@@ -59,32 +58,24 @@ namespace OnlineStore.DeviceLibrary
/// <returns>盘上是否有料盘</returns> /// <returns>盘上是否有料盘</returns>
internal static bool TrayIsFull(int trayNum) internal static bool TrayIsFull(int trayNum)
{ {
lock (fixtureMapLock)
{
if (fixtureCodeFullMap.ContainsKey(trayNum)) if (fixtureCodeFullMap.ContainsKey(trayNum))
{ {
return fixtureCodeFullMap[trayNum].IsFull; return fixtureCodeFullMap[trayNum].IsFull;
} }
}
return false; return false;
} }
internal static TrayInfo GetTrayInfo(int trayNum) internal static TrayInfo GetTrayInfo(int trayNum)
{ {
lock (fixtureMapLock)
{
if (fixtureCodeFullMap.ContainsKey(trayNum)) if (fixtureCodeFullMap.ContainsKey(trayNum))
{ {
return fixtureCodeFullMap[trayNum]; return fixtureCodeFullMap[trayNum];
} }
}
return null; return null;
} }
internal static void UpdateTrayInfo(int trayNum, bool isFull=false, int inOrOut=0, string wareCode = "", string posId = "", int plateH = 0, int plateW = 0) internal static void UpdateTrayInfo(int trayNum, bool isFull = false, int inOrOut = 0, string wareCode = "", string posId = "", int plateH = 0, int plateW = 0)
{
lock (fixtureMapLock)
{ {
if (fixtureCodeFullMap.ContainsKey(trayNum)) if (fixtureCodeFullMap.ContainsKey(trayNum))
{ {
...@@ -95,49 +86,38 @@ namespace OnlineStore.DeviceLibrary ...@@ -95,49 +86,38 @@ namespace OnlineStore.DeviceLibrary
fixtureCodeFullMap[trayNum].PosId = posId; fixtureCodeFullMap[trayNum].PosId = posId;
fixtureCodeFullMap[trayNum].PlateH = plateH; fixtureCodeFullMap[trayNum].PlateH = plateH;
fixtureCodeFullMap[trayNum].PlateW = plateW; fixtureCodeFullMap[trayNum].PlateW = plateW;
} }
else else
{ {
TrayInfo fixture = new TrayInfo(trayNum, isFull, inOrOut, wareCode, posId, plateH, plateW); TrayInfo fixture = new TrayInfo(trayNum, isFull, inOrOut, wareCode, posId, plateH, plateW);
fixtureCodeFullMap.Add(trayNum, fixture); fixtureCodeFullMap.TryAdd(trayNum, fixture);
}
} }
} }
internal static void UpdateTrayCode(int trayNum, string wareCode = "" ) internal static void UpdateTrayCode(int trayNum, string wareCode = "")
{
LogUtil.info( "更新托盘【" + trayNum + "】的条码为【" + wareCode + "】");
lock (fixtureMapLock)
{ {
LogUtil.info("更新托盘【" + trayNum + "】的条码为【" + wareCode + "】");
if (fixtureCodeFullMap.ContainsKey(trayNum)) if (fixtureCodeFullMap.ContainsKey(trayNum))
{ {
fixtureCodeFullMap[trayNum].WareCode = wareCode; fixtureCodeFullMap[trayNum].WareCode = wareCode;
}
} }
} }
internal static void UpdateInStoreNG(int trayNum, bool isNg = false) internal static void UpdateInStoreNG(int trayNum, bool isNg = false)
{ {
LogUtil.info("更新托盘【" + trayNum + "】InStoreNG=【" + isNg + "】"); LogUtil.info("更新托盘【" + trayNum + "】InStoreNG=【" + isNg + "】");
lock (fixtureMapLock)
{
if (fixtureCodeFullMap.ContainsKey(trayNum)) if (fixtureCodeFullMap.ContainsKey(trayNum))
{ {
fixtureCodeFullMap[trayNum].InStoreNG = isNg; fixtureCodeFullMap[trayNum].InStoreNG = isNg;
}
} }
} }
internal static void UpdateTrayPosId(int trayNum, string PosId = "") internal static void UpdateTrayPosId(int trayNum, string PosId = "")
{ {
lock (fixtureMapLock)
{
if (fixtureCodeFullMap.ContainsKey(trayNum)) if (fixtureCodeFullMap.ContainsKey(trayNum))
{ {
fixtureCodeFullMap[trayNum].PosId = PosId; fixtureCodeFullMap[trayNum].PosId = PosId;
} }
}
} }
/// <summary> /// <summary>
/// 是否还有有料仓的盘 /// 是否还有有料仓的盘
...@@ -204,9 +184,9 @@ namespace OnlineStore.DeviceLibrary ...@@ -204,9 +184,9 @@ namespace OnlineStore.DeviceLibrary
{ {
if (data.RFType.Equals("E")) if (data.RFType.Equals("E"))
{ {
return data.Num; return data.Num;
} else }
else
{ {
LogUtil.error("读取托盘RFID[" + subType + "][" + ip + "]的数据出错:" + data.ToStr()); LogUtil.error("读取托盘RFID[" + subType + "][" + ip + "]的数据出错:" + data.ToStr());
} }
...@@ -235,7 +215,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -235,7 +215,7 @@ namespace OnlineStore.DeviceLibrary
public static string GetRFIP(int subType, int rtType = 0) public static string GetRFIP(int subType, int rtType = 0)
{ {
string ip = ""; string ip = "";
string rtName = DeviceConfig.RFIP_Str +"_"+ subType.ToString().PadLeft(3, '0'); string rtName = DeviceConfig.RFIP_Str + "_" + subType.ToString().PadLeft(3, '0');
if (rtType > 0) if (rtType > 0)
{ {
rtName += "-" + rtType.ToString(); rtName += "-" + rtType.ToString();
...@@ -249,8 +229,8 @@ namespace OnlineStore.DeviceLibrary ...@@ -249,8 +229,8 @@ namespace OnlineStore.DeviceLibrary
#region 横移状态缓存 #region 横移状态缓存
internal static Dictionary<int, int> SidesWayStateMap = new Dictionary<int, int>(); internal static ConcurrentDictionary<int, int> SidesWayStateMap = new ConcurrentDictionary<int, int>();
internal static object swMapLock = "";
internal static bool CanMoveSidesWay(int swNum) internal static bool CanMoveSidesWay(int swNum)
{ {
if (SidesWayStateMap.ContainsKey(swNum)) if (SidesWayStateMap.ContainsKey(swNum))
...@@ -274,22 +254,20 @@ namespace OnlineStore.DeviceLibrary ...@@ -274,22 +254,20 @@ namespace OnlineStore.DeviceLibrary
/// </summary> /// </summary>
/// <param name="swNum">横移编号</param> /// <param name="swNum">横移编号</param>
/// <param name="value">0=未处理等待中,1=托盘处理完成,可处理横移,2=托盘检测处理中</param> /// <param name="value">0=未处理等待中,1=托盘处理完成,可处理横移,2=托盘检测处理中</param>
internal static void UpdateSWState(int swNum,int value) internal static void UpdateSWState(int swNum, int value)
{ {
if (swNum <= 0) if (swNum <= 0)
{ {
return; return;
} }
lock (swMapLock)
{
if (SidesWayStateMap.ContainsKey(swNum)) if (SidesWayStateMap.ContainsKey(swNum))
{ {
SidesWayStateMap[swNum] = value; SidesWayStateMap[swNum] = value;
} }
else else
{ {
SidesWayStateMap.Add(swNum, value); SidesWayStateMap.TryAdd(swNum, value);
}
} }
} }
#endregion #endregion
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!