Использование формул

  • В этой теме 83 ответа, 10 участников, последнее обновление 1 месяц назад сделано a80808.
Просмотр 15 сообщений - с 61 по 75 (из 84 всего)
  • Автор
    Сообщения
  • #28842
    Mikhail
    Модератор

    Эта функция увеличивает счётчик при переключении с 0 на положительное значение. Если нужно наоборот, то напишите аналогичную функцию.

    #28844
    Sem13@nxt.ru
    Участник

    Спасибо за формулу FTrig и примеры, Работает как мне нужно.
    Есть формула Counters, но как ей пользоваться? Нет примера применения, если я спрашиваю как использовать формулы, значит не умею без примера. Для меня проще разработать и спаять радиоэлектронную схему которая аппаратно будет считать импульсы, а в этой сфере я мягко говоря слабоват.

    #28846
    Sem13@nxt.ru
    Участник

    Если вот так CountPulse (803), то пока 1 прибавляется +1, пока не переключится на 0.

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

    По формуле CountPulse немного подробнее:
    1. Создать новый канал Расчётного типа.
    2. Указать для него входную формулу CountPulse(101), где 101 — номер канала, переключения которого нужно посчитать.
    Если не заработает, присылайте информацию об ошибке.

    #28866
    Sem13@nxt.ru
    Участник

    Я так и пробовал.
    Если вот так CountPulse(803), то пока 1 прибавляется +1, пока не переключится на 0.
    То есть работает как Val(803) >0 ? Val(804)+1 : Val(804)

    • Ответ изменён 2 года, 4 месяца назад пользователем Sem13@nxt.ru.
    #28897
    Mikhail
    Модератор

    Проверю, напишу в эту тему.

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

    В таблице Скрипты измените скрипт Counters:

    // The previous channel data used by the counters.
    // Предыдущие данные каналов, используемые счётчиками.
    protected Dictionary CounterPrevData = new Dictionary();
    
    // Counts a pulse of the specified channel.
    // Подсчитывает импульс заданного канала.
    public double CountPulse(int cnlNum)
    {
        int cntrCnlNum = CnlNum; // channel of the formula
        double cntrVal = Val();
        CnlData cnlData = Data(cnlNum);
    
        if (CounterPrevData.TryGetValue(cntrCnlNum, out CnlData prevCnlData) &&
            cnlData.IsDefined && prevCnlData.IsDefined && cnlData.Val > 0 && prevCnlData.Val <= 0)
        {
            cntrVal++;
        }
    
        CounterPrevData[cntrCnlNum] = cnlData;
        return cntrVal;
    }
    
    #29409
    Sem13@nxt.ru
    Участник

    Изменил, сервер перестал запускаться. Удалил, запустился.

    Подскажите, может кто уже делал.
    Есть дата время Unix 1692037364, как отобразить в 14.08.2023, 21:29:02?

    #29410
    JurasskPark
    Участник

    Создайте формулу

    public static DateTime UnixTimeStampToDateTime( double unixTimeStamp )
    {
        // Unix timestamp is seconds past epoch
        DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
        dateTime = dateTime.AddSeconds( unixTimeStamp ).ToLocalTime();
        return dateTime;
    }
    #29420
    Mikhail
    Модератор

    Есть дата время Unix 1692037364, как отобразить в 14.08.2023, 21:29:02?

    Какая версия Rapid SCADA?

    #29423
    a80808
    Участник

    Для версии 5 в канале поставьте формулу EncodeDate(1692037364) или EncodeDate(Номер_канала_с_Unix_TimeStamp) или EncodeDate(DateTime.Now) для текущего времени.

    Для в6 с правильным смещением текущее время
    UtcNow()

    #29688
    MZ
    Участник

    Добрый день! в 6ой версии перестала работать формула Ftrig.
    В журнале сервера:
    (936,57): error CS0122: ‘Scripts.Ftrig(double)’ is inaccessible due to its protection level

    #29689
    manjey73
    Участник

    может нужно адаптировать формулу для 6-й версии.

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

    Функции в таблице Скрипты должны быть объявлены public.

    #30989
    manjey73
    Участник
    // Конвертирование времени Unix в DateTime UTC
    public static double UnixTimeStampToDateTime( double unixTimeStamp )
    {
        // Unix timestamp is seconds past epoch
        DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
        dateTime = dateTime.AddSeconds( unixTimeStamp ).ToUniversalTime();
        return dateTime.ToOADate();
    }

    Формула перевода времени UnixTime в формат DateTime UTC для 6-й версии.
    Если использовать ToLocalTime() то время будет показывать плюсом от UTC в зависимости от часового пояса.

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