我有一些设备可以读取 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)代码,或者就确保数据准确的最佳方法提出建议。他们应该适应你是客户。
- Forming Data Packets Information
- Serial Communication Concepts
- Example of Serial Communication with a Device
- Very Good website on General Serial and Packet Interpretation with Code examples
如果您需要任何进一步的帮助,请告诉我。
关于serial-port - 是否有通过串行端口传递零件号的约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3844163/