Страница 5 из 5 ПерваяПервая ... 345
Показано с 41 по 46 из 46

Тема: Modbus на RS-485 ошибка 81 только на RS-485-1 ПЛК110[М02] (ПЛК110-24.60.Р-М)

  1. #41

    По умолчанию

    Цитата Сообщение от Спорягин Кирилл Посмотреть сообщение
    1. Скажите, пожалуйста, если обмен реализован через библиотеку, то имеет смысл менять прошивку с 3.53 на 3.67 для улучшения работы по RS-485-1 и RS-485-2?

    2. При смене target-файлов с 3.07 на 3.11 подключение к старым проектам, выполненных на таргетах 3.07 будет в порядке?
    Да, все проблемы были на уровне драйверов, а они общие
    Тролль-наседка, добрый, нежный и ласковый

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

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Да, все проблемы были на уровне драйверов, а они общие
    Да, уже вижу, спасибо.
    На прошивке 3.53 было на разных модулях от 1 до 10% опросов с ошибками. После перепрошивки на 3.67 пока ошибок 0% (по наблюдению около 15000 опросов).

  3. #43
    Пользователь
    Регистрация
    10.12.2011
    Адрес
    Гатчина
    Сообщений
    43

    По умолчанию

    Здравствуйте. ПЛК110-24.30.Р-М [М02]. На RS-485-1 висит модуль МВ110-32ДН (ошибок нет), на RS-485-2 панель СПК110 (панель мастер). Так панель его не видит (в Codesys V3 пишет Bus_Failure). Меняю порты местами (RS-485) - все работает. RS-485-2 не может работать по Modbus Slave или что?

  4. #44

    По умолчанию [B]Замечания по функции SysComRead в составе ПО контроллера ПЛК110-60[М2].[/B]

    Предистория - появление ошибок обмена через COM-порт после перехода на М2...

    С целью выявления причин ошибок протестировал функцию SysComRead, используемую при разборе пакета данных на фрагменты.
    Тестирование предусматривало циклический опрос функции с регистрацией момента появления очередного фрагмента и его размера. Отсчет времени - по основному циклу контроллера 1ms.

    В случае старого контроллера функция возвращала значение от 1 до 12, в зависмости от скорости обмена.

    А вот для М2 размер фрагмента, исключая последний, всегда составляет не менее 14 байтов. Кроме того последний межфрагментный интервал увеличен на длительность обмена в несколько (3-5) байт.

    Для библиотеки Modbus.lib в режиме RTU, использующей в качестве тайм-аута межпакетный интервал в 3ms для фрагментов начиная со второго, с небходимостью должны возникать ошибки при скорости обмена менее 14 байт за 3ms.

    Еще один "подводный камень" SysComRead заключается при ее использовании для очистки входного буфера перед началом обмена. Мусор, прилетевший менее чем за время обмена 3-5 байтами, просто не виден (см. замечание о последнем межфрагментном интервале).

    Однако все это внешнее поведение функции, а что в ней спрятано достоверно могут рассказать только разработчики (магическое число 14 навивает мысль об аппаратном буфере в ИМС процессора).

    Ниже приведена тест-программа для контроллера М2. Входные переменные: скорость обмена и длина передаваемого пакета.
    Временные интервалы отсчитываются по основному циклу контроллера 1 мс.
    Для работы программы необходимо соединение двух СОМ-портров минимально в одном направлении или "эхо" для одного.

    Информация по котроллеру М2:
    PLC model MODEL PLC 110-60
    Binary VERSION 0.3.67
    Need Target version >= 3.10
    Compiled: 13:05:36 Feb 8 2017
    STM32 binary version 114
    Последний раз редактировалось pan2000; 01.04.2017 в 09:05. Причина: Перенос программы в другое сообщение

  5. #45

    По умолчанию

    Всегда читайте по 1-му байту и разбирайте последовательно. Ожидать N символов от последовательного интерфейса с возможностью помех - нельзя.
    Пример правильной машины состояний для разбора приведен в стандарте ModBus.

    P.S. таки да, 14 байт размер FIFO.
    Тролль-наседка, добрый, нежный и ласковый

  6. #46

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Всегда читайте по 1-му байту и разбирайте последовательно. Ожидать N символов от последовательного интерфейса с возможностью помех - нельзя.
    Пример правильной машины состояний для разбора приведен в стандарте ModBus.

    P.S. таки да, 14 байт размер FIFO.
    К сожалению, к ошибкам от помех добавляются ещё и ошибки от программной обработки. Именно о них и шла речь в моем сообщении. При переходе к контроллеру М2 изменилось поведение функции SysComRead. И для исправления ранее безошибочно работающих программ, одной рекомендации "читайте по 1-му байту" (если под этим подразумевается значение параметра "Число считаемых байт" =1) мало. Алгоритмы, чувствительные к более-менее равномерному поступлению байт, на длинных пакетах и при низких скоростях начинают отказывать.

    ------------------
    Начну с того,что сведенья о параметрах функции SysComRead, приведенные в документации, весьма лаконичны:
    dwBytesToRead DWORD Число считаемых байт

    О тайном смысле параметра остается только догадываться основываясь на собственном опыте и экспериментми с функцией.
    По результатам тест-программы (исходный текст в приложении):

    Для функции, выполняющейся на старом контроллере, это параметр следует считать "размером используемого буфера", который ограничивает максимальное значение функции (и соответственно заполнение буфера). Значение функции - число принятых байт на момент обращения к функции. Допустимые значения от нуля и по "Число считаемых байт". Функция принимает ненулевые значения в темпе приема байта контроллером.

    Для функции, выполняющейся на контроллере М2, этот параметр следует считать "МИНИМАЛЬНЫМ числом считываемых байт", ограничивающим минимальное, отличное от нуля, значение функции. Верхнее значение равно размеру FIFO. функция принимает ненулевые значения только после заполнения FIF0 и строго в ПОСЛЕДОВАТЕЛЬНЫХ циклах опроса (не следует забывать, что в тест-программе одно обращение к функции за 1 временной интервал). Для незаполненного FIFO к задержке появления ненулевых значений функции после завершения приема пакета добавляется временной интервал несколько байт (3-5 ?).

    В библиотеке Modbus.lib вариант RTU для функции значение параметра "Число считаемых байт" явно указано как размер массива из 256 байт. В приложении приведены распределения приема пакета, имитирующие работу Modbus.lib (RTU) для наиболее "плохой" длины пакета (чтение 11 регистров), для обоих типов контроллера. На М2 прием пакета завершится с ошибкой из-за большой длительности "межфрагментного" интервала.
    Для чтения не более 4-х регистров прием осуществляется за "одно" FIFO. Т.е. при использовании Modbus.lib RTU "не читайте медленно более 4-х регистров".

    Посмотреть поведение функции SysComRead для контроллера 110[M2] можно с помощью приведенной ниже тест-программы.
    Изображения Изображения
    Вложения Вложения
    Последний раз редактировалось pan2000; 01.04.2017 в 12:25. Причина: Изменение текста и приложений

Страница 5 из 5 ПерваяПервая ... 345

Похожие темы

  1. Ответов: 15
    Последнее сообщение: 13.10.2016, 16:27
  2. ПЛК110-30. Ошибка 84 NO_SOCKET
    от Alex-F в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 17.06.2016, 17:46
  3. ОВЕН ПЛК110-60 ошибка при подключении.
    от Sulfur в разделе ПЛК1хх
    Ответов: 13
    Последнее сообщение: 14.11.2013, 11:56
  4. плк110-60 сервис 47 ошибка 80
    от umikr в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 21.11.2010, 21:47
  5. плк110-трм148. протокол овен. ошибка 81. хелп!!!
    от MPEG1397 в разделе Эксплуатация
    Ответов: 26
    Последнее сообщение: 17.08.2010, 06:32

Метки этой темы

Ваши права

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