回 帖 发 新 帖 刷新版面

主题:RS232转485的控制

我是新手,请DX指点:
见附件原理图,用RS232的第7脚(RTS)来控制MAX487的收发(MAX487的第2、3脚并联):开始发送前将RTS置高(MAX487发送状态),一帧数据发完后再将RTS置低(等待接收数据)。程序如下。
结果是:从波形看,还没等到第一个字节发完,RTS脚就变低了(MAX487的数据就发不出去了),为什么?
Private Sub CmdSend_Click()
    Dim x(5) As Byte
    If MSComm1.PortOpen Then
        MSComm1.RTSEnable = True
        x(0) = &HF4
        x(1) = &HF5
        x(2) = &H5
        x(3) = &H0
        x(4) = &H1
        MSComm1.Output = b() 
    End If
End Sub

Private Sub Form_Load()
    With MSComm1
        .CommPort = 1
        .Settings = "9600,N,8,1"
        .InBufferCount = 0
        .OutBufferCount = 0
        .InputMode = comInputModeBinary
        .InputLen = 1
        .SThreshold = 1
        If .PortOpen = False Then
            .PortOpen = True
        End If
    End With
End Sub

Private Sub MSComm1_OnComm()
    Select Case MSComm1.CommEvent
    Case comEvSend
       If (MSComm1.OutBufferCount = 0) Then
            MSComm1.RTSEnable = False
       End If
    End Select
End Sub

回复列表 (共4个回复)

沙发

有人知道吗?

板凳


握手
要保证数据传输成功,必须对接收和发送缓冲区进行管理。例如,要保证接收数据的速度不超出缓冲区的限制。

握手是指一种内部的通讯协议,通过它将数据从硬件端口传输到接收缓冲区。当串行端口收到一个字符时,通讯设备必须将它移入接收缓冲区中,使程序能够读到它。如果数据到达端口的速度太快,通讯设备可能来不及将数据移入接收缓冲区,握手协议保证不会由于缓冲区溢出而导致丢失数据。

设置 Handshaking 属性可以指定在应用程序中使用的握手协议。缺省情况下,该值被设置为空。然而,可将其设置为下面列出的其它协议:

设置值 值 描述 
comNone 0 不使用握手协议(缺省) 
comXOnXOff 1 XOn/XOff 握手。 
comRTS 2 RTS/CTS (请求发送/清除发送) 握手。 
comRTSXOnXOff 3 两者,RTS 握手和XOn/XOff 握手。 


需要使用什么协议与连接到的设备有关。如果将该值设置为 comRTSXOnXOff,可以同时支持两种协议。

在许多情况中,通信协议本身能处理握手。因而,设置此属性为非 comNone 的其它一些值可能会导致冲突。

注意 如果将该值设置为 comRTS 或 comRTSXOnXOff,则需要将 RTSEnabled 属性设置为 True,否则虽然能够连接并发送数据,但不能接收数据。

3 楼

当 RTSEnable 设置为 True,端口打开时,Request To Send 线设置为高电平,端口关闭时,设置为低电平。

Request To Send 线用在 RTS/CTS 硬件握手。RTSEnable 属性允许手动检测 Request To Send 线以确定其状态。

4 楼

x(4) = &H1
        MSComm1.Output = x()

我来回复

您尚未登录,请登录后再回复。点此登录或注册