Обсуждение встроенного CODESYS

Работа с панелями оператора Weintek - подключение, программирование, совмещение с ПЛК

Модераторы: kiv, 8bit, VanMo

Обсуждение встроенного CODESYS

Сообщение mik » 29 дек 2021, 11:53

Всех приветствую.
Предлагаю в этой теме обсуждать встроенный в панели cMT CODESYS.
Возможно, наобсуждаем на новые темы в FAQ :)
Я использую панели Weintek с контроллерами Wago, Schneider, Crevis. Связь с контроллерами по Modbus TCP. Для того, чтобы забирать переменную из контроллера по модбасу, ее необходимо адресовать в памяти %М.
Я делаю примерно так:

PROGRAM PROG1
VAR
iVar1 AT %MW1001: INT;
iVar2 AT %MW1002: INT;
END_VAR

PROGRAM PROG2
VAR
iVar1 AT %MW2001: INT;
iVar2 AT %MW2002: INT;
END_VAR

и т. д.
После этого в EasyBuilder привязываю к экранному объекту "Числовой" переменную %MW1001, включаю опцию "использовать индексный регистр", в индексном регистре с помощью объекта DropList формирую значения 0, 1000, 2000, 3000 и т. д. Таким образом, один и тот же объект "Числовой" отображает (в зависимости от значения в индексном регистре) переменные PROG1.iVar1, PROG2.iVar1, PROG3.iVar1 и т. д. Очень удобно, если объектов "Числовой" довольно много.

Сейчас я пробую встроенный в панель кодесис. Структура связи панели и контроллера (виртуального, находящегося "внутри" панели) - через импорт тегов. И получается, что применить привычный способ привязки переменных с использованием индексного регистра невозможно. Либо есть какой-то хитрый способ, о котором я не знаю. Хотелось бы вот чего: привязывать одноименные переменные из разных POU к одному и тому же экранному объекту и переключать эти переменные с помощь индексного регистра (ну или как-то иначе, например в макросе). Возможно ли такое?
mik
 
Сообщения: 34
Зарегистрирован: 30 мар 2016, 10:55

Re: Обсуждение встроенного CODESYS

Сообщение ArtemPM » 30 дек 2021, 09:56

В настоящий момент HMI работает только с символьными переменными, поэтому единственный вариант индексной навигации которая возможна - это навигация по массиву. Например: Application.PROG1.Var1[0+INDEX1]
При этом переменная Var1 у вас должна быть объявлена в программе как массив:
Код: Выделить всё
Var1: ARRAY [0..n] OF (TYPE);


Но!
Советую пока активно не использовать индексные регистры в подобных конструкциях.
Я словил неприятный баг, что когда открывается страница, на которой много переменных с индексными регистрами, то джиттер ПЛК вырастает со стабильных 20-22 мкс до 180 000 - 200 000 мкс.
Возможно с этим было связано и отставание времени в ПЛК от времени HMI, на которое я недавно жаловался
Я описал проблему техподдержке Weintek, подождем пока пофиксят. Возможно проблемы в драйверах.
ArtemPM
 
Сообщения: 197
Зарегистрирован: 14 апр 2021, 05:16

Re: Обсуждение встроенного CODESYS

Сообщение mik » 11 янв 2022, 16:21

Всем привет.
Заметил некую особенность (неприятную) в поведении встроенного CDS во взаимодействии с проектом EBPro.
Суть:
1. Создаем проект Кодесис. В качестве таргета выбираем Weintek Built-in Codesys.
2. В проекте пишем простенькую программу:
Код: Выделить всё
PROGRAM PLC_PRG
VAR
   iVarIn: INT;
   iVarOut: INT;
END_VAR
iVarOut:=iVarIn+100;

3. Создаем символьную конфигурацию, в нее включаем переменную iVarIn. Сохраняем файл символьной конфигурации.
4. Создаем проект EBPro. Панель сМТ-2108Х. В проекте делаем экранный объект "числовой", привязываем его к регистру LW-658.
5. Создаем объект "Передача данных (глобальный)". В нем передаем одно слово из LW-658 в переменную iVarIn с периодичностью 1 с.
6. Загружаем оба проекта (CDS и EBPro) в панель и запускаем.
7. Видим, что значение переменной iVarIn в PLC_PRG равно 0.
8. Ничего не трогаем.
9. Примерно через 10 секунд видим, что значение переменной iVarIn в PLC_PRG равно 16264.

WTF?

PS: Как вложить файлы в сообщение?
mik
 
Сообщения: 34
Зарегистрирован: 30 мар 2016, 10:55

Re: Обсуждение встроенного CODESYS

Сообщение 8bit » 13 янв 2022, 16:05

mik писал(а):PS: Как вложить файлы в сообщение?


выложить файл на какой-либо фалообменник, а но форуме прикрепить ссылку на него
Хороший вопрос содержит половину ответа - A good question contains half the answer
Аватара пользователя
8bit
 
Сообщения: 1108
Зарегистрирован: 20 апр 2020, 19:07

Re: Обсуждение встроенного CODESYS

Сообщение 8bit » 13 янв 2022, 16:07

в раздел Статьи на сайте Русавтоматики добавили статью "Как получить доступ к COM порту панели из встроенного Codesys ?"
Хороший вопрос содержит половину ответа - A good question contains half the answer
Аватара пользователя
8bit
 
Сообщения: 1108
Зарегистрирован: 20 апр 2020, 19:07

Re: Обсуждение встроенного CODESYS

Сообщение ArtemPM » 14 янв 2022, 04:36

8bit писал(а):в раздел Статьи на сайте Русавтоматики добавили статью "Как получить доступ к COM порту панели из встроенного Codesys ?"

Интересно. Хотелось бы уточнения для последнего варианта, где используется внутренний IP. Мы можем в этом случает создать в проекте Codesys еще одно устройство Ethernet для опроса ModbusTCP устройств во внешней сети через eth0?
ArtemPM
 
Сообщения: 197
Зарегистрирован: 14 апр 2021, 05:16

Re: Обсуждение встроенного CODESYS

Сообщение mik » 17 янв 2022, 16:00

В пятницу решил проверить доступ к COM порту панели из встроенного Codesys, как описано в статье https://www.rusavtomatika.com/articles/kak-poluchit-dostup-k-com-portu-paneli-iz-vstroennogo-codesys-/.
Для этого собрал вот такую структуру:
Изображение
Кое-как добился, чтобы вся эта байда заработала и столкнулся с тем, что при нагреве или охлаждении датчика ПВТ-100 значения в экранных полях 1 и 3 изменялись, а в поле 2 - нет. Другими словами, изменяющиеся значения от датчика не поступали в PLC.
Сегодня продолжил свои изыскания и таки обнаружил источник проблемы. Дело было вот в этом параметре:
Изображение
Это окно настроек COM-порта устройства MODBUS RTU (Ajustable).
Данный параметр был установлен в 1 с. Как только я изменил его на 0,2 с, а потом и на 0,1 с - все сразу заработало. Причем достаточно шустро.
Может кому-то будет полезно.
mik
 
Сообщения: 34
Зарегистрирован: 30 мар 2016, 10:55

Re: Обсуждение встроенного CODESYS

Сообщение ArtemPM » 24 янв 2022, 07:30

Это давняя проблема Weinteka при работе с тегами. Дело в том, что в рамках одного проекта нет сквозной таблицы со значениями тегов.
Например, как это реализовано в том же WinCC. Если тег опрашивается на двух разных страницах, то переход с одной страницы на другую не приводит к новому опросу тега. СКАДА сразу выводит значение тега, если он уже был опрошен ранее в проекте. В weintek же при переходе на другую страницу панель по новой опрашивает все теги, которые есть на этой странице, даже если точно такие же теги уже ранее были опрошены системой на предыдущей странице.
Соответственно чем меньше задержка опроса, тем быстрей прорисовываются все значения тегов.
Видимо у Шлюза modbus низкий приоритет опроса тега и он не успевает опросить медленные теги, потому что у цифрового поля приоритет выше. В итоге цифровое поле получает данные, а шлюз нет. Если вы уменьшаете задержку опроса времени хватает всем.
По хорошему нужно бы реализовать общую внутреннюю память тегов, чтобы если тег уже где-то опрашивается (например выборкой данных), то к значению этого тега без дополнительного опроса получают данные все остальные элементы, где он используется.
ArtemPM
 
Сообщения: 197
Зарегистрирован: 14 апр 2021, 05:16

Re: Обсуждение встроенного CODESYS

Сообщение mik » 11 мар 2022, 18:03

Заметил некую особенность (баг? фича?).
Объявляю структуру. Для одной из переменных структуры ограничиваю диапазон значений:
Код: Выделить всё
TYPE VentIn EXTENDS TimeOnOff :
STRUCT
   // Вентиляторы. Время работы 1(мин)
   uiVentVrmRab1: UINT :=1;
   // Вентиляторы. Время паузы 1(мин)
   uiVentVrmPaus1: UINT :=1;
   // Вентиляторы. Время работы 2(мин)
   uiVentVrmRab2: UINT :=2;
   // Вентиляторы. Время паузы 2(мин)
   uiVentVrmPaus2: UINT :=2;
   // Вентиляторы. Режим (0 - вкл., 1 - откл., 2 - авт)
   uiVentRezh: UINT (0..2);
   // Вентиляторы. Индикация состояния ИМ (0 - откл, 1 - вкл, 2 - откл. авт., 3 - вкл. авт.)
   uiVentRezhInd: UINT;
END_STRUCT
END_TYPE

(в данном случае это переменная uiVentRezh: UINT (0..2))
Потом как обычно генерирую символьную конфигурацию, загружаю эту конфигурацию в EBPro и вижу, что данная переменная отсутствует в списке. Все остальные переменные структуры в списке присутствуют.
Получается, что во встроенном Codesys нельзя использовать ограничение диапазона значений переменной?
mik
 
Сообщения: 34
Зарегистрирован: 30 мар 2016, 10:55

Re: Обсуждение встроенного CODESYS

Сообщение 8bit » 17 мар 2022, 12:21

mik писал(а):Заметил некую особенность (баг? фича?).
Объявляю структуру. Для одной из переменных структуры ограничиваю диапазон значений:

(в данном случае это переменная uiVentRezh: UINT (0..2))
Потом как обычно генерирую символьную конфигурацию, загружаю эту конфигурацию в EBPro и вижу, что данная переменная отсутствует в списке. Все остальные переменные структуры в списке присутствуют.
Получается, что во встроенном Codesys нельзя использовать ограничение диапазона значений переменной?


Weintek:
Как мы убедились, этот тип тега в настоящее время не поддерживается, и наша команда рассмотрит возможность его поддержки.
Хороший вопрос содержит половину ответа - A good question contains half the answer
Аватара пользователя
8bit
 
Сообщения: 1108
Зарегистрирован: 20 апр 2020, 19:07

След.

Вернуться в Weintek

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8