| | |
| | | |
| | | Dictionary<string, List<int>> StateDIC = new Dictionary<string, List<int>>(); |
| | | List<string> AlarmTypeList = new List<string>(); |
| | | |
| | | |
| | | int numplc = 0; |
| | | while (true) |
| | |
| | | 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; |
| | |
| | | |
| | | } |
| | | |
| | | //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) |
| | | { |
| | |
| | | |
| | | 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(); |
| | | |
| | |
| | | |
| | | } |
| | | } |
| | | catch |
| | | catch(Exception EXC) |
| | | { |
| | | |
| | | LogAsync(DateTime.Now, EnumHelper.LogLevel.Error, $"PLC报警存储记录发生异常 {EXC.ToString()}"); |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | public class AlarmTypeData |
| | | { |
| | | public List <int> AlarmTypeValue; |
| | | public List <int> AlarmTypeValue = new List<int>(); |
| | | |
| | | public string CSVhead; |
| | | |