这是在RXTX官网COPY的代码,
package rxtx; import gnu.io.CommPort; import gnu.io.CommPortIdentifier; import gnu.io.SerialPort; import java.io.FileDescriptor; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class TwoWaySerialComm { public TwoWaySerialComm() { super(); } void connect(String portName) throws Exception { CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName); if (portIdentifier.isCurrentlyOwned()) { System.out.println("Error: Port is currently in use"); } else { //打开接口 CommPort commPort = portIdentifier.open(this.getClass().getName(), 2000); if (commPort instanceof SerialPort) { SerialPort serialPort = (SerialPort) commPort; //设置串口通行控制:波特率=9600,数据位=8,停止位=1,无效验 serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); //输入 InputStream in = serialPort.getInputStream(); //输出 OutputStream out = serialPort.getOutputStream(); System.out.println("111"); (new Thread(new SerialReader(in))).start(); (new Thread(new SerialWriter(out))).start(); System.out.println("222"); } else { System.out.println("Error: Only serial ports are handled by this example."); } } } /** 读取*/ public static class SerialReader implements Runnable { InputStream in; public SerialReader(InputStream in) { this.in = in; } public void run() { byte[] buffer = new byte[1024]; int len = -1; try { while ((len = this.in.read(buffer)) > -1) { System.out.print(new String(buffer, 0, len)); } } catch (IOException e) { e.printStackTrace(); } } } /** 写出*/ public static class SerialWriter implements Runnable { OutputStream out; public SerialWriter(OutputStream out) { this.out = out; } public void run() { try { int c = 0; while ((c = System.in.read()) > -1) { this.out.write(c); } } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { try { (new TwoWaySerialComm()).connect("COM3"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
之后运行,无论怎么输入,输入什么,都只能串口发送数据,并不能接收数据,
发送出去的口令,永远没有回应。
应该是代码SerialWriter方法有点问题,希望懂的大神指点一二。感激不尽
用串口设备官网给得软件,是可以串口输入输出数据的,说明串口链接说明的都ok
你为什么不认为是硬件问题 —— ;你应当先用个工具测试一下,确认一下硬件及线路没问题;
硬件没问题,我拿产品官网的测试工具使用过了的,使用一切正常,
产品就是截图上的KD51B10这个产品,是个温湿度传感器
串口本身很简单,这是Modbus协议,你是否发送的是该协议包——你乱发数据是不会甩你的。也真是醉了——你们哪位领导让你从串口去做Modbus的协议的,这个有专门的协议解析模块的,自己去查下载。别个这个包往往包含了其他通讯链路以及叫RTU(好像叫这个来着)模式的。
@花飘水流兮:我的问题说了啊,我写的代码使用RXTX协议,并不是Modbus协议。该产品官网下载下来的工具是modbus协议实现数据发送和读取的,工具运行成功,说明串口的驱动,连接都是对的,如果RXTX协议的代码写好的话,按道理应该也是能发送和读取数据的,可我现在只能发送,不能读取,发送的数据时按照说明文档的,不应该没有回复的。