Перейти к содержанию
    

Виртуальный com порт и VaComm

МК+FT232 непрерывно отправляет байты, скорость 38400. На стороне ПК приложение на Delphi соответственно должно их принимать. Пока в приложении одна кнопка, которая запускает передачу со стороны МК и счетчик принятых символов. Первые 1200 символов приходят нормально, потом светодиод на FT232 гаснет, передача с МК останавливается, счетчик символов начинает тормозить, приходит где-то 5 символов в секунду (вопрос, откуда, если передача остановлена?). Такое ощущение, что переполняется какой-то буфер, только почему останавливается передача? С терминальной программой все отлично работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если данные не вычитывать из буфера, а только считать их количество, то буфер переполнится. Расскажите, как организован приём в приложении.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если данные не вычитывать из буфера, а только считать их количество, то буфер переполнится. Расскажите, как организован приём в приложении.

procedure TForm1.VaComm1RxChar(Sender: TObject; Count: Integer);
var
  tmp: char;
  OK: boolean;
  begin
  OK:=VaComm1.ReadChar(tmp);
   if OK then
   begin
   count_Rx:=count_Rx+1;
   Label1.Caption:=IntToStr(count_Rx);
   end;
  end;

Дело в том, что все это работало с невиртуальным com. В настройках VaComm менял размеры буферов, все также останавливается после 1200 символов.

Настройки компонента VaComm:

post-44202-1298292931_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

После запуска передачи со стороны приложения МК сам шлёт данные или приложение постоянно их запрашивает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Получается, что МК не знает, ушли данные или нет и если он перестаёт их отсылать, значит проблема где-то в программе МК. Разве только VaComm не начинает слать спустя 1200 байт в МК строку типа "Evaluation period...", что может "затыкать" контроллер, но я сомневаюсь. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Получается, что МК не знает, ушли данные или нет и если он перестаёт их отсылать, значит проблема где-то в программе МК. Разве только VaComm не начинает слать спустя 1200 байт в МК строку типа "Evaluation period...", что может "затыкать" контроллер, но я сомневаюсь. sm.gif

В МК проблемы нет. Сделал непрерывную передачу одного символа. Прога на Delphi также тормозит после 1200 символа, хотя мк продолжает передавать (смотрел осцилом).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот из-за таких людей другие люди и грешат на Дельфи.

Вы, во-первых, неправильно используете компонент.

Во-вторых, такие компоненты пишут дебилы. Оборачивают 4 вызова функций API в черт знает во что.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы, во-первых, неправильно используете компонент.

Я знаю, может, Вы мне подскажете, как правильно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ситуация улучшилась, когда в диспетчере поменял время ожидания с 16 до 1мс. Теперь передает около 3000 символов. Что еще можно предпринять?

post-44202-1298370912_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну для начала обратить внимание, что в VaComm1RxChar передаётся некая Count... Быть может, она не равна 1...

 

--

 

Эта статья уныла чуть менее чем полностью. Читать стоит это: Serial Communications in Win32 (в сети есть переводы на русский).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поставил переходник на CP2102 - работает. Хотелось бы оставить ПО, которое уже есть. Скорее всего, буду ставить CP.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вам же SysRq уже прозрачно намекнул, в чём может быть дело.

procedure TForm1.VaComm1RxChar(Sender: TObject; Count: Integer);
var
  tmp: char;
  i : integer;
begin
  for i := 1 to Count do
  begin
    if VaComm1.ReadChar(tmp) then
    begin
      ...
    end;
  end;
end;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...