Главная   Downloads   Разное  
FAQ     Поиск   Регистрация   Вход 
Текущее время: Вт мар 19, 2024 17:02

Часовой пояс: UTC + 3 часа (Russia: MSK)




Начать новую тему Ответить на тему  [ 6 сообщений ] 
Автор Сообщение
 Заголовок сообщения: Особенности ST для FB на CP1L
СообщениеДобавлено: Чт окт 26, 2017 21:36 
Не в сети
Аватара пользователя

Регистрация: Ср ноя 08, 2006 13:01
Сообщения: 373
Откуда: г. Красноярск
Всех приветствую!
А вот, например, показалось мне, что функция ABS() в FB, написанном на ST и загруженном в CP1L-EM не исполняется. То есть пропускает через себя минус. Программер и ПЛК не ругаются... В ПЛК всё загружается.
Пришлось писать избавление от минуса самому.
Как вы думаете, такое поведение функции в указанных условиях возможно? Может про это где-то написано?


В начало
 Профиль  
 
 Заголовок сообщения: Re: Особенности ST для FB на CP1L
СообщениеДобавлено: Чт окт 26, 2017 22:05 
Не в сети
Аватара пользователя

Регистрация: Ср ноя 08, 2006 13:01
Сообщения: 373
Откуда: г. Красноярск
Собсно, проблема всплыла в такой ситуации. Писал давеча для CJ2 функциональный блок -
PID-регулятор на ST. Поддерживает уровень в котле тихоходной задвижкой с дискретным управлением. Прилично работает.
Потребовалось использовать его для задачи поддержания температуры. ГВС через теплообменник с паром. Пар регулируется точно такой же задвижкой. Залил в CP1L-EM и на тебе - Программер ругается на использование внешней переменной типа TIMER.
Ладно заменил TIMER на счетчик долей секунд (использовал внешний генератор стробов по 0,1сек. заводил в FB через входную переменную).
Всё удачно пролезло в ПЛК. Но в работе все вычисления внутри FB идут кувырком. Выходит чё попало.
Потом заметил странности в поведении функции ABS(). Описал выше.

Может подскажет кто, в чем может быть проблема?

Кусок программы с FB прилагаю.
ПИД писал по описаниям от АГАВы. Тоже приложил.


У вас нет необходимых прав для просмотра вложений в этом сообщении.


В начало
 Профиль  
 
 Заголовок сообщения: Re: Особенности ST для FB на CP1L
СообщениеДобавлено: Пт окт 27, 2017 11:42 
Не в сети

Регистрация: Чт окт 26, 2017 13:11
Сообщения: 9
Насколько я понимаю речь идет о строчке
IF ABS(E_n) < deadZonePV THEN...
Попробуйте добавить локальную переменную например так:
temp:=ABS(E_n)
IF temp < deadZonePV THEN...


В начало
 Профиль  
 
 Заголовок сообщения: Re: Особенности ST для FB на CP1L
СообщениеДобавлено: Пт окт 27, 2017 16:01 
Не в сети
Аватара пользователя

Регистрация: Ср ноя 08, 2006 13:01
Сообщения: 373
Откуда: г. Красноярск
Голова моя запудренная... На эту строчку я и забыл обратить внимание ) Спасибо!
А строчку с другой ABS(), про которую я писал, я заменил на
Код:
IF timeForMEO >= 0,0 THEN
    time01s := REAL_TO_UINT(timeForMEO * 10,0);
ELSE
   time01s := REAL_TO_UINT(timeForMEO * (-10,0));
END_IF;

Сама строка закомменчена.
Спасибо, попробую через промежуточную переменную.


В начало
 Профиль  
 
 Заголовок сообщения: Re: Особенности ST для FB на CP1L
СообщениеДобавлено: Сб окт 28, 2017 20:33 
Не в сети
Аватара пользователя

Регистрация: Ср ноя 08, 2006 13:01
Сообщения: 373
Откуда: г. Красноярск
Присел сегодня поковыряться с ентой проблемкой. Побаловался с симулятором. Живой ПЛК
CP1L-EM пока недоступен.
Ниже представлю процесс ковыряний и выводы.

Итак, я хотел получить честную отработку функции ABS() внутри FB в таком выражении
Код:
out := ABS(REAL_TO_UINT(in * 10,0));

Функция ABS() в таком выражении не работает. Да и чего я хотел, Преобразую REAL в UINT (он и так без знака должен быть), а сверху еще и функцию ABS() накручиваю. В общем понадеялся на автопреобразования типов видимо... Когда писал это для CJ2M не обратил внимание на излишества в выражении, а CJ2M проглотил и (что интересно) исполнил ПРАВИЛЬНО! А CP1L-EM тот же код принял без проблем, но исполнил НЕ ПРАВИЛЬНО!

Далее решил попробовать избавиться от функции ABS() в надежде, что функция REAL_TO_UINT() избавит меня от знака.
Код:
out := REAL_TO_UINT(in * 10,0);

Хрен то там. Всё по прежнему. Знак проходит насквозь FB с таким выражением.

Попытка номер три (включил мозг). Поменял местами функции ABS() и REAL_TO_UINT() в выражении.
Код:
out := REAL_TO_UINT(ABS(in) * 10,0);

Чудо произошло именно в этот момент. Всё сработало ПРАВИЛЬНО.

Картинка Итога (проект ковыряний приложил тоже)
Вложение:
pic1.JPG

Понимаю, что сам запутал CP1L. Но ведь CJ2M меня правильно понял...
Короче, имейте ввиду.

На следующей неделе командировка. Будут испытания на живом CP1L.
Надеюсь всё подтвердится и больше я нигде не накосячил )


У вас нет необходимых прав для просмотра вложений в этом сообщении.


В начало
 Профиль  
 
 Заголовок сообщения: Re: Особенности ST для FB на CP1L
СообщениеДобавлено: Ср ноя 22, 2017 16:27 
Не в сети
Аватара пользователя

Регистрация: Ср ноя 08, 2006 13:01
Сообщения: 373
Откуда: г. Красноярск
В общем, всё получилось. Работает нормально. Всем спасибо!
Кстати, представитель омрона мне отвечал по этому поводу следующее (это я еще про таймер спрашивал, хотя сразу от него избавился в ФБ):
"Таймер внутри FB на ST может работать не корректно (для ПЛК CP1). Основным языком программирования для CP1 является LD.
По возможности используйте таймеры внутри FB именно на LD, либо в теле самой программы.
Спасибо за понимание."


Имейте ввиду )


В начало
 Профиль  
 
Показать сообщения за:  Сортировка  
Начать новую тему Ответить на тему  [ 6 сообщений ] 

Часовой пояс: UTC + 3 часа (Russia: MSK)


Кто сейчас на конференции

Сейчас этот форум просматривают: YandexBot и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Переход:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская документация по phpBB 3