Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 17

Тема: "мигает" МДВВ

  1. #1

    По умолчанию "мигает" МДВВ

    Добрый день

    имеется такая конфигурация (управляет в доме освещением)

    ПЛК100 + 3хМДВВ + МВУ8 + МК100-8Р + МК110-8д-4р

    Все соединено по modbus-rtu. Все работает на ура, кроме ОДНОГО из МДВВ - периодически мигают все источники освещения, подключенные на его реле. Остальные модули работают без проблем.

    В чем может быть причина?

    Да, и еще вопрос - индикаторы связи rs485 мигают с перерывами (частота опроса 25 мсек) - то есть мигают часто-часто секунд 10, потом пауза на полсекунды примерно, потом снова начинаю часто мигать. Это происходит на всех модулях. Кодесис на контроллере вроде ошибок не показывает (или просто не успевает?). Но это вобщем-то мелочи. Главный вопрос - почему мигает МДВВ

    Заранее благодарен

  2. #2

    По умолчанию

    Подаете ШИМ на выходы модуля? Два других МДВВ себя так не ведут?
    Все-таки проверил бы настройки обмена именно с этим модулем в проекте.
    Верно ли выставлен адрес, нет ли дублирующих адресов.

  3. #3

    По умолчанию

    Цитата Сообщение от dbkrasn Посмотреть сообщение
    Главный вопрос - почему мигает МДВВ
    У меня было что-то похожее. Оказалось в программе выходную переменную из ПЛК-конфигурации обнулял, а затем присваивал нужное значение. Так вот данные на внешний модуль по RS485 передаются не по оканчанию цикла ПЛК, а по мере надобности!!! Как время пришло так данные берутся из программы и передаются по RS485, вне зависимости от того промежуточные эти данные или цикл программы окончен. Избавился от этого отказавшись от обнуления выходной переменной в программе и присваивал ей только заведомо верное значение.

    Есть еще один вариант аналогичного поведения МДВВ - в ПЛК-конфигурации есть еще одна переменная, которая передается в адрес МДВВ и вот эта запись и выключает выхода МДВВ.

    P. S. Выложи программу и люди обязательно помогут.
    Автоматизация Диспетчеризация Сервис
    e-mail: ads-kaluga@mail.ru

  4. #4
    Пользователь
    Регистрация
    11.01.2009
    Адрес
    Кострома
    Сообщений
    3,144

    По умолчанию

    Ну и 25мс маловато, при наличии нескольких устройств в сети.
    Ещё посмотрите время цикла ПЛК. Тоже может чуть увеличить стоит. Я бы с времени цикла начал.

  5. #5

    По умолчанию всем спасибо, проблема разрешилась

    Поскольку от документации толку ноль, пришлось прочесать сей форум.

    Что сделано - для модулей ввода/вывода установлен метод опроса "both" (polling+value change) и время опроса 100 мс. Для модулей вывода установлен метод опроса "by value change" и время опроса 200 мс.

    Теперь все работает стабильно

  6. #6

    По умолчанию +1

    Цитата Сообщение от Gans Посмотреть сообщение
    У меня было что-то похожее. Оказалось в программе выходную переменную из ПЛК-конфигурации обнулял, а затем присваивал нужное значение. Так вот данные на внешний модуль по RS485 передаются не по оканчанию цикла ПЛК, а по мере надобности!!! Как время пришло так данные берутся из программы и передаются по RS485, вне зависимости от того промежуточные эти данные или цикл программы окончен. Избавился от этого отказавшись от обнуления выходной переменной в программе и присваивал ей только заведомо верное значение.
    +1
    та же пичалька... ПЛК150+2хМВУ8+1хМВА8 протокол ОВЕН - моргают оба МВУ.

    я плакаю - такая ровная и красивая программка получилась, основанная на постоянном обнулении параметров в начале цикла и последовательной проверке условий для установки единички, при необходимости... и оно бы работало, если бы данные во внешние приборы передавались в конце цикла, а не постоянно...
    Придется переписывать :``о((( А какую методу Вы применили взамен?

    вместо конструкции:
    a:=0; if условие1 then a:=1;... ; if условиеN then a:=1; (* честно так очень красивый и понятный код с учетом громоздких многоэтажных условий *)

    или же конструкции:
    case of
    условие1: а:=1;
    ...
    условиеN: a:=1;
    else a:=0; (* что равносильно предыдущей*)

    применить конструкцию:
    if ИЛИ-ИЛИ-ИЛИ-ИЛИ, then а:=1, else a:=0?... Опять же не факт, что данные не передадутся посередине вычисления ЭТОГО условия, которое займет во времени 3-4 мс...

    Я знаю, в этом и состоит икусство программирования - найти такой метод вычислений и проверки условий, который может выполнить оборудование, а не подгонять оборудование под свои фантазии, но...

    !!! я ж ни_одного_бита не профессиональный программист, хелп!!! я только учус!
    Может как-то можно принудительно заставить ПЛК не передавать данные на модули до окончания цикла, а передавать их в периоды простоя - от завершения программного цикла до времени ПЛК-цикла. Мне лично можно и 50 мс ПЛК-цикл сделать при 10 мс программном цикле...
    Я вот видел в ПЛК-конфигурации в описании связи RS-485 бит "Старт/стоп"... может можно как-то принудительно управлять посылками на модули? например, заблокировать посылку инфы в период действия цикла (в начале программного цикла прописать - СТОП RS-485, в конце цикла прописать СТАРТ RS-485)... тогда эти 10 мс, пока отрабатывает программа - данные не передаются, а потом оставшиеся 40 мс - пусть передаются в любом количестве!!! ибо это будет как раз необходимый, проверенный по всем условиям, параметр...

    КАК управлять работой связи RS-485??????????????
    Хелп, плииииз!!!

    2 lara197a: так же, подумал, что время ПЛК-цикла меньше времени цикла программы... приехал на объект - щас всё порешаю, одним пальцем! :о((( Ы-ы...
    поставил 50 мс, и та же свистопляска хотя статистика показывает - "свободных 40мс". НО! свистопляска стала явно жиже... от увеличения ПЛК-цикла явно снижается частота "миганий". Я полагаю это логичным, если принять, что данные передаются "by polling time (100мс)" вне зависимости от конца цикла - просто сами единички и нули в одном параметре сменят друг друга гораздо реже.

    И кстати, метод опроса "by value change" в моем случае не прокатит - данные обнуляются и объединиваются (т.е меняются) в каждом цикле - опять будет то же самое...

    p.s. а еще довольно редко, но постоянно выскакивает ошибка связи 81... все в одном щите, бок к боку на дин-рейке, связь-витая пара, резисторов оконечных нет.
    Последний раз редактировалось Dimur; 07.12.2011 в 11:12. Причина: добавил эмоций, извините

  7. #7

    По умолчанию

    чтобы не "плакать", надо взглянуть шире на вашу "проблему" с передачей, а не зацикливаться на "красивости кода"
    делайте ваши вычисления в программе любым удобным способом
    Цитата Сообщение от Dimur Посмотреть сообщение
    a:=0; if условие1 then a:=1;... ; if условиеN then a:=1; (* честно так очень красивый и понятный код с учетом громоздких многоэтажных условий *)
    можете хоть 5000 раз за цикл поменять значение этой переменой, но в plc_prg делайте присвоение
    perem_to_rs485 := a;
    раз в цикл
    и эту perem_to_rs485 заводите на передачу в устройства
    Последний раз редактировалось swerder; 07.12.2011 в 11:13. Причина: убрал эмоциональных матюков

  8. #8

    По умолчанию

    Цитата Сообщение от swerder Посмотреть сообщение
    чтобы не "плакать", надо взглянуть шире на вашу "проблему" с передачей, а не зацикливаться на "красивости кода"
    делайте ваши вычисления в программе любым удобным способом

    можете хоть 5000 раз за цикл поменять значение этой переменой, но в plc_prg делайте присвоение
    perem_to_rs485 := a;
    раз в цикл
    и эту perem_to_rs485 заводите на передачу в устройства
    гениально! снимаю шляпу...
    было задумался в эту сторону, но увела меня пичалька от позитивного решения...
    А ведь сработает... и делов-то дописать пять строк.
    Спасибо!!!
    Последний раз редактировалось Dimur; 07.12.2011 в 11:28. Причина: эмоционально плакаю от счастья

  9. #9

    По умолчанию замечания к программированию

    насчет выставления переменных на передачу данных в конце цикла - истину глаголешь. У меня в проге так сделано. Более того - я параноидально завел две переменные - сurr_value и new_value. В проге все вычисления делаются для new_value, а вот в самом конце сравниваются new_value и curr_value и если они различаются, то

    var
    DO_1 AT %QX..... : BOOL;
    DO_2 AT %QX..... : BOOL;
    ...
    DO_N AT %QX..... : BOOL;

    curr_value1 : BOOL := false;
    curr_value2 : BOOL := false;
    ...
    curr_valueN : BOOL := false;
    end_var

    new_value1:=................;
    new_value2:=................;
    ...
    new_valueN:=................;

    if new_value1 <> curr_value1 then
    curr_value1 := new_value1;
    DO_1:= curr_value1;
    end_if

    if new_value2 <> curr_value2 then
    curr_value2 := new_value2;
    DO_2:= curr_value2;
    end_if

    ...

    if new_valueN <> curr_valueN then
    curr_valueN := new_valueN;
    DO_N:= curr_valueN;
    end_if

  10. #10

    По умолчанию

    это уже лишнее, как и if then else. если не равно, то приравниваем, если равно - то нет. какой в этом смысл? приравнивание без условий будет нести абсолютно тот же результат

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Ответов: 8
    Последнее сообщение: 29.03.2011, 14:07
  2. Ответов: 3
    Последнее сообщение: 30.09.2010, 22:30
  3. как выбрать управление "прямое" или "обратное"
    от maxmore в разделе Эксплуатация
    Ответов: 1
    Последнее сообщение: 18.01.2010, 10:13
  4. Ответов: 10
    Последнее сообщение: 11.07.2008, 14:37

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •