【发布时间】:2019-03-31 17:18:12
【问题描述】:
我正在制作一个程序,我需要从 Simulink 模型中收集值并将它们传递给 Java 程序。我在 Matlab 中设置了一个 Level 2 S 函数,我在其中实例化了一个我需要将值传递给的类的实例。一旦我有了这些值,我想在 Update 函数中将它们传递给我的对象。但是,我的程序在 Update 函数中无法识别我的对象。
function Start(block)
gameObj = javaObject('millerek.lafayette.edu.Game'); %set up game
gameObj.main("");
%end Start
function Update(block)
X = block.InputPort(1).Data(1,1);
Y = block.InputPort(1).Data(2,1);
javaMethod('getMdlValues',gameObj,X,Y);
%gameObj.getMdlValues(1,0); %test. This did not work either
%end Update
我尝试过使用 javaObjectEDT 和 javaMethodEDT,但它们不起作用。
当 Simulink 运行时,我能够成功创建我的对象。执行 Update 时,我从 Matlab 收到一个错误,说它无法识别我的对象(因此得到一个空指针异常)。我相信这是因为我在 Start 函数中创建了我的 java 对象并在那里调用它的 main ,但是我尝试在 Update 函数中传递值,所以也许该对象被视为本地对象?我已将我正在使用的 jar 文件添加到 Matlab 中的静态类路径中。我不确定如何让 Matlab 将其视为全球性的。感谢您抽出宝贵时间提供帮助,非常感谢!
【问题讨论】:
-
“这不起作用”是什么意思?请明确点。您确实使用
InputPort.Data获取数据。在 Start Function 中创建对象时,您将其存储在哪里,以及如何在其他方法中访问它? -
嗨 Phil,所以我回到文档并找出了我的数据收集问题 - 我试图处理 2D 数据,但我忘记包含 block.AllowSignalsWithMoreThan2D = 1; .但是,当程序现在运行时,我得到:未定义的函数或变量“gameObj”。我在我的问题中添加了处理所有 Java 部分的两个函数。感谢您花时间查看我的问题。