- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要从用 Python 编写的外部应用程序控制 Simulink 控制方案。我需要做的是逐步完成模拟,并在每一步中检索输出并让 Python 应用程序确定新的输入集。这是一个固定的时间段。有什么办法可以做到这一点?我承认我很难尝试使用 matlab 脚本来实现这一点,更不用说 Python 了。这可行吗?如果没有,有没有办法将Python模块插入到simulink方案中?
谢谢
编辑:这就是我设法解决它的方式
为了逐步运行模拟,我创建了这个带有时钟、关系运算符和断言 block 的 block 结构
其中Tmp是每次暂停的时间戳
Tmp=get_param(bdroot,'SimulationTime')
断言 block 包含以下指令:
set_param(bdroot,'SimulationCommand','pause')
这样,模拟在每个步骤后暂停,即 (clockTime-Tmp)=timeStep。
现在,我创建了一个 Python 脚本来启动模拟(参见接受的答案)并像这样迭代:
#While the simulation is running
while eng.get_param('simpleTest','SimulationStatus')!=('stopped' or 'terminating'):
if eng.get_param('simpleTest','SimulationStatus')=='paused':
#do your evaluations and operations
eng.set_param('simpleTest','SimulationCommand','update',nargout=0) #if you have updated any simulation parameters
eng.set_param('simpleTest','SimulationCommand','continue',nargout=0)
这对我来说似乎工作正常,但如果有更好的选择,请告诉我。
最佳答案
使用 matlab.engine
bindings in Python您可以启动 MATLAB 引擎实例并将单独的命令作为字符串发送到 MATLAB(如果您尚未使用它)。这种技术可以让您输入字符串,就好像您在 MATLAB 命令行中输入它们一样。例如:
>>>import matlab.engine # load engine functionality
>>>eng = matlab.engine.start_matlab() # init instance of engine
>>>eng.sim("simulinkModelName") # start a simulink model by calling it through the engine instance
这也让你 pass data to MATLAB from Python ,根据文档。根据您所说,这应该足以实现您的要求。
但是,我想到了另一种方法,即使用 TCP/IP 连接在两个进程之间进行通信(Python GUI 到 Simulink)。这将使您可以将消息从一个程序发送到下一个程序,然后您可以相应地解析它们。 (Simulink、Matlab 和 Python 都有 TCP/IP 选项!)
在这个想法中,我会让 GUI 充当服务器并在后台异步线程中监听/向客户端 (simulink) 发送消息。例如,您可以发送一个命令来开始模拟,然后在某个点停止并等待从 Python 接收数据。
这可能需要对线程处理有更复杂的理解,我建议查找 threading in Python ,以及 using sockets in Python .
如果您确实想转而使用另一种语言进行 GUI 开发,则 TCP/IP 命令对于 future 的实现也将是相同的。
我希望这可以帮助您完成任务!
关于python - 从 Python 逐步执行 Simulink 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48864281/
我有一个“有趣”的问题,即以两种不同的方式运行 wine 会导致: $> wine --version /Applications/Wine.app/Contents/Resources/bin/wi
我制作了这个网络抓取工具来获取网页中的表格。我使用 puppeteer (不知道 crontab 有问题)、Python 进行清理并处理数据库的输出 但令我惊讶的是,当我执行它时 */50 * * *
JavaScript 是否被调用或执行取决于什么?准确地说,我有两个函数,它们都以相同的方式调用: [self.mapView stringByEvaluatingJavaScriptFromStri
我目前正在使用 python 做一个机器学习项目(这里是初学者,从头开始学习一切)。 只是想知道 statsmodels 的 OLS 和 scikit 的 PooledOlS 使用我拥有的相同面板数据
在使用集成对象模型 (IOM) 后,我可以执行 SAS 代码并将 SAS 数据集读入 .Net/C# 数据集 here . 只是好奇,使用 .Net 作为 SAS 服务器的客户端与使用 Enterpr
有一些直接的 jQuery 在单击时隐藏打开的 div 未显示,但仍将高度添加到导航中以使其看起来好像要掉下来了。 这个脚本工作正常: $(document).ready(funct
这个问题已经有答案了: How do I compare strings in Java? (23 个回答) 已关闭 4 年前。 这里是 Java 新手,我正在使用 NetBeans 尝试一些简单的代
如果我将它切换到 Python 2.x,它执行 10。这是为什么? 训练逻辑回归模型 import keras.backend as
我有两个脚本,它们包含在 HTML 正文中。在第一个脚本中,我初始化一个 JS 对象,该对象在第二个脚本标记中引用。 ... obj.a = 1000; obj.
每当我运行该方法时,我都会收到一个带有数字的错误 以下是我的代码。 public String getAccount() { String s = "Listing the accounts";
我已经用 do~while(true) 创建了我的菜单;但是每次用户输入一个数字时,它不会运行程序,而是再次显示菜单!你怎么看? //我的主要方法 public static void main(St
执行命令后,如何让IPython通知我?我可以使用铃声/警报还是通过弹出窗口获取它?我正在OS X 10.8.5的iTerm上运行Anaconda。 最佳答案 使用最新版本的iTerm,您可以在she
您好,我刚刚使用菜单栏为 Swing 编写了代码。但是问题出现在运行中。我输入: javac Menu.java java Menu 它没有给出任何错误,但 GUI 没有显示。这是我的源代码以供引用:
我觉得这里缺少明显的东西,但是我看不到它写在任何地方。 我使用Authenticode证书对可执行文件进行签名,但是当我开始学习有关它的更多信息时,我对原样的值(value)提出了质疑。 签名的exe
我正在设计一个应用程序,它使用 DataTables 中的预定义库来创建数据表。我想对数据表执行删除操作,为此应在按钮单击事件上执行 java 脚本。 $(document).ready(functi
我是 Haskell 新手,如果有人愿意帮助我,我会很高兴!我试图让这个程序与 do while 循环一起工作。 第二个 getLine 命令的结果被放入变量 goGlenn 中,如果 goGlenn
我有一个用 swing 实现迷你游戏的程序,在主类中我有一个循环,用于监听游戏 map 中的 boolean 值。使用 while 实现的循环不会执行一条指令,如果它是唯一的一条指令,我不知道为什么。
我正在尝试开发一个连接到 Oracle 数据库并执行函数的 Java 应用程序。如果我在 Eclipse 中运行该应用程序,它可以工作,但是当我尝试在 Windows 命令提示符中运行 .jar 时,
我正在阅读有关 Java 中的 Future 和 javascript 中的 Promises 的内容。下面是我作为示例编写的代码。我的问题是分配给 future 的任务什么时候开始执行? 当如下行创
我有一个常见的情况,您有两个变量(xSpeed 和 ySpeed),当它们低于 minSpeed 时,我想将它们独立设置为零,并在它们都为零时退出。 最有效的方法是什么?目前我有两种方法(方法2更干净
我是一名优秀的程序员,十分优秀!