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

Тема: Вопросы по работе modbus master

  1. #1

    Question Вопросы по работе modbus master

    Здравствуйте
    Имеем PLC110, планируется к нему подключить порядка 10 модулей типа МВ110-16ДН и 10 модулей типа МУ110-16К, возможно еще что то типа ТРМ148.
    В общем модули будут довольно таки удалены от контроллера и хотелось бы разобраться с тем как обеспечить контроль наличия соединения с ними.
    В связи с этим возникло несколько вопросов:

    1) Не смог найти описание рабочего цикла ПЛК110 как он выглядит?
    Обычно он похож что-то типа такого:
    а)чтение входов и запись их значений в область памяти
    б)обмен по сети ?
    в)выполнение программы пользователя
    г)установка выходов (данные берутся из области памяти)
    Как с этим обстоят дела у PLC 110 и где в документации про это написано. Особенно интересуют особенности пункта б.

    Вопросы про работу modbus master:
    2) Могут ли значения LastAddress и LastError теряться?
    2.1)Например: Основная программа выполняется раз в 10-20 мс, может ли за это время между вызовами основной программы быть опрошено несколько модулей? И если да то что там будет в LastAddress и LastError. Не потеряются ли значения в них.
    2.2)Предположим что из одного устройства с одним адресом надо читать несколько регистров. Пусть при чтении первого регистра произошла ошибка, будут ли читаться следующие регистры и если да, то что мы увидим LastAddress и LastError. И как тогда понять какие регистры прочитались а какие нет.

    Вопросы про Universal Modbus Device:
    3.1)Являются ли регистры объявленные в Universal Modbus Device retain переменными как это сделано для modbus slave?

    3.2)Что находится в регистрах при старте. Как то при включении наблюдал там случайные значения.

    3.3)Может ли содержимое регистров портится при ошибках обмена.

    3.4) Но не ясно почему же для режима Poll time не применяется параметр «Amount Repeat» т.*е. получается что любая порча хоть одного байта в пакете (из-за наводки) приведет к тому что мы получим ошибку по связи в LastAddress и LastError? Почему в данном случае не используются повторные запросы перед тем как сообщить об ошибке?

    3.5)В режиме Value change не ясно в какой момент и как формируются запросы.
    Например, пусть у нас в Universal Modbus Device есть регистр. Пусть в основной программе в одном цикле значение этого регистра изменится 5 раз за цикл. Сколько при этом будет сформировано запросов?
    3.4) Что считается изменением регистра в режиме Value change? Если, например, в него будет записано тоже самое значение, считается ли это изменением и формируются ли при этом запросы?

    3.6)в режиме By Command не ясно как контролировать когда закончилось обновление и можно начинать очередное обновление?
    3.7) На форуме встречал информацию что режим By Command работает как то нестабильно там писалось что то типа такого: что для обновления 25 регистров надо записывать FF не 25 раз а больше, т.*е. опрос иногда не начинался. Читал это давно. С тех пор что нибудь изменилось или это режим лучше не использовать?

    3.8)Имеет ли смысл обновлять прошивку контроллеру если в контроллере прошивка версии 2.10.7. Улучшалось ли в последующих прошивках что нибудь в работе Modbus master?

  2. #2

    Arrow

    Здравствуйте

    Я так понимаю вы использовали раньше контроллеры линейки ПЛК100/150/154. Архитектура у них очень похожа, практически идентична.

    Ответы на вопросы.

    1) Читаем ответ capzap. Это документация на диск от ПЛК100/150/154. В РП на плк110/160 этого нет, думаю при следующей правке документа, внесем.

    Вопросы про работу modbus master:
    2) нет
    2.1) теряться ни чего не будет, за 20 ms если у вас такая сверх нагруженная задача одно устройство обработаться не успеет однозначно. 20ms в принципе даже при цикле 1ms хватит на обработку только одного регистра.
    2.2)При чтении каждого нового регистра данные значения обновляются.

    Вопросы про Universal Modbus Device:
    3.1)Нет. Но можно их таковыми сделать, если прописать их в основной программе, в области Retain с указанием адреса.

    3.2)Находятся там 0. Если наблюдали, то опишите как и где именно.

    3.3)Нет. Давайте вообще слово портиться исключим из лексикона. Портятся помидоры и т.п., а у нас речь про программируемое устройство.

    3.4) Ошибку вы получите только на опрашиваемом регистре, если наводка ушла, то дальше ошибки не будет. А смысл в том, что в любом случае у вас эти переменные опрашиваются-пишутся с неким интервалом и рано или поздно, если связь восстановилась вы получите новое значение. А если у вас устройство работает по команде или по изменению значения, то данном случае это актуально, а то есть вероятность остаться без данных.

    3.5)В режиме Value change не ясно в какой момент и как формируются запросы.
    Сами себе противоречите. Читаем про организацию цикла. Пусть у вас значение хоть миллион раз меняется, а запишется только значение, вычисленное в последней операции за цикл.


    3.4) Перезапись значение и его изменение - это разные определения. Изменение значение это когда новое значение <> старого значение. Например, было 2, стало 2,0001. А если в 2 записать двойку - то значение не изменилось, соответственно отправка осуществляться не будет.

    3.6)Анализируем ошибки. Если их нет, значит как в песне "Все будет хорошо".

    3.7) Что вам мешает поставить таймер и например, писать или обновлять эти данные в течении некого интервала и при этом мониторить ошибки.

    3.8)Нет, эти элементы не редактировались. С 2.10.7 лучше уйти на 2.10.9(рекомендую) или на самую последнюю 2.14.0.

  3. #3

    По умолчанию

    P.S. если поиском по форуму воспользуетесь, то я ~месяц назад на форуме выкладывал ФБ анализа ошибок в интерфейсе.

  4. #4

    По умолчанию

    Цитата Сообщение от Александр Приходько Посмотреть сообщение
    Я так понимаю вы использовали раньше контроллеры линейки ПЛК100/150/154. Архитектура у них очень похожа, практически идентична.
    Ранее использовал PLC63, и PLC110, но тогда не требовалось опрашивать внешние модули.
    Сейчас вот снова будет использован PLC110 и потребуется опрашивать порядочное число внешних удаленных (метров на 100 - 300) модулей.

    Спасибо за ответы буду изучать.

  5. #5

    По умолчанию

    А сколько модулей???

  6. #6

    По умолчанию

    Цитата Сообщение от Николаев Андрей Посмотреть сообщение
    А сколько модулей???
    Пока на вскидку потребуется 10 модулей типа МВ110-16ДН и 10 модулей типа МУ110-16К, плюс может еще понадобится подключить что то типа ТРМ148.

    На данный момент есть PLC100-60M и один модуль МВ110-16ДН. Вот с ними пока и практикуюсь.

    По организации опроса и контролю соединения с модулями пришла следующая идея:
    Поскольку линии связи длинные, то скорость обмена для модулей выбрать в районе 9600 - 38400. Ну можно попробовать и 57600.
    Минимальное время цикла поставить не менее 5 мс.
    В мастер по количеству опрашиваемых модулей добавить такое же количество Universal Modbus Device.
    Для регистров входных модулей использовать режим опроса Poll time. Polling time поставить в районе от 50 до 150 мс.
    Для регистров выходных модулей использовать смешанный режим - Both, Polling time задать где то в районе 250 - 350 мс. (Кстати а в режиме Both используется Amount Repeat ?).

    В основной программе завести массив счетчиков ошибок для модулей. И в каждом цикле анализировать LastError и LastAddress для модбас мастера и в зависимости от их значений увеличивать (с контролем переполнения) или обнулять соответствующий счетчик в массиве. Если значение счетчика ошибок для какого либо модуля превысит некий порог, то тогда можно смело считать, что с этим модулем нет связи и что то делать (проинформировать пользователя, остановить оборудование, заблокировать пуск и т.*п.)
    После того как LastError и LastAddress проанализированы сбрасывать их в 0 (чтобы повторно не анализировать уже обработанные не изменившиеся значения).

    Да еще при включении контроллера наверное неплохо в выходные регистры записать безопасные значения. И в течении нескольких секунд просто анализировать состояние обмена без выполнения каких либо обработок в основной программе.

    По сути от модулей типа МВ110-16ДН нужно читать один регистр (хотя может еще и счетчики захочется считать для 1-2 модулей). Что там нужно будет писать в МУ110-16К еще не смотрел но наверное по аналогии можно тоже обойтись одним регистром.

  7. #7

    По умолчанию

    1) Все таки хотелось узнать на сколько работоспособно решение озвученное в 8 сообщении этой темы?

    2)Используется ли Amount Repeat в режиме Both для Universal Modbus Device.

    3)Есть ли возможность для Universal Modbus Device в Modbus Master задать групповое чтение регистров?

    4)Что лучше использовать OWEN Master или Modbus Master? Сравнивал ли кто нибудь их работу по стабильности, скорости обработки (разбора / формирования) пакетов ?
    Последний раз редактировалось kfvniiz; 22.07.2011 в 21:50.

  8. #8

    По умолчанию

    Про библиотеки я слышал. Но хотелось верить что ими пользоваться не придется.

    Провел тут несколько тестов штатного modbus master в PLC 110-60 и пришел к выводам — его нельзя использовать в реальных проектах. Он не защищен от помех, и при помехах у него происходит «слет», значения в регистрах искажаются после чего к нормальной жизни его возвращает либо таймаут по связи либо перезапуск контроллера. Если же вовремя «слета» проследить за обменом, подключившись к интерфейсу RS485, то можно видеть нормальные запросы и ответы. Правда контроллер эти ответы интерпретирует неверно. Причем это справедливо как для старой прошивки 2.10.7 так и для новой 2.14.0. Воспроизводится практически 100%. Вместо реальных данных в регистры местами попадают их адреса а местами какие то другие данные. Хорошо что еще контроллер не перезапускатся.
    Imho такое может быть если: не чистится буфер, не проверяется CRC и адрес в ответе.

    Собственно возникает вопрос – насколько стабильна библиотека modbus.lib? Она случаем не так же написана?

  9. #9

    По умолчанию

    Посмотрел на modbus.lib у нее есть проверка CRC, и даже буфер чистит при простоях, проверяет адрес и размер.
    По идее очистка буфера в MB_UNI_IO может привести к зависанию, но это конечно при жестком тестировании.

  10. #10

    По умолчанию

    Ну так я же говорю про жесткое тестирование или диверсию. Так то конечно нет.
    Вроде по коду библиотека выглядит нормально. По крайне мере очистка буфера, проверка адреса размера и CRC в ней делается. А это уже обнадеживает. Сейчас почитаю про нее и буду тестировать ее.

    Странно что разработчики, написав нормально modbus.lib не сделали нормально штатный modbus master. И более того ни где не предупредили что его лучше не использовать. Ну это пожалуй как с кнопкой старт/стоп.

    А вот интересно штатный modbus slave не имеет ли каких либо фокусов? В принципе он у меня используется на PLC110 и PLC63 и проблем вроде с ним там нет. Но может просто не вылезло?

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

Ваши права

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