功能:实现电脑与读头的485通讯协议。 
  输入:port为串口号。 
     jh为机号。 
     cmd为命令字。 
     sfile固定为nil(0)。 
     sbuf为指向发送数据包的指针。 
     slen为发送数据包长度。 
     rfile固定为nil(0)。 
     timeout固定为0。 
  输出:函数返回0,表示通讯成功;其它见。 
     stat返回命令执行结果,0表示成功,其它见错误代码表。 
     rbuf为指向接收数据包的指针。 
     rlen为接收数据包长度。 
  例子:以下假设读头机号12,串口号1。 
     (1)命令字0x02用于检测读头。 
      var rt:Integer; 
        stat,rlen:Integer; 
        rbuf:array[1..16] of Char; 
      begin 
       rt:=PC_Call_C(1,12,2,nil,'',0,stat,nil,@rbuf,rlen,0); 
       if (rt=0) then rt:=stat; 
       if rt=0 then Application.MessageBox('检测到读头') 
       else Application.MessageBox('未检测到读头'); 
      end; 
     (2)命令字0xa8用于检测读头上是否刷过卡。 
      var rt:Integer; 
        stat,rlen:Integer; 
        rbuf:array[1..16] of Char; 
      begin 
       rt:=PC_Call_C(1,12,$a8,nil,'',0,stat,nil,@rbuf,rlen,0); 
       if (rt=0) then rt:=stat; 
       if rt=0 then Application.MessageBox('检测到卡片') 
       else Application.MessageBox('未检测到卡片'); 
      end; 
     (3)命令字0xa9用于读取读头上刷卡卡号。 
      var rt:Integer; 
        stat,rlen:Integer; 
        rbuf:array[1..16] of Char; 
        id:Integer; 
      begin 
       rt:=PC_Call_C(1,12,$a9,nil,'',0,stat,nil,@rbuf,rlen,0); 
       if (rt=0) then rt:=stat; 
       if (rt=0) then 
       begin 
        PChar(@id)[0]:=rbuf[3]; 
        PChar(@id)[1]:=rbuf[2]; 
        PChar(@id)[2]:=rbuf[1]; 
        PChar(@id)[3]:=rbuf[0]; 
       end; 
       if rt=0 then Application.MessageBox('读取卡号为'+InttoStr(id),'信息') 
       else Application.MessageBox('未检测到卡片','信息'); 
      end; 
//===============================以上是方法
第一个方法是用来检测读头是否存在的.我知道写在按钮事件下就行.
第二个是检测是否有卡片的.小弟就不知道写在什么事件下了.因为我不知道什么时候刷卡啊.
第三个也是同样的.我不知道什么刷卡.所以不知道事件写在什么地方.当我刷卡的时候我如何触发那个事件啊.帮帮忙.真心求助的