Контрольная сумма.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Контрольная сумма.

Сообщение TiG » 14.08.2006 (Пн) 12:36

У меня есть документ, по которому мне надо запрограммировать передачу по ком порту. С контрольной мне непонятно. Если кто-то знает как это по проще объяснить, то напишите здесь пожалуйста.


"""Скорость передачи данных 19200 бод
8 бит данных, 2 стоп бита, без контроля четности
Контрольная сумма вычисляется по формуле X^16 + X^15 + X^2 + 1
Время между сообщениями ( типовое ) 50мс ( может сдвигаться как в большую, так и в меньшую сторону )"""


Полный текст в прикрепленном файле.
Вложения
Протокол ОСА верхний уровень.xls
(22 Кб) Скачиваний: 36
Все мои игрушки мама разметало ураганом...

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Сообщение TiG » 14.08.2006 (Пн) 12:55

и вопросик в догонку) есть ли свойство у контрола mscomm передавать бинарно? т.е. я отправляю строку 001, а он сам преобразует это из стринг в бинар... чтобы не писать каждый раз chr, mscomm1.output = Chr(Text1(0).Text) + Chr(Text1(1).Text)
Все мои игрушки мама разметало ураганом...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 14.08.2006 (Пн) 13:21

TiG писал(а):чтобы не писать каждый раз chr, mscomm1.output = Chr(Text1(0).Text) + Chr(Text1(1).Text)

Кто тебе сказал, что это бинарный дамп?
Тебя обманули.
Lasciate ogni speranza, voi ch'entrate.

Efiop
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 69
Зарегистрирован: 06.06.2006 (Вт) 12:14
Откуда: РК

Сообщение Efiop » 14.08.2006 (Пн) 13:54

TiG, я так понимаю тебе будет прилетать пакет длиной 16.
А там ты его уже будешь обрабатывать, своим обработчиком.
Скорей всего все это дело будет тебе лететь в ASCII.
Типа: A00FBBCDFFEED.
Не думаю, что тебе надо будет все это дело побитово отправлять.
Ты формируешь пакет и вперед.
А с контр. суммой, какие проблемы, формируй пакет и по нему уже сумму.

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Сообщение TiG » 14.08.2006 (Пн) 15:16

2 Efiop
Мне нужно только отправлять, получать не нужно.
Отправлять нужно побитно 127 бит.
Алгоритм контрольной суммы я не понял как выглядит. Они же разные? этот как называется?

ту олл 2: контрол компорт имеет свойства отпрафки побитно?
Все мои игрушки мама разметало ураганом...

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Сообщение TiG » 14.08.2006 (Пн) 15:57

нолики и единички у меня в этих 127 битиках:
вот например: 00001111000000000000000000000110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Все мои игрушки мама разметало ураганом...

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Сообщение TiG » 14.08.2006 (Пн) 16:09

2 alibek
Cbyte(text1.text) точней, где text1.text = 0 или 1
Все мои игрушки мама разметало ураганом...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 14.08.2006 (Пн) 17:59

TiG, объясни, какого чёрта ты хранишь двоичные данные в виде строки из нулей и единиц.
Изображение

Денис Победря
Мегобойанист
Мегобойанист
 
Сообщения: 1037
Зарегистрирован: 03.01.2005 (Пн) 21:29
Откуда: Из Москвы

Сообщение Денис Победря » 14.08.2006 (Пн) 19:25

Неважно какие данные двоичные, восмиричные, десятичные, всё равно ЧИСЛО.

Оффтоп:
a=a+b
a=a+b 'контрольный
[Место cдаётся]

Efiop
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 69
Зарегистрирован: 06.06.2006 (Вт) 12:14
Откуда: РК

Сообщение Efiop » 14.08.2006 (Пн) 21:25

TiG, с чего ты взял, что их нужно передовать побитно, где это написано?
У тя есть полное описание протокола с примерами передоваемых и принимаемых запросов (пакетов)?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 15.08.2006 (Вт) 7:36

TiG писал(а):Cbyte(text1.text) точней, где text1.text = 0 или 1

Ты понимаешь, что делает функция CByte()?
Она делает совершенно не то, что ты хочешь.
Lasciate ogni speranza, voi ch'entrate.

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Сообщение TiG » 15.08.2006 (Вт) 8:41

Короче мне надо с эмулировать железо, для того чтоб другой чел мог отладить свою прогу не имея железа.
2 alibek:
mscomm1.output = cbyte(text1(0).text) & cbyte(text1(1).text) _
& cbyte(text1(2).text) & cbyte(text1(3).text) & cbyte(text1(4).text) _
& cbyte(text1(5).text) & cbyte(text1(6).text) & cbyte(text1(7).text),
где текстбоксы имеют значение соответственно 01011001.
Как это я отправляю побитно побайтно через бобруйск или как?

Насчет контрольной суммы так толком никто не сказал ничего, какоф алгоритм то операясь на сие X^16 + X^15 + X^2 + 1, что иксом является? Это каждый бит?
Последний раз редактировалось TiG 15.08.2006 (Вт) 8:44, всего редактировалось 1 раз.
Все мои игрушки мама разметало ураганом...

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Сообщение TiG » 15.08.2006 (Вт) 8:43

2 Efiop, все что есть этот тот файлик который я прикрепил.
Все мои игрушки мама разметало ураганом...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 15.08.2006 (Вт) 9:44

To TiG, повторный намек, функция CByte делает совсем не то, чего тебе хочется.
Весь мир матрица, а мы в нем потоки байтов!

Efiop
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 69
Зарегистрирован: 06.06.2006 (Вт) 12:14
Откуда: РК

Сообщение Efiop » 15.08.2006 (Вт) 9:51

TiG
Для начала, если у тебя есть устройство, с которого нужно читать данные, попробуй с него почитать что-нить.
Посмотри в каком формате все это дело будет.
Используй какой-нибудь "Port Monitor".

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Сообщение TiG » 15.08.2006 (Вт) 10:16

ну устройства нет конечно, иначе не пришлось бы долбиться.
намек хреновый, просто написали бы что надо сложить 8 бит в байт и выплюнуть в порт как десятичное число воще. Про битовую передачу можно больше не подсказывать, про контрольную сумму лучше расскажите.
Все мои игрушки мама разметало ураганом...

Efiop
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 69
Зарегистрирован: 06.06.2006 (Вт) 12:14
Откуда: РК

Сообщение Efiop » 15.08.2006 (Вт) 20:22

TiG
Про битовую передачу можно больше не подсказывать, про контрольную сумму лучше расскажите.

Контрольная сумма вычисляется по формуле X^16 + X^15 + X^2 + 1
Здесь я так понимаю показана операция с битами, т.е. складываюся указанные биты, каждой пары байт. В 2-х байтах 16 бит - "слово", так вот те нужно эту операцию проделать над всеми словами, у тебя их будет 7 слов, 14 байт. Так что последними двумя байтами будет контрольная сумма.
А вот насчет знака степени у мня сомнения, скерой всего это просто указывается номер бита, какой смысл единицу или ноль возводить в степень, хотя черт его знает.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.08.2006 (Вт) 20:24

Это не возведение в степень, это ксор.
Изображение

Efiop
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 69
Зарегистрирован: 06.06.2006 (Вт) 12:14
Откуда: РК

Сообщение Efiop » 16.08.2006 (Ср) 6:12

Это не возведение в степень, это ксор.

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

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 16.08.2006 (Ср) 9:58

Что за чушь? Где ты там увидел "ксор только по указанным битам"?
Изображение

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 16.08.2006 (Ср) 10:38

эта тема - полный бред, имхо 8)

а вообще , mscomm работает обычно с портом , как обычный модем. т.е. может юзать хэндшейкинг: xon/xof или RTS, и режим работы может быть InputMode : comInputModeBinary или comInputModeText

вот с этим и играйся :lol:

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 16.08.2006 (Ср) 10:44

для общего понимания, как надо и что делать :wink:
Вложения
Serial Com Port Utility.rar
(22.81 Кб) Скачиваний: 34

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Сообщение TiG » 16.08.2006 (Ср) 12:16

2 Konst_One
Знач поставил я comInputModeBinary, и ComXonXoff. В приеме поймал 16 символов как положено, т.е. 16 байт. Текст бокс отобразил это как 16 "?", обычно это изображается как 16"|" если не текстом пулять, а chr(0) & chr(6)... Что бы это могло быть?

Насчет вычисления контрольной суммы помогите воплотить идею описанную выше.
Итак имеем 2 байта данных: 00010001 00101010
________________________^______________^
_______________________15 бит___________0 бит
_______________________16 символ
16 - символ по счету с права на лево
X^16 + X^15 + X^2 + 1

получиться: 0 xor 0 xor 1 + 1 = 2 так)?

второе слово допустим тоже равно 2, 2+2 = 4 итого для 2 слов?)
Последний раз редактировалось TiG 16.08.2006 (Ср) 12:20, всего редактировалось 1 раз.
Все мои игрушки мама разметало ураганом...

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 16.08.2006 (Ср) 12:19

так а что ты хотел в текстбоксе увидеть?
пиши в бинарном виде в файл на диск

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Сообщение TiG » 16.08.2006 (Ср) 12:21

Konst_One
Я в том плане, что подозрительно, что не черточки, а вопросики приходят.
Все мои игрушки мама разметало ураганом...

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Сообщение TiG » 16.08.2006 (Ср) 12:24

Efiop
кстати немного непонятно зачем нужен вообще 1 байт в слове, если из него информация не береться для вычисления контрольной суммы, что-то тут не то.
Все мои игрушки мама разметало ураганом...

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 16.08.2006 (Ср) 12:25

вот старый пример из VS6.0,
и более новый, см. там как файлики посылаются/принимаются
Вложения
Mscomm.rar
(12.54 Кб) Скачиваний: 43
Terminal.rar
(15.89 Кб) Скачиваний: 41

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 16.08.2006 (Ср) 12:37

TiG писал(а):2 Konst_One
Знач поставил я comInputModeBinary, и ComXonXoff. В приеме поймал 16 символов как положено, т.е. 16 байт. Текст бокс отобразил это как 16 "?", обычно это изображается как 16"|" если не текстом пулять, а chr(0) & chr(6)... Что бы это могло быть?

Насчет вычисления контрольной суммы помогите воплотить идею описанную выше.
Итак имеем 2 байта данных: 00010001 00101010
________________________^______________^
_______________________15 бит___________0 бит
_______________________16 символ
16 - символ по счету с права на лево
X^16 + X^15 + X^2 + 1

получиться: 0 xor 0 xor 1 + 1 = 2 так)?

второе слово допустим тоже равно 2, 2+2 = 4 итого для 2 слов?)

Ещё раз, для тех кто на бронепоезде.
^ -- это xor
+ -- это сложение

"Выделение битов" высосано из пальца Efiop-а.
Изображение

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Сообщение TiG » 16.08.2006 (Ср) 12:41

tyomitch
0+0+1+1=2 сложение и выполнил
Все мои игрушки мама разметало ураганом...

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Сообщение TiG » 16.08.2006 (Ср) 12:42

tyomitch
какие другие идеи насчет вычисления X^16 + X^15 + X^2 + 1?
Все мои игрушки мама разметало ураганом...

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 79

    TopList