我需要在Java程序和Simulink模型之间传输十进制值,为此我使用UDP套接字,它们在java方面没有问题 . 在Simulink中,我能够使用“Stream Output”块发送值,但是从java接收时会出现问题! 'Stream input'块没有收到任何东西 . 我正在使用标准设备UDP protocole,使用正确的本地UDP端口,地址是'localhost . 请告诉我如何正确地使用udp在simulink中接收双倍,或者甚至用其他方法,什么是传输数据 . 提前致谢 . 这里有一些代码:
localSocket = new DatagramSocket(9010);
...
public static void localSend(String msg,int PORT) throws Exception{
DatagramPacket sendPacket = null,encPacket=null;
try {
sendPacket = new DatagramPacket(msg.getBytes(), msg.getBytes().length, InetAddress.getLocalHost(), PORT);
} catch (Exception e) {
System.out.printf("Error!");
}
localSocket.send(sendPacket);
}
在主要方法中:
localSend(myMessage, 9005);
'Input Stream'块的'Board setup'是Simulink如下:
这是我如何从Simulink ins Java(方法)接收数据:
public static String localReceive() throws Exception{
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
int count=0;
try {
localSocket.receive(receivePacket);
return new String(receivePacket.getData(),receivePacket.getOffset(),receivePacket.getLength());
} catch (SocketTimeoutException socketTimeoutException) {
return defaultValue;
}
}
和在Simulink中设置"Output Stream"块:
2 回答
另一种解决方案,在Simulink中输入流 . 只需在java中为每条消息添加一个终止符“\ n” .
我做了一个技巧 . 'Packet Input' Simulink块,'ASCII Decode',
我调整这两个块的参数如下:
在java方面,我用这种方法重新格式化'double':
简要说明:数据包输入块每次接收7个ASCII,并且在java中我重新格式化double,组合7个字符(包括点和减号) .
希望这能有所帮助 .
update: