c# - 通过串口从电压表读取数据

标签 c# .net serial-port

我对此有点陌生,我正在编写一个小型应用程序来从电压表读取数据。这是一款 RadioShack 数字万用表 46 量程。我的程序的目的是在检测到特定电压时自动执行某些操作。我正在使用 C#,并且已经熟悉 SerialPort 类。

我的程序运行并从电压表读取数据。然而,数据都是未格式化/乱码的。该设备确实附带了自己的软件,可以在 PC 上显示电压,但这对我没有帮助,因为我需要从自己的程序中获取电压。我只是不知道如何将这些数据转化为有用的东西。

作为引用,我正在使用 SerialPort.Read() 方法:

byte[] voltage = new byte[100];
_serialPort.Read(voltage, 0, 99);

它抓取数据并按如下方式显示:

16 0 30 0 6 198 30 6 126 254 30 0 30 16 0 30 0 6 198 30 6 126 254 30 0 30 16 0 3
0 0 6 198 30 6 126 254 30 0 30 16 0 30 0 6 198 30 6 126 254 30 0 30 16 0 30 0 6
198 30 6 126 254 30 0 30 24 0 30 0 6 198 30 6 126 254 30 0 30 16 0 30 0 254 30 6
126 252 30 0 6 0 30 0 254 30 6 126 254 30 0

空格分隔数组的每个元素。如果我使用 char[] 数组而不是 byte[],我会得到完整的乱码:

▲   ? ? ▲ ♠ ~ ? ▲   ♠   ▲   ? ? ▲ ♠ ~ ? ▲   ♠   ▲   ? ? ▲ ♠ ~ ? ▲   ♠

使用 .ReadExisting() 方法给我:

▲ ?~?♠~?▲ ▲? ▲  ?~♠~?▲ ?↑ ▲ ??~♠~?▲ F? ▲ ??~♠~?▲ D? ▲ ??~♠~?▲ f?

.ReadLine() 超时,因此不起作用。 ReadByte() 和 ReadChar() 只是给我类似于 Read() into array 函数的数字。

我有点不知所措,因为我从来没有做过这样的事情,不知道还能去哪里。

最佳答案

听起来您很接近,但您需要找出要使用的正确编码。

要从字节数组中获取字符串,您需要知道正在使用的代码页。如果手册中没有介绍,并且您无法通过 google/bing/其他搜索找到它,那么您将需要进行反复试验。

要了解如何使用 GetChars() 从字节数组中获取字符串,请参阅 Decoder.GetChars Method 在代码示例中,查看这一行:

 Decoder uniDecoder = Encoding.Unicode.GetDecoder();

该行明确指出您将使用 Unicode 代码页来获取正确的代码页。

从那里,您可以使用 Encoding 类的重写来指定不同的代码页。这记录在此处:Encoding Class

如果使用的编码不是标准之一,则可以在 Encoding 类的构造函数中使用 Encoding(Int32) 重写。有效代码页 ID 的列表可以在 Code Pages Supported by Windows 中找到。

关于c# - 通过串口从电压表读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18473869/

相关文章:

c# - 如何在 blazor wasm 项目上启用 blazor United?

c# - 获取字符串中格式说明符的数量?

c# - 用于延迟 15 秒播放视频的 wpf 应用程序

c# - 在不更改数字值的情况下将 float 显示为百分比

.net - 在多用户Web应用程序gridview中控制并发

C# 控制台应用程序通过蓝牙与 Arduino 对话

c# - 使用 ICollectionView 对 ObservableCollection 进行排序无法正常工作

c# - 将 JSON 字符串解析为 .NET 对象

c# - 串行端口和 BSOD

c++ - QSerialPort 读取有符号值