Формулы в V6 Beta

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

    Начало здесь
    https://forum.rapidscada.ru/?topic=%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b0-%d0%b4%d0%b8%d1%81%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82%d0%b8%d0%b2%d0%b0-v6-beta

    • Эта тема была изменена 11 месяцев, 3 недели назад от Mikhail.
    #21829
    Mikhail
    Модератор

    Какая была формула в 5 версии?

    #21830
    manjey73
    Участник

    Еще раз, в вашем файле более 700 строк.

    ругается на символ ( он как раз 11-й в строке 331)

    и почему return (0); а не просто return 0; ???

    #21831
    a80808
    Участник

    Ну могу сказать в чем было дело.
    Я уже писал, что загружал это файл в Visual Studio (до этого смотрел его Блокнотом, так как VS у меня загружается очень долго). В Блокноте последняя строка была 221.
    А вот после загрузки его в VS стало действительно больше 700 строк. и 331 строка действительно содержит ошибку…
    Всем спасибо!
    Михаил, может в будущей документации стоит предупредить, что этот файл нельзя смотреть Блокнотом?

    #21832
    manjey73
    Участник

    Блокнотом вообще нельзя смотреть большинство файлов, особенно если они формируются как для Windows так и для Linux 🙂

    Как раньше писал, для редактирования вместо блокнота использую AkelPad правда в нем бывают свои заморочки, он иногда неправильно определяет кодировку и ему надо ее вручную выставлять….

    • Этот ответ был изменен 11 месяцев, 3 недели назад от manjey73.
    #21833
    Mikhail
    Модератор

    Блокнотом ничего нельзя смотреть)) поставьте notepad++ например.
    Перенос строк нужно отключать, чтобы нумерация не сбивалась.

    #21835
    a80808
    Участник

    > и почему return (0); а не просто return 0; ???

    Потому что это нотация «чистого» Си. Ну не ложится никак у меня объектная ориентация на мозги, долгие годы загаженные процедурной ориентацией 🙂

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

    Сейчас формула заработала?

    #21837
    a80808
    Участник

    Нет, пофиг ей в скобках или нет 🙂
    1. Убрал из таблицы Scripts все формулы, которые туда включил.
    2. Убрал ссылки на формулы в каналах (отключил птичку «использовать формулу», саму формулу пока не удалял)
    3. Остались только формулы в каналах, использующие Val() и SetVal()
    4 осталось вот такое сообщение:
    2022-02-13 11:32:14 [DELL6230][DELL6230$][ERR] Error compiling the source code of the scripts and formulas:
    System.ArgumentException: Cannot bind to the target method because its signature is not compatible with that of the delegate type.
    at System.Delegate.CreateDelegate(Type type, Object target, String method, Boolean ignoreCase, Boolean throwOnBindFailure)
    at Scada.Server.Engine.Calculator.RetrieveMethods(Assembly assembly, Dictionary2 cnlTags, Dictionary2 outCnlTags, Dictionary`2 cnlClassNames)
    at Scada.Server.Engine.Calculator.CompileScripts(BaseDataSet baseDataSet, Dictionary2 cnlTags, Dictionary2 outCnlTags)
    2022-02-13 11:32:14 [DELL6230][DELL6230$][ERR] Normal program execution is impossible
    2022-02-13 11:37:16 [DELL6230][DELL6230$][ACT] Server is stopped

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

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

    #21839
    a80808
    Участник

    Начну с нового чистого листа. Есть проект еще попроще (вроде) и изначально (вроде бы :)) сделанный в 5.8.
    Буду аккуратно все конвертировать и сразу записывать что и как на что меняем.
    Вдруг кто решит пойти моим путем 🙂

    #21840
    manjey73
    Участник

    Еще момент, я не уверен, что Scada скрипты и public DateTime вообще совместимы, ибо DateTime это структура, а не одна переменная…

    #21841
    a80808
    Участник

    Ну в пятой версии то работало…

    #21842
    manjey73
    Участник

    Что работало? возвращение вместо структуры 0 или то, что было у вас в формуле?

    Сделайте return new DateTime(); ошибка пропадет?

    Как в 6-й версии реализован компилятор формул? сомневаюсь, что строго так же, как в 5-й версии.

    Например в 5-й версии все, что возвращали из формул преобразовывалось в double компилятором автоматом, приходилось иногда мудрить в связи с этим.

    • Этот ответ был изменен 11 месяцев, 3 недели назад от manjey73.
    #21844
    a80808
    Участник

    DateTime DecodeDate(double dateTime)
    {
    return ScadaUtils.DecodeDateTime(dateTime);
    }

    Эта формула вообще то в «штатной» поставке в таблице «Формулы» в пятой версии…

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