Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 10.12.2019, 22:44   #1
ptihka
 
Регистрация: 23.10.2013
Сообщений: 5
По умолчанию Как отследить конец передачи с COM Port

Создаю устройство на AVR , оно должно общатся по ком порту с компьютером , для синхронизации данных точнее времени.
В делфи использую компанент TBComPort ver.2.10
по прерыванию буфера принемаю данные с МК
Код:
procedure TForm1.BComPort1RxChar(Sender: TObject; Count: Integer);
var
  S: String;
begin  
  BComPort1.ReadStr(S,Count );
  Label2.Caption:=Label2.Caption+ s;



end;
все бы хорошо , и даже можно сказать работает , но не могу отследить конец передачи , чтобы сравнить и сделать какие то выводы-операции на ответ . Помгоите , кто чем может , буду благодарен!!!
ptihka вне форума Ответить с цитированием
Старый 11.12.2019, 11:21   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 2,156
По умолчанию

Хороший партизан! Много сказано - и ни о чём.
Протокол передачи определен? Пакеты бинарные или ASCII ? От этого зависит.
Обычные приемы определения конца передачи:
- Для ASCII - <ВК>или/и<ПС>
- Для бинарных : по счетчику в заголовке пакета
- по тайм-ауту.
Погугли на тему Modbus.

Последний раз редактировалось digitalis; 11.12.2019 в 11:25.
digitalis на форуме Ответить с цитированием
Старый 11.12.2019, 16:43   #3
ptihka
 
Регистрация: 23.10.2013
Сообщений: 5
По умолчанию

Не обессудте, програмист с меня ткой себе, можно даже сказать почти ни какой, знания по делфи заканчиваются на скачивании чьих то примеров и объединения их в мою кучу. Передача с АВР идет в ASCII с 10/13 в конце, пробовал отследить по этим данным , но как то не выходит , как я понимаю когда забираю из буфера там может быть несколько символов , в зависимости от факторов передачи. Поскольку по отслеживанию по #13 иногда срабатывает иногда нет. вот по тайм-ауту это интересно можно проверять по таймеру идет передача или нет , за это спасибо буду пробовать. Должно получится , поскольку не постоянный обмен а нужно просто получить ответ от МК и сделать вывод в приложении.
ptihka вне форума Ответить с цитированием
Старый 11.12.2019, 19:30   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 2,156
По умолчанию

Любопытно: а на стороне ПК прием через что идёт? Через СОМ-порт с преобразованными уровнями? Если да, и если линия связи не ограничена двумя парами, то можно использовать полный RS232 со служебными сигналами RTS - CTS.
А если через преобразователь UART-USB - тогда в зависимости от типа преобразователя.
По тайм-аутам тоже есть засада: Windows - не реалтаймовская ОС, и кто знает, чем и сколько времени она бывает занята.
Более конкретно сказать не могу, у меня МК болтал дуплексно с ПК через FT232, а там производитель м.-сх. давал DLL-ку, которая заведовала связью.

Последний раз редактировалось digitalis; 11.12.2019 в 19:35.
digitalis на форуме Ответить с цитированием
Старый 11.12.2019, 20:15   #5
ptihka
 
Регистрация: 23.10.2013
Сообщений: 5
По умолчанию

Я работаю с баскомом тут нет библиотек , весь процес написан в основном на ассемблере по прерыванию, можно сказать лично , так что на уровне МК мне все известно что и как. Работаю конечно со свистком ТТL уровня , заморочится с служебными сигналами можно но оно того не стоит. Сейчас у меня можно сказать все работает . Связь с МК стабильная , ни каких потерь все хорошо , с компа отпраляю данные типа:"22.11.23+chexum" и если на сторне МК чексумма совпала устанавливаю время, и отправляю ответ типа"Установлено" , и вот при ответе от МК приходят байты по несколько штук , бывает 1 бывает 3 байта , почему так не знаю. Отсюда вывод я немогу узнать когда пришло все слово чтобы сравнить ответ от МК. И в делфи буфер этих байтов склеевается в одно слово.
ptihka вне форума Ответить с цитированием
Старый 12.12.2019, 11:00   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 2,156
По умолчанию

А что, время ответа должно фиксироваться с точностью до миллисекунд ?
Цитата:
заморочится с служебными сигналами можно но оно того не стоит
Ну нет - так нет.
digitalis на форуме Ответить с цитированием
Старый 12.12.2019, 11:27   #7
ptihka
 
Регистрация: 23.10.2013
Сообщений: 5
По умолчанию

Да нет не должно , поэтому и говорю что по таймеру можно проверять пришло что нибудь или нет , да и ответ то приходит всего либо да либо нет , и время не важно вплоть до пары-тройки секунд. Просто в МК я отслеживаю все по байтово и конец передачи тоже , а тут не знаю как , придется через 'костыль' . Просто думал можно и тут как то отследить конец передачи не сложно.
ptihka вне форума Ответить с цитированием
Старый 12.12.2019, 12:02   #8
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 2,156
По умолчанию

Я штатными средствами работы с СОМ-портом не пользовался, потому не вправе врать чего-нибудь, но раз обмен идет в ASCII, то по #13 можно отслеживать, очищая после этого приемный буфер через PurgeComm .
http://delartidea.blogspot.com/2018/...-rs-232-4.html
digitalis на форуме Ответить с цитированием
Старый 14.12.2019, 02:59   #9
ptihka
 
Регистрация: 23.10.2013
Сообщений: 5
По умолчанию

В этом и дело что по #13 не получается почему то отследить.
ptihka вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поочерёдная вставка в дек. Есть заполненный дек d1. Необходимо заполнить дек d2 так: d1[0] - в конец, d[n-1] - в начало, d1[2] - в конец и тд. Как реализовать? _D4rki_ Помощь студентам 2 09.07.2017 10:21
Com port и С++ Илья1910 Visual C++ 1 25.08.2016 09:01
com port kollfer Общие вопросы Delphi 3 12.04.2012 17:34
Как отследить начало и конец процесса? utro35 Общие вопросы Delphi 7 08.01.2012 13:26
как отследить приход данных на Com- port shurik_7866 Общие вопросы Delphi 1 03.04.2008 18:27