/// <summary> /// Генерирование таблицы привязок /// </summary> void GenModBusTable() { try { ModbusTable mb = new ModbusTable(); mb.LoadSource(Devices.ToList <Device>()); mb.Generate(); SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "XML documents (*.xml)|*.xml|All files (*.*)|*.*"; AppSettings settings = AppSettings.GetSettings(); if (!string.IsNullOrEmpty(settings.DefaultOutFilePath)) { saveFileDialog.InitialDirectory = settings.DefaultOutFilePath; } if (saveFileDialog.ShowDialog() == true) { settings.DefaultOutFilePath = saveFileDialog.FileName; mb.Save(settings.DefaultOutFilePath); AppSettings.SetSettings(settings); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
public static ushort ModifyToModbusRegisterAddress(ushort startAddr, ModbusTable funcCode) { switch (funcCode) { case ModbusTable.Coils: return(Convert.ToUInt16(1 + startAddr)); // coils case ModbusTable.Contacts: return(Convert.ToUInt16(10001 + startAddr)); // contacts case ModbusTable.Holdings: return(Convert.ToUInt16(40001 + startAddr)); // holdings case ModbusTable.Inputs: return(Convert.ToUInt16(30001 + startAddr)); // inputs } throw new NotImplementedException(); }
private static void AddLogikaIndexArrays(XElement parentElement, List <RequestData> parameters) { byte dad = 0, sad = 0, nodeAddr = 0; int channel = 0, parameter = 0, answerWait = 0, arrayFirstIndex = 0, arrayItemsCount = 0; ModbusTable modbusTable = ModbusTable.None; LogikaParam paramKind = LogikaParam.Parameter; ushort startAddr = 0; string dataFormat = "", node = "Logika", tag = "*"; bool good = true; foreach (XElement logikaNodeElement in parentElement.Element("Runtime").Elements("LogikaNode")) { var element = logikaNodeElement.Element("Dad"); if (element == null || !byte.TryParse(element.Value, out dad)) { good = false; } element = logikaNodeElement.Element("Sad"); if (element == null || !byte.TryParse(element.Value, out sad)) { good = false; } element = logikaNodeElement.Element("Node"); if (element != null) { node = element.Value; } else { good = false; } element = logikaNodeElement.Element("ModbusNode"); if (element == null || !byte.TryParse(element.Value, out nodeAddr)) { good = false; } foreach (var item in logikaNodeElement.Elements("LogikaIndexArray")) { element = item.Element("Tag"); if (element != null) { tag = element.Value; } else { good = false; } element = item.Element("Channel"); if (element == null || !int.TryParse(element.Value, out channel)) { good = false; } element = item.Element("Parameter"); if (element != null) { paramKind = LogikaParam.Parameter; if (!int.TryParse(element.Value, out parameter)) { good = false; } } else { element = item.Element("ArrayNumber"); if (element != null) { paramKind = LogikaParam.IndexArray; if (!int.TryParse(element.Value, out parameter)) { good = false; } element = item.Element("IndexFirst"); if (element == null || !int.TryParse(element.Value, out arrayFirstIndex)) { good = false; } element = item.Element("ItemsCount"); if (element == null || !int.TryParse(element.Value, out arrayItemsCount)) { good = false; } } else { good = false; } } element = item.Element("DataFormat"); if (element != null) { dataFormat = element.Value; } else { good = false; } element = item.Element("AnswerWait"); if (element == null || !int.TryParse(element.Value, out answerWait)) { good = false; } element = item.Element("InputRegister"); if (element != null) { modbusTable = ModbusTable.Inputs; if (!ushort.TryParse(element.Value, out startAddr)) { good = false; } } else { element = item.Element("HoldingRegister"); if (element != null) { modbusTable = ModbusTable.Holdings; if (!ushort.TryParse(element.Value, out startAddr)) { good = false; } } else { good = false; } } if (good) { for (var i = 0; i < arrayItemsCount; i++) { parameters.Add(new RequestData() { Node = node, Tag = tag, Dad = dad, Sad = sad, Channel = channel, ParameterKind = paramKind, Parameter = parameter, ArrayIndexNumber = arrayFirstIndex + i, Archived = arrayFirstIndex + i > 0, NodeAddr = nodeAddr, StartAddr = startAddr, ModbusTable = modbusTable, FormatData = dataFormat, AnswerWait = answerWait }); startAddr += 2; } } } } }