对于vb和串口通讯本人是第一次接触。所以有很多细节问题都不知道,还请各位多多指教。
       基于RS232串行通讯。通讯协议如下:
             发送部分,1位起始符"!",2位地址,1位命令码,变长度的参数(如12300),2位校验码,1位命令结束符"*"
             接收部分,1位回答起始符"&",1位命令执行结果代码,变长度回答内容如(12300),2位回答校验码和1位回答结束符"*"
      其中,命令码和命令执行结果代码的意思是一个字符如A,B,C等。地址为通道号:01至99。
      通讯部分全部以ASCII码进行,即发送和接收。
      请哪位大哥给我能够实现这样一个通讯的程序,小弟当感激不已!
      关于MSComm的参数设置小弟都已有了,只是发送和接收程序这部分不是很清楚。
      我的窗体界面是这样的:Form窗体里有四个文本框,其中两个为设定电压和设定电流(用于发送数据),另外两个分别为显示电压和显示电流(用于接收数据)。通过一个Command控件发送。
      

解决方案 »

  1.   

    '面的例子说明如何将用户键入的每一个字符送到串行端口:Private Sub Form_KeyPress (KeyAscii As Integer)
       Dim Buffer as Variant
       
       ' 设置并打开窗口
       MSComm1.CommPort = 1
       MSComm1.PortOpen = True   Buffer = Chr$(KeyAscii)
       MSComm1.Output = Buffer
    End Sub
    '---------来自vb帮助
      

  2.   

    我现在有两个文本框那该怎么办呢?
    Private Sub Form_KeyPress (KeyAscii As Integer)好像只能对一个文本框里的内容起作用
      

  3.   

    Private Sub MSComm1_OnComm()
    Dim ST As StringST = MSComm1.Input'将接收到的字符付给变量ST,同时清空接收缓冲区
    Select Case MSComm1.CommEvent
        Case comEvReceive
            '在这里处理你收到的字符
    end select
    '发送就直接调下面的句子
    MSComm1.Output="你的字符"
      

  4.   

    下面是我结合我的项目根据你的意见编的程序:
    我将4个文本框内的内容通过串口发送给另外4个文本框内并对应显示出来,可是运行下面这个程序时,不能显示,请问为什么呀?如果这个程序不行,有什么办法可以实现以上功能阿?
    Private Sub cmdSend_Click()'声明两个字节类型的变量数组
    '一个用于存储输出数据
    '一个用于存储输入数据
    ''''''''''''''''''''''''''''''''''''''Dim OutByte() As Byte
    Dim InByte() As Byte
     If MSComm1.PortOpen = True Then
    MSComm1.PortOpen = False '关闭串口
    End If
    MSComm1.CommPort = 1
    MSComm1.InputLen = 0 '每次从接收缓冲区中读一个数据
    MSComm1.InputMode = comInputModeBinary '以二进制形式读取字符
    MSComm1.RThreshold = 1 '接收缓冲区收到一个字符以便产生一次OnComm事件
    MSComm1.Settings = "19200,n,8,1"
    MSComm1.PortOpen = True '打开串口,准备通信
    Dim Inbuffer() As Byte 
    Dim Buf() As String
    Dim Strsend() As String * 10
    ReDim Strsend(3)
    Strsend(0) = Trim(txtsdVoltage.Text)
    Strsend(1) = Trim(txtsdCarrent.Text)
    Strsend(2) = Trim(txtsdFrequence.Text)
    Strsend(3) = Trim(txtsdDuty.Text)
    ReDim Buf(3)
    Buf(0) = StrConv(Strsend(0), vbFromUnicode)
    Buf(1) = StrConv(Strsend(1), vbFromUnicode)
    Buf(2) = StrConv(Strsend(2), vbFromUnicode)
    Buf(3) = StrConv(Strsend(3), vbFromUnicode)
    Inbuffer = Buf(0) & Buf(1) & Buf(2) & Buf(3)
    MSComm1.Output = InbufferEnd SubPrivate Sub MSComm1_OnComm()
    On Error Resume Next
        Select Case MSComm1.CommEvent
            Case comEvReceive '添加代码
    Dim InByte() As String
    Dim bufferTemp As Variant
    Dim Buf() As Byte
    bufferTemp = MSComm1.Input
    Buf = bufferTemp
    ReDim InByte(3)
    InByte(0) = Mid(Buf, 1, 10)
    InByte(1) = Mid(Buf, 11, 10)
    InByte(2) = Mid(Buf, 21, 10)
    InByte(3) = Mid(Buf, 31, 10)
    txtxsVoltage.Text = InByte(0)
    txtxsCarrent.Text = InByte(1)
    txtxsFrequence.Text = InByte(2)
    txtxsDuty.Text = InByte(3)
    可是还不行,这是怎么回事呀?
    多谢指教!!!