using System; using System.Collections.Generic; using System.Text; namespace ESPServer { /* * Описание параметра, который может придти от юнита */ class UnitValue { // Название параметра public string name; // Текущее значение public float value; // Сдвиг адреса, по которому это значение будет храниться в modbus public int addressOffset; } /* * Описание конкретного модуля (релейный, датчик, whatever) */ class Unit { // Айдишник юнита (мак-адрес) public string id; // Название (для генерации конфигов например) public string name; // Базовый адрес в модбасе public int baseAddress; // Значения которые есть в юните public Dictionary values; // текущий IP юнита public string ip; public UnitValue GetValue(string name) { if (!values.ContainsKey(name)) { return null; } return values[name]; } public int MinOffset { get { int min = int.MaxValue; foreach (var u in values) if (u.Value.addressOffset < min) min = u.Value.addressOffset; return min; } } public int MaxOffset { get { int max = int.MinValue; foreach (var u in values) if (u.Value.addressOffset > max) max = u.Value.addressOffset; return max; } } public bool HasAddress(int address) { foreach (var u in values) { if (u.Value.addressOffset + baseAddress == address) return true; } return false; } public virtual byte[] GetWriteCommand(int address, float value) { return null; } public virtual bool IsValueWritable(UnitValue v) { return false; } } }