希望RFID供应商能提供一个控件(RFIDControl),供我们的程序调用,我们编写的程序将安装在” RFID服务器” 上,每台” RFID服务器”要管理120~150台RFID读卡机.
注: ” RFID服务器”是指控制一些RFID读卡机的一台电脑。
RFIDControl控件至少提供这些功能:
    <1>当有RFID读卡机连接到” RFID服务器”上时能立即侦测到。
    <2>当有RFID读卡机断开与” RFID服务器”连接时能立即侦测到。
    <3>当有RFID读卡机读TAG时,能立即侦测到,并能发送给RFID读卡机一个消息,让RFID读卡机做出一种反应(eg:表示” RFID服务器”是否处理成功的声音提示和文字提示)。
    <4>能向某台RFID读卡机上的TAG中写数据,并能返回一个写的状态信息(eg:表示是否写成功.成功写入返回一个标志,写失败也返回一个标志)。
    <5>能在VB.net2005开发环境中正常调用及使用该控件。
<6>由于一台” RFID服务器”控制120~150台RFID读卡机,当这些读卡机可能同时读卡并向” RFID服务器”发送消息时,要处理好消息排队问题,不要发生数据丢失,并尽量减少延迟时间。控件(RFIDControl)具体要求描述:
1.要求提供的事件
  a.   RFID读卡机与” RFID服务器”建立连接时触发
ConnectionEvent (byval  e as Eventargs)
  参数Eventargs的数据类型如下:
    public class Eventargs
        public IP as string    ‘读卡机的IP地址
        public CurDate as date ‘当前日期 yyyy-MM-dd HH:mm:ss
        public Flag as integer  ‘标志 eg: 0 成功; -1 …….
    end class
b. RFID读卡机与” RFID服务器”断开连接时触发
DisconnectionEvent (byval  e as Eventargs)
c. RFID读卡机读取TAG时触发
ReadDataEvent(byref  Result as Integer,  byref ResultStr as string,  byval e as DataEventargs)
  参数DataEventargs的数据类型如下:
      Public class DataEventargs
        public IP as string      ‘RFID读卡机的IP地址
        public CurDate as date  ‘当前读卡日期 yyyy-MM-dd HH:mm:ss
        public CardNo as string ‘TAG 的唯一编号
        public Data as Object   ‘当前读取的数据
        public Flag as integer   ‘卡机读取TAG时引发的标志 eg: 0 成功; -1 …….
      End class
      Result:  传给RFID读卡机的指令,表示” RFID服务器”是否处理成功的标志,用来指示读卡机的声音提示。
      ResultStr:传给RFID读卡机的文本,表示” RFID服务器”处理的结果, 用来指示读卡机的文本显示提示。
注:以上三个事件,在同一时刻只能处理一个读卡机的信息,请处理好消息排队。
2.要求提供的方法:
  a. 显示地与指定RFID读卡机建立连接
 Function Connection(byval IP as string) as Integer
    参数:  IP 指定RFID读卡机的IP地址.
    返回值:建立连接返回的编号…..
 
 b. 显示地与指定RFID读卡机断开连接
Function Disconnection (byval IP as string) as Integer
    参数:  IP 指定RFID读卡机的IP地址.
    返回值:断开连接返回的编号…..
 
 c.  将数据写入指定RFID读卡机上的TAG中
Function WriteData(byval Data as TAGData) as integer
    参数:  TAGData存放写入指定RFID读卡机当前TAG上的数据
    返回值:返回写的标志…..
    Public class TAGData
      public IP as string      ‘RFID读卡机的IP地址
      public CurDate as date  ‘当前写卡日期 yyyy-MM-dd HH:mm:ss
      public CardNo as string ‘TAG 的唯一编号
      public Data as Object   ‘当前要写的数据
    End class
 d.  读取指定RFID读卡机上TAG的物理信息
    Function ReadTAG(byval IP as string  ,byref Value as TAG ) as integer
    TAG数据类型:
    Public class TAG
      public CurDate as date  ‘当前写卡日期 yyyy-MM-dd HH:mm:ss
      public CardNo as string ‘TAG 的唯一编号
      public Data as Object   ‘当前要写的数据
    End class
    返回值:表示读TAG的结果
3.要求提供以下属性:
  a.  获取当前所有与” RFID服务器”连接的RFID读卡机的集合
      Public ReadOnly  Property RFIDs as RFID( )
           Get
               Return  privateRFIDs( )
           End Get
      End Property
RFID数据类型:
      Public class RFID
           Public IP as string          ‘读卡机的IP地址
           Public CreateDate as Date   ‘读卡机与服务器建立连接的日期时间
           Public CurDate as date      ‘读卡机当前读取数据的时间
           Public Cur Data as TAGData ‘读卡机当前读取的TAG数据
           Public Flag as integer    ‘读卡机读或写TAG时产生的标志
 .RFID读卡机的一些物理数据
      End Class

解决方案 »

  1.   

    自己写了一点代码写不下去了啊,有高手看看吧
    unit WINControl1;interfaceuses
      SysUtils, Classes, Controls,IdTCPClient;type
      TEventargs = class(TObject)
      private
        FIP : string;         //读卡机的IP地址
        FCurDate : TDateTime; //当前日期 yyyy-MM-dd HH:mm:ss
        FFlag : string;       //标志 eg: 0 成功; -1
      protected
      public
      published
      end;  TDataEventargs = class(TObject)
      private
        FIP : string;         //读卡机的IP地址
        FCurDate : TDateTime; //当前日期 yyyy-MM-dd HH:mm:ss
        FCardNo : string;     //TAG 的唯一编号
        FData : string;       //当前读取的数据
        FFlag : intger;       //卡机读取TAG时引发的标志 eg: 0 成功; -1
      protected
      public
      published
      end;  TReadDataEvent = procedure (var Result : integer; ResultStr : string; e : TDataEventargs) of object;
      TConnectEvent = procedure (var e : TEventargs) of object;
      TDisConnectEvent = procedure (var e : TEventargs) of object;  TagData = class(TObject)
      private
        FIP : string;         //读卡机的IP地址
        FCurDate : TDateTime; //当前写卡日期 yyyy-MM-dd HH:mm:ss
        FCardNo : string;     //TAG 的唯一编号
        FData : string;       //当前要写的数据
      protected
      public
      published
      end;  Tag = class(TObject)
      private
        FCurDate : TDateTime; //当前写卡日期 yyyy-MM-dd HH:mm:ss
        FCardNo : string;     //TAG 的唯一编号
        FData : string;       //当前要写的数据
      protected
      public
      published
      end;  RFID = class(TObject)
      private
        FIP : string;            //读卡机的IP地址
        FCreateDate : TDateTime; //读卡机与服务器建立连接的日期时间
        FCurDate : TDateTime;    //读卡机当前读取数据的时间
        FCurData : TagData;      //读卡机当前读取的TAG数据
        FFlag : integer;         //读卡机读或写TAG时产生的标志
      protected
      public
      published
      end;  TRFIDControl = class(TObject)
      private
        FRFIDReaders : TList;
        FOnConnection : TConnectEvent;
        FOnDisConnection : TDisConnectEvent;
        FOnReadData : TReadDataEvent;
        function GetRFIDReader: TList;   //获取当前所有与" RFID服务器"连接的RFID读卡机的集合
        procedure SetRFIDReader(const Value : TList);
        procedure DoConnection(var e : TEventargs);
        procedure DoDisConnection(var e : TEventargs);
        procedure DoReadData(var Result : integer; ResultStr : string; e : TDataEventargs);
      protected
      public
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
        function Connect(const IP : string) : Integer;
        function DisConnect(const IP : string) : Integer;
        function WriteData(var Data : TagData) : Integer;
        function ReadTag(var IP : string; Value : Tag) : Integer;
      published
        property RFIDReaders : TList read GetRFIDReader write SetRFIDReader ;
        property OnConnection : TConnectEvent read FOnConnection write FOnConnection ;
        property OnDisConnection : TDisConnectEvent read FOnDisConnection write FOnDisConnection;
        property OnReadData : TReadDataEvent read FOnReadData write FOnReadData;
      end;
      
    procedure Register;implementationconstructor TRFIDControl.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
    end;destructor TRFIDControl.Destroy;
    begin
      inherited Destroy;
    end;function TRFIDControl.GetRFIDReader: TList;
    beginend;procedure TRFIDControl.SetRFIDReader(const Value : TList);
    begin
      FRFIDReaders := Value;
    end;function TRFIDControl.Connect(const IP : string): Integer;
    var
      tcpClient : TIdTCPClient;
      strList : TList;
      i : Integer;
    begin
      tcpClient := TIdTCPClient.Create(nil);
      strList := GetRFIDReader;
      i := strList.Count;
      tcpServer.
      try
        tcpClient.Connect(-1);
        result := i + 1 ;
      except
        result := 0;
      end;
    end;function TRFIDControl.DisConnect(const IP : string): Integer;
    beginend;function TRFIDControl.WriteData(var Data : TagData): Integer ;
    beginend;function TRFIDControl.ReadTag(var IP: string ; Value: Tag): Integer;
    beginend;procedure TRFIDControl.DoConnection(var e : TEventargs);
    begin
      if Assigned(OnConnection) then
        OnConnection(e);
    end;procedure TRFIDControl.DoDisConnection(var e : TEventargs);
    begin
      if Assigned(OnDisConnection) then
        OnDisConnection(e);
    end;procedure TRFIDControl.DoReadData(var Result : integer; ResultStr : string; e : TDataEventargs);
    begin
      if Assigned(OnReadData) then
        OnReadData(Result,ResultStr,e);
    end;procedure Register;
    begin
      RegisterComponents('Samples', [TWINControl1]);
    end;end.
      

  2.   

    你得用delphi for .net来编写托管代码
    否则是不兼容的
      

  3.   

    To sdzeng必须用Delphi for .net吗?如果用COM+实现可以吗?