Тема / Topic: Связь по ModBus RTU в Trace Mode 5.11
vladbond
Junior Member / Новичок
Участник № / Member № 171
отправлено / posted
В версии 5.11 в протокол ModBus RTU был добавлен контроль CRC. 1. Можно узнать алгоритм вычисления этой контрольной суммы? 2. Можно ли его отключать, если нет необходимости? Если можно, то как?
отправлено / posted
Алгоритм вычисления контрольной суммы приводится в стандарте MODBUS (он доступен на сайте фирмы Schneider Electric). У нас, к сожалению, нет этого стандарта в электронном виде. Привожу вам выдержку из стандарта. "Сообщение (только биты данных, без учета старт/стоповых бит и бит четности рассматривается как одно последовательное двоичное число, у которого старший значащий бит (MSB) передается первым. Сообщение умножается на X**16 (сдвигается влево на 16 бит), а затем делится на (X**16 + X**15 + X**2 + 1), выражаемое как двоичное число 11000000000000101. Целая часть результата игнорируется, а 16-битный остаток (предварительно инициализированный единицами для предотвращения случая, когда все сообщение состоит из нулей) добавляется к сообщению (старшим байтом вперед) как 2 байта контрольной суммы. Полученное сообщение, включающее CRC, затем в приемнике делится на тот же полином. Если ошибок не было, остаток от деления должен быть нулевым. Приемное устройство может рассчитать CRC и сравнить ее с переданной. Вся арифметика выполняется по модулю 2 (без переноса)."
Отменить проверку контрольной суммы нельзя. Мы вынуждены подчиняться требованиям стандарта. В противном случае гарантировать декларированную стандартом надежность обмена данными нельзя.
Сообщения / Posts 17322 | Из / From: Россия
| IP / IP: IP адрес / IP address |
vladbond
Junior Member / Новичок
Участник № / Member № 171
отправлено / posted
Мы проверили контрольную сумму запросов с Trace Mode 5.11 и ответов нашего контроллера. Контрольные суммы совпадают! По протоколу ModBus мы передаем числа в формате float. Самое интересное, что Trace Mode 5.10 нормально принимает ответ нашего контроллера, а версия Trace Mode 5.11 ничего не принимает!
отправлено / posted
Мы еще раз перепроверили обмен по MODBUS в релизах 5.10, 5.11 и 5.12. Никаких ошибок не обнаружили. В Вашем варианте "правильная" работа релиза 5.10 говорит о том, что при отсутствии проверки контрольной суммы ответы устройства воспринимаются правильно. Релиз 5.11 проверяет контрольную сумму и дает "недостоверность". Значит, все-таки что-то в принятой контрольной сумме неверно.
Сообщения / Posts 17322 | Из / From: Россия
| IP / IP: IP адрес / IP address |
vladbond
Junior Member / Новичок
Участник № / Member № 171
Если можно точнее указать адрес в инете где именно находится описание указанного алгоритма, потому что мне не удается найти. Мне известно два алгортма вычисления CRC, но они громоздки, а ваш, на первый взгляд, кажется проше.
Но по описанному вами алгоритму CRC нужный не получается (или я что-то не так понял или вы что-то не дописали). Понятнее всего будет мне, если вы рассмотрите этот алгоритм на примере. Последовательность данных(hex): 12 04 00 2e 00 02 CRC должен получится 3363 в hex. Так вычисляется в Trace Mode и в моей программе по другому алгоритму.
Сообщения / Posts 11 | Из / From: Россия
| IP / IP: IP адрес / IP address |