Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Dallas APPLICATION NOTE 27
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
dron2012
Привет всем извините пожалуйста может не по теме пытаюсь разобраться с расчётам контрольной суммы Dallas APPLICATION NOTE 27 и не как не выходит.

данный которые выходят с датчика уровня топливо в конфигураторе отображается уровень (122) как я понял это вроде вот так

тем. уров. контрольная сумма
62,1, 7,19, 122,0, 132,30,234


62,1,7,19,122,0,132,30,234

62,1,7,19,122,0,246,30,66

62,1,7,19,122,0,49,31,64

62,1,7,19,122,0,80,31,81

62,1,7,19,122,0,151,31,3



Подскажите пожалуйста как рассчитывается контрольная сумма в таблице не как не магу разобраться
.


http://www.microshadow.com/files/files8051/app27.pdf


http://www.navi-tech.ru/file/protokol_DUTE-COM.pdf

http://красавтоконтроль.рф/data/documents/RE=20LLS=2020160=20v8.pdf
dron2012
Цитата(dron2012 @ Jul 11 2013, 06:15) *
Привет всем извините пожалуйста может не по теме пытаюсь разобраться с расчётам контрольной суммы Dallas APPLICATION NOTE 27 и не как не выходит.

данный которые выходят с датчика уровня топливо в конфигураторе отображается уровень (122) как я понял это вроде вот так

тем. уров. контрольная сумма
62,1, 7,19, 122,0, 132,30,234


62,1,7,19,122,0,132,30,234

62,1,7,19,123,0,246,30,66

62,1,7,19,124,0,49,31,64

62,1,7,19,125,0,80,31,81

62,1,7,19,126,0,151,31,3



Подскажите пожалуйста как рассчитывается контрольная сумма в таблице не как не магу разобраться
.


http://www.microshadow.com/files/files8051/app27.pdf


http://www.navi-tech.ru/file/protokol_DUTE-COM.pdf

http://красавтоконтроль.рф/data/documents/RE=20LLS=2020160=20v8.pdf



ой извините
Палыч
Цитата(dron2012 @ Jul 11 2013, 06:15) *
Подскажите пожалуйста как рассчитывается контрольная сумма в таблице не как не магу разобраться

Не понятна Ваша просьба - что Вам подсказать ?
Попробуйте найти ответ здесь.
ZASADA
не понял вопрос. в первом же пдф описаны несколько способов расчета контрольной суммы с примерами.
dron2012
Цитата(ZASADA @ Jul 11 2013, 10:26) *
не понял вопрос. в первом же пдф описаны несколько способов расчета контрольной суммы с примерами.



Извините что не умею выражать ясно свои мысли


У нас есть строка которая передаются с одного устройства на другое

62,1,7,19,122,0,132,30,234

62-префикс, 1-адрес устройства, 7-код,19-температура,122,0-уровень,123,30-частота,234-контрольная сумма


Подскажите пожалуйста откуда берётся контрольная сумма 234 и как она высчитывается ?


19-температура,122,0-уровень,123,30-частота , нужно разложить на байты и как то это всё суммировать или как то по-другому?
Палыч
Цитата(dron2012 @ Jul 11 2013, 14:20) *
Подскажите пожалуйста откуда берётся контрольная сумма 234 и как она высчитывается ?

Контрольную сумму вычисляет передающее устройство. Вычисляется контрольная сумма по алгоритмам, приведенным в документах, которые Вы указывали выше. В качестве входных данных для вычисления контрольной суммы используются восемь байт, которые предшествуют контрольной сумме. На приёмной стороне контрольная сумма вычисляется повторно и сравнивается с принятой. Если принятая и рассчитанная контрольные суммы совпали, то информация принята верно.

Цитата(dron2012 @ Jul 11 2013, 14:20) *
У нас есть строка которая передаются с одного устройства на другое
62,1,7,19,122,0,132,30,234
62-префикс, 1-адрес устройства, 7-код,19-температура,122,0-уровень,123,30-частота,234-контрольная сумма

С устройства на устройство передаётся не строка, а девять байт - через запятую Вы указали значения этих байт.
dron2012
Цитата(Палыч @ Jul 11 2013, 16:07) *
Контрольную сумму вычисляет передающее устройство. Вычисляется контрольная сумма по алгоритмам, приведенным в документах, которые Вы указывали выше. В качестве входных данных для вычисления контрольной суммы используются восемь байт, которые предшествуют контрольной сумме. На приёмной стороне контрольная сумма вычисляется повторно и сравнивается с принятой. Если принятая и рассчитанная контрольные суммы совпали, то информация принята верно.


С устройства на устройство передаётся не строка, а девять байт - через запятую Вы указали значения этих байт.






Попытался прогнать через калькулятор не чего не выходит получается другая цифра может что то я не так делаю подскажите пожалуйста что не так?

http://ghsi.de/CRC/index.php?Polynom=10011...&Message=64

62,1,7,19,122,0,122,0,132,30,234

префикс
6-00101110
2-00101010

адрес
1-00100001

код команд
7-00101111

температура
1-00100001
9-00111111

уровень
1-00100001
2-00101010
2-00101010

0-00100000

частота
1-00100001
3-00101011
2-00101010

3-00101011
0-00100000


контрольная сумма
2-00101010
3-00101011
4-00101100

00101110001010100010000100101111001000010011111100100001001010100010101000100000
0010000100101011001010100010101100100000

dron2012
62,1,7,19,122,0,132,30,234

1B 59 0E 69 FC


00011011
01011001
00001110
01101001
11111100


Последний байт - контрольная сумма пакета. Если он не совпадает с расчитанной по первым 8, пакет игнорируется как ошибочный.


Где тут первые 8 байт?
dron2012
А патом что с ними сделать 62,1, 7,19, 122,0, 132,30 перевести в din

111110 1 111 10011 1111010 0 10000100 11110


Или как то по другому?

Как рассчитать контрольную сумму с помощью калькулятора

http://ghsi.de/CRC/index.php?Polynom=11111...11&Message=



http://www.zmitac.aei.polsl.pl/Electronics...ALLAS/app27.pdf



чтобы получилась контрольная сумма 234 ?
SSerge
Обычная проблема тупо- и остроконечников.
Пока речь идёт о потоке битов всё одинаково, а когда этот поток пытаются записать покомпактнее, как последовательность байтов, тут возникает древняя проблема, описанная ещё Дж. Свифтом в "Путешествиях Гулливера".
В pdf от Далласа данные каждого байта передаются начиная с младшего бита, а авторы калькулятора считают что передача идёт старшим битом вперёд.
Если в Вашем пакете все биты в байтах зеркально отразить, то получится строка (в шестнадцатиричном представлении):
7C 80 E0 C8 5E 00 21 78 57
Если первые 8 байт из этой строки скормить калькулятору, то он выдаст CRC именно 0x57, это и есть 234 или 0xEA но с другим порядком следования бит.
toweroff
Я вот, честно говоря, вообще не понимаю из-за чего сыр-бор
В апноте ясным по белому есть пример и на асме, и на C. В чем проблема-то? Если нет желания использовать таблицу из-за нехватки места, так есть и более другие алгоритмы со сдвигом и XOR
А все эти on-line "я-посчитаю-все-на-свете" - от лукавого. Ну кроме, разве что, генератора паролей biggrin.gif
dron2012
Цитата(toweroff @ Jul 12 2013, 15:52) *
Я вот, честно говоря, вообще не понимаю из-за чего сыр-бор
В апноте ясным по белому есть пример и на асме, и на C. В чем проблема-то? Если нет желания использовать таблицу из-за нехватки места, так есть и более другие алгоритмы со сдвигом и XOR
А все эти on-line "я-посчитаю-все-на-свете" - от лукавого. Ну кроме, разве что, генератора паролей biggrin.gif




Объясните тогда пожалуйста как по таблице рассчитать это контрольную сумму, по калькулятору всё равно у меня не чего не получилась и так и сяк переворачивал видимо чего та не да понял

62,1,7,19,122,0,132,30,234

3E 01 07 13 7A 00 84 1E EA


00111110
00000001
00000111
00010011
01111010
00000000
10000100
00011110
11101010




Или мы берем 8 байт в старку

0011111000000001000001110001001101111010000000001000010000011110


и делаем вычитания 64 на 100110001
P(x) = x8+ x5+ x4+ x0

И то что остаётся это контрольная сумм

Или как то это по-другому
toweroff
Да к лешему этот калькулятор, читайте апнот!
Там, правда, Паскаль, но какая разница... вот переписал на сях, все работает
Код
//---------------------------------------------------------------------------

#include <stdio.h>


// there our data
unsigned char our_data[8] = {62,1, 7,19, 122,0, 132,30};


unsigned char CRC_table[256] = {
0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,
157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,
35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,
190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,
70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,
219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,
101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,
248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,
140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,
17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,
175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,
50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,
202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,
87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,
233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,
116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53};

void CRC (unsigned char *crc, unsigned char data)
{
    *crc = CRC_table[*crc ^ data];
    return;
}
//---------------------------------------------------------------------------

int main(int argc, char* argv[])
{
unsigned char our_crc, i;

    our_crc = 0;

    for(i=0; i<8; i++)
        CRC(&our_crc, our_data[i]);

    // MUST be 234 (0xEA)
    printf("Calculated CRC: %d (%Xh)\n");

    return 0;
}
//---------------------------------------------------------------------------
dron2012
Цитата(toweroff @ Jul 13 2013, 17:49) *
Да к лешему этот калькулятор, читайте апнот!
Там, правда, Паскаль, но какая разница... вот переписал на сях, все работает
Код
//---------------------------------------------------------------------------

#include <stdio.h>


// there our data
unsigned char our_data[8] = {62,1, 7,19, 122,0, 132,30};


unsigned char CRC_table[256] = {
0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,
157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,
35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,
190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,
70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,
219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,
101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,
248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,
140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,
17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,
175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,
50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,
202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,
87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,
233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,
116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53};

void CRC (unsigned char *crc, unsigned char data)
{
    *crc = CRC_table[*crc ^ data];
    return;
}
//---------------------------------------------------------------------------

int main(int argc, char* argv[])
{
unsigned char our_crc, i;

    our_crc = 0;

    for(i=0; i<8; i++)
        CRC(&our_crc, our_data[i]);

    // MUST be 234 (0xEA)
    printf("Calculated CRC: %d (%Xh)\n");

    return 0;
}
//---------------------------------------------------------------------------




Спасибо, в коде конечно это всё красиво выглядит но как этот процесс происходит
Мы 8 байт переводим в биты в одну строку и вычитаем какую та цифру и остаток который получился рассчитываем по таблице?


Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.