知道感应卡的通讯协议 怎样利用DELPHI控件来读写感应卡上的数据啊 求教啊 哪个大哥能提供一下这方面的技术支持啊 感激不尽

解决方案 »

  1.   

    procedure TForm1.Button3Click(Sender: TObject);   //发送字节数组(按照通信协议的命令发送数据var
    buf:array[0..7] of Byte;begin
    if comm1.PortOpen then
    begin
    buf[0]:=$ff;
    buf[1]:=$07;
    buf[2]:=$55;
    buf[3]:=$20;
    buf[4]:=$03;
    buf[5]:=$08;
    buf[6]:=$18;
    buf[7]:=$61;
    comm1.RThreshold:= ;
    form1.comm1.output:=buf;
    其中 FF07552003081861 是rs232中通信协议格式,数据是16进制数句,我的Inputmodle 是设置成2进制传输模式的我是这么将16进制的数据存在字节数组里,然后发送到缓冲区里去,可我的发卡器怎么会没有响应呢,是什么原因啊,哪位大哥知道提醒下 我的这种做法对不对啊???呜呜呜 
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
        mByteAry: array of Byte;
        mIn :array of Byte ;
    begin
       Comm1.CommPort:=1;
       Comm1.InBufferSize:=1024;
       Comm1.OutBufferSize:=1024;
       Comm1.Settings:='9600,N,8,1';
       Comm1.InputLen:=0;
       Comm1.InBufferCount:=0;
       if not comm1.PortOpen then Comm1.PortOpen:=True;
       comm1.RThreshold:=7;
        //构造上位机报文
       SetLength(mByteAry,7);
       mByteAry[0]:=$ff;//地址位
       mByteAry[1]:=$06; //指令长度
       mByteAry[2]:=$11;//读卡
       mByteAry[3]:=$01; //块地址
       mByteAry[4]:=$00; //偏移量
       mByteAry[5]:=$04;//长度
       mByteAry[6]:=$06 xor $11 xor $01 xor $00 xor $04;  //校验位
        //发读第一区的命令
        Comm1.Output := mByteAry;
        //等待读卡机的应答信息
        Sleep(300);
        if Comm1.InBufferCount <> 7 then
        begin
            memo1.Lines.add('下位机不应答,没有卡放入');
            label2.Caption := '00000';
            Exit;
        end;
        //将下位机报文接受到缓冲区
        showmessage(inttostr(Comm1.InBufferCount));
        SetLength(mIn,Comm1.inBufferCount);
         mIn := Comm1.Input; //运行到此处总显示错误信息:InValid  argument  请问是什么原因?
         memo1.Lines.add(chr(mIn[2]));
         memo1.Lines.add(chr(mIn[3]));
         memo1.Lines.add(chr(mIn[4]));
         memo1.Lines.add(chr(mIn[5]));
         //程序运行时总会触发ComEVFrame:1004错误(硬件检测到帧错误!)请问是什么意思?
    end;