加载中…
个人资料
晶格点阵
晶格点阵
  • 博客等级:
  • 博客积分:0
  • 博客访问:3,466
  • 关注人气:168
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

VB串口通信程序-简单的串口调试软件

(2013-06-20 20:05:05)
标签:

程序

设备

参数

代码

内容

分类: 工业控制

本人利用Visual basic 6.0编写的一个简单的,串口调试软件,以下是软件的界面:

http://s10/mw690/97b4973agdf94d96413c9&690
源代码如下:

说明:

串口选择:combox-comPort

波特率:combox-comBaud

校验位:combox-comVerify

数据位:combox-comNumBit

指示灯:shape-shpSerial
打开串口:button-btnOpenSerial

接收区:textbox-txtReceive

发送区:textbox-txtSend

消息区: textbox-txtMsg

清空接收区:button-btnClearReceive

清空发送区:button-btnClearSend

清空消息区:button-btnClearMsg

完整代码如下:

Private Sub btnClearMsg_Click()
    txtMsg.Text = "消息区:" & Chr(13) & Chr(10)
End Sub

Private Sub btnClearReceive_Click()
    txtReceive.Text = "接收区:" & Chr(13) & Chr(10)
End Sub

Private Sub btnClearSend_Click()
    txtSend.Text = "发送区:" & Chr(13) & Chr(10)
End Sub

Private Sub btnOpenSerial_Click()
On Error Resume Next
    Dim baud As String, parity As String, stopbit As String, numBit, comPortNum As Integer
    If btnOpenSerial.Caption = "打开串口" Then
        '串口选择
        Select Case comPort.ListIndex
            Case -1
                comPortNum = 0
            Case Else
                comPortNum = comPort.ItemData(comPort.ListIndex)
        End Select
        '波特率选择
        Select Case comBaud.ListIndex
            Case 0
                baud = "4800"
            Case 1
                baud = "9600"
            Case 2
                baud = "19200"
            Case 3
                baud = "38400"
            Case 4
                baud = "115200"
            Case Else
                baud = ""
        End Select
        '校验方式选择
        Select Case comVerify.ListIndex
            Case 0
                parity = "N"
            Case 1
                parity = "O"
            Case 2
                parity = "E"
            Case Else
                parity = ""
        End Select
        '停止位选择
        Select Case comStop.ListIndex
            Case 0
                stopbit = "1"
            Case 1
                stopbit = "2"
            Case Else
                stopbit = ""
        End Select
        '数据位选择
        Select Case comNumbit.ListIndex
            Case 0
                numBit = "7"
            Case 1
                numBit = "8"
        End Select
        '检查输入是否有误
        If comPortNum = 0 Then
            txtMsg.Text = txtMsg.Text + "请选择串口" + Chr(13) + Chr(10)
        End If
        If baud = "" Then
            txtMsg.Text = txtMsg.Text + "请选择波特率" + Chr(13) + Chr(10)
        End If
        If parity = "" Then
            txtMsg.Text = txtMsg.Text + "请选择校验位" + Chr(13) + Chr(10)
        End If
        If stopbit = "" Then
            txtMsg.Text = txtMsg.Text + "请选择停止位" + Chr(13) + Chr(10)
        End If
        If numBit = "" Then
            txtMsg.Text = txtMsg.Text + "请选择数据位" + Chr(13) + Chr(10)
        End If
        If comPortNum <> 0 And baud <> "" And parity <> "" And stopbit <> "" And numBit <> "" Then
            MSComm1.CommPort = comPortNum
            MSComm1.Settings = baud & "," & parity & "," & numBit & "," & stopbit
            MSComm1.InputMode = comInputModeText
            MSComm1.RThreshold = 1  '接收缓冲区每收到一个字符触发事件onComm()
            MSComm1.PortOpen = True
            If Err.Number = 8002 Then
                txtMsg.Text = txtMsg.Text + "端口不存在" + Chr(13) + Chr(10)
                MsgBox "无效的端口号", vbOKOnly, "信息"
                GoTo Label1
            ElseIf Err.Number = 8005 Then
                txtMsg.Text = txtMsg.Text + "端口被占用" + Chr(13) + Chr(10)
                MsgBox "端口被占用", vbOKOnly, "信息"
                GoTo Label1
            Else
                txtMsg.Text = txtMsg.Text + comPort.Text + "端口已打开" + Chr(13) + Chr(10)
                txtMsg.Text = txtMsg.Text + "通信参数为:" + Chr(13) + Chr(10)
                txtMsg.Text = txtMsg.Text + baud & "," & parity & "," & numBit & "," & stopbit + Chr(13) + Chr(10)
                btnOpenSerial.Caption = "关闭串口"
                shpSerial.FillColor = &HFF00&
            End If
        Else
            txtMsg.Text = txtMsg.Text + "通信参数不完整" + Chr(13) + Chr(10)
            MsgBox "通信参数不完整", vbOKOnly, "信息"
            GoTo Label1
        End If
    '关闭串口
    ElseIf btnOpenSerial.Caption = "关闭串口" Then
        MSComm1.PortOpen = False
        shpSerial.FillColor = &HFF&
        txtMsg.Text = txtMsg.Text + "端口已关闭" + Chr(13) + Chr(10)
        btnOpenSerial.Caption = "打开串口"
    End If
Label1:
End Sub

Private Sub btnSend_Click()
On Error Resume Next
    If Trim(txtSend.Text) = "" Or Trim(txtSend.Text) = "发送区:" + Chr(13) + Chr(10) Then
        txtMsg.Text = txtMsg.Text + "请输入发送内容" + Chr(13) + Chr(10)
        MsgBox "请输入发送内容", vbOKOnly, "信息"
        Exit Sub
    End If
    MSComm1.Output = txtSend.Text
    If Err.Number = 8018 Then
        txtMsg.Text = txtMsg.Text & "串口未打开" & Chr(13) & Chr(10)
    End If
End Sub

Private Sub Form_Load()
    comPort.ListIndex = 0
    comBaud.ListIndex = 1
    comVerify.ListIndex = 0
    comStop.ListIndex = 0
    comNumbit.ListIndex = 1
    '
    txtMsg.Text = "消息区:" & Chr(13) & Chr(10)
    txtReceive.Text = "接收区:" & Chr(13) & Chr(10)
    txtSend.Text = "发送区:" & Chr(13) & Chr(10)
    '
End Sub

Private Sub Form_Unload(Cancel As Integer)
On Error Resume Next
    MSComm1.PortOpen = False
End Sub

Private Sub MSComm1_OnComm()
    Dim buf As String
    Select Case MSComm1.CommEvent
        Case comEvCD
        Case comEvCTS
        Case comEvDSR
        Case comEvReceive
            buf = MSComm1.Input
        Case comEvSend
    End Select
    txtReceive.Text = txtReceive.Text & buf
End Sub

Private Sub txtMsg_Change()
    txtMsg.SelStart = Len(txtMsg.Text)
End Sub

Private Sub txtSend_GotFocus()
    If txtSend.Text = "发送区:" & Chr(13) & Chr(10) Then
        txtSend.Text = ""
    End If
End Sub

'同一计算机两个不同串口之间的通信测试成功,本人将再集成标准的modbus rtu通信规约,方便调试modbus设备。

程序有一部分是在设计视图中完成,粘贴原代码不一定使软件正确运行。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有