Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя
Показано с 21 по 30 из 45

Тема: потеря байтов в ответной посылке с периодом 4-5 с.

  1. #21
    Пользователь
    Регистрация
    28.04.2008
    Адрес
    Обнинск
    Сообщений
    12

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Вот наворотили. Дали студенту задание, наверное. Съэкономили. А людям мучайся.
    А важных вещей нет. CRC для 256 байт слабая, числа байт в посылке нет (доп. проверка).

    А к моему посту тут добавить нечего. Описанные выше проблемы к протоколу никакого отношения не имеют.
    Как и многое другое, контрольная сумма CRC-8 "исторически сложилось".
    Приходится тащить всё это дальше.

    Вопрос: на чем съэкономили, из-за чего люди мучаются?
    И каких вещей не хватает?
    Сторонний взгляд, сами понимаете, лучше, а то иногда и "бревна в своем глазу не видно".

    P.S. Потихоньку на modbus-rtu переходим...

  2. #22

    По умолчанию

    Не хватает:
    1. Числа байт (слов, регистров, чего-нибудь) в посылке - дополнительный контроль.
    2. Признака запрос/ответ - доп. контроль + возможность прослушивать линию.
    Лишнее:
    1. Зачем сложные методы опроса. Кто их использует?
    2. Зачем адрес источника
    3. Очень сложная система команд. Как это поддерживать и реализовывать?
    4. 7! вариантов адреса с разным поведением.
    5. Смешались в кучу бинарный и символьный тип данных. Команды символьные, адреса бинарные, данные вообще смешение символов, бинарных данных и битовых полей.
    6. Создаётся впечатление, что начали с простого протокола и потом добавляли и добавляли, пока он не умер под гнётом функционала. Это вообще можно протестировать и отладить?

  3. #23

    По умолчанию

    Цитата Сообщение от Разаренов Федор Посмотреть сообщение
    Да, действительно мы обнаружили в ПЛК100 и ПЛК150 проблему с портом RS485. Проблема состоит в том, что при посылке запроса на Slave-устройство из-за паразитных связей его часть может попасть в приемный буфер порта (причем ситуация нестабильна и проявляется не при каждой посылке). Из-за этого могут портиться или теряться первые 1-2 байта ответа Slave-устройства или наоборот к ответу добавляться в начале несколько бит или один байт.
    Проблему можно решить аппаратной доработкой контроллера (необходимо допаять один резистор). Это можно сделать самостоятельно (материалы по доработке готовяться и будут скоро выложены на форуме) или обратившись в наш сервис-центр. Также мы в данный момент работаем над программным исправлением проблемы. Но здесь однозначного решения пока не найдено. О результатах также будет размещена информация на нашем сайте.
    Приносим свои извинения.
    Забыли поставить подтягивающий резистор на выход приемника с линии RS485. При передаче в линию RS485 неопределенное состояние с этого выхода может давать ложные принятые байты. Надо резистор 2,4 ком между 1 и 8 ножками микросхемы ADM485

  4. #24

    По умолчанию

    В данном случае проблема потери байт не от неправильной схемотехники а от ошибки
    (* СОЕДИНЯЕМСЯ С ТЕНЗОПРЕОБРАЗОВАТЕЛЕМ М0801 ПО ПРОТОКОЛУ METRABUS* ВСЕ ИДЕТ НОРМАЛЬНО*)
    SysComWrite(0,ADR(SEND),7,0);

    sz:=SysComRead(0,ADR(rcvBUF),18,0); (* ЗДЕСЬ ТЕРЯЮТСЯ ПРИНЯТЫЕ БАЙТЫ ОТ 2-Х ДО 5-ТИ *)

    Нельзя в туже микросекунду ждать ответа от прибора -SysCom функции НЕБЛОКИРУЮЩИЕ - мгновенно возвращают управление. Ждите ответа через N мс. Для этого заведите отдельный таймер

  5. #25

    По умолчанию

    Цитата Сообщение от Малышев Олег Посмотреть сообщение
    В данном случае проблема потери байт не от неправильной схемотехники а от ошибки
    (* СОЕДИНЯЕМСЯ С ТЕНЗОПРЕОБРАЗОВАТЕЛЕМ М0801 ПО ПРОТОКОЛУ METRABUS* ВСЕ ИДЕТ НОРМАЛЬНО*)
    SysComWrite(0,ADR(SEND),7,0);

    sz:=SysComRead(0,ADR(rcvBUF),18,0); (* ЗДЕСЬ ТЕРЯЮТСЯ ПРИНЯТЫЕ БАЙТЫ ОТ 2-Х ДО 5-ТИ *)

    Нельзя в туже микросекунду ждать ответа от прибора -SysCom функции НЕБЛОКИРУЮЩИЕ - мгновенно возвращают управление. Ждите ответа через N мс. Для этого заведите отдельный таймер
    Функции работают по прерыванию от USART в фоновом режиме?

  6. #26

    По умолчанию

    Да, есть буфер приёма и буфер передачи. И прерывания USART. Всё для удобства клиента

  7. #27

    По умолчанию

    Цитата Сообщение от Разаренов Федор Посмотреть сообщение
    Проблему можно решить аппаратной доработкой контроллера (необходимо допаять один резистор). Это можно сделать самостоятельно (материалы по доработке готовяться и будут скоро выложены на форуме) или обратившись в наш сервис-центр.
    Размещаю информацию о схемотехнической доработке RS485 в ПЛК100, ПЛК150. Смотрите прикрепленный файл.

  8. #28
    Пользователь
    Регистрация
    28.04.2008
    Адрес
    Обнинск
    Сообщений
    12

    По умолчанию

    Федор, что-то немного не скачивается...
    Все время просит авторизации, хотя форум вроде бы меня узнал.
    Последний раз редактировалось richie; 07.04.2009 в 09:41.

  9. #29

    По умолчанию

    В этой теме я кажется нашел ответы на мои вопросы. У меня похожий протокол обмена с весовым индикаторм СІ5010A (CAS). И тоже самое происходило с ответом. C библиотекой UNM я как-то добился правильного приема, но он был очень громоздким. Следуя рекомендациям в этой теме, я добился правильного приема с библ. SysLibCom и примером Example_SysLibCom с форума. Действительно нужно поставить таймер после передачи команды и перед приемом ответа, я поставил 100 мс.
    С 485 у меня тоже какие-то глюки, как-то ни сразу идет нормальный обмен. Поэтому попробую сделать переделку по методике Федора. Пример пока еще очень сырой, когда доработаю могу выслать.

  10. #30

    По умолчанию

    Здравствуйте Владислав !!

    Беспокоит Вас Александр из Краснодара. У меня возник еще один вопрос.
    Может быть Вы смогли помочь !
    Мне нужно подключить к ПЛК-100 6 счетчиков СИ8 по RS485, а ПЛК-100 к компьютеру. Всвязи с этим возник вопрос как лучше подключить ПЛК-100
    к компьютеру - по RS485 или Ethernet. Возможно ли сделать ПЛК-100
    на одной линии RS485 и ведущим по отношению к СИ8 и ведомым по отношению к компьютеру.
    А в библиотеках CodeSys я не нашел команд работающих с Ethernet.
    Не подскажите где можно найти команды работающие с Ethernet.
    Ведь физически интерфейс есть. Кроме того имеются ли драйверы
    для компьютера на Delphi принимающие данные с Ethernet лнии.

    С уважением Александр.

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

Ваши права

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