Checksum |
Ответить | Страница 12> |
Автор | |
Новичок Присоединился: 18 Октябрь 2006 Категория: Russian Federation Online Status: Offline Публикации: 6 |
Опубликовано: 18 Октябрь 2006 12:48 |
Не могу понять как пересчитывается контрольная сумма в модулях ADAM из трехзначного вида в двухзначный.
В мануале написано: The sum of these ASCII codes is 125h, and the result equals to 25h after modulus-256(100h) execution. Я отнимал от 125h сотню и получал 25h. Но это при небольших значениях (запрос модулю и показания из модуля по одному каналу) Сейчас решил снимать показания сразу по всем каналам. И расчитанное мною значение контрольной суммы выросло (примерно: 568, 5AB, 58D и т.д.) Модуль выдает 58, 6B, 4D сответственно. т.е. он выдает первый и последний символ расчетной контрольной суммы (568 это 58). Когда средний символ - A,он увеличивает первую цифру на 1 (5AB это 6B). Когда средний символ 8 модуль уменьшает первую цифру на единицу (58D это 4D). Одним словом запутался я в шестнадцатиричной системе. Я просто хочу понть как трехзначное значение контрольной суммы преобразуется в двузначное. |
|
Действительный член Присоединился: 27 Сентябрь 2006 Online Status: Offline Публикации: 125 |
|
В переводе это означает, что сотни (16-ричные) всегда будут отбрасываться (результат будет всегда от 00h до FFh), так на число на второй позиции ему "наплевать". А вот примеры явно с этим не согласуются |
|
Новичок Присоединился: 18 Октябрь 2006 Категория: Russian Federation Online Status: Offline Публикации: 6 |
|
Пример 1
>+016.19+017.81+012.43+018.85 64 > - 3E + - 2B 0 - 30 1 - 31 6 - 36 . - 2E 1 - 31 9 - 39 + - 2B 0 - 30 1 - 31 7 - 37 . - 2E 8 - 38 1 - 31 + - 2B 0 - 30 1 - 31 2 - 32 . - 2E 4 - 34 3 - 33 + - 2B 0 - 30 1 - 31 8 - 38 . - 2E 8 - 38 5 - 35 сумма = 5A4 Модуль выдает - 64 Пример 2 >+015.94+017.34+012.22+018.71 5C > - 3E + - 2B 0 - 30 1 - 31 5 - 35 . - 2E 9 - 39 4 - 34 + - 2B 0 - 30 1 - 31 7 - 37 . - 2E 3 - 33 4 - 34 + - 2B 0 - 30 1 - 31 2 - 32 . - 2E 2 - 32 2 - 32 + - 2B 0 - 30 1 - 31 8 - 38 . - 2E 7 - 37 1 - 31 сумма = 59С модуль выдает - 5С |
|
Новичок Присоединился: 18 Октябрь 2006 Категория: Russian Federation Online Status: Offline Публикации: 6 |
|
Вообще-то модуль шестиканальный, но мне нужны только 4 канала. Вместо 2-х последних значений идут пробелы. Может пробел тоже как-нибудь считается?
|
|
Новичок Присоединился: 18 Октябрь 2006 Категория: Russian Federation Online Status: Offline Публикации: 6 |
|
Замучил калькулятор и нашел некую закономерность:
В первом примере если к 54А прибавить С0, то получится 664. Отбрасываем сотни получаем 64 (OK) Во втором примере к 59С прибавить С0, получим 65С. Отбрасываем сотни получаем 5С (ОК) Завтра еще проверю на других примерах. Но что такое С0? |
|
Действительный член Присоединился: 27 Июль 2006 Online Status: Offline Публикации: 304 |
|
Закономерность тут простая:
0x125 mod 0x100 = 0x25 - это четко из мануального примера, можно воспользоваться виндовым калькулятором :) C0 - это, очевидно, сумма кодов пробелов, которые в вышеприведенных вычислениях не учитывались. Там наверное было 6 пробелов? |
|
Теория - это когда все знаешь, но ничего не работает.
Практика - это когда все работает, но никто не знает как. |
|
Действительный член Присоединился: 27 Сентябрь 2006 Online Status: Offline Публикации: 125 |
|
Скорее всего, что 6 пробелов (код пробела, вроде, 32=20h). 32*6=192=C0h |
|
Действительный член Присоединился: 27 Июль 2006 Online Status: Offline Публикации: 304 |
|
Точнее,
число_пробелов = 6 + 8*i , где i=0,1,2... Этому соответствует сумма C0h + 100h*i |
|
Теория - это когда все знаешь, но ничего не работает.
Практика - это когда все работает, но никто не знает как. |
|
Новичок Присоединился: 18 Октябрь 2006 Категория: Russian Federation Online Status: Offline Публикации: 6 |
|
Итак, если отключить последний канал, то к контрольной сумме нужно прибавлять E0h (224), если два последних, то C0h и т.д.
все 100h (256) (все включены, можно ничего не прибавлять) без 1 E0h (224) без 2 С0h (192) без 3 A0h (160) без 4 80h (128) без 5 60h (96) без 6 40h (64) подозреваю, если каналов 8, то есть продолжение без 7 20h (32) А в мануале об этом ничего не сказано. |
|
Участник Присоединился: 27 Апрель 2005 Категория: Ukraine Online Status: Offline Публикации: 81 |
|
Работаю с I-7017 вот пример обмена: #01 вот п/п подсчитывающая КС static void CalcKC (char *buf,char *ks) { // подсчет ks, как в Adam for (i=0,j=strlen (buf); i<j; i++) Для данного примера в цикле получаем AE6, затем отбрасываем A и получаем E6
|
|
Ответить | Страница 12> |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |