使用RS232 VB.net发送字符串和十六进制数据

时间:2013-02-28 08:38:15

标签: vb.net com serial-port

我一直在开发一个与COM设备(Fluke 123 Scopemeter)通信的程序。当我发送ASCII数据时,我没有遇到任何问题。

我需要做的是通过ASCII和HEX数据的组合发送。我一直在看这个网站上的一些帖子,但他们似乎专注于专门发送HEX数据。我需要找到一种发送组合ASCII和HEX的方法 - 本质上,我需要找到一种有效格式化HEX数据的方法,以便COM设备能够理解它。

我如何构建字符串的示例如下。它给了我一个错误“从字符串PS#0x转换”到类型'Double'是无效的“我假设是因为我混合了两种数据类型!我希望我做的事情真的很傻,这实际上是直截了当!

'Building my command line
Command = "PS"
Command += ControlChars.Cr
Command += "#0 x"
Command += &H0 + &H2 + &H0 + &H0 + &H0
Command += " y"
Command += &H0 + &H1 + &H0 + &H0

...

'Writing my command to the COM device
moRS232.Write(Command)

任何人都可以给予任何帮助,我将不胜感激!

2 个答案:

答案 0 :(得分:1)

技巧是发送字节,这意味着你的字符串需要转换为字节。一个例子:

    Dim buf As New List(Of Byte)
    buf.AddRange(moRS232.Encoding.GetBytes("PS" & ControlChars.Cr & "#0 x"))
    buf.AddRange(New Byte() {0, 2, 0, 0, 0})
    buf.AddRange(moRS232.Encoding.GetBytes(" y"))
    buf.AddRange(New Byte() {0, 1, 0, 0})
    moRS232.Write(buf.ToArray, 0, buf.Count)

您是否有显示协议的手册?如果您粘贴链接。

答案 1 :(得分:0)

你是对的 - 如果它同时获得ascii和十六进制数据[即使可以通过一种方法发送],它将会让Fluke感到非常困惑。

因此,如果Write方法需要一个字符串,那么你需要将十六进制命令转换为一个字符串,同时参见ASC()/ CHR()命令