Увеличение вх канала каждую секунду

Стартовая страница Форумы Понять, как работает ПО Использование формул Увеличение вх канала каждую секунду

Просмотр 14 сообщений - с 1 по 14 (из 14 всего)
  • Автор
    Сообщения
  • #25712
    fergus2022
    Участник

    Добрый день. Есть вх канал «Переменная1». Ее нужно увеличивать на 2 каждую секунду.
    Формула получается типа:
    val1=val1+2
    А как сделать, чтобы формула отрабатывалась каждую секунду ?

    #25713
    manjey73
    Участник

    Подозреваю, что никак, только через проверку времени, но это будет больше секунды точно, так как будет зависеть от цикла прохождения сервером всех каналов. И чем каналов больше, тем больше будет цикл.
    Впрочем как и любой ПЛК вам не даст такой точности.

    #25714
    fergus2022
    Участник

    На данный момент 66 входных каналов включая виртуальные. Задача в том, чтобы высчитывать накопленный расход по часовому. (переменная1=переменная1+(часовой расход/3600). При расчете получается верное значение для каждой секунды, но судя по большим числам в таблице, каждую секунду формула выполняется несколько раз, а не 1.

    • Этот ответ был изменен 3 месяца, 1 неделя назад от fergus2022.
    #25716
    fergus2022
    Участник

    Неужели в этой скаде нельзя это реализовать ?

    #25717
    JurasskPark
    Участник

    Эм… Неправильный подход.
    Начнём с того, что считать расход часовой таким способом нельзя — нужно использовать трапецию.
    А во вторых я бы брал всё текущие тренды с начала и по конец часа — и после этого сделал бы подсчёт. Который записывал уже как часовое значение.

    #25718
    JurasskPark
    Участник

    Накопленный расход по часовому — это что такое? Расход за 1 час в м3?
    Вы его получили с вычислителя. Вы хотите из него получить среднее мгновенное значение?

    #25719
    fergus2022
    Участник

    Не часовой расход считать, а накопленный.
    Есть часовой расход в рабочих условиях.
    Есть формула для вычисления часового расхода в нормальных условиях.
    Есть формула для вычисления накопленного расхода с применением в ней значения часового расхода в нормальных условиях.
    Значение накопленного расхода за час, должно быть равно значению переменной «Часовой расход».

    • Этот ответ был изменен 3 месяца, 1 неделя назад от fergus2022.
    #25721
    fergus2022
    Участник

    Накопленный_Расход=Накопленный_Расход+(Часовой_Расход/3600)

    Соотв. формула должна срабатывать 1 раз в секунду

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

    Добрый день!

    как сделать, чтобы формула отрабатывалась каждую секунду ?

    В 6-й версии добавлена функция EverySec
    В 5-й версии нужно самостоятельно реализовать что-то похожее:
    — Завести справочник, в котором хранится время вычисления для каждого канала. Если канал только один, то справочник не нужен, а достаточно обычной переменной.
    — При вычислении формулы проверять, прошла ли секунда с предыдущего вычисления

    #25725
    Mikhail
    Модератор
    public DateTime CalcTime = DateTime.MinValue;
    
    public double MyFunc()
    {
      DateTime utcNow = DateTime.UtcNow;
      if ((utcNow - CalcTime).TotalSeconds >= 1)
      {
        CalcTime = utcNow;
        return Val() + 2;
      }
    
      return Val();
    }

    Формулу не проверял.

    #25728
    fergus2022
    Участник

    С данной формулой получилось следующее.
    Имеем изначально Часовой расход = 0.490 м3.
    Накопленный расход=Накопленный+(0.490/3600)

    Получаем, что накопленный расход каждую секунду увеличивается на 0.00027. Соотв. при проверке умножением на 3600, получаем за час 0.972. А должно быть 0.490

    #25729
    fergus2022
    Участник

    Кароче получилось примерно 0.504, впринципе подходит. А эту формулу можно два раза использовать для двух накопленных расходов ? Вроде формулы одинаковые, но когда с двумя запускаю, получаю:

    2022-10-28 03:56:09 <ubuntu><root><ERR> Error compiling the source code of the formulas: 
    Line 609, column 17: error CS0102: The type <code>Scada.Server.Engine.CalcEngine' already contains a definition for</code>CalcTime'
    See the file /opt/scada/ScadaServer/Log/CalcEngine.cs with the source code
    2022-10-28 03:56:09 <ubuntu><root><ERR> Normal program execution is impossible
    2022-10-28 04:06:32 <ubuntu><root><ACT> ScadaServerService is stopped
    #25730
    fergus2022
    Участник

    Т.е у меня в таблице формул две этих формулы с разными переменными (Расход1 и Расход2 и тп.)

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

    Если нужно продублировать формулу, то новой формуле нужно дать другое имя.
    Либо усложнить существующую формулу, сделав её общей для любого количества каналов.

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