wxw
6 天以前 2f263d548dc8b9e270f5f5663e80f9d4f5880b10
Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -21,8 +21,14 @@
public static class PLCService
{
    private static readonly object OLock = new object();
    private static readonly object RuKuLock = new object();
    private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId);
    private static decimal weight94 = 0;
    private static decimal weight160 = 0;
    private static decimal weight155 = 0;
    private static decimal weight152 = 0;
    private static decimal weight153 = 0;
    public static void OnChangeEvent(object sender, EventArgs e)
    {
@@ -223,30 +229,30 @@
                    var listResult = new List<Result>();
                    // 任务号托盘号
                    var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "任务号");
                    listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo));
                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo));
                    var modPosPalletNo = modDevice.listStation.FirstOrDefault(s => s.Text == "托盘码");
                    listResult.Add(plcConn.SetPlcDBValue(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
                    // 起始排列层
                    var modPosRow = modDevice.listStation.FirstOrDefault(s => s.Text == "取货排");
                    listResult.Add(plcConn.SetPlcDBValue(modPosRow.PosType, modDevice.DbNumber, modPosRow.PlcPos, startTaskInfo.EndPai));
                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosRow.PosType, modDevice.DbNumber, modPosRow.PlcPos, startTaskInfo.EndPai));
                    var modPosColumn = modDevice.listStation.FirstOrDefault(s => s.Text == "取货列");
                    listResult.Add(plcConn.SetPlcDBValue(modPosColumn.PosType, modDevice.DbNumber, modPosColumn.PlcPos, startTaskInfo.EndLie));
                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosColumn.PosType, modDevice.DbNumber, modPosColumn.PlcPos, startTaskInfo.EndLie));
                    var modPosStorey = modDevice.listStation.FirstOrDefault(s => s.Text == "取货层");
                    listResult.Add(plcConn.SetPlcDBValue(modPosStorey.PosType, modDevice.DbNumber, modPosStorey.PlcPos, startTaskInfo.EndCeng));
                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosStorey.PosType, modDevice.DbNumber, modPosStorey.PlcPos, startTaskInfo.EndCeng));
                    if (modTask.TaskType == TaskTypeEnum.Out) 
                    {
                        var modEndNo = modDevice.listStation.FirstOrDefault(s => s.Text == "目的工位");
                        listResult.Add(plcConn.SetPlcDBValue(modEndNo.PosType, modDevice.DbNumber, modEndNo.PlcPos, taskInfo.EndStation));
                        listResult.Add(plcConn.SetPlcDBValueRepeat(modEndNo.PosType, modDevice.DbNumber, modEndNo.PlcPos, taskInfo.EndStation));
                    }
                    // 目标放货工位(固定排列层)
                    var modPosEndRow = modDevice.listStation.FirstOrDefault(s => s.Text == "放货排");
                    listResult.Add(plcConn.SetPlcDBValue(modPosEndRow.PosType, modDevice.DbNumber, modPosEndRow.PlcPos, taskInfo.EndPai));
                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosEndRow.PosType, modDevice.DbNumber, modPosEndRow.PlcPos, taskInfo.EndPai));
                    var modPosEndColumn = modDevice.listStation.FirstOrDefault(s => s.Text == "放货列");
                    listResult.Add(plcConn.SetPlcDBValue(modPosEndColumn.PosType, modDevice.DbNumber, modPosEndColumn.PlcPos, taskInfo.EndLie));
                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosEndColumn.PosType, modDevice.DbNumber, modPosEndColumn.PlcPos, taskInfo.EndLie));
                    var modPosEndStorey = modDevice.listStation.FirstOrDefault(s => s.Text == "放货层");
                    listResult.Add(plcConn.SetPlcDBValue(modPosEndStorey.PosType, modDevice.DbNumber, modPosEndStorey.PlcPos, taskInfo.EndCeng));
                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosEndStorey.PosType, modDevice.DbNumber, modPosEndStorey.PlcPos, taskInfo.EndCeng));
                    // 是否写入成功
                    if (listResult.All(s => s.IsSucceed))
@@ -534,7 +540,7 @@
                            }
                            modInsertTaskMonitor.InteractiveMsg = string.Format("储位地址:{0}取货完成", modTask.StartLocate);
                            modInsertTaskMonitor.EndLocat = endStation;                  // 目标储位
                            modInsertTaskMonitor.EndLocat = endStation.ToString();                  // 目标储位
                            // 插入交互日志
                            _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
@@ -592,19 +598,19 @@
                                            //任务号
                                            var modPosTask = listPos.FirstOrDefault(s => s.Text == "任务号");
                                            listResult.Add(plcCconn.SetPlcDBValue(modPosTask.PosType, wcsDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo));
                                            listResult.Add(plcCconn.SetPlcDBValueRepeat(modPosTask.PosType, wcsDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo));
                                            //任务类型
                                            var modPosTaskType = listPos.FirstOrDefault(s => s.Text == "任务类型");
                                            listResult.Add(plcCconn.SetPlcDBValue(modPosTaskType.PosType, wcsDevice.DbNumber, modPosTaskType.PlcPos, ((int)modTask.TaskType).ToString()));
                                            listResult.Add(plcCconn.SetPlcDBValueRepeat(modPosTaskType.PosType, wcsDevice.DbNumber, modPosTaskType.PlcPos, ((int)modTask.TaskType).ToString()));
                                            //托盘号
                                            var modPosPalletNo = listPos.FirstOrDefault(s => s.Text == "托盘码");
                                            listResult.Add(plcCconn.SetPlcDBValue(modPosPalletNo.PosType, wcsDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
                                            listResult.Add(plcCconn.SetPlcDBValueRepeat(modPosPalletNo.PosType, wcsDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
                                            //起始工位
                                            var modPosLocatNo = listPos.FirstOrDefault(s => s.Text == "起始工位");
                                            listResult.Add(plcCconn.SetPlcDBValue(modPosLocatNo.PosType, wcsDevice.DbNumber, modPosLocatNo.PlcPos, endValStr));
                                            listResult.Add(plcCconn.SetPlcDBValueRepeat(modPosLocatNo.PosType, wcsDevice.DbNumber, modPosLocatNo.PlcPos, endValStr));
                                            // 目标工位
                                            var modPosEndLocatNo = listPos.FirstOrDefault(s => s.Text == "目的工位");
                                            listResult.Add(plcCconn.SetPlcDBValue(modPosEndLocatNo.PosType, wcsDevice.DbNumber, modPosEndLocatNo.PlcPos, inVal));
                                            listResult.Add(plcCconn.SetPlcDBValueRepeat(modPosEndLocatNo.PosType, wcsDevice.DbNumber, modPosEndLocatNo.PlcPos, inVal));
                                            // 是否写入成功
                                            if (listResult.All(s => s.IsSucceed))
@@ -768,19 +774,19 @@
                                        var listResult = new List<Result>();
                                        //任务号
                                        var modPosTask = listPos.FirstOrDefault(s => s.Text == "任务号");
                                        listResult.Add(plcConveyorConn.SetPlcDBValue(modPosTask.PosType, wcsDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo));
                                        listResult.Add(plcConveyorConn.SetPlcDBValueRepeat(modPosTask.PosType, wcsDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo));
                                        //任务类型
                                        var modPosTaskType = listPos.FirstOrDefault(s => s.Text == "任务类型");
                                        listResult.Add(plcConveyorConn.SetPlcDBValue(modPosTaskType.PosType, wcsDevice.DbNumber, modPosTaskType.PlcPos, ((int)modTask.TaskType).ToString()));
                                        listResult.Add(plcConveyorConn.SetPlcDBValueRepeat(modPosTaskType.PosType, wcsDevice.DbNumber, modPosTaskType.PlcPos, ((int)modTask.TaskType).ToString()));
                                        //托盘号
                                        var modPosPalletNo = listPos.FirstOrDefault(s => s.Text == "托盘码");
                                        listResult.Add(plcConveyorConn.SetPlcDBValue(modPosPalletNo.PosType, wcsDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
                                        listResult.Add(plcConveyorConn.SetPlcDBValueRepeat(modPosPalletNo.PosType, wcsDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
                                        //起始工位
                                        var modPosLocatNo = listPos.FirstOrDefault(s => s.Text == "起始工位");
                                        listResult.Add(plcConveyorConn.SetPlcDBValue(modPosLocatNo.PosType, wcsDevice.DbNumber, modPosLocatNo.PlcPos, stationNumstr));
                                        listResult.Add(plcConveyorConn.SetPlcDBValueRepeat(modPosLocatNo.PosType, wcsDevice.DbNumber, modPosLocatNo.PlcPos, stationNumstr));
                                        // 目标工位
                                        var modPosEndLocatNo = listPos.FirstOrDefault(s => s.Text == "目的工位");
                                        listResult.Add(plcConveyorConn.SetPlcDBValue(modPosEndLocatNo.PosType, wcsDevice.DbNumber, modPosEndLocatNo.PlcPos, outCode));
                                        listResult.Add(plcConveyorConn.SetPlcDBValueRepeat(modPosEndLocatNo.PosType, wcsDevice.DbNumber, modPosEndLocatNo.PlcPos, outCode));
                                        // 是否写入成功
                                        if (listResult.All(s => s.IsSucceed))
@@ -820,7 +826,7 @@
                            case TaskTypeEnum.Move:       // 移库任务
                                {
                                    var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "任务号");
                                    var result = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo);
                                    var result = plcConn.SetPlcDBValueRepeat(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo);
                                    if (!result.IsSucceed)
                                    {
                                        Log.Error($"{modDevice.Text}写入任务号失败");
@@ -975,15 +981,15 @@
                        // 给PLC写入任务数据
                        var listResult = new List<Result>();
                        // 任务号托盘号
                        listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo));
                        listResult.Add(plcConn.SetPlcDBValue(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
                        listResult.Add(plcConn.SetPlcDBValueRepeat(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo));
                        listResult.Add(plcConn.SetPlcDBValueRepeat(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
                        // 起始排列层
                        listResult.Add(plcConn.SetPlcDBValue(modPosRow.PosType, modDevice.DbNumber, modPosRow.PlcPos, "2"));
                        listResult.Add(plcConn.SetPlcDBValue(modPosColumn.PosType, modDevice.DbNumber, modPosColumn.PlcPos, "100"));
                        listResult.Add(plcConn.SetPlcDBValue(modPosStorey.PosType, modDevice.DbNumber, modPosStorey.PlcPos, "1"));
                        listResult.Add(plcConn.SetPlcDBValue(modPosEndRow.PosType, modDevice.DbNumber, modPosEndRow.PlcPos, row));
                        listResult.Add(plcConn.SetPlcDBValue(modPosEndColumn.PosType, modDevice.DbNumber, modPosEndColumn.PlcPos, column));
                        listResult.Add(plcConn.SetPlcDBValue(modPosEndStorey.PosType, modDevice.DbNumber, modPosEndStorey.PlcPos, storey));
                        listResult.Add(plcConn.SetPlcDBValueRepeat(modPosRow.PosType, modDevice.DbNumber, modPosRow.PlcPos, "2"));
                        listResult.Add(plcConn.SetPlcDBValueRepeat(modPosColumn.PosType, modDevice.DbNumber, modPosColumn.PlcPos, "100"));
                        listResult.Add(plcConn.SetPlcDBValueRepeat(modPosStorey.PosType, modDevice.DbNumber, modPosStorey.PlcPos, "1"));
                        listResult.Add(plcConn.SetPlcDBValueRepeat(modPosEndRow.PosType, modDevice.DbNumber, modPosEndRow.PlcPos, row));
                        listResult.Add(plcConn.SetPlcDBValueRepeat(modPosEndColumn.PosType, modDevice.DbNumber, modPosEndColumn.PlcPos, column));
                        listResult.Add(plcConn.SetPlcDBValueRepeat(modPosEndStorey.PosType, modDevice.DbNumber, modPosEndStorey.PlcPos, storey));
                        // 是否写入成功
                        if (listResult.All(s => s.IsSucceed))
                        {
@@ -1105,25 +1111,25 @@
            var listResult = new List<Result>();
            // 任务号托盘号
            var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "任务号");
            listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo));
            listResult.Add(plcConn.SetPlcDBValueRepeat(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo));
            var modPosPalletNo = modDevice.listStation.FirstOrDefault(s => s.Text == "托盘码");
            listResult.Add(plcConn.SetPlcDBValue(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
            listResult.Add(plcConn.SetPlcDBValueRepeat(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
            // 起始排列层
            var modPosRow = modDevice.listStation.FirstOrDefault(s => s.Text == "取货排");
            listResult.Add(plcConn.SetPlcDBValue(modPosRow.PosType, modDevice.DbNumber, modPosRow.PlcPos, startTaskInfo.EndPai));
            listResult.Add(plcConn.SetPlcDBValueRepeat(modPosRow.PosType, modDevice.DbNumber, modPosRow.PlcPos, startTaskInfo.EndPai));
            var modPosColumn = modDevice.listStation.FirstOrDefault(s => s.Text == "取货列");
            listResult.Add(plcConn.SetPlcDBValue(modPosColumn.PosType, modDevice.DbNumber, modPosColumn.PlcPos, startTaskInfo.EndLie));
            listResult.Add(plcConn.SetPlcDBValueRepeat(modPosColumn.PosType, modDevice.DbNumber, modPosColumn.PlcPos, startTaskInfo.EndLie));
            var modPosStorey = modDevice.listStation.FirstOrDefault(s => s.Text == "取货层");
            listResult.Add(plcConn.SetPlcDBValue(modPosStorey.PosType, modDevice.DbNumber, modPosStorey.PlcPos, startTaskInfo.EndCeng));
            listResult.Add(plcConn.SetPlcDBValueRepeat(modPosStorey.PosType, modDevice.DbNumber, modPosStorey.PlcPos, startTaskInfo.EndCeng));
            // 目标放货工位(固定排列层)
            PlcTaskInfo taskInfo = PLCCommon.GetCTaskInfo(modTask.EndLocate, ((int)modTask.TaskType).ToString(),
                        modTask.StartRoadway, modTask.EndRoadway);
            var modPosEndRow = modDevice.listStation.FirstOrDefault(s => s.Text == "放货排");
            listResult.Add(plcConn.SetPlcDBValue(modPosEndRow.PosType, modDevice.DbNumber, modPosEndRow.PlcPos, taskInfo.EndPai));
            listResult.Add(plcConn.SetPlcDBValueRepeat(modPosEndRow.PosType, modDevice.DbNumber, modPosEndRow.PlcPos, taskInfo.EndPai));
            var modPosEndColumn = modDevice.listStation.FirstOrDefault(s => s.Text == "放货列");
            listResult.Add(plcConn.SetPlcDBValue(modPosEndColumn.PosType, modDevice.DbNumber, modPosEndColumn.PlcPos, taskInfo.EndLie));
            listResult.Add(plcConn.SetPlcDBValueRepeat(modPosEndColumn.PosType, modDevice.DbNumber, modPosEndColumn.PlcPos, taskInfo.EndLie));
            var modPosEndStorey = modDevice.listStation.FirstOrDefault(s => s.Text == "放货层");
            listResult.Add(plcConn.SetPlcDBValue(modPosEndStorey.PosType, modDevice.DbNumber, modPosEndStorey.PlcPos, taskInfo.EndCeng));
            listResult.Add(plcConn.SetPlcDBValueRepeat(modPosEndStorey.PosType, modDevice.DbNumber, modPosEndStorey.PlcPos, taskInfo.EndCeng));
            // 是否写入成功
            if (listResult.All(s => s.IsSucceed))
@@ -1192,6 +1198,65 @@
        {
            return;
        }
        #region#实时显示重量到LED屏幕
        var modPosPalletWeightIng = modDevice.listStation.FirstOrDefault(m => m.Text == "实际重量");
        if (modPosPalletWeightIng != null)
        {
            var (resPalletWeightIng, palletWeightValIng) = plcConn.GetPlcDBValue(modPosPalletWeightIng.PosType, modDevice.DbNumber, modPosPalletWeightIng.PlcPos);
            switch (modDevice.StationNum)
            {
                case "094":
                    {
                        if (Convert.ToDecimal(palletWeightValIng) != weight94)
                        {
                            LedDisplay(modDevice.LedIP, $"当前重量(KG):{Convert.ToDecimal(palletWeightValIng)}");
                            weight94 = Convert.ToDecimal(palletWeightValIng);
                        }
                    }
                    break;
                case "160":
                    {
                        if (Convert.ToDecimal(palletWeightValIng) != weight160)
                        {
                            LedDisplay(modDevice.LedIP, $"当前重量(KG):{Convert.ToDecimal(palletWeightValIng)}");
                            weight160 = Convert.ToDecimal(palletWeightValIng);
                        }
                    }
                    break;
                case "155":
                    {
                        if (Convert.ToDecimal(palletWeightValIng) != weight155)
                        {
                            LedDisplay(modDevice.LedIP, $"当前重量(KG):{Convert.ToDecimal(palletWeightValIng)}");
                            weight155 = Convert.ToDecimal(palletWeightValIng);
                        }
                    }
                    break;
                case "152":
                    {
                        if (Convert.ToDecimal(palletWeightValIng) != weight152)
                        {
                            LedDisplay(modDevice.LedIP, $"当前重量(KG):{Convert.ToDecimal(palletWeightValIng)}");
                            weight152 = Convert.ToDecimal(palletWeightValIng);
                        }
                    }
                    break;
                case "153":
                    {
                        if (Convert.ToDecimal(palletWeightValIng) != weight153)
                        {
                            LedDisplay(modDevice.LedIP, $"当前重量(KG):{Convert.ToDecimal(palletWeightValIng)}");
                            weight153 = Convert.ToDecimal(palletWeightValIng);
                        }
                    }
                    break;
            }
        }
        #endregion
        var ledText = "";
        switch (modDevice.Value.ToString())
        {
@@ -1234,9 +1299,17 @@
                        case "155":
                            dbStr = "2383";
                            break;
                        case "152":
                            dbStr = "2401";
                            break;
                        case "153":
                            dbStr = "2403";
                            break;
                    }
                    string errorStr = "异常信息:";
                    string errorStr = string.Empty;
                    //将异常信息显示到LED屏幕上
                    var (errorRes0, errorVal0) = plcConn.GetPlcDBValue(PLCDataTypeEnum.Bit, $"M{dbStr}.0", "");
                    if (errorRes0.IsSucceed && errorVal0 == true)
@@ -1283,9 +1356,15 @@
                    {
                        errorStr += " 扫码仪通讯报警";
                    }
                    ledText += $"申请入库失败\n\n";
                    ledText += $"{errorStr}";
                    LedDisplay(modDevice.LedIP, ledText);
                    if (!string.IsNullOrEmpty(errorStr))
                    {
                        errorStr = "异常信息:" + errorStr;
                        ledText += $"申请入库失败\n\n";
                        ledText += $"{errorStr}";
                        LedDisplay(modDevice.LedIP, ledText);
                    }
                }
                break;
            case "320":
@@ -1336,7 +1415,7 @@
                        }
                        // 写入输送线退回指令
                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
                        var ret = plcConn.SetPlcDBValueRepeat(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
                        if (ret.IsSucceed) 
                        {
                            plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350");
@@ -1357,7 +1436,7 @@
                        }
                        // 写入输送线退回指令
                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
                        var ret = plcConn.SetPlcDBValueRepeat(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
                        if (ret.IsSucceed)
                        {
                            plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350");
@@ -1368,6 +1447,27 @@
                    var http = new HttpService();
                    string TaskNo = "", EndLocate = "";
                    //根据工位判断是否为叠托机工位申请空托盘跺入库,是:向WMS申请空托盘跺组托
                    string groupMsg = "";
                    if (modDevice.StationNum == "72")
                    {
                        groupMsg = http.BindNullPalletWcs(10, palletVal);
                        if (groupMsg.Contains("-1"))
                        {
                            // 写入输送线退回指令
                            var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
                            if (ret.IsSucceed)
                            {
                                plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350");
                            }
                            break;
                        }
                    }
                    //向WMS申请巷道
                    strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, taskModel, louCeng, ref EndLocate, ref TaskNo, (int)palletHeightVal);
                    if (!strMsg.Contains("-1"))
@@ -1431,7 +1531,7 @@
                        }
                        // 写入输送线退回指令
                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
                        var ret = plcConn.SetPlcDBValueRepeat(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
                        if (ret.IsSucceed)
                        {
                            plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350");
@@ -1523,21 +1623,22 @@
                    // 任务号、任务类型、托盘号
                    var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "任务号");
                    listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo));
                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo));
                    var modPosTaskType = modDevice.listStation.FirstOrDefault(s => s.Text == "任务类型");
                    var taskTypeStr = (int)modTask.TaskType;
                    listResult.Add(plcConn.SetPlcDBValue(modPosTaskType.PosType, modDevice.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString()));
                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosTaskType.PosType, modDevice.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString()));
                    var modPosPalletNo = modDevice.listStation.FirstOrDefault(s => s.Text == "托盘码");
                    listResult.Add(plcConn.SetPlcDBValue(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
                    // 起始工位、目的工位
                    var modPosStrLocat = modDevice.listStation.FirstOrDefault(s => s.Text == "起始工位");
                    listResult.Add(plcConn.SetPlcDBValue(modPosStrLocat.PosType, modDevice.DbNumber, modPosStrLocat.PlcPos, modDevice.StationNum));
                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosStrLocat.PosType, modDevice.DbNumber, modPosStrLocat.PlcPos, modDevice.StationNum));
                    var modPosEndLocat = modDevice.listStation.FirstOrDefault(s => s.Text == "目的工位");
                    listResult.Add(plcConn.SetPlcDBValue(modPosEndLocat.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, endLocatVlue));
                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosEndLocat.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, endLocatVlue));
                    if (listResult.All(s => s.IsSucceed))
                    {
                    {
                        Log.Information($"写入340,任务号:{modTask.TaskNo},任务类型:{taskTypeStr.ToString()},托盘码:{modTask.PalletNo},起始工位:{modDevice.StationNum},目的工位:{endLocatVlue}");
                        // 将任务状态变更为正在执行
                        _db.Updateable<WcsTask>()
                           .SetColumns(s => s.Status == TaskStatusEnum.Doing)
@@ -1714,9 +1815,12 @@
                    #endregion
                    var http = new HttpService();
                    string TaskNo = "";
                    // 向WMS申请储位信息
                    strMsg = http.RequestLocate(palletVal, modDevice.StationNum, taskModel, roadway, ref TaskNo, (int)taskInfo2.PalletQty);
                    string TaskNo = "";
                    lock (RuKuLock)
                    {
                        // 向WMS申请储位信息
                        strMsg = http.RequestLocate(palletVal, modDevice.StationNum, taskModel, roadway, ref TaskNo, (int)taskInfo2.PalletQty);
                    }
                    // 根据任务号获取起始工位地址,根据起始工位地址获取LEDIP 推送到LED屏幕。
                    var taskInfo = _db.Queryable<WcsTask>().First(w => w.TaskNo == TaskNo);
@@ -1860,35 +1964,35 @@
                                    // 任务号、任务类型、托盘号
                                    var modPosTask = djInfos.FirstOrDefault(s => s.Text == "任务号");
                                    listResult.Add(plcSConn.SetPlcDBValue(modPosTask.PosType, djMod.DbNumber, modPosTask.PlcPos, modTask.TaskNo));
                                    listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosTask.PosType, djMod.DbNumber, modPosTask.PlcPos, modTask.TaskNo));
                                    var modPosTaskType = djInfos.FirstOrDefault(s => s.Text == "任务类型");
                                    var taskTypeStr = (int)modTask.TaskType;
                                    listResult.Add(plcSConn.SetPlcDBValue(modPosTaskType.PosType, djMod.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString()));
                                    listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosTaskType.PosType, djMod.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString()));
                                    var modPosPalletNo = djInfos.FirstOrDefault(s => s.Text == "托盘码");
                                    listResult.Add(plcSConn.SetPlcDBValue(modPosPalletNo.PosType, djMod.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
                                    listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosPalletNo.PosType, djMod.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
                                    //起始工位
                                    var modPosStrStationNum = djInfos.FirstOrDefault(s => s.Text == "起始工位");
                                    listResult.Add(plcSConn.SetPlcDBValue(modPosStrStationNum.PosType, djMod.DbNumber, modPosStrStationNum.PlcPos, modDevice.StationNum));
                                    listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosStrStationNum.PosType, djMod.DbNumber, modPosStrStationNum.PlcPos, modDevice.StationNum));
                                    // 目的工位
                                    var modPosendStationNum = djInfos.FirstOrDefault(s => s.Text == "目的工位");
                                    listResult.Add(plcSConn.SetPlcDBValue(modPosendStationNum.PosType, djMod.DbNumber, modPosendStationNum.PlcPos, endStationNum));
                                    listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosendStationNum.PosType, djMod.DbNumber, modPosendStationNum.PlcPos, endStationNum));
                                    //取货排、列、层
                                    var modPosStrPai = djInfos.FirstOrDefault(s => s.Text == "取货排");
                                    listResult.Add(plcSConn.SetPlcDBValue(modPosStrPai.PosType, djMod.DbNumber, modPosStrPai.PlcPos, sInfo.Pai));
                                    listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosStrPai.PosType, djMod.DbNumber, modPosStrPai.PlcPos, sInfo.Pai));
                                    var modPosStrLie = djInfos.FirstOrDefault(s => s.Text == "取货列");
                                    listResult.Add(plcSConn.SetPlcDBValue(modPosStrLie.PosType, djMod.DbNumber, modPosStrLie.PlcPos, sInfo.Lie));
                                    listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosStrLie.PosType, djMod.DbNumber, modPosStrLie.PlcPos, sInfo.Lie));
                                    var modPosStrCeng = djInfos.FirstOrDefault(s => s.Text == "取货层");
                                    listResult.Add(plcSConn.SetPlcDBValue(modPosStrCeng.PosType, djMod.DbNumber, modPosStrCeng.PlcPos, sInfo.Ceng));
                                    listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosStrCeng.PosType, djMod.DbNumber, modPosStrCeng.PlcPos, sInfo.Ceng));
                                    //放货排、列、层
                                    var modPosEndPai = djInfos.FirstOrDefault(s => s.Text == "放货排");
                                    listResult.Add(plcSConn.SetPlcDBValue(modPosEndPai.PosType, djMod.DbNumber, modPosEndPai.PlcPos, "2"));
                                    listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosEndPai.PosType, djMod.DbNumber, modPosEndPai.PlcPos, "2"));
                                    var modPosEndLie = djInfos.FirstOrDefault(s => s.Text == "放货列");
                                    listResult.Add(plcSConn.SetPlcDBValue(modPosEndLie.PosType, djMod.DbNumber, modPosEndLie.PlcPos, "60"));
                                    listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosEndLie.PosType, djMod.DbNumber, modPosEndLie.PlcPos, "60"));
                                    var modPosEndCeng = djInfos.FirstOrDefault(s => s.Text == "放货层");
                                    listResult.Add(plcSConn.SetPlcDBValue(modPosEndCeng.PosType, djMod.DbNumber, modPosEndCeng.PlcPos, "1"));
                                    listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosEndCeng.PosType, djMod.DbNumber, modPosEndCeng.PlcPos, "1"));
                                    if (listResult.All(s => s.IsSucceed))
                                    {
                                        // 写入跺机 830
@@ -1969,16 +2073,16 @@
                            // 任务号、任务类型、托盘号
                            var modPosTask = djInfos.FirstOrDefault(s => s.Text == "任务号");
                            listResult.Add(plcSConn.SetPlcDBValue(modPosTask.PosType, djMod.DbNumber, modPosTask.PlcPos, modTask.TaskNo));
                            listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosTask.PosType, djMod.DbNumber, modPosTask.PlcPos, modTask.TaskNo));
                            var modPosTaskType = djInfos.FirstOrDefault(s => s.Text == "任务类型");
                            var taskTypeStr = (int)modTask.TaskType;
                            listResult.Add(plcSConn.SetPlcDBValue(modPosTaskType.PosType, djMod.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString()));
                            listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosTaskType.PosType, djMod.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString()));
                            var modPosPalletNo = djInfos.FirstOrDefault(s => s.Text == "托盘码");
                            listResult.Add(plcSConn.SetPlcDBValue(modPosPalletNo.PosType, djMod.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
                            listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosPalletNo.PosType, djMod.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
                            //起始工位
                            var modPosStrStationNum = djInfos.FirstOrDefault(s => s.Text == "起始工位");
                            listResult.Add(plcSConn.SetPlcDBValue(modPosStrStationNum.PosType, djMod.DbNumber, modPosStrStationNum.PlcPos, modDevice.StationNum));
                            listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosStrStationNum.PosType, djMod.DbNumber, modPosStrStationNum.PlcPos, modDevice.StationNum));
                            //目的工位
                            if (modTask.EndLocate == "266") 
                            {
@@ -1990,22 +2094,22 @@
                            }
                            var modPosStrend = djInfos.FirstOrDefault(s => s.Text == "目的工位");
                            listResult.Add(plcSConn.SetPlcDBValue(modPosStrend.PosType, djMod.DbNumber, modPosStrend.PlcPos, modTask.EndLocate));       // 此处现在存的是出库口266。
                            listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosStrend.PosType, djMod.DbNumber, modPosStrend.PlcPos, modTask.EndLocate));       // 此处现在存的是出库口266。
                            //取货排、列、层
                            var modPosStrPai = djInfos.FirstOrDefault(s => s.Text == "取货排");
                            listResult.Add(plcSConn.SetPlcDBValue(modPosStrPai.PosType, djMod.DbNumber, modPosStrPai.PlcPos, "3"));
                            listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosStrPai.PosType, djMod.DbNumber, modPosStrPai.PlcPos, "3"));
                            var modPosStrLie = djInfos.FirstOrDefault(s => s.Text == "取货列");
                            listResult.Add(plcSConn.SetPlcDBValue(modPosStrLie.PosType, djMod.DbNumber, modPosStrLie.PlcPos, "60"));
                            listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosStrLie.PosType, djMod.DbNumber, modPosStrLie.PlcPos, "60"));
                            var modPosStrCeng = djInfos.FirstOrDefault(s => s.Text == "取货层");
                            listResult.Add(plcSConn.SetPlcDBValue(modPosStrCeng.PosType, djMod.DbNumber, modPosStrCeng.PlcPos, "1"));
                            listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosStrCeng.PosType, djMod.DbNumber, modPosStrCeng.PlcPos, "1"));
                            //放货排、列、层
                            var modPosEndPai = djInfos.FirstOrDefault(s => s.Text == "放货排");
                            listResult.Add(plcSConn.SetPlcDBValue(modPosEndPai.PosType, djMod.DbNumber, modPosEndPai.PlcPos, sInfo1.Pai));
                            listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosEndPai.PosType, djMod.DbNumber, modPosEndPai.PlcPos, sInfo1.Pai));
                            var modPosEndLie = djInfos.FirstOrDefault(s => s.Text == "放货列");
                            listResult.Add(plcSConn.SetPlcDBValue(modPosEndLie.PosType, djMod.DbNumber, modPosEndLie.PlcPos, sInfo1.Lie));
                            listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosEndLie.PosType, djMod.DbNumber, modPosEndLie.PlcPos, sInfo1.Lie));
                            var modPosEndCeng = djInfos.FirstOrDefault(s => s.Text == "放货层");
                            listResult.Add(plcSConn.SetPlcDBValue(modPosEndCeng.PosType, djMod.DbNumber, modPosEndCeng.PlcPos, sInfo1.Ceng));
                            listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosEndCeng.PosType, djMod.DbNumber, modPosEndCeng.PlcPos, sInfo1.Ceng));
                            if (listResult.All(s => s.IsSucceed))
                            {
                                // 写入跺机 830
@@ -2099,35 +2203,35 @@
                        // 任务号、任务类型、托盘号
                        var modPosTask = djInfos.FirstOrDefault(s => s.Text == "任务号");
                        listResult.Add(plcStackeConn.SetPlcDBValue(modPosTask.PosType, djMod.DbNumber, modPosTask.PlcPos, modTask.TaskNo));
                        listResult.Add(plcStackeConn.SetPlcDBValueRepeat(modPosTask.PosType, djMod.DbNumber, modPosTask.PlcPos, modTask.TaskNo));
                        var modPosTaskType = djInfos.FirstOrDefault(s => s.Text == "任务类型");
                        var taskTypeStr = (int)modTask.TaskType;
                        listResult.Add(plcStackeConn.SetPlcDBValue(modPosTaskType.PosType, djMod.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString()));
                        listResult.Add(plcStackeConn.SetPlcDBValueRepeat(modPosTaskType.PosType, djMod.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString()));
                        var modPosPalletNo = djInfos.FirstOrDefault(s => s.Text == "托盘码");
                        listResult.Add(plcStackeConn.SetPlcDBValue(modPosPalletNo.PosType, djMod.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
                        listResult.Add(plcStackeConn.SetPlcDBValueRepeat(modPosPalletNo.PosType, djMod.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
                        //起始工位
                        var modPosStrStationNum = djInfos.FirstOrDefault(s => s.Text == "起始工位");
                        listResult.Add(plcStackeConn.SetPlcDBValue(modPosStrStationNum.PosType, djMod.DbNumber, modPosStrStationNum.PlcPos, modDevice.StationNum));
                        listResult.Add(plcStackeConn.SetPlcDBValueRepeat(modPosStrStationNum.PosType, djMod.DbNumber, modPosStrStationNum.PlcPos, modDevice.StationNum));
                        //目的工位
                        var modPosendStationNum = djInfos.FirstOrDefault(s => s.Text == "目的工位");
                        listResult.Add(plcStackeConn.SetPlcDBValue(modPosStrStationNum.PosType, djMod.DbNumber, modPosendStationNum.PlcPos, modDevice.StationNum));     // 此处现在是139 应该为0
                        listResult.Add(plcStackeConn.SetPlcDBValueRepeat(modPosStrStationNum.PosType, djMod.DbNumber, modPosendStationNum.PlcPos, modDevice.StationNum));     // 此处现在是139 应该为0
                        //取货排、列、层
                        var modPosStrPai = djInfos.FirstOrDefault(s => s.Text == "取货排");
                        listResult.Add(plcStackeConn.SetPlcDBValue(modPosStrPai.PosType, djMod.DbNumber, modPosStrPai.PlcPos, sInfo.Pai));
                        listResult.Add(plcStackeConn.SetPlcDBValueRepeat(modPosStrPai.PosType, djMod.DbNumber, modPosStrPai.PlcPos, sInfo.Pai));
                        var modPosStrLie = djInfos.FirstOrDefault(s => s.Text == "取货列");
                        listResult.Add(plcStackeConn.SetPlcDBValue(modPosStrLie.PosType, djMod.DbNumber, modPosStrLie.PlcPos, sInfo.Lie));
                        listResult.Add(plcStackeConn.SetPlcDBValueRepeat(modPosStrLie.PosType, djMod.DbNumber, modPosStrLie.PlcPos, sInfo.Lie));
                        var modPosStrCeng = djInfos.FirstOrDefault(s => s.Text == "取货层");
                        listResult.Add(plcStackeConn.SetPlcDBValue(modPosStrCeng.PosType, djMod.DbNumber, modPosStrCeng.PlcPos, sInfo.Ceng));
                        listResult.Add(plcStackeConn.SetPlcDBValueRepeat(modPosStrCeng.PosType, djMod.DbNumber, modPosStrCeng.PlcPos, sInfo.Ceng));
                        //放货排、列、层
                        var modPosEndPai = djInfos.FirstOrDefault(s => s.Text == "放货排");
                        listResult.Add(plcStackeConn.SetPlcDBValue(modPosEndPai.PosType, djMod.DbNumber, modPosEndPai.PlcPos, pai));
                        listResult.Add(plcStackeConn.SetPlcDBValueRepeat(modPosEndPai.PosType, djMod.DbNumber, modPosEndPai.PlcPos, pai));
                        var modPosEndLie = djInfos.FirstOrDefault(s => s.Text == "放货列");
                        listResult.Add(plcStackeConn.SetPlcDBValue(modPosEndLie.PosType, djMod.DbNumber, modPosEndLie.PlcPos, lie));
                        listResult.Add(plcStackeConn.SetPlcDBValueRepeat(modPosEndLie.PosType, djMod.DbNumber, modPosEndLie.PlcPos, lie));
                        var modPosEndCeng = djInfos.FirstOrDefault(s => s.Text == "放货层");
                        listResult.Add(plcStackeConn.SetPlcDBValue(modPosEndCeng.PosType, djMod.DbNumber, modPosEndCeng.PlcPos, ceng));
                        listResult.Add(plcStackeConn.SetPlcDBValueRepeat(modPosEndCeng.PosType, djMod.DbNumber, modPosEndCeng.PlcPos, ceng));
                        if (listResult.All(s => s.IsSucceed))
                        {
@@ -2434,7 +2538,7 @@
                //托盘达到拆垛工位,WCS写入品种号并写入530
                {
                    // 获取托盘条码配置
                    var modPalletNo = modDevice.listStation.FirstOrDefault(m => m.Text == "托盘条码" && m.IsDelete == false);
                    var modPalletNo = modDevice.listStation.FirstOrDefault(m => m.Text == "托盘码" && m.IsDelete == false);
                    // 读取PLC托盘条码号
                    var (res, palletVal) = plcConn.GetPlcDBValue(modPalletNo.PosType, modDevice.DbNumber, modPalletNo.PlcPos);
                    string palletNo = palletVal.ToString();
@@ -2451,7 +2555,7 @@
                    {
                        var modAddCode = modDevice.listStation.FirstOrDefault(m => m.Text == "品种" && m.IsDelete == false);
                        // 写入拆垛品种
                        var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, pzNo);
                        var retVal = plcConn.SetPlcDBValueRepeat(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, pzNo);
                        if (retVal.IsSucceed)
                        {
                            plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "530");
@@ -2584,16 +2688,16 @@
                            var listResult = new List<Result>();
                            //批次号
                            var modPosLotNo = modDevice.listStation.FirstOrDefault(m => m.Text == "批次号" && m.IsDelete == false);
                            listResult.Add(plcConn.SetPlcDBValue(modPosLotNo.PosType, modDevice.DbNumber, modPosLotNo.PlcPos, boxInfo.LotNo));
                            listResult.Add(plcConn.SetPlcDBValueRepeat(modPosLotNo.PosType, modDevice.DbNumber, modPosLotNo.PlcPos, boxInfo.LotNo));
                            //品种
                            var modPosPZ = modDevice.listStation.FirstOrDefault(m => m.Text == "品种" && m.IsDelete == false);
                            listResult.Add(plcConn.SetPlcDBValue(modPosPZ.PosType, modDevice.DbNumber, modPosPZ.PlcPos, checkTaskInfo.PZNo));
                            listResult.Add(plcConn.SetPlcDBValueRepeat(modPosPZ.PosType, modDevice.DbNumber, modPosPZ.PlcPos, checkTaskInfo.PZNo));
                            //是否尾箱
                            var modPosIsEndBox = modDevice.listStation.FirstOrDefault(m => m.Text == "是否尾箱" && m.IsDelete == false);
                            listResult.Add(plcConn.SetPlcDBValue(modPosIsEndBox.PosType, modDevice.DbNumber, modPosIsEndBox.PlcPos, boxInfo.EndLotFlag));
                            listResult.Add(plcConn.SetPlcDBValueRepeat(modPosIsEndBox.PosType, modDevice.DbNumber, modPosIsEndBox.PlcPos, boxInfo.EndLotFlag));
                            //写入箱码
                            var modPosBox = modDevice.listStation.FirstOrDefault(m => m.Text == "写入箱码" && m.IsDelete == false);
                            listResult.Add(plcConn.SetPlcDBValue(modPosBox.PosType, modDevice.DbNumber, modPosBox.PlcPos, boxInfo.BoxNo));
                            listResult.Add(plcConn.SetPlcDBValueRepeat(modPosBox.PosType, modDevice.DbNumber, modPosBox.PlcPos, boxInfo.BoxNo));
                            // 是否写入成功
                            if (listResult.All(s => s.IsSucceed))
@@ -2882,12 +2986,20 @@
        }
    }
    private static void LedDisplay(string ip,string text)
    private static void LedDisplay(string ip,string text,int type=0)
    {
        try
        {
            LedDll Led = new LedDll();
            Led.ConsoleLeds(ip, text);
            if (type == 0)
            {
                Led.ConsoleLeds(ip, text);
            }
            else
            {
                Led.LEDstr(ip, text);
            }
            // 设置实例
            //Led.ConsoleLeds("10.18.51.238", $"任务类型:{TaskTypeEnum.Move.GetDescription()}\n\n任务号:TK2024102100001\n托盘号:LN000145\n\n起始位:033\n目标位:R01-02010102");
        }
@@ -2928,9 +3040,9 @@
            {
                #region#给PLC写入结批批次号
                var listResult = new List<Result>();
                listResult.Add(plcConn.SetPlcDBValue(item.PosType, item.DbNumber, item.PlcPos, "0"));//品种号
                listResult.Add(plcConn.SetPlcDBValue(item.PosTypeLot, item.DbNumber, item.PosLot, ""));//批次号
                listResult.Add(plcConn.SetPlcDBValue(item.PosTypeStatus, item.DbNumber, item.PosStatus, "0"));//绑定状态 0:未绑定 1:已绑定
                listResult.Add(plcConn.SetPlcDBValueRepeat(item.PosType, item.DbNumber, item.PlcPos, "0"));//品种号
                listResult.Add(plcConn.SetPlcDBValueRepeat(item.PosTypeLot, item.DbNumber, item.PosLot, ""));//批次号
                listResult.Add(plcConn.SetPlcDBValueRepeat(item.PosTypeStatus, item.DbNumber, item.PosStatus, "0"));//绑定状态 0:未绑定 1:已绑定
                if (listResult.All(s => s.IsSucceed))
                {
                    // 写入组托回复流程字