using JinYuan.Helper; using JinYuan.MES.Models; using JinYuan.Models; using JinYuan.VirtualDataLibrary; using Language; using PLCCommunication; using PLCCommunication.Common; using PLCCommunication.Modbus; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; using static System.Windows.Forms.LinkLabel; namespace JinYuan.ControlCenters { public partial class ControlCenter { #region 刷新12小时产能 public int GetHour() { DateTime now = DateTime.Now; int nowHour = Convert.ToInt32($"{now.Hour}30"); int hour = 0; if (CommonMethods.LastHour != nowHour) { hour = Convert.ToInt32($"{now.Hour - 1}30"); if (now.Hour == 0) { hour = 2330; } } else { hour = Convert.ToInt32($"{now.Hour}30"); } return hour; } public void Refresh12HourProdQty() { List chart12Hours = new List(); DateTime dtTime = DateTime.Now; string strDate = dtTime.ToString("yyyy-MM-dd"); string nextDate = dtTime.AddDays(1).ToString("yyyy-MM-dd"); int Hour = GetHour(); var listTotal = CommonMethods.db.QueryWhereList(t => t.FDate == strDate || t.FDate == nextDate);// 查询两天的数据 if (listTotal != null && listTotal.Count > 0) { for (int i = 0; i < 24; i++) // 改为24小时 { int currentHour = (i + 8) % 24; // 从8点开始 int nextHour = (currentHour + 1) % 24; string currentDate = currentHour >= 8 ? strDate : nextDate; var hour1 = listTotal.Where(p => p.FDate == currentDate && p.FHour == currentHour).FirstOrDefault(); int ProdALLQty = 0; int ProdOKQty = 0; int ProdNGQty = 0; string strOkRatio = "0.00"; if (hour1 != null) { ProdALLQty = hour1.ProdIn; ProdOKQty = hour1.ProdOut; } ProdNGQty = ProdALLQty - ProdOKQty; if (ProdOKQty >= 0 && ProdALLQty > 0) { strOkRatio = (Math.Round(decimal.Parse(ProdOKQty.ToString()) / decimal.Parse(ProdALLQty.ToString()), 4)).ToString(); } string displayTime = $"{currentHour:D2}:30~{nextHour:D2}:29"; chart12Hours.Add(new Chart12HourData() { DisplayTime = displayTime, ProdIn = ProdALLQty, ProdOut = ProdOKQty, ProdNg = ProdNGQty, OKRatio = strOkRatio }); } } else { for (int i = 0; i < 24; i++) { int currentHour = (i + 8) % 24; int nextHour = (currentHour + 1) % 24; Random rand = new Random(); int ranOK = rand.Next(1000, 3000); int ranNG = rand.Next(400, 1200); int total = ranOK + ranNG; string displayTime = $"{currentHour:D2}:30~{nextHour:D2}:29"; string strOkRatio = (Math.Round(decimal.Parse(ranOK.ToString()) / decimal.Parse(total.ToString()), 4)).ToString(); chart12Hours.Add(new Chart12HourData() { DisplayTime = displayTime, ProdIn = ranOK + ranNG, ProdOut = ranOK, ProdNg = ranNG, OKRatio = strOkRatio // 保留2位小数,添加% }); } } if (chart12Hours != null) { CommonMethods.Lst_Prod12HourData = chart12Hours; } } #endregion #region 检测项不良 /// /// 读取检测项不良 /// private void GetDefectTypeQty() { try { if (CommonMethods.Lst_DefectTypeQty.Count <= 0) { //CommonMethods.Lst_DefectTypeQty.Add(new ChartDataType { DataType = "极性检测不良".Translated(), DataCount = 0 }); //CommonMethods.Lst_DefectTypeQty.Add(new ChartDataType { DataType = "称重不良".Translated(), DataCount = 0 }); //CommonMethods.Lst_DefectTypeQty.Add(new ChartDataType { DataType = "铜极耳剪切不良".Translated(), DataCount = 0 }); //CommonMethods.Lst_DefectTypeQty.Add(new ChartDataType { DataType = "铝极耳剪切不良".Translated(), DataCount = 0 }); //CommonMethods.Lst_DefectTypeQty.Add(new ChartDataType { DataType = "厚度不良", DataCount = 0 }); //CommonMethods.Lst_DefectTypeQty.Add(new ChartDataType { DataType = "焊前CCD正极耳顶面不良", DataCount = 0 }); CommonMethods.Lst_DefectTypeQty.Add(new ChartDataType { DataType = "扫码不良".Translated(), DataCount = 0 }); CommonMethods.Lst_DefectTypeQty.Add(new ChartDataType { DataType = "MES不良".Translated(), DataCount = 0 }); CommonMethods.Lst_DefectTypeQty.Add(new ChartDataType { DataType = "其他不良".Translated(), DataCount = 0 }); } else //读取PLC数据 { if (CommonMethods.plcDevices[0] != null && CommonMethods.plcDevices[0].IsConnected) { Task.Run(() => { try { int ProdDRFIDNgQty = CommonMethods.plcDevices[0].ReadInt16("D1000");//扫码不良 int ProdDXNgQty = CommonMethods.plcDevices[0].ReadInt16("D1001");//MES不良 int ProdGRFIDNgQty = CommonMethods.plcDevices[0].ReadInt16("D1002");//其他不良 //int ProdDRFIDNgQty = CommonMethods.plcDevices[0].ReadInt16("D1000");//极性检测不良 //int ProdDXNgQty = CommonMethods.plcDevices[0].ReadInt16("D1002");//称重不良 //int ProdGRFIDNgQty = CommonMethods.plcDevices[0].ReadInt16("D1006");//铜极耳剪切不良 //int ProdYLZNgQty = CommonMethods.plcDevices[0].ReadInt16("D1004");//铝极耳剪切不良 //從PLC讀取數據賦值給到NGList CommonMethods.Lst_DefectTypeQty.Where(p => p.DataType == "扫码不良".Translated()).FirstOrDefault().DataCount = ProdDRFIDNgQty; CommonMethods.Lst_DefectTypeQty.Where(p => p.DataType == "MES不良".Translated()).FirstOrDefault().DataCount = ProdDXNgQty; CommonMethods.Lst_DefectTypeQty.Where(p => p.DataType == "其他不良".Translated()).FirstOrDefault().DataCount = ProdGRFIDNgQty; //CommonMethods.Lst_DefectTypeQty.Where(p => p.DataType == "铝极耳剪切不良".Translated()).FirstOrDefault().DataCount = ProdYLZNgQty; } catch (Exception ex) { LogHelper.Instance.WriteEX(ex); } }); } } } catch (Exception ex) { LogHelper.Instance.WriteEX(ex); } } #endregion #region 智能电表 ---默认D1100开始 public void GetEnergyData() { ModbusRtu busRtuClient = new ModbusRtu(); if (CommonMethods.plcDevices.Count > 0 && CommonMethods.plcDevices[0] != null && CommonMethods.plcDevices[0].IsConnected) { List listM = new List(); List ListF = new List(); List listAddre = new List() { "D1100","D1102","D1104","D1106","D1108","D1110","D1112","D1114","D1116","D1118","D1120","D1122","D1124","D1126" }; try { ElectricEnergy m = new ElectricEnergy(); //for (int i = 0; i < listAddre.Count; i++) //{ // ListF.Add(CommonMethods.plcDevices[0].ReadFloat(listAddre[i])); //} //m.AccumulatedElectricity = (Decimal)ListF[0]; //有功电能(累计电能)D1100 //m.PhaseVoltageA = (Decimal)ListF[1]; ; //A相电压 D1102 //m.PhaseVoltageB = (Decimal)ListF[2]; ;//B相电压 D1104 //m.PhaseVoltageC = (Decimal)ListF[3]; ;//C相电压 D1106 //m.PhaseCurrentA = (Decimal)ListF[4]; ; //电流IA D1108 //m.PhaseCurrentB = (Decimal)ListF[5]; ;//电流IB D1110 //m.PhaseCurrentC = (Decimal)ListF[6]; ;//电流IC D1112 //m.PhasePowerA = (Decimal)ListF[7]; ; //A相有功功率 D1114 //m.PhasePowerB = (Decimal)ListF[8]; ; //B相有功功率 D1116 //m.PhasePowerC = (Decimal)ListF[9]; ;//C相有功功率 D1118 //m.ActivePower = (Decimal)ListF[10]; ; //总有功功率 D1120 //m.PowerFactor = (Decimal)ListF[11]; ; //总功率因数 D1122 //m.pt = (Decimal)ListF[12]; ; //电压变比 D1124 //m.ct = (Decimal)ListF[13]; ; //电流变比 D1126 //listM.Add(m); //CommonMethods.listElectricEnergy = listM; //return; busRtuClient.SerialPortInni(sp => { sp.PortName = "COM3"; sp.BaudRate = 9600; sp.DataBits = 8; sp.StopBits = System.IO.Ports.StopBits.One; sp.Parity = System.IO.Ports.Parity.None; }); busRtuClient.DataFormat = (PLCCommunication.Common.DataFormat)DataFormat.CDAB; busRtuClient.Open(); // 打开 if (busRtuClient.IsOpen()) { // 读取数据 JYResult readResult = busRtuClient.Read("35", 30); JYResult readResult1 = busRtuClient.Read("3", 2); if (readResult.IsSuccess && readResult1.IsSuccess) { //DPT Byte DptH = busRtuClient.ByteTransform.TransByte(readResult.Content, 0);//高8位 Byte DptL = busRtuClient.ByteTransform.TransByte(readResult.Content, 1);//低8位 //DPQ Byte DpqH = busRtuClient.ByteTransform.TransByte(readResult.Content, 2);//高8位 Byte DpqL = busRtuClient.ByteTransform.TransByte(readResult.Content, 3);//低8位 //m = new ElectricEnergy(); Decimal q = busRtuClient.ByteTransform.TransUInt16(readResult.Content, 56); Decimal w = busRtuClient.ByteTransform.TransUInt16(readResult.Content, 58); m.pt = Convert.ToDecimal(busRtuClient.ByteTransform.TransInt16(readResult1.Content, 0)); //电压变比 D1124 m.ct = Convert.ToDecimal(busRtuClient.ByteTransform.TransInt16(readResult1.Content, 2)); //电流变比 D1126 Decimal Power = (q * 65536 + w) / 1000; m.AccumulatedElectricity = Convert.ToDecimal(Power * m.pt * m.ct); //有功电能(累计电能)D1100 ListF.Add((float)m.AccumulatedElectricity.Value); //电压 m.PhaseVoltageA = Convert.ToDecimal(busRtuClient.ByteTransform.TransUInt16(readResult.Content, 4) * Math.Pow(10, DptH - 4)); //A相电压 D1102 m.PhaseVoltageB = Convert.ToDecimal(busRtuClient.ByteTransform.TransUInt16(readResult.Content, 6) * Math.Pow(10, DptH - 4));//B相电压 D1104 m.PhaseVoltageC = Convert.ToDecimal(busRtuClient.ByteTransform.TransUInt16(readResult.Content, 8) * Math.Pow(10, DptH - 4));//C相电压 D1106 ListF.Add((float)m.PhaseVoltageA.Value); ListF.Add((float)m.PhaseVoltageB.Value); ListF.Add((float)m.PhaseVoltageC.Value); //电流 m.PhaseCurrentA = Convert.ToDecimal(busRtuClient.ByteTransform.TransUInt16(readResult.Content, 16) * Math.Pow(10, DptL - 4)); //电流IA D1108 m.PhaseCurrentB = Convert.ToDecimal(busRtuClient.ByteTransform.TransUInt16(readResult.Content, 18) * Math.Pow(10, DptL - 4));//电流IB D1110 m.PhaseCurrentC = Convert.ToDecimal(busRtuClient.ByteTransform.TransUInt16(readResult.Content, 20) * Math.Pow(10, DptL - 4));//电流IC D1112 ListF.Add((float)m.PhaseCurrentA.Value); ListF.Add((float)m.PhaseCurrentB.Value); ListF.Add((float)m.PhaseCurrentC.Value); //有功功率 m.PhasePowerA = Convert.ToDecimal(busRtuClient.ByteTransform.TransInt16(readResult.Content, 22) * Math.Pow(10, DpqH - 4)); //A相有功功率 D1114 m.PhasePowerB = Convert.ToDecimal(busRtuClient.ByteTransform.TransInt16(readResult.Content, 24) * Math.Pow(10, DpqH - 4)); //B相有功功率 D1116 m.PhasePowerC = Convert.ToDecimal(busRtuClient.ByteTransform.TransInt16(readResult.Content, 26) * Math.Pow(10, DpqH - 4));//C相有功功率 D1118 m.ActivePower = Convert.ToDecimal(busRtuClient.ByteTransform.TransInt16(readResult.Content, 28) * Math.Pow(10, DpqH - 4)); //总有功功率 D1120 ListF.Add((float)m.PhasePowerA.Value); ListF.Add((float)m.PhasePowerB.Value); ListF.Add((float)m.PhasePowerC.Value); ListF.Add((float)m.ActivePower.Value); m.PowerFactor = Convert.ToDecimal(busRtuClient.ByteTransform.TransInt16(readResult.Content, 44)) / 1000; //总功率因数 D1122 ListF.Add((float)m.PowerFactor.Value); ListF.Add((float)m.pt.Value); ListF.Add((float)m.ct.Value); for (int i = 0; i < ListF.Count; i++) { CommonMethods.plcDevices[0].WriteFloat(listAddre[i], ListF[i]); } listM.Add(m); CommonMethods.listElectricEnergy = listM; } else { TxtHelper.WriteTxt($@"D:\APILog\Logs\智能电表信息\{DateTime.Now.ToString("yyyy-MM-dd")}.txt", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "智能电表:读取数据失败"); } } else { TxtHelper.WriteTxt($@"D:\APILog\Logs\智能电表信息\{DateTime.Now.ToString("yyyy-MM-dd")}.txt", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "智能电表:串口打开失败"); } } catch (Exception ex) { TxtHelper.WriteTxt($@"D:\APILog\Logs\智能电表信息\{DateTime.Now.ToString("yyyy-MM-dd")}.txt", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + $"智能电表:{ex}"); } finally { if (busRtuClient.IsOpen()) { busRtuClient.Close(); } } } } public void GetEnergyDataFormPlc() { //if (CommonMethods.plcDevices.Count <= 0) { return; } if (CommonMethods.plcDevices[0] != null && CommonMethods.plcDevices[0].IsConnected && CommonMethods.energyMeter.IsConnected) { List listM = new List(); List ListF = new List(); List listAddre = new List() { //"D1100","D1102","D1104","D1106","D1108","D1110","D1112","D1114","D1116","D1118","D1120","D1122","D1124","D1126" "D1300","D1302","D1304","D1306","D1308","D1310","D1312","D1314","D1316","D1318","D1320","D1322","D1324","D1326" }; //00 00 00 00 00 06 报文头 //01 04 00 00 00 3E 不需要校验位 byte[] bytes = new byte[12]; bytes[0] = Convert.ToByte(01 >> 8); // Slave id high byte//事务元标识符,高字节在前,低字节在后 bytes[1] = Convert.ToByte(01);// Slave id low byte bytes[2] = 0x00;//协议标识符,高字节在前,低字节在后 (TCP 00) bytes[3] = 0x00; bytes[4] = 0x00;//后续字节长度,高字节在前,低字节在后 bytes[5] = 0x06; // Message size bytes[6] = 0x01; // Slave address bytes[7] = 0x04;//功能码04H // Function code bytes[8] = Convert.ToByte((00 >> 8) & 0xFF); // Start address//寄存器起始地址高字节m_unBeginWord bytes[9] = Convert.ToByte(00 & 0xFF); // Start address//寄存器起始地址低字节m_unBeginWord bytes[10] = Convert.ToByte((88 >> 8) & 0xFF); // Number of data to read//寄存器数量高字节m_unWordsCount bytes[11] = Convert.ToByte(88 & 0xFF); // Number of data to read//寄存器数量低字节m_unWordsCount 0x58 try { CommonMethods.energyMeter.SendAndGetRes(bytes, ref listM); #region 读取× //for (int i = 0; i < listAddre.Count; i++) //{ // float val = CommonMethods.plcDevices[0].ReadFloat(listAddre[i]); // ListF.Add(val); //} //ElectricEnergy m = new ElectricEnergy(); //m.AccumulatedElectricity = Convert.ToDecimal(ListF[0]); //m.PhaseVoltageA = Convert.ToDecimal(ListF[1]); //m.PhaseVoltageB = Convert.ToDecimal(ListF[2]); //m.PhaseVoltageC = Convert.ToDecimal(ListF[3]); //m.PhaseCurrentA = Convert.ToDecimal(ListF[4]); //m.PhaseCurrentB = Convert.ToDecimal(ListF[5]); //m.PhaseCurrentC = Convert.ToDecimal(ListF[6]); //m.PhasePowerA = Convert.ToDecimal(ListF[7]); //m.PhasePowerB = Convert.ToDecimal(ListF[8]); //m.PhasePowerC = Convert.ToDecimal(ListF[9]); //m.ActivePower = Convert.ToDecimal(ListF[10]); //m.PowerFactor = Convert.ToDecimal(ListF[11]); //m.pt = Convert.ToDecimal(ListF[12]); //m.ct = Convert.ToDecimal(ListF[13]); //listM.Add(m); #endregion foreach (ElectricEnergy energy in listM) { CommonMethods.plcDevices[0].WriteFloat(listAddre[0], (float)energy.AccumulatedElectricity); CommonMethods.plcDevices[0].WriteFloat(listAddre[1], (float)energy.PhaseVoltageA); CommonMethods.plcDevices[0].WriteFloat(listAddre[2], (float)energy.PhaseVoltageB); CommonMethods.plcDevices[0].WriteFloat(listAddre[3], (float)energy.PhaseVoltageC); CommonMethods.plcDevices[0].WriteFloat(listAddre[4], (float)energy.PhaseCurrentA); CommonMethods.plcDevices[0].WriteFloat(listAddre[5], (float)energy.PhaseCurrentB); CommonMethods.plcDevices[0].WriteFloat(listAddre[6], (float)energy.PhaseCurrentC); CommonMethods.plcDevices[0].WriteFloat(listAddre[7], (float)energy.PhasePowerA); CommonMethods.plcDevices[0].WriteFloat(listAddre[8], (float)energy.PhasePowerB); CommonMethods.plcDevices[0].WriteFloat(listAddre[9], (float)energy.PhasePowerC); CommonMethods.plcDevices[0].WriteFloat(listAddre[10], (float)energy.ActivePower); CommonMethods.plcDevices[0].WriteFloat(listAddre[11], (float)energy.PowerFactor); CommonMethods.plcDevices[0].WriteFloat(listAddre[12], (float)energy.pt); CommonMethods.plcDevices[0].WriteFloat(listAddre[13], (float)energy.ct); } CommonMethods.listElectricEnergy = listM; } catch (Exception ex) { TxtHelper.WriteTxt($@"D:\APILog\Logs\智能电表信息\{DateTime.Now.ToString("yyyy-MM-dd")}.txt", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + $"智能电表:{ex}"); } } } /// /// 能耗上传MES /// public async void UploadEquEnergy() { if (CommonMethods.listElectricEnergy.Count > 0) { if (CommonMethods.mesConfig.isUpMes) { string msg = string.Empty; DateTime nowDate = DateTime.Now; string filePath = string.Empty; string fileName = string.Empty; string fileTitle = string.Empty; string fileContent = string.Empty; List listP = new List(); int i = 0; foreach (ElectricEnergy m in CommonMethods.listElectricEnergy) { WattrMeter param = new WattrMeter(); param.siteCode = CommonMethods.mesConfig.siteCode; param.lineCode = CommonMethods.mesConfig.lineCode; param.equipNum = CommonMethods.mesConfig.equipNum; param.userName = CommonMethods.mesConfig.mesUserName; param.electricMeterNum = CommonMethods.mesConfig.electricMeterNum[i]; param.recordDate = nowDate.ToString("yyyy-MM-dd HH:mm:ss"); param.accumulatedElectricity = (decimal)m.AccumulatedElectricity; param.phaseVoltageA = (decimal)m.PhaseVoltageA; param.phaseVoltageB = (decimal)m.PhaseVoltageB; param.phaseVoltageC = (decimal)m.PhaseVoltageC; param.phaseCurrentA = (decimal)m.PhaseCurrentA; param.phaseCurrentB = (decimal)m.PhaseCurrentB; param.phaseCurrentC = (decimal)m.PhaseCurrentC; param.phasePowerA = (decimal)m.PhasePowerA; param.phasePowerB = (decimal)m.PhasePowerB; param.phasePowerC = (decimal)m.PhasePowerC; param.activePower = (decimal)m.ActivePower; param.powerFactor = (decimal)m.PowerFactor; param.pt = (decimal)m.pt; param.ct = (decimal)m.ct; listP.Add(param); i++; // 写csv文件 string productName = string.Empty; filePath = $@"{CommonMethods.strWattrMeterpath}\{nowDate.Year}\{nowDate.Month}"; fileName = $@"{nowDate.Day}.csv"; fileTitle = "工序名称,生产机台编号,拉线,型号,物料编号,操作人员,班次,电表编号,采集时间,有功电能(累计电能)KwH,A相电压 V,B相电压 V,C相电压 V,A相电流 A,B相电流 A,C相电流 A,A相功率 Kw,B相功率 Kw,C相功率 Kw,总有功功率 Kw,总功率因数 %,电压变比,电流变比"; fileContent = $"包装工序,{CommonMethods.mesConfig.equipNum},{CommonMethods.mesConfig.lineCode},{productName},{CommonMethods.mesConfig.MaterialCode},{CommonMethods.mesConfig.mesUserName},{CommonMethods.strClass},{param.electricMeterNum},{nowDate.ToString("yyyy-MM-dd HH:mm:ss")}," + $"{param.accumulatedElectricity},{param.phaseVoltageA},{param.phaseVoltageB},{param.phaseVoltageC},{param.phaseCurrentA},{param.phaseCurrentB},{param.phaseCurrentC}," + $"{param.phasePowerA},{param.phasePowerB},{param.phasePowerC},{param.activePower},{param.powerFactor},{param.pt},{param.ct}"; CSVHelper.WriterCSV(filePath, fileName, fileTitle, fileContent); } //上传MES var (success, mesg) = await CommonMethods.hbgMes.UploadEquEnergyAsync(CommonMethods.mesConfig.EnergyConsumption, CommonMethods.mesConfig.equipNum, CommonMethods.mesConfig.siteCode, CommonMethods.mesConfig.lineCode, CommonMethods.mesConfig.mesUserName, CommonMethods.mesConfig.electricMeterNum, listP); } } } public static byte[] CalculateCRCTemp(ref byte[] messageArray, int dataLength) { byte usCRCHi = 0xFF; byte usCRCLo = 0xFF; byte[] returnResult = { 0x00, 0x00 }; int index = 0; int messageIndex = 0; while (dataLength > 0) { index = usCRCLo ^ messageArray[messageIndex]; usCRCLo = Convert.ToByte(usCRCHi ^ crcHi[index]); usCRCHi = crcLo[index]; messageIndex++; dataLength--; } //0th item is crcLo returnResult[0] = usCRCLo; //1st item is crcHi returnResult[1] = usCRCHi; //2nd item is the total CRC16. //returnResult[2] = Convert.ToByte((usCRCHi << 8 | usCRCLo)); return returnResult; } static byte[] crcHi = { 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40 }; static byte[] crcLo = { 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, 0x40 }; #endregion #region 定期清理本地保存下料数据 /// /// 定期清理本地保存下料数据 /// public void DeleteFileOfLocal() { try { //string filePath = string.Format(@"{0}\Data\{1}", Application.StartupPath, DateTime.Now.AddDays(-365).Year); string filePath = string.Format(@"{0}\{1}", @"D:\LocalData", DateTime.Now.AddYears(-1).Year); if (Directory.Exists(filePath)) { //判断是否有子文件夹,循环删除 for (int i = 1; i <= DateTime.Now.Month; i++) { string tempPath = string.Format(@"{0}\{1}", filePath, i); if (Directory.Exists(tempPath)) { LogCLear_DirOrFile("下料本地文件", DateTime.Now, tempPath, 365); } } //没有子文件夹,删除目录 DirectoryInfo[] DirList = GetSubcatalog(filePath);//获取文件路径 if (DirList != null)//目录存在 { if (DirList.Length == 0) { Directory.Delete(filePath, true); Thread.Sleep(10); } } } } catch (Exception ex) { LogHelper.Instance.WriteLog($"定期清理本地保存下料数据异常:{ex.ToString()}", "Info"); } } /// 清理指定目录下的文件夹或文件 /// 清理文件注释 /// 当前时间 /// 文件目录 /// 保留天数 public void LogCLear_DirOrFile(string strName, DateTime CurrentTime, string FilePath, uint RtnDayNums) { long time = 0; Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); bool b_OK = true; LogHelper.Instance.WriteLog($"清理{strName}开始", "Info"); try { DirectoryInfo[] DirList = GetSubcatalog(FilePath);//获取文件路径 if (DirList != null)//目录不存在 { if (DirList.Length != 0)//目录是否有子文件夹:如 文件夹“2021-10-31” { #region 删文件夹 foreach (var dirInfo in DirList)//循环删除文件夹 { DateTime itemDateTime = dirInfo.CreationTime;//获取文件夹创建日期 if (CurrentTime.AddDays(-RtnDayNums) > itemDateTime) { if (dirInfo.Exists) { dirInfo.Delete(true); Thread.Sleep(10); } } } #endregion } else//目录下无子文件夹存在时,判断是否有文件 { string[] fileList = null; if (Directory.Exists(FilePath)) { //获取文件列表 fileList = Directory.GetFiles(FilePath); if (fileList != null)//目录不存在 { if (fileList.Length != 0)//目录下是否存在文件 { #region 删除文件 foreach (var filePath in fileList)//循环删除文件 { DateTime itemDateTime = new FileInfo(filePath).LastWriteTime;//获取文件修改日期 if (CurrentTime.AddDays(-RtnDayNums) > itemDateTime) { if (File.Exists(filePath)) { File.Delete(filePath); Thread.Sleep(2); } } } #endregion } else { #region 删除文件夹 Directory.Delete(FilePath, true); #endregion } } } } } b_OK = true; } catch (Exception) { b_OK = false; } stopWatch.Stop(); time = stopWatch.ElapsedMilliseconds; LogHelper.Instance.WriteLog($"{FilePath},清理结束,结果;{b_OK},耗时:{time}", "Info"); } /// /// 获取指定目录中所有文件列表 /// /// 指定目录的绝对路径 public DirectoryInfo[] GetSubcatalog(string directoryPath) { DirectoryInfo dir = new DirectoryInfo(directoryPath); //如果目录存在 if (dir.Exists) { //获取文件列表 DirectoryInfo[] dirs = dir.GetDirectories(); return dirs; } else return null; } #endregion } }