Мне показалось, что у kondor3000 очень даже просто и корректно получилось.
Подскажите, а о каких библиотеках идет речь? Можно ссылку на этот материал?
Вид для печати
Просто поймал скрин по времени, если по 1000 мс по умолчанию в ОРС (запись, потом чтение каждой переменной), то прямо видно как они записываются по очереди в ОРС сервер слейв, в программе тоже всё видно.
Примеры чтения и записи через биб-ки есть на сайте
Примеры / Примеры сетевого обмена/ Обмен через библиотеки Modbus и OwenNet, вам нужен обмен через библиотеки Modbus
https://owen.ru/product/codesys_v2/example_program
Может. Может и биб-ки не нужны- я же говорил.
Непонятно само требование именно такой записи в изложенном вами же виде. Оно несколько нечастое. И подходит ли оно.
Допускаю что в описании слейва так и есть (бывает).
Но так же пока нет никаких исключений варианта что вы что-то недопоняли (про слейв) и какой-то фигней занимаетесь
У меня в проекте несколько ВУ (выпрямители) . И когда включается наша СУ, то нужно дистанционно активизировать эти слейвы ВУ. А для этого необходимо через один регистр запустить (вывести из "спящего" режима), а уж только потом, через другой регистр, прописать режим работы ВУ. Это один из примеров, когда требуется отработка последовательной записи данных в регистры по Modbus. Нарушать последовательность нельзя.
а при "погружении" в спячку - они разве "обнуляются"?Цитата:
вывести из "спящего" режима
каким образом ячейка памяти с адресом этого регистра обнуляется? разве у слейва нет retain?Цитата:
через другой регистр, прописать режим работы ВУ.
каким-то образом он же помнит значение регистра для пробуждения? почему же он должен потерять режим работы ДО спячки?
и если он в спячке, то каким образом слейв ждёт записи в регистр "побудки"? он же тоже должен быть в спячке
а если он не спит, значит не спит и память режима ВУ, и значит никакого жесткача с записью регистра как такового - нет.
а если он спит, то никакого страшного не случится, если в режим будет записано другое значение другого режима (допустим ошибочно)
сдаётся мне, что как и говорилось изначально и потом добито мистером Серый Волк -именно это и не нужноЦитата:
При условии что именно это нужно.
как-то так видится со стороныЦитата:
вы что-то недопоняли (про слейв) и какой-то фигней занимаетесь
И опять вопрос по Modbus. Начинаю понимать, почему мои предыдущие вопросы вызвали столько эмоциональных ответов. Всем большое спасибо!
Допустим, я организовал сиcтему, когда ПЛК Master и один Slave UMD:
Вложение 81629
Правильно ли я понял, что независимо (!) от того, что мы делаем в программе контроллера с регистрами Read101, Read103 и Write104 система обмена данными по Modbus будет постоянно циклически обновлять в UMD значения Read101 и Read103. И цикл обмена будет определяться параметром Poling time, если Work mode = By poll time. А значение Write104 будет записываться во внутренний регистр 104 ВУ только в случае изменения его значения. Для этого Work mode=By value change.
И даже, если мы скроем в условном операторе все обращения к регистрам ВУ, и условие будет FALSE, то в UMD в эти регистры все равно будут записываться значения из ВУ.
Если у меня в Slave UMD будет 20 регистров для чтения, то они будут постоянно считываться из ВУ и передаваться в ПЛК.
Я прав?
Я хотел сказать, что, когда мы считываем в программе значение регистров ВУ, то на самом деле мы считываем значения из UMD. А в UMD регистры заполняются от ВУ по Modbus циклически не зависимо от того, читаем мы эти регистры в программе или нет!
Я так и предполагал. Переменные для чтения я и не хотел изменять в программе. Только чтение. Тут главное, то , что переменные чтения в UMD считываются из регистров ВУ постоянно и циклически. И это происходит, когда мы в программе вообще не обращаемся к этим переменным.
Сдаётся мне что необходимо уточнение у/для vsa, как он видит МЭК-цикл ПЛК на предмет когда (в какой момент) обновляются входы конфигурации и когда она реагирует на выходы.
Здравствуйте коллеги, скажите пожалуйста,есть ли какой то способ узнать время работы кода в TASK, чтоб понимать сколько можно минимально поставить время работы TASKa
Здравствуйте уважаемые участники форума. Есть проблема с ПЛК110-60М2. Контроллер установлен в щите парового котла. На дискретные входы подаются команды(ключи, кнопки, контакты реле), выходами контроллер включает светосигнальные табло, звонки, реле. Через порт_1(RS-485_Master) читает данные с ТРМов, и записывает их в СП310. Все работает. Но иногда, после длительного отключения(неделя), контроллер перестает работать по RS485. Сам же контроллер (входы, выходы) работает согласно программе. Берем ноутбук, запускаем CODESYS, подключаемся к ПЛК. Перезаписываем программу. Делаем старт. Все начинает работать. Данные по RS485 пошли. Подскажите что может быть?
А просто выключить и включить питание СП310 (сенсорной панели) не пробовали?
Что за манера - на любой чих перепрошивать программу.
Если после перезагрузки по питанию сенсорной панели связь восстановится, то добавьте на экран кнопку выключения и включения обмена - поможет - вместо перепрошивки и перезагрузки будет сенсорная кнопка.
Вот тут почитайте советы, которые мне дали
https://owen.ru/forum/showthread.php?t=37464
Доброе утро FPavel. В своем посте я указал, что проблема возникает с ПЛК, а не СП310. ПЛК перестает опрашивать ТРМ. Это видно по мерцанию светодиодов(вернее их отсутствию) на ТРМах. Вдобавок ко всему временной интервал. Если выключить и через пять минут включить, то все работает. А если пройдет неделя, могут возникнуть выше указанные проблемы. Спасибо вам за комментарий. Может кто еще подскажет, где искать проблему.
колеги, Доброе утро!
ППЛК_110 -мастер, имеем две панели оператора СП310 слейвом. Вопррос: естть способ или алгоритм который позволит ,например, изменить уставку терморегулятора ииз панели,,А,, и чтобы эта новая уставка отобразилась в панеле,,Б,, и наоборот?
Извините, можно поподробней, на обоих панелях присутствует окошко ,,цифровой вввод,, в котором отражаеться текущая уставка. ПЛК прочтет ее из панели,,А,, но разве получиттс её записать в оокошко ,,цифровй ввод,, панели ,,В,,?
В Лоджике есть макросы SelChgI ( SelChgF ), управление из 2 мест, вот его и примените, перенеся в программу Codesys на ПЛК.
мастер читает из панели А и записывает в панель Б и наоборот.
2 входа - чтение с 2 панелей, один выход- запись в 2 переменные, на 2 панели сразу.
Код:function_block SelChgF (* SelChgF *)
var_input
I1 : real;
I2 : real;
end_var
var_output
Q : real;
end_var
var
I_1 : real;
I_2 : real;
end_var
__________________________________
if I_1<> I1 then (* SelChgF *)
Q:= I1;
elsif I_2 <> I2 then
Q := I2;
end_if
I_1:= I1; I_2 := I2;
Сейчас погляжу, Спасибо
Посмотрел, Может я не очень четко сформулировал вопрос. Проблемы нет чтобы изменить переменную из разных панелей для ,,например,, таймера. При воде уставки мы используем инструментт ,,цифровой ввод,, на панели. При работе с ней она визуально сохраняет веденное число ,например 100. Если мастер производственной смены решает изменить на панели ,,А,, уставку на 200 то нужно чтобы на панели ,,В,, в такомже окошке ,,цифровй ввод,, тоже стала уставка 200, чтобы оператор станка на другом конце производственной линии увидил что работа оборудования откоректирована и наоборотВложение 81734
у вас ПЛК мастер, какие проблемы-то?
у вас обе панели читают содержимое одного регистра в ПЛК, а не сохраняют это у себяЦитата:
При работе с ней она визуально сохраняет веденное число ,например 100.
если это вас так беспокоит, то у цифрового ввода есть такая вещь как "мониторинг" - используйте его для проверки введённого значения
и ничего не мешает также просто сделать "контрольный" экранчик - панель А / панель В, где оператор будет видеть, кто что ввёл и применилась ли правка настроек
и ничего не мешает также просто сделать "контрольный" экранчик - панель А / панель В, где оператор будет видеть, кто что ввёл и применилась ли правка настроек// Ройду пот этому варианту, Всем ещё раз спасибо!
посмотрите инструмент Мониторинг, на вкладке "Регистр элемента"
я редко им пользовался, не было необходимости, но вроде он может вам помочь решить вашу задачу более изящноЦитата:
Некоторые элементы (например, Цифровой ввод) способны не только отображать значения регистров, но и записывать в них данные. По умолчанию (при отсутствии галочки Мониторинг), элемент отображает значения регистра, в который записываются данные (пп. 1.3). При наличии галочки, можно указать регистр, который будет отображаться элементом – т.е. с помощью одного элемента можно будет записывать данные в регистр 1 и отображать данные из регистра 2.
Благодарю! Обязательно поробую:o
capzap. Вот конкретика. Может подскажите в чем может быть дело.
Прямо проблемных проблем не видно, но:
- почему установлена такая низкая скорость опроса (9600)?
- кто подключен на порт RS485-2?
Хорошо было бы, конечно, в момент проблемы подключиться и посмотреть, что происходит в конфигурации.
А потом не перепрошивать, а например, сделать "сброс" - "старт"
1. Скорость раньше была 19200. Решили ее уменьшить. Думали может поможет.
2. К порту 2 подключен МСД200.
3. Завтра попробую сделать "сброс" - "старт".
У меня только 1 претензия, мин. цикл 1 мс, возможно ПЛК не хватает этого времени.
Добавьте статистику и проверьте мин. цикл.
А в панели, возможно лучше будет поставить запись по изменению (By Value Change) и сделать запись группой через String
https://owen.ru/forum/showthread.php...l=1#post244022
проект не смотрел, судя по ответам других конфигурация и холст с квадратиками. Логика и настройка соединений тут второстепенны, для диагностики не плохо бы видеть скрин последней ошибки у мастера, если таковая имеется, а так это что то в линии, что за витая пара, что расположено рядом из "шумящих" исполнительных механизмов, есть ли заземление и соединены ли все потребители на одну шину
Добрый день! Задача по синхронизации одинаковых показаний на двух панелях оператора решена блогадоря подсказкам In_Da_Cher_A и Kondor3000 , ещё раз им спасибо, имею наглость попросить на языке ST аналогичный макрос только для булевых переменных SelChg8 (выбирает значение bool которое менялось последним) из Овен Лоджика. Если есть конечно . Спасибо.
Вот, может кому пригодиться : выбирает значение BOOL которое менялось последним:
FUNCTION_BLOCK BIT_VUBOR
VAR_INPUT
B1: BOOL;
B2: BOOL;
END_VAR
VAR_OUTPUT
B_OUT: BOOL;
END_VAR
VAR
B_1: BOOL;
B_2: BOOL;
END_VAR
IF B_1<>B1 THEN
B_OUT:=B1;
ELSIF B_2<>B2 THEN
B_OUT:=B2;
END_IF;
B_1:=B1;
B_2:=B2;
Для меня - пригодилось:)
Добрый день всем. Давно не возился с овеном, тем более версия M02 вышла. Не получается настроить общение ПЛК110-30Р.М с блоками расширения МВ110-32 и МУ110-32.
Вот конфиг настройки блоков расширения, начиная с 32 адреса с шагом в 32.
Скрытый текст:
Вот настройки в ПЛК RS-485
Скрытый текст:
Вот настройки Universal Module Device
Скрытый текст:
Пытаюсь прочитать 99 и 100 регистры, но ничего не получается. На блоках расширения горит авария, пните пожалуйста, в какую сторону копать нужно.