From bf755562a82baa070c77b5aaffd8d6a1310438c7 Mon Sep 17 00:00:00 2001
From: hwh <332078369@qq.com>
Date: 星期二, 27 八月 2024 08:24:36 +0800
Subject: [PATCH] PLC堆垛机出库任务
---
Admin.NET/WCS.Application/PLC/PLCService.cs | 291 ++++++++++++++++++++++++++++++++++++++++--------
Admin.NET/WCS.Application/PLC/PLCTaskAction.cs | 9
Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceDto.cs | 1
3 files changed, 246 insertions(+), 55 deletions(-)
diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs
index ea2a5ea..b8210fa 100644
--- a/Admin.NET/WCS.Application/PLC/PLCService.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -1,75 +1,264 @@
-锘�
+锘縰sing Flurl.Util;
+using Furion.DatabaseAccessor;
+using Furion.Logging;
using IoTClient;
+using StackExchange.Redis;
+using System.Data;
namespace WCS.Application;
public static class PLCService
{
+ private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId);
public static void OnChangeEvent(object sender, EventArgs e)
{
- var mod = sender as WcsDeviceDto;
- Console.WriteLine("PLC鍊间负" + mod.Value);
- switch (mod.Type)
+ try
{
- case PLCTypeEnum.StackingMachine:
- //鍐欐娴嬭瘯璇籹tring
- var (res, val) = mod.PLCUtil.GetPlcDBValue(PLCDataTypeEnum.String, "DB100", "64");
- Console.WriteLine("DB100.64----" + val);
- //娴嬭瘯鎵归噺璇诲彇
- Dictionary<string, PLCDataTypeEnum> listaddress = new Dictionary<string, PLCDataTypeEnum>();
- foreach (var modStation in mod.listStation)
+ var mod = sender as WcsDeviceDto;
+ Console.WriteLine("PLC鍊间负" + mod.Value);
+ switch (mod.Type)
+ {
+ case PLCTypeEnum.StackingMachine:
+ StackingMachine(mod);
+ break;
+ case PLCTypeEnum.ConveyorLine:
+ ConveyorLine(mod);
+ break;
+ case PLCTypeEnum.AGV:
+ AGV(mod);
+ break;
+ case PLCTypeEnum.PalletMachine:
+ PalletMachine(mod);
+ break;
+ default:
+ break;
+ }
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex.Message, ex);
+ }
+ }
+ /// <summary>
+ /// 璺烘満涓氬姟澶勭悊
+ /// </summary>
+ /// <param name="modDevice"></param>
+ private static void StackingMachine(WcsDeviceDto modDevice)
+ {
+ var plcConn = modDevice.PLCUtil;
+ switch (modDevice.ToString())
+ {
+ case "820":
+ var modTask = _db.Queryable<WcsTask>().First(s => s.Status == TaskStatusEnum.Wait && s.TaskType == TaskTypeEnum.Out && s.StartRoadway == modDevice.StationNum);
+ if (modTask == null)
{
- listaddress.Add(modStation.PlcPos, modStation.PosType.Value);
+ break;
}
- var result = mod.PLCUtil.GetPlcBatchDBValue(listaddress);
- if (result.Value.Count > 0)
+ var modTaskMonitor = new WcsTaskMonitor()
{
- foreach (var value in result.Value)
+ TaskNo = modTask.TaskNo,
+ StartLocat = modTask.StartLocate,
+ EndLocat = modTask.EndLocate,
+ PalletNo = modTask.PalletNo,
+ };
+ // 鏍规嵁璺烘満鍙风‘璁ゆ斁璐у伐浣�
+ string outStationNum = "0";
+ string endRow = "", endColumn = "", endStorey = "";
+ switch (modDevice.StationNum)
+ {
+ case "R01":
+ outStationNum = "11";
+ endRow = "1";
+ endColumn = "100";
+ endStorey = "1";
+ break;
+ case "R02":
+ outStationNum = "7";
+ endRow = "1";
+ endColumn = "100";
+ endStorey = "1";
+ break;
+ default: break;
+ }
+ var modD = modDevice.listDevice.FirstOrDefault();
+ if (modD == null)
+ {
+ Log.Error($"IP{modDevice.PlcId}.璁惧id锛歿modDevice.Id}缂哄皯宸ヤ綅绾у埆璁惧淇℃伅");
+ break;
+ }
+ var (result, value) = plcConn.GetPlcDBValue(modD.PosType.Value, modD.DbNumber, modD.PlcPos);
+ if (result.IsSucceed)
+ {
+ if (value == 120)// 鏀捐揣宸ヤ綅绌洪棽 鍙斁璐�
{
- Console.WriteLine("鍦板潃" + value.Key + "----鍊�" + value, value);
+ if (int.Parse(outStationNum) > 0)
+ {
+ var row = int.Parse(modTaskMonitor.StartLocat.Substring(0, 2)).ToString();
+ var column = int.Parse(modTaskMonitor.StartLocat.Substring(2, 2)).ToString();
+ var layer = int.Parse(modTaskMonitor.StartLocat.Substring(4, 2)).ToString();
+ var deep = int.Parse(modTaskMonitor.StartLocat.Substring(6, 2)).ToString();
+ if (int.Parse(row) > 2) //澶т簬4
+ {
+ row = (int.Parse(row) - 2).ToString();
+ }
+ else
+ {
+ // 璧峰鍌ㄤ綅鍦板潃涓虹┖锛岃烦杩� 鍐欏叆浠诲姟鏄庣粏琛�
+ modTaskMonitor.StartLocat = "";
+ modTaskMonitor.InteractiveMsg = "璧峰鍌ㄤ綅涓虹┖!";
+
+ _db.Insertable(modTaskMonitor).ExecuteCommand();
+
+ // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈�
+ //if (TaskAction.refresh)
+ //{
+ // wSChat.AlarmInformation("1");
+ //}
+ break;
+ }
+ //缁橮LC鍐欏叆浠诲姟鏁版嵁
+ var listResult = new List<Result>();
+ //浠诲姟鍙�
+ var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "TaskNo");
+ listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType.Value, modDevice.DbNumber, modPosTask.PlcPos, modTaskMonitor.TaskNo));
+ //鎵樼洏鍙�
+ var modPosPalletNo = modDevice.listStation.FirstOrDefault(s => s.Text == "PalletNo");
+ listResult.Add(plcConn.SetPlcDBValue(modPosPalletNo.PosType.Value, modDevice.DbNumber, modPosPalletNo.PlcPos, modTaskMonitor.PalletNo));
+ //璧峰鎺�
+ var modPosRow = modDevice.listStation.FirstOrDefault(s => s.Text == "StartRow");
+ listResult.Add(plcConn.SetPlcDBValue(modPosRow.PosType.Value, modDevice.DbNumber, modPosRow.PlcPos, row));
+ // 璧峰鍒�
+ var modPosColumn = modDevice.listStation.FirstOrDefault(s => s.Text == "StartColumn");
+ listResult.Add(plcConn.SetPlcDBValue(modPosColumn.PosType.Value, modDevice.DbNumber, modPosColumn.PlcPos, column));
+ // 璧峰灞�
+ var modPosStorey = modDevice.listStation.FirstOrDefault(s => s.Text == "StartLayer");
+ listResult.Add(plcConn.SetPlcDBValue(modPosStorey.PosType.Value, modDevice.DbNumber, modPosStorey.PlcPos, layer));
+
+ // 鐩爣鏀捐揣宸ヤ綅
+ var modPosEndRow = modDevice.listStation.FirstOrDefault(s => s.Text == "EndRow");
+ listResult.Add(plcConn.SetPlcDBValue(modPosEndRow.PosType.Value, modDevice.DbNumber, modPosEndRow.PlcPos, endRow));
+ var modPosEndColumn = modDevice.listStation.FirstOrDefault(s => s.Text == "EndColumn");
+ listResult.Add(plcConn.SetPlcDBValue(modPosEndColumn.PosType.Value, modDevice.DbNumber, modPosEndColumn.PlcPos, endColumn));
+ var modPosEndStorey = modDevice.listStation.FirstOrDefault(s => s.Text == "EndLayer");
+ listResult.Add(plcConn.SetPlcDBValue(modPosEndStorey.PosType.Value, modDevice.DbNumber, modPosEndStorey.PlcPos, endColumn));
+ //鍏ㄩ儴鍐欏叆鎴愬姛
+ if (listResult.All(s => s.IsSucceed))
+ {
+ // 鍐欏叆璺烘満浠诲姟涓嬪彂瀹屾垚
+ plcConn.SetPlcDBValue(modDevice.PosType.Value, modDevice.DbNumber, modDevice.WcsPos, "10");
+
+ // 灏嗗嚭搴撲换鍔″緟鎵ц鏀逛负姝e湪鎵ц
+ _db.Updateable<WcsTask>()
+ .SetColumns(s => s.FinishDate == DateTime.Now)
+ .SetColumns(s => s.Status == TaskStatusEnum.Doing)
+ .SetColumns(s => s.Levels == 2)
+ .Where(s => s.Id == modTask.Id)
+ .ExecuteCommand();
+ var modInsertTaskMonitor = new WcsTaskMonitor()
+ {
+ TaskNo = modTask.TaskNo,
+ PlcId = modDevice.Id,
+ PlcName = modDevice.Text,
+ InteractiveMsg = $"鍐欏叆鎸囦护锛歿modTask.StartLocate}鍌ㄤ綅====銆媨outStationNum}宸ヤ綅",
+ PalletNo = modTask.PalletNo,
+ Status = TaskStatusEnum.Complete,
+ StartLocat = modTask.StartLocate,
+ EndLocat = outStationNum,
+ };
+ _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
+ // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈�
+ //if (TaskAction.refresh)
+ //{
+ // wSChat.AlarmInformation("1");
+ //}
+ //淇敼led灞忎俊鎭�
+ //LedDisplay(modDevice.LedIP, "宸ヤ綅:" + modTask.EndLocate, "鍑哄簱涓� " + $"鍌ㄤ綅鍦板潃锛歿modTask.StartLocate}", "鎵樼洏鍙�:" + modTask.PalletNo);
+ }
+ }
}
}
- if (!result.IsSucceed)
+ else
{
- foreach (var err in result.ErrList)
- {
- Console.WriteLine(err);
- }
- if (result.Value.Count > 0)//鏈夐敊璇殑涔熸湁鎴愬姛鐨�
- {
-
- }
+ Log.Error(string.Join(',', result.ErrList));
}
- if (mod.Value == 820)
- {
- //娴嬭瘯鍐欏叆830
- //var result = mod.PLCUtil.SetPlcDBValue(mod.PosType.Value, mod.DbNumber, mod.PlcPos, "830");
- ////鍐欏叆鏄惁鎴愬姛
- //if (result.IsSucceed)
- //{
-
- //}
- }
- else if (mod.Value == 840)
- {
-
- }
- else if (mod.Value == 860)
- {
-
- }
- break;
- case PLCTypeEnum.ConveyorLine:
-
- break;
- case PLCTypeEnum.AGV:
- break;
- case PLCTypeEnum.PalletMachine:
-
break;
default:
break;
}
}
+ /// <summary>
+ /// 杈撻�佺嚎涓氬姟澶勭悊
+ /// </summary>
+ /// <param name="modDevice"></param>
+ private static void ConveyorLine(WcsDeviceDto modDevice)
+ {
+
+ }
+ /// <summary>
+ /// AGV涓氬姟澶勭悊
+ /// </summary>
+ /// <param name="modDevice"></param>
+ private static void AGV(WcsDeviceDto modDevice)
+ {
+
+ }
+ /// <summary>
+ /// 鍙犳墭鏈轰笟鍔″鐞�
+ /// </summary>
+ /// <param name="modDevice"></param>
+ private static void PalletMachine(WcsDeviceDto modDevice)
+ {
+
+ }
+
+ private static void Test(WcsDeviceDto modDevice)
+ {
+ //鍐欐娴嬭瘯璇籹tring
+ var (res, val) = modDevice.PLCUtil.GetPlcDBValue(PLCDataTypeEnum.String, "DB100", "64");
+ Console.WriteLine("DB100.64----" + val);
+ //娴嬭瘯鎵归噺璇诲彇
+ Dictionary<string, PLCDataTypeEnum> listaddress = new Dictionary<string, PLCDataTypeEnum>();
+ foreach (var modStation in modDevice.listStation)
+ {
+ listaddress.Add(modStation.PlcPos, modStation.PosType.Value);
+ }
+ var result = modDevice.PLCUtil.GetPlcBatchDBValue(listaddress);
+ if (result.Value.Count > 0)
+ {
+ foreach (var value in result.Value)
+ {
+ Console.WriteLine("鍦板潃" + value.Key + "----鍊�" + value, value);
+ }
+ }
+ if (!result.IsSucceed)
+ {
+ foreach (var err in result.ErrList)
+ {
+ Console.WriteLine(err);
+ }
+ if (result.Value.Count > 0)//鏈夐敊璇殑涔熸湁鎴愬姛鐨�
+ {
+
+ }
+ }
+ if (modDevice.Value == 820)
+ {
+ //娴嬭瘯鍐欏叆830
+ //var result = mod.PLCUtil.SetPlcDBValue(mod.PosType.Value, mod.DbNumber, mod.PlcPos, "830");
+ ////鍐欏叆鏄惁鎴愬姛
+ //if (result.IsSucceed)
+ //{
+
+ //}
+ }
+ else if (modDevice.Value == 840)
+ {
+
+ }
+ else if (modDevice.Value == 860)
+ {
+
+ }
+ }
}
diff --git a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
index 3be04f1..a6d6fb2 100644
--- a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
@@ -80,21 +80,22 @@
}
var listDevice = listPlcDevice.Where(s => s.PlcId == _modplc.Id).ToList();
//寰幆璇昏澶�
- foreach (var modDevice in listDevice)
+ foreach (var modDevice in listDevice.Where(s => s.Level == DeviceLevelEnum.DB))
{
var (result, value) = modPlcUtil.GetPlcDBValue(modDevice.PosType.Value, modDevice.DbNumber, modDevice.PlcPos);
if (result.IsSucceed)
{
- //if (value != 0)
- //{
+ //鏃犳祦绋嬭烦鍑�
+ if (value == 0)
+ continue;
var dto = modDevice.Adapt<WcsDeviceDto>();
dto.Value = value;
dto.Type = _modplc.Type;
dto.PLCUtil = modPlcUtil;
dto.listStation = listPlcStation.Where(s => s.DeviceId == modDevice.Id).ToList();
+ dto.listDevice = listDevice.Where(s => s.StationNum == modDevice.StationNum).ToList();
//杩欓噷瑙﹀彂鍊煎彉鏇翠簨浠�
DeviceValueChangeEvent?.Invoke(dto, EventArgs.Empty);
- //}
}
else
{
diff --git a/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceDto.cs b/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceDto.cs
index 69db2d1..62b371f 100644
--- a/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceDto.cs
+++ b/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceDto.cs
@@ -115,5 +115,6 @@
public PLCUtil PLCUtil { get; set; }
+ public List<WcsDevice> listDevice { get; set; }
public List<WcsStation> listStation { get; set; }
}
--
Gitblit v1.8.0