|
Работа с COM-портом |
|
|
|
Feb 3 2007, 12:24
|
Частый гость
 
Группа: Новичок
Сообщений: 100
Регистрация: 9-03-06
Пользователь №: 15 088

|
Дык, я ж говорю, что терминальной программой все нормально принимается (то что она несколько зависает, то ничего - главное все пакеты целые). Дело именно в моей программе =) Этим читаю: Код procedure InComm1(var i:byte;var IsIn:boolean); var bytes1:dword; begin IsIn:=false; clearcommerror(hcom1,com_error,@stat1);
if stat1.cbInQue>0 then begin if readfile(hcom1,databuf1,bufsize1,bytes1,nil) then begin i:=databuf1; IsIn:=true; end else showmessage('Ошибка приема'); end;
end; Читаю просто вызовом функции в потоке. (та же проблема остается при использовании CPort310)
|
|
|
|
|
Feb 3 2007, 12:45
|
Участник

Группа: Свой
Сообщений: 56
Регистрация: 25-06-05
Пользователь №: 6 300

|
ReadFile() вызывается в отдельном потоке по какому событию? При помощи SetCommMask или еще как? PS: Пока писал, ответ появился. Почитайте что-нибудь типа такого: http://www.delphimaster.ru/articles/comport2/index.htmlСразу скажу, что лучше Overlapped режим.
|
|
|
|
|
Feb 3 2007, 16:05
|
Частый гость
 
Группа: Новичок
Сообщений: 100
Регистрация: 9-03-06
Пользователь №: 15 088

|
Сегодня выяснилось, что и в Terminal приходят обрывки пакетов, реже чем в моей программе, но все-таки они есть. portmon показывает, что там приходят именно обрывки  Сейчас железо очередной раз перепроверяю. Попробую снизить скорость. Блин, где же собака порылась ?
Сообщение отредактировал CSB - Feb 3 2007, 16:08
|
|
|
|
|
Feb 3 2007, 22:25
|
Местный
  
Группа: Свой
Сообщений: 421
Регистрация: 25-12-04
Пользователь №: 1 675

|
Цитата(CSB @ Feb 3 2007, 16:05)  Попробую снизить скорость Скорость чего? Ваши 8 байт раз в 1мс только на 115200 и пролезут (если я математику не забыл)
|
|
|
|
|
Feb 4 2007, 00:43
|
Частый гость
 
Группа: Новичок
Сообщений: 100
Регистрация: 9-03-06
Пользователь №: 15 088

|
Цитата Скорость чего? Ваши 8 байт раз в 1мс только на 115200 и пролезут (если я математику не забыл) Скорость передачи. Это тестовая задача, потому можно варьировать некоторыми параметрами. Просто буду снимать меньше показаний и все. Такое впечатление, что пакеты теряются по дороге к ПК, хотя если смотреть по JTAG'у, то все нормально. Математика: 115200 kbps - это 11520 kBps (10 байт кадр). У меня получается 8 kBps. Поэтому остается некоторый запас.
|
|
|
|
|
Feb 4 2007, 00:53
|
Частый гость
 
Группа: Новичок
Сообщений: 100
Регистрация: 9-03-06
Пользователь №: 15 088

|
Цитата Может в паузе между байтами или пакетами? Не понял что вы имели в виду. (Паузы между пакетами разные - зависят от воздействия на датчик.) Ну путь винда как-то отделяет во времени пакеты, но теряться-то при этом они не должны, т.к. входного буфера должно вполне хватать.
|
|
|
|
|
Feb 4 2007, 01:33
|
Местный
  
Группа: Свой
Сообщений: 421
Регистрация: 25-12-04
Пользователь №: 1 675

|
Цитата(CSB @ Feb 4 2007, 00:43)  Скорость передачи. ... Я имел ввиду, что на 57600 уже не пролезет. Цитата(CSB @ Feb 4 2007, 00:43)  ... (10 байт кадр). ... Бит? т.е. без контроля - тока старт и стоп. Обычно, хвосты теряются из-за ошибок передающей стороны - когда выдаете следующий байт не дождавшись "ухода" предыдущего в линию.
|
|
|
|
|
Feb 4 2007, 12:13
|
Частый гость
 
Группа: Новичок
Сообщений: 100
Регистрация: 9-03-06
Пользователь №: 15 088

|
Цитата Бит? т.е. без контроля - тока старт и стоп. угу, конечно бит. Цитата Обычно, хвосты теряются из-за ошибок передающей стороны - когда выдаете следующий байт не дождавшись "ухода" предыдущего в линию. Следующий байт записываю в регистр передачи только по окончанию передачи предыдущего байта.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|