Вверх ↑
Этот топик читают: Гость
Этот топик был перемещен из раздела "Помощь по среде"
Ответов: 8926
Рейтинг: 823
#46: 2015-05-31 21:11:58 ЛС | профиль | цитата
ibegen писал(а):
если число одного из байтов равно 0 или 1, то передается знак разделителя - % -
Да, именно так, символы #0 и #1 используются в коде компонента для замены служебных символов #37, упустил StrCat верное решение!
карма: 19

1
Голосовали:ibegen
Ответов: 91
Рейтинг: 6
#47: 2015-05-31 21:21:20 ЛС | профиль | цитата
Тad, Леонид, Спасибо вам за шикарные подсказки!!!
Хотя это уже готовые решения. По поводу скрипта - мне до такого чувствуется очень далеко....

А вообще, у меня кнопка + на форуме сломалась. Не дает более двух плюсов сделать...
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#48: 2015-05-31 21:27:46 ЛС | профиль | цитата
ibegen писал(а):
А вообще, у меня кнопка + на форуме сломалась
Не переживай. Она лимитирована. Завтра будет работать.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 91
Рейтинг: 6
#49: 2015-06-08 19:08:41 ЛС | профиль | цитата
Народ, первая часть - "посылка данных в дивайс" - получилась. Благодарю за помощь!
Немного переделал протокол передачи, так как была возможность упростить.

Теперь приступаю к изучению приема. В железе ещё не пробовал - но вот гложет вопрос: КАК СЧИТЫВАТЬ ПРИНЯТЫЕ ДАННЫЕ в переменную?
Поясню - мне непонятен момент - КОГДА компонент СОМ порт начинает считывание? В какой момент?
Я привык когда в микроконтроллере начало приема висит на прерывании. Произошел перепад уровней и погнали в буфер принимать.
Потом просто читаем буфер и все.
А тут как?
Я смотрю на пример Леонида, и не понимаю... там на точку doRead через таймер 100мс подается событие и число 256.
Правильно ли я догадываюсь что каждые 100 мс здесь идет принудительный опрос буфера размером 1 байт?
Что то я совсем запутался.
Есть тут привязка к событию?
А что если посылка каждые 101мс будет?

code_35811.txt

карма: 0

0
файлы: 1code_35811.txt [7.7KB] [437]
Ответов: 8926
Рейтинг: 823
#50: 2015-06-08 23:37:12 ЛС | профиль | цитата
ibegen, СОМ порт принимает данные независимо ни от чего и пишет их в свой буфер (положим ёмкость буфера 512 байт чтобы не пропустить ) По пользовательскому запросу из буфера считывается запрошенное количество байт от 1 до всего буфера, в данном случае 256 (считанные байты из буфера удаляются). Если данных в буфере меньше запрошенного количества, то они все и выдаются и ничего более. Интервал запроса особой роли не играет, главное, чтобы количество запрашиваемых байт в секунду превышало ожидаемую скорость поступления данных в порт, иначе при переполнении буфера ранее поступившие данные пропадут. Если обращаться часто (например через миллисекунду и считывать по 1 байту) то нагрузка на порт и компютер возрастает вплоть до зависания программы.
карма: 19

0
Ответов: 91
Рейтинг: 6
#51: 2015-06-08 23:57:49 ЛС | профиль | цитата
Спасибо Леонид.
А что будет если цикл приема данных в буфер и считывание данных из буфера совпадут?
Не получатся резанные байты?
карма: 0

0
Ответов: 8926
Рейтинг: 823
#52: 2015-06-09 10:07:32 ЛС | профиль | цитата
ibegen, байты не разрежешь Данные могут одного блока приёма могут вполне себе оказаться в разных порциях чтения, поэтому-то и надо "склеивать" получаемые от порта строки и парсить по известным ключам начало и окончание.
карма: 19

0
52
Сообщение
...
Прикрепленные файлы
(файлы не залиты)