From 0f5ac6e9567623d7c92e92bbfdb4bdb5aa533ece Mon Sep 17 00:00:00 2001 From: liuwf Date: Thu, 29 Aug 2024 09:56:55 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Khd.Core.Plc/StaticPlcHelper.cs | 32 +++++++++++++++++++++++++ src/Khd.Core.Wcs/MainCentralControl.cs | 4 +++- src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs | 13 ++++++++++ src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs | 5 +++- 4 files changed, 52 insertions(+), 2 deletions(-) diff --git a/src/Khd.Core.Plc/StaticPlcHelper.cs b/src/Khd.Core.Plc/StaticPlcHelper.cs index 3d96e5e..02631d8 100644 --- a/src/Khd.Core.Plc/StaticPlcHelper.cs +++ b/src/Khd.Core.Plc/StaticPlcHelper.cs @@ -27,6 +27,38 @@ namespace Khd.Core.Plc plc.Write(address, GetValue(len, valueString)); } + /// + /// 写入RFID + /// + /// plc + /// 读取地址 + /// 长度 + /// 读取到的RFID + public static void WriteRFID(this Plc.S7.Plc plc, string address, string value,int len = 15) + { + string[] adds = address.Split("."); + int db = int.Parse(adds[0].Replace("DB", "")); + int startByteAdr = int.Parse(adds[1].Replace("DBX", "")); + + // 将 value 转换为字节数组,确保其长度符合要求 + byte[] byteArray = Encoding.ASCII.GetBytes(value); + if (byteArray.Length > len) + { + throw new ArgumentException($"Value length exceeds the specified length of {len} bytes."); + } + + // 填充字节数组到指定长度 + byte[] dataToWrite = new byte[len]; + Array.Copy(byteArray, dataToWrite, byteArray.Length); + + + + plc.Write(S7.DataType.DataBlock, db, startByteAdr, dataToWrite); + + } + + + /// /// 读取RFID /// diff --git a/src/Khd.Core.Wcs/MainCentralControl.cs b/src/Khd.Core.Wcs/MainCentralControl.cs index e1d0f64..7f9d73f 100644 --- a/src/Khd.Core.Wcs/MainCentralControl.cs +++ b/src/Khd.Core.Wcs/MainCentralControl.cs @@ -1,4 +1,5 @@ -using Khd.Core.EntityFramework; +using Khd.Core.Domain.Models; +using Khd.Core.EntityFramework; using Khd.Core.Library; using Khd.Core.Wcs.Global; using Khd.Core.Wcs.Wcs; @@ -61,6 +62,7 @@ namespace Khd.Core.Wcs StaticData.PlcDic.TryAdd(plcConfig.Code, plc); } } + //创建定时器 SystemTimer systemTimer = new SystemTimer(_host); systemTimer.Start(); diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs index 20321c1..3a526c0 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs @@ -579,6 +579,7 @@ namespace Khd.Core.Wcs.Wcs } } } + } else if (item.taskStatus == 7) { @@ -590,6 +591,14 @@ namespace Khd.Core.Wcs.Wcs } if (item.taskType == StaticTaskType.SecondSmallPackageToStorage) { + + //取托盘确认信号DB4.DBX310.1写true + BasePlcpoint SecondOutGetOverPoint = StaticData.BasePlcpointList.First(t => t.id == 71); + StaticData.PlcDic[2].WriteToPoint(SecondOutGetOverPoint.plcpointAddress, true, SecondOutGetOverPoint.plcpointLength.ToString()); + // 清空小包出口RFID + BasePlcpoint RFID2001Point = StaticData.BasePlcpointList.First(t => t.id == 52); + StaticData.PlcDic[2].WriteRFID(RFID2001Point.plcpointAddress,"", 12);//小包出口的RFID + //WmsProductInstock? wmsProductInstock = dbContext.WmsProductInstock.FirstOrDefault(t => t.productInstockId == item.orderId); //if (wmsProductInstock != null) //{ @@ -709,6 +718,10 @@ namespace Khd.Core.Wcs.Wcs } else if (item.taskType == StaticTaskType.SecondLineToSmallPackage)//输送线到小包入口 { + // 小包入口确认信号 + + + BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId); startEquip.equipStatus = 0; dbContext.Update(startEquip); diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs index 2dd563d..196d75d 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs @@ -56,11 +56,14 @@ namespace Khd.Core.Wcs.Wcs dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); var agvPutValue = StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress);//小包入口叫料 var agvGetValue = StaticData.PlcDic[2].Read(agvGetPoint.plcpointAddress);//小包出口的到位 - var rfidValue = StaticData.PlcDic[2].ReadRFID(rfidPoint.plcpointAddress);//小包出口的RFID + var rfidValue = StaticData.PlcDic[2].ReadRFID(rfidPoint.plcpointAddress,15);//小包出口的RFID if (agvGetValue != null && agvPutValue != null && rfidValue != null)//读Plc { + //待删除 + agvPutValue = 1; if (Convert.ToInt32(agvPutValue) == 0)//小包入口叫料 { + bool canCreate = dbContext.WcsTask.Where(t => t.nextPointId == 8 || t.endPointId == endEquip.objid).Any();//有没有生成任务 //36 是小包入口的设备信息,8是二楼Agv设备 if (!canCreate)//没有任务