gpt4 book ai didi

java - RXTX Java librairie错误

转载 作者:行者123 更新时间:2023-11-29 08:54:30 25 4
gpt4 key购买 nike

我的英语不太好,所以我会尽力让你明白。
我目前正在从事一个多程序项目。
我编写了一个Arduino控制程序,该程序可以让我通过命令管理传感器网络。例如,我可以通过键入命令“ add”等来添加传感器。

我还编写了一个用于微控制器的Java API,用于传感器数据收集(它适用于每种微控制器),它能够将命令文件发送到微控制器,以取回接收到的数据并将它们存储到一个文件中。我选择的一种格式(JSON,XML,PostScript,字节码...),也可以将其以http标头形式发送到IP地址...

我有以下问题:

当我从Java程序向微控制器发送命令时,Java程序有时无法接收命令执行响应,这导致它崩溃:

Stable Library
=========================================
Native lib Version = RXTX-2.1-7
Java lib Version = RXTX-2.1-7
Received line : I: Tab cleared.
Received line : I: Setup terminated
|MicroController.java->messageReceived|: recieved response : I: Setup terminated
Send : add t1 2 3
Received line : I:|Main loop| command received :add t1 2 3
Received line : I:|Main loop| command add t1 2 3 in execution ...
Received line : I:|Main loop| command add t1 2 3 executed.
Received line : I:|Main loop| return code 0 sent.


如您所见,微控制器发送了返回码“ 0”,但是Java没收到它。

我已经编写了自己的send()和receive()方法:

/**
* Send message.
*
* @param str String to send.
*
* @throws IOException IO error.
* @throws InterruptedException
*/
public void sendMessage(String str)
throws IOException, InterruptedException
{
System.out.println("Send : " + str);

// Send the command.
output.write(str.getBytes());
output.flush();
}

/**
* Handle input event on the serial port.
*
* @param oEvent Event receives.
*/
private synchronized void processReceivedEvent(SerialPortEvent oEvent)
{
if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE)
{
try
{
// Wait input to be ready (mandatory, exception o/w).
while (!input.ready())
{
Thread.sleep(1);
}
String inputLine = input.readLine();
System.out.println("Received line : " + inputLine);

// Notify listener.
if ((listener != null) && (inputLine != null))
listener.messageReceived(inputLine);
}
catch (Exception e)
{
if (port != null)
e.printStackTrace();
}
}
}


也许我有一些同步错误,这会导致串行读取错误,但是我很想知道我的发送和接收方法与串行librairie方法之间是否存在某种冲突...

谢谢。

最佳答案

我终于解决了这个问题。我的代码中有一个BufferedReader,它在阻塞程序时崩溃。
由于串行链接和这个无用的BufferedReader(在我的程序中毫无用处),因此在微控制器发送的消息与Java程序接收的消息之间存在太多层,因此大部分时间它都超时。

我放置了一个简单的InputStream以避免出现分层,并开发了自己的阅读方法。

但是我还有一个持续的问题:

当微控制器安装完成时,它将以下消息发送到Java程序:“ I:安装终止”。

如果Java程序未收到此消息,它将进入超时状态。
但是有时,Java程序会收到“ termI:安装程序终止”,并在“ I:”前面加上一些字符。

我不知道它会从哪里来。。。如果您有任何线索,那会很好。

谢谢 !

关于java - RXTX Java librairie错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20976365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com