我把原程序发给大家看看,由于我临时学vb为客户写一个接口,幼稚之处请不要见笑
Private Declare Function vbOpenIrCom Lib "IrLib.dll" (ByVal nport As Integer, ByVal nBaud As Long) As Integer
Private Declare Sub CloseIrCom Lib "IrLib.dll" ()
Private Declare Function vbReadIrCom Lib "IrLib.dll" (ByVal str As String) As Integer
Private Declare Sub WriteIrCom Lib "IrLib.dll" (ByVal str1 As String)
Dim D1, D2 As String
Dim i, nChar, nCount As Integer
Dim SequenceNo As Long
Dim wChecksum As Long
Dim cRet, reTry As Byte
Dim buffer As String
Dim ACK As String
Dim NAK As String
Dim OVER As String
Dim szBuf As String
Private Sub Command1_Click()
Dim flag1, flag2 As Boolean
flag1 = False
flag2 = True
SequenceNo = 0
wChecksum = 0
If vbOpenIrCom(1, 115200) <> 0 Then
Call WriteIrCom("READ" + Chr(13))
nCount = vbReadIrCom(buffer)
If buffer <> ACK Then
Call WriteIrCom(NAK)
Else
flag1 = True
End If
second:
If flag1 Then
While (flag2)
first:
nCount = vbReadIrCom(buffer)
If buffer = OVER Then
flag2 = False
GoTo second
End If
If Asc(Mid(buffer, 1, 1)) <> SequenceNo Then
Call WriteIrCom(NAK)
GoTo first
End If
For i = 1 To nCount
wChecksum = wChecksum + Asc(Mid(buffer, i, 1))
Next i
wChecksum = wChecksum - Asc(Mid(buffer, Len(buffer), 1))
wChecksum = wChecksum - Asc(Mid(buffer, (Len(buffer) - 1), 1))
D1 = Chr(wChecksum \ 256)
If D1 = Chr(13) Then
D1 = Chr(Asc(D1) + 1)
End If
D2 = Chr(wChecksum Mod 256)
If D2 = Chr(13) Then
D2 = Chr(Asc(D2) + 1)
End If
If D1 <> Mid(buffer, Len(buffer), 1) Or D1 <> Mid(buffer, (Len(buffer) - 1), 1) Then
WriteIrCom (NAK)
GoTo first
End If