|
Dallas APPLICATION NOTE 27 |
|
|
|
Jul 11 2013, 02:15
|
Группа: Новичок
Сообщений: 8
Регистрация: 11-07-13
Пользователь №: 77 475

|
Привет всем извините пожалуйста может не по теме пытаюсь разобраться с расчётам контрольной суммы 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.pdfhttp://www.navi-tech.ru/file/protokol_DUTE-COM.pdfhttp://красавтоконтроль.рф/data/documents/RE=20LLS=2020160=20v8.pdf
|
|
|
|
|
 |
Ответов
(1 - 13)
|
Jul 11 2013, 03:34
|
Группа: Новичок
Сообщений: 8
Регистрация: 11-07-13
Пользователь №: 77 475

|
Цитата(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.pdfhttp://www.navi-tech.ru/file/protokol_DUTE-COM.pdfhttp://красавтоконтроль.рф/data/documents/RE=20LLS=2020160=20v8.pdf ой извините
|
|
|
|
|
Jul 11 2013, 10:20
|
Группа: Новичок
Сообщений: 8
Регистрация: 11-07-13
Пользователь №: 77 475

|
Цитата(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-частота , нужно разложить на байты и как то это всё суммировать или как то по-другому?
|
|
|
|
|
Jul 11 2013, 12:07
|

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Цитата(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-контрольная сумма С устройства на устройство передаётся не строка, а девять байт - через запятую Вы указали значения этих байт.
|
|
|
|
|
Jul 12 2013, 01:50
|
Группа: Новичок
Сообщений: 8
Регистрация: 11-07-13
Пользователь №: 77 475

|
Цитата(Палыч @ Jul 11 2013, 16:07)  Контрольную сумму вычисляет передающее устройство. Вычисляется контрольная сумма по алгоритмам, приведенным в документах, которые Вы указывали выше. В качестве входных данных для вычисления контрольной суммы используются восемь байт, которые предшествуют контрольной сумме. На приёмной стороне контрольная сумма вычисляется повторно и сравнивается с принятой. Если принятая и рассчитанная контрольные суммы совпали, то информация принята верно.
С устройства на устройство передаётся не строка, а девять байт - через запятую Вы указали значения этих байт. Попытался прогнать через калькулятор не чего не выходит получается другая цифра может что то я не так делаю подскажите пожалуйста что не так? http://ghsi.de/CRC/index.php?Polynom=10011...&Message=6462,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
|
|
|
|
|
Jul 12 2013, 03:44
|
Группа: Новичок
Сообщений: 8
Регистрация: 11-07-13
Пользователь №: 77 475

|
62,1,7,19,122,0,132,30,234
1B 59 0E 69 FC
00011011 01011001 00001110 01101001 11111100
Последний байт - контрольная сумма пакета. Если он не совпадает с расчитанной по первым 8, пакет игнорируется как ошибочный.
Где тут первые 8 байт?
|
|
|
|
|
Jul 13 2013, 13:19
|
Группа: Новичок
Сообщений: 8
Регистрация: 11-07-13
Пользователь №: 77 475

|
Цитата(toweroff @ Jul 12 2013, 15:52)  Я вот, честно говоря, вообще не понимаю из-за чего сыр-бор В апноте ясным по белому есть пример и на асме, и на C. В чем проблема-то? Если нет желания использовать таблицу из-за нехватки места, так есть и более другие алгоритмы со сдвигом и XOR А все эти on-line "я-посчитаю-все-на-свете" - от лукавого. Ну кроме, разве что, генератора паролей  Объясните тогда пожалуйста как по таблице рассчитать это контрольную сумму, по калькулятору всё равно у меня не чего не получилась и так и сяк переворачивал видимо чего та не да понял 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 И то что остаётся это контрольная сумм Или как то это по-другому
|
|
|
|
|
Jul 13 2013, 13:49
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Да к лешему этот калькулятор, читайте апнот! Там, правда, Паскаль, но какая разница... вот переписал на сях, все работает Код //---------------------------------------------------------------------------
#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; } //---------------------------------------------------------------------------
|
|
|
|
|
Jul 14 2013, 08:38
|
Группа: Новичок
Сообщений: 8
Регистрация: 11-07-13
Пользователь №: 77 475

|
Цитата(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 байт переводим в биты в одну строку и вычитаем какую та цифру и остаток который получился рассчитываем по таблице?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|