Function ReedCard() MSComm1.CommPort = 1 ' MSComm1.Settings = "19200,N,8,1" ' MSComm1.InputLen = 0 On Error Resume Next MSComm1.PortOpen = True MSComm1.Output = Chr(&HAA) & Chr(&HBB) & Chr(&H6) & Chr(&H0) & Chr(&H0) & Chr(&H0) & Chr(&H1) & Chr(&H2) & Chr(&H52) & Chr(&H51) ' . "" . hex sleep (0.1) ' , ( ) Answer = MSComm1.Input MSComm1.Output = Chr(&HAA) & Chr(&HBB) & Chr(&H5) & Chr(&H0) & Chr(&H0) & Chr(&H0) & Chr(&H2) & Chr(&H2) & Chr(&H0) ' . , — . , ASCII- sleep (0.1) Answer = MSComm1.Input Dim ReadPort As String If Len(Answer) > 10 Then ' , 14- . , , 5 . , >10, Dim a: a = s2a(Answer) 'StringToArray-. 14 [14] Dim i For i = 0 To UBound(a) a(i) = Right(0 & Hex(Asc(a(i))), 2) ' "" - ASCII-. , ascii- hex Next ReadPort = Join(a) MSComm1.Output = Chr(170) & Chr(187) & Chr(6) & Chr(0) & Chr(0) & Chr(0) & Chr(6) & Chr(1) & Chr(7) & Chr(0) ' , "" :) .. ( , , ) '''' , . : AA BB CC DD -> 2864434397. , — . End If MSComm1.PortOpen = False End Sub Function s2a(s) ReDim a(Len(s) - 1) Dim i For i = 0 To UBound(a) a(i) = Mid(s, i + 1, 1) Next s2a = a End Function Sub sleep(sk) PauseTime = sk Start = Timer Do While Timer < Start + PauseTime Loop End Sub
それほど難しくありません。 しかし問題は、このVBコードをMS-DOSのPascalに移植する必要があるということでした。 私はこれに数日間苦労しましたが、これらのコマンドをCom-portリーダーに送信しても、生命の兆候は見られませんでした。 次に、これを最初に「ネイティブ」言語で実装することにしました-C#。 私も汗をかかなければなりませんでしたが、最終的に私はキーが何であるかを理解しました!
serialPort1.Open(); serialPort1.Write(((char)0xAA) + "" + ((char)0xBB) + "" + ((char)0x6) + "" + ((char)0x0) + "" + ((char)0x0) + "" + ((char)0x0) + "" + ((char)0x6) + "" + ((char)0x1) + "" + ((char)0x7) + "" + ((char)0x0)); serialPort1.Close();
上記のコードは正しくありません。 私はしばらくの間彼と実験したが、彼は働きたくなかった。 引用符を削除しました。 .ToString()が追加されました。 そして彼はポートにキャラクターを書きました。 なし。 そして、突然それは夜明けしました:
serialPort1.Open(); byte[] ar = new byte[10]; ar[0] = 170; ar[1] = 187; ar[2] = 6; ar[3] = 0; ar[4] = 0; ar[5] = 0; ar[6] = 6; ar[7] = 1; ar[8] = 7; ar[9] = 0; serialPort1.Write(ar, 0, ar.Length); serialPort1.Close();
そしてうまくいきました! これをPascalに転送するだけです。
var ar: array of Byte[10]; begin OpenCom (ComNo, B_19200, Bits_8+Stops_1+Parity_No, 2048); ar[0]:=170; ar[1]:=187; ar[2]:=6; ar[3]:=0; ar[4]:=0; ar[5]:=0; ar[6]:=6; ar[7]:=1; ar[8]:=7; ar[9]:=0; for i:=0 to 10 do begin WriteCom(ComNo,ar[i]); end;
上記のコードにより、読者は「ピクルス」になります。 さらに、すべてを自分でやり直すのは非常に簡単です。
PSこの問題に関する情報はruセグメントにはまったく見つかりませんでしたが、英語では穀物があります。 中国のカードリーダーの例を使用して、RS232の操作に関する情報を収集しました。 誰かが助けてくれることを願っています。 頑張って