|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
10.12.2019, 21:44 | #1 |
Регистрация: 23.10.2013
Сообщений: 5
|
Как отследить конец передачи с COM Port
Создаю устройство на AVR , оно должно общатся по ком порту с компьютером , для синхронизации данных точнее времени.
В делфи использую компанент TBComPort ver.2.10 по прерыванию буфера принемаю данные с МК Код:
|
11.12.2019, 10:21 | #2 |
Старожил
Регистрация: 04.02.2011
Сообщений: 4,546
|
Хороший партизан! Много сказано - и ни о чём.
Протокол передачи определен? Пакеты бинарные или ASCII ? От этого зависит. Обычные приемы определения конца передачи: - Для ASCII - <ВК>или/и<ПС> - Для бинарных : по счетчику в заголовке пакета - по тайм-ауту. Погугли на тему Modbus. Последний раз редактировалось digitalis; 11.12.2019 в 10:25. |
11.12.2019, 15:43 | #3 |
Регистрация: 23.10.2013
Сообщений: 5
|
Не обессудте, програмист с меня ткой себе, можно даже сказать почти ни какой, знания по делфи заканчиваются на скачивании чьих то примеров и объединения их в мою кучу. Передача с АВР идет в ASCII с 10/13 в конце, пробовал отследить по этим данным , но как то не выходит , как я понимаю когда забираю из буфера там может быть несколько символов , в зависимости от факторов передачи. Поскольку по отслеживанию по #13 иногда срабатывает иногда нет. вот по тайм-ауту это интересно можно проверять по таймеру идет передача или нет , за это спасибо буду пробовать. Должно получится , поскольку не постоянный обмен а нужно просто получить ответ от МК и сделать вывод в приложении.
|
11.12.2019, 18:30 | #4 |
Старожил
Регистрация: 04.02.2011
Сообщений: 4,546
|
Любопытно: а на стороне ПК прием через что идёт? Через СОМ-порт с преобразованными уровнями? Если да, и если линия связи не ограничена двумя парами, то можно использовать полный RS232 со служебными сигналами RTS - CTS.
А если через преобразователь UART-USB - тогда в зависимости от типа преобразователя. По тайм-аутам тоже есть засада: Windows - не реалтаймовская ОС, и кто знает, чем и сколько времени она бывает занята. Более конкретно сказать не могу, у меня МК болтал дуплексно с ПК через FT232, а там производитель м.-сх. давал DLL-ку, которая заведовала связью. Последний раз редактировалось digitalis; 11.12.2019 в 18:35. |
11.12.2019, 19:15 | #5 |
Регистрация: 23.10.2013
Сообщений: 5
|
Я работаю с баскомом тут нет библиотек , весь процес написан в основном на ассемблере по прерыванию, можно сказать лично , так что на уровне МК мне все известно что и как. Работаю конечно со свистком ТТL уровня , заморочится с служебными сигналами можно но оно того не стоит. Сейчас у меня можно сказать все работает . Связь с МК стабильная , ни каких потерь все хорошо , с компа отпраляю данные типа:"22.11.23+chexum" и если на сторне МК чексумма совпала устанавливаю время, и отправляю ответ типа"Установлено" , и вот при ответе от МК приходят байты по несколько штук , бывает 1 бывает 3 байта , почему так не знаю. Отсюда вывод я немогу узнать когда пришло все слово чтобы сравнить ответ от МК. И в делфи буфер этих байтов склеевается в одно слово.
|
12.12.2019, 10:00 | #6 | |
Старожил
Регистрация: 04.02.2011
Сообщений: 4,546
|
А что, время ответа должно фиксироваться с точностью до миллисекунд ?
Цитата:
|
|
12.12.2019, 10:27 | #7 |
Регистрация: 23.10.2013
Сообщений: 5
|
Да нет не должно , поэтому и говорю что по таймеру можно проверять пришло что нибудь или нет , да и ответ то приходит всего либо да либо нет , и время не важно вплоть до пары-тройки секунд. Просто в МК я отслеживаю все по байтово и конец передачи тоже , а тут не знаю как , придется через 'костыль' . Просто думал можно и тут как то отследить конец передачи не сложно.
|
12.12.2019, 11:02 | #8 |
Старожил
Регистрация: 04.02.2011
Сообщений: 4,546
|
Я штатными средствами работы с СОМ-портом не пользовался, потому не вправе врать чего-нибудь, но раз обмен идет в ASCII, то по #13 можно отслеживать, очищая после этого приемный буфер через PurgeComm .
http://delartidea.blogspot.com/2018/...-rs-232-4.html |
14.12.2019, 01:59 | #9 |
Регистрация: 23.10.2013
Сообщений: 5
|
В этом и дело что по #13 не получается почему то отследить.
|
03.03.2020, 12:21 | #10 |
Регистрация: 30.08.2013
Сообщений: 3
|
Доброго, всем!
Не знаю актуально, нет.Времени много прошло, пусть будет. У меня на bcomport была такая же проблема. Решается введением в прошивке AVR, маркеров начала и конца пакета. И отлавливаем маркеры. BComPort1.ReadStr(S, Count); SL := SL+trim(S); // MemoTerminal.Text:=MemoTerminal.Tex t+s; if pos('>',SL) > 0 then begin s2:=copy(SL,pos('<',SL)+1,128); //copy packet delete(SL,1,pos('>',SL)); ///////////// start thread STRThread:=TSTRThread.Create(False) ; STRThread.Priority:=tpNormal; STRThread.FreeOnTerminate:=true; |
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поочерёдная вставка в дек. Есть заполненный дек d1. Необходимо заполнить дек d2 так: d1[0] - в конец, d[n-1] - в начало, d1[2] - в конец и тд. Как реализовать? | _D4rki_ | Помощь студентам | 2 | 09.07.2017 09:21 |
Com port и С++ | Илья1910 | Visual C++ | 1 | 25.08.2016 08: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 |