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

Тема: перезагрузка ПЛК73 при использовании функции из библиотеки modbus

  1. #1

    По умолчанию перезагрузка ПЛК73 при использовании функции из библиотеки modbus

    Добрый день.
    Осваиваю свзязь ПЛК73 с другими устройствами по modbus.
    За основу беру файл примера с диска, который поставлялся вместе с ПЛК.
    Проблемм со связью модулей вывода овеновских с ПЛК не было. Связь работает.
    Пытаюсь подключить сервопривод, а точнее прочитать один из его регистров.
    Если провод rs485 не подключен, програма не виснет, подключаю провод rs485 к сервоприводу, ПЛК перезагружается постоянно (я так понимаю, срабатывает сторожевой таймер). Если меняю адрес сервопривода, то при подключении провода rs485 ПЛК не перезагружается.
    То есть выходит, что опрос то идет, но зависает.
    И еще вопрос. При отключенном проводе всё равно есть какието цифры в переменной bufer. Откуда они берутся, если ничего в принципе придти не может?

  2. #2

    По умолчанию

    Немного поэксперементировал. Проблемма не в коде, потому что эта программа прекрасно работает с МВ110-8А. Температуру датчика считывает. Зависает только тогда, когда подключаю сервопривод, и если настройки сети и адрес в программе и сервоприводе совпадают. То есть зависает именно при обращении к сервоприводу. Ума не приложу в каком направлении двигатся дальше. Пробывал и rtu и ascII, и разные настройки четности и стоп битов. Всегда зависает при обращению к сервоприводу.

  3. #3

    По умолчанию

    Пока не выложите код, не приведете данные сервопривода, так и будете вести диалог с самим собой.
    А вообще, по собственному опыту - скорее всего, Вам самому придётся этот вопрос решать.

  4. #4

    По умолчанию

    Дозвонился до поддержки. Посоветовали посмтреть на компе что приходит уходит.
    Вот логи:
    1. Посылка запроса к сервоприводу без подключения кабеля, повторяющиеся "02 02 00 00 01 85 81" - насколько понимаю все как надо кроме команды, вроде как должно быть 02 (адрес устройства) 03(команда) 02 00 (адрес регистра 512) 01 (количество регистров) 85 81(crc0).
    2 Подключаю кабель к приводу "02 02 00 00 01 85 81 b0 60 60" и далее ничего. Что значит b0 60 60 не представляю.

    Для примера вот лог норамльной передачи температуры от МВ-110-8А "10 00 01 00 01 d6 8b 10 02 01 0a 84 12" Тут кстати тоже нет байта с командой 03, но ПЛК воспринимает это нормально.

  5. #5
    Пользователь
    Регистрация
    28.08.2008
    Адрес
    23..93..123
    Сообщений
    1,656

    По умолчанию

    Цитата Сообщение от slonegd Посмотреть сообщение
    Дозвонился до поддержки. Посоветовали посмтреть на компе что приходит уходит.
    Вот логи:
    1. Посылка запроса к сервоприводу без подключения кабеля, повторяющиеся "02 02 00 00 01 85 81" - насколько понимаю все как надо кроме команды, вроде как должно быть 02 (адрес устройства) 03(команда) 02 00 (адрес регистра 512) 01 (количество регистров) 85 81(crc0).
    2 Подключаю кабель к приводу "02 02 00 00 01 85 81 b0 60 60" и далее ничего. Что значит b0 60 60 не представляю.

    Для примера вот лог норамльной передачи температуры от МВ-110-8А "10 00 01 00 01 d6 8b 10 02 01 0a 84 12" Тут кстати тоже нет байта с командой 03, но ПЛК воспринимает это нормально.
    b0 60 60 Это сервак мастера на три буквы посылает за запрос кривой - что за команда 02 - ??? Read Discrete Input , она может устройством не поддерживаться . И МВ-110-8а ее не подерживает .
    И перезагруз скорее всего из-за кривого разбора кривого ответа .
    Опросите сервак модбас-тестером или др. программой .
    [02][03][02][00][00][01][85][81]- вот запрос на чтение одного регистра 512 с адреса 02.
    Последний раз редактировалось Sergey666; 12.02.2015 в 22:56.

  6. #6

    По умолчанию

    Запрос не я формирую. Использую функциональный блок MB_RD_HOLD_REGS из овеновской библиотеки modbus.lib. Тут везде пишут, что с ней всё работает, и по другому на ПЛК-73 никак. Каналы не создать, нет возможности в конфигурации.
    То, что запрос должен быть с 03 я и сам понимаю. Странно, но мв-110-8а этот запрос поняла и ответила даже. исчезнувшая 03 меня самого очень смущает. Попробую другие команды, не чтение, а запись к примеру.

  7. #7

    По умолчанию

    Вопрос с 03 хоть и не решенный, но уже не важный. Почему то терминал не отображает байты со значением 03. Задал адрес устройства 03 и он и его пропустил, так что считаю, что он там есть на самом деле.

    Попробывал функцию 06
    Запрос создан верно функцией из библиотеки modbus.lib: 02 06 01 30 00 14 88 05
    Адрес устройства 02 функция 06 регистр 304 значение 20 ну и црц

    Ответ, если запрос верен, судя по документации на привод должен быть аналогичным, но это не так: 30 b0 30 00 14 88 05.
    Откуда взялось 30 b0 мне не ясно - думаю в этом и проблема. Самое интересное, что параметр в приводе всё таки изменил свое значение на 20, значит запрос то он понял верно, а вот ответил коряво. Можно ли сделать так, чтобы функция не зависала в случае неверного ответа? Это в принципе решило бы мою проблемму, поскольку мне всего и нужно включить/выключить привод на определенной скорости, считывать с него я ничего не собираюсь.

  8. #8

    По умолчанию

    Сам не разберусь всё таки.
    Получил совершенно другой частотник, другой фирмы и та же проблемма.
    При считывании какого-либо регистра несколько раз частотник отвечает, а затем "матерится" чем то вроде С1 60 60, и у ПЛК срабатывает сторожевой таймер.
    Вот сылка на руководство:
    http://www.euradrives.com.ua/downloa...l%28eng%29.pdf

    В частотнике настроил параметры связи f900-f904, и всё. Может еще что надо? Использую функцию чтения регистров Модбас 03. Читаю только 1 регистр по адресу 16#1000. ПЛк выдает следующую команду 04 03 10 00 00 01 80 9f. Команда верна, несколько раз приходит правильный ответ 04 03 02 13 88 79 12. Считываемый параметр действительно равен 5000=16#1388. Но потом приходит какая-то ересь вроде 60 60 62 5C 93 И ПЛК отключается.
    Программа больше ничего не делает, только пытается считать этот параметр каждые полсекунды.

    Я уже просто не знаю в какую сторону копать. Может знающие тут люди подскажут?

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

    По умолчанию

    Вы по времени или по команде опрашиваете.
    Сделайте таймаут 0. И часто запросом не сыпьте.
    Раз в 3-5 сек.
    Не в каждом ли цикле?

    Если скините код, то могу попробовать опросить.
    В гараже лежал ПЧ и ПЛК73. Завтра посмотрю, кажется в ПЧ модуль мадбас стоит.
    Последний раз редактировалось lara197a; 18.02.2015 в 20:00.

  10. #10

    По умолчанию

    Вот прога за вычетом всего лишнего

    IF port_opened=2 THEN (*Удачно проинициализировали *)

    CASE Init OF
    1:
    MB_03( (*модбас функция 03*)
    Enable:=1 , (*разрешение работы блока *)
    Mode:=MB_RTU , (*режим передачи*)
    DevAddr:=4 , (*адрес*)
    FirstAddr:=16#1000, (*регистр*)
    Quantity:=1, (*количество регистров*)
    ComHandle:= Settings.Port, (*номер сом-порта*)
    TimeOut:=t#50ms , (*таймаут T#50ms*)
    Buffer:=Buffer, (* буфер данных *)
    );
    IF MB_03.Complete THEN
    x:=BYTE_TO_WORD(BUFFER[1]) OR SHL(BYTE_TO_WORD(BUFFER[0]),8);
    Init:=Init+1;
    END_IF;
    2:
    TON1(IN:=1,PT:=t#5s);
    IF TON1.Q THEN
    Init:=1;
    TON1(IN:=0);
    END_IF;

    END_CASE;
    END_IF;
    Добавил таймер, чтобы опрашивало каждые 5 секунд по совету lara197a. Не помогло.
    Для иллюстрации вот сделал скрин терминала.
    Безымянный.PNG

    На картинке синим выделил запрос, желтым нормальный ответ, красным ненормальный ответ, после которого ПЛК перезагружался.
    На первом красном ответе видно, что частотник пытался ответить правильно, поскольку ЦРЦ совпадает с правильным ответом, только вот первый байт вместо 04 - 82.
    Второй красный - полная чушь.
    После него значение в регистре изменилось, 4 правильных ответа, а потом опять чушь: 40 60 62 54 93, за ним сразу опять неверный ответ, который имеет много общего с предыдущим ответом b0 40 60 62 54 93. следующий неверный ответ потерял первый байт, ЦРЦ ответа правильного, затем опять чушь.


    Разобрался. В настройках порта количество стоповых бит 1 - означает 1,5, а 0 - 1. Ошибки связи не пропали, но ПЛК больше не перезагружается. Вдруг кто с таким же столкнется. Меня удивляет, что были правильные ответы при неправильных настройках.
    Последний раз редактировалось slonegd; 19.02.2015 в 09:17.

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

Похожие темы

  1. Ответов: 1
    Последнее сообщение: 09.02.2015, 21:40
  2. Какой тип датчиков выбрать при использовании ТРМ 133 ?
    от inovator в разделе Подбор Оборудования
    Ответов: 3
    Последнее сообщение: 16.03.2012, 12:36
  3. Ответов: 3
    Последнее сообщение: 18.12.2010, 21:14
  4. Перезагрузка при опросе по ModbusTCP
    от Vit74 в разделе ПЛК1хх
    Ответов: 29
    Последнее сообщение: 26.11.2010, 14:39

Ваши права

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