111
cjs
2025-06-20 c248264e3bc150d145fd38f76f468f938270782a
ams/Hanhe.iWCS.TaizhouGEMTwoProtocol/PLCControl.cs
@@ -22,6 +22,8 @@
using static Hanhe.iWCS.TaizhouGEMTwoProtocol.ProtocolAnalysis;
using log4net.Appender;
using System.Net.Configuration;
using static System.Runtime.CompilerServices.RuntimeHelpers;
using System.Reflection.Emit;
namespace Hanhe.iWCS.TaizhouGEMTwoProtocol
{
@@ -4144,107 +4146,198 @@
        internal static void CheckPackingLineFullThree(Settings.PlcInfo plc)
        {
            string trayCode = "";
            var result = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
            {
                dataNum = 25,
                addr = plc.readAddr,
                host = plc.ip,
                port = plc.port
            });
            if(result != null && result.errCode == 0)
            {
                if (result.result[0] == 1)
                {
                    //获取物料信息 根据托盘码区分
                    trayCode = RemoveNull(GetTrayCode(result.result.Skip(6).Take(3).ToArray()));//托盘码
                    var infoPack = MongoDBSingleton.Instance.FindOne<TimeCuoInfoComTwo>(Query.And(Query.EQ("trayCode", trayCode)), "TimeCuoInfoComTwo");
                    if (infoPack != null)
                    {
                        string empCode = RemoveNull(GetTrayCode(result.result.Skip(1).Take(5).ToArray()));//员工编码
                        string machineCode = RemoveNull(GetTrayCode(result.result.Skip(9).Take(1).ToArray()));//包装机号
                        int needWeight = Convert.ToInt32(Completion(result.result[10]) + Completion(result.result[11]), 2);//产品需求重量
                        int oneWeight = Convert.ToInt32(Completion(result.result[12]) + Completion(result.result[13]), 2);//单托毛重
                        int readWeight = Convert.ToInt32(Completion(result.result[14]) + Completion(result.result[15]), 2);//单托净重
                        int fcWeight = Convert.ToInt32(Completion(result.result[16]) + Completion(result.result[17]), 2);//单托复称重量
                        int trayType = Convert.ToInt32(Completion(result.result[18]), 2);//托盘类型
                        int addState = Convert.ToInt32(Completion(result.result[19]), 2);//叠包层数
                        int bagNumber = Convert.ToInt32(Completion(result.result[20]), 2);//袋号
                        int productTime = Convert.ToInt32(Completion(result.result[21]) + Completion(result.result[22]), 2);//生产日期
                        string timeCuoTwo = Convert.ToInt32(Completion(result.result[23]) + Completion(result.result[24]), 2).ToString(); //时间戳
                        UpdateBuilder updateBuilder = Update.Set("employeeId", empCode).Set("trayCode", trayCode).Set("packingMachineNumber", machineCode).Set("needWeight", needWeight)
                                                .Set("oneWeight", oneWeight).Set("realWeight", readWeight).Set("FCWeight", fcWeight).Set("trayType", trayType)
                                                .Set("isFold", addState).Set("bagNumber", bagNumber).Set("productData", productTime);
                        //产品批次号  产品型号 物料名称 计量单位均可在erp表中根据物料编码获取
                        result = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
                        {
                            dataNum = 15,
                            addr = plc.readAddr + 131,
                            host = plc.ip,
                            port = plc.port
                        });
                        string materialCode = RemoveNull(GetTrayCode(result.result.Skip(0).Take(15).ToArray()).Trim().ToString());
                        UpdateBuilder update = Update.Set("materialCode", materialCode).Set("createTime",DateTime.Now);
                        MongoDBSingleton.Instance.Update<TimeCuoInfoComTwo>(Query.EQ("trayCode", trayCode), update, UpdateFlags.None);
                        var writeRes = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
                        {
                            host = plc.ip,
                            addr = plc.writeAddr,
                            data = 1,
                            port = plc.port
                        });
                        CMMLog.Debug($"写入设备{plc.location}通道{plc.writeAddr}里面数据为1.");
                    }
                }
            }
            var xxPlc = Settings.GetPlcInfo().Where(a => a.deviceType == "27" && a.enable == 1).FirstOrDefault();
            if(xxPlc != null)
            {
                result = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
                {
                    dataNum = 1,
                    addr = plc.readAddr + 1,
                    host = plc.ip,
                    port = plc.port
                });
            CMMLog.Info($"下线口 ip:{plc.ip},port:{plc.port},addr:{plc.writeAddr + 1},reuslt:{JsonConvert.SerializeObject(result)}.");
                if(result != null && result.errCode == 0)
                {
                    if (result.result[0] == 1)
                    {
                        var resultTime = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
                        {
                            dataNum = 2,
                        dataNum = 26,
                            addr = plc.readAddr + 8,
                            host = plc.ip,
                            port = plc.port
                        });
                    CMMLog.Info($"下线口 ip:{plc.ip},port:{plc.port},addr:{plc.writeAddr + 8},reuslt:{JsonConvert.SerializeObject(resultTime)}.");
                        if (resultTime.errCode == 0)
                        {
                            string timeCuoData = (resultTime.result[0] * 65536 + resultTime.result[1]).ToString();
                            TimeCuoInfoComTwo time = null;
                            var timeTwo = MongoDBSingleton.Instance.Find<TimeCuoInfoComTwo>(Query.EQ("trayCode", trayCode), "TimeCuoInfoComTwo");
                            if(timeTwo.Count > 0)
                        string empCode = RemoveNull(GetTrayCode(resultTime.result.Skip(2).Take(5).ToArray()));//员工编码
                        string machineCode = RemoveNull(GetTrayCode(resultTime.result.Skip(10).Take(1).ToArray()));//包装机号
                        int needWeight = Convert.ToInt32(Completion(resultTime.result[11]) + Completion(resultTime.result[12]), 2);//产品需求重量
                        int oneWeight = Convert.ToInt32(Completion(resultTime.result[13]) + Completion(resultTime.result[14]), 2);//单托毛重
                        int readWeight = Convert.ToInt32(Completion(resultTime.result[15]) + Completion(resultTime.result[16]), 2);//单托净重
                        int fcWeight = Convert.ToInt32(Completion(resultTime.result[17]) + Completion(resultTime.result[18]), 2);//单托复称重量
                        int trayType = Convert.ToInt32(Completion(resultTime.result[19]), 2);//托盘类型
                        int addState = Convert.ToInt32(Completion(resultTime.result[20]), 2);//叠包层数
                        int bagNumber = Convert.ToInt32(Completion(resultTime.result[21]), 2);//袋号
                        int productTime = Convert.ToInt32(Completion(resultTime.result[22]) + Completion(resultTime.result[23]), 2);//生产日期
                        result = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
                            {
                                time = timeTwo.OrderBy(a => a.createTime).FirstOrDefault();
                                MongoDBSingleton.Instance.Update<TimeCuoInfoComTwo>(Query.EQ("_id", time._id),Update.Set("TimeCuo", timeCuoData));
                            }
                            string wmstaskno = "";
                            WMSHelper.WMSIn(plc.location, "time", ref wmstaskno, ref timeCuoData, timeCuoData, time.employeeId, true);
                        }
                    }
                }
                            dataNum = 15,
                            addr = plc.readAddr + 140,
                            host = plc.ip,
                            port = plc.port
                        });
                        CMMLog.Info($"下线口,ip:{plc.ip},port:{plc.port},addr:{plc.readAddr + 140},result:{JsonConvert.SerializeObject(result)}");
                        string materialCode = RemoveNull(GetTrayCode(result.result.Skip(0).Take(15).ToArray()).Trim().ToString());
                        CMMLog.Info($"下线口:timeCuoData:{timeCuoData},empCode:{empCode},machineCode:{machineCode},needWeight:{needWeight},oneWeight:{oneWeight},readWeight:{readWeight}" +
                            $",fcWeight:{fcWeight},trayType:{trayType},addState:{addState},bagNumber:{bagNumber},productTime:{productTime},TimeCuo:{timeCuoData}");
                        var timeTwo = MongoDBSingleton.Instance.FindOne<TimeCuoInfoComTwo>(Query.EQ("TimeCuo", timeCuoData), "TimeCuoInfoComTwo");
                        if (timeTwo == null)
                        {
                            MongoDBSingleton.Instance.Insert<TimeCuoInfoComTwo>(new TimeCuoInfoComTwo
                            {
                                timeCuo = timeCuoData,
                                employeeId = empCode,
                                packingMachineNumber = machineCode,
                                needWeight = needWeight,
                                oneWeight = oneWeight,
                                realWeight = readWeight,
                                FCWeight = fcWeight,
                                trayType = trayType.ToString(),
                                isFold = addState,
                                bagNumber = bagNumber,
                                productData = productTime.ToString(),
                                TimeCuo = timeCuoData,
                                materialCode = materialCode
                            }, "TimeCuoInfoComTwo");
            }
            else
            {
                CMMLog.Info("下线口设备未配置");
                            var query1 = Query.EQ("TimeCuo", timeCuoData);
                            UpdateBuilder updateBuilder = Update.Set("employeeId", empCode).Set("packingMachineNumber", machineCode).Set("needWeight", needWeight)
                                                    .Set("oneWeight", oneWeight).Set("realWeight", readWeight).Set("FCWeight", fcWeight).Set("trayType", trayType.ToString())
                                                    .Set("isFold", addState).Set("bagNumber", bagNumber).Set("productData", productTime.ToString()).Set("TimeCuo", timeCuoData)
                                                    .Set("materialCode", materialCode);
                            MongoDBSingleton.Instance.Update<TimeCuoInfoComTwo>(query1, updateBuilder, "TimeCuoInfoComTwo", UpdateFlags.None);
            }
                        string wmstaskno = "";
                        WMSHelper.WMSIn(plc.location, "time", ref wmstaskno, ref timeCuoData, timeCuoData, empCode, true);
                    }
                }
            }
            //string trayCode = "";
            //var result = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
            //{
            //    dataNum = 25,
            //    addr = plc.readAddr,
            //    host = plc.ip,
            //    port = plc.port
            //});
            //CMMLog.Info($"贴标机获取信息,ip:{plc.ip},port:{plc.port},addr:{plc.readAddr},result:{JsonConvert.SerializeObject(result)}");
            //if(result != null && result.errCode == 0)
            //{
            //    if (result.result[0] == 1)
            //    {
            //        //获取物料信息 根据托盘码区分
            //        trayCode = RemoveNull(GetTrayCode(result.result.Skip(6).Take(3).ToArray()));//托盘码
            //
            //        if (!string.IsNullOrEmpty(trayCode))
            //        {
            //            var infoPack = MongoDBSingleton.Instance.FindOne<TimeCuoInfoComTwo>(Query.And(Query.EQ("trayCode", trayCode)), "TimeCuoInfoComTwo");
            //            if (infoPack == null)
            //            {
            //                string empCode = RemoveNull(GetTrayCode(result.result.Skip(1).Take(5).ToArray()));//员工编码
            //                string machineCode = RemoveNull(GetTrayCode(result.result.Skip(9).Take(1).ToArray()));//包装机号
            //                int needWeight = Convert.ToInt32(Completion(result.result[10]) + Completion(result.result[11]), 2);//产品需求重量
            //                int oneWeight = Convert.ToInt32(Completion(result.result[12]) + Completion(result.result[13]), 2);//单托毛重
            //                int readWeight = Convert.ToInt32(Completion(result.result[14]) + Completion(result.result[15]), 2);//单托净重
            //                int fcWeight = Convert.ToInt32(Completion(result.result[16]) + Completion(result.result[17]), 2);//单托复称重量
            //                int trayType = Convert.ToInt32(Completion(result.result[18]), 2);//托盘类型
            //                int addState = Convert.ToInt32(Completion(result.result[19]), 2);//叠包层数
            //                int bagNumber = Convert.ToInt32(Completion(result.result[20]), 2);//袋号
            //                int productTime = Convert.ToInt32(Completion(result.result[21]) + Completion(result.result[22]), 2);//生产日期
            //                string timeCuoTwo = Convert.ToInt32(Completion(result.result[23]) + Completion(result.result[24]), 2).ToString(); //时间戳
            //
            //                UpdateBuilder updateBuilder = Update.Set("employeeId", empCode).Set("trayCode", trayCode).Set("packingMachineNumber", machineCode).Set("needWeight", needWeight)
            //                                        .Set("oneWeight", oneWeight).Set("realWeight", readWeight).Set("FCWeight", fcWeight).Set("trayType", trayType)
            //                                        .Set("isFold", addState).Set("bagNumber", bagNumber).Set("productData", productTime);
            //                //产品批次号  产品型号 物料名称 计量单位均可在erp表中根据物料编码获取
            //
            //                result = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
            //                {
            //                    dataNum = 15,
            //                    addr = plc.readAddr + 131,
            //                    host = plc.ip,
            //                    port = plc.port
            //                });
            //                CMMLog.Info($"贴标机,ip:{plc.ip},port:{plc.port},addr:{plc.readAddr + 131},result:{JsonConvert.SerializeObject(result)}");
            //                string materialCode = RemoveNull(GetTrayCode(result.result.Skip(0).Take(15).ToArray()).Trim().ToString());
            //                UpdateBuilder update = Update.Set("materialCode", materialCode).Set("createTime", DateTime.Now);
            //                MongoDBSingleton.Instance.Update<TimeCuoInfoComTwo>(Query.EQ("trayCode", trayCode), update, UpdateFlags.None);
            //
            //                var writeRes = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
            //                {
            //                    host = plc.ip,
            //                    addr = plc.writeAddr,
            //                    data = 1,
            //                    port = plc.port
            //                });
            //                CMMLog.Debug($"贴标机,写入 ip:{plc.ip},port:{plc.port},addr:{plc.writeAddr}的数据为1.");
            //            }
            //        }
            //    }
            //}
            //
            //var xxPlc = Settings.GetPlcInfo().Where(a => a.deviceType == "27" && a.enable == 1).FirstOrDefault();
            //if(xxPlc != null)
            //{
            //    if (CheckStartFree(plc.location))
            //    {
            //        result = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
            //        {
            //            dataNum = 1,
            //            addr = plc.readAddr + 1,
            //            host = plc.ip,
            //            port = plc.port
            //        });
            //
            //        CMMLog.Debug($"下线口 ip:{plc.ip},port:{plc.port},addr:{plc.writeAddr + 1},reuslt:{JsonConvert.SerializeObject(result)}.");
            //        if (result != null && result.errCode == 0)
            //        {
            //            if (result.result[0] == 1)
            //            {
            //                var resultTime = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
            //                {
            //                    dataNum = 2,
            //                    addr = plc.readAddr + 8,
            //                    host = plc.ip,
            //                    port = plc.port
            //                });
            //                CMMLog.Debug($"下线口 ip:{plc.ip},port:{plc.port},addr:{plc.writeAddr + 8},reuslt:{JsonConvert.SerializeObject(result)}.");
            //                if (resultTime.errCode == 0)
            //                {
            //                    string timeCuoData = (resultTime.result[0] * 65536 + resultTime.result[1]).ToString();
            //                    TimeCuoInfoComTwo time = null;
            //                    var timeTwo = MongoDBSingleton.Instance.Find<TimeCuoInfoComTwo>(Query.EQ("trayCode", trayCode), "TimeCuoInfoComTwo");
            //                    if (timeTwo.Count > 0)
            //                    {
            //                        time = timeTwo.OrderBy(a => a.createTime).FirstOrDefault();
            //                        MongoDBSingleton.Instance.Update<TimeCuoInfoComTwo>(Query.EQ("_id", time._id), Update.Set("TimeCuo", timeCuoData));
            //                    }
            //                    string wmstaskno = "";
            //                    WMSHelper.WMSIn(plc.location, "time", ref wmstaskno, ref timeCuoData, timeCuoData, time.employeeId, true);
            //                }
            //            }
            //        }
            //    }
            //}
            //else
            //{
            //    CMMLog.Info("下线口设备未配置");
            //}
        }
        #endregion