1
cjs
2025-07-02 fae1a7742f0d847a47a0f8d3d1235e4826f5d4c6
1
1个文件已修改
57 ■■■■■ 已修改文件
ams/Hanhe.iWCS.TaizhouGEMTwoProtocol/PLCControl.cs 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ams/Hanhe.iWCS.TaizhouGEMTwoProtocol/PLCControl.cs
@@ -1345,7 +1345,9 @@
            #endregion
            string pcHead = "";
            string pcTail = "";
            string cpHead = "";
            string cpTail = "";
            string mtHead = "";// 设备的真实物料编码
            #region  35~54 => 41~60 产品批次号
@@ -1354,12 +1356,17 @@
            CMMLog.Info($"41~60data1_1:{data}");
            if (data.Length % 2 != 0)
            {
                data = "0" + machineInfoTwo.lotNo;
                pcHead = "" + machineInfoTwo.lotNo.Substring(0, 1);
                //data = "0" + machineInfoTwo.lotNo;
                //pcHead = "" + machineInfoTwo.lotNo.Substring(0, 1);
                pcTail = machineInfoTwo.lotNo.Substring(data.Length - 1, 1) + "";
                CMMLog.Info($"pcTail:{pcTail}");
                data = machineInfoTwo.lotNo + " ";
            }
            CMMLog.Info($"41~60data1_2:{data}");
            //字符串长度 / 2 = 写入通道数量(两位一转) 列: 3L0050 写入三个通道
            int maxLength = 34 + (data.Length / 2);// data.Length / 2 至少为 1
            int maxLength2 = maxLength;
            int aa = 0;
            for (int i = 35; i <= maxLength; i++)
            {
@@ -1367,17 +1374,43 @@
                aa = aa + 2;
            }
            for (int x = maxLength + 1; x <= 54; x++) num[x] = 0;//将产品批次号无数据的通道全部置为 0
            CMMLog.Info($"num:{JsonConvert.SerializeObject(num)}");
            #endregion
            #region   55~64 => 61~70 产品型号(四钴产品型号有中文和英文)
            int maxLength3 = 0;
            if (Regex.IsMatch(ErpItemInfo.item_spec, @"[\u4e00-\u9fff]"))
            {
                ERPService.HandleItemInfoChina(ErpItemInfo.item_spec, 55, 64, num);// 中文处理 55~64 61~70
            }
            else
            {
                ERPService.HandleItemInfo(ErpItemInfo.item_spec, 55, 64, num);
                data = ErpItemInfo.item_spec;
                CMMLog.Info($"61~70data1_1:{data}");
                if (data.Length % 2 != 0)
                {
                    //data = "0" + machineInfoTwo.lotNo;
                    //pcHead = "" + machineInfoTwo.lotNo.Substring(0, 1);
                    cpTail = ErpItemInfo.item_spec.Substring(data.Length - 1, 1) + "";
                    CMMLog.Info($"cpTail:{cpTail}");
                    data = ErpItemInfo.item_spec + " ";
                }
                CMMLog.Info($"61~70data1_2:{data}");
                //字符串长度 / 2 = 写入通道数量(两位一转) 列: 3L0050 写入三个通道
                maxLength = 54 + (data.Length / 2);// data.Length / 2 至少为 1
                maxLength3 = maxLength;
                aa = 0;
                for (int i = 55; i <= maxLength; i++)
                {
                    num[i] = int.Parse(AsciiToTen(data.Substring(aa, 2)));
                    aa = aa + 2;
                }
                for (int x = maxLength3 + 1; x <= 64; x++) num[x] = 0;//将产品批次号无数据的通道全部置为 0
                CMMLog.Info($"num:{JsonConvert.SerializeObject(num)}");
                //ERPService.HandleItemInfo(ErpItemInfo.item_spec, 55, 64, num);
            }
            
@@ -1423,8 +1456,10 @@
            ERPService.HandleItemInfo(ErpItemInfo.item_uom, 100, 104, num);// 100~104 106~110
            // 如果 产品批次号 或者 产品型号 位数 为 奇数,则将提前取出的 首字符 重新转码 写入 其所对应通道区域的 首通道
            if (pcHead != "") num[35] = int.Parse(AsciiToTen(pcHead));
            if (cpHead != "") num[55] = int.Parse(AsciiToTen(cpHead));
            //if (pcHead != "") num[35] = int.Parse(AsciiToTen(pcHead));
            if (pcTail != "") num[maxLength2] = tailToTen(pcTail);
            //if (cpHead != "") num[55] = int.Parse(AsciiToTen(cpHead));
            if (cpHead != "") num[maxLength3] = int.Parse(AsciiToTen(cpTail));
            if (mtHead != "") num[65] = int.Parse(AsciiToTen(mtHead));
            if (pcHead != "" || cpHead != "") CMMLog.Info($"产品型号或批次号数量为奇数,特将首位取出单独处理,以下为批次号和产品型号的十进制数值{num[35]},{num[55]}");
@@ -1433,6 +1468,18 @@
            return num;
        }
        private static int tailToTen(string Tail)
        {
            char inputChar = Tail[0]; // 获取字符串的第一个字符
            int asciiValue = (int)inputChar; // 转换为ASCII码
            string hexValue = asciiValue.ToString("X2"); // 转换为16进制
            string binaryValue = Convert.ToString(asciiValue, 2).PadLeft(8, '0'); // 转换为8位二进制
            string finalBinaryValue = binaryValue + "00000000"; // 补8个二进制0
            int finalDecimalValue = Convert.ToInt32(finalBinaryValue, 2); // 转换为10进制
            return finalDecimalValue;
        }
        /// <summary>
        /// 三楼叠托机扫码
        /// </summary>