【问题标题】:VB6 RS232 commands not workingVB6 RS232 命令不起作用
【发布时间】:2023-03-31 07:06:01
【问题描述】:

我有以下代码:

MSCommProj.CommPort = 6
MSCommProj.RThreshold = 1
MSCommProj.Settings = "19200,N,8,1"
MSCommProj.InputLen = 0
MSCommProj.PortOpen = True

它可以正常打开并连接,但是当我尝试发送命令时:

MSCommProj.Output = "21 8901 5057 31 0A" & Chr$(13)

MSCommProj.Output = "21 89 01 50 57 31 0A" & Chr$(13)

MSCommProj.Output = "3F 89 01 50 57 0A" & Chr$(13)

按照用户手册的指示,它不亮。

这是手册中显示这一点的页面。也许我只是做错了?:

【问题讨论】:

  • 您应该按照@gserg 和@paxdiablo 的建议以二进制模式发送(和接收)。但是,在此之前,请注意第 69 页说您需要 19200bps 连接;但是,您将串行端口设置为 9600bps。
  • 您冒着意外错误的风险,因为人们不断建议您尝试将字节值推入字符串。使用 Byte 数组并做对。这样,您就不会因为隐式转换为 ANSI 而绊倒,这会扰乱您的数据。
  • @Bob:有这个例子吗? :o)

标签: vb6 serial-port


【解决方案1】:

确定你打算为此发送字符数据到RS232接口吗?这些对我来说就像二进制序列。

而不是:

MSCommProj.Output = "3F 89 01 50 57 0A" & Chr$(13)

我会考虑这样传输二进制数据:

MSCommProj.Output = chr$(63) & chr$(137) & chr$(1) & chr$(80) & chr$(87) & chr(10)

您会注意到末尾没有chr$(13),规范没有要求这样做。


如果您想知道这些十六进制值的转换结果,请启动 Windows 计算器,将视图更改为科学视图,切换到十六进制模式,输入值,然后切换到十进制模式。

或者您可以为此下载ASCII table。或者查看我关于该主题的大量文章here

【讨论】:

  • 有在线转换器吗? :o)
  • 似乎找不到 0A 的转换?
  • 0x0a10 - 我添加了一个附录,告诉你如何计算出来,或者你可以从网上得到一个既有十进制又有十六进制的 ASCII 表,例如: bestofthisweb.com/blogs/wp-content/uploads/2009/11/…
  • @SteathRT,看看 uodate,它提供了如何执行此操作的链接。
  • 嗯,那么,还有很多other可能是错误的。如果您使用on error resume next,您是否正在检查err 以查看设置是否有问题?您实际上是否将设备连接到正确的端口?您是否有一个 LED 式接线盒,以便您可以查看数据和控制线是否真的在电线上切换?设备是否正确激活控制线?我看到只有 rxd、txd 和接地连接,但 Windows 驱动程序可能依赖于发生 rts/cts 握手的事实(这会阻止数据发送)。
【解决方案2】:

您需要发送给定的字节。
您改为发送这些字符串的表示形式。

发送实际字节。
chr$(&h21) & chr$(&h89) & chr$(&h01) & chr$(&h50)

【讨论】:

  • 试过 MSCommProj.Output = Chr$(&H21) & Chr$(&H89) & Chr$(&H1) & Chr$(&H50) & Chr$(&H57) & Chr$(&H30 ) & Chr$(&HA) 但它什么也没做。
【解决方案3】:

这是因为我没有使用交叉电缆...所有 rs232 代码都是正确的。废话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 2023-04-08
    • 2018-11-14
    • 2012-08-27
    • 2014-11-25
    • 2016-12-11
    • 2018-12-18
    相关资源
    最近更新 更多