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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.08.2013, 19:37   #11
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

а файл не создает потомучто запись в програмфайл не канает
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 25.08.2013, 19:59   #12
Zadovatel
Пользователь
 
Регистрация: 25.08.2013
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Slym Посмотреть сообщение
а файл не создает потомучто запись в програмфайл не канает
Вот здесь вы ошибаетесь.Фаил не создавался по другой причине.Если com порт открыт другим приложением,то создать класс с номером этого порта не получалось.Отсюда и не предсказуемое поведение программы.А так создавать файлы в данную папку получается.

Последний раз редактировалось Zadovatel; 25.08.2013 в 21:57.
Zadovatel вне форума Ответить с цитированием
Старый 25.08.2013, 21:44   #13
Zadovatel
Пользователь
 
Регистрация: 25.08.2013
Сообщений: 46
По умолчанию

Об устройстве ничего не известно(в глаза его не видел).С AT командами я разобрался,правда не в hyperterminal.По поводу утечек памяти и общей реализации проекта.Все тонкости будут дорабатываться позднее.Мне нужно научиться отправлять/читать данные с порта.На сегодняшний момент у меня получилось открыть/закрыть порт.К сожалению,help фаил под старую версию(2.6),а я сейчас использую 3.1.Схематично это должно выглядить примерно так?
пишем строку в порт
ждем событие(какое?)
читаем строку из порта
Нужны ли еще какие-то операции,как например чистка различных буферов?
Zadovatel вне форума Ответить с цитированием
Старый 25.08.2013, 22:23   #14
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
Об устройстве ничего не известно(в глаза его не видел).
тогда как вы можете утверждать, что оно нестандартное и как то отвечает или не отвечает на определенные АТ-команды?

Цитата:
С AT командами я разобрался,правда не в hyperterminal.
А гипертерминал приведен как пример сторонней стандартной утилиты в качестве независимой экспертизы от вашего "ПО".

Цитата:
По поводу утечек памяти и общей реализации проекта.Все тонкости будут дорабатываться позднее
у вас не просто утечки памяти, у вас полное непонимание использования имеющихся оберток. Откройте наконец-то справку к компоненту, если некогда MSDN изучать.

Цитата:
К сожалению,help фаил под старую версию(2.6),а я сейчас использую 3.1
не имеет значения.

Цитата:
Нужны ли еще какие-то операции,как например чистка различных буферов?
поскольку при каждом обращении к порту вы работаете из нового экземпляра класса tcomport и порт закрываете, то нет, если закрыть глаза на утечки и использование VCL в потоке, и опять же, если закрыть снова глаза на то, что у данной обертки есть свой поток чтения, своя нить обработки приема с порта.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 25.08.2013 в 22:26.
raxp вне форума Ответить с цитированием
Старый 26.08.2013, 00:24   #15
Zadovatel
Пользователь
 
Регистрация: 25.08.2013
Сообщений: 46
По умолчанию

Ладно,если уж пошла такая пляска.Вся реализация протикает в службе,отсюда и потоки(OnStart - создаем,onStop - уничтожаем).Справку я уже почти на изусть вызубрил,толку мало,так как в большинстве случаев там не описываются параметры,некоторые свойства просто отсутствуют.В итоге по справке уничтожение класса происходит X.Free,а на практике в новой версии X.Destroy.Так как процедура Free физически отсутствует.Вы сами конкретно с этим компонентом работали?Если да,то приведите пожалуйста пример чтения/записи.На всякий случай прикрепил сам компонент,может кто разберется.
Вложения
Тип файла: zip cport-3.10.zip (201.7 Кб, 10 просмотров)

Последний раз редактировалось Zadovatel; 26.08.2013 в 00:30.
Zadovatel вне форума Ответить с цитированием
Старый 26.08.2013, 01:56   #16
Zadovatel
Пользователь
 
Регистрация: 25.08.2013
Сообщений: 46
По умолчанию

После 3 часов ковыряния в справке компонента и примерах работы с COM портом с использованием WinAPI получилось наковырять блок инициализации параметров СOM порта и таймаутов.Не знаю,доведу ли я затею до конца,так что для будущих поколений:
Код:
//Задаем параметры COM порта и устанавливаем таймауты
 with ComPort1 do
 begin
    Port := 'COM5';          {Номер порта}
    BaudRate := br115200;     {Скорость в бодах}
    DataBits := dbEight;      {Кол-во бит в байте}
    Parity.Bits := prNone;    {Отключаем проверку четности}
    StopBits := sbOneStopBit; {Число стоповых битов}
    timeouts.ReadInterval:=50;
    timeouts.ReadTotalMultiplier:=15;
    timeouts.ReadTotalConstant:=1;
    timeouts.WriteTotalMultiplier:=15;
    timeouts.WriteTotalConstant:=1;
    end;
Zadovatel вне форума Ответить с цитированием
Старый 26.08.2013, 01:57   #17
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Код:
какая разница какой он компонент возьмет, если он не знает как с ними обращаться в потоках
Во всяком случае с тем, что я советовал ему не нужно будет соваться в доппотоки.
northener вне форума Ответить с цитированием
Старый 26.08.2013, 08:49   #18
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
Во всяком случае с тем, что я советовал ему не нужно будет соваться в доппотоки.
все обертки почти одинковы. Да вы почитайте, справку TC вызубрил, а собственное событие приема данных OnRxChar() модуля упустил из виду, а оно срабатывает из собственного потока (нити) обертки.

Раз уж работа осуществляется в службе, как уточнил TC, то асинхронная запись и чтение оправданы, однако тут можно было обойтись и непосредственной работой с портом без оберток, впрочем - неважно, TC удобней через компонент, пусть будет компонент. Но вот все остальные фиксы по коду, что озвучены выше, нужно решить.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 26.08.2013, 13:07   #19
Zadovatel
Пользователь
 
Регистрация: 25.08.2013
Сообщений: 46
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
все обертки почти одинковы. Да вы почитайте, справку TC вызубрил, а собственное событие приема данных OnRxChar() модуля упустил из виду, а оно срабатывает из собственного потока (нити) обертки.

Раз уж работа осуществляется в службе, как уточнил TC, то асинхронная запись и чтение оправданы, однако тут можно было обойтись и непосредственной работой с портом без оберток, впрочем - неважно, TC удобней через компонент, пусть будет компонент. Но вот все остальные фиксы по коду, что озвучены выше, нужно решить.
За RxChar спасибо.
Нашел вот такую процедуру:
procedure WaitForEvent(var Events: TComEvents; StopEvent: TEvent; Timeout: Integer);
С первым и последним параметрами все вроде ясно,а вот со вторым не понятка.Цитата из help файла :
Цитата:
StopEvent parameter is Win API event that cancels wait operation if application turns it on.
Я так понимаю,что здесь мне нужно подключить модуль windows,создать экземпляр класса TEvent.А вот что дальше не ясно.Какой флаг записать в этот класс?
Zadovatel вне форума Ответить с цитированием
Старый 26.08.2013, 19:21   #20
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Код:
var
  ComPort: TComPort;
  Events: TComEvents;
 
begin
  ComPort := TComPort.Create(nil);
  try
    ComPort.Events := [];  // do not create monitoring thread
    ComPort.Open;  // open port
    Events := [evCTS, evDSR, evRLSD];  // define events to wait for
    ComPort.WaitForEvents(Events, nil, WaitInfinite);  // wait until at least one event happens
    if evCTS in Events then
 
      WriteLn('CTS Changed');  // CTS signal changed state
    ComPort.Close;  // close port
  finally
    ComPort.Free;
  end;
end;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как работать с компонентом CPort Yrok Компоненты Delphi 27 27.06.2012 10:02
Перевод в постфиксную форму в общем случае. Lasur Помощь студентам 1 17.03.2012 09:16
Компонент CPort ? z-wer Компоненты Delphi 1 29.06.2011 08:51
Автосохранение книги в общем доступе Chelentano Microsoft Office Excel 0 25.08.2009 13:10