Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 22

Тема: Modbus.lib портиться команда при таймауте

  1. #11

    По умолчанию

    Цитата Сообщение от ferret_maybe Посмотреть сообщение
    А чего вы ожидаете от асинхронного обмена в полудуплексном режиме?
    Шаг 2. Послал команду запрос и ждешь ответа или конца времени разрешенной работы, если пришел ответ Шаг 3. Если не пришел и прошло время Шаг 4.
    Шаг 4. Опрос нового устройства шаги 2 и 3 повторяем для нового (создаем шаги новые) или запуск таймера задержки опросов и шаг 2.

    Цикл выполнения программы насколько меньше 5мс?
    Вот именно так это и не работает. Все на скриншотах.
    Для этой тестовой программы сильно меньше. Еще раз: 5 мс - это не принципиальный момент. Я мог поставить 15 мс и для конкретно МВА8, этого бы тоже не хватило. Я здесь просто продемонстрировал то, как ведет себя библиотека. И задал вопросы.

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

    По умолчанию

    Не вдавался в детали обсуждения, но может быть проблема в этом:
    https://owen.ru/forum/showthread.php...l=1#post219033 ?
    В части 2 данного поста.

  3. #13

    По умолчанию

    Цитата Сообщение от Спорягин Кирилл Посмотреть сообщение
    Не вдавался в детали обсуждения, но может быть проблема в этом:
    https://owen.ru/forum/showthread.php...l=1#post219033 ?
    В части 2 данного поста.
    В моем примере проблема воспроизводится и с MB_RD_HOLD_REGS и с MB_WR_REGS, в общем с любым ФБ использующим буфер. Для чтения не нужно даже готовить буфер, его готовит ФБ чтения (если я все правильно понимаю), но и он портится как я описал. Но спасибо за ссылку, узнал еще кое-что нового об этой библиотеке.

  4. #14

    По умолчанию

    Второй раз можете попробовать вызывать ФБ MB_RD_HOLD_REGS2 без указания выходных и INPUT_OUTPUT параметров, например:
    MB_RD_HOLD_REGS2(Enable:= FALSE);
    Создается ощущение, что пишите в эти переменные(в том числе и буфер) по нескольку раз в коде программы.
    Может быть проверить работу кода, ниже:

    IF NOT rs485_opened THEN
    rs485_settings.Port := 0;
    rs485_settings.dwBaudRate := 115200;
    rs485_settings.byStopBits := 1;
    rs485_settings.byParity := 0;
    rs485_settings.dwTimeout := 0;
    rs485_settings.dwBufferSize := 0;
    rs485_settings.dwScan := 0;
    rs485_COM_SERVICE(Enable:= NOT(rs485_opened), Settings:= rs485_settings, Task:= OPEN_TSK, Ready=> rs485_opened);
    END_IF

    IF rs485_opened THEN
    CASE step OF
    0:
    IF mb_complete AND mb_exception = 0 THEN
    step:=1;
    END_IF
    IF mb_complete AND mb_exception <> 0 THEN
    step:=2;
    END_IF
    1:
    (* &#240;&#224;&#231;&#225;&#238;&#240; &#228;&#224;&#237;&#237;&#251;&#245; *)
    dp1MVA8 := SHL(BYTE_TO_WORD(mb_buffer[0]), 8) OR BYTE_TO_WORD(mb_buffer[1]);
    int1MVA8 := SHL(BYTE_TO_WORD(mb_buffer[2]), 8) OR BYTE_TO_WORD(mb_buffer[3]);
    step:=2;
    2:
    IF TONDelay.Q THEN
    step := 0;
    END_IF
    END_CASE

    MB_RD_HOLD_REGS2(
    Enable:= (step=0), (* &#194;&#251;&#239;&#238;&#235;&#237;&#229;&#237;&# 232;&#229; &#239;&#240;&#232; 0 &#248;&#224;&#227;&#229; *)
    Mode:= MB_RTU,
    DevAddr:= 2,
    FirstAddr:= 0,
    Quantity:= 48,
    ComHandle:= rs485_settings.Port,
    TimeOut:= response_timeout,
    Buffer:= mb_buffer,
    Complete=> mb_complete,
    Exception=> mb_exception,
    ByteCnt=> mb_bytesReturn);
    TONDelay(IN:= (step=2), PT:= PollDelay);
    END_IF

  5. #15

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Ну и долго эти стоны будут продолжаться ?
    Если нечего сказать, то можно просто промолчать. Здесь идет дискуссия, я задал вопрос, форумчане дают комментарии (спасибо им за это), я отвечаю на них.
    Откройте либу, разберите код и найдете сами все проблемные моменты (ессно они есть).
    Код библиотеки закрыт.

    Еще раз - я её не использую хотя авторам огромное спасибо. Но даже когда юзал хватало мозгов выяснять индивидуальные особенности девайсов, учитывать их и не заниматься хренью в виде 'а давай заместо доски бревно сунем'.
    Несмотря на эльфийские хотелки никуда не уйдете от индивидуальных таймаутов.
    Или из тех кому нужно прописывать что горячий кофий не нужно лить на себя ?
    А может вести разговор по теме дискуссии. Или из тех, кому нужно выглядеть самым умным, по факту таким не являясь?

  6. #16

    По умолчанию

    Цитата Сообщение от ferret_maybe Посмотреть сообщение
    Второй раз можете попробовать вызывать ФБ MB_RD_HOLD_REGS2 без указания выходных и INPUT_OUTPUT параметров, например:
    MB_RD_HOLD_REGS2(Enable:= FALSE);
    Создается ощущение, что пишите в эти переменные(в том числе и буфер) по нескольку раз в коде программы.
    Может быть проверить работу кода, ниже:
    Да, я пробовал вызывать его и без параметров и вообще не вызывать его с Enable:= FALSE.
    В данном примере в параметры передаю только константы, в буфер вообще не пишу, только читаю, да и если даже убрать чтение из буфера, поведение блока (то что он шлет в порт) не поменяется.
    Мне нравится ваше решение, но к сожалению, результат в порте тот же.

  7. #17

    По умолчанию

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

    Немного лирики из личного опыта: коллега занимался настройкой передачи данных "в поле" и на верхнем уровне(настраивал конфигурацию ПЛК) сидел другой человек. При договоре о параметрах передачи по телефону:
    - Параметры передачи как обычно?
    - Да.
    Затем долго нет возможности подключиться к ведомому со стороны мастера, хотя с использованием ноутбука все по шлейфу от ведущего и ведомого работает, данные о правильности формирования запроса формируются при прослушивании канала. В общем непонятно, мастер шлет... слейв отвечает, но мастер не получает. Проблема была в том, что при настройке параметров передачи на мастере было указано EVEN - контроль четности, а на ведомом отключен контроль четности. Работа двух человек...

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

    По умолчанию

    Цитата Сообщение от Ovtia Посмотреть сообщение
    Если нечего сказать, то можно просто промолчать. Здесь идет дискуссия, я задал вопрос, форумчане дают комментарии (спасибо им за это), я отвечаю на них.
    Код библиотеки закрыт.
    А может вести разговор по теме дискуссии. Или из тех, кому нужно выглядеть самым умным, по факту таким не являясь?
    Ovtia, Вы по-аккуратнее с корефеями)))

    Код библиотеки Modbus.lib открыт. Нужно просто снять галочки в кодесисе (потыкайтесь).

    Ну, и уж раз Вы решили использовать библиотеку, то можете ознакомиться с универсальным диспетчером:
    https://owen.ru/forum/showthread.php...E5%F2%F7%E5%F0

  9. #19

    По умолчанию

    Цитата Сообщение от ferret_maybe Посмотреть сообщение
    Начнем сначала... Волновое сопротивление в линии передачи стоит?
    Нет не стоит. Линия передачи меньше метра, все у меня на столе.
    Если что без обид все пытаются помочь со своего взгляда, себе вы можете помочь только сами. Форумчане не видят полной картины, что у вас там происходит.
    Понимаете, это даже скорее не проблема у меня, возможно все будет прекрасно на объекте, когда я выставлю тайм ауты с запасом. Я показал то, как я работаю с этой библиотекой (почерпнув знания из примеров на форуме и документации) на примере тестовой программы (ту которую я выложил сюда), показал то, что она шлет в порт (я думаю неважно какая линия и даже интерфейс, любой может эту программу запустить на своем ПЛК и получить тот же результат). И задал вопрос: это нормально? Если нет, что в моем примере не так? Если это особенность работы библиотеки, то как коллеги борются с этим проявлением, ведь кто-нибудь наверняка наблюдал такое же поведение? Очевидный ответ: поднять тайм ауты, но мне хотелось бы узнать, может кто-нибудь раскурил тему и делает какие-нибудь действия в своей программе, если вышел тайм аут.
    Вообще если поразмышлять проблема довольно серьезная. Ну например, у меня один из слейвов, по какой-то причине начал конкретно отставать с ответом, а после него у меня всегда идет запись в другой слейв - это у меня так и будет, поскольку мастер передает состояния своих дискретных входов слейвам (да все сложно, но повлиять я на это не могу). Слейв не среагирует на событие и тогда все будет не очень весело.

  10. #20

    По умолчанию

    Цитата Сообщение от Спорягин Кирилл Посмотреть сообщение
    Код библиотеки Modbus.lib открыт. Нужно просто снять галочки в кодесисе (потыкайтесь).

    Ну, и уж раз Вы решили использовать библиотеку, то можете ознакомиться с универсальным диспетчером:
    https://owen.ru/forum/showthread.php...E5%F2%F7%E5%F0
    Спасибо за наводку. Посмотрю вашу библиотеку, покопаюсь в codesys.

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя

Похожие темы

  1. Широковещательная команда записи MODBUS RTU на СМИ2
    от Юрий_М в разделе Панели оператора (HMI)
    Ответов: 5
    Последнее сообщение: 20.01.2021, 11:45
  2. Команда APLY
    от Тоха в разделе Сетевые технологии
    Ответов: 0
    Последнее сообщение: 15.05.2015, 06:51
  3. СМИ1, modbus-rtu, мастер. Команда 4. КАК?
    от Matysik в разделе Панели оператора (HMI)
    Ответов: 2
    Последнее сообщение: 26.05.2011, 15:32
  4. ТРМ - 138 и команда 'Aply'
    от alexei73p в разделе Помощь Разработчикам
    Ответов: 0
    Последнее сообщение: 24.04.2009, 20:10
  5. групповая команда для мдвв
    от Радик в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 27.12.2007, 07:48

Ваши права

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