ibegen писал(а):
если число одного из байтов равно 0 или 1, то передается знак разделителя - % -Этот топик читают: Гость
Этот топик был перемещен из раздела "Помощь по среде"
Ответов: 8926
Рейтинг: 823
|
|||
Да, именно так, символы #0 и #1 используются в коде компонента для замены служебных символов #37, упустил StrCat верное решение! |
|||
карма: 19 |
| ||
Голосовали: | ibegen |
Ответов: 91
Рейтинг: 6
|
|||
Тad, Леонид, Спасибо вам за шикарные подсказки!!!
Хотя это уже готовые решения. По поводу скрипта - мне до такого чувствуется очень далеко.... А вообще, у меня кнопка + на форуме сломалась. Не дает более двух плюсов сделать... |
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
ibegen писал(а): А вообще, у меня кнопка + на форуме сломалась |
|||
карма: 25 |
|
Ответов: 91
Рейтинг: 6
|
|||
Народ, первая часть - "посылка данных в дивайс" - получилась. Благодарю за помощь!
Немного переделал протокол передачи, так как была возможность упростить. Теперь приступаю к изучению приема. В железе ещё не пробовал - но вот гложет вопрос: КАК СЧИТЫВАТЬ ПРИНЯТЫЕ ДАННЫЕ в переменную? Поясню - мне непонятен момент - КОГДА компонент СОМ порт начинает считывание? В какой момент? Я привык когда в микроконтроллере начало приема висит на прерывании. Произошел перепад уровней и погнали в буфер принимать. Потом просто читаем буфер и все. А тут как? Я смотрю на пример Леонида, и не понимаю... там на точку doRead через таймер 100мс подается событие и число 256. Правильно ли я догадываюсь что каждые 100 мс здесь идет принудительный опрос буфера размером 1 байт? Что то я совсем запутался. Есть тут привязка к событию? А что если посылка каждые 101мс будет? code_35811.txt |
|||
карма: 0 |
| ||
файлы: 1 | code_35811.txt [7.7KB] [437] |
Ответов: 8926
Рейтинг: 823
|
|||
ibegen, СОМ порт принимает данные независимо ни от чего и пишет их в свой буфер (положим ёмкость буфера 512 байт чтобы не пропустить ) По пользовательскому запросу из буфера считывается запрошенное количество байт от 1 до всего буфера, в данном случае 256 (считанные байты из буфера удаляются). Если данных в буфере меньше запрошенного количества, то они все и выдаются и ничего более. Интервал запроса особой роли не играет, главное, чтобы количество запрашиваемых байт в секунду превышало ожидаемую скорость поступления данных в порт, иначе при переполнении буфера ранее поступившие данные пропадут. Если обращаться часто (например через миллисекунду и считывать по 1 байту) то нагрузка на порт и компютер возрастает вплоть до зависания программы.
|
|||
карма: 19 |
|
Ответов: 91
Рейтинг: 6
|
|||
Спасибо Леонид.
А что будет если цикл приема данных в буфер и считывание данных из буфера совпадут? Не получатся резанные байты? |
|||
карма: 0 |
|
Ответов: 8926
Рейтинг: 823
|
|||
ibegen, байты не разрежешь Данные могут одного блока приёма могут вполне себе оказаться в разных порциях чтения, поэтому-то и надо "склеивать" получаемые от порта строки и парсить по известным ключам начало и окончание.
|
|||
карма: 19 |
|
52