1

嘿,我是这个 RS232c 命令发送的新手。这就是我的 Yamaha A/V RX-A2000 的文档。

PWR
  [PUT Command] 
     @MAIN:PWR=Parameter
  [GET Command]
     @MAIN:PWR=?
        Operating & retrieving Power state of Main Zone
        Initial Auto Feedback is Available
  [Parameters]
        Standby
          PUT: turining its state to Standby / GET: indicating Standby status.
        On
          PUT: turining its state to On / GET: indicating On status.
        On/Standby
          PUT Only: toggling its status between On/Standby

我对如何通过 MSComm 控件发送这样的命令有点困惑。

MSComm.CommPort = 2
MSComm.Settings = "9600,n,8,1"
MSComm.PortOpen = True

If Not MSComm.PortOpen Then
    MsgBox "not opened"
Else
    MSComm.Output = "@MAIN:PWR=On" & Chr(13)

    Do While MSComm.InBufferCount > 0
         Text1.Text = Text1.Text & MSComm.Input
    Loop
End If

那会是正确的吗?

大卫

4

2 回答 2

3

您的代码看起来有点正确-无论如何从概念上讲-尽管 Do While 的设置确实不太正确。有关编码示例,请参阅http://support.microsoft.com/kb/194922。(但“.Handshaking = 2 - comRTS”部分应该是“.Handshaking = 2”)使用事件是 RS232 通信更可靠的方法。

有关进一步指导,请参见http://www.vbrad.com/article.aspx?id=37

如果您的 PC 有超级终端(或其他一些 TTY 程序),请使用它来尝试与您的 Yamaha 进行手动通信。希望您的用户手册有一些您可以尝试的示例。谷歌在“超级终端 rs232”上寻找其他想法;例如http://www.connectworld.net/interface-troubleshooting.html。走手动路线至少可以确认您可以让您的 PC 与您的 Yamaha 通信,它会帮助您考虑如何编写代码。

(其他 TTY 程序的谷歌“超级终端替代窗口”;例如http://www.windowsreference.com/windows-vista/alternatives-to-hyperterminal-in-vista/

于 2011-05-17T19:13:19.847 回答
2

该代码是合理的,但有一个小缺陷。注意这段代码:

MSComm.Output = "@MAIN:PWR=On" & Chr(13)

Do While MSComm.InBufferCount > 0
     Text1.Text = Text1.Text & MSComm.Input
Loop

在你发送一些数据,然后立即期望看到响应。代码不会进入 Do 循环,因为目前还没有任何内容可读取。

因此,在短暂的停顿后检查 .InBufferCount 或采用不同的方法。我通常有一个计时器每 200 毫秒左右检查一次端口(取决于紧急程度)。您也可以响应 OnComm 事件,但如果有太多数据通过,则此事件已知会将 CPU 使用率提高到 100%。听起来您将要处理一小组数据,因此您应该可以接受任何一种方法。

于 2011-05-17T19:20:57.507 回答