Расскажите пожалуйста, для валенка , как запустить HMI-демо в кодесисе v2 пошагово для созданного проэкта и готовой визуализацией?
Вид для печати
Расскажите пожалуйста, для валенка , как запустить HMI-демо в кодесисе v2 пошагово для созданного проэкта и готовой визуализацией?
1. Можно, вот в школе пример делал
Вот скрин Вложение 28030 как эти переменные можно считывать?
Спасибо.
Я их использовал только в визуализации для контроля, и никаких операций с ними не делал, не было необходимости, на st проще, а на LD надо изучить вопрос..
ООО "БЛС инжинеринг" создайте переменную TIME и просто напишите ее название на ET выходе таймера.
например time_ton1: TIME;
и напишите напротив ET - time_ton1
На счет CV аналогично, только посмотрите какой тип переменной у функционального блока счетчика.
Господа, подскажите с решением задачи. Имеется бункер с весами, который заполняется продуктом. Как можно рассчитать скорость поступления продукта?
Вот десять символов интересуют.
Здравствуйте!
Подскажите как можно сбросить сказу несколько регистров который идут по протоколу модбас.Вложение 28058
Принцип такой, оператор работал в HMI и включал какие то биты в PLC (это было ручное управление) но по ошибке их вдруг не выключил.
Как можно сразу наложить RESET указать с какова и по какой на несколько регистров в конфигураторе или познаванию переменой?
кто бы еще понял что конкретно Вы хотите, вроде все элементарно, но раз вопрос задаете значит есть какой то подвох, о нем Вы не сказали ни слова
Суть заключается в том чтоб одним битом можно сбросить одновременно несколько битовых регистров в конфигураторе, при этом указать только на определенные регистры или биты Вложение 28070
Можно сбрасывать биты простым способом Вложение 28071 можно и таким способом сбросить но в первом варианте мы указывает с какого и по какой бит необходимо сбросить,
предпочтительно найти решение к первому варианту.
опять же не понятно, что Вы хотите. В описании рассказываете что с определенного бита определенное количество, а на картинках сброса по байтно, так как Вам понимать, если тупо байты, да еще ив cfc, берете элемент move с EN, на разрешающий вход свой бит сброса и присваиваем байту конфигуратора ноль
с телефона сижу не вижу проекта, только указатели работают начиная с байт, да и размер массива булей проверьте
так для соответствия по размеру указателя и булей и нужны промежуточные переменные (программные були, которым присваиваем конфигурационные).
Насколько я понял ключевые слова в этом вопросе но по ошибке их вдруг не выключил. Если есть такая возможность я бы в ПЛК использовал бы R_TRIG при получении сигнала включения бита от HMI. Тогда пока оператор не выключит бит включить его снова не получится и ошибок не будет.
В примере, как раз, настраиваемый диапазон и кол-во сбрасываемых битов конфигурации slave (через цикл for - указываем начальный и конечный элементы указателя на массив). конфигурационный булеан - это бит, программный булеан - это байт. Указатель на массив из булевых переменных - по факту, указатель на массив из байт, поэтому этот указатель состыковать с конфигурационными булеанами (битами) не получится. Поэтому заводим в области памяти программные булеаны (которые есть байты), указателю указываем адрес области памяти первого программного булеана. После сброса (заполнения указанных элементов указателя на массив нулями, а соответственно обнуляем программные булеаны), присваиваем программные булеаны конфигурационным.
bit_to_bit_prg(); (*действие, в котором присваиваем программным булеанам конфигурационные*)
bit_array:=ADR(B1_1_); (*указываем адрес области памяти первого программного булеана*)
IF reset_ THEN
FOR i:=b_start TO b_end DO (*b_start и b_end - начальный и конечный элементы указателя на массив для обнуления*)
bit_array^[i]:=0;
END_FOR
bit_to_bit_slave(); (*действие, в котором присваиваем конфигурационным булеанам обнуленные программные*)
reset_:=0;
END_IF
Здравствуйте. Не могли бы вы подсказать, правильно ли я делаю?
Моя текущая задача - посылать два широковещательных сообщения с мастера ПЛК110 подчинённым устройствам по RS-485 каждые 2 секунды. Сообщения двух типов : однобитового и двухбайтового формата. (код функции для первого 15, для второго 16). Есть адреса устройств-подчинённых и адреса регистров (для первого сообщения регистры с 00001 по 00044 и второго сообщения с 40001 по 40011). Небольшая часть таблицы которую я сделал для примера:
Вложение 28086
Я создал модуль Modbus master, затем добавил элементы Universal Modbus Module равное количеству устройств, на которые я буду рассылать сообщения. Для первого сообщения я создаю 8-битные модули выхода и присваиваю им значения регистров 00001 и 00009, использую команду 0x0f
Вложение 28087
Вложение 28088
В соответствующие таблице биты я присваиваю переменные, которым я буду присваивать значения в программе.
По поводу второго сообщения(16 команда, двухбайтное) - не могу найти модуль значения WORD, ну или 16-битный регистр.
Вложение 28089
Когда я работал в Codesys 3.5 делалось там по-другому, там добавлялся новый кaнал выставлялся код функции и длина, регистры сами создавались:
Вложение 28090
Вложение 28091
Так и называется - Register output moduleЦитата:
По поводу второго сообщения(16 команда, двухбайтное) - не могу найти модуль значения WORD, ну или 16-битный регистр.
Вложение 28092 Вложение 28093
Только если нужно
То в этом случае не надо делать - "добавил элементы Universal Modbus Module равное количеству устройств"Цитата:
посылать два широковещательных сообщения с мастера ПЛК110 подчинённым устройствам по RS-485
Потому, что широковещательные сообщения принимают все устройства на шине, для этого нужно всего один Universal Modbus Module с адресом слейва "0" этот адрес и является широковещательным.
Большое спасибо вам, petera.
Странно, тогда зачем в ТЗ были указаны конкретные Modbus адреса для устройств-потребителей... Кстати, у меня в сети с ПЛК110 кроме устройств-потребителей есть аналоговые/дискретные модули ввода-вывода с конкретными адресами и панели оператора; если я на них буду посылать широковещательным сообщением данные, и одновременно снимать-посылать сигналы управления, ничего страшного ведь не произойдёт?
Я вчера потратил время и поискал как работают функции Modbus, но немного запутался. Скажите, я правильно понимаю результат работы 0x0f? То есть назначаю адрес регистра для всего модуля - этот же адрес присваивается нулевому биту модуля, для следующего бита адрес будет сдвинут на +1, и т.д.
Вложение 28098
Кусочек таблицы второго сообщения для примера допустим выглядит так:
Вложение 28099
Тогда я объявляю количество модулей, равное количество отправляемых переменных, каждому из них присваиваю свой регистр и функцию 0x10, правильно?
Вложение 28100
Последний регистр в таблице второго сообщения по заданию отличается от других, при этом его надо также надо посылать функцией 0x10:
Вложение 28101
Проблема в том, что для Register output module я не могу задать переменные для отдельных битов, а для 8-битного модуля выхода не поддерживается функция 0x10.
ПравильноЦитата:
Скажите, я правильно понимаю результат работы 0x0f? То есть назначаю адрес регистра для всего модуля - этот же адрес присваивается нулевому биту модуля, для следующего бита адрес будет сдвинут на +1, и т.д.
Вложение 28098
Если у каждого Register output module в его настройках адреса 40001, 40002, 4003 и т.д, тогда правильно.Цитата:
Тогда я объявляю количество модулей, равное количество отправляемых переменных, каждому из них присваиваю свой регистр и функцию 0x10, правильно?
Вложение 28100
Для этого существует битовая адресация разрядов (доступ к отдельным битам через точку)Цитата:
Последний регистр в таблице второго сообщения по заданию отличается от других, при этом его надо также надо посылать функцией 0x10:
Вложение 28101
Проблема в том, что для Register output module я не могу задать переменные для отдельных битов, а для 8-битного модуля выхода не поддерживается функция 0x10.
Вложение 28110
Понял, большое вам спасибо!
Добрый вечер.
Объясните пожалуйста в чем различие между измеритель регулятором и пид регулятором...
Вроде задачу как я понял одну и ту же выполняют.
Здравствуйте.
Есть необходимость изменять параметр Period of PWM фиксированного модуля Pulse-wide modulator из программы непосредственно во время исполнения.
Подскажите, пожалуйста, как обратиться к нужному параметру? (прямого адреса не нашёл)
Здравствуйте, Владимир.
PLC-100.R
Задачи самые разные. Одна из них - нестандартное использование PWM модулятора для целей индикации и управления.
Снова обращусь сюда - решил самостоятельно проверить, будут ли конфликты с модулями ввода-вывода при широковещательном сообщении. Подключил и считываю данные с модуля дискретного ввода МВ110-32ДН. Одновременно делаю рассылку широковещательным сообщением по адресу 0, регистры пробовал ставить разные. Периодически при обращении к адресу 0 выскакивает ошибка 81, не доходят мол данные от модулей (хотя сигнал с МА110-32ДН не пропадает). Это не страшно?
Вложение 28141
И ещё, есть ли какие-нибудь подводные камни когда буду работать одновременно с RS-485-1 и RS-485-2? (ПЛК110-30) Просто создаю 2 Modbus Master-а и делаю соответсвующие замены элемента debug-232 на RS-485-1 и RS-485-2?
Не знаю почему, возможно мастер в конфигурации не корректно работает. Потому, что по стандарту, при получении широковещательного сообщения, подчиненные устройства выполняют команду, а ответ мастеру не отправляют.Цитата:
Одновременно делаю рассылку широковещательным сообщением по адресу 0, регистры пробовал ставить разные. Периодически при обращении к адресу 0 выскакивает ошибка 81, не доходят мол данные от модулей (хотя сигнал с МА110-32ДН не пропадает).
Вложение 28142
https://ru.m.wikipedia.org/wiki/Modbus
Логично, ведь подчиненных может быть много! Как они все сразу ответят? Каша будет на шине.
По этому "не доходят мол данные от модулей" в принципе не должно быть, мастер ведь не должен ждать никаких ответов для широковещательного сообщения.
Два мастера, у каждого свой интерфейс. Ни каких проблем быть не должно.Цитата:
И ещё, есть ли какие-нибудь подводные камни когда буду работать одновременно с RS-485-1 и RS-485-2? (ПЛК110-30) Просто создаю 2 Modbus Master-а и делаю соответсвующие замены элемента debug-232 на RS-485-1 и RS-485-2?
Если я создал проект в Codesys 2.3 на CFC, могу ли я изменить его на ST в какой-то момент, или надо создавать проект заново?
нет, не сможете, CFC не поддается конвертации в другой язык.
Попробуйте на простых примерах... И это кажется где-то в справке даже было.
Или попробуйте конвертировать не в ST а в IL или другой. нюансов уже не помню, но напрямую в ST не работает.
Добрый день.
Вопрос не сколько к среде программирования, а больше к реализации логики на ФБД. Нужно в зависимости от максимального параметра Х произвести выбор минимального по параметру Y. Вся загвоздка в том, что может быть несколько каналов, где Х максимально. Как пример, Х1=20, Х2=55, Х3=55, Х4=55; Y1=6, Y2=7, Y3=22, Y4=21. Пробовал пойти таким путем - найти макс. значение среди Х - 55; булево определить к каким Х он относится - Х2, Х3, Х4=1, Х1=0; соответственные номера каналов на Y перемножить с такими же номерами каналов т.е. Х1(0)*Y1(6)=0, Х2(1)*Y2(7)=7,Х3(1)*Y4(22)=22,Х4(1)*Y4(21)=21 и потом из полученных значений для Y(№) выбрать минимальный. Но при такой "моей" логике, будет выбираться канал с минимальным значением, который, в данном случае, равный "0" - Y1, а нужен минимальный из соответствующих по номеру - 2,3,4 Y'ков. Из указанного условия это Y2=7. А как ограничить возникающие в работе Y'ков "0" пока не получается. Думал как-то через SEL, но идей пока нет.
Подскажите, пожалуйста, как "подправить" программку чтобы в итоге выбирался Y2=7.
1. Создаем двумерный массив, элементами которого будут соответствующие X и Y.
2. Сортируем этот массив в порядке убывания "иксов" ("игреки" сортируются вместе с "иксами"). В итоге имеем в начале массива все максимальные значения (в любом количестве).
3. Ответом делаем "Y" самого первого элемента.
4. Если второй "X" равен первому, то сравниваем второй "Y" с первым "Y", если он меньше, то делаем его ответом. И так делаем до тех пор, пока не переберем все повторяющиеся "иксы".