Показано с 1 по 10 из 130

Тема: Универсальный диспетчер для Modbus.lib

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    1,037

    По умолчанию

    Цитата Сообщение от Sergeba Посмотреть сообщение
    Почитал документацию, посмотрел пример, но не понял, возможно ли использовать диспетчер для управления модулями используя два слота сети RS485-1 и RS485-2?
    Конечно, можно.
    Как правильно сказано выше, просто объявите 2 диспетчера. Для каждого порта свой.

  2. #2

    По умолчанию

    Цитата Сообщение от Спорягин Кирилл Посмотреть сообщение
    Конечно, можно.
    Почему-то не меняется время опроса ставлю 500мс и 1000мс, всё равно опрос идёт с частотой 100мс (на глаз).
    Второе, что не понял, для чего в опросе модулей используются шаги (step). Ведь всё равно опрос прописан так, что команды опроса следуют друг за другом...

    Пробую опросить модуль RL_I (это реле с двумя дискретными входами), в котором используются команды Modbus 05(управление реле), 02(опрос входов), 01(состояние реле). Прописал в опросе шаг1 - 05, шаг2 - 01, шаг3 - 02. В результате работает только Шаг1, остальные игнорятся почему-то.

    Может для корректной работы необходимо данный модуль разделить на три? И в каждом использовать нужную функцию по отдельности...

    Попробовал опросить каждой функцией отдельно. По отдельности работают. Причём настройки портов и опроса не меняю (500мс) - 02 функция опрашиватся 500мс, а 01 и 05 - 100мс.

    Вобщем пока не понимаю как опросить один и тот же модуль разными Modbus функциями. Разделить на три модуля не получается т.к. адрес один и тот же - диспетчер не пропускает...
    Вложения Вложения
    Последний раз редактировалось Sergeba; 07.12.2019 в 12:35.

  3. #3
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    1,037

    По умолчанию

    Цитата Сообщение от Sergeba Посмотреть сообщение
    Почему-то не меняется время опроса ставлю 500мс и 1000мс, всё равно опрос идёт с частотой 100мс (на глаз).
    Должен меняться. Вы точно меняете PollingTime, а не ValidPollingTime, например?


    Цитата Сообщение от Sergeba Посмотреть сообщение
    Второе, что не понял, для чего в опросе модулей используются шаги (step). Ведь всё равно опрос прописан так, что команды опроса следуют друг за другом...
    Как правило опрос в модулях организован следующим образом (для модулей ввода):
    1. На 1-м шаге вызываем соответствующую функцию опроса. Когда она завершила работу (Complete=true) анализируем результат и либо повторяем шаг 1 или идем на следующий.
    2. На 2-м шаге, если нужно опрашиваем другие регистры этого же модуля, если нужно другой функцией. Когда функция завершила работу (Complete = true) анализируем результат и либо повторяем шаг или идем на следующий.
    ...
    N. На заключительном шаге выполняем различные сервисные функции. В частности: статистика, сообщаем диспетчеру, что опрос завершен.

  4. #4

    По умолчанию

    Цитата Сообщение от Спорягин Кирилл Посмотреть сообщение
    2. На 2-м шаге, если нужно опрашиваем другие регистры этого же модуля, если нужно другой функцией. Когда функция завершила работу (Complete = true) анализируем результат и либо повторяем шаг или идем на следующий.
    Да, но судя по коду (в примерах), насколько я понял, эти шаги исполняются один за другим, за одну итерацию - если это так, то смысла в Step не вижу. Это же не оператор Case. Следуя примеру, я так и сделал для описания своего модуля (реле с управлением), использовал Step. В результате модуль опрашивался реже и реже, .пока вообще перестал опрашиваться, причём опрос происходил только по первой описываемой функции, вторая и третья по очереди (были разнесены на разные Step) не опрашивались Read у них висел всё время в False. После чего я описал модуль оператором Case, параметр для оператора передавал из основной программы - так опрос пошёл по всем трём функциям, только пришлось подобрать тайминги выполнения каждой из них, поскольку, к примеру, срабатывание реле не происходило, если обращение функции происходило меньше 1 сек.

    Хотя... смысл в Step понятен, но тогда получается, что ещё нужно описать задержки между опросами разных функций. Т.к. мой модуль отказывается опрашиваться...Причём, в моём случае эти задержки различны по времени.
    Последний раз редактировалось Sergeba; 09.12.2019 в 09:55.

  5. #5
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    1,037

    По умолчанию

    Цитата Сообщение от Sergeba Посмотреть сообщение
    Да, но судя по коду (в примерах), насколько я понял, эти шаги исполняются один за другим, за одну итерацию - если это так, то смысла в Step не вижу. Это же не оператор Case. Следуя примеру, я так и сделал для описания своего модуля (реле с управлением), использовал Step. В результате модуль опрашивался реже и реже, .пока вообще перестал опрашиваться, причём опрос происходил только по первой описываемой функции, вторая и третья по очереди (были разнесены на разные Step) не опрашивались Read у них висел всё время в False. После чего я описал модуль оператором Case, параметр для оператора передавал из основной программы - так опрос пошёл по всем трём функциям, только пришлось подобрать тайминги выполнения каждой из них, поскольку, к примеру, срабатывание реле не происходило, если обращение функции происходило меньше 1 сек.

    Хотя... смысл в Step понятен, но тогда получается, что ещё нужно описать задержки между опросами разных функций. Т.к. мой модуль отказывается опрашиваться...Причём, в моём случае эти задержки различны по времени.
    Что значит за одну итерацию?
    Мы переходим на следующий Step, только, когда получили ответ, что опрос закончен, т.е. Complete = true.
    Если ваш модуль неповоротливый и не может сразу после обработки одного запроса, тут же отвечать на другой, тогда сделайте "пустой" шаг, на котором просто ждите определенное время (100, 200 мс).

    А вот параметр для case передавать из основной программы - это идеологически неверно! Модуль сам решает, как опрашивать свои регистры! Зачем еще что-то писать в основной программе!???

  6. #6

    По умолчанию

    Цитата Сообщение от Спорягин Кирилл Посмотреть сообщение
    Если ваш модуль неповоротливый и не может сразу после обработки одного запроса, тут же отвечать на другой, тогда сделайте "пустой" шаг, на котором просто ждите определенное время (100, 200 мс).
    Не получается сделать задержку. Испольую Time(), но время не сохраняется. Пробовал в описании типа функции задать переменную и в неё передавать время - тоже 0.

  7. #7
    Пользователь
    Регистрация
    09.02.2016
    Адрес
    Тверь
    Сообщений
    28

    По умолчанию

    Цитата Сообщение от Sergeba Посмотреть сообщение
    Не получается сделать задержку. Испольую Time(), но время не сохраняется. Пробовал в описании типа функции задать переменную и в неё передавать время - тоже 0.
    Тогда стоит попробовать чтение и запсись делать при разных вызовах. У меня работает прекрасно. Частотники со скоростью 9600 опрашиаваются каждые 25мс (общий опрос получается 50мс), работает чётко.

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

  8. #8
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    1,037

    По умолчанию

    Цитата Сообщение от Sergeba Посмотреть сообщение
    Не получается сделать задержку. Испольую Time(), но время не сохраняется. Пробовал в описании типа функции задать переменную и в неё передавать время - тоже 0.
    Это уже собственно к диспетчеру не имеет отношения. Но попробуйте просто стандартный таймер TON использовать. Проблем быть не должно.

Похожие темы

  1. Универсальный блок питания ПР114
    от sea в разделе Программируемые реле
    Ответов: 12
    Последнее сообщение: 13.10.2013, 21:56
  2. PCLogger - универсальный логгер для CDS v3
    от Mikhail Shvetsov в разделе ПЛК3xx (архив)
    Ответов: 0
    Последнее сообщение: 23.11.2012, 13:39
  3. Универсальный Modbus Сервер Инсат и 200 контроллеров ПЛК-100
    от lomtik в разделе Сетевые технологии
    Ответов: 17
    Последнее сообщение: 08.11.2012, 22:42
  4. Универсальный конфигурируемый регулятор
    от ОООСА в разделе Разработки
    Ответов: 32
    Последнее сообщение: 09.12.2009, 22:12
  5. Ответов: 7
    Последнее сообщение: 04.05.2009, 09:42

Ваши права

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