serial-port - 是否有通过串行端口传递零件号的约定?

标签 serial-port

我有一些设备可以读取 RFID 标签并通过串行端口传递标签的序列号。

在我看来,为序列号的每个数字使用两个字节“更好”,尤其是因为某些设备正在发送终止 0x0D 0xA (CR/LF)。

现在我发现一个设备每个数字使用一个字节,所以要发送“12”它不会发送 0x31、0x32,而是 0x12。这意味着我无法区分 CR/LF 和真正的 0xA 和 0xD。我问了一些关于它的华夫饼,因为字符串是固定长度的 - 那么为什么要用 CR LF 呢?而且,为了保持(不)一致,它们分别使用两个字节用于 CR/LF。

您可能已经了解到,我对这个项目相当陌生,并且对不同制造商设备之间的不一致感到有些困惑。

这一个的制造商很乐意更改他们的固件以适应我。我应该要求他们为每个数字使用两个字节吗?

最佳答案

串行似乎从未成为标准。它传输的方式是标准的,但发送的内容始终取决于硬件/软件的开发人员。大多数设备都有某种信息包。通常是这样的 STARTBYTE、DATA、CHECKSUM 和 sumtimes ~CHECKSUM(校验和的倒数),也许还有一个 STOPBYTE。校验和可帮助您确保数据有效,但仅发送几个字节很难进行校验和。

回答你的问题。确保尽可能准确的数据是一个绝妙的主意。这意味着您甚至不想将 CR/LF 与您的标签 ID 混淆。您可以确保它不是以编程方式同时存在 CR 和 LF - 然后它是一个有效的 ID,或者请求他们更改固件。似乎大多数公司都喜欢以纯文本形式发送串行数据。我不喜欢这个,因为它体积庞大而且坦率地说是浪费性能(如果你需要在你的过程中加快速度)。对我来说,更容易读取数据包的每个字节并进行相应的解释。你甚至可以要求他们做这样的事情。 0xFF 0x00 数据 0 数据 1 0xFF。这使用 2 个起始字节和一个停止字节。它会发送更多数据,但有助于确保您获得有效数据。在您的代码中,您可以在末尾检查 0xFF 0x00 和 0xFF。如果您没有收到,则说明您不是有效的数据包。

如果你不想使用数据包,你总是可以一起检查 CR/LF,我希望构建 RFID 标签的公司不要使用 CR/LF 作为他们的 ID。

如果您觉得想要更清晰并且不想更改任何内容,我建议您与制造商联系并询问一些示例接口(interface)代码,或者就确保数据准确的最佳方法提出建议。他们应该适应你是客户。

  1. Forming Data Packets Information
  2. Serial Communication Concepts
  3. Example of Serial Communication with a Device
  4. Very Good website on General Serial and Packet Interpretation with Code examples

如果您需要任何进一步的帮助,请告诉我。

关于serial-port - 是否有通过串行端口传递零件号的约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3844163/

相关文章:

c - 告诉伪终端的从端口名称

c - 使用 FILE* 从 Arduino tty 中读取

c - 在没有 LF CR 的情况下处理传入的串行流

c - `open`和 `close`如何异步串口?

c - 在 Windows 中从串口读取

c# - 串行端口与 MSComm

mongodb - 实时数据馈送 + NodeJS 和 MongoDB

c++ - 即使串行可用,代码也会继续循环

assembly - x86 汇编中的串行端口如何设置为 19200 波特?

php-serial 不工作