Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как работать с ком-портом из под Delphi? 
:(
    Опции темы
ivan219
  Дата 7.10.2007, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 5
Всего: 12



На компонент есть документация в архиве.
Но пример выложу.

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  COM_Time_10ms.rar 5,07 Kb
PM MAIL ICQ   Вверх
ivan219
  Дата 7.10.2007, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 5
Всего: 12



P.S. я COM1 и COM2 соединил Nul-modem кабелем.

Это сообщение отредактировал(а) ivan219 - 7.10.2007, 10:17
PM MAIL ICQ   Вверх
Alexzz
Дата 8.10.2007, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 9.4.2007
Где: Латвия

Репутация: 1
Всего: 1



Цитата(ivan219 @ 7.10.2007,  09:30)
Ну хорошо не допонял.
В таймере свойство Interval 200 а при меньших значениях ничего не работает, тогда проблема гдето в коде.

И опять ты не понял. Всё работает. Но уменьшение интервала меньше чем 200 ничего не ускоряет. Прога продолжает работать всё так-же медленно.

Вобщем проблему решил. Отказался вообще от таймера как такового. Написал линейный алгоритм работы с устройством, в качестве задержки использовал sleep(18);. Работает нормально, быстро, почти как и родной софт.
PM WWW ICQ MSN   Вверх
ivan219
  Дата 8.10.2007, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 5
Всего: 12



Цитата(Alexzz @  8.10.2007,  12:18 Найти цитируемый пост)
И опять ты не понял.

Я про то что в гдето в коде происходит задержка.

Цитата(Alexzz @  8.10.2007,  12:18 Найти цитируемый пост)
в качестве задержки использовал sleep(18);

Тоже вареант.
Я тебе компонент дал и пример попробуй может понравится smile 
PM MAIL ICQ   Вверх
Alexzz
Дата 9.10.2007, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 9.4.2007
Где: Латвия

Репутация: 1
Всего: 1



Ну, я за эти дни уже так далеко продвинулся с этой прогой, что уже что либо менять будет значить всё это заново переписывать. Ну уж нет...
Файлик конечно гляну на досуге.
PM WWW ICQ MSN   Вверх
DonPager
Дата 10.10.2007, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Колдырь
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 28.3.2003
Где: Воронеж

Репутация: нет
Всего: 2



Alexzz,  а твой МК DSR дёргает ?
ИМХО лучше по упр сигналам отсылать чем по таймерам...


--------------------
кодер + лодырь = колдырь
PM MAIL ICQ Skype GTalk   Вверх
Alexzz
Дата 10.10.2007, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 9.4.2007
Где: Латвия

Репутация: 1
Всего: 1



Связь только по двум линиям, TX и RX через два оптрона. Нет никаких управляющих сигналов.
PM WWW ICQ MSN   Вверх
ivan219
  Дата 10.10.2007, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 5
Всего: 12



Цитата(DonPager @  10.10.2007,  00:47 Найти цитируемый пост)
 лучше по упр сигналам отсылать чем по таймерам...

Нет лучше протокол составить так чтобы дополнительные вывода не использовать.
PM MAIL ICQ   Вверх
DonPager
Дата 10.10.2007, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Колдырь
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 28.3.2003
Где: Воронеж

Репутация: нет
Всего: 2



Цитата(ivan219 @  9.10.2007,  23:38 Найти цитируемый пост)
Нет лучше протокол составить так чтобы дополнительные вывода не использовать.

протокол составить можно только если ТЫ разрабатываешь устройство. А если это уже за тебя придумали?


--------------------
кодер + лодырь = колдырь
PM MAIL ICQ Skype GTalk   Вверх
Alexzz
Дата 16.1.2008, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 9.4.2007
Где: Латвия

Репутация: 1
Всего: 1



Возвращаемся к теме.

Прогу уже успел распространить нескольким коллегам. И тут вдруг выяснилось, что моя прога не желает работать под XP. У меня самого стоит 98 и прога работает с устройством через ком-порт на ура. Но у коллег стоит ХР и прога работать отказывается, мало того, вываливается в ошибку. НО!!! Если предварительно запустить оригинальный заводской софт для устройства, то и моя прога после этого начинает корректно работать с устройством.

Вопрос: В чём разница в работе с ком-портом между 98 и ХР ?

Я пока ещё не отлаживал прогу под ХР просто потому, что ХР у меня только на ноуте но там нет ком-порта. Просто гонял прогу без подключения к порту - всё о.к.
Коллеги, у которых прога не пошла, утверждают, что по светодиодам на устройстве видно, что прога передаёт данные в устройство но нет ответа. Отсутствие ответа означает, что формат посылаемых данных не соответствует протоколу. А вот что именно, я пока не выяснил. Предполагаю что сбой происходит в момент когда я задаю конфигурацию порта. Делаю это так:
Код
  hPort := CreateFile(PChar(PortCombo.Text), GENERIC_READ + GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  DCB.DCBlength := SizeOf(DCB);
  GetCommState(hPort, DCB);
  dcb.BaudRate:=38400;
  dcb.Flags:=dcb.Flags and $CFFF;
  SetCommState(hPort, DCB);
Проверки результатов выполнения операций с портом тут не привёл чтобы они не загружали код, но на них ошибок не происходит. Все операции выполняются без ошибок. Но есть какая-то проблема при последующих операциях передачи данных в порт. Ошибок тоже не возникает, но периферийное устройство переадных данных не понимает. Либо скорость 38400 не устанавливается, либо флаги 12 и 13 не сбрасываются в 0. Хотя нет, флаги тут ни при чём, если бы они то устройство бы таки отвечало, но прога не смогла бы получить данные. А тут ответа нет вообще. Но что интересно, после запуска родного софта всё начинает работать.

Да, и ещё один момент который я смог уловить и на своём компе при отладке: Закрытие порта командой CloseHandle(hport) под ХР вызывает ошибку. Под 98 всё нормально.

Это сообщение отредактировал(а) Alexzz - 16.1.2008, 00:48
PM WWW ICQ MSN   Вверх
ivan219
Дата 16.1.2008, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 5
Всего: 12



Возможно потому что из под 98 можно осуществить прямой доступ к порту а вот XP не разрешает.
PM MAIL ICQ   Вверх
remax
Дата 18.1.2008, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

Репутация: нет
Всего: 5



Я что-то не пойму, зачем бороться с какими-то сложностями, если есть замечательный компонент TurboPower Async Professional  smile 
Работает во всех операционках. Все что только можно придумать - настраивается!

Добавлено через 13 минут и 51 секунду
Цитата(Alexzz @  16.1.2008,  00:42 Найти цитируемый пост)
у меня только на ноуте но там нет ком-порта.


Тоже не вопрос - используй преходник USB <> COM. (Такие еще в дата-кабелях к мобильникам стоят). Сделай сам или, если с электроникой не в теме, - попроси своих друзей-электронщиков.

Я пользуюсь переходником сделанным моим другом. С ним можно связаться на сайте его фирмы: Конт Электроника. Не сочтите это рекламой. smile  


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0686 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.