|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
02.01.2018, 10:46 | #1 |
Проги на заказ
Пользователь
Регистрация: 22.05.2007
Сообщений: 41
|
Помощь в подсчете CRC (x^15 + 1)
Пишу программу для передачи данных на железку, нужно рассчитать контрольную сумму передаваемой команды.
Описание алгоритма: The two CRC bytes are calculated according to the formula x^15 + 1. In the calculation are included all data bytes plus the byte for block end. Every byte passes through the calculation register from teh MSB to LSB. Three working bytes are used - S1, S0 and TR S1 - Most significant byte from the CRC ( it is transmitted immediatelly after END) S0 - Least significant byte from the CRC ( It is transmitted after S1) TR - the current transmitted byte in the block. The CRC is calculated as follows: 1. S1 and S0 are zeroed 2. TR is loaded with the current transmitted byte. The byte is transmitted. 3. Points 3.1 and 3.2 are executed 8 times: 3.1. S1, S0 and TR are shifted one bit to the left. 3.2. If the carry bit from S1 is 1, the MSB of S1 and LSB of S0 are inverted. Points 2 and 3 are executed for all bytes, included in the calculation of the CRC - from the first byte after BEG up to and including byte END. 4. TR is loaded with 0 and point 3 is executed 5. TR is loaded with 0 and point 3 is executed 6. Byte S1 is transmitted 7. Byte S0 is transmitted Примеры команд и их контрольные суммы (2 байта) (в ASCII): Команда: R0;1;<CR> Сумма: Н. Команда: R0;2;<CR> Сумма: M- Команда: R0;4;<CR> Сумма: Н* Команда: R0;5;<CR> Сумма: 2Ф где <CR> = 1 байт = #13 Пытался сам написать программу для вычисления CRC, но суммы у меня выходят совершенно другие, прошу помощи экспертов в этом вопросе. Мой не правильно работающий код: Код:
Делфист - это звучит гордо!
|
02.01.2018, 11:47 | #2 |
Проги на заказ
Пользователь
Регистрация: 22.05.2007
Сообщений: 41
|
Нашел рабочий код на php, как бы перевести его на delphi
Код:
Делфист - это звучит гордо!
|
02.01.2018, 12:34 | #3 |
Проги на заказ
Пользователь
Регистрация: 22.05.2007
Сообщений: 41
|
Пришлось всё делать самому =)
Вот рабочий код Код:
Делфист - это звучит гордо!
|
02.01.2018, 12:43 | #4 |
Проги на заказ
Пользователь
Регистрация: 22.05.2007
Сообщений: 41
|
Допиленная версия, на входе строка с командой, на выходе строка с CRC
Код:
Делфист - это звучит гордо!
|
02.01.2018, 12:45 | #5 |
Проги на заказ
Пользователь
Регистрация: 22.05.2007
Сообщений: 41
|
Отличный форум, столько желающих помочь =)
Тему можно закрывать
Делфист - это звучит гордо!
|
02.01.2018, 12:54 | #6 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
Вот и славно, тогда я свой код убираю
Последний раз редактировалось Black Fregat; 02.01.2018 в 12:56. Причина: Зря возился только.. |
02.01.2018, 14:31 | #7 |
Старожил
Регистрация: 04.02.2011
Сообщений: 4,620
|
Иногда "помощь клуба" заключается в том, что формулируя вопрос, начинаешь "глубже думать" - и додумываешься , у самого так бывало. А мне в прошлом тысячелетии пришлось считать CRC16, применил табличный метод - там даже думать не надо: берешь из таблицы констант очередное значение и ... Если в дальнейшей жизни понадобится - могу кинуть ссылку.
А в Новый год - так в основном не помогать, а пьянствовать водку Последний раз редактировалось digitalis; 02.01.2018 в 14:37. |
09.01.2018, 14:43 | #8 |
Форумчанин
Регистрация: 17.03.2009
Сообщений: 977
|
любое описание протокола RTU приборов содержит процедуру расчёта crc16. в как минимум 3 х языках программирования. думать не надо тупо копировать. плюс полином ещё разный можно ставить и начальное значение.
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ошибка при подсчете количества | Pushkin1983 | Microsoft Office Access | 3 | 07.06.2014 08:15 |
Баг в отрисовке и подсчете на Канве | Silwerwing | Помощь студентам | 1 | 23.04.2013 19:04 |
Баг в отрисовке и подсчете на Канве | Silwerwing | Общие вопросы Delphi | 0 | 14.04.2013 12:08 |
Не выводит результат о подсчете строк. | Predator199 | PHP | 2 | 06.08.2012 16:52 |
Ошибка в подсчете | Rik_Igle | Помощь студентам | 4 | 03.12.2011 21:58 |