如何在Simulink中执行单元测试,或者最好是Stateflow?
我是敏捷软件方法的粉丝,包括测试驱动开发.我负责开发安全关键控制软件,我们正在使用Matlab/Simulink/Stateflow进行开发.选择此工具集是因为与工厂(硬件)模型的链接.(模型在环,硬件在环)
我发现#2一些链接:为MATLAB单元测试框架:的xUnit,slunit和文档测试.
matlab continuous-integration unit-testing simulink stateflow
我们在几个开发人员的团队中使用Matlab Simulink进行模型开发(和Real-Time Workshop自动编码).
我们目前使用Visual Source Safe(是的,我知道它很糟糕)进行版本控制,使用锁来防止冲突的变化.
我们想将程序迁移到不同的版本控制系统(svn,hg或git),但我们担心在Simulink .mdl文件上执行合并和差异.
有没有人在Simulink文件上执行合并方面有经验?
什么是(如果有)Simulink库和模型引用之间的差异.在不同的情况下使用它们中的任何一个都有好处吗?
有关这些文件格式的信息有哪些?有哪些工具可用于解析这些文件?
我有一个Simulink模型,目前正在从脚本(即不是函数)运行.该脚本将变量值写入MATLAB工作空间,运行模型模拟(使用这些值),然后模型将其他值写入工作空间.如果我尝试将脚本转换为函数(即放置function [output] = runSim()在文件的顶部),那么Simulink会抱怨它不知道变量,可能是因为它们不在MATLAB工作区中,而是它们在功能范围.
是否有一种优雅的方式来提供Simulink模型的输入并从Simulink模型中获取输出而不是将它们粘贴到工作区中?
这个问题实际上有两个主要方面.在开始的时候,我不得不承认我对物理建模完全不熟悉,并且很高兴能够得到纠正,不仅要回答.对于那些发现阅读时间太长的人,我可以给出一个简短的总结:
1) Simulink vs Modelica
2) Simscape vs Modelica
Run Code Online (Sandbox Code Playgroud)
1)第一个是建模方法的比较.传统上,我想要比较的两种主要方法有不同的名称:
# 信号流方法/基于块的建模/因果建模......:Simulink中的典型模型.它们之间有输入和输出以及传输功能的盒子.
VS
# 网络方法/基于组件的建模/非因果(非因果)建模......:有物理端口而不是信号I/O,流实体(电流,热量等)可以在两个方向上流动.
在这个比较中,我已经在网上阅读了一些意见并搜索了一些论文.它归结为基于Modelica的开发环境和Simulink (例如)的比较,据我所知.与我要问的另一点相比,这两者的缺点和优点对我来说更清楚.
2)在对第一次比较进行了大量阅读之后,我更倾向于使用基于组件的建模.但是,Modelica并不是唯一的选择.还有Simscape,您可以使用它来组合物理端口(如在Modelica中)和基于块的Simulink建模.
我想知道这个Simscape 与 Modelica比较的优点和缺点.为了避免误解,我需要强调Modelica是一种语言.因此,将任何Modelica环境与Simscape进行比较会更有意义,比如OpenModelica vs Simscape
我想了解Simulink仿真引擎的工作原理.它是否使用离散事件模拟机制(然后如何处理连续时间?)?它是否依赖于基于静态循环的代码生成?要么 ?
我正在努力确定为我的工作购买这两个中的哪一个.我使用过SIMULINK而不是LabVIEW.是否有人使用过两者并希望提供一些细节?我的调查标准是用户友好性,库和模板功能的可用性,实时探测设施,COTS硬件接口机会,代码生成质量,可测试性设计(即易于生成单元/验收测试)等.但是,如果有人想用更多标准教育我,请务必这样做!
对于不了解SIMULINK和LabVIEW的人 - 这些都是针对图形数据流建模(以及代码生成)的特定于域的语言(DSL).这些是多工业工具,非常多地用于工程设计和建模.
重要信息 - 我很想知道SIMULINK和LabVIEW是否提供实时探测.例如,我有一个我想要模拟的模型.如果有与该模型中某些构建块关联的变量,我可以在模拟继续时查看它们吗?我知道SIMULINK肯定不可能,因为它有一个逐步调试器.我不知道LabVIEW中有类似的东西.
我真的没有使用LabVIEW,暂时无法获取它,因为我的工作互联网有下载限制和管理权限问题.这就是为什么我根本不能仅使用NI网站得出结论的原因.如果有任何白皮书可以解决这个问题,我也很想知道:)
自上次发布后更新
我使用过MATLAB代码生成器,并不会说它是最好的.但是,我现在听说SIMULINK嵌入式编码器是最好的代码生成器,几乎是其中一种.任何人都可以确认这是否有利于安全关键系统设计,即从安全关键子系统模型生成代码.我知道Mathworks不断尝试缩小差距,以实现完全灵活的生产级C/C++代码生成.
我知道一个理想的答案是,"取决于你想要做什么,使用两者兼而有之".有趣的是,我认为我正朝着这个方向前进.ATEOTD,这是一笔很多钱,需要"很好"地度过.
提前致谢.
我想在模拟过程中从simulink检索数据,并使用串行网络功能将这些数据发送到另一个程序.因为我需要使用另一个程序来做一些技巧并将命令发送回simulink,所以我必须在运行期间从simulink获取数据,以便另一个程序可以做出正确的命令.
我尝试使用To Workspace块导出数据.

但是,我只能在模拟的最初阶段获得价值.
我还尝试使用范围并更改了一些属性:选中将数据保存到工作区并取消选中限制数据到最后.


首先,我开始模拟,我发现ScopeData没有出现在Workspace中.只有当我停止模拟时,ScopeData才会出现在工作区中.

之后,我可以使用ScopeData.signals.values来获取值.
但我想要的是:当我开始模拟时,ScopeData会出现在工作区中,以便我可以将这些数据发送到其他程序.
有谁知道如何实现这一目标?
我发现这个页面可能有用,但我仍然不知道在模拟过程中如何连续导出数据.
如何在Simulink(Matlab R2015A)中创建一个以ROS消息形式发送浮点数的发布者(在Ubuntu 14.04下的ROS Indigo中)?我应该使用BlankMSG味精类型为:std_msgs/Float32MultiArray,Publish具有相同味精类型和自己的主题名称的块。
我不知道如何将矢量添加到味精总线上的数据字段。我很累,在一个Bus Assignment块中数据输入是一个常数向量,但是我得到一个错误:
总线分配块“ SubscriberMotorStates / Bus Assignment”的总线输入端口不支持将总线阵列作为子元素。
更新
我尝试在Matlab中发送数组,并按照说明进行了工作。
chatpub = rospublisher('/chatter','std_msgs/Float64MultiArray');
msg = rosmessage(chatpub);
msg.Data = [1 2 3];
send(chatpub,msg);
Run Code Online (Sandbox Code Playgroud)
因此,我也可以通过在* .m文件中实现一个函数并使用该Interpreted MATLAB function块在simulink中使用它。
我仍然很好奇如何将预期的块用于数组消息发送,因为它可能会得到更好的优化。(我将在实际应用程序中使用)
simulink ×10
matlab ×7
file-format ×1
git ×1
labview ×1
merge ×1
message ×1
modelica ×1
modeling ×1
openmodelica ×1
ros ×1
simscape ×1
simulation ×1
stateflow ×1
svn ×1
unit-testing ×1