Переменная при старте сервера (инициализация)

Стартовая страница Форумы Понять, как работает ПО Переменная при старте сервера (инициализация)

Просмотр 7 сообщений - с 1 по 7 (из 7 всего)
  • Автор
    Записи
  • #6300
    manjey73
    Участник

    Есть ли способ выполнить инициализацию переменной при старте сервера с последующей возможностью изменения ?
    1. из параметра текущего среза как я понял можно на Windows
    2. Как это сделать на Linux, при условии, что текущий срез в tmpfs и при перезагрузке он будет обнулен.
    3. Нужна возможность сохранения переменной при перезапусках ПК.

    Вариант 1 — при первом старте, когда переменная еще 0 взять ее значение откуда-то, потом если мы ее изменили, она должна сохраняться и при последующих стартах быть с тем значением, которое мы указали.
    Вариант 2 — примерно то же самое, но при рестартах ПК всегда должна браться переменная, указанная в инициализации, но с возможностью изменения пока сервер работает.

    Как это реализовать сейчас на том, что есть ?

    • Тема изменена 9 лет, 2 месяца назад пользователем manjey73.
    #6303
    manjey73
    Участник

    Вопрос в догонку, можно ли сделать так, чтобы значение статуса сигнала всегда было например 20 ? и как ? входной канал, Дорасчетный ТИ.

    Если возможно, как из одной формулы считать значение статусов всех каналов ? Например в последнем входном канале формулой проверять все каналы (не привязываясь к конкретному номеру канала) с указанным статусом ?

    #6308
    Mikhail
    Модератор

    Если текущий срез не сохраняется на диск, то при перезагрузке переменная будет сброшена на значение по умолчанию.

    Если срез сохраняется, то для Варианта 2 нужны примерно такие формулы:

    bool Inited = false;
    double Init()
    {
    if (!Inited) {
      Inited = true;
      SetData(101, 1, 1.0); // установка по умолчанию
      ...
    }
    return 1.0;
    }
    

    Заводим входной канал с наименьшим номером с формулой Init()

    • Ответ изменён 9 лет, 2 месяца назад пользователем Mikhail.
    #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.
    #6312
    manjey73
    Участник

    Что мне тут не нравится, что в формуле надо прописывать номера каналов.
    При ограничении в 1000 символов для формулы ничего путнего не получится.
    Так же будет все ломаться если будет изменяться база, изменение номеров каналов например.

    Можно ли что-нибудь придумать, используя например Dictionary или List ?
    Пока склоняюсь к Dictionary (читаю про это). Только пока не совсем разобрался, что будет происходить со словарем, если дать команду Remove(Tkey) ? удаляется вся пара из словаря ?

    #6317
    Mikhail
    Модератор

    Я привёл основную идею, её можно развивать на Ваш вкус, в том числе применяя словари или списки.

    #6318
    Mikhail
    Модератор

    Remove(Tkey) ? удаляется вся пара из словаря ?

    Да.

Просмотр 7 сообщений - с 1 по 7 (из 7 всего)
  • Для ответа в этой теме необходимо авторизоваться.