过渡不执行,尽管真实情况
14日视图(30天)
显示旧的评论
你好,社区,
我有一个简单的Stateflow图有两个空的状态(见图片)。这些状态之间切换我有两个条件转换。在那些转换,我比较两个定点值(签名,16位,部分长度7)。其中一个是一个输入到图表,另一个是一个参数在MATLAB工作区。我的问题是,永远不会成为有效的转换。
所以我的两个转换条件是:
输入参数>
输入< =参数
如果我使用调试器停止仿真检查转换时,我可以看到值应该导致
真正的
结果。MATLAB命令行进入状态也显示结果
真正的
。
然而Stateflow不执行转换,我困在这两个州之一。
但是:如果我将这两个变量转换为无符号(变量总是积极的)突然开始工作。
这种行为的原因是什么?
谢谢你的帮助!
0评论
答案(3)
安迪·巴特利特
2022年8月1日
编辑:安迪·巴特利特
2022年8月1日
你好,
我做了一个快速的抽查功能
我附上一个模型显示转换基于关系运算符在Stateflow MATLAB和Stateflow C。
关系运算符都是使用定点数据类型fixdt(7) 1, 16日在原文中描述。
所有的转变正在发生。
不幸的是,目前还不清楚你观察到的问题。
澄清的事情,两个建议。
1)设置断点的Stateflow州的利益。断点触发时,检查两个变量的值相比较,如附件截图所示。
2)如果你的调试繁殖不正确的行为,请提供完整的复制信息,所以我们可以帮你解决它。理想情况下,复制信息将包括简化模型和所有支持这些模型来模拟所需数据。金宝app
如果硬约束是阻碍你提供简化模型和支持数据,那么我们可以尝试使用文本描述的细节,但风险高,信息被丢失。金宝app由于失去了信息,具体问题你观察可能永远不会得到复制。
文本交流的关键风险值是默认显示隐藏一些细节很重要尤其是细关系运算符的行为。例如,
= fi(3 + 2 ^ -25年1,32岁,27);
b = fi(3 + 2 ^ -27, 1, 32岁,27);
a、b
如果你看看默认显示,价值是平等的
一个=
3.0000
DataTypeMode:定点:二进制扩展
Signedness:签署
字:32
FractionLength: 27
b =
3.0000
DataTypeMode:定点:二进制扩展
Signedness:签署
字:32
FractionLength: 27
但价值不相等
yEqual = = = b
yEqual =
逻辑
0
与17位数字显示,我们将揭示真相双打和定点~ 53位。
num2str (17)
num2str (b, 17)
这显示值是不一样的
ans =
“3.0000000298023224”
ans =
“3.0000000074505806”
通知你,fi对象提供一个值方法,使得它是看到一个精确值的文本显示他们所代表的(而不是近似)。
a.Value
b.Value
ans =
“3.0000000298023223876953125”
ans =
“3.000000007450580596923828125”
提供文本复制原始值的数据类型,mat2str有两个额外的参数是伟大的
mat2str (a, 17日“类”)
ans =
“(”numerictype’, numerictype(1, 32岁,27),“价值”,“3.0000000298023224”)”
评估文本(双打或53位定点)应该给无损的往返
aRoundTrip = fi (“numerictype”numerictype (32、27)“价值”,“3.0000000298023224”)
cEqual = = = aRoundTrip
aRoundTrip =
3.0000
DataTypeMode:定点:二进制扩展
Signedness:签署
字:32
FractionLength: 27
cEqual =
逻辑
1
期待清理你观察到的问题。
再一次,与所有必要的支持数据模型是最安全、最有效的方式来表达你的复制金宝app步骤。
如果必须提供的信息文本,请尽量避免信息丢失。
安迪