flint2, синхронный режим хорош при уверенности в линии связи, чтобы пакеты не разрывались, здесь при 5-6 байтах в пакете можно и синхронный применить
Этот топик читают: Гость
Этот топик был перемещен из раздела "Помощь по среде"
Ответов: 8926
Рейтинг: 823
|
|||
карма: 19 |
|
Ответов: 91
Рейтинг: 6
|
|||
Огромное спасибо господа!!!
Я в растерянности.... Не думал что все так сложно.... Подвис маненько. Буду разбираться. Посылка В устройство выглядит так как я описывал - но символы я использую для визуального понятия куда и что шлем. На самом деле там используется их шестнадцатеричное значение. Символ "v" читается визуально легче чем 0х76; Хотя можно и десятичное использовать. Вот расшифровка посылки. v = выбор модуля устройства (блоков всего 5 и соответственно символов тоже) b = выбор функции модуля (функций до 6, символов тоже) 0-16300 = дата для записи в регистры модуля. Так что в десятичной форме это будет так: 118 + 98 + 16300 послали. Они так и должны прочитаться устройством. Это все беззнаковые. Принимаем данные в следующем виде - 1й байт + 2й байт + 3 байт + номер столбца + номер строки + контрольный бит Первые три байта 24 битная переменная разрезанная на 3 части и дальше идентификаторы столбца и строки для занесения в таблицу. Дальше переменную надо срастить и сделав вычисления занести в таблицу в зависимости от строк и столбцов. Кстати о скорости = скорость обмена неважна. Достаточно 1200. У меня получается посылка + считывание каждые 300 миллисекунд. Времени на прередачуприем вполне достаточно. Если удастся въехать в HiAsm - может быть и увеличится поток данных, но не думаю что сильно. Ещё раз огромное спасибо вам за помощь. Буду впитывать и думать.... Линия связи - 50см USB кабеля, потом USB>RS232 свисток, потом опторазвязка на РС817. |
|||
карма: 0 |
|
Ответов: 8926
Рейтинг: 823
|
|||
ibegen писал(а): + контрольный битВыходит устройство не самостоятельно шлёт данные, но только отвечает на запрос? Сколько макс/мин времени от посылки запроса до получения ответа? Таблица своя (текстовая) или БД, или Excel? |
|||
карма: 19 |
|
Ответов: 91
Рейтинг: 6
|
|||
Извините Леонид, конечно байт. ОписАлся....
Ну можно сказать что блок отвечает и самостоятельно. Сейчас полностью выглядит так: После того как девайс выходит на готовность (зеленый Led) - Устанавливаем значения нескольких переменных. После того как готовность есть - нажимаем старт - и начинается передача этих сформированных заранее нескольких пакетов, по протоколу который я описал. Устройство начинает работать и собирать данные - одна точка - каждые 300мс. Как только точка готова - отсылается в РС. При этом РС записывает значения точек по столбцам и строкам в таблицу. При этом РС смотрит контрольный байт. Если байт - равен 111 - то все ок и работаем дальше. Если код байта отличается от 111 то РС шлет комманду "СТОП". Точек данных - до 600 строк в 5 столбцах. В зависимости от уровня освоения программы, протокол может измениться. Вдруг случится чудо и я смогу что то простое изобразить.... Таблица - простой текстовый файл совместимый с EXCEL. Так как EXCEL немного знаю - таблицу буду строить в нём. Но предполагаю перейти в будущем на GNUPLOT. Уж очень она крута для таблиц.... |
|||
карма: 0 |
|
Ответов: 8926
Рейтинг: 823
|
|||
ibegen, для примера набросал пару программок: иммитатор ваших данных и чтение/запись вашего железа.
|
|||
карма: 19 |
| ||
файлы: 2 | imitator_com.rar [2.7KB] [264], readwrite_com.rar [3.4KB] [238] | ||
Голосовали: | ibegen |
Ответов: 91
Рейтинг: 6
|
|||
Леонид, нет слов. Я вас ОЧЕНЬ благодарю. Ваша помощь неоценима!!!!
Даже теряюсь что сказать.... Просто сказать спасибо - это не то что надо.... Все, ухожу в изучение темы!!!! ------------ Дoбавленo в 22.28: Начинаю разбирать по кирпичикам.... Первый вопрос связан с операциями с битами. Из вашего примера Леонид, я понял как 16 битную переменную резать на первый и второй байты. Но совершенно запутался как 24 битную поделить.... на три байта. Я понимаю что математику надо учить, а не проходить.... мимо... как я в свое время.
|
|||
карма: 0 |
|
Ответов: 8926
Рейтинг: 823
|
|||
ibegen, операции DIV (целочисленное деление -- отбрасывает дробную часть, оставляя целое число), MOD (оставляет остаток от деления).
code_35772.txt |
|||
карма: 19 |
| ||
файлы: 1 | code_35772.txt [2.5KB] [407] |
Ответов: 91
Рейтинг: 6
|
|||
Спасибо Леонид!!!
------------ Дoбавленo в 16.54: Леонид, в вашем примере, ComboBox сразу выдает номер доступного порта в виде цифры. Я так пробовал делать, но у меня почему то всегда выдает название Сом3 Сом5 и т.д. В настройках ComboBox или ListBox вроде бы установки такиеже как у вас...
|
|||
карма: 0 |
|
Ответов: 2059
Рейтинг: 132
|
|||
ibegen, у меня твоя схема правильно работает.
Выдаёт - Com1, может быть у тебя порт занят после всяких экспериментов? номер доступного порта в виде цифры. В настройках ComboBox или ListBox вроде бы установки такиеже как у вас... Смотри EnumCOM. |
|||
карма: 6 |
|
Ответов: 8926
Рейтинг: 823
|
|||
ibegen, перед началом работы с незнакомым компонентом полезно ознакомится с перечнем свойств и возможных не отражаемых по умолчанию точек, вдумчиво и внимательно читая примечания
Свойства_и_Точки.jpg |
|||
карма: 19 |
| ||
файлы: 1 | Свойства_и_Точки.jpg [17.2KB] [792] |
Ответов: 91
Рейтинг: 6
|
|||
Вот ведь еж иттить... Заработало!!!!
Спасибо Леонид, перед началом работы ... ознакомится с перечнем свойств ... вдумчиво и внимательно читая примечания Да, так и делаю... Но тут такой объем компонентов и точек и всяко разно..... Но до жути интересно!!!!! А ноги то бегут впереди головы, тем более на руках готовое железо. flint2, а у вас название выдает одной цифрой? Или полный вид - СОМ1? Теперь для тренировки хочу сообразить как из полного имени - сделать простой номер ну и уж потом то его и вносить в управление портом. |
|||
карма: 0 |
|
Ответов: 2059
Рейтинг: 132
|
|||
ibegen, как положено в твоей схеме, - СОМ1.
Я сначала подумал, что вопрос - почему СОМ3, а не СОМ1? А про настройки ComboBox или ListBox написал, что они вне подозрений и имеют полное алиби. |
|||
карма: 6 |
|
Ответов: 91
Рейтинг: 6
|
|||
Леонид, в вашем примере вы применяете для соединения 4 переменных компонент FormatStr.
Проверяя в железе, заметил такую странность - если число одного из байтов равно 0 или 1, то передается знак разделителя - % - (37 decimal) В остальных случаях все ок. Вот как передаются числа: 0 - 118 98 37 37 1 - 118 98 37 2 - 118 98 2 37 128 - 118 98 128 37 254 - 118 98 254 37 255 - 118 98 255 37 256 - 118 98 37 257 - 118 98 258 - 118 98 2 512 - 118 98 37 2 Я так понимаю это особенность этого компонента? Можно как то изменить это? Я поменял 1 компонент FormatStr на три штуки StrCat. Теперь числа передаются правильно. Насколько корректен такой вариант? code_35781.txt |
|||
карма: 0 |
| ||
файлы: 1 | code_35781.txt [3.1KB] [408] |
Ответов: 8926
Рейтинг: 823
|
|||
ibegen, code_35782.txt (автор IC -- Tad )
|
|||
карма: 19 |
| ||
файлы: 1 | code_35782.txt [1KB] [437] |
Ответов: 16884
Рейтинг: 1239
|
|||
карма: 25 |
| ||
файлы: 1 | code_35783.txt [3.4KB] [461] | ||
Голосовали: | ibegen |