我去年开发过一个串口通讯的程序
定义一个VARIENT数组,将该数组如下所示取值:
dim aa as varient
aa=mscomm1.Input

解决方案 »

  1.   

    定义一个VARIENT数组,将该数组如下所示取值:
    dim aa as varient
    aa=mscomm1.Input
    取数值也只需用VARIENT 数进行:
    mscomm1.output=aa
      

  2.   

    我也正在做这个“秤”的程序,也是没有头序
    machunfeng老兄,你做出来了吗?
      

  3.   

    先选择COM口
    然后设定波特率
    如果利用事件接收发送应将MSCOMM的RThreshold=1及SThreshold=1,如果不利用通讯事件接收发送应置为0,
    然后在通讯事件中利用INPUT OUTPUT 属性发送和接收数据
      

  4.   

    关键是定义varient数组
    具体的看看MADN,有详细的介绍
      

  5.   

    接收8位数据, 两头为校验码. 最后有效数据保存在变量DBLDATA中.Private Sub MSComm1_OnComm()
        
        Dim intI        As Integer
        Dim intCheck    As Integer
        Dim dblData     As Double
        Dim strChar     As String
        Dim blnError    As Boolean
        
        '*** 届けたデータを受信する
        strChar = ""
        Select Case MSComm1.CommEvent
            '*** Errors
            Case comEventBreak      ' A Break was received.
            Case comEventFrame      ' Framing Error
            Case comEventOverrun    ' Data Lost.
            Case comEventRxOver     ' Receive buffer overflow.
            Case comEventRxParity   ' Parity Error.
            Case comEventTxFull     ' Transmit buffer full.
            Case comEventDCB        ' Unexpected error retrieving DCB]
        
            '*** Events
            Case comEvCD             ' Change in the CD line.
            Case comEvCTS            ' Change in the CTS line.
            Case comEvDSR            ' Change in the DSR line.
            Case comEvRing           ' Change in the Ring Indicator.
            Case comEvReceive        ' Received RThreshold # of chars.
                strChar = MSComm1.Input
                
            Case comEvSend           ' There are SThreshold number of characters in the transmit buffer.
            Case comEvEOF            ' An EOF charater was found in the input stream
        End Select
        
        '*** 受信した一つ文字を処理する
        If Len(strChar) = 0 Then Exit Sub
        Select Case strChar
            Case Chr(2):
                mstrInput = strChar
            Case Else:
                mstrInput = mstrInput & strChar
        End Select
        If Len(mstrInput) < 8 Then Exit Sub
        
        '***  確認として、ACK信号を発送する
        MSComm1.Output = Chr(&H6)
        
        '*** 受信した文字行をチェックする
        mstrBuffer = mstrInput
        mstrInput = ""
        blnError = False    '*** 先ず、エラーがなしにセットする
        intCheck = 0        '*** BCC の始値
        For intI = 1 To 8
            strChar = pfAnsiMidB(mstrBuffer, intI, 1)
            Select Case intI
                Case 1:         '*** STX
                    If strChar <> Chr(2) Then
                    blnError = True
                    End If
                Case 2 To 6:    '*** データ
                    If strChar < "0" Or strChar > "9" Then blnError = True
                Case 7:         '*** ETX
                    If strChar <> Chr(3) Then blnError = True
                Case 8:         '*** BCC
                    'If (intCheck Mod 256) <> Asc(strChar) Then blnError = True
            End Select
            If Not blnError Then intCheck = intCheck + Asc(strChar)
        Next intI
        '*** 受信したデータが不正だったら、今回の電文を廃棄にする。
        If blnError Then Exit Sub    dblData = CDbl(pfAnsiMidB(mstrBuffer, 2, 5))
        
    End Sub
      

  6.   

    不难,你要先搞清楚是谁主动!比如,是否秤在不断的发数据?!,那你就用接受事件吧,若是要你计算机发一条命令,那你就用一个发送,再接受,当然,COMM的设置是要有的,比如哪个口,波特率什么的,其实,通讯要遵循一定的规约,你照做就行了,比如,你定义收到的33表示A,那你就解成A,看看VB的帮助文件里的MSCOMM即可
      

  7.   

    当向一个秤上放物体时,当物体还没有完全稳定下来的时候,其显示屏上的数据也在不断的变化(我们在很多商场里面都可以看到),这种变化是否是由Settings里面的停止位来控件,而其默认的1代表什么? 因我不会用VB,我只是引用这个MSCOMM控件,所以没有这方面的帮助文件,哪位仁兄仁姐有这方面的帮助资料(最好是中文的),烦请邮一份给我,
    [email protected]
    多谢!
      

  8.   

    '首先设置MSComm1的参数,如Private Sub Form_Load ()
      ' 保存输入子串的缓冲区
      Dim Instring As String
      ' 使用 COM1。
      MSComm1.CommPort = 1
      ' 9600 波特,无奇偶校验,8 位数据,一个停止位。
      MSComm1.Settings = "9600,N,8,1"
      ' 当输入占用时,
      ' 告诉控件读入整个缓冲区。
      MSComm1.InputLen = 0
      ' 打开端口。
      MSComm1.PortOpen = True
    End Sub'接收数据MSComm1.Input,有两种方法:
    '1、事件驱动
    '  缓冲区变化后,产生OnComm,响应时间并接收处理,适应于不等个数据包长或随时发送而不是定时发送,如:
    Private Sub MSComm_OnComm ()
      Select Case MSComm1.CommEvent
      ' Handle each event or error by placing 
      ' code below each case statement' 错误
          Case comEventBreak  ' 收到 Break。
          Case comEventCDTO  ' CD (RLSD) 超时。
          Case comEventCTSTO  ' CTS Timeout。
          Case comEventDSRTO  ' DSR Timeout。
          Case comEventFrame  ' Framing Error
          Case comEventOverrun  '数据丢失。
          Case comEventRxOver'接收缓冲区溢出。
          Case comEventRxParity' Parity 错误。
          Case comEventTxFull  '传输缓冲区已满。
          Case comEventDCB  '获取 DCB] 时意外错误  ' 事件
          Case comEvCD  ' CD 线状态变化。
          Case comEvCTS  ' CTS 线状态变化。
          Case comEvDSR  ' DSR 线状态变化。
          Case comEvRing  ' Ring Indicator 变化。
          Case comEvReceive  ' 收到 RThreshold # of chars.
          Case comEvSend  ' 传输缓冲区有 Sthreshold 个字符                    '
                        '
          Case comEvEof  ' 输入数据流中发现 EOF 字符
                        ' 
      End Select
    End Sub
    '2、定时接收
    Private Sub Timer1_Timer()
      Buffer$ =  MSComm1.Input
    End Sub
    '发送数据MSComm1.Output
    Dim datas[10] as byte
    Dim datasend 
    datas[1]=1
    datas[2]=11
    datas[3]=21
    datas[4]=41
    datas[5]=71
    '.
    '.
    '.
    datasend=datas
      MSComm1.Output = "要发送的数据,可以是字符或二进制数据"
      MSComm1.Output = datasend
    '最后关闭串行端口。
      MSComm1.PortOpen = False
      
    --------------------------------------------------------------------------------