Добрый день!
Помогите, пожалуйста, с описанием макроса. Во вложении выделил не понятные мне строки.
Вид для печати
1. Число байт, выделяемых под хранение строки. Равно длине строки + 2.
2. Объявление массивов символов, в которых будут храниться строки.
3. Копирование сформированных в макросе строк в регистры панели для отображения в таблице.
Здравствуйте! Хочу освоить продвинутые приёмы создания нестандартных элементов управления.
Вот в Example_SystemRegisters_v2.txp кнопки текущей страницы раскрашены в другой цвет:
Вложение 51327
Или в другом примере вообще не смог найти похожих кнопок в стандартных библиотеках:
Вложение 51330
Подскажите пожалуйста:
1) Есть ли способ узнать какой именно файл из какой библиотеки используется для данного элемента? Из диалога настроек элемента понять это не получается.
2) Приоткройте завесу тайны над методикой создания или изменения таких элементов, как в примерах ;)
Добрый день.
1. Это изображение из галереи 2 (в настройка элемента: Кнопка - Изменить - выбрать изображение из галереи)
Вложение 51332
2. Это картинки из CODESYS V3.
https://dropmefiles.com/osI1h
Виноват, действительно сразу не заметил такого цвета кнопку. Тем более актуален первый вопрос: где можно подсмотреть какая именно картинка использовалась для кнопки, чтобы не листать эти бесконечные галереи и библиотеки?
Вот картинки знатные, огромное спасибо!
С сожалению, такой возможности нет.Цитата:
Где можно подсмотреть какая именно картинка использовалась для кнопки, чтобы не листать эти бесконечные галереи и библиотеки?
Добрый день. С чем может быть связана огромная задержка при чтении данных из панели СП310 в ПЛК110?
Панель связана с ПЛК по TCP. В обратную сторону (от ПЛК к панели) все работает быстро, данные обновляются почти мгновенно. При изменении параметра на панели, на ПЛК параметр изменяется через 10-30 секунд. Это видно в Codesys в режиме онлайн.
Изначально проблемы не было, началось все после того, как я переделал проект, сделал пакетный опрос/запись от ПЛК с помощью String. Ну и одновременно добавил переменных. Сейчас ПЛК опрашивает с панели около 70 WORD (10 String). Все они PFW.
Искал ошибки по регистрам, не нашел. Да и в случае ошибок по номерам регистров были бы просто некорректные данные, насколько я понимаю.
Есть идеи, куда копать?
p.s. ПЛК мастер.
У вас и была эта проблема, для этого вам и предложили переделать на String.
Зачем только 10 String было делать, можно и 2 уложиться ( 35 и 35 WORD или 40 и 30).Если Polling у вас 100ms на 10 String уйдёт 1 сек
2 String и Polling 10ms = 20 ms
И скорее всего напутали с настройками и адресами, проект выкладывайте.
Да и вам обязательно PFW опрашивать? У меня в панели ( с помощью функциональной области) регистры переписываются из постоянной в оперативную память, и уже они опрашиваются, около 100 регистров всего и всё летает.
Проблемы с задержками не было. Был вопрос большого количества переменных Модбас и путаницы, связанной с этим. И хотелось работать с данными, как с массивами, что и сделал.
10 String для удобства. К ПЛК подключено 5 ПР. Большинство данных передаются от ПЛК к ПР и обратно без обработки контроллером. ПР может за раз работать с 11 регистрами максимум. Поэтому и получилось 5 Пр по 2 пакета. На панели сделал такую же разбивку, чтобы напрямую присваивать массив от Панели к ПР и обратно. То есть, есть два массива (от String переменных) от панели, которые я просто присваиваю двум массивам , привязанных к двум String ПР. Да и к тому же в панели у меня адреса разбиты по ПР. Все данные ПР№1 идут от 512 адреса панели , Пр№2 от 1012 адреса и т.д. Так гораздо проще управлять проектом и меньше шансов допустить ошибку.
Весь проект выкладывать не буду, надо долго объяснять, что для чего. Да и стыдно, первый проект на КДС :)
С адресами мог конечно напутать, перепроверю еще раз, но в реальной работе все хорошо, все передается, куда надо.
Предвидя подозрения на медленную связь ПЛК с ПР - при автоматическом изменении режима от ПЛК (без панели) все меняется быстро.
Вот немного скриншотов, чтобы понять, как реализовал чтение/запись на примере одного пакета:
Вложение 51359 Вложение 51360
Вложение 51361 Вложение 51362
Вложение 51363
То есть для чтения и записи нужно создавать разные UMD? А в чем разница в настройках?
Сейчас параметры модбас такие:
Панель:
Вложение 51367
ПР:
Вложение 51366
Чтение звезде 0x03, запись везде 0x10
У вас с панелью проблемы, там и создавайте разные UMD
Для чтения Input регистров By Poll Time, для записи Output регистров By Value Change, другие настройки для String без разницы ( а для обычных регистров есть разница). Polling везде 10 ms
Да и не забудьте поменять адреса в программе, они у вас изменятся.
Отчет о проделанной работе :) Для интереса попробовал по очереди реализовать все советы.
В итоге помогло разделение UMD панели на два отдельных, чтение и запись, с разными настройками, как Вы писали. Время отклика сразу сократилось с 30 секунд (в среднем) до 1-2 сек. Может и меньше, но мне и этого достаточно )
Остальные изменения (Polling 10ms, объединение String, чтение из PSW вместо PFW) уже не дают заметного эффекта.
Огромная благодарность за помощь!
P.S. я по наивности думал, что режим "Both" объединяет "By value change" и "By pooling time". Оказывается, совсем нет.
Добрый день. Вот дошли руки навести красоты в проекте. Есть ли возможность анимировать имеющиеся в стандартной библиотеке изображения электрических контактов - ну чтобы в зависимости от бита открыт или закрыт? или только рисовать свои изображения? И если свои рисовать - какие размеры изображения стандартные для индикатора например в пикселях и форматы какие конфигуратор понимает? Спасибо
всем привет! коллеги, подскажите, пожалуйста, что не так?
вот макрос для панели СП3хх:
WORD Addr=PSW[600];
DWORD Var=PSW[602];
Write(HMI_LOCAL_MCH, 0, TYPE_PFW, Addr, 0, TYPE_DWORD, Var);
на самой панели выведены два поля ввода для PSW[600] и PSW[600].
после этого кнопкой активируется функциональная область, вызывающая этот макрос.
ожидание: в регистр PFW с адресом, считанным из PSW[600] записывается значение из PSW[602].
реальность: регистр PFW остается без изменений
День добрый - да беда с этими макросами - в эмуляции не работают, отлаживать достаточно проблеммно. Я бы для начала убедился что макрос вообще выполняется - ну какую нибудь переменную дернул при выполнении и индикатор зажег. А потом уже разбираться - может чего еще меняет значение в этом адресе. Синтаксис вроде как верный. С уважением
Мои попытки предложить инструменты для отладки макросов оказались в курилке, вряд ли Вы туда заглядываете https://owen.ru/forum/showthread.php...l=1#post251022
Я предложил функцию для вывода диагностической информации из выполняемого макроса на спец.окно.
Есть возможность приостановить выполнение макроса в заданных точках останова на заданное время или до нажатия на экран
В этот момент в окно выводится диагностическая информация - любая, например, заданный текст, значения тех или иных переменных.
В нужном месте любого своего макроса помещаете вызов "функции"
DEBUG(int delay, const char *format, ... ), где
- delay - время "показа" окна отладки в сек
- format - строка формата аналогичная функции fprint, в строке формата можно использовать \n - переход на новую строку, \t - табуляция, \a - короткий бип
- ... собственно сами переменные, которые нужно вывести на экран.
Например,
int a, b, c;
a= 2;
b = PSW[250];
c = a + b;
DEBUG(20, " This is my test\n a= %d b= %d c= %d", a, b, c);
PSW[300] = 100;
PSW[400] = PSW[256] + PSW[300];
DEBUG(30, "PSW[256]= %d PSW[300]= %d PSW[400]= %d", PSW[256], PSW[300], PSW[400]);
Если в Глобальном макросе
#define DEBUG_ENB 1
то
при вызове макроса из примера
на экране панели появится на 20 сек сначала такое окно
> Func1 line 134 in Mac355\Mac355.c This is my test a= 2 b= 0 c= 2
Затем, на 30 сек такое окно
> Func1 line 137 in Mac355\Mac355.c PSW[256]= 0 PSW[300]= 100 PSW[400]= 100 -
Первая строка служебная, формируется автоматически и содержит название макроса, откуда вызывался DEBUG, и номер строки в скомпилированной программе.
Добрый день, не могу считать данные с панели СП307-Б (561192003321251) контроллером ПЛК 110-24.30.Р-L(54213200332112610 targets_v3.3_for_plc1xx_m02) по rs 485 (Modbus-rtu).
Отправить данные на панель получается. Получать и отправлять данные на ПР200 получается.
Оба порта Контроллера в режиме Мастер.
Пробовал с обоих портов подключать и панель и ПР200. С панели данные не приходят.
Если будете использовать этот отладчик, то следует иметь ввиду, что:
Режим выполнения отлаживаемого макроса, хотя бы на время отладки, должен быть установлен - "Параллельный"
Вложение 51465
Иначе нельзя управлять "Окном отладки" кнопками Влево, Вправо и ОК.
После отладки режим выполнения может быть установлен как - "Последовательный"
Там еще кое что в качестве примера макросов на Си можно посмотреть https://owen.ru/forum/showthread.php?t=33784
Как настроить часы реально времени на СП307?
Товарищи, подскажите пожалуйста!
Затираются PFW регистры в СП307-Р, может эта тема уже была?
Дайте ссылку если не трудно.
Коротко: задаю в 300-450 PFW значения , через пару дней там 65535!
В проекте есть тренды в автообласти и архив
https://yadi.sk/d/xxEmAHNJdY4BpA
Техподдержка, на мое удивление, дала заднюю, вот так..
Здравствуйте, коллеги!
У меня панель СП307 соединена по Modbus RTU с контроллером температуры и влажности Термодат 38Е6. Необходимо с панели оператора вводить значения уставки температуры в контроллер. Формат регистра уставки в контроллере - беззнаковая целая. Когда вводишь отрицательные значения, контроллер естественно ругается. Необходимо вводить значения в формате "DEC", а записывать в контроллер в формате "UNSIGNED". Каким образом можно это реализовать "малой кровью"? Люди не поймут, чтобы выставить температуру минус 10 градусов, надо вводить 65528 !!
Если вы для теста добавите на экран два цифровых ввода (один с dec, другой с unsigned), привязанных к одному регистру, и введете в dec -10, то увидите, что во втором отобразится именно 65526.
Т.е. это просто разные представления одного и того же набора байт в памяти.
Поэтому вопрос в другом - как именно "ругается" ваш контроллер и какой формат данных ему нужен?
Контроллеру как раз нужен формат unsigned, два регистра на экране с разными форматами я уже делал. Надо передать в контроллер значение Unsigned, с положительными значениями все ОК, а с отрицательными не идет. Короче , надо вводить DEC, а передавать Unsigned.
DEC соответствует INT , а Unsigned - WORD. У вас два варианта, с помощью масштабирования в дисплее перевести DEC в Unsigned, либо с помощью макроса INT_TO_WORD.
Есть и 3 вариант, с помощью функциональной области ( или функциональной кнопки) копировать задающий регистр в другой, там же математической операцией прибавить к заданному числу 65536. И уже его отправить в контроллер.
Огромное Вам спасибо, буду пробовать.
Добрый день.
Вопрос про подсветку.
В панели есть системный регистр, отвечающий за яркость подсветки, хочу чтоб по истечении заданного времени она отключалась до следующего нажатия, и включалась при любом тапе, но не могу придумать, как это сделать. Т.е. как можно отследить само нажатие?
PS СП310-Р