花间Iris 2021-11-09 10:59 采纳率: 0%
浏览 29

java jssc串口通信怎么接收数据长度不一样的数据?

代码是这样的

public static void main(String[] args) throws SerialPortException {
        SerialPort serialPort = new SerialPort("COM1");
        serialPort.openPort();
        serialPort.setParams(SerialPort.BAUDRATE_115200, 8, 1, 0);
        if (serialPort.isOpened()) {
            System.out.println("打开串口:" + serialPort.getPortName());
            serialPort.addEventListener(serialPortEvent -> {
                if (serialPortEvent.isRXCHAR()) {
                    while (true) {
                        if (serialPortEvent.getEventValue() > 0) {
                            try {
                                int b=serialPortEvent.getEventValue();
//                               byte[] bytes = serialPort.readBytes(b);
                                String hex= serialPort.readHexString(b);
                                //以16进制的方式读取串口返回数据

                                System.out.println("串口:" + serialPort.getPortName() + ",接收数据:" +hex);

                                String[] res=hex.split(" ");
                                String str="";
                                for (String r:res){
                                    str+=r;
                                }
                                System.out.println(str);
                                String bw=hexStr2Str(str);
                                System.out.println("原文"+bw);
                         } catch (SerialPortException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            });
}

/**
     * 16进制直接转换成为字符串(无需Unicode解码)
     * @param hexStr
     * @return
     */
    public static String hexStr2Str(String hexStr) {
        String str = "0123456789ABCDEF";
        char[] hexs = hexStr.toCharArray();
        byte[] bytes = new byte[hexStr.length() / 2];
        int n;
        for (int i = 0; i < bytes.length; i++) {
            n = str.indexOf(hexs[2 * i]) * 16;
            n += str.indexOf(hexs[2 * i + 1]);
            bytes[i] = (byte) (n & 0xff);
        }
        return new String(bytes);
    }

代码等长度数据接收没问题,但如果数据长度变化后,新接收的数据还是原来数据的长度,但是新数据长度不足的地方被原数据的字符代替,如果长度比原数据长,则不显示后面的数据,这种情况怎么解决啊?

  • 写回答

2条回答 默认 最新

  • 关注

    首先要定义结构体,命令字,数据长度,接受的时候先度命令字,再读取数据长度,最后根据长度读取数据。

    评论

报告相同问题?

问题事件

  • 创建了问题 11月9日

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog