簡體   English   中英

Java - 串口數據提取

[英]Java - Serial port data extraction

我對 Java 和一般編程相當陌生。 我正在 Java Swing 中制作一個應用程序,該應用程序從連接到點鈔機的串行端口讀取數據。 當機器計數某物時,它通過RS232-USB轉換器將計數數據發送到PC。 我設法制作了一個應用程序,可以找到並打開 COM 端口,並從機器中讀取數據。 這是我得到的數據:

機器輸出

是否可以僅從 output 中提取某些信息? 例如只有 D10 的單元數? 如果是這樣,我該怎么做?

想法是將所有信息分別寫入已經定義的JTextfields

我試過這樣的事情:

while ((line = portReader.readLine()) != null) {
                //window.ta_logs.append(line + "\n");
                StringTokenizer st = new StringTokenizer(line);
                while (st.hasMoreElements()) {
                    String token = st.nextToken();
                    if (token.contains("D50")) {
                        data.put("D50", token.substring(2));
                    }
                    window.ta_logs.append(token);
                }
                System.out.println(line);
                System.out.println(data);

            }

提前致謝。

"是否可以從這個 output 中只提取某些信息? "

當然這是可能的。 您已經從串行端口讀取數據。 您可以標記數據並存儲在 map 中。

// Get the data from serial port and tokenize it
Map<String, Whatever> data = new HashMap<>();
data.put("D10", XXX);
data.put("D20", YYY);
...

然后,您可以在相應的文本框中設置文本

d10TextField.setText(data.get("D10"));
d20TextField.setText(data.get("D20"));
...

您只需要讓這個 map 可訪問。

while (input.available() > 0) {
                input = serialPort.getInputStream();
                int nBytes = input.available();
                int c = input.read();
                System.out.println("nBytes = " + nBytes);
                System.out.println("read " + (char) c);

                if (nBytes == 376) {
                    data.put("D10", (char) c);
                } else if (nBytes == 344) {
                    data.put("D20", (char) c);
                } else if (nBytes == 312) {
                    data.put("D50", (char) c);
                } else if (nBytes == 280) {
                    data.put("D100", (char) c);
                } else if (nBytes == 248) {
                    data.put("D200", (char) c);
                } else if (nBytes == 216) {
                    data.put("D500", (char) c);
                } else if (nBytes == 184) {
                    data.put("D1000", (char) c);
                } else if (nBytes == 152) {
                    data.put("D2000", (char) c);
                } else if (nBytes == 120) {
                    data.put("D5000", (char) c);
                }

我這樣做並得到了想要的結果。

我的第二個問題是,例如,如果 D10 的數量超過 9 個,我該如何獲取數據。 在這種情況下,我必須考慮兩個字節,或者如果數字是 100 或更多,則考慮三個字節。

有任何想法嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM