Пример #1
0
 /// <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;
 }
Пример #2
0
        /// <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];
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        /// <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);
            }
        }
Пример #5
0
        /// <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);
            }
        }
Пример #6
0
 public IOModule(int inAddressSpaceOffset, int outAddressSpaceOffset,
                 IOModuleInfo info) : this(inAddressSpaceOffset,
                                           outAddressSpaceOffset, info, 0, null)
 {
     // Делегировано в конструктор с 5 параметрами.
 }