bklLiudl
2025-01-17 2c94cc6e9ecd7087463c54350ae6dbc292fe9bdd
出库 机器人拆垛 出库分道
3个文件已修改
134 ■■■■■ 已修改文件
Admin.NET/WCS.Application/Model/TaskRequest.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/PLC/PLCService.cs 98 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Util/HttpService.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Model/TaskRequest.cs
@@ -526,3 +526,22 @@
    /// </summary>
    public int? QtyCount { get; set; }
}
/// <summary>
/// 出库分拣口
/// </summary>
public class RequestloadingAddre
{
    /// <summary>
    /// 是否成功 0成功 -1失败
    /// </summary>
    public string Success { get; set; }
    /// <summary>
    /// 失败原因
    /// </summary>
    public string Message { get; set; }
    /// <summary>
    /// 出库分拣口
    /// </summary>
    public string loadingAddre { get; set; }
}
Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -2117,14 +2117,16 @@
                                        var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2");
                                        if (retVal.IsSucceed)
                                        {
                                            if (modDevice.DbNumber == "DB102")//1L拆跺分拣后需要回传箱码
                                            {
                                                var http = new HttpService();
                                                IsBaleModel2 ret1 = http.RequestBoxno(boxNoVal);
                                                if (ret1.Success == -1)
                                            {  // liudl 此段程序不会执行 确认后直接删除
                                                if (modDevice.DbNumber == "DB102")//1L拆跺分拣后需要回传箱码
                                                {
                                                    Log.Error("箱码分拣回传失败,需要手动拣货。失败箱码:"+boxNoVal);
                                                    break;
                                                    var http = new HttpService();
                                                    IsBaleModel2 ret1 = http.RequestBoxno(boxNoVal);
                                                    if (ret1.Success == -1)
                                                    {
                                                        Log.Error("箱码分拣回传失败,需要手动拣货。失败箱码:"+boxNoVal);
                                                        break;
                                                    }
                                                }
                                            }
                                            break;
@@ -2479,7 +2481,7 @@
    }
    /// <summary>
    /// 拆垛机器人业务处理
    /// 出库件箱输送和拆垛机器人业务处理
    /// </summary>
    /// <param name="modDevice"></param>
    private static void StackingRobot(WcsDeviceDto modDevice)
@@ -2536,12 +2538,12 @@
                                // 是否写入成功
                                if (listResult.All(s => s.IsSucceed))
                                {
                                    var ret1 = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "20");
                                    var ret1 = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "30");
                                }
                                else
                                {
                                    Log.Error(string.Format($"码垛信息未写入!托盘号:"+palletVal+",码垛位:"+modDevice.StationNum));
                                    Log.Error(string.Format($"码垛信息未写入!托盘号:" + palletVal + ",码垛位:" + modDevice.StationNum));
                                    break;
                                }
                            }
@@ -2553,6 +2555,82 @@
                    break;
            }
        }
        else
        {
            switch (modDevice.Value.ToString())
            {
                case "1":
                    // 1楼件箱PLC请求WCS读码
                    {
                        // 读取plc箱码
                        var modBoxNo = modDevice.listStation.FirstOrDefault(m => m.Text == "主扫条码");
                        var (res, boxNo) = plcConn.GetPlcDBValue(modBoxNo.PosType, modDevice.DbNumber, modBoxNo.PlcPos);
                        if (string.IsNullOrWhiteSpace(boxNo.ToString()))
                        {
                            // 箱信息为null写入剔除通道号:0
                            var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "0");
                            if (ret.IsSucceed)
                            {
                                // 写入流程控制字 2
                                var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2");
                                if (retVal.IsSucceed)
                                {
                                    Log.Error("箱码为null或已绑定托盘,进行剔除。");
                                    break;
                                }
                            }
                        }
                        else
                        {
                            // 箱码
                            string boxNoVal = boxNo.ToString();
                            // 通道号
                            var modLineNo = modDevice.listStation.FirstOrDefault(m => m.Text == "通道号");
                            // 调用wms接口验证箱码是否可拣货并返回装车口
                            var http = new HttpService();
                            RequestloadingAddre requesModel = http.ResultBoxInfoExportWcs(boxNoVal);
                            if (requesModel.Success != "0")
                            {
                                // 箱信息为null写入剔除通道号:0
                                var ret = plcConn.SetPlcDBValue(modLineNo.PosType, modDevice.DbNumber, modLineNo.PlcPos, "0");
                                if (ret.IsSucceed)
                                {
                                    // 写入流程控制字 2
                                    var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2");
                                    if (retVal.IsSucceed)
                                    {
                                        Log.Error("出库分拣根据箱码获取装车口失败,进行剔除。" + requesModel.Message);
                                        break;
                                    }
                                }
                            }
                            else
                            {
                                // 写入出库分道号
                                var ret = plcConn.SetPlcDBValue(modLineNo.PosType, modDevice.DbNumber, modLineNo.PlcPos, requesModel.loadingAddre);
                                if (ret.IsSucceed)
                                {
                                    // 写入流程控制字 2
                                    var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2");
                                    if (retVal.IsSucceed)
                                    {
                                        break;
                                    }
                                }
                            }
                        }
                    };break;
                case "10":
                    // 1楼件箱PLC读码失败,WCS不做处理直接剔除手持拣货。
                    {
                    };break;
                default:
                    break;
            }
        }
                
    }
Admin.NET/WCS.Application/Util/HttpService.cs
@@ -472,4 +472,21 @@
        return result;
    }
    /// <summary>
    /// 调用WMS接口验证箱码是否可拣货并返回装车口
    /// </summary>
    /// <param name="boxNo">箱码</param>
    /// <returns></returns>
    public RequestloadingAddre ResultBoxInfoExportWcs(string boxNo)
    {
        string url = Urls.WMSAddress + ":" + Urls.WMSPort;
        var str = new
        {
            BoxNo = boxNo
        };
        var result = (url + "/api/DownAPi/ResultBoxInfoCheckWcs").SetBody(str, "application/json", Encoding.UTF8).PostAsAsync<RequestloadingAddre>().Result;
        Log.Information("调用WMS接口验证箱码是否可拣货并返回装车口:" + result.ToJson());
        return result;
    }
}