Разобрался с получением КС в десятичном формате. Как перевести в 16#?
218 перевожу в HEX получается DA а в запросе должно 16#8B
Скриншот 21-05-2021 190844_3.jpg
Разобрался с получением КС в десятичном формате. Как перевести в 16#?
218 перевожу в HEX получается DA а в запросе должно 16#8B
Скриншот 21-05-2021 190844_3.jpg
а как же здравый смысл? owen.png
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Да, такие же цифры. Но в КС младший байт из примера обозначен 8B.
Вот и думаю как получили.
Ладно там в примере запрос в шестнадцатеричном формате нужен для смещения точки. Т.к. предстоит считывать дискреты, то это можно опустить.
А здравый смысл преобладает в спокойном состоянии.
Затяжные сюрпризы с протоколом производителя, без опыта организации связки, да в командировке заставляют размозжить мозги. Состояние полёта в на орбиту.
какой пример?
Начните с чего нибудь внятного, например https://ru.wikipedia.org/wiki/Modbus раздел примеры, даны три различных посылки с ними и разбирайтесь
ЗЫ У меня вот всё сходится во вложении
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Павел_Хабаровск, если полный ответ вместе с CRC при проверке не получает 0 то это не Modbus, это только фишка CRC именно Modbus протокола, пока мне не попадались другие протоколы, где был бы ноль при расчете с учетом CRC
Напишите строку в HEX при ответе прибора, любую, интересно посмотреть что там за контрольная сумма.
capzap на счет документа не скажу. Но сам расчет CRC Modbus имеет данную фишку. Если в расчет CRC закинуть весь ответ вместе с полученной CRC то новая CRC будет равна 0. Всегда.
то есть посылаем 8 байт, посчитали и прилепили согласно протокола еще 2 байта и потом в расчет кинем все 10 байт то получим новую CRC=0
А, про 0 указано в документе на протокол, который выкладывал Павел. Но по коду там не похоже на расчет Modbus.
И кстати >> это не ROR а SHIFT, выталкиваемые биты замещаются нулями. А, или я не понял, вот эта конструкция ROL ? ((x>>4)|(x<<4))
Последний раз редактировалось melky; 21.05.2021 в 13:37.
SHR и SHL соотв. так это и есть shift вправо или влево с выталкиванием битов. то есть >> или <<
((x>>4)|(x<<4)) - а эта комбинация действительно ROL или ROR на 4 всего байта, переставление полубайт, обозванное инверсией.
ну да, на 4 бита всего байта. перестановка полубайт (дословно, не инверсия как выразился).
з.ы. буду знать как ROL и ROR делать