liudl
5 天以前 04611220d6ec06fb328c85210b5e3d3e305cfb3d
Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -30,6 +30,7 @@
    private static int fendao = 1;
    public static void OnChangeEvent(object sender, EventArgs e)
    {
        try
@@ -934,6 +935,7 @@
    private static void ConveyorLine(WcsDeviceDto modDevice)
    {
        var plcConn = modDevice.PLCUtil;
        // 获取楼层数ceshi
        var louCeng = PLCCommon.GetRoadwayByStationNew(modDevice.StationNum);
        if (louCeng == "") 
@@ -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)//结批中