Serial port 自动切换RTS线路(Delphi Prism串行端口)

Serial port 自动切换RTS线路(Delphi Prism串行端口),serial-port,toggle,delphi-prism-2010,Serial Port,Toggle,Delphi Prism 2010,我在Delphi Prism下使用SerialPort。我可以将字节发送到serialport,但我无法从外部接收数据,因为serialport发送请求(RTS)行始终处于高位或高位。那么,您设置了什么设置来自动切换RTS线路 以下是我设置的serialport属性: SerialPort1 := new System.Io.Ports.SerialPort(); SerialPort1.BaudRate:=19200; SerialPort1.DataBits:=8; SerialPort1.

我在Delphi Prism下使用SerialPort。我可以将字节发送到serialport,但我无法从外部接收数据,因为serialport发送请求(RTS)行始终处于高位或高位。那么,您设置了什么设置来自动切换RTS线路

以下是我设置的serialport属性:

SerialPort1 := new System.Io.Ports.SerialPort();
SerialPort1.BaudRate:=19200;
SerialPort1.DataBits:=8;
SerialPort1.DtrEnable:=true;
SerialPort1.Parity:=System.IO.Ports.Parity.Even;
SerialPort1.PortName:='COM1';//'/dev/ttyS0';
SerialPort1.ReadBufferSize:=3000;
SerialPort1.ReadTimeout:=1000;
SerialPort1.ReceivedBytesThreshold:=1;
SerialPort1.RtsEnable:=true;
SerialPort1.StopBits:=System.IO.Ports.StopBits.One;
SerialPort1.WriteTimeout:=1000;
SerialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(@MySerialData);
SerialPort1.Open;
我有DTR设置。请求发送线路是您控制何时向串行总线读写数据的方式。RTS高,则只能写入,如果RTS低,则只能读取。我们已经检查了示波器上的通信线路,RTS线路始终处于高位,这意味着我们的程序只能发送字节,但无法从外部读取任何字节或数据。这就是DataReceived事件无法执行的主要原因,因为它从未看到任何传入的字节或数据


所以,在查看了我的串行端口设置后,您能告诉我缺少什么吗。

RTS是输出的,所以它与接收无关。尝试打开DTR和/或CTS

编辑:


尝试删除启用RTS的行并为RTS/CTS添加握手(不确定它在Delphi中到底是什么)。我知道这些别针是用来干什么的,它们应该做什么。你们有显示这是如何接线的插脚吗。我假设2和3是交叉的,DTR到DSR双向,RTS到CTS双向。

对于握手,我只有4个不同的内置选项可供选择-无、RequestToSend、RequestToSendXonXoff和XonXoff。但是,如果我选择其中任何一个而不是握手选项None,则无论我将writeTimeout属性设置为什么,serialport.Write例程始终超时。所以,我在写过程前后手动设置并重置RTS。这似乎是可行的,但只是我必须在将RTS设置为低之前有一个NoOp循环,以获得读取数据的精确时间。或者所有传入或响应字节都丢失。现在,我的DataReceived事件正在触发,因为它看到传入字节。@digit我不知道Delphi,但在.Net RequestToSend握手中,当它有数据要发送时,它似乎会自动引发RTS。对不起,我把你弄糊涂了。如果您手动执行此操作,请启动RTS,等待CTS,然后发送。