Вверх ↑
Этот топик читают: Гость
Ответов: 8926
Рейтинг: 823
#181: 2011-12-11 22:57:37 ЛС | профиль | цитата
nesco писал(а):
я сам выложу проверочноую схему с побайтовым чтением бинарного потока
Ой, как хочется посмотреть!
карма: 19

0
Разработчик
Ответов: 26155
Рейтинг: 2127
#182: 2011-12-12 02:44:36 ЛС | профиль | цитата
Выкладываю пример передачи байтового потока длиной 22 символа через COM порт, содержащего внутри символы #00 и #13 с побайтовым приемом. Пример приследует цель показать возможность передачи через порт не служебных символов, и в нем не реализовано командное управление.

code_26131.txt
карма: 22

1
файлы: 1code_26131.txt [7.4KB] [228]
Голосовали:ser_davkin
Ответов: 24
Рейтинг: 0
#183: 2012-06-25 16:41:24 ЛС | профиль | цитата
Я возможно сейчас задам вопрос где всё всем понятно,но...вот не разобрался.Сом - порт.Уже получается и приём и передача(форумы почитал) но так и не понял что делает параметр TimeOut.На что и как он влияет.

С уважением...
карма: 1

0
Ответов: 3889
Рейтинг: 362
#184: 2012-06-25 17:54:44 ЛС | профиль | цитата
andr_larr писал(а):
что делает параметр TimeOut

Чего он только не делает. Все возможные задержки и замеры времени при работе с портом инициализируются этим значением, так что, в некоторых случаях, лишний раз трогать его чревато. Измеряется он в миллисекундах и влияет как на скорость работы, так и на правильность определения окончания передачи пакетов. Например, если вы в реальном времени принимаете пакетные данные от медленного устройства и выставите небольшой TimeOut, то при doRead компонент рискует не дождаться очередного байта и завершить операцию чтения. На практике, с учётом буферизации и асинхронности современных ОС и устройств, таймауты можно не трогать. Железо может сильно отличаться и, скажем, на аппаратном порту с отключенными буферами таймаут даст совершенно другой результат по сравнению с виртуальным портом на USB или BlueTooth.
карма: 1

0
Ответов: 24
Рейтинг: 0
#185: 2012-06-26 10:50:34 ЛС | профиль | цитата
Понял,спасибо.В общем "вещь в себе" которую лучше не трогать....Будем практиковаться...Как в поговорке
"Практика без теории ценнее, чем теория без практики."
Квинтилиан


С уважением...

карма: 1

0
Разработчик
Ответов: 26155
Рейтинг: 2127
#186: 2012-06-26 11:00:18 ЛС | профиль | цитата
Тут надо еще учесть одну особенность -- при запросе N-го количества байт (до 255), минимальное время окончания чтения буфера будет определяться произведением запрошенных байт на время таймаута, даже, если в буфере будет всего один байт. Короче, чем больше будет запрошено байт на чтение, тем дольше будет время чтения пакета, вне зависимости от состояния буфера.
карма: 22

0
Ответов: 24
Рейтинг: 0
#187: 2012-06-27 15:36:36 ЛС | профиль | цитата
Я так понял что за время одной выборки по тайм-ауту считывается один байт,при следующей ещё один и так до окончания блока байт в буфере ?
Ещё один вопрос.А записывается байт в буфер приходу его на вход буфера или тоже по таймингу ? Хотя...Второй вариант без потери байтов как-то и представить не могу...

С уважением...
карма: 1

0
Разработчик
Ответов: 26155
Рейтинг: 2127
#188: 2012-06-27 16:17:07 ЛС | профиль | цитата
andr_larr писал(а):
Я так понял что за время одной выборки по тайм-ауту считывается один байт,при следующей ещё один и так до окончания блока байт в буфере ?


Нет, запрашивается сразу N-е количество, и функция ждет определенное время (я описал в предыдущем посте минимум сколько будет ждать, к этому времени еще можно прибавить таймаут ожидания следующего пакета), после чего отдает запрошенное число байт, если их меньше, то отдает все, что есть. После считывания, считанные байты из буфера удаляются. Если буфер пуст, то на выход будет попадать пустая строка, ее можно использовать для синхронизации данных приема.

andr_larr писал(а):
А записывается байт в буфер приходу его на вход буфера или тоже по таймингу ?

Не понял вопроса, совершенно
------------ Дoбавленo в 16.17:
Вот один из вариантов синхронизации чтения по пустой строке



Add(CharArray,16152177,308,168)
{
link(onGetStr,453684:doCase,[])
}
Add(ArrayRW,11247255,308,231)
{
link(Array,16152177:Array,[])
}
Add(Case,9660739,175,245)
{
Value=String()
link(onNextCase,11247255:doAdd,[])
link(onTrue,9251516:doEvent1,[])
}
Add(Hub,9251516,224,252)
{
OutCount=3
link(onEvent1,16152177:doGetStr,[(259,258)(259,181)])
link(onEvent2,16152177:doClear,[(273,265)(273,188)])
link(onEvent3,5708023:doEnum,[])
}
Add(StrList,1247807,427,154)
{
}
Add(Check,8075546,504,266)
{
Caption="На обработку"
}
Add(ArrayEnum,5708023,441,266)
{
link(onItem,8075546:doWork,[])
link(Array,1247807:Array,[])
}
Add(COM,1518075,119,238)
{
link(onRead,9660739:doCase,[])
}
Add(Case,453684,364,175)
{
Value=String()
link(onNextCase,1247807:doText,[])
}

карма: 22

0
Ответов: 24
Рейтинг: 0
#189: 2012-06-27 17:47:11 ЛС | профиль | цитата
Спасибо.Буду разбираться...Второй вопрос действительно не совсем корректен...

С уважением...
карма: 1

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