Ошибка при компилировании исходного кода формул

Стартовая страница Форумы Ошибки в работе Ошибки Сервера Ошибка при компилировании исходного кода формул

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

    Добрый день!

    Столкнулся со следующей ситуацией:

    1. Указываю в каналах управления КП формулы (для каналов 1901 и 1902):
    SetVal(CnlNum, Val(1801)-4)
    SetVal(CnlNum, Val(1801)+4)

    Всё работает отлично. При нажатии кнопок значения уменьшаются/увеличиваются на 4
    и отправляются в контроллер по Modbus (RS485).

    2. Указываю в каналах управления КП формулы (для каналов 1901 и 1902):
    Val(1801) : Val(1801)-4
    Val(1801) : Val(1801)+4

    Не работает. В логе пишет:

    ———————————————————————————
    ———————————————————————————
    2019-07-24 15:07:48 <PC><система><ACT> Служба ScadaServerService 5.1.2.0 запущена
    2019-07-24 15:07:48 <PC><система><ACT> Проверка существования директорий данных выполнена успешно
    2019-07-24 15:07:48 <PC><система><ACT> Проверка существования файлов базы конфигурации выполнена успешно
    2019-07-24 15:07:48 <PC><система><ACT> Входные каналы считаны из базы конфигурации. Количество активных каналов: 126
    2019-07-24 15:07:48 <PC><система><ACT> Каналы управления считаны из базы конфигурации
    2019-07-24 15:07:48 <PC><система><ACT> Пользователи считаны из базы конфигурации
    2019-07-24 15:07:48 <PC><система><ACT> Формулы считаны из базы конфигурации
    2019-07-24 15:07:48 <PC><система><ERR> Ошибка при компилировании исходного кода формул:
    Строка 593, колонка 129: error CS1026: ожидалась )
    Строка 593, колонка 129: error CS1525: Недопустимый терм «:» в выражении
    Строка 593, колонка 131: error CS1002: ожидалась ;
    Строка 593, колонка 142: error CS1002: ожидалась ;
    Строка 593, колонка 142: error CS1525: Недопустимый терм «)» в выражении
    Строка 594, колонка 129: error CS1026: ожидалась )
    Строка 594, колонка 129: error CS1525: Недопустимый терм «:» в выражении
    Строка 594, колонка 131: error CS1002: ожидалась ;
    Строка 594, колонка 142: error CS1002: ожидалась ;
    Строка 594, колонка 142: error CS1525: Недопустимый терм «)» в выражении
    Для ознакомления с исходным кодом см. файл C:\SCADA\ScadaServer\Log\CalcEngine.cs
    2019-07-24 15:07:48 <PC><система><ERR> Нормальная работа программы невозможна

    Хотелось бы использовать второй вариант написания формул (как более правильный и гибкий).

    Что я делаю неправильно и куда «копать»?

    #12928
    manjey73
    Участник

    : — а что вы этим хотите добиться?

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

    идея формулы с двоеточием не ясна

    #12934
    manjey73
    Участник

    Это может if по условию ?

    ? одна операция : другая операция;

    ???? чисто предположение…

    #12938
    Andrew174
    Участник

    Хочу реализовать вот такую логику работы:
    «https://forum.rapidscada.ru/?topic=оперативное-изменение-modbus-регистра&#187;

    Как это сделано у litmi.

    • Этот ответ был изменен 2 года, 5 месяцев назад от Mikhail.
    • Этот ответ был изменен 2 года, 5 месяцев назад от Mikhail.
    #12939
    Andrew174
    Участник

    Как это сделано в теме: «оперативное изменение Modbus-регистра»

    #12940
    Andrew174
    Участник

    Условия тоже нужны.
    Необходимо проверять, чтобы значения входного канала были не меньше 20 (в первой строчке) и не больше 255 (во второй строчке).

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

    Напишите, пожалуйста, задачу целиком.
    Если A <= значение канала <= B, то что, иначе что?

    #12956
    Andrew174
    Участник

    Канал входной — 1801. Считывает значение определенного регистра устройства по Modbus.
    Канал управления — 1901. Изменяет (на «- 4»), при каждом нажатии кнопки на схеме, значение определенного регистра устройства по Modbus.
    Канал управления — 1902. Изменяет (на «+ 4»), при каждом нажатии кнопки на схеме, значение определенного регистра устройства по Modbus.

    Необходимо добавить проверку значений каналов управления, перед нажатием на кнопку:
    — если значение канала 1901 меньше «20», то передача этого числа не происходит (в регистр не записывается новое значение)
    — если значение канала 1902 больше «255», то передача этого числа не происходит (в регистр не записывается новое значение)

    Я надеялся, что будут работать следующие формулы, указанные в соответствующих каналах управления:
    — Val(1801)<=20 ? Val(1801) : Val(1801)-4
    — Val(1801)>=255 ? Val(1801) : Val(1801)+4

    К сожалению, такой вариант не работает.
    В логах пишет «Ошибка при компилировании исходного кода формул».

    #12957
    manjey73
    Участник

    Andrew174 потому что первая конструкция Val(1801) <=20 как бы возвращает bool а у вас попытка чего ? далее вы пытаетесь Читать переменную, а надо выставлять

    канал 181 — формула — Val(180) > 0 ? SetCnl(41, 5500) : 0
    В канале 181 проверяется больше 0 значение канала или 0 и если больше, идет запись в канал 41 значения, ну либо 0

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

    У каналов управления нет значения. Он только описывает отправку команды. Однако доступно значение отправляемой команды Cmd. Но оно не хранится в канале управлнения, а доступно только на момент вычисления формулы.
    Значения есть у входных каналов.

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

    Val(1801) <= 20 ? Val(1801) : Val(1801) - 4

    Формула выглядит нормально. Какая конкретно ошибка в журнале Сервера?

    #12983
    Andrew174
    Участник

    Формулы, указанные в соответствующих каналах управления (1901 и 1902), работают вот в таком виде:
    — Val(1801)<=46 ? Val(1801) : Val(1801)-4
    — Val(1801)>=254 ? Val(1801) : Val(1801)+4

    RapidSCADA перестала выдавать сообщение «Ошибка при компилировании исходного кода формул» после проверки и исправления ошибок в Win7.

    Ну и с синтаксисом формул я, поначалу, не совсем разобрался.

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

    Проблема решена.

    P.S.
    По использованию формул нужен отдельный HELP с примерами. Тогда вопросов на форуме будет меньше.

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

    Хорошо, что всё получилось.
    Тема формул насолько обширна, что даже непонятно, что писать в таком хелпе. Либо получится целая книга ))
    Справка по формулам.

    #12996
    manjey73
    Участник

    На счет формул не хватает правильного описания, что можно а что нельзя.

    Ведь формула в канале выглядит не совсем так, как в коде Visual Studio.

    ну например, если это входной канал, то результат формулы самой Scada конвертируется в double.

    Вот такое надо толково описать в документации, то есть нюансы, которые произойдут при компилировании формулы Scada системой. Чтобы их правильно использовать или обходить…

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