如何编写代码以使用 Delphi 通过 RS232 接收数据计数?

How to make code to receive data counting via RS232 with Delphi?

我想制作一个简单的设备,使用 Delphi 通过 RS232 与我的计算机通信 7. 那个电路很简单,一个带有 220 欧电阻、0.1uF 电容、+5VDC 电源的按钮, RS232 连接器和 USB 到 RS232 适配器。简单电路的输出将连接到计算机端的引脚 2(Rx 引脚)。每当我按下按钮时,计数器就会增加 1。相比之下,在 Arduino 中只需要几行代码就可以完成任务。

可能需要的其他信息:我在 Delphi 7 上安装了 CPortLib 和 CiaComPort。我已经测试过,它们正在努力接收数据。使用 ComPort(CPortLib 的一个模块),我可以通过环回发送和接收数据到我自己的计算机,RS232 的 Pin2 (Rx) 和 Pin3 (Tx) 是环路的。接收我使用命令 ComPort1.ReadStr(Str, Count); (发送数据我使用命令:ComPort1.WriteStr(Str);) 意思是,AddOn ComPort 模块工作正常。

你不能使用RS232接收线接收开关输入,因为开关不能发送串口数据。

您可以做的是使用通常专用于调制解调器控制的电线。 RS232 库具有感知这些信号的功能。我从来没有那样用过RS232。

既然你谈到了 Arduino,它有数字输入和模拟输入,我会写一个小的 Arduino 程序通过 USB 连接通过 RS232 与 PC 通信。当 Arduino 检测到他的数字或模拟输入发生变化时,它会通过 RS232 发送一条消息。 Arduino 程序应该处理开关的防反弹。

有非常小且便宜的 Arduino 板可以完成这项工作。

Delphi 中的代码使用 CiaComPort 组件(可能还有任何其他组件)会非常简单:将组件放在表单上,​​将波特率、奇偶校验、停止位设置为与Arduino(我建议使用 9600 波特)。将 LineMode 设置为 TRUE,将 LineEnd 设置为 CRLF。然后分配一个 OnDataAvailable 事件,您可以在其中调用 Receive 方法来获取 Arduino 发送的数据。 Arduino 应该发送一条带有输入行(或多行)状态和 CRLF 对的消息,以便 LineMode 按预期工作,并且您会收到每个 Arduino 消息的单个 DataAvailable

解析 Arduino 消息并按要求执行。