Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.09.2021, 00:47   #1
aha
Пользователь
 
Регистрация: 17.04.2010
Сообщений: 29
По умолчанию Работа с COM портом

использую компонент TComport Library от Dejan Crnila.
я шлю дивайсу с компьютера некоторые данные, дивайс тихоходный, при заполнении буфера, дивайс выдает сигнал, я этот сигнал перехватываю и использую коды 17 19, xon xoff для сообщения компорту.
после этого компорт перестает передавать данные, но моя программа не видит, что компорт не передает, продолжает в цикле передавать. Как мне определить и потом возобновить передачу ?
aha вне форума Ответить с цитированием
Старый 05.09.2021, 00:52   #2
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Цитата:
Сообщение от aha Посмотреть сообщение
Как мне определить и потом возобновить передачу ?
Вы бредите? Ваша программа перехватывает сигнал? Ваша программа останавливает компорт? И как же она при этом не знает, что компорт остановлен?
northener вне форума Ответить с цитированием
Старый 05.09.2021, 00:58   #3
aha
Пользователь
 
Регистрация: 17.04.2010
Сообщений: 29
По умолчанию

я вижу по реакции моей программы , предположим в цикле моя программа шлет через компорт 100 байтов в секунду, после получения от дивайса кода 19 , программа начинает тормозить раз в 10 при этом через компорт на дивайс ничего не уходит, осцилографом наблюдаю..
порт при этом открыт, и никакие ошибки не появляются ...мне нужно , чтобы моя программа видела и приостановила передачу , иначе данные пропадают...

Последний раз редактировалось aha; 05.09.2021 в 01:01.
aha вне форума Ответить с цитированием
Старый 05.09.2021, 01:47   #4
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Ага. Значит код 19 шлет таки дивайс. Так что тогда такое "моя программа"?
Может код этой "вашей" программы приведете?
northener вне форума Ответить с цитированием
Старый 05.09.2021, 01:48   #5
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

удалено
northener вне форума Ответить с цитированием
Старый 05.09.2021, 02:00   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Добавлю. Если дивайс умеет управлять потоком приема/передачи с помощью команд xon/xoff, значит как минимум "ваша" программа на компьютере должна работать в дуплексном режиме. Т.е. уметь одновременно писать в порт и читать из него.
Ну а все остальные замечания только после показа кода программы.
Ну и ещё одно. Команды xon/xoff посылаются не компорту. Компорт это безмозглая железяка. Эти команды посылаются собеседнику, общающемуся по этому порту. Т.е. "вашей" программе.

Последний раз редактировалось northener; 05.09.2021 в 02:20.
northener вне форума Ответить с цитированием
Старый 05.09.2021, 07:58   #7
aha
Пользователь
 
Регистрация: 17.04.2010
Сообщений: 29
По умолчанию

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

FOR J:=1 TO LENGTH(SL) DO
begin
SB:=COPY(SL,J,1);
CP1.WriteStr(SB);
end;
так то можно контролировать прием кода #19 в цикле и приостановить передачу.
А нет ли возможности программно узнать что произошло с компортом ? Вот этот цикл, приведенный выше начинает тормозить, но на выходе компорта при этом передачи нет....
aha вне форума Ответить с цитированием
Старый 05.09.2021, 12:39   #8
stalkernet
Пользователь
 
Регистрация: 28.02.2009
Сообщений: 42
По умолчанию

Граблей много.

1 линия связи - синхронная или асинхронная(трех проводная - NullModem)
2 На чем реализован comport. аппаратно.
с осцилоскопом знаком - поймеш о чем говорю
если через плату расширения - хорошо. если через переходник -
1 если на мелкосхеме CP2XXX - выкинь. больше чем телефон свяать не годится.
2 если на FTDI(FTXXXX) Хорошо. но есть гемор с дровами на китайскую копию чипа.

теперь о протоколе - в каком фйормате идет передача данных. Бинарный или симольный(ANSI).
1 Бинарный - без управляющих кодов.
2 ANSI - значения до #23(не помню уже точно) управляющие коды передачи.

пакетная или посимвольная передача?
ну и всетаки ModBus почитать не мешает. Организация и структура кадра.

сам пользовался BCPort он сделан на основе ComPort Library от Dejan Crnila. Нареканий нет. в связке с FTDI стабильно жило в течении 5 месяцев без перезагрузки. правда под ХР.

Последний раз редактировалось stalkernet; 05.09.2021 в 12:42.
stalkernet вне форума Ответить с цитированием
Старый 05.09.2021, 19:13   #9
aha
Пользователь
 
Регистрация: 17.04.2010
Сообщений: 29
По умолчанию

com порт со стороны дивайса советский специализированный чип приема передатчика. Линия связи трехпроводная, для передачи своя, приема своя линия. Протокол символьный, и передача посимвольно.
aha вне форума Ответить с цитированием
Старый 05.09.2021, 21:53   #10
stalkernet
Пользователь
 
Регистрация: 28.02.2009
Сообщений: 42
По умолчанию BCPort

Сурово...
давненьуо про ИРППС не вспоминал. но помню - знатные грабли были. что за девайс - можно?
Если справочник по советским протоколам не выкинул - попытаюсь вспомнить.

попробуй BCPort. Почему ComPort не пользовал уже не помню.

BCPort.7z

если можно - кусок схемы с этим чипом.
stalkernet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с Com-портом Teror4uks Общие вопросы Delphi 5 10.10.2014 12:48
Работа c COM-портом doniyor Общие вопросы Delphi 12 27.07.2009 11:16
Работа с COM портом hoba Общие вопросы Delphi 3 20.11.2008 03:39
работа с COM портом ShAzat Общие вопросы Delphi 8 28.05.2008 20:08