Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

COM-порт


Andrewtitoff ©   (18.07.17 22:06

Добрый вечер, тема конечно баян, но все-же попытаю счастье))
В общем мне необходимо наладить общение по СОМ-порту(виртуальному) с самодельным устройством на STM32(на данный момент оно просто отправляет обратно все что пришло), на вашем сайте нашел статью http://www.delphimaster.ru/articles/comport2/ но у меня этот код не хочет работать, вернее отправлять он что-то отправляет(т.к. у меня на устройстве при получении данных мигает светодиод), а вот принимать что-либо отказывается, любой терминалке устройство нормально отвечает, вот лог из Advansed Serial Port Monitor(сначала подключа.сь терминалкой и посылаю 1,10,100, затем тоже самое пытаюсь сделать програмкой)

<20170718213449.336 SYS>
COM открыт
<20170718213449.336 SYS>
Размер вх./исх. очереди 2048/2048
<20170718213449.346 SYS>
Скорость передачи 9600
<20170718213449.346 SYS>
RTS включен
<20170718213449.356 SYS>
DTR включен
<20170718213449.366 SYS>
Биты данных=8, Стоповые биты=1, Четность=None
<20170718213449.366 SYS>
Служ. символы: Eof=0x00, Error=0x00, Break=0x00, Event=0x00, Xon=0x11, Xoff=0x13
<20170718213449.366 SYS>
Контроль передачи: ControlHandShake=(DTR_CONTROL), Замена=(TRANSMIT_TOGGLE, RTS_CONTROL), Лимит Xon=0, Лимит Xoff=0
<20170718213449.366 SYS>
Таймауты: ReadInterval=-1, ReadTotalTimeoutMultiplier=0, ReadTotalTimeoutConstant=0, WriteTotalTimeoutMultiplier=100, WriteTotalTimeoutConstant=1000
<20170718213541.876 TX>
<SOH>
<20170718213541.976 RX>
<SOH>
<20170718213545.496 TX>
<LF>
<20170718213545.596 RX>
<LF>
<20170718213550.326 TX>
d
<20170718213550.426 RX>
d
<20170718213600.167 SYS>
DTR выключен
<20170718213600.167 SYS>
RTS выключен
<20170718213600.167 SYS>
Очистка порта: RXABORT, TXABORT
<20170718213600.167 SYS>
Очистка порта: RXCLEAR, TXCLEAR
<20170718213600.177 SYS>
COM закрыт
<20170718213616.107 SYS>
COM открыт
<20170718213616.127 SYS>
Скорость передачи 9600
<20170718213616.127 SYS>
RTS включен
<20170718213616.137 SYS>
DTR включен
<20170718213616.137 SYS>
Биты данных=8, Стоповые биты=1, Четность=None
<20170718213616.137 SYS>
Служ. символы: Eof=0x00, Error=0x00, Break=0x00, Event=0x0D, Xon=0x08, Xoff=0x03
<20170718213616.137 SYS>
Контроль передачи: ControlHandShake=(DTR_CONTROL), Замена=(TRANSMIT_TOGGLE, RTS_CONTROL), Лимит Xon=0, Лимит Xoff=0
<20170718213624.637 TX>
<NUL><NUL><NUL><NUL><NUL>1
<20170718213707.467 SYS>
COM закрыт


Andrewtitoff ©   (19.07.17 14:52[1]

Видимо придется использовать компоненты


Rouse_ ©   (19.07.17 22:57[2]

Да сейчас почти никто с СОМ портами и не работает, я попытался было тебе ответить, но понял что за 16 лет практически все забыл как их юзать :)


Германн ©   (20.07.17 02:30[3]


> Rouse_ ©   (19.07.17 22:57) [2]
>
> Да сейчас почти никто с СОМ портами и не работает

У вас на фирме точно никто не работает. :)

> Andrewtitoff ©   (19.07.17 14:52) [1]
>
> Видимо придется использовать компоненты

Видимо придется. Хотя поможет ли?
Программисты обычно приводят код и спрашивают что не так.
Логи из Advansed Serial Port Monitor приводят пользователи, у которых некая чужая программа не работает так как надо.


rrrrr ©   (20.07.17 12:10[4]

из проводков земля rx и тх ?

а нафига тогда железный флоуконтрол включен (судя по логу) ?


Германн ©   (21.07.17 01:54[5]


> rrrrr ©   (20.07.17 12:10) [4]
>
> из проводков земля rx и тх ?
>
> а нафига тогда железный флоуконтрол включен (судя по логу)
> ?

Проверка "воткнутости" кабеля, например. Обеспечивается перемычкой на разъёме кабеля.


Pavia ©   (23.07.17 11:22[6]


> Проверка "воткнутости" кабеля, например.

Причём тут воткнутость?
Flowcontrol -  от слова control, что переводится как управление.


Германн ©   (25.07.17 01:31[7]


> Pavia ©   (23.07.17 11:22) [6]

RTFM, тогда может поймёшь при чём тут control ака управление.


Kilkennycat ©   (25.07.17 20:30[8]


> Проверка "воткнутости" кабеля, например.

то есть, вероятно, есть ситуация, когда устройство успешно осуществляет связь, а кабель при этом не воткнут...


Германн ©   (26.07.17 02:00[9]


> Kilkennycat ©   (25.07.17 20:30) [8]
>
>
> > Проверка "воткнутости" кабеля, например.
>
> то есть, вероятно, есть ситуация, когда устройство успешно
> осуществляет связь, а кабель при этом не воткнут...

Блин, Костя ты меня порой убиваешь. Уж тебе-то этого не знать!
Есть куча периферийных устройств, которые ничего не знают про Flow Control да и не хотят знать. При чём не про хардверный, ни про софтовый.
Конечно это ситуация ненормальная, но ...
Как при этом сказать передатчику, когда он может передавать данные, а когда не может?


Pavia ©   (26.07.17 08:19[10]


> Как при этом сказать передатчику, когда он может передавать
> данные, а когда не может?

А никак вы не скажете не закажете. Вы же сами сказали что FlowControl не заложен.


Kilkennycat ©   (26.07.17 09:29[11]


> Как при этом сказать передатчику, когда он может передавать
> данные, а когда не может?

и как тут воткнутость-невоткнутость разъема работает?


Германн ©   (26.07.17 14:44[12]

Например некое устройство 1 готово передавать данные другому устройству 2. Тогда устройство 1 сообщает об этом устройству 2 активируя RTS. Если устройство 2 готово принимать данные, то оно активирует в ответ выход CTS. После этого устройство 1 начинает передачу. Если устройство 2 хочет чтобы данные перестали поступать, оно снимает активный уровень с выхода CTS и устройство 1 прекращает передачу.
Если же на кабеле перемычка между RTS и CTS тогда передача начинается при подключении кабеля и прекращается при отключении кабеля.


Kilkennycat ©   (26.07.17 21:15[13]


> некое устройство 1 готово передавать данные другому устройству
> 2
и просто передает.

> Если устройство 2 готово принимать данные

то оно просто принимает

> Если устройство 2 хочет чтобы данные перестали поступать

то оно сообщает об этом первому по своей Тх

> Если же на кабеле перемычка между RTS и CTS тогда передача
> начинается при подключении кабеля и прекращается при отключении
> кабеля.

Поскольку кабель подключается кем-то, то этот кем-то может и кнопочку нажать. а можно и просто эпизодически посылать пинг.

Тратить порты и провода на допсигналы - дорого.


Германн ©   (26.07.17 22:25[14]


> Тратить порты и провода на допсигналы - дорого.
>

Ты видать не понял о чем речь.
Дело не в том чтобы как-то начать передачу и как-то прервать. Дело в том чтобы устройство, которое посылает информацию о событиях на дешевый принтер не делало это, если кабель не подключен или отвалился.


KilkennyCat ©   (26.07.17 23:24[15]

настолько дешевый, что не дает узнать свое состояние, наличие бумаги и т.д. и всё, что можно узнать, отвалился ли кабель. Да, ради этого стоит пожертвовать пару портов...


Германн ©   (27.07.17 00:35[16]

Ну насчет принтера я действительно был не прав.
В ситуации, которую я вспомнил http://img.armo.ru/files/ATS1801_inst_guide_rus.pdf таки принтер сам извещает о том что он готов к приему. Но зачем-то всё-таки на выводах RTS и CTS нужно ставить перемычку.


Inovet ©   (27.07.17 05:18[17]

> [13] Kilkennycat ©   (26.07.17 21:15)
> то оно сообщает об этом первому по своей Тх

Это было таки сделано для более низкого уровня. Это сейчас ты с запуздырил пакет и другой пакет в ответ послушал, а раньше байт отправил и ждёшь, пока приёмник с той стороны его обработаёт, причём сам ты тоже тормоз и ответный байт также долго обрабатываешь. НО! Вы оба умеете сообщать о готовности к приёму-передаче с помощью нехитрой аппаратной логической схемы.


Германн ©   (28.07.17 01:44[18]


> Inovet ©   (27.07.17 05:18) [17]

Я вообще не понимаю о чём Костя говорил? Какие порты и провода?


Pavia ©   (30.07.17 16:30[19]

Костя не понял о чём речь. Речь о перемычках. Поты так и так заняты. А проводов меньше. Зато перемычки позволяют показать начальнику, что ты диагностируешь состояние кабеля, хотя на самом деле ты диагностируешь состояние порта.
Вот и весь сказ.

А управление потоком так и так есть. Есть стартовые биты, есть временная синхронизация. Есть сторожевой таймер который в случае надобности сбрасывает автомат управления потоком в начальное состояние.


Германн ©   (31.07.17 00:45[20]


> Pavia ©   (30.07.17 16:30) [19]

Ты всё-таки совсем не в теме.
Управление потоком (Flow Control) в теме последовательного порта по спецификации RS-232 это управление передачей (разрешение или запрет)  либо Hardware способом (установкой/снятием сигналов в связках RTS-CTS и/или DTR-DSR), либо Software  способом (посылкой специальных управляющих байтов Xon/Xoff).
А стартовые биты, временная синхронизация и т.п. и т.д. это совсем другое. А сторожевой таймер это вообще из другой оперы. Ни в спецификации RS-232, ни в спецификации COM-порта для компьютера никаких сторожевых таймеров нет.


Inovet ©   (31.07.17 01:10[21]

> [18] Германн ©   (28.07.17 01:44)
> Какие порты и провода?

Я думаю, Костя говорил о портах микроконтроллеров. Зачем на микроконтроллере полностью реализовывать спецификацию RS-232 со всеми служебными сигналами и тратить на это порты микроконтроллера и провода в кабеле связи. (?)


Германн ©   (31.07.17 01:38[22]


> Inovet ©   (31.07.17 01:10) [21]
>
> > [18] Германн ©   (28.07.17 01:44)
> > Какие порты и провода?
>
> Я думаю, Костя говорил о портах микроконтроллеров.

Я тоже так думаю. Но rrrrr © задал дурацкий вопрос

> rrrrr ©   (20.07.17 12:10) [4]
>
> из проводков земля rx и тх ?
>
> а нафига тогда железный флоуконтрол включен (судя по логу)
> ?

Я ему ответил.


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо