Вверх ↑
Этот топик читают: Гость
Ответов: 3
Рейтинг: 0
#1: 2019-10-09 13:44:41 ЛС | профиль | цитата
Доброе время суток, делаю проект на ардуино, для получения данных по COM порту, передаю данные на блютуз модуль. И кто то на форуме писал что существует компонент COMex. очень хочу поработать с ним. Скиньте ссылку для скачивания, так как с поиском на сайте не разобрался.
карма: 0

0
vip
#1.1контекстная реклама от партнеров
Ответов: 4476
Рейтинг: 716
#2: 2019-10-09 14:07:18 ЛС | профиль | цитата
Так он же входит в стандартную поставку. Надо просто обновиться с SVN.
карма: 26

0
Ответов: 3
Рейтинг: 0
#3: 2019-10-10 06:07:53 ЛС | профиль | цитата
Спасибо! Разобрался! Если есть возможность можете объяснить... К компьютеру подключен блютуз модуль, на скорости 9600 бот, передаю скорость с ардуинки в котором модуль HC06 блютуз, на com порт. Данные в виде числа от 1 до 255 с задержкой секунда. Вывожу цифры по мере поступления каждый раз в новой строке. К примеру должно приходить целое число 100, но бывает такой момент что число приходит не полностью а 1 и с новой строки 00, или 10 и с новой строки 0, а должно 100, понимаю что скорей всего причина в скорости передачи, и HIASM не успевает вывести всю строку целиком. Как можно выйти из данной ситуации? Если воспользоватся передачей не по блютузу а USB с ардуинки в COM порт то все норм.
Add(Timer,11901500,406,112)
{
Interval=10
Enable=1
link(onTimer,16112240:doData,[])
}
Add(DoData,16112240,455,112)
{
Data=Integer(16)
link(onEventData,10903250:doRead,[])
}
Add(Hub,15962356,343,84)
{
OutCount=3
link(onEvent1,10903250:doOpen,[])
link(onEvent2,11901500:doTimer,[(381,97)(381,118)])
}
Add(Button,6627573,294,84)
{
Left=10
Top=37
Caption="Start"
link(onClick,15962356:doEvent1,[])
}
Add(Button,1445190,294,154)
{
Left=10
Top=55
Caption="Stop"
link(onClick,13915471:doEvent1,[])
}
Add(Hub,13915471,343,154)
{
InCount=2
OutCount=3
link(onEvent1,10903250:doClose,[(501,160)(501,97)])
link(onEvent2,11901500:doStop,[(380,167)(380,125)])
}
Add(MainForm,3499755,210,147)
{
Width=1091
Height=595
Point(onClose)
link(onClose,13915471:doEvent2,[(334,174)(334,167)])
}
Add(Edit,10797025,490,35)
{
Left=15
Top=10
Text="9"
DataType=2
}
Add(COM,10903250,511,84)
{
Port=8
link(onRead,11923192:doCompare,[])
link(Port,10797025:Text,[(517,75)(496,75)])
link(BaudRate,12135757:Text,[(524,75)(538,75)])
}
Add(Edit,12135757,532,35)
{
Left=80
Top=10
Text="9600"
DataType=2
}
Add(If_else,11923192,588,91)
{
Type=5
Op2=String()
link(onTrue,5402983:doString,[])
}
Add(FormatStr,5402983,637,91)
{
Mask="%1\10\13%2"
link(onFString,3578917:doWork2,[])
link(Str2,6626954:Var1,[(650,82)(699,82)(699,131)])
}
Add(Memory,7858327,714,91)
{
link(onData,7654372:doSplit,[(753,97)(753,118)(704,118)(704,153)])
}
Add(StrPart,7654372,714,147)
{
Char="\13"
link(onSplit,3578917:doWork3,[(753,153)(753,139)(690,139)])
link(onPart,11119196:doReplace,[])
link(Str,6626954:Var2,[])
}
Add(Replace,11119196,763,154)
{
SubStr="\10"
link(onReplace,6593453:doCompare,[])
}
Add(HubEx,3578917,686,91)
{
link(onEvent,7858327:doValue,[])
}
Add(GetDataEx,6626954,714,126)
{
link(Data,7858327:Value,[])
}
Add(If_else,6593453,810,154)
{
link(onFalse,11943547:doAdd,[])
link(Op2,9165463:Value,[])
}
Add(Memory,9165463,817,109)
{
}
Add(Memo,11943547,862,161)
{
Left=130
Top=10
Width=940
Height=540
ScrollBars=3
link(onChange,10903250:doRXClear,[(906,167)(906,135)(499,135)(499,104)])
}


Редактировалось 1 раз(а), последний 2019-10-10 06:09:43
карма: 0

0
Ответов: 8696
Рейтинг: 806
#4: 2019-10-10 10:26:52 ЛС | профиль | цитата
max_kz писал(а):
с задержкой секунда
Совсем не обязательно считывать порт 64 раза/сек излишне нагружая свой компьютер, достаточно пары раз в секунду. При чтении порта считанные данные удаляются из буфера и можно не обнулять его. Порт выдаёт что получил без разбора, поэтому данные надо накапливать и парсить отдельно.


Add(Timer,11901500,497,126)
{
Interval=500
Enable=1
link(onTimer,16112240:doData,[])
}
Add(DoData,16112240,546,126)
{
Data=Integer(256)
link(onEventData,10903250:doRead,[])
}
Add(Hub,15962356,434,98)
{
OutCount=3
link(onEvent1,10903250:doOpen,[])
link(onEvent2,11901500:doTimer,[(472,111)(472,132)])
}
Add(Button,6627573,385,98)
{
Left=10
Top=37
Caption="Start"
link(onClick,15962356:doEvent1,[])
}
Add(Button,1445190,385,168)
{
Left=10
Top=55
Caption="Stop"
link(onClick,13915471:doEvent1,[])
}
Add(Hub,13915471,434,168)
{
InCount=2
OutCount=3
link(onEvent1,10903250:doClose,[(592,174)(592,111)])
link(onEvent2,11901500:doStop,[(471,181)(471,139)])
}
Add(MainForm,3499755,301,161)
{
Width=1091
Height=595
Point(onClose)
link(onClose,13915471:doEvent2,[(425,188)(425,181)])
}
Add(Edit,10797025,581,49)
{
Left=15
Top=10
Text="9"
DataType=2
}
Add(COM,10903250,602,98)
{
Port=8
link(onRead,11923192:doCompare,[])
link(Port,10797025:Text,[(608,89)(587,89)])
link(BaudRate,12135757:Text,[(615,89)(629,89)])
}
Add(Edit,12135757,623,49)
{
Left=80
Top=10
Text="9600"
DataType=2
}
Add(If_else,11923192,651,105)
{
Type=5
Op2=String()
link(onTrue,15076580:doStrCat,[])
}
Add(Memo,11943547,897,119)
{
Left=130
Top=10
Width=940
Height=540
ScrollBars=3
}
Add(Memory,15423029,749,56)
{
Default=String()
}
Add(StrCat,15076580,749,105)
{
Point(doClear)
link(onStrCat,11082833:doEvent1,[])
link(Str1,15423029:Value,[])
}
Add(MultiElement,15946797,826,112)
{
link(onEvent1,9065061:doEvent1,[(865,118)(865,48)(697,48)(697,69)])
link(onEvent2,11943547:doAdd,[])
}
BEGIN_SDK
Add(EditMulti,3968562,21,21)
{
EventCount=2
WorkCount=1
Width=405
Height=242
}
Add(InfoTip,16531289,70,70)
{
Info=#33:Здесь разбираем полученную строку|
Width=246
}
END_SDK
Add(Hub,11082833,791,105)
{
link(onEvent1,15423029:doValue,[(816,111)(816,97)(739,97)(739,62)])
link(onEvent2,15946797:doWork1,[])
}
Add(Hub,9065061,707,63)
{
link(onEvent1,15423029:doClear,[])
link(onEvent2,15076580:doClear,[(732,76)(732,118)])
}

карма: 19

0
Ответов: 3
Рейтинг: 0
#5: 2019-10-10 10:57:39 ЛС | профиль | цитата
Леонид писал(а):
Совсем не обязательно считывать порт 64 раза/сек излишне нагружая свой компьютер, достаточно пары раз в секунду. При чтении порта считанные данные удаляются из буфера и можно не обнулять его. Порт выдаёт что получил без разбора, поэтому данные надо накапливать и парсить отдельно.

Все разобрался! Спасибо!!!
карма: 0

0
Ответов: 163
Рейтинг: 7
#6: 2019-10-11 07:06:07 ЛС | профиль | цитата
Привет леонид, привет макс_кз.
Тут вероятно дело не только в выборке.
Если число 100 дробится по произвольному порядку,значит передается в формате ASCII,типа 100 передается 3мя символами
"1","0","0" или 49 48 48 в бинарном.
С какой бы скоростью не читался буфер, все равно наступит момент чтения незаконченного сообщения.
Тут или передавать в бинарном формате или вводить упоавляющие символы конца сообщения.
карма: 1

0
Ответов: 8696
Рейтинг: 806
#7: 2019-10-11 09:27:35 ЛС | профиль | цитата
flash1103 писал(а):
наступит момент чтения незаконченного сообщения
Именно так, поэтому я и подчеркнул
Леонид писал(а):
Порт выдаёт что получил без разбора
Управляющие символы порт не разбирает, они для программиста
flash1103 писал(а):
передавать в бинарном формате
Порт оперирует БАЙТАМИ, принимает и выдаёт как раз байты "в бинарном виде" нулями и единичками, а уж как их будет интерпретировать программист -- дело программиста
карма: 19

0
Ответов: 163
Рейтинг: 7
#8: 2019-10-12 07:27:26 ЛС | профиль | цитата
Привет Леонид.
Это все я писал для макса,судя по теме вопроса топикстартер плавает в этом вопросе,поэтому я не расписывал что ты написал выше.
Если челу надо передавать одно значение
пусть передает в бинарном виде, это имелось ввиду
карма: 1

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