VB6帮助中的RS232c

VB6帮助中的RS232c,vb6,serial-port,communication,mscomm32,Vb6,Serial Port,Communication,Mscomm32,嘿,我对RS232c命令的发送很陌生。这是我的雅马哈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] Sta

嘿,我对RS232c命令的发送很陌生。这是我的雅马哈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
是这样吗


David

尽管Do While的设置确实不太正确,但从概念上讲,您的代码看起来有点正确。有关编码示例,请参见。 但是.Handshaking=2-comRTS部分应该是。使用事件的Handshaking=2是RS232通信更可靠的方法

有关更多指导,请参阅

如果您的电脑有HyperTerminal或其他TTY程序,请使用该程序尝试与雅马哈进行手动通信。希望您的用户手册中有一些您可以尝试的示例。谷歌在超级终端rs232上搜索其他想法;例如使用手动方式将至少确认您可以让您的PC与您的雅马哈对话,并帮助您思考如何编写代码


谷歌超级终端用windows代替其他TTY程序;例如

您的代码看起来有点正确——不管从概念上讲——尽管Do While的设置确实不太正确。有关编码示例,请参见。 但是.Handshaking=2-comRTS部分应该是。使用事件的Handshaking=2是RS232通信更可靠的方法

有关更多指导,请参阅

如果您的电脑有HyperTerminal或其他TTY程序,请使用该程序尝试与雅马哈进行手动通信。希望您的用户手册中有一些您可以尝试的示例。谷歌在超级终端rs232上搜索其他想法;例如使用手动方式将至少确认您可以让您的PC与您的雅马哈对话,并帮助您思考如何编写代码


谷歌超级终端用windows代替其他TTY程序;例如

代码是可靠的,但有一个小缺陷。请注意此代码:

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%。听起来您将要处理的数据集很小,因此您应该可以使用任何一种方法。

代码是合理的,但有一个小缺陷。请注意此代码:

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%。听起来你将要处理一小部分数据,所以你应该可以选择任何一种方法。

@AngryHacker-不客气!也谢谢你的文章!好啊我甚至不确定我是否需要这样做,因为我只想发送命令,仅此而已。我所寻找的只是它发送命令并工作:不幸的是雅马哈没有rs232c的例子。我不得不深入研究,甚至找到rs232命令表。甚至连公司本身都没有提供给我!希耶什@StealthRT:遗憾的是,控制扩展终端端口并不是一个消费品——他们打算将其用于专门的商业应用。这听起来可能很傻,但也许你应该先弄清楚如何让老式的rs232电话调制解调器通过超级终端或其他方式拨号。至少,这种转移会给你一些通过rs232进行设备控制的经验。只需Google hayes modem命令,连接一个旧的modem,然后旋转一下。至少在很多地方都有调制解调器帮助。谢谢你的回复。然而,我对RS232c并不陌生——我只是对它的指挥方式很陌生。我习惯于向设备发送十六进制或数字,而不是文字:o所以我有点困惑。@AngryHacker-不客气!也谢谢你的文章!好啊我甚至不确定我是否需要这样做,因为我只想发送命令,仅此而已。我所寻找的只是它发送命令并工作:不幸的是雅马哈没有rs232c的例子。我不得不深入研究,甚至找到rs232命令表。甚至连公司本身都没有提供给我!希耶什@StealthRT:遗憾的是,控制扩展终端端口并不是一个消费品——他们打算将其用于专门的商业应用。这听起来可能很傻,但也许你应该先弄清楚如何让老式的rs232电话调制解调器通过超级终端或网络拨号
无论什么至少,这种转移会给你一些通过rs232进行设备控制的经验。只需Google hayes modem命令,连接一个旧的modem,然后旋转一下。至少在很多地方都有调制解调器帮助。谢谢你的回复。然而,我对RS232c并不陌生——我只是对它的指挥方式很陌生。我习惯于向设备发送十六进制或数字,而不是文字:o,这就是为什么我有点困惑的原因。我甚至不确定我是否需要这样做,因为我只想发送命令,仅此而已。我所寻找的只是它发送命令并工作:oI尝试了该代码,但它什么也没做:o。你知道为什么吗?我的意思是不要在循环中使用这个代码。使用暂停,然后读取端口。但是,为了确保设备能够正常工作,请从超级终端或TeraTerm建立连接,然后从那里进行尝试。好的。我甚至不确定我是否需要这样做,因为我只想发送命令,仅此而已。我所寻找的只是它发送命令并工作:oI尝试了该代码,但它什么也没做:o。你知道为什么吗?我的意思是不要在循环中使用这个代码。使用暂停,然后读取端口。但为了确保设备能够正常工作,请从超级终端或TeraTerm建立连接,然后从该设备上进行尝试。