Стартовая страница › Форумы › Понять, как работает ПО › Переменная при старте сервера (инициализация)
- В этой теме 6 ответов, 2 участника, последнее обновление 9 лет, 2 месяца назад сделано
Mikhail.
-
АвторЗаписи
-
26.06.2017 в 11:18 #6300
manjey73УчастникЕсть ли способ выполнить инициализацию переменной при старте сервера с последующей возможностью изменения ?
1. из параметра текущего среза как я понял можно на Windows
2. Как это сделать на Linux, при условии, что текущий срез в tmpfs и при перезагрузке он будет обнулен.
3. Нужна возможность сохранения переменной при перезапусках ПК.Вариант 1 — при первом старте, когда переменная еще 0 взять ее значение откуда-то, потом если мы ее изменили, она должна сохраняться и при последующих стартах быть с тем значением, которое мы указали.
Вариант 2 — примерно то же самое, но при рестартах ПК всегда должна браться переменная, указанная в инициализации, но с возможностью изменения пока сервер работает.Как это реализовать сейчас на том, что есть ?
-
Тема изменена 9 лет, 2 месяца назад пользователем
manjey73.
26.06.2017 в 15:56 #6303
manjey73УчастникВопрос в догонку, можно ли сделать так, чтобы значение статуса сигнала всегда было например 20 ? и как ? входной канал, Дорасчетный ТИ.
Если возможно, как из одной формулы считать значение статусов всех каналов ? Например в последнем входном канале формулой проверять все каналы (не привязываясь к конкретному номеру канала) с указанным статусом ?
26.06.2017 в 16:44 #6308
MikhailМодераторЕсли текущий срез не сохраняется на диск, то при перезагрузке переменная будет сброшена на значение по умолчанию.
Если срез сохраняется, то для Варианта 2 нужны примерно такие формулы:
bool Inited = false; double Init() { if (!Inited) { Inited = true; SetData(101, 1, 1.0); // установка по умолчанию ... } return 1.0; }Заводим входной канал с наименьшим номером с формулой Init()
-
Ответ изменён 9 лет, 2 месяца назад пользователем
Mikhail.
26.06.2017 в 16:47 #6309
MikhailМодераторДля варианта 1 можно так:
bool Inited = false; double Init() { if (!Inited) { Inited = true; if (Stat(1) == 0) SetData(101, 1, 1.0); // установка по умолчанию ... } return 1.0; }В этом случае значение по умолчанию будет применяться, если статус канала равен 0. Можно усложнить, добавив дополнительные каналы, в которые записывать значение, было ли уже присвоено значение по умолчанию для нужного канала.
-
Ответ изменён 9 лет, 2 месяца назад пользователем
Mikhail.
26.06.2017 в 17:32 #6312
manjey73УчастникЧто мне тут не нравится, что в формуле надо прописывать номера каналов.
При ограничении в 1000 символов для формулы ничего путнего не получится.
Так же будет все ломаться если будет изменяться база, изменение номеров каналов например.Можно ли что-нибудь придумать, используя например Dictionary или List ?
Пока склоняюсь к Dictionary (читаю про это). Только пока не совсем разобрался, что будет происходить со словарем, если дать команду Remove(Tkey) ? удаляется вся пара из словаря ?27.06.2017 в 14:56 #6317
MikhailМодераторЯ привёл основную идею, её можно развивать на Ваш вкус, в том числе применяя словари или списки.
27.06.2017 в 14:57 #6318
MikhailМодераторRemove(Tkey) ? удаляется вся пара из словаря ?
Да.
-
Тема изменена 9 лет, 2 месяца назад пользователем
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.