簡體   English   中英

使用Shell和Java讀取和寫入串行端口

[英]Reading and writing to a serial port using shell and Java

我正在嘗試使用Shell和Java的組合讀取和寫入串行端口。 目的是能夠使用PrintWriter和BufferedReader從連接到串行端口的設備發送和接收命令。 我知道這可以通過不同的方式完成(無需使用shell),但這不是我想要的。 我希望能夠使用Shell和Java做到這一點。

這是我的代碼:

static String port = "/dev/tty.usbmodem411";
static int baudRate = 9600;
private static String command = "screen " + port + " " + baudRate;

public static void main(String[] args) throws Exception {
    System.out.println("Command is " + command);
    Process p = Runtime.getRuntime().exec(command);
    //p.waitFor();

    BufferedReader reader =
            new BufferedReader(new InputStreamReader(
            p.getInputStream()));
    String line = reader.readLine();
    while(true)
    {
        if (line != null) {
            System.out.println(line);

        }
        line = reader.readLine();
    }

}

通過此代碼,我專門嘗試從串行端口讀取。 我正在使用Java運行Shell命令來訪問串行端口,然后從命令中讀取輸出。

但是,當我運行此代碼時,總是收到一條消息,指出“必須連接到終端”。 我還嘗試過更改command = "screen " + port + " " + baudRate;command = "screen " + port + " " + baudRate; command = "screen -dm" + port + " " + baudRate; ,但是我什么也沒得到。 我已經咨詢了幾個類似的問題, 從Java執行屏幕命令以及如何在Linux中打開命令終端? 但我仍然不知道該怎么辦才能解決此問題。 我覺得這一定很簡單,但是經過數小時的研究,我不知道該怎么辦。

您可以使用UUCP軟件包中的命令cu來代替屏幕 要安裝UUCP軟件包sudo apt-get install uucpsudo yum install uucp

然后使用以下命令: static String command = "cu -l " + port + " -s " + baudRate;

一些解釋:

  • screen -d分離會話(它在后台運行),這就是為什么您看不到任何數據的原因。
  • 屏幕需要終端,這對於Java來說並不容易。 請參閱如何在Linux中打開命令終端?

您的描述表明您只需要訪問串行端口上接收的流。 您表示希望使用shell命令來訪問端口。 為什么不使用cat ...將從端口接收的內容發送到標准輸出。

如果這可行,那么為什么不能僅打開串行端口並直接從中讀取?

使用screen似乎會帶來該窗口管理器提供的所有全屏處理,這不太可能正確處理。 例如,應為輸出格式化屏幕的終端類型?

暫無
暫無

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

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