111
cjs
2025-06-19 514e0b05b51f82203e716bc506c7cccb58e7434e
ams/Hanhe.iWCS.TaizhouGEMTwoProtocol/ERPService.cs
@@ -682,6 +682,85 @@
            CMMLog.Debug($"WriteItemInfo:End!");
        }
        /// <summary>
        /// 写入包装机物料信息
        /// </summary>
        /// <param name="plcInfo"></param>
        public static void WriteItemInfoTwo(Settings.PlcInfo plcInfo)
        {
            CMMLog.Debug($"WriteItemInfoTwo:Start!");
            try
            {
                //读取【翻页】通道数据
                var result = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
                {
                    dataNum = 1,
                    addr = plcInfo.FyReadAddr,
                    host = plcInfo.ip,
                    port = plcInfo.port
                });
                CMMLog.Debug($"WriteItemInfoTwo:读取【翻页】通道数据为:{JsonConvert.SerializeObject(result)}!");
                if (true) // result != null && result.errCode == 0
                {
                    // 示例:读出值为1 获取1~5编号的物料数据;读出值为2 获取6~10编号的物料数据 规则 result.result[0] * 5 - 4 起始编号
                    //int startItemNo = 1;
                    int startItemNo = result.result[0] * 5 - 4;
                    CMMLog.Debug($"WriteItemInfoTwo:翻页数据为:{startItemNo}!");
                    var reLocationTask = MongoDBSingleton.Instance.Find<ERPItemTable>(Query.And(Query.In("item_no", new List<MongoDB.Bson.BsonValue>() { startItemNo, startItemNo + 1, startItemNo + 2, startItemNo + 3, startItemNo + 4 })), "ERPItemTable").ToList();
                    int reLocationTaskNum = reLocationTask != null ? reLocationTask.Count : 0;
                    CMMLog.Debug($"WriteItemInfoTwo:查询出ERP物料表数据数量为:{reLocationTaskNum}!备注:只有数量为5才会写入数据");
                    if (reLocationTaskNum == 5)
                    {
                        int no = 0;
                        reLocationTask.ForEach(a =>
                        {
                            int writeAddr = plcInfo.FyWriteAddr + no * 50;
                            if (no > 0) writeAddr = writeAddr + 40;
                            no++;
                            // 解析物料数据并写入 有效数据通道 50,50(产品型号-10 物料编码-15 物料名称-20 计量单位-5)
                            int[] num = new int[50];
                            // 内存地址 0~19 协议地址 1~20  批次号 人工输入,不需要程序写入
                            for (int i = 0; i <= 19; i++) num[i] = 0;
                            // 内存地址 20~29 协议地址 21~30 产品型号
                            // HandleItemInfo(a.item_spec, 20, 29, num);
                            HandleItemInfoChina(a.item_spec, 0, 9, num);
                            CMMLog.Debug($"WriteItemInfoTwo:物料信息处理-2。处理数据:{a.item_spec},处理后数据:{JsonConvert.SerializeObject(num)}");
                            // 内存地址 30~49 协议地址 31~50 物料编码
                            HandleItemInfo(a.item_code, 10, 24, num);
                            CMMLog.Debug($"WriteItemInfoTwo:物料信息处理-2。处理数据:{a.item_code},处理后数据:{JsonConvert.SerializeObject(num)}");
                            // 内存地址 50~64 协议地址 51~65 物料名称
                            // HandleItemInfo(a.item_name, 50, 64, num);
                            HandleItemInfoChina(a.item_name, 25, 44, num);// 中文处理
                            CMMLog.Debug($"WriteItemInfoTwo:物料信息处理-2。处理数据:{a.item_name},处理后数据:{JsonConvert.SerializeObject(num)}");
                            // 内存地址 65~69 协议地址 66~70 计量单位
                            HandleItemInfo(a.item_uom, 45, 49, num);
                            CMMLog.Debug($"WriteItemInfoTwo:物料信息处理-2。处理数据:{a.item_uom},处理后数据:{JsonConvert.SerializeObject(num)}");
                            CMMLog.Debug($"WriteItemInfoTwo:发送物料信息。序号:{a.item_no},ip:{plcInfo.ip},port:{plcInfo.port},写入起始地址:{writeAddr},写入数据:{JsonConvert.SerializeObject(num)}");
                            var wirteall01 = OITcpHelper.RegisterWriteOutPutMulti(new OITcpHelper.RegisterWriteOutPutModelMulti
                            {
                                addr = writeAddr,
                                host = plcInfo.ip,
                                port = plcInfo.port,
                                data = num
                            });
                            int writeResult = wirteall01 != null ? wirteall01.errCode : 1;
                            CMMLog.Debug($"WriteItemInfoTwo:发送物料信息。序号:{a.item_no},写入结果:{writeResult}。ip:{plcInfo.ip},port:{plcInfo.port},写入起始地址:{writeAddr},写入数据:{JsonConvert.SerializeObject(num)}");
                        });
                    }
                }
                else CMMLog.Debug($"WriteItemInfoTwo:未读取【翻页】通道数据!");
            }
            catch (Exception ex)
            {
                CMMLog.Debug($"WriteItemInfoTwo Error:{ex.Message}");
            }
            CMMLog.Debug($"WriteItemInfoTwo:End!");
        }
        public static void HandleItemInfo(string itemInfo,int startIndex, int endIndex , int[] num)
        {
            string data = itemInfo;// 要写入的处理后数据