Вверх ↑
Этот топик читают: Гость
Ответов: 28
Рейтинг: 0
#1: 2009-04-09 00:13:30 ЛС | профиль | цитата
Ребята. Такой вопрос. Принимаю байты через com-порт от микроконтроллера. Каждую строку в программе микроконтроллера завершаю
. В приложении использовал два вида редакторов текста: обычный и расширенный (сделал это для примера, чтобы оба их сравнить в действии). У меня три вопроса:
1. Почему в разных редакторах текста строка принимается по разному (в верхнем - расширенном: правильно, в нижнем: строка делится на две части (на числе 104)). Признак завершения строки в программе после числа 106.
2. Во время прокручивания ползунков текст в редакторе все время смещается в одном из редакторов вверх в другом - вниз. Наверное на это влияет таймер, который постоянно долбит com-порт.
3. Возможно ли реализовать прием байтов без применения таймера. По-моему, мягко говоря, это немного не корректное решение. Но, к сожалению, другого не придумал. Помогите, пожалуйста, по возможности.

P.S. Постоянно с интервалом 1 секунду принимаю данные от контроллера
P.P.S. Файлы в файлообменнике: ha_1.png и OW_Temperature_1.rar
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#2: 2009-04-09 01:05:01 ЛС | профиль | цитата
пример работы редакторов текста
code_12656.txt

------------ Дoбавленo в 01.05:
hubble писал(а):
Возможно ли реализовать прием байтов без применения таймера.

при вызове doRead компонент должен останавливать выполнение программы до того момента, пока данные не поступят в порт. Если они туда поступают все время, то иначе заставить работать программу не возможно. Для более менее корректного чтения я бы использовал такое включение

Add(MainForm,2953706,175,182)
{
Width=323
Height=256
link(onCreate,10050932:doStart,[])
}
Add(COM,2556689,287,168)
{
link(onRead,7135829:doValue,[])
}
Add(Thread,10050932,231,196)
{
Delay=0
FastStop=0
link(onExec,2556689:doRead,[])
link(onSyncExec,10686334:doAdd,[(278,209)(278,258)])
}
Add(Memory,7135829,343,175)
{
}
Add(Memo,10686334,343,252)
{
Left=175
Top=55
link(Str,7135829:Value,[])
}

во всяком случае именна такая логика работы встроена в элементы вкладки KernelChip, читающие из COM порта команды от соответствующих контроллеров.
карма: 27
1
файлы: 1code_12656.txt [471B] [229]
Голосовали:Konst
Ответов: 28
Рейтинг: 0
#3: 2009-04-09 02:34:50 ЛС | профиль | цитата
Большое спасибо. Это действительно помогло. Я, правда, немного подкорректировал код. Так, вроде, правильнее.
code_12658.txt
Но я заметил, что результат выполнения этого кода и того, который был у меня (но только с таймером, установленным на 1 мсек) очень похож. Я так понимаю, что код, предложенный Вами представляет все-таки БОЛЕЕ КОРРЕКТНОЕ решение?


Вопрос по KernelChip. С помощью этого элемента можно работать только с USB-портом?
карма: 1

0
файлы: 1code_12658.txt [690B] [157]
Администрация
Ответов: 15295
Рейтинг: 1519
#4: 2009-04-09 11:57:25 ЛС | профиль | цитата
hubble писал(а):
предложенный Вами представляет все-таки БОЛЕЕ КОРРЕКТНОЕ решение?

да. Уже хотя бы потому, что с помощью системного таймера не возможно читать данные быстрее чем с частотой 70-80Гц

hubble писал(а):
Вопрос по KernelChip. С помощью этого элемента можно работать только с USB-портом?

элементы данной вкладки работают не с USB портом, а с COM и только с устройством KE-USB24A - он хоть и подключается по USB, но в системе виден как COM устройство
карма: 27
0
Ответов: 3851
Рейтинг: 159
#5: 2009-04-09 15:03:59 ЛС | профиль | цитата
hubble, можешь ещё посмотреть сторонний компонент работы с портом в асинхронном режиме http://www.hiasm.com/forum.html?q=3&p=54574#p54574
карма: 0
начавший
0
Ответов: 1328
Рейтинг: 69
#6: 2009-04-10 02:19:46 ЛС | профиль | цитата
Андрей., а ты его часто юзаешь, у меня с ним были какието проблемы (уже не помню какие) и я вернулся на родной.
карма: 2

0
Ответов: 3851
Рейтинг: 159
#7: 2009-04-10 18:36:46 ЛС | профиль | цитата
Konst, я его пробовал, когда он только появился - штатный в те времена был немного другим (вроде) и плохо работал в терминале (или у меня не получалось), а этот очень неплохо и почти сразу (без выяснения способов использования)..
карма: 0
начавший
0
Ответов: 1328
Рейтинг: 69
#8: 2009-04-11 03:04:09 ЛС | профиль | цитата
Андрей., у меня со штатным тоже проблемы возникают - из 15 номеров 1 неопределяется, caller id fsk номер приходит 1 раз со 2м гудком, наверное неуспеваю считать с порта. Нужно попробовать пример от Dilma.
карма: 2

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