我想读取XMT808-S仪表的数据,通讯协议RS485串口,数据发送采用ASCI码,数据帧格式: A/地址/符号/显示数据;发送的数据菜蔬数据帧方式一次性向外发送,数据头为:"A",其后为仪表地址,数据符号及实时显示值,如仪表显示2.000,仪表地址设为1,则仪表发送的数据帧为“A1+2.000".设置地址应答发送模式,上位机给仪表发送地址1,必须以自然码1来发送,不能以1的ASCI码发送给。我已经连接好硬件,COM3,波特率4800,地址1。在串口调试串口里,要发送什么数据,仪表才能应答呢?

解决方案 »

  1.   

    Private Sub Command1_Click()
    MSComm1.Output = Chr(&H1)
    End SubPrivate Sub Command2_Click()
    Unload Me
    End SubPrivate Sub Form_Load()
    MSComm1.CommPort = 3
    MSComm1.Settings = "4800,n,8,1"
    MSComm1.PortOpen = True
    End SubPrivate Sub Text1_Change()
                                  '如何在文本框里得到仪表发送的值呢?
    End Sub
      

  2.   

    我建立一个按钮,按一下发送一个1,仪表发送数值怎么得到呢?
    Private Sub Command1_Click()
    MSComm1.Output = Chr(&H1) '发送一个自然码1,这样发对吗?
    End SubPrivate Sub Command2_Click()
    Unload Me
    End SubPrivate Sub Form_Load()
    MSComm1.CommPort = 3
    MSComm1.Settings = "4800,n,8,1"
    MSComm1.PortOpen = True
    End SubPrivate Sub Text1_Change()
                                  '如何在文本框里得到仪表发送的值呢?
    End Sub
      

  3.   

    啥叫“自然码”?
    OnComm 事件示例
    下例说明如何处理通讯错误和事件。可以在相关的 Case 语句之后插入代码来处理特定的错误或事件。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 SubInput 属性示例
    该例子说明如何从接收缓冲区读取数据。Private Sub Command1_Click()
    Dim InString as String
    ' 读取所有可用数据。
    MSComm1.InputLen = 0' 检查数据。
    If MSComm1.InBufferCount Then
       ' Read data.
       InString = MSComm1.Input
    End If
    End SubMSComm 控件示例
    下面这个简单的例子演示了用调制解调器进行基本的串行通讯: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
       ' 将 attention 命令送到调制解调器。
       MSComm1.Output = "ATV1Q0" & Chr$(13) ' 确保
       ' 调制解调器以"OK"响应。
       ' 等待数据返回到串行端口。
       Do
          DoEvents
       Buffer$ = Buffer$ & MSComm1.Input
       Loop Until InStr(Buffer$, "OK" & vbCRLF)
       ' 从串行端口读 "OK" 响应。   ' 关闭串行端口。
       MSComm1.PortOpen = False
    End Sub注意   MSComm 控件可以采用轮询或事件驱动的方法从端口获取数据。这个简单的例子使用了轮询方法。关于事件驱动方法的例子请参阅 OnComm 事件的帮助。