Exemplo n.º 1
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);
            }
        }