wxw
2024-09-25 f44c5df9cc045644982f578fb0b3c3e60b88eb68
Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -10,6 +10,7 @@
using System;
using System.Data;
using System.Reflection.Emit;
using WCS.Application.Entity;
using WCS.Application.Util;
namespace WCS.Application;
@@ -26,16 +27,16 @@
            switch (mod.Type)
            {
                case PLCTypeEnum.StackingMachine:
                    StackingMachine(mod);
                    StackingMachine(mod);                           // 跺机
                    break;
                case PLCTypeEnum.ConveyorLine:
                    ConveyorLine(mod);
                    ConveyorLine(mod);                              // 托盘输送线
                    break;
                case PLCTypeEnum.AGV:
                    AGV(mod);
                    AGV(mod);                                       // AGV调度
                    break;
                case PLCTypeEnum.PalletMachine:
                    PalletMachine(mod);
                case PLCTypeEnum.RobotPalletizer:
                    RobotPalletizer(mod);                             // 码垛机器人
                    break;
                case PLCTypeEnum.StackingRobot:
                    PalletMachine(mod);
@@ -850,7 +851,6 @@
        }
    }
    /// <summary>
    /// 输送线业务处理
    /// </summary>
@@ -1362,7 +1362,143 @@
    /// <param name="modDevice"></param>
    private static void PalletMachine(WcsDeviceDto modDevice)
    {
        var plcConn = modDevice.PLCUtil;
        switch (modDevice.Value.ToString())
        {
            case "220":
                // 注释1
                {
                }
                break;
            case "230":
                // 注释2
                {
                }
                break;
            case "240":
                {
                }
                break;
            default: break;
        }
    }
    /// <summary>
    /// 码垛机器人业务处理
    /// </summary>
    /// <param name="modDevice"></param>
    private static void RobotPalletizer(WcsDeviceDto modDevice)
    {
        var plcConn = modDevice.PLCUtil;
        switch (modDevice.Value.ToString())
        {
            case "1":
                // 主扫申请分道 wcs写入2
                {
                    var taskModel = "";
                    // 判断是否演示模式
                    if (PLCTaskAction.boDemo)
                    {
                        // 演示模式
                        taskModel = "1";
                        // 直接
                    }
                    else
                    {
                        // 通道号
                        var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "通道号");
                        // 读取plc箱码
                        var modBoxNo = modDevice.listStation.FirstOrDefault(m => m.Text == "箱码");
                        var (res, boxNo) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modBoxNo.PlcPos);
                        if (string.IsNullOrWhiteSpace(boxNo.ToString()))
                        {
                            // 箱码为null写入剔除通道号
                            var ret = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, "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 boxInfo = _db.Queryable<WcsBoxInfo>().First(w => w.IsDelete == false && w.BoxNo == boxNoVal && string.IsNullOrEmpty(w.PalletNo));
                            if (boxInfo == null)
                            {
                                // 箱信息为null写入剔除通道号
                                var ret = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, "0");
                                if (ret.IsSucceed)
                                {
                                    // 写入流程控制字 2
                                    var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2");
                                    if (retVal.IsSucceed)
                                    {
                                        Log.Error("箱码为null或已绑定托盘,进行剔除。");
                                        break;
                                    }
                                }
                            }
                            // 根据箱内品种号获取码躲绑定工位及对应的分道号
                            var checkTaskInfo = _db.Queryable<WcsCheckTask>().First(w => w.SkuNo == boxInfo.SkuNo && w.SkuName == boxInfo.SkuName && w.LotNo == boxInfo.LotNo);
                            if (checkTaskInfo == null)
                            {
                                // 绑定信息为null写入剔除通道号
                                var ret = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, "0");
                                if (ret.IsSucceed)
                                {
                                    // 写入流程控制字 2
                                    var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2");
                                    if (retVal.IsSucceed)
                                    {
                                        Log.Error("箱码未绑定分拣任务,进行剔除。");
                                        break;
                                    }
                                }
                            }
                            else
                            {
                                // 与plc交互写入分道号和流程控制字
                                var ret = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, checkTaskInfo.RoboatNo);
                                if (ret.IsSucceed)
                                {
                                    // 写入流程控制字 2
                                    var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2");
                                    if (retVal.IsSucceed)
                                    {
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
                break;
            case "230":
                // 注释2
                {
                }
                break;
            case "240":
                {
                }
                break;
            default: break;
        }
    }
    /// <summary>