如何在java中使用RXTX通过RTS和CTS进行串行通信握手

时间:2017-02-15 10:44:27

标签: java rxtx

// my configuration using RXTX library in java
SerialPortObj.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN | SerialPort.FLOWCONTROL_RTSCTS_OUT);// Hardware flow control settings
            SerialPortObj.setRTS(true);   
            SerialPortObj.notifyOnCTS(true);

我假设串行接口标准本身在每次发送和接收数据之前都使用 RTS / CTS 握手来维护硬件流控制。

我的问题陈述是我想在每次发送实际数据之前,必须将 RTS 信号发送到接收器,接收器用 CTS 信号确认。

1 个答案:

答案 0 :(得分:1)

有3种流量控制模式:

  • 硬件流控制 - 这是通过连接器(rs-232)的2个引脚(RTS / CTS)管理握手。这是最好的选择;
  • 软件流程控制 - 当您要初始化传输或想要结束传输时,这是管理您发送的2个字符(XON / XOFF)的握手;
  • 无流量控制 - 这种模式很简单,但您可以丢失数据。对数据流没有控制权 欲了解更多信息,请访问以下网站:
    http://www.tldp.org/HOWTO/Text-Terminal-HOWTO-11.html#ss11.7

如果要使用RTS / CTS方法管理rs-232上的流量控制,则必须为此模式配置串行端口:
serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN | SerialPort.FLOWCONTROL_RTSCTS_OUT); serialPort.setDTR(true);

您需要配置通知后:
serialPort.addEventListener(this); serialPort.notifyOnCTS(true); serialPort.notifyOnDSR(true); serialPort.notifyOnOutputEmpty(true);

之后,硬件流控制将像魅力一样工作。

如需完整代码,请访问:
https://raw.githubusercontent.com/andrelup/GSM-gateway/master/GSMConnect