java-simple-serial-connector 读/写服务器

标签 java serial-port

我修改了 https://code.google.com/p/java-simple-serial-connector/wiki/jSSC_examples 上显示的示例显示从 java 程序读/写。我可以运行该程序,但是我使用 serialPort.writeString("HelloWorld"); 发送的数据似乎没有在 SerialPortReader 事件类中读取。谁能指出问题所在?

 public class SerialReaderWriter {

static SerialPort serialPort;

public static void main(String[] args) {
    serialPort = new SerialPort("COM1"); 
    try {
        serialPort.openPort();
        serialPort.setParams(9600, 8, 1, 0);
        //Preparing a mask. In a mask, we need to specify the types of events that we want to track.
        //Well, for example, we need to know what came some data, thus in the mask must have the
        //following value: MASK_RXCHAR. If we, for example, still need to know about changes in states 
        //of lines CTS and DSR, the mask has to look like this: SerialPort.MASK_RXCHAR + SerialPort.MASK_CTS + SerialPort.MASK_DSR
        int mask = SerialPort.MASK_RXCHAR;
        //Set the prepared mask
        serialPort.setEventsMask(mask);
        //Add an interface through which we will receive information about events
        serialPort.addEventListener(new SerialPortReader());

        serialPort.writeString("HelloWorld");
    }
    catch (SerialPortException ex) {
        System.out.println(ex);
    }
}

static class SerialPortReader implements SerialPortEventListener {

    public void serialEvent(SerialPortEvent event) {
        //Object type SerialPortEvent carries information about which event occurred and a value.
        //For example, if the data came a method event.getEventValue() returns us the number of bytes in the input buffer.
        System.out.println(event.getEventType());
        if(event.isRXCHAR()){
            if(event.getEventValue() == 10){
                try {
                    String data= serialPort.readString();
                    System.out.println(data);
                }
                catch (SerialPortException ex) {
                    System.out.println(ex);
                }
            }
        }
        //If the CTS line status has changed, then the method event.getEventValue() returns 1 if the line is ON and 0 if it is OFF.
        else if(event.isCTS()){
            if(event.getEventValue() == 1){
                System.out.println("CTS - ON");
            }
            else {
                System.out.println("CTS - OFF");
            }
        }
        else if(event.isDSR()){
            if(event.getEventValue() == 1){
                System.out.println("DSR - ON");
            }
            else {
                System.out.println("DSR - OFF");
            }
        }
    }
}

最佳答案

你不能从你写的同一个端口(这里是COM1)读取数据。我已按照以下步骤使用 JSSC 进行读写。

SerialPortMonitor 伪造你的串口.

  1. 从安装的 SerialPortMonitor 设备的 COM2 发送数据。 enter image description here

  2. Mode->Spy 将显示您编写的字符串“HelloWorld”并接收到字符串“OK”enter image description here

进行以下修改并检查您的代码:

serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN |
                                 SerialPort.FLOWCONTROL_RTSCTS_OUT);

serialPort.writeBytes("HelloWorld");//Write data to port
PortReader portReader=new PortReader(serialPort)
serialPort.addEventListener(portReader, SerialPort.MASK_RXCHAR);
int[][] eventArray=serialPort.waitEvents()
for (int i = 0; i < eventArray.length; i++) {
    if ((eventArray[i][0] > 0) ) {
    serialPort.eventListener.serialEvent(new SerialPortEvent("COM1", eventArray[i][0], eventArray[i][1])); // wait for the listener event to complete
        }
    }

端口读取器类:(您缺少 Override 注释并传入串行端口)

public class PortReader implements SerialPortEventListener{
SerialPort serialPort
public PortReader(){}
public PortReader(SerialPort serialPort){this.serialPort=serialPort}
    @Override
    public void serialEvent(SerialPortEvent event) {
    if(event.isRXCHAR() && event.getEventValue() > 0) {
            try {
                String receivedData = this.serialPort.readString(event.getEventValue());
                System.out.println("Received response: " + receivedData);
                this.serialPort.closePort();//Close serial port
            }
            catch (SerialPortException ex) {
                System.out.println("Error in receiving string from COM-port: " + ex);
                this.serialPort.closePort();//Close serial port
            }
        }
    }

}

关于java-simple-serial-connector 读/写服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16303585/

相关文章:

java - 使用 Java Lambda 时捕获/重新抛出的替代方案?

c# - 如果正在使用的 USB COM 端口已被移除,SerialPort.Close() 会卡住应用程序

.net - 我中止正在写入串行端口的线程时出现ObjectDisposedException

c - PIC 上的 USART 传输问题

java - 在特定时间后停止调度程序

java - JSP/JSTL 使用或不使用 <c :out> tags

java - 在 while 中使用 if 语句会打破 Java 中的循环

java - Osmdroid 5.1 java.lang.NoClassDefFoundError

windows - Rust Serialport-RS 读取被阻止

c - Arduino串口阅读