如何将命令发送到串行端口(JAVA + RXTX)

l

将数据输入发送到体重秤时出现问题。我需要发送ESC P CR LF命令。我使用RXTX lib。我不知道为什么它不起作用。

这是代码:

public static class SerialWriter implements Runnable {
    OutputStream out;

    public SerialWriter ( OutputStream out ) {
        this.out = out;
    }

    public void run () {
        try {                
            while (true) {
               this.out.write(new byte[]{0x1B, 0x50, 0x0D, 0x0A});
                Thread.sleep(1000);
            }                
        } catch ( IOException | InterruptedException e ) {
            e.printStackTrace();
        }            
    }
}

我尝试了一下,flush但没有任何反应。

我在下面附加了完整的(修改后的)代码。

package model;

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 FirstSteps {
    public FirstSteps() {
        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 {
            System.out.println("Connect 1/2");
            CommPort commPort = portIdentifier.open(this.getClass().getName(),6000);
            if (commPort instanceof SerialPort) {
                System.out.println("Connect 2/2");
                SerialPort serialPort = (SerialPort) commPort;
                System.out.println("BaudRate: " + serialPort.getBaudRate());
                System.out.println("DataBIts: " + serialPort.getDataBits());
                System.out.println("StopBits: " + serialPort.getStopBits());
                System.out.println("Parity: " + serialPort.getParity());
                System.out.println("FlowControl: " + serialPort.getFlowControlMode());
                serialPort.setSerialPortParams(4800,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_ODD);
            serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN);
                System.out.println("BaudRate: " + serialPort.getBaudRate());
                System.out.println("DataBIts: " + serialPort.getDataBits());
                System.out.println("StopBits: " + serialPort.getStopBits());
                System.out.println("Parity: " + serialPort.getParity());
                System.out.println("FlowControl: " + serialPort.getFlowControlMode());
                InputStream in = serialPort.getInputStream();
                OutputStream out = serialPort.getOutputStream();

                (new Thread(new SerialReader(in))).start();
                (new Thread(new SerialWriter(out))).start();
            } 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.println("Received a signal.");
                    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 {
                byte[] array = {0x1B, 0x50, 0x0D, 0x0A};
                while (true) {
                    this.out.write(new byte[]{0x1B, 0x50, 0x0D, 0x0A});
                    this.out.flush();
                    Thread.sleep(1000);  
                }                
            } catch ( IOException | InterruptedException e ) {
                e.printStackTrace();
            }            
        }
    }

    public static void main(String[] args) {
        try {
            (new FirstSteps()).connect("COM7");
        } catch ( Exception e ) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
用户名

根据提供的代码,我唯一能给出的建议是尝试在将数据放入流后刷新流(out.flush())。

除此之外-我需要查看获取输出流的代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将命令发送到串行端口(JAVA + RXTX)

来自分类Dev

串行通讯库RXTX

来自分类Dev

Java RXTX不发送数据

来自分类Dev

如何关闭RXTX中的CommPort

来自分类Dev

获取数据后关闭串行端口,使用RXTX的Java

来自分类Dev

并行端口通信Rxtx或javax.comm

来自分类Dev

Java RXTX-通过串行通信检测正确的设备

来自分类Dev

如何将Java rxtx库包含到我的Minecraft mod中?

来自分类Dev

如何将Java rxtx库包含到我的Minecraft mod中?

来自分类Dev

如何使用.dll制作可执行jar文件-RXTX

来自分类Dev

如何为Ubuntu12.04 / 14.04构建本机RXTX库?

来自分类Dev

如何将数据发送到串行端口并看到任何答案?

来自分类Dev

如何将数据发送到程序正在连接的串行端口

来自分类Dev

如何将十六进制字符串发送到串行端口?

来自分类Dev

如何使用PowerShell通过串行端口将十六进制命令发送到监视器

来自分类Dev

如何将IO发送到Erlang端口?

来自分类Dev

通过 rxtx 库和 SerialPortEvent 在 JAVA 中接收数据,在 jTextArea 中显示字符串文本

来自分类Dev

在JDK下安装rxtx

来自分类Dev

RXTX版本不匹配

来自分类Dev

串口通讯RXTX

来自分类Dev

Serial Port Comunication RXTX

来自分类Dev

在JDK下安装rxtx

来自分类Dev

RXTX版本不匹配

来自分类Dev

使用文库RXTX 2.1

来自分类Dev

将数据发送到Little Endian的串行端口

来自分类Dev

Java无法正确发送到串行端口

来自分类Dev

如何通过TCP / IP / UDP将数据发送到串行端口?

来自分类Dev

如何将新命令发送到子流程

来自分类Dev

如何将命令发送到特定的终端窗口?