-2

编辑(摘要)

我试图一次将Char/String数据解释为Byte4 个字节。这是因为我只能获取TComport/TDatapacket将流数据解释为字符串,而不是任何其他数据类型。我仍然不知道如何让Read方法和OnRxBuf事件处理程序与 TComport 一起工作。

问题总结

我正在尝试使用一些 Delphi 代码从质谱仪 (MS) 获取数据。仪器通过串口线连接,遵循 RS232 协议。我能够毫无问题地发送命令并处理来自 MS 的基于文本的输出,但我在解释数据缓冲区时遇到了麻烦。

背景

来自本仪器的用户手册:

“除离子电流值外,RGA 的输出是由换行符 + 回车终止符终止的 ASCII 字符串。离子信号以 10^-16 安培为单位的整数表示,并以十六进制格式直接传输 (四字节整数,2 的补码格式,最低有效字节在前)以获得最大数据吞吐量。

我不确定(1)十六进制数据是否可以正确存储在字符串变量中。我也不确定如何(2)在 Delphi 中实现 2 的补码和(3)首先是最低有效字节。

4

1 回答 1

0

按照@David Heffernan 的建议,我去修改了我的数据类型。尝试从字符中获取二进制数据是行不通的,因为并非 0-255 之间的所有值都可以正确表示。基本上,您会在此过程中丢失数据。特别是您的数据一次表示 4 个字节。

我的解决方案是使用 Async Professional 组件而不是 Denjan 的 Comport lib。它可以更好地处理数据流,并且有一个内置日志,我可以使用它来确定如何解释来自仪器的流式响应。它也有更好的记录。所以,如果你是串行通信的新手(就像我一样),那就试试吧。

于 2019-01-17T14:36:46.640 回答