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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> компонент cport и работа с COM портом 
:(
    Опции темы
evgeny2k4
Дата 7.3.2009, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 4.3.2009

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



Добрый день, уважаемые!

Сразу оговорюсь, последний раз программировал под ДОСом лет 15 назад.
Для обработки информации от устройства через COM порт был выбран компонент ComPort Library от Dejan Crnila,
в принципе, наверное, это не важно.
Не могу реализовать следующую последовательность действий упрощенно:

Код

  s1s1,s1s6 : string;
  frag1,frag6 : string;

  s1s1 :=#$11+'1'+'1';
  s1s6 :=#$11+'1'+'6';

  BComPort1.WriteStr(s1s1); // отправляюю символы
  BComPort1.ReadStr(frag1, BComPort1.inBufCount()); // должен получить ответ

  BComPort1.WriteStr(s1s6); // отправляюю символы
  BComPort1.ReadStr(frag6, BComPort1.inBufCount()); // должен получить ответ


В итоге в буфер порта отправляется строка символов #$11+'1'+'1'+#$11+'1'+'6'

Объясните, неграмотному, что не так.


    
       

Это сообщение отредактировал(а) Rrader - 7.3.2009, 14:36
PM MAIL   Вверх
bartram
Дата 7.3.2009, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

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



Что конкретно вас не устраивает? В чем вопрос?


--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
evgeny2k4
Дата 7.3.2009, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 4.3.2009

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



При отправке данных #$11+'1'+'1' на устройство в ответ приходит Эхо + еще несколько символов, эту последовательность необходимо считать из буфера, и далее отправить #$11+'1'+'6'   и опять считать последовательность. Но чтения не происходит по команде
BComPort1.ReadStr(frag1, BComPort1.inBufCount()); возможно из -за того что устройство не успевает ответить на посылку данных, а какие задавать интервалы опроса из файла помощи к компоненту не очень понятно.
PM MAIL   Вверх
kami
Дата 8.3.2009, 04:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

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



Код приведен в логике работы DOS программ.

С Windows все несколько иначе.

Код

BComPort1.WriteStr(s1s1); // отправляюю символы

На самом деле "отправка" означает только то, что данные были добавлены в буфер драйвера com-порта. Следующий оператор получает управление сразу же после "перегонки" в буфер драйвера. И так как данные очень даже возможно, еще не начали передаваться на внешнее устройство, оно (устройство) молчит.
Соответственно,
Код

BComPort1.ReadStr(frag1, BComPort1.inBufCount()); // должен получить ответ

просто возвращает пустую строку (ведь в приемном буфере порта ничего нет), и управление переходит следующему оператору, который "вдогонку" отправляет устройству еще одну команду.
Вполне возможно, что "по дороге" отправленные данные склеятся друг с другом, и неизвестно, как к этому отнесется устройство.

В cport (не использую этот компонент) должны быть события типа OnRead (что-то пришло из порта) и OnWrite (можно писать в порт - он готов к передаче данных). Логику обмена с устройством нужно основывать именно на этих событиях.
Причем, желательно не забывать, что записаться в порт может не вся последовательность (а, к примеру, 2 символа из 3-х) но это скорее всего произойдет при интенсивном обмене. Для простой задачи про это можно "забыть". То же можно сказать и про прием. Данные придут в нужном порядке, но вот за сколько событий OnRead - это неизвестно. Поэтому получаемые данные нужно накапливать в своем буфере, и обрабатывать их именно с учетом возможного "неполного прихода".
PM MAIL WWW   Вверх
evgeny2k4
Дата 12.3.2009, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 4.3.2009

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



Спасибо, за ответ. Так оно и есть.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

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

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

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

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

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


 




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


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

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