![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 12 Всего: 20 |
Почитай про
QueryPerformanceCounter, QueryPerformanceFrequency Это поможет максимально точно измерить время получения очередного сигнала. -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
Darkblue |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 20.1.2012 Репутация: нет Всего: нет |
Спасибо
|
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 12 Всего: 20 |
Вот тут уж вообще почти не за что. Вчера смог только указать более точные способы измерения интервалов времени, чем стандартный таймер. Но. Логический анализатор чего? И для чего? Поскольку Windows не является ОС реального времени "время получения ответа по СОМ-порту от внешнего устройства вашей программой от времени ответа на ваш запрос к устройству" может различаться от раза к разу далеко не на миллисекуды. (Скорость передачи по СОМ-порту тут почти не при чём). И даже не на десятки/сотни миллисекунд. А на секунды! Вы бы свою задачу представили бы полностью. Можно мне в личку или на почту, если что-то смущает. -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
Strannix |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 6.2.2012 Репутация: нет Всего: нет |
Может мой вопрос немного не по теме, использую тот же пакет компанентов для работы с портом, на пк реализована раздача GPS данных через виртуальные порты GPSGate, порт открывается данные в терминале идут, но когда пытаешься считать данные именно с порта в строку например так s:=AfComPort1.ReadString; ничего не происходит тоесть данных в переменной нет.Из потрта необходимо считать определенные строки с данными а дальше дело техники, прошу помощи. Вот какие данные отображаются в окне терминала
$GPRMC,094812,A,5027.09199,N,04433.97236,E,9.91,328.3,060212,0.0,E*4D $GPGLL,5027.09199,N,04433.97236,E,094812,A*2D $GPGGA,094812,5027.09199,N,04433.97236,E,1,5,0.0,0.0,M,0.0,M,,*40 $GPVTG,328.3,T,328.3,M,9.91,N,18.35,K*70 $GPRMC,094813,A,5027.09434,N,04433.97009,E,9.91,328.3,060212,0.0,E*40 |
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 12 Всего: 20 |
Процедура ReadString ожидает получения признака "конец строки". Как правило это LFCR или что-то одно из них. Если этих символов в принимаемой информации нет, данная процедура ничего не вернет. -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
Strannix |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 6.2.2012 Репутация: нет Всего: нет |
каким же образом тогда образом можно считать данные?получиться ли считать буфер как в предыдущем примере программы?я пробовал с буфером эксперементировать точно так как в примере результа также нет натолкните пожалуста на примлемое решение данного вопроса
Добавлено через 1 минуту и 20 секунд есть ще вариант считывания необходимой информации непосредсвенно из лог файла но это не рационально и сопряжено с дополнительными проблемами |
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 12 Всего: 20 |
Покажи свой код. -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
Strannix |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 6.2.2012 Репутация: нет Всего: нет |
var
Form1: TForm1; Buff: byte = ($12); ReadBuffer: array of byte; z,count,poz,i:integer; s:string; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin i:= AfComPort1.InBufSize; SetLength(ReadBuffer,i); end; procedure TForm1.Button1Click(Sender: TObject); begin AfComPort1.ComNumber :=strtoint(LabeledEdit1.Text); AfComPort1.Open; end; procedure TForm1.AfComPort1DataRecived(Sender: TObject; Count: Integer); begin AfComPort1.ReadData(ReadBuffer[Poz], count); z:=ReadBuffer[Poz]; Inc(Poz,count); memo1.Lines.Add(inttostr(z)); poz:=0; count:=0 end; |
|||
|
||||
northener |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 12 Всего: 20 |
Зачем же так бездумно копировать чужой пример? Автор топика принимал от внешнего устройства только один байт в ответ на свою команду. Попробуй переписать сей кусок кода так:
-------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
||||
|
|||||
Strannix |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 6.2.2012 Репутация: нет Всего: нет |
попробовал в мемо одни 0, и я до этого пробовал в цикле считать данные из буфера только концом цикла указывал InBufSize,
|
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 12 Всего: 20 |
Параметры СОМ-порта установлены правильно? Скорость, количество бит, четность, количество стоп-бит.
Кроме того обычно у подобных компонент СОМ-порта есть событие типа OnError. Попробуй его задействовать. -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |