初学VB,想做个通信的程序,大虾帮小弟看看,谢谢!1.发送数据(send)
通过调用此函数,完成向串口发送数据。
Public Function send(send_byte As Byte)
frmSet.MSComm1.Output = send_byte
Do
    DoEvents
Loop Until frmSet.MSComm1.OutBufferCount = 0End Function
2.接收数据(resv)
通过调用此函数,完成通过串口接收数据。
Public Function resv()
Dim resv_byte As Variant          '定义串口接收数据
Dim resv_data(0) As Byte
Do
  DoEvents
Loop Until frmSet.MSComm1.InBufferCount > 0resv_byte = frmSet.MSComm1.Input
resv = resv_byte(0)
End Function'如果调用函数,这样行不行呀
Dim resv_data(0) as Byte
 '发送170,接收170
  send(170)
  resv_data(0)=resv()
发送不用返回值,接收不用传递参数,总感觉有毛病。
由于现在没有下位机调试 不知道可行否?恳请指点。。

解决方案 »

  1.   

    下附一段代码,调试通过的,供参考:
    Option Explicit
        Dim BytReceived() As Byte
        Dim strData As String
        Dim lenInput As Integer
        Dim bytSendByte() As Byte    '发送二进制数据
        Dim strSendText As String    '发送文本数据
        Dim blnAutoSendFlag As Boolean
        Dim openFlag As BooleanPrivate Sub cmdOpen_Click()
        On Error GoTo erruser
        If openFlag Then
            cmdOpen.Caption = "打开串口"
            MSComm1.PortOpen = False '打开端口
            Timer2.Enabled = False
            Shape1.FillColor = vbRed
            Label5 = "关闭"
        Else
            cmdOpen.Caption = "关闭串口"
            Shape1.FillColor = vbGreen
            Label5 = "打开"
            MSComm1.PortOpen = True '打开端口
            If blnAutoSendFlag = True Then
                Timer2.Enabled = True
            End If
        End If
        openFlag = Not openFlag
    erruser:
    End SubPrivate Sub cmdSendHex_Click()'按2进制发送
        Dim sj() As Byte
        Dim sj_Txt As String
        Dim i As Integer
        sj_Txt = TxtSend
        'TxtSend = "800A00113135323634389794"
        ReDim sj(Len(sj_Txt) / 2 - 1)
        For i = 0 To Len(sj_Txt) - 1 Step 2
           sj(i / 2) = Val("&H" & Mid(sj_Txt, i + 1, 2))
        Next
        If MSComm1.PortOpen = True Then
            MSComm1.Output = sj
        Else
            MSComm1.PortOpen = True
            Shape1.FillColor = vbGreen
            Label5.Caption = "打开"
            MSComm1.Output = sj
        End If
    End Sub
    '字符串表示的十六进制数据转化为相应的字节串,返回转化后的字节数Private Sub cmdAutoSend_Click()
        If blnAutoSendFlag Then
            Me.Timer2.Enabled = False
            Me.cmdAutoSend.Caption = "自动发送"
        Else
            Me.Timer2.Enabled = True
            Me.cmdAutoSend.Caption = "停止发送"
    End If
        blnAutoSendFlag = Not blnAutoSendFlag
    End SubPrivate Sub cmdSendASc_Click()'按文本发送
        Dim sj_Txt As String
        sj_Txt = TxtSend
        If MSComm1.PortOpen = True Then
            MSComm1.Output = sj_Txt
        End If
    End Sub