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

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

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

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

  2. #2

    По умолчанию

    Второй раз можете попробовать вызывать ФБ 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

  3. #3

    По умолчанию

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

  4. #4

    По умолчанию

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

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

  5. #5

    По умолчанию

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

Похожие темы

  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, 14:32
  4. ТРМ - 138 и команда 'Aply'
    от alexei73p в разделе Помощь Разработчикам
    Ответов: 0
    Последнее сообщение: 24.04.2009, 19:10
  5. групповая команда для мдвв
    от Радик в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 27.12.2007, 07:48

Ваши права

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