This is topic Связь по ModBus RTU в Trace Mode 5.11 in forum TRACE MODE 5 бесплатная версия / TRACE MODE 5 Free version at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/18/t/000062.html

Posted by vladbond (Участник № / Member № 171) on :
 
В версии 5.11 в протокол ModBus RTU был добавлен контроль CRC.
1. Можно узнать алгоритм вычисления этой контрольной суммы?
2. Можно ли его отключать, если нет необходимости?
Если можно, то как?

PS: Ответ нужен срочно!
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Алгоритм вычисления контрольной суммы приводится в стандарте MODBUS (он доступен на сайте фирмы Schneider Electric). У нас, к сожалению, нет этого стандарта в электронном виде. Привожу вам выдержку из стандарта.
"Сообщение (только биты данных, без учета старт/стоповых бит и бит четности рассматривается как одно последовательное двоичное число, у которого старший значащий бит (MSB) передается первым. Сообщение умножается на X**16 (сдвигается влево на 16 бит), а затем делится на (X**16 + X**15 + X**2 + 1), выражаемое как двоичное число 11000000000000101.
Целая часть результата игнорируется, а 16-битный остаток (предварительно инициализированный единицами для предотвращения случая, когда все сообщение состоит из нулей) добавляется к сообщению (старшим байтом вперед) как 2 байта контрольной суммы. Полученное сообщение, включающее CRC, затем в приемнике делится на тот же полином. Если ошибок не было, остаток от деления должен быть нулевым. Приемное устройство может рассчитать CRC и сравнить ее с переданной. Вся арифметика выполняется по модулю 2 (без переноса)."

Отменить проверку контрольной суммы нельзя.
Мы вынуждены подчиняться требованиям стандарта. В противном случае гарантировать декларированную стандартом надежность обмена данными нельзя.
 
Posted by vladbond (Участник № / Member № 171) on :
 
Мы проверили контрольную сумму запросов с Trace Mode 5.11 и ответов нашего контроллера. Контрольные суммы совпадают!
По протоколу ModBus мы передаем числа в формате float. Самое интересное, что Trace Mode 5.10 нормально принимает ответ нашего контроллера, а версия Trace Mode 5.11 ничего не принимает!

Может, что подскажете?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Мы еще раз перепроверили обмен по MODBUS в релизах 5.10, 5.11 и 5.12.
Никаких ошибок не обнаружили.
В Вашем варианте "правильная" работа релиза 5.10 говорит о том, что при отсутствии проверки контрольной суммы ответы устройства воспринимаются правильно.
Релиз 5.11 проверяет контрольную сумму и дает "недостоверность". Значит, все-таки что-то в принятой контрольной сумме неверно.
 
Posted by vladbond (Участник № / Member № 171) on :
 
Насчет алгоритма вычисления CRC:

Если можно точнее указать адрес в инете где именно находится описание указанного алгоритма, потому что мне не удается найти.
Мне известно два алгортма вычисления CRC, но они громоздки, а ваш, на первый взгляд, кажется проше.

Но по описанному вами алгоритму CRC нужный не получается (или я что-то не так понял или вы что-то не дописали).
Понятнее всего будет мне, если вы рассмотрите этот алгоритм на примере.
Последовательность данных(hex): 12 04 00 2e 00 02
CRC должен получится 3363 в hex. Так вычисляется в Trace Mode и в моей программе по другому алгоритму.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Нам затруднительно проверять правильность формирования контрольной суммы.
Наш драйвер полностью соответствует протоколу http://www.modicon.com/techpubs/toc7.html
Английское описание протокола.
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2