102 / 102 / 13
Регистрация: 22.10.2011
Сообщений: 328
|
|
1 | |
Расчет контрольной суммы для bluetooth ККМ CMP-1022.10.2011, 08:41. Показов 3679. Ответов 24
Метки нет Все метки)
(
Коллеги,
помогите пожалуйста с расчетом контрольной суммы ККМ CMP-10 Дословно: Есть также вопросы по поводу "суммирования подлежит части сообщения" - это как? Перевести все байты в INT а потом + + + + ..., так что ли?...
0
|
|
22.10.2011, 08:41 | |
Ответы с готовыми решениями:
24
Расчет контрольной суммы Код по алгоритму. Расчет контрольной суммы Структура пакета и расчет контрольной суммы для RS485 |
![]() 16739 / 12492 / 3283
Регистрация: 17.09.2011
Сообщений: 20,719
|
|
22.10.2011, 11:18 | 2 |
0
|
102 / 102 / 13
Регистрация: 22.10.2011
Сообщений: 328
|
|
22.10.2011, 11:52 [ТС] | 3 |
Ответ найден. Подсмотрел у производителя
![]()
0
|
![]() 16739 / 12492 / 3283
Регистрация: 17.09.2011
Сообщений: 20,719
|
|
22.10.2011, 11:58 | 4 |
Было бы интересно глянуть реализацию
0
|
102 / 102 / 13
Регистрация: 22.10.2011
Сообщений: 328
|
||||||
22.10.2011, 13:00 [ТС] | 5 | |||||
Не полный класс, но самая важная функция - формирования пакета сделана и оттестирована
1
|
![]() 16739 / 12492 / 3283
Регистрация: 17.09.2011
Сообщений: 20,719
|
||||||
22.10.2011, 13:09 | 6 | |||||
Интересно, спасибо.
А есть где-нибудь полная спецификация протокола? Имеется одно серьезное замечание:
Исключения существуют для того, чтоб их бросали и ловили, а не возвращали и проверяли. В вашем случае теряется самая важная часть исключения - Stack Trace.
0
|
102 / 102 / 13
Регистрация: 22.10.2011
Сообщений: 328
|
|
22.10.2011, 13:15 [ТС] | 7 |
Добавлено через 1 минуту
документация Согласен, но не в ActiveX ибо многие системы работаюшие с ActiveX просто не смогут принять Exception. Их система может вылететь еще задолго до их Handler-a Есть вариант разбить данные методы еще раз, Safe и NonSafe
1
|
![]() 16739 / 12492 / 3283
Регистрация: 17.09.2011
Сообщений: 20,719
|
|
22.10.2011, 13:18 | 8 |
А, у вас ActiveX. Не глянул на название пространства.
С активэксом не работал, потому не знаю что там как. А что за протокол реализуете? Где почитать можно? Серийные протоколы - мой маленький фетиш ![]()
0
|
102 / 102 / 13
Регистрация: 22.10.2011
Сообщений: 328
|
|
22.10.2011, 13:23 [ТС] | 9 |
Все когда-то бывает в первый раз
см. мой предыдущий пост, там есть ссылка на доку и прочую инфу.
0
|
![]() 16739 / 12492 / 3283
Регистрация: 17.09.2011
Сообщений: 20,719
|
|
22.10.2011, 13:35 | 10 |
0
|
102 / 102 / 13
Регистрация: 22.10.2011
Сообщений: 328
|
|||||||||||
23.10.2011, 21:15 [ТС] | 11 | ||||||||||
Что-то не могу сообразить, как написать обратную формулу расчета SEQ, если "прямая" выглядит следующим образом
0
|
![]() 16739 / 12492 / 3283
Регистрация: 17.09.2011
Сообщений: 20,719
|
|
23.10.2011, 22:35 | 12 |
SNOOPYKZ, да все правильно, в общем-то.
По протоколу значение SEQ болтается в промежутке от 32 до 127, однако в своем приложении наверняка будет проще просто увеличивать значение на единицу, особенно если вы пишете лог всех сообщений. Та функция именно это и делает - "ужимает" любое целое число в промежуток, разрешенный протоколом. То есть 1 становится 33, а 1285 становится 69. При получении ответной команды с кодом 69 невозможно будет узнать какое число было изначально туда "ужато" - 1285 или 1381, например. Так что ваш вариант правильный.
1
|
102 / 102 / 13
Регистрация: 22.10.2011
Сообщений: 328
|
|
23.10.2011, 22:56 [ТС] | 13 |
Получается, если "сжатие" идет только "в одну сторону", то хранить в логах лучше байты, чем "нормальную" цифру, ибо она будет получатся "не уникальной"
0
|
![]() 16739 / 12492 / 3283
Регистрация: 17.09.2011
Сообщений: 20,719
|
|
23.10.2011, 23:04 | 14 |
Тут все зависит от ваших нужд, предложенный в коде метод просто учитывает возможность того, что на своей стороне вы будете держать уникальный номер для каждого сообщения.
Лично я бы делал именно так: постоянно увеличивал счетчик команд, особенно если нужно их писать в лог. В этом случае по-настоящему уникальна каждая команда, а не каждая 128-я. А хранить в логал лучше всего и то и другое, например в таком формате: Код
2011-10-23 19:32:23.5323 >> 1285: 01 37 38 20 30 30 30 30 30 30 3B 32 38 30 34 30 37 3B 31 31 34 31 3B 05 30 34 36 31 03
1
|
102 / 102 / 13
Регистрация: 22.10.2011
Сообщений: 328
|
||||||
23.10.2011, 23:25 [ТС] | 15 | |||||
BitArray - возвращает массив бит, если ему дать на вход один байт, нумерация битов будет слева на право или на оборот?
А то в доке к ККМ есть табличка расшифровки битов ошибок и она у них идет от 7-0, а не 0-7..., вот я и задумался...
В тоже время, в доке сказано такое, расшифровка первого байта 7 Всегда равен 1 6 Если установлен – Прочие ошибки оборудования 5 Если установлен - для вступления в силу изменений настроек необходимо перегрузить ЭККР 4 Если установлен – механизм печатающего устройства не готов к печати (детали Байт S1) 3 Если установлен – дисплей не подключен 2 Если установлен – Аппарат в аварийном режиме 1 Если установлен – буфер документа близок к концу (осталось места на 100 чеков*) 0 Если установлен – регистратор находится в сервисном режиме Правильно ли я понимаю, что arr[0] - это ВОСЬМОЙ бит, а не первый?
0
|
![]() 16739 / 12492 / 3283
Регистрация: 17.09.2011
Сообщений: 20,719
|
|
23.10.2011, 23:33 | 16 |
arr[0] - это будет первый (младший) бит.
arr[7], соответственно, - восьмой, старший. Но я предпочитаю пользоваться обычными битовыми операторами - быстрее, чем создавать класс каждый раз. Особенно если в протоколе ограничение по времени на задержку между сообщениями.
0
|
102 / 102 / 13
Регистрация: 22.10.2011
Сообщений: 328
|
|
23.10.2011, 23:41 [ТС] | 17 |
0
|
![]() 16739 / 12492 / 3283
Регистрация: 17.09.2011
Сообщений: 20,719
|
|||||||||||||||||||||
24.10.2011, 00:10 | 18 | ||||||||||||||||||||
Например, из вашего:
По-моему, последний вариант будет читаться лучше, чем
![]() Добавлено через 4 минуты Кстати, еще один огромный плюс делать через enum - составление команды:
1
|
102 / 102 / 13
Регистрация: 22.10.2011
Сообщений: 328
|
|
24.10.2011, 00:11 [ТС] | 19 |
Давай зачетку, 5+ поставлю
![]()
0
|
![]() 16739 / 12492 / 3283
Регистрация: 17.09.2011
Сообщений: 20,719
|
|
24.10.2011, 00:13 | 20 |
0
|
24.10.2011, 00:13 | |
Помогаю со студенческими работами здесь
20
Расчет контрольной суммы файла Расчет контрольной суммы ip заголовка Расчет контрольной суммы UDP Расчет Контрольной суммы CRC части файла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |