Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 21

Тема: Ошибки библиотеки Modbus

  1. #1

    По умолчанию Ошибки библиотеки Modbus

    Добрый день! Требуется помощь в таком вопросе: хочу использовать библиотеку Modbus вместо конфигуратора .Выкладываю часть программы с записью значения регистров 16 (0x10) Write Multiple registers (MB_WR_REGS).
    Данные передаются ,нона выходе Exception постоянная ошибка 0xFF – ошибка таймаута.

    1) Не пойму, что не так, что надо делать? Время таймаута ставил разное, но ошибки не исчезают.
    2) Почему в эмуляторе при чтении и записи данных в массивах байтов для записи или чтения какой-то мусор?
    3) Как правильно организовать проверку данных на ошибки при чтении и записи?
    Вложения Вложения

  2. #2

    По умолчанию

    Зачем на FBD-то это пишете? В документации есть прекрасный пример на ST. Там все намного читабельней.
    Потом, если пробуете в эмуляторе, то ничего работать не будет! Библиотека использует аппаратные особенности контроллера и эмулятором не поддерживается.

  3. #3

    По умолчанию

    Цитата Сообщение от Алексей Дмитриев Посмотреть сообщение
    Зачем на FBD-то это пишете? В документации есть прекрасный пример на ST. Там все намного читабельней.
    Потом, если пробуете в эмуляторе, то ничего работать не будет! Библиотека использует аппаратные особенности контроллера и эмулятором не поддерживается.
    По первому вопросу могу сказать только одно - потому что я на нем пишу. Можно и на ST, но получается у меня медленно, и для меня пока что не так уж читабельно.
    По второму- да, действительно эти библиотеки не работают в эмуляторе и я в курсе этого (в вопросе я неправильно написал про подключение). При проверке я записывал программу в контролер и смотрел как он общается с панелью через программу CoDeSys в онлайне без эмулятора.Так вот, в массивах, которые используются для чтения и записи, если их открыть, меняются данные. Например, я использую первые 4 байта, при чтении они записываются и добавляется еще мусор с 8 по 15 байт. Или CoDeSys не правильно отображает это.
    А насчет примера на ST, можно его увидеть? Выложите пожалуйста, если вам не сложно. Заранее благодарен.

  4. #4

    По умолчанию

    Нормально все работает. Но пример в документации - не правильный.

  5. #5

    По умолчанию

    Цитата Сообщение от ASo Посмотреть сообщение
    Нормально все работает. Но пример в документации - не правильный.
    У кого все нормально работает?И где взять правильный пример?

  6. #6

    По умолчанию

    Ну уже обсуждалось неоднократно. Напимер вот пример для связи с МДВВ: http://www.owen.ru/forum/attachment....7&d=1292780156

  7. #7

    По умолчанию

    Цитата Сообщение от Алексей Дмитриев Посмотреть сообщение
    Ну уже обсуждалось неоднократно. Напимер вот пример для связи с МДВВ: http://www.owen.ru/forum/attachment....7&d=1292780156
    Спасибо за ссылку.
    Но в этом примере нет никакой обработки ошибок, кроме их наличия. При чтении функции 03 ещё можно их отследить, а при записи функции 16 данные передаются правильно, а столько же ошибок.
    И интересует такой вопрос - можно ли с помощью библиотеки Modbus менять параметры порта (0 - RS-485 на 1 - RS-232) ну и все остальные параметры? Например, с помощью одного блока обмена опрашивать попеременно два устройства с разными скоростями или разными портами.
    Может кто подскажет, как это программно организовать? Или ссылку скиньте на какой нибудь пример.
    Всем заранее благодарен.

  8. #8

    По умолчанию

    Какую обработку Вы хотите? Собственно при работе периодически вылезает таймаут, как я помню. От него не избавитесь никогда, так как обмен-то асинхронный, имеет право быть. Надо просто проверять, что он есть и не учитывать эти данные. Там в примере эта проверка есть, если ничего не путаю. Другое дело когда постоянно таймаут, то есть слейв отвалился вообще - проверяется с использованием таймера и триггера.
    По поводу обслуживания другого порта никаких препятствий не вижу. Пишется точно также, как и для первого, то есть - открываем порт с нужными параметрами и вызываем библиотечные ф-ции для обмена.
    Последний раз редактировалось Алексей Дмитриев; 02.08.2013 в 10:27.

  9. #9

    По умолчанию

    Цитата Сообщение от Алексей Дмитриев Посмотреть сообщение
    Какую обработку Вы хотите? Собственно при работе периодически вылезает таймаут, как я помню. От него не избавитесь никогда, так как обмен-то асинхронный, имеет право быть. Надо просто проверять, что он есть и не учитывать эти данные. Там в примере эта проверка есть, если ничего не путаю. Другое дело когда постоянно таймаут, то есть слейв отвалился вообще - проверяется с использованием таймера и триггера.
    По поводу обслуживания другого порта никаких препятствий не вижу. Пишется точно также, как и для первого, то есть - открываем порт с нужными параметрами и вызываем библиотечные ф-ции для обмена.
    Хочу сказать спасибо за поддержание, так сказать, разговора.
    Насчет обработки ошибок, хотелось бы больше иметь информации о ведомом, но функции библиотеки выдают только две ошибки, как я понял это FE и FF, и по этому можно только определить в сети ведомый или нет. По портам, я попробовал менять настройки COMSETTINGS, но что то переключения не получилось, пример прикрепляю.
    Возможно, порт нужно полностью выключать, менять установки и заново включать, и все в разных циклах программы.
    В прикрепленном примере ещё кое какие места мне непонятны, я там надписи в комментариях сделал (потому что не все там мной написано) хотелось бы получить ответы на возникшие вопросы.
    Может будет у специалистов время посмотреть и подсказать, где ошибки. Всем заранее благодарен
    Вложения Вложения
    Последний раз редактировалось URA6923; 02.08.2013 в 20:59.

  10. #10

    По умолчанию

    чтобы поменять настройки порт нужно закрыть (дождаться пока закроецо). потом открыть (опять дождацо) и настроить по новому. да нужно разнести по циклам. модбас передает все ошибки. точнее те которые поддерживает ведомый. по поводу передачи. писать в буфер в то время когда идет передача нельзя. отправьте данные в буфер. взведите на один цикл Enable и ждите Complite. как только Complite = true смотрите Exception. Если равен нулю то все ок. С чтением так же. Передаете адреса и кол-во слов взводите Enable на один цикл и ждете Complite. Дождались? если Exception = 0 - разбирайте буфер.

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

Похожие темы

  1. Эксплуатация библиотеки "ModBus.lib"
    от Gans в разделе ПЛК1хх
    Ответов: 8
    Последнее сообщение: 04.03.2012, 11:55
  2. Ошибки В кодесис
    от DimaSik в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 07.07.2009, 16:20
  3. Ошибки Modbus Master на низких скоростях
    от Serge78 в разделе ПЛК1хх
    Ответов: 12
    Последнее сообщение: 11.05.2009, 10:28
  4. ошибки в примерах ...
    от Дмитрий Артюховский в разделе ПЛК1хх
    Ответов: 21
    Последнее сообщение: 25.01.2009, 21:17
  5. ошибки в архивах
    от Volder в разделе ПЛК1хх
    Ответов: 0
    Последнее сообщение: 31.05.2008, 12:35

Ваши права

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