quanzhou
2025-08-29 bd125c728f48a21729fbc12122b5c340059a9d13
PLC报警添加种类分别存储功能完善
2个文件已修改
69 ■■■■■ 已修改文件
src/Bro.M141.Process/M141Process.cs 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M141.Process/UI/UIPrinter.cs 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M141.Process/M141Process.cs
@@ -198,6 +198,7 @@
            Dictionary<string, List<int>> StateDIC = new Dictionary<string, List<int>>();
            List<string> AlarmTypeList = new List<string>();
            int numplc = 0;
            while (true)
@@ -297,9 +298,7 @@
                                var alrams = item1.AlarmDetails;
                                var plcdev = DeviceCollection.FirstOrDefault(u => u.Id == item1.plcname) as PLCBase;
                                foreach (var item in alrams.GroupBy(u => u.address))
                                {
                                    int add = item.Key;
@@ -340,40 +339,32 @@
                                    }
                                    //if (!StateDIC.ContainsKey(plcdev.Name))
                                    //{
                                    //       StateDIC[plcdev.Name] = new List<int>();
                                    //}
                                }
                                List<int> list = new List<int>();
                                Dictionary<string, AlarmTypeData> AlarmType = new Dictionary<string, AlarmTypeData>();
                                List<int> list = new List<int>();
                                foreach (var item in alrams)
                                {
                                    if (!AlarmType.ContainsKey(item.alarmtype))
                                    string key = item.alarmtype;
                                    if (!AlarmType.TryGetValue(key, out var alarmData))
                                    {
                                        AlarmType.Add(item.alarmtype, new AlarmTypeData()
                                        // 不存在,创建新的
                                        alarmData = new AlarmTypeData()
                                        {
                                            CSVhead = csvhead,
                                            CSVdata = csvdata,
                                        });
                                        };
                                        AlarmType.Add(item.alarmtype, alarmData);
                                        LogAsync(DateTime.Now, EnumHelper.LogLevel.Detail, $"报警{item.alarmname}类别{key}作为key加入AlarmType字典");
                                    }
                                    if (AlarmType.ContainsKey(item.alarmtype))
                                    {
                                        AlarmType[item.alarmtype].CSVhead += $",{item.alarmname}";
                                    alarmData.CSVhead += $",{item.alarmname}";
                                    alarmData.CSVdata += $",{(item.value == 1 ? "1" : "")}";
                                    alarmData.AlarmTypeValue.Add(item.value);
                                        AlarmType[item.alarmtype].CSVdata += $",{(item.value == 1 ? "1" : "")}";
                                        AlarmType[item.alarmtype].AlarmTypeValue.Add(item.value);
                                        LogAsync(DateTime.Now, EnumHelper.LogLevel.Detail, $"报警类别{item.alarmtype};数值{item.value}加入字典:AlarmType");
                                    }
                                }
                                foreach(var item in AlarmType.Keys)
                                {
@@ -384,13 +375,13 @@
                                    if (!StateDIC[key].SequenceEqual(list))
                                    {
                                        LogAsync(DateTime.Now, EnumHelper.LogLevel.Detail, $"{plcdev.Name}报警类型:{item}的信号发生变化");
                                        LogAsync(DateTime.Now, EnumHelper.LogLevel.Detail, $"{plcdev.Name}报警类型:{item}的信号发生变化,保存的数据为{AlarmType[item].CSVdata}");
                                        StateDIC[key].Clear();
                                        StateDIC[key].AddRange(list);
                                        CSVRecordAsync($"PLCstate_{key}.csv", AlarmType[item].CSVhead, AlarmType[item].CSVdata);
                                        CSVRecordAsync($"PLCstate_{DateTime.Now.ToString("yyyyMMdd")}_{key}.csv", AlarmType[item].CSVdata, AlarmType[item].CSVhead);
                                        var showdata = alrams.Where(u => u.value == 1).Select(u => u.alarmname).ToList();
@@ -411,9 +402,9 @@
                                }                                
                            }
                            catch
                            catch(Exception EXC)
                            {
                                LogAsync(DateTime.Now, EnumHelper.LogLevel.Error, $"PLC报警存储记录发生异常 {EXC.ToString()}");
                            }
                        }
                    }
@@ -449,7 +440,7 @@
        public class AlarmTypeData
        {
            public List <int> AlarmTypeValue;
            public List <int> AlarmTypeValue = new List<int>();
            public string CSVhead;
src/Bro.M141.Process/UI/UIPrinter.cs
@@ -149,16 +149,16 @@
                //g.DrawString("厂商", font, brush, (startX + 20) * Scale, (startY + 5) * Scale);//
                //g.DrawString("嘉彰科技", font2, brush, (startX + 140) * Scale, (startY + 4) * Scale);
                BarcodeWriter writer = new BarcodeWriter();
                writer.Format = BarcodeFormat.QR_CODE;
                QrCodeEncodingOptions options = new QrCodeEncodingOptions()
                {
                    DisableECI = true,//设置内容编码
                    CharacterSet = "UTF-8",  //设置二维码的宽度和高度
                    Width = 123,
                    Height = 123,
                    Margin = 1//设置二维码的边距,单位不是固定像素
                };
                //BarcodeWriter writer = new BarcodeWriter();
                //writer.Format = BarcodeFormat.QR_CODE;
                //QrCodeEncodingOptions options = new QrCodeEncodingOptions()
                //{
                //    DisableECI = true,//设置内容编码
                //    CharacterSet = "UTF-8",  //设置二维码的宽度和高度
                //    Width = 123,
                //    Height = 123,
                //    Margin = 1//设置二维码的边距,单位不是固定像素
                //};
                ////第二行数据
                //g.DrawRectangle(p, startX * Scale, (startY + 20) * Scale, 70 * Scale, 20 * Scale);