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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2017, 01:08   #1
casus
Пользователь
 
Аватар для casus
 
Регистрация: 12.03.2013
Сообщений: 28
По умолчанию Com порт, отключить приемник на время записи

Всем добра.
Сделал электронную поделку и подключил ее к компу по одному проводу.
Грубо говоря rxd подключен к txd. Связь между поделкой и компом наладил, но в отличии от поделки не могу на компе отключать приемник во время передачи, в итоге комп принимает то что передает. Пока решил вопрос программно - принимаю данные и удаляю их, но это неправильно. Как решить этот вопрос по фэншую, т.е. не принимать.
Код:
var
    CurrentState : TComStat;
    ErrCode,
    RealRead     : Cardinal;
    Signaled,
    Mask         : DWORD;
    BytesTrans   : DWORD;
    Count        : DWORD;
    ResiveStr    : string;
    Source       : string;
  begin
    while ReadyToConnect do begin
      FillChar(Ovr, SizeOf(Ovr), 0);
      Ovr.hEvent:= CreateEvent(nil, True, True, nil);
      SetCommMask(CommHandle, EV_RXCHAR);
      WaitCommEvent(CommHandle, Mask, @Ovr);
      Signaled:= WaitForSingleObject(Ovr.hEvent, INFINITE);
      if (Signaled  = WAIT_OBJECT_0) then
        if GetOverlappedResult(CommHandle, Ovr, BytesTrans, False) then
          if (Mask and EV_RXCHAR) <> 0 then
            begin
            ClearCommError(CommHandle, ErrCode, @CurrentState);
            Count:= CurrentState.cbInQue;
            if TxEn then
              begin
                if Count >= TxSize then
                  begin
                  RxBuf:='';
                  ReadFile(CommHandle, RxBuf, Count, RealRead, @Ovr);
                  TxEn:= false;
                  Source:='';
                  end
              end else
                if Count > 0 then
                  begin
                  RxBuf:='';
                  ReadFile(CommHandle, RxBuf, Count, RealRead, @Ovr);
                  Count:=0;
                  ResiveStr:='';
                  while RealRead > Count do
                    begin
                    ResiveStr:=ResiveStr+' 0x'+IntToHex(Ord(RxBuf[Count]),2);
                    Inc(Count);
                    end;
                  Log('rx_  '+ResiveStr+'     '+RxBuf);
                  Source:=RxBuf;
                  end;
              end;
         Form1.Memo1.Lines.Add(Source);
    end;
end;
TxEn - глобальная переменная, тру пока идет передача.
Давлю тараканов

Последний раз редактировалось casus; 14.05.2017 в 01:30.
casus вне форума Ответить с цитированием
Старый 14.05.2017, 10:42   #2
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Задаём в настройках ручное управление FlowCotrol и через SetCommMask выставляем и снимаем фаг EV_BREAK. Он влияет только на вход.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 14.05.2017, 13:27   #3
casus
Пользователь
 
Аватар для casus
 
Регистрация: 12.03.2013
Сообщений: 28
По умолчанию

Спасибо огромное. А пример можно? Или ссылку где почитать?
Просто кажется перепробовал всё. Даже пробовал очищать событие приема через ClearCommError(CommHandle, ErrCode, @CurrentState);
И очищать количество байтов в приемнике CurrentState.cbInQue:=0; А приемник продолжал слушать пока открыт порт, и запоминал..
Давлю тараканов

Последний раз редактировалось casus; 14.05.2017 в 13:47.
casus вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрет записи в LPT порт Null2410 Общие вопросы .NET 1 04.06.2015 08:15
Ошибки записи в COM-порт возможны? mrMeerkat Компьютерное железо 26 12.07.2014 20:28
Как на время отключить PopupMenu? Чай_ник Помощь студентам 1 06.12.2010 03:37
Как отключить расчет ячеек во время макроса Android1 Microsoft Office Excel 4 15.09.2010 10:58
как отключить отображение изменений во время выполнения макроса? AnnNet Microsoft Office Excel 1 15.04.2009 14:43