Наверное не понятно просто описал. Взял две разных переменных (In1 и In2), когда обе активны, то срабатывает переменная (Out1). Формирую маску из In1, In2, Out1. Панель отрабатывает всегда все вкл/выкл от In1 и In2, а вот Out1 не отображает никогда.
Вид для печати
Задача такова: есть оборудование включающее PLC210,HMI-СП307, индуктивные датчики, кнопки. Необходимо с помощью HMI отслеживать цикл работы оборудования. На HMI отображаются сигналы от входов PLC (получилось сделать через маску входов), включение/выключение виртуальных тумблеров (выбор режима работы на HMI)(отображается без проблем), выдача сигналов на выхода PLC (еще не пробовал), срабатывание промежуточных виртуальных переменных (например срабатывание одновременно 1 и 2 входов PLC устанавливают некую внутреннюю переменную)(сейчас с этим и борюсь).
похоже на очередную курсовую....
Здравствуйте!
Не могу при работе с конфигуратором СП3** поставить кнопки на прозрачном фоне. Кнопки нарисованы и сохранены в формате png и bmp - в редакторах прозрачный фон. Когда устанавливаю их в конфигураторе - кнопки на чёрном фоне...
Может настройка какая есть? Или формат должен быть иной?
Когда добавляете изображение из биб-ки в конфигураторе, галку прозрачность поставьте, во всех изображениях. Вложение 70163
Приветствую Уважаемые.
Направьте/подскажите - задача - обмен между СП307 и ТРМ212. Так ТРМ 212 имеет формат нужных данных (измеренное значение, уставка) Signed int. Что с этим форматом делать? До этого стыковались с другими типами ТРМ - но там float - и все проходило без танцев. Описание из мурзилки "... отрицательные числа представляются в дополнительном коде..." ни на какие мысли не натолкнуло.
Вместо флоат, ставите целочисленное (WORD или DWORD) и формат DEC (число со знаком), и если надо то кол-во точек после запятой, задаётся в ТРМ.
То есть, принимаете например целочисленное 255 и 1 точка после запятой, на дисплее будет 25,5 градусов.
Передача отрицательного числа будет в дополнительном коде например получено 65431, в DEC это будет -105, с одной точкой после запятой -10,5 градусов.
Советую изучить типы данных в справках по Codesys 2.3 или Лоджику. А это из справки в конфигураторе панели Вложение 70177
Здравствуйте, коллеги!
Расскажите пожалуйста как работает элемент IF в расширенном режиме конфигуратора.
Правильно я понимаю что "Текущее значение" это бит который передается в условие и если он TRUE то выполняется блок Self Unit?
Что такое "Индекс" в Unit Property этого IF?
1.Почти правильно. Точнее правильно, если в контейнер IF "вставлен" всего один элемент.Цитата:
Правильно я понимаю что "Текущее значение" это бит который передается в условие и если он TRUE то выполняется блок Self Unit
Но IF в общем случае предполагает наличие ДВУХ "вставленных" элемента (см. например, стандартный индикатор). Тогда, если условие TRUE, то выполняется первый элемент из списка "вставленных", в противном случае - второй.
2.Ответ вытекает из п.1.Цитата:
Что такое "Индекс" в Unit Property этого IF
Индекс отображает элементы из списка состояний.
Вложение 70181
Вложение 70182 Вложение 70183
Ну то бишь панель сама отрабатывает этот дополнительный код, вытаскивая знак, и располагая целую и дробную часть согласно указанному количеству знаков после запятой?
Самое интересное - так и сделано - считывается word (поскольку указано что signed int 16), в свойствах индикатора DEC, 5 всего, дробная 1. Но на выходе чушь какая то. В принципе понял - будем копать. Толи читаем не так, то ли не там :)
Как правильно делать математику в функциональной области (так же и в ГМ) и потом ее выводить в текстовое поле?
Например как на скрине:
"Счетчик секунд" - "Время старта" = "Время работы в секундах"
"Время работы в секундах" * "Производительность в час = 30" / "Количество секунд в часе = 3600"
Вложение 70194
В поле вывода указываю Формат = Unsigned, и 2 знака после запятой, если делить на 36.
to senkos
ЗЫ.
В Вашей цепочке вычислений можно уменьшить число промежуточных переменных
Т.е. можно так
PSW1010 = PSW38 - PSW1000
PSW1010 = PSW1010 * 30
PSW1010 = PSW1010 / 3600
На дисплей выводить PSW1010
Добрый день, есть много однотипных устройств на экране СП307. при нажатии на это устройство на панели появляется всплывающее окно управления этим устройством(старт-стоп авто-ручное). Так вот, чтобы не плодить для каждого устройства новое окно, хотелось бы сделать одно для всех. т.е. при вызове окна стартовал макрос и адреса регистров управления устройством передавались в виде указателей на эти регитсры в окно управления устройством. Может есть у кого рабочий пример макроса?
Приветствую Уважаемые.
Вопрос следующего характера - как я правильно понимаю - некого готового таймера или подобной функции в панели нет?
Смысл в следующем - требуется изменять некую уставку для вторичников с неким интервалом по графику. Поскольку ничего не нашел - пока мысль - функциональная кнопка, которая запускает макрос. При запуске макрос скидывает в некую переменную регистр PSW38 - время от включения панели (ну или его преобразование в минуты) а дальше по банальному if.. else if в от разницы PSW38 и сохраненной переменной присваиваем значение уставки.
Или есть более изящное решение?
В панели есть импульсы 100ms, 300ms, 500 ms (системные регистры), секундные (сколько надо секунд) и минутные доступны в ФО (функц. области), можно отсчитать любое время,
а так же 4 страницы назад выложен таймер отсчёта времени без макросов, с подробным описанием ещё на страницу
https://owen.ru/forum/showthread.php...&page=291#2910
Запаковал в зип пример. На основном экране крутится функциональная область, которая считывает регистры с ПЛК и пишет их во внутреннюю память панели (потому что регистры ПЛК области 3х, не могут быть разбиты на на биты в панеле для вывода статусов устройства). При нажатии кнопки во всплывающем окне устройстве, пишем значение бита в регистре и записываем этот внутренний регистр в регистр ПЛК. Всё просто. Немного не понятен синтаксис как это реализовать. Как работать с указателями в этой панельке я не нашёл, вообще по макросам мало инфы.
Да, так уж вышло. 3х читаем статусы, а команды управления пишем в 4х.
Динамическая адресация
Вложение 70463
В ф.кнопке пишешь в индексный регистр номер устройства (0, 1, 2 ..), а затем вызов окна.
На окне используешь в кнопках динамическую адресацию.
Уже сделал по своему ;)
Добавил два макроса один на запись регистра ПЛК, второй на чтение регистра ПЛК. перед вызовом всплывающего окна присваиваю временному регистру PSW[500] значение адреса ПЛК. далее во всплывающем окне в функциональной области каждую сек. читаю через макрос значение регистра плк (PSW[500]) и пишу значение во временный регистр PSW[600] и дальше все биты этого регистра разбиваю как мне надо:
WORD Value=0;
Read(NET_0, 1, MODBUS_TCP_REG_3X, PSW[500], 0, TYPE_WORD, &Value);
PSW[600]=Value;
а пишу значение в ПЛК по кнопке через макрос записи:
Write(NET_0, 1, MODBUS_TCP_REG_4X, PSW[500], 0, TYPE_WORD, PSW[501]);
В PSW[500] адрес регистра ПЛК. в 501 зачение. Всё оказалось просто.
Теперь хоть прояснилось, почему сразу не пишем биты в регистры ПЛК типа 4х739.15. Здесь TCP, а пример то выложили с использованием RS
Ну и ладно, докажу, что с использованием динамической адресации еще проще будет.
Но для начала нужно выбросить лишние телодвижения в существующих кнопках управления
Лишний промежуточный регистр PW1xxx и лишние операции с битами
Вложение 70477
это справедливо для всех кнопок
например
Вложение 70478
Если запись отдельных бит в регистре ПЛК, типа 4x739.15, не поддерживается, то можно ведь просто числа записывать в регистр
Вот так
Вложение 70479 Вложение 70480 Вложение 70481
739.15 == 32768
739.3 == 8
739.2 == 4
739.1 == 2
739.0 == 1
А теперь добавим динамическую адресацию, например индекс будет в PSW40,
Вложение 70482
а коэффициент(множитель) будет равен 1
Вложение 70483
И так для всех кнопок, в регистр управления добавляем динамическую адресацию через регистр PSW40
Аналогично нужно добавить динамическую адресацию и для индикаторов
Вложение 70485
Теперь достаточно в ф.кнопках на экране, перед вызовом Окна #1, добавить запись в PSW40 индекса от 0 до N (номер устройства)
Вложение 70484
Все окна кроме 1 можно удалить
И ни каких макросов не нужно...
Благодарствую - попробую разобраться.
На данный момент пока пошел "дубовым путём"- через условия - надо прогнать оборудование на пробном пуске.
Но столкнулся со странной штукой - регистр PSW[38] достигает 65535 и обнуляется. То сть логично - если это младшее слово. Но есть еще и старшее - почему оно не подтягивается?
Конструктив примерно такой
T_Start = MAKEDWORD(PSW[38],PSW[39]); // стартуем, записываем время старта
T_tek = MAKEDWORD(PSW[38],PSW[39]); // берем текущее время
PSW[308] = Ustavka; // пишем текущую уставку в регистр
switch ((T_tek - T_Start) / 600)) // получаем разницу в минутах от начала старта
дальше несколько case - по каждой разнице своя уставка присваивается в переменную Ustavka. Когда PSW[38] становится 0 - подставляется первая уставка. Не могу понять что не так.
Вот здесь
switch ((T_tek - T_Start) / 600)) // получаем разницу в минутах от начала старта
С чего Вы взяли, что так можно для DWORD ?
Я хоть и чайник, но "Выражение, следующее за ключевым словом switch в круглых скобках, может быть любым выражением, допустимыми в языке СИ, значение которого должно быть целым"
Целым - это значит 16 битным ! целое без знака в си unsigned int от 0 до 65535. Вот и происходит неявное преобразование типа
Уважаемый petera!
Можете дать ссылку как воспользоваться клавиатурой N_КлаваМ.xjt ?
Эту клавиатуру можно использовать на прямую только в версии конфигуратора v2.D3d потому, что в версии v2.D3к при сохранении объектов, не только ГМ, в Библиотеке элементов(материалов) происходит замена битовых адресов типа PSW500.3 на PSB500. И объекты естественно перестают работать.
Вот так свойства клавиатуры выглядит в v2.D3d
Вложение 70551
А так в версии v2.D3к
Вложение 70552
Это справедливо только если брать объекты из библиотеки. При открытии старых файлов в новом конфигураторы данных глюк не наблюдается.
Или если скопировать клавиатуру с экрана старой версии на экран новой.
Это было введение.
Клавиатуры из моей библиотеки служат для ввода и редактирования символьных переменных в замен стандартных всплывающих клавиатур.
Т.е. данная клавиатура расположена на одном экране(окне) со стандартным полем ввода.
при этом галку Клавиатура в настройках поля ввода нужно отключить
Вложение 70553
В работе нужно вначале нажать на поле ввода и затем набирать текст на клавиатуре
Скрытый текст:
Спасибо. Через старый конфигуратор получилось.
Добрый день.
Есть у меня ПЛК 160 и есть панель СП300. Все работает. есть проект ПЛК и проект панели. ПЛК-мастер, панель - слейв (https://drive.google.com/file/d/1zLJ...ew?usp=sharing)
Поручили удаленно подключиться к ПЛК чтобы забрать данные. (в панели страница - температуры). Но опыта работы нету, а проект работает - если накосячу - повесят на меня большую сумму. Из прочитанного мне показалось что самое простое - это сделать онлайн эмуляцию панели и подключиться через TCP. Но вот как правильно это сделать - не знаю. IP ПЛК по умолчанию - не менялся. IP компа менял на нужный из этой же подсети. ПЛК пингуется. ИЗ кодесиса подключаюсь - ошибка связи. из онлайн эмуляции СП не подключается у меня :(
Может кто поможет настроить?
А разве СП3хх поддерживает онлайн эмуляцию через Ethermet?