串口编程我也不是很懂,但是可以跟你一起研究一下!
关于你说:我怎么时时对数据进行读取,而且把数据进行解析,提取火警信息呢? 把MSComm1的串口打开~当收到数据时硬件内部会产生一个中断,这样一来我们就知道有数据来,调用相关过程提取火警信息。
通过这个协议我的MSCOMM控件能够接受到什么类型的数据是60进制的吗?
我们从串口接收到的都是2进制数据,既0、1。波特率为1200既每秒传1200个0和1。只要双方约定好对应数据代表的含意我们就可以对收到的数据进行处理!所以说你项目最重要的是双方协议好数据的字段和所代表的含义!

解决方案 »

  1.   

    说的有道理,是否我应该通过TIMER事件来触发呢?
      

  2.   

    timer肯定要有。我现在做的这个项目也是串口通讯,以前也做过。
    只要协议约定好,按照格式发数据下去,接受回来的数据要转化成
    你想要的格式。
      

  3.   

    要timer干吗? mscomm控件会自动收送数据呀
      

  4.   

    看看MSDN里面的MSCOMM说明,记得有本专门讲MSCOMM控件的书叫做VB串口编程什么的,不麻烦的,有信心就好
      

  5.   

    Private Sub MSComm1_OnComm()
      Dim strIn
      Dim a, i, j As Integer
      Dim TempNumber(10) As String
      Dim CardLen As Integer
      
      '如果不是返回 值事件退出
      If MSComm1.CommEvent <> 2 Then
          Exit Sub
      End If
      
      strIn = MSComm1.Input
      i = UBound(strIn)
      
      Select Case MSComm1.CommEvent
        Case comEvReceive
          For j = 1 To i
            If strIn(a) = "HD" Then
              CardLen = 0
              Exit For
            End If
            TempNumber(CardLen) = Hex(strIn(a))
            SBar.Panels(2).Text = SBar.Panels(2).Text & Hex(strIn(a)) & " "
            CardLen = CardLen + 1
          Next j
          
          '处理划卡
          
        Case comEvSend
        ...
        Case comEvRing
        ...
      End Select
    End Sub
      

  6.   

    谢谢你们的回答,因为我现在不具备现场调试的条件,所以我想知道COM控件通过RS232接口可以得到什么格式的内容?是否要设置COM控件接受数据的最大值?
    逻辑上讲应该比较简单,但真正实现起来又不知怎么对要接受的数据格式进行设置及我通过接口得到的是什么数据,这样我好处理......所以我想最好有这方面的例子,这样我会理解的快些~
      

  7.   

    谢谢你们的回答,因为我现在不具备现场调试的条件,所以我想知道COM控件通过RS232接口可以得到什么格式的内容?是否要设置COM控件接受数据的最大值?
    逻辑上讲应该比较简单,但真正实现起来又不知怎么对要接受的数据格式进行设置及我通过接口得到的是什么数据,这样我好处理......所以我想最好有这方面的例子,这样我会理解的快些~
      

  8.   

    我想问一下我把MSCOM控件的InputMode设为comInputModeBinary的话,我接受到的数据是什么样子(具体)的数据?是二进制的像0101一样的数据吗,如果这样的话,我怎么能使接受到的数据为十六进制的呢?
      

  9.   

    俺是学生,俺不会,俺能不能问点问题阿:是关于SQL与VB的问题,我开始用的SQL SERVER7.0做的数据库,,用VB6做的应用程序,不是很难的那种拉,现在有两个问题,第一,把7。0,中的数据库导入另一台机器的sql2000里,并且让应程序还能调用它(我已经弄好了,把Data文件夹拖过来,设置好ODBC,以及程序中的登录设置,但是,不知道这样会不会有我现在还不知道的麻烦出现,请各位大侠指点)………………第二个问题,我不知道如何解决:把数据库倒过来后(笔记本),另一台机器也升级为sql2000了,而且,应用程序都是一样的,两台机器拥有相同的数据库和应用程序,可以联机工作,也可以单独工作,问题就是,两台机器的数据必须一致,比如笔记本出去工作,数据更新了,同时,台式机在家工作,数据也更新了,笔记本回来后,两边要互相更新,但又不能用简单的SQL2000里的方法,因为操作员是指懂得操作的,我们所提供的就是一个或几个按钮,这时,我就不会了~~~请大侠们支援~解决方法email:[email protected]
      

  10.   

    Option Explicit
    Dim buf As Variant
    Dim inbuf As Variant
    Dim outbuf As Variant
    Dim i, j, k As Integer
    Private Sub Command1_Click()
    buf = Chr(&H1B) & Chr(&H30)
    MSComm1.Output = buf & vbCr
    End Sub
    Private Sub Command2_Click()
    buf = Chr(&H1B) & Chr(&H65)
    outbuf = Chr(&H1B) & Chr(&H79)
    MSComm1.Output = buf & vbCr
    inbuf = Trim(MSComm1.Input)
    If Len(inbuf) = 0 Then
    Text1.Text = "0"
    Else
    If inbuf = outbuf Then
    Text2.Text = "成功"
    Else
    Text1.Text = "3"
    End If
    Text3.Text = "3"
    End If
    'inbuf = MSComm1.Input
    'outbuf =inbuf
    'For j = 1 To 10
    'If inbuf = Chr(&H1B) & Chr(&H79) Then
    'MsgBox ("!")
    'Exit For
    'End If
    'Next j
    End Sub
    Private Sub Command4_Click()
    inbuf = Chr$(&H1B) & Chr$(&H5D)
    MSComm1.Output = inbuf & vbCr
    End Sub
    Private Sub Form_Load()
    MSComm1.PortOpen = True
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
    MSComm1.PortOpen = False
    End Sub
      

  11.   

    楼顶有个同志贴与这段程序类似的动动了,我也请教过他,我做的是磁卡机的读写,原理差不多,上面的程序很幼稚,别笑话我~~嘿嘿,但是我解释一下给你听:对串口操作,用mscomm控件,对外传输的是字符串,定义变量as Variant,然后,将你的命令用chr(&h1b)转换后付给变量,然后用output输出就可以了~对了,之前还要保证端口正确连接并打开~~
    Private Sub Form_Load()
    MSComm1.PortOpen = True
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
    MSComm1.PortOpen = False
    End Sub
    至于相应回来的数据是什么格式,我现在还没有弄得很明白~嘿嘿~
    但是Private Sub Command2_Click()
    buf = Chr(&H1B) & Chr(&H65)
    outbuf = Chr(&H1B) & Chr(&H79)
    MSComm1.Output = buf & vbCr
    inbuf = Trim(MSComm1.Input)
    If Len(inbuf) = 0 Then
    Text1.Text = "0"
    Else
    If inbuf = outbuf Then
    Text2.Text = "成功"
    Else
    Text1.Text = "3"
    End If
    Text3.Text = "3"
    End If
    却是成功了!这是测试通讯的,你参考一下吧~
    我同学说,数据收取需要一个循环,因为缓冲区里的数据是一段一段的,
    如果你弄明白了~一定告诉我怎么弄得阿!!!!!
    我得email  [email protected]
      

  12.   

    你接受的是int型数据,如果想要十进制数就取出来的数直接赋值,如果要十六进制数就hex(int)
      

  13.   

    banweihui(KBoy)我没这样操作过,关于你第一个问题,我 想应该不会出现问题吧,只要对数据库没指定什么操作者的话,第二个问题,我想SQL SERVER中可能没有这样功能,但DOMINO中通过复本可以操作,真不好意思啊,我知道的也不多
      

  14.   

    to:banweihui(KBoy) 
        你需要的结果其实挺麻烦的!也许是我找不到更好的方法!因为你数据库在两台机器上。所有的表结构都相同。我建议你外出的笔记本不要更新基本资料表!只能变动日常业务单据表!然后建立一个相互更新的文件。每次两台机器相互更新就追加更新时间到文件中!
        更新的思路如下:首先判断当前时间与更新文件最后一次更新时间。如果当前时间大则把上次更新时间后的记录追加(Insert)到业务单据表中。可以先把笔记本的追加到台式机,然后在把台式机的整个数据库覆盖笔记本的数据库。