https://owen.ru/forum/showthread.php?t=13584 не благодарите
Вид для печати
https://owen.ru/forum/showthread.php?t=13584 не благодарите
Судя по коду расчета там CRC не Modbus
У этого устройства нестандартный протокол. modbus.lib тут не поможет. Надо пользоваться SysLibCom.
Вот на C# код для расчета CRC Modbus, видно что хоть и на C или на чем там у вас, отличается
Код:public static ushort CRC16_Modbus(byte[] msg)
{
const ushort polinom = 0xa001;
ushort code = 0xffff;
for (int i = 0, size = msg.Length; i < size; ++i)
{
code ^= (ushort)(msg[i] << 8);
for (uint j = 0; j < 8; ++j)
{
code >>= 1;
if ((code & 0x01) != 0) code ^= polinom;
}
}
return code;
}
В любом случае, благодарю.
Согласен про modbus.lib. А вот чтобы убедится что устройство работает надо запрос сделать с КС (верно?)(у меня их два на столе).Цитата:
Зачем тебе считать КС если modbus.lib это сама делает. Тебе надо убедиться, что твое устройство работает по протоколу Modbus RTU.
Capzap, товарищ! (Обратился бы по имени, так всё-таки правильней). Я понял ваш посыл - добиваться своим умом и трудом. Каждый должен быть на своём месте и оттачивать мастерство. Честно, того же мнения. В этом и есть смысл развития...
Эх, сейчас бы машину декомпрессии времени, разобрался бы детальней с задачей.
Ну да ладно. Ухожу на повторный круг образования. По результату сообщу.
Продолжаем разбор.
Как правильно получить контрольную сумму, для модбас? Тренируюсь на МВА.
Вложение 55225
Думал прогнать через проверку CRC и добавить недостающие байты, но ноля не получается.
Вложение 55226
Добавил байты
Вложение 55227
Нет ноля.
Вложение 55228
Обыкновенно CRC_GEN вычисляет контрольную сумму, которая присоединеняется к оригинальному сообщению. Если теперь снова вычислить контрольную сумму сообщения вместе с присоединенной к нему контрольной суммой, то в результате получится 0.