Вверх ↑
Этот топик читают: Гость
Этот топик был перемещен из раздела "Помощь по среде"
Ответов: 6
Рейтинг: 0
#16: 2008-11-06 22:23:22 ЛС | профиль | цитата
И все же мне не удалось добиться поставленной цели имеющимися инструментами HiAsm - маловато функций для работы со строками, а самому писать компоненты как-то рановато, да и времеи на это нет. Установил Delphi 6, правда пришлось вспоминать синтаксис.
konsvik, а что хочешь сделать, если не секрет?

Как известно спутники GPS кроме информации необходимой для непосредственно определения местоположения, передают также текущее время своих атомных часов с точностью 1мс. Моя программа
принимает данные с GPS-приемника, выделяет значение времени, и по достижению хх:59:53 проигрывает wav файл "Сигнал точного времени". С выхода звуковой карты сигнал поступает на усилитель+повышающий тр-р и далее на Первичные часовые станции для корекции текущего времени каждый час.
Вот скриншот проги: http://slil.ru/26309479
GlobalSat 353, был конфликт драйверов мобильника и GPS приемника, действительно данные идут сразу.

Он у тебя USB-шный что ли? Так все же ты разобрался с ним?

карма: 1

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#17: 2008-11-06 22:44:56 ЛС | профиль | цитата
konsvik писал(а):
самому писать компоненты как-то рановато, да и времеи на это нет. Установил Delphi 6, правда пришлось вспоминать синтаксис

Мдяя... А что, InlineCode это не то же самое
карма: 22

0
Ответов: 3851
Рейтинг: 159
#18: 2008-11-06 22:49:38 ЛС | профиль | цитата
konsvik писал(а):
маловато функций для работы со строками
чего бы хотелось?
карма: 0
начавший
0
Ответов: 3514
Рейтинг: 184
#19: 2008-11-06 22:52:11 ЛС | профиль | цитата
Сравнивания например )
Я может туплю, но If_else это немного не то
карма: 0
0
Ответов: 5446
Рейтинг: 323
#20: 2008-11-06 22:53:21 ЛС | профиль | цитата
konsvik, функций для работы со строками в HiAsm вполне достаточно для поставленной задачи. Советую изучить компоненты с вкладки MT. Строки, поступающие от GPS, очень легко преобразуются в MT-поток, а дальше через MT_Array (вроде так называется) дёргаются нужные значения.
карма: 1

0
Ответов: 1328
Рейтинг: 69
#21: 2008-11-08 01:23:48 ЛС | профиль | цитата
konsvik, да usb, и проблемы выделить время в пинципе нет. Я делаю прогу, чтоб отправляла координаты в гугл ерч и на сервер одновременно

------------ Дoбавленo:


konsvik, вот рабочий пример, только не забудь время-гринвич, разница 3 часа

Add(COM,5708819,406,165)
{
BaudRate=4800
Parity=4
TimeOut=1
link(onRead,11289978:doValue,[])
link(Port,10797025:Text,[])
}
Add(Timer,11901500,308,193)
{
Interval=1
Enable=1
link(onTimer,16112240:doData,[])
}
Add(DoData,16112240,357,193)
{
Data=Integer(2)
link(onEventData,5708819:doRead,[])
}
Add(Hub,15962356,245,158)
{
OutCount=3
link(onEvent2,5708819:doOpen,[])
link(onEvent3,11901500:doTimer,[(293,178)(293,199)])
}
Add(Button,6627573,175,158)
{
Left=45
Top=177
Caption="Start"
link(onClick,15962356:doEvent1,[])
}
Add(Button,1445190,175,277)
{
Left=45
Top=215
Caption="Stop"
link(onClick,13915471:doEvent1,[])
}
Add(Hub,13915471,224,277)
{
OutCount=3
link(onEvent1,5708819:doClose,[(331,283)(331,178)])
link(onEvent2,11901500:doStop,[(282,290)(282,206)])
}
Add(Case,15358791,595,172)
{
Value=String(0D0A)
link(onNextCase,5079453:doStrCat,[])
link(onTrue,10885940:doEvent1,[(639,185)(639,231)(394,231)(394,269)])
}
Add(Hub,10885940,406,263)
{
OutCount=3
link(onEvent1,6657354:doAdd,[(604,269)(604,255)])
link(onEvent2,5079453:doClear,[(558,276)(558,185)])
link(onEvent3,9262457:doClear,[(586,283)(586,185)])
}
Add(StrCat,5079453,679,172)
{
Point(doClear)
link(onStrCat,9262457:doValue,[])
link(Str1,9262457:Value,[(685,160)(723,160)(723,216)(741,216)])
link(Str2,11289978:Value,[(692,125)(518,125)(518,216)(482,216)])
}
Add(Memory,9262457,735,172)
{
Default=String()
}
Add(MainForm,3499755,294,39)
{
Width=270
Height=427
}
Add(Label,12496219,840,214)
{
Left=20
Top=125
Width=28
Height=17
Caption="COM"
}
Add(Edit,10797025,406,102)
{
Left=50
Top=120
Text="1"
}
Add(Stream2Hex,15264765,525,172)
{
Mode=2
link(onResult,15358791:doCase,[])
}
Add(Memory,11289978,476,172)
{
link(onData,15264765:doConvert,[])
}
Add(ArrayRW,4041938,693,347)
{
link(onRead,14866170:doSplit,[(737,353)(737,395)(240,395)(240,402)])
link(Array,6657354:Array,[])
link(Index,3811123:Result,[(706,335)(657,335)(657,391)(608,391)])
}
Add(StrList,6657354,679,249)
{
link(onChange,3811123:doOperation,[(723,255)(723,304)(590,304)(590,353)])
link(Str,5079453:Result,[])
}
Add(Label,13570189,735,517)
{
Left=140
Top=125
}
Add(Case,14895840,364,503)
{
Value=String($GPGGA)
link(onNextCase,14126032:doCase,[])
link(onTrue,12021055:doData,[(401,516)(401,579)])
}
Add(Case,14126032,413,503)
{
Value=String($GPRMC)
link(onTrue,11747814:doData,[])
}
Add(DoData,12021055,518,573)
{
link(onEventData,12689483:doWork3,[(620,579)])
link(Data,4725754:Var3,[(524,477)])
}
Add(DoData,11747814,469,510)
{
link(onEventData,12689483:doWork2,[])
link(Data,4725754:Var2,[])
}
Add(HubEx,12689483,616,503)
{
link(onEvent,2787558:doCompare,[])
}
Add(GetDataEx,4725754,462,468)
{
link(Data,504915:Value,[])
}
Add(StrMask,2787558,658,510)
{
Mask="######"
link(onTrue,13570189:doText,[])
}
Add(Math,3811123,602,347)
{
OpType=1
Op2=1
link(onResult,4041938:doRead,[])
link(Op1,6657354:Count,[(608,321)(692,321)])
}
Add(StrPart,14866170,252,396)
{
Char=","
DirectEvent=0
link(onSplit,5034539:doSplit,[])
link(onPart,14895840:doCase,[(296,409)(296,509)])
}
Add(Memory,504915,469,417)
{
}
Add(StrPart,5034539,315,396)
{
Char=","
link(onPart,16021113:doSplit,[])
}
Add(StrPart,16021113,378,403)
{
Char="."
link(onPart,504915:doValue,[(440,416)(440,423)])
}


------------ Дoбавленo:

konsvik, смотри на публикаторе выложил готовую схему синхронизации http://www.hiasm.com/sha/shatools.php?q=5&id=62

карма: 2

1
Голосовали:LainX
Ответов: 91
Рейтинг: 6
#22: 2015-05-28 21:44:03 ЛС | профиль | цитата
Привет народ. Тема старая но название подходит как нельзя лучше.
Всего несколько дней как знакомлюсь с HiAsm. Как обычно чего то не получается, чего то не понимаю, ну и т.д.

Пытаюсь немного попрактиковаться с СОМ портом.

Что смог найти почитал - попробовал... не работает.
Гляньте схему пожалуйста, попинайте в нужном направлении.... Что там не так?
Порты определяются правильно. Пытаюсь по обнаруженным портам установить номер и скорость.
Нихт арбайтен....

code_35745.txt
карма: 0

0
файлы: 1code_35745.txt [2KB] [397]
Ответов: 8930
Рейтинг: 823
#23: 2015-05-28 22:43:50 ЛС | профиль | цитата
ibegen,
1. Порт запускать надо ПОСЛЕ установки параметров и только ОДИН раз;
2. В списке номеров вы перед каждой цифрой поставили пробел, получилась непонятная для порта строка (которая интерпретируется как "0"), а не цифра;
3. Сразу привыкайте к аккуратности в выкладываемых схемах и лучше копипастить их с рабочего поля

------------ Дoбавленo в 22.43:

Add(MainForm,6988967,273,56)
{
Point(onClose)
link(onCreate,12067786:doEvent1,[])
link(onClose,1835085:doClose,[(312,83)(312,160)])
}
Add(EnumCOM,5441004,350,77)
{
link(onEnumPorts,9444855:doAdd,[(387,83)(387,69)])
}
Add(Hub,12067786,322,70)
{
link(onEvent1,9444855:doClear,[])
link(onEvent2,5441004:doEnumPorts,[])
}
Add(COM,1835085,448,147)
{
Port=2
BaudRate=6
link(onWrite,12828228:doMessage,[])
link(Port,14913033:String,[])
link(BaudRate,829112:String,[(461,124)(496,124)])
}
Add(ListBox,9444855,399,63)
{
Left=20
Top=39
Name="наличие портов"
}
Add(Edit,2079770,350,119)
{
Left=10
Top=130
Width=120
Text="255"
}
Add(Button,4958260,308,168)
{
Left=10
Top=155
Width=120
Caption="послать байт"
link(onClick,2028322:doData,[])
}
Add(DoData,2028322,350,168)
{
link(onEventData,6524058:doConvert,[])
link(Data,2079770:Text,[])
}
Add(Convertor,6524058,392,168)
{
Mode=4
Digits=1
link(onResult,1835085:doWrite,[])
}
Add(Message,12828228,497,147)
{
}
Add(Label,4018238,259,105)
{
Left=11
Top=18
Width=114
Height=20
Caption="порты в наличии"
}
Add(Label,6992022,266,112)
{
Left=210
Top=25
Width=121
Height=20
Caption="выбрать скорость"
}
Add(Label,8914602,273,119)
{
Left=119
Top=24
Width=93
Height=20
Caption="выбрать порт"
}
Add(ComboBox,14913033,441,63)
{
Left=130
Top=44
Width=70
Height=21
TabOrder=9
Strings=#1:1|1:2|1:3|1:4|1:5|1:6|1:7|1:8|1:9|1: |
Text=""
DataType=1
}
Add(ComboBox,829112,483,63)
{
Left=230
Top=45
Width=70
Height=21
TabOrder=9
Strings=#3:600|4:1200|4:2400|4:4800|4:9600|5:11200|1: |
Text=""
DataType=1
link(onClick,1835085:doOpen,[(522,76)(522,132)(438,132)(438,153)])
}
карма: 19

0
Ответов: 91
Рейтинг: 6
#24: 2015-05-28 23:05:41 ЛС | профиль | цитата
Леонид, спасибо!!!
По пункту 2 - мысль была - но не развил её и даже не попробовал.... Спасибо!
По пункту 3 - Учту. Непривычный способ.... Обязательно учту.

По пункту 1 - буду учить матчасть!!! Но есть вопросики:
1 - На схеме комбобокс на установку номера порта не создает событие на компонент порта. Это значит что данные в компонент заносятся всё равно?
2 - И только действие при установке скорости включает порт? Если так, то могу ли я включение порта привязать к другому событию но скорость и номер устанавливать заранее?
карма: 0

0
Ответов: 8930
Рейтинг: 823
#25: 2015-05-28 23:59:25 ЛС | профиль | цитата
Леонид писал(а):
Порт запускать надо ПОСЛЕ установки параметров и только ОДИН раз

ibegen, порт читает параметры один раз при запуске и эти параметры сначала считываются с верхних точек, если точки не задействованы, то из записаных в свойствах, а если и там ничего нет, то из потока (общая идеология HiAsm). Чтобы изменить скорость придётся остановить порт и запустить снова (любым событием)
карма: 19

1
Голосовали:ibegen
Ответов: 91
Рейтинг: 6
#26: 2015-05-29 14:00:06 ЛС | профиль | цитата
Все работает! Спасибо Леонид.
Не знаю куда задавать вопрос, но наверное здесь, раз тема по СОМ порт.

Мне надо в СОМ порт выдавать пяти или шести байтные посылки. Посылка состоит из двух первых байтов идентификации и собственно трех байтов данных. Я не нашел как в HiAsm 24 битную переменную делить на три 8 битных части, ну и конечно как их потом объединить для восстановления значений. Где это можно посмотреть?
Поиск дает результаты которые я не смог интерпретировать как нужные мне...
карма: 0

0
Ответов: 2059
Рейтинг: 132
#27: 2015-05-29 15:55:58 ЛС | профиль | цитата
ibegen,
Я не нашел как в HiAsm 24 битную переменную делить на три 8 битных части

Работай, как со строками.
карма: 6

0
Ответов: 91
Рейтинг: 6
#28: 2015-05-29 16:33:15 ЛС | профиль | цитата
Спасибо Флинт. Это я так понял надо использовать компонент - сцепить две строки?
У меня например посылка должна быть такой:
v b 16300 - первые два знака идентификаторы команды, а число - значение для управления исполнительным механизмом.

Получается что я сначала сцепляю два идентификатора и после этого прицепляю к ним это число... Так?
Простите за тупые вопросы пожалуйста...

карма: 0

0
Ответов: 8930
Рейтинг: 823
#29: 2015-05-29 16:44:04 ЛС | профиль | цитата
ibegen, смотря какой тип данных, если это беззнаковые целые, то смотрите пример.
СОМ порт имеет собственный буфер из которого читаются данные в указаном количестве байт и прочитанные байты удаляются из буфера. Поэтому при обмене с портом надо устраивать разбор прочитаной строки с целью определения начала и окончания блока.
Кроме того количество читаемых за обращение байт умноженое на 10 и на количество чтений в секунду должно быть иеньше установленной скорости, иначе буфер будет переполняться и данные пропадать
code_35760.txt
карма: 19

0
файлы: 1code_35760.txt [5.1KB] [417]
Ответов: 2059
Рейтинг: 132
#30: 2015-05-29 17:19:38 ЛС | профиль | цитата
ibegen, Да, конечно.
Только наверное два идентификатора можно задать сразу, если это чем-то не обусловлено, и + число.
Вернее это делается параллельно.
Леонид нарисовал всё очень подробно.
По поводу скорости обмена, а нельзя ли использовать синхронный режим?
если это беззнаковые целые

Наверняка беззнаковые. Идентификатор играет роль своего рода знака, направления.
карма: 6

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