/// <summary> /// Конструктор стандартный /// </summary> /// <param name="devices">Список привязанных устройств</param> /// <param name="devicesChannels">Список привязанных каналов</param> /// <param name="moduleInfo">Информация о модуле ввода-вывода</param> public IOLinkCalculator(List <Device.IODevice>[] devices, List <Device.IODevice.IOChannel>[] devicesChannels, IOModuleInfo moduleInfo) { this.devices = devices; this.devicesChannels = devicesChannels; this.moduleInfo = moduleInfo; }
/// <summary> /// Конструктор. /// </summary> /// <param name="inAddressSpaceOffset">Смещение входного адресного /// пространства модуля.</param> /// <param name="outAddressSpaceOffset">Смещение выходного адресного /// пространства модуля.</param> /// <param name="info">Описание модуля.</param> /// <param name="physicalNumber">Физический номер (из ОУ) устройства. /// </param> /// <param name="function">Eplan функция модуля.</param> public IOModule(int inAddressSpaceOffset, int outAddressSpaceOffset, IOModuleInfo info, int physicalNumber, Eplan.EplApi.DataModel.Function function) { this.inAddressSpaceOffset = inAddressSpaceOffset; this.outAddressSpaceOffset = outAddressSpaceOffset; this.info = info; this.physicalNumber = physicalNumber; this.function = function; devicesChannels = new List <Device.IODevice.IOChannel> [80]; devices = new List <Device.IODevice> [80]; }
/// <summary> /// Получение описания модуля ввода-вывода IO на основе его имени. /// </summary> /// <param name="name">Имя модуля (750-860).</param> /// <param name="isStub">Признак не идентифицированного модуля.</param> public static IOModuleInfo GetModuleInfo(string name, out bool isStub) { isStub = false; IOModuleInfo res = modules.Find(x => x.Name == name); if (res != null) { return(res.Clone() as IOModuleInfo); } isStub = true; return(Stub); }
/// <summary> /// Добавить информацию о модуле ввода вывода /// </summary> /// <param name="number">Номер модуля ввода-вывода IO </param> /// <param name="name">Имя модуля ввода-вывода IO</param> /// <param name="description">Описание модуля ввода-вывода IO</param> /// <param name="addressSpaceTypeNum">Тип адресного пространства</param> /// <param name="typeName">Имя типа (дискретный выход и др.)</param> /// <param name="groupName">Имя серии (прим., 750-800)</param> /// <param name="channelClamps">Клеммы каналов ввода-вывода</param> /// <param name="channelAddressesIn">Адреса каналов ввода</param> /// <param name="channelAddressesOut">Адреса каналов вывода</param> /// <param name="DOCount">Количество дискретных выходов</param> /// <param name="DICount">Количество дискретных входов</param> /// <param name="AOCount">Количество аналоговых выходов</param> /// <param name="AICount">Количество аналоговых входов</param> /// <param name="colorAsString">Физический цвет модуля</param> public static void AddModuleInfo(int number, string name, string description, int addressSpaceTypeNum, string typeName, string groupName, int[] channelClamps, int[] channelAddressesIn, int[] channelAddressesOut, int DOCount, int DICount, int AOCount, int AICount, string colorAsString) { var addressSpaceType = (ADDRESS_SPACE_TYPE)addressSpaceTypeNum; Color color = Color.FromName(colorAsString); var moduleInfo = new IOModuleInfo(number, name, description, addressSpaceType, typeName, groupName, channelClamps, channelAddressesIn, channelAddressesOut, DOCount, DICount, AOCount, AICount, color); if (modules.Where(x => x.Name == moduleInfo.Name).Count() == 0) { modules.Add(moduleInfo); } }
/// <summary> /// Инициализировать модули информацию о модулях ввода-вывода. /// </summary> private void InitIOModulesInfo() { var lua = new LuaInterface.Lua(); const string fileName = "sys_io.lua"; const string templateName = "sysIOLuaFilePattern"; string pathToFile = Path.Combine( ProjectManager.GetInstance().SystemFilesPath, fileName); if (File.Exists(pathToFile)) { object[] result = lua.DoFile(pathToFile); if (result == null) { return; } var dataTables = result[0] as LuaInterface.LuaTable; foreach (var table in dataTables.Values) { var tableData = table as LuaInterface.LuaTable; int number = Convert.ToInt32((double)tableData["n"]); string name = (string)tableData["name"]; string description = (string)tableData["description"]; int addressSpaceTypeNumber = Convert.ToInt32( (double)tableData["addressSpaceType"]); string typeName = (string)tableData["typeName"]; string groupName = (string)tableData["groupName"]; var channelClamps = new List <int>(); var channelAddressesIn = new List <int>(); var channelAddrOut = new List <int>(); var channelClampsTable = tableData[ "channelClamps"] as LuaInterface.LuaTable; var channelAddressesInTable = tableData[ "channelAddressesIn"] as LuaInterface.LuaTable; var channelAddressesOutTable = tableData[ "channelAddressesOut"] as LuaInterface.LuaTable; foreach (var num in channelClampsTable.Values) { channelClamps.Add(Convert.ToInt32((double)num)); } foreach (var num in channelAddressesInTable.Values) { channelAddressesIn.Add(Convert.ToInt32((double)num)); } foreach (var num in channelAddressesOutTable.Values) { channelAddrOut.Add(Convert.ToInt32((double)num)); } int DOcnt = Convert.ToInt32((double)tableData["DO_count"]); int DIcnt = Convert.ToInt32((double)tableData["DI_count"]); int AOcnt = Convert.ToInt32((double)tableData["AO_count"]); int AIcnt = Convert.ToInt32((double)tableData["AI_count"]); string color = (string)tableData["Color"]; IOModuleInfo.AddModuleInfo(number, name, description, addressSpaceTypeNumber, typeName, groupName, channelClamps.ToArray(), channelAddressesIn.ToArray(), channelAddrOut.ToArray(), DOcnt, DIcnt, AOcnt, AIcnt, color); } } else { string template = EasyEPlanner.Properties.Resources .ResourceManager.GetString(templateName); File.WriteAllText(pathToFile, template); MessageBox.Show("Файл с описанием модулей ввода-вывода" + " не найден. Будет создан пустой файл (без описания).", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
public IOModule(int inAddressSpaceOffset, int outAddressSpaceOffset, IOModuleInfo info) : this(inAddressSpaceOffset, outAddressSpaceOffset, info, 0, null) { // Делегировано в конструктор с 5 параметрами. }