Значения прыгают.

Просмотр 10 сообщений - с 16 по 25 (из 25 всего)
  • Автор
    Сообщения
  • #4424
    Аватарmanjey73
    Участник

    Ой, а вы стороннюю систему отключаете когда запускаете опрос Рапидой ?
    Хотя Modbus TCP же, если ПЛК или что там поддерживает несколько сокетов то не должно влиять…

    • Этот ответ был изменен 4 года, 3 месяца назад от Аватарmanjey73.
    #4434
    iKasperiKasper
    Участник

    Коллеги, Mikhail и manjey73
    Совместными силами мы разобрались в 1 проблеме, как оказалось
    После установке порядка байт 0123 всем значениям, я заметил что мое искомое целое слово убежало к второму значению, которое стало равняться 67608 вместо 2072.
    Воспользовавшись парсером ознакомился и увидел в первом элементе первое слово нулевое, а второе значение второго слова, а в третьем целое слово которое убегало к второму элементу.
    Вспомнив про Модбас, что адрес элемента смещается на единицу, я его сменил и порядок поменял с 0123 на 2301, в результате получил все корректные значения.
    Сомневаюсь что скачки значений взаимосвязанны, но смотрю что будет.

    #4435
    iKasperiKasper
    Участник

    Стороннюю не отключал, пока проверял значения..

    #4436
    Аватарmanjey73
    Участник

    да, 2301 у меня практически постоянно. вот для записи правда пришлось формулку лепить для переворота байтов…

    И вот вопрос к Михаилу по примеру, который я не могу понять. При чтении 2301, а чтобы записать тот же float приходится с ним поступать так

    Array.Copy(f, 0, o, 1, 1); // вот тут мне непонятен порядок байт
    Array.Copy(f, 1, o, 0, 1); // приходится переставлять не 01 с 23
    Array.Copy(f, 2, o, 3, 1); // а именно 0 и 1, 2 и 3 местами и это работает
    Array.Copy(f, 3, o, 2, 1); // хотя при чтении именно 2301 указывается
    и потом
    Array.Resize(ref o, 8);
    Double ou = BitConverter.ToDouble(o,0);
    return ou;

    Что я не учел в архитектурах ПК и ПЛК ? а то пришлось методом тыка по сниферу прийти…

    • Этот ответ был изменен 4 года, 3 месяца назад от Аватарmanjey73.
    • Этот ответ был изменен 4 года, 3 месяца назад от Аватарmanjey73.
    #4445
    MikhailMikhail
    Модератор

    Отдельный сниффер не нужен, потому что в журнале лини связи отображается весь обмен.
    По порядку байт: после осознания он забывается крайне быстро, потому что по стандарту Модбас указан определённый порядок, потом на него накладывается порядок, указанный в шаблоне, ещё накладывается порядок, принятый в ОС. Проще всего методом тыка. Я хочу сделать калькулятор, который будет сразу выдавать все возможные варианты и в разы ускорять метод тыка. Но руки пока не дошли.

    Кстати, грамотные разработчики устройств на попытку считать регистры с неверным смещением выдают ошибку адреса.
    iKasper, на текущий момент данная проблема решена?

    #4449
    iKasperiKasper
    Участник

    Mikhail, да проблема решена, так же скачки пропали. На протяжении 5 часов все значения корректны.
    Большое спасибо.

    #4535
    iKasperiKasper
    Участник

    Коллеги, после мониторинга, проблема с прыгающими значениями сохранилась.
    В отличии от предыдущего раза проблема проявляется спустя сутки.
    Из изменений увеличили таймаут до 2500 и паузу до 1000.
    Какие есть еще предложения?
    Во время скачков в журнале появляется сообщение: Некорректная длина PDU!
    После перезапуска коммуникатора, значения все выравниваются.

    #4538
    MikhailMikhail
    Модератор

    При возникновении ошибки «Некорректная длина PDU!» данные тегов должны пропадать вообще, а не прыгать. Чтобы найти причину прыгающих значений, нужно точно найти тот пакет Модбас, который декодируется не так, как Вам нужно, а затем анализировать, что в нём не так.

    Нужно в шаблоне устройства оставить только те данные, на которых проявляется проблема. Затем скопировать ответ устройства из лога по байтам. Далее отправлять его на Коммуникатор вместо устройства с помощью какой-нибудь утилиты, например, Hercules. Если ошибка со значениями воспроизводится, то думать дальше.

    #4629
    iKasperiKasper
    Участник

    Коллеги, добрый день.
    Подскажите в какую сторону копать
    Настроил передачу данных в MYSSQL пару дней поработал стабильно, а сейчас в логах постоянно такая ошибка: 2017-02-16 10:04:09 Ошибка при экспорте текущих данных в БД MySQL — localhost:3307: Duplicate entry ‘2017-02-16 09:53:55-1020’ for key ‘PRIMARY’
    И конечно значения в базе MySQL не обновляются.

    #4631
    MikhailMikhail
    Модератор

    Добрый день!
    Заведите, пожалуйста, отдельную тему для этой проблемы. Отключите, в качестве теста, от опроса КП, которое использует входной канал 1020.

Просмотр 10 сообщений - с 16 по 25 (из 25 всего)
  • Вы должны авторизироваться для ответа в этой теме.