реклама на сайте
подробности

 
 
> Подскажите d2xx и FT232R, настроить события в Delphi
Lexx_kvv
сообщение Feb 15 2008, 16:24
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 15-02-08
Пользователь №: 35 073



Добрый вечер!

Помогите пожалуйста разобратся с передачей данных через USB с использованием D2XX.
Не могу понять как построить программу, что бы по приходу данных во входной буфер выполнялось его считывание. В инфе прочитал о функции "FT_SetEventNotification" которой можно задавать различные условия, Ну отдуплить как реализовать не могу.

Подскажите хоть небольшим примером. Пожалуйста натолкните на путь истинны. 07.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Lexx_kvv
сообщение Feb 18 2008, 08:28
Сообщение #2





Группа: Новичок
Сообщений: 8
Регистрация: 15-02-08
Пользователь №: 35 073



Не, как бы все понятно, но и втоже время нет. Как это все работает мне кажется я разобрался но программу составить не могу. Привожу пример моего использования USB?: по нажатию одной кнопки запрашиваю данные о производителе и серийном номере, по нажатию второй начинаю прием данных с порта. Данные в порт приходят, пакетом из 8 байт, каждые 0,5 с. Хотелось бы не просто каждые 0,5 секунды отсчетом таймера заходить и забирать данные, а вызывать событие которое будет обрабатыватся отдельной процедурой.

МОЖЕТ Я ИДИОТ И МНЕ НУЖНО ИЗУЧАТЬ МАТЧАСТЬ 07.gif

Код
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Grids, TeEngine, Series, TeeProcs, Chart,
  AxCtrls, OleCtrls, VCF1,D2XXUnit;

type
  TForm1 = class(TForm)
    Button2: TButton;
    Button4: TButton;
    Memo: TMemo;
    procedure LoadClick(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);


  private
    { Private declarations }
  public

    { Public declarations }
  end;

var
  Form1: TForm1;
  temp: string;
  tmp,I:  integer;
  Serial_Number : String;
  Description : String;
  Device_Location:DWord;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
var
  s:string;
  deviceindex:integer;
begin
  GetFTDeviceCount;                           {Количество FT устройств}
  S := IntToStr(FT_Device_Count);
  DeviceIndex := 0;
  GetFTDeviceDescription ( DeviceIndex );
  Description:=FT_Device_String;
  Memo.Lines.Add('Устройство - '+FT_Device_String);
  GetFTDeviceSerialNo( DeviceIndex );
  Serial_Number:=FT_Device_String;
  Memo.Lines.Add('Серийный Номер - '+FT_Device_String);
  GetFTDeviceLocation(DeviceIndex);
  Device_Location:=FT_Device_Location;

  Memo.Lines.Add('Место подключения - '+IntToStr(Device_Location));

end;

procedure TForm1.Button4Click(Sender: TObject);
var
  z,IL:integer;
  s:byte;
  slovo:string;
begin
  If Open_USB_Device_By_Serial_Number(Serial_Number) = FT_OK then
      Begin
    Repeat
    z:=Read_USB_Device_Buffer(8);
    str(z,temp);
    memo.Lines.add(temp);
    if z>0 then
           begin
                slovo:='';
                for IL:=0 to 8 do begin s:=FT_IN_BUFFER[IL];
                temp:=chr(s);
                slovo:=slovo+' '+temp;
                end;
                memo.Lines.add(slovo);
           end;
   Until z = 0;
   Close_USB_Device;
      End
      else
      Begin
        Memo.Lines.Add('Ошибка открытия USB устройства')
      End;
end;
END.
Go to the top of the page
 
+Quote Post
KRS
сообщение Feb 18 2008, 08:53
Сообщение #3


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(Lexx_kvv @ Feb 18 2008, 11:28) *
Не, как бы все понятно, но и втоже время нет. Как это все работает мне кажется я разобрался но программу составить не могу. Привожу пример моего использования USB?: по нажатию одной кнопки запрашиваю данные о производителе и серийном номере, по нажатию второй начинаю прием данных с порта. Данные в порт приходят, пакетом из 8 байт, каждые 0,5 с. Хотелось бы не просто каждые 0,5 секунды отсчетом таймера заходить и забирать данные, а вызывать событие которое будет обрабатыватся отдельной процедурой.


VCL умеет обрабатывать только виндоватые message. Поэтому вам надо его сгенерировать PostMessage из своей нити, как я уже писал. ( в принципе можно и SendMessage, но можно обрести гемор...)

Есть еще путь подправить основной цикл обработки сообщений
это гдето в TApplication.Idle заменить WaitMessage на MsgWaitForSingleObject....
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Lexx_kvv   Подскажите d2xx и FT232R   Feb 15 2008, 16:24
- - KRS   Цитата(Lexx_kvv @ Feb 15 2008, 19:24) Не ...   Feb 15 2008, 17:52
- - Lexx_kvv   То есть, если я правильно понял, при поступлении д...   Feb 15 2008, 20:02
|- - KRS   Цитата(Lexx_kvv @ Feb 15 2008, 23:02) То ...   Feb 16 2008, 10:42
- - Lexx_kvv   Большшое спасибо за разъяснение! Но я только ...   Feb 17 2008, 08:25
|- - KRS   Цитата(Lexx_kvv @ Feb 17 2008, 11:25) -- ...   Feb 17 2008, 13:03
- - Lexx_kvv   Из приведенных примеров и других нетовскиъх форумо...   Feb 18 2008, 13:58
|- - KRS   Цитата(Lexx_kvv @ Feb 18 2008, 16:58) Или...   Feb 18 2008, 14:15
- - Lexx_kvv   Это я понял, но как я могу посылать сообщения если...   Feb 18 2008, 20:28
|- - KRS   Цитата(Lexx_kvv @ Feb 18 2008, 23:28) Это...   Feb 18 2008, 20:36
- - Lexx_kvv   При работе С Delphi7 был компонент COM, который об...   Feb 19 2008, 06:32
- - KRS   Выдрал из свего старого проекта. уже много лет на ...   Feb 19 2008, 11:54
- - Lexx_kvv   Большое спасибо! Буду разбирать. Пока удалось ...   Feb 20 2008, 15:26
- - Седой   Возможно, поможет http://projects.caxapa.ru/index...   Feb 20 2008, 21:31


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th June 2025 - 02:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.01368 секунд с 7
ELECTRONIX ©2004-2016