• Andrewtitoff © (18.07.17 22:06) [0]
    Добрый вечер, тема конечно баян, но все-же попытаю счастье))
    В общем мне необходимо наладить общение по СОМ-порту(виртуальному) с самодельным устройством на 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 и тх ?
    >
    > а нафига тогда железный флоуконтрол включен (судя по логу)
    > ?

    Я ему ответил.
Есть новые Нет новых   [118444   +30][b:0][p:0.003]