liudl
5 天以前 04611220d6ec06fb328c85210b5e3d3e305cfb3d
Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -29,6 +29,7 @@
    private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId);
    private static int fendao = 1;
    public static void OnChangeEvent(object sender, EventArgs e)
    {
@@ -714,9 +715,9 @@
                        //listResult.Add(plcConn.SetPlcDBValue(modPosEndStorey.PosType, modDevice.DbNumber, modPosEndStorey.PlcPos, storey));
                        PlcTaskInfo taskInfo = new PlcTaskInfo();
                        taskInfo = PLCCommon.GetEndPai(modTask.EndRoadway.Substring(1, 2), modTask.EndLocate.Substring(2, 2),
                                        modTask.EndLocate.Substring(0, 2), modTask.EndLocate.Substring(4, 2),
                                        modTask.EndLocate.Substring(6, 2));
                        taskInfo = PLCCommon.GetEndPai(endLocat.Substring(1, 2), endLocat.Substring(2, 2),
                                        endLocat.Substring(0, 2), endLocat.Substring(4, 2),
                                        endLocat.Substring(6, 2));
                        // 给PLC写入任务数据
                        var listResult = new List<Result>();
@@ -737,7 +738,7 @@
                        if (listResult.All(s => s.IsSucceed))
                        {
                            // 向跺机写入控制流程字
                            var res = modDevice.PLCUtil.SetPlcDBValue(modDevice.PosType, modDevice.WcsPos, "862");
                            var res = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "862");//写入开始放货信号
                            var modcTaskMonitor = new WcsTaskMonitor()
                            {
                                TaskNo = modTask.TaskNo,
@@ -934,6 +935,7 @@
    private static void ConveyorLine(WcsDeviceDto modDevice)
    {
        var plcConn = modDevice.PLCUtil;
        // 获取楼层数ceshi
        var louCeng = PLCCommon.GetRoadwayByStationNew(modDevice.StationNum);
        if (louCeng == "") 
@@ -1299,16 +1301,16 @@
                    var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "托盘码");
                    var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
                    // 获取工位任务号信息
                    var modPosTaskNo = modDevice.listStation.FirstOrDefault(m => m.Text == "任务号");
                    var (taskRes, taskNoVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosTaskNo.PlcPos);
                    if (!res.IsSucceed || !taskRes.IsSucceed)
                    {
                        break;
                    }
                    //var modPosTaskNo = modDevice.listStation.FirstOrDefault(m => m.Text == "任务号");
                    //var (taskRes, taskNoVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosTaskNo.PlcPos);
                    //if (!res.IsSucceed || !taskRes.IsSucceed)
                    //{
                    //    break;
                    //}
                    string pallet = palletVal.ToString();
                    string taskNo = taskNoVal.ToString();
                    //string taskNo = taskNoVal.ToString();
                    // 获取任务信息
                    var modTask = _db.Queryable<WcsTask>().First(s => s.IsDelete == false && s.PalletNo == pallet && s.Status == TaskStatusEnum.Doing && s.TaskType == TaskTypeEnum.In && s.TaskNo == taskNo);
                    var modTask = _db.Queryable<WcsTask>().OrderByDescending(s=>s.CreateTime).First(s => s.IsDelete == false && s.PalletNo == pallet && s.Status == TaskStatusEnum.Doing && s.TaskType == TaskTypeEnum.In );//&& s.TaskNo == taskNo
                    if (modTask == null)
                    {
                        // 此托盘没有对应的转移任务 led显示
@@ -2519,6 +2521,7 @@
                    {
                        lock (OLock)
                        {
                            Thread.Sleep(2000);
                            // 根据工位号,获取托盘号
                            var checkTaskMedel = _db.Queryable<WcsCheckTask>().First(m => m.Port == modDevice.StationNum && m.IsDelete == false);
                            // 根据工位号获取 托盘线该工位号的配置信息
@@ -2617,6 +2620,10 @@
                            }
                            else
                            {
                                if (string.IsNullOrEmpty(palletNo))
                                {
                                    break;
                                }
                                // 根据托盘号,将组托信息插入boxinfolog表 并删除boxinfo表数据
                                var boxInfoList = _db.Queryable<WcsBoxInfo>().Where(w => w.IsDelete == false && w.PalletNo == palletNo).ToList();
                                if (boxInfoList.Count <= 0)
@@ -2627,29 +2634,30 @@
                                    var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, "234");
                                    if (retVal.IsSucceed)
                                    {
                                        //更新任务表数量信息
                                        checkTaskMedel.Qty = 0;
                                        _db.Updateable(checkTaskMedel).ExecuteCommand();
                                        // 写入组托回复流程字
                                        retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50");
                                    }
                                    break;
                                }
                                #region
                                //判断托盘上的箱码是否已组盘
                                foreach (var item in boxInfoList)
                                {
                                    var groupBoxno = _db.Queryable<WcsBoxInfoLog>().Where(w => w.BoxNo == item.BoxNo).ToList();
                                    if (groupBoxno.Count>0)
                                    {
                                        Log.Error(string.Format("申请巷道失败,码垛工位{0},箱码信息不存在", modDevice.StationNum));
                                        // 写入交互工位目标地址
                                        var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, "234");
                                        if (retVal.IsSucceed)
                                        {
                                            // 写入组托回复流程字
                                            retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50");
                                        }
                                        break;
                                    }
                                }
                                //var groupBoxno = _db.Queryable<WcsBoxInfoLog>().Where(w => w.BoxNo == item.BoxNo).ToList();
                                //if (groupBoxno.Count>0)
                                //{
                                //    Log.Error(string.Format("申请巷道失败,码垛工位{0},箱码信息不存在", modDevice.StationNum));
                                //    // 写入交互工位目标地址
                                //    var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, "234");
                                //    if (retVal.IsSucceed)
                                //    {
                                //        // 写入组托回复流程字
                                //        retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50");
                                //    }
                                //    break;
                                //}
                                #endregion
                                // 组托成功后将信息存到log表
                                string sqlStr = $"insert into WCSBoxInfoLog select * from WCSBoxInfo where IsDelete=0 and PalletNo='{palletNo}'";
                                int insertCount = _db.Ado.ExecuteCommand(sqlStr);
@@ -2658,10 +2666,6 @@
                                    string sqlStr2 = $"delete from WCSBoxInfo where  IsDelete=0 and PalletNo='{palletNo}'";
                                    _db.Ado.ExecuteCommand(sqlStr2);
                                }
                                //组盘成功后清空分拣表当前托盘上物料数量
                                checkTaskMedel.Qty = 0;
                                _db.Updateable(checkTaskMedel).ExecuteCommand();
                                // 向WMS申请巷道
                                var http = new HttpService();
                                string TaskNo = "", EndLocate = "";
@@ -2670,10 +2674,23 @@
                                if (strMsg.Contains("-1"))
                                {
                                    Log.Error(string.Format("申请巷道失败,码垛工位{0};原因{1}", modDevice.StationNum, strMsg));
                                    // 写入交互工位目标地址
                                    var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, "234");
                                    if (retVal.IsSucceed)
                                    {
                                        //更新任务表数量信息
                                        checkTaskMedel.Qty = 0;
                                        _db.Updateable(checkTaskMedel).ExecuteCommand();
                                        // 写入组托回复流程字
                                        retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50");
                                    }
                                    break;
                                }
                                else
                                {
                                    //组盘成功后清空分拣表当前托盘上物料数量
                                    checkTaskMedel.Qty = 0;
                                    _db.Updateable(checkTaskMedel).ExecuteCommand();
                                    //判断是否结批中
                                    var (res, jiepi) = plcConn.GetPlcDBValue(checkTaskMedel.PosType, modDevice.DbNumber, checkTaskMedel.PosLot);
                                    if (jiepi == 2)//结批中