文档

港口遗留代码

找到美国

如果使用变步解算器,关键是所有连续状态识别的代码,放到C s函数状态向量为集成而不是通过Fortran代码集成。同样,所有导数的计算必须分别被称为从可用mdlDerivatives方法的C函数。与连续国家没有这些步骤,任何Fortran代码不兼容解决变步如果s函数注册为一个连续的块连续状态。

隐式进步的迹象增加变量等M = M + 1X = X + 0.05。如果代码有很多这些构造和您确定它是不切实际的重新编码源,以免“棘轮,”你可能需要尝试另一种方法使用固定的解决者。

如果是不切实际的找到所有的隐状态和分离出导数的计算模型万博1manbetx®引擎,可以使用另一种方法,但仅限于使用固定的解决者。这里的方法是调用Fortran的代码mdlUpdate方法Fortran代码是每个主要模拟集成步骤只能执行一次。任何块输出必须缓存在一个向量,这样工作mdlOutputs可以经常需要调用和输出工作向量的值,而不是再次调用Fortran程序(导致它无意中提前时间)。看到sfuntmpl_gate_fortran.c例如使用DWork向量。看到如何使用DWork向量有关分配向量数据类型的工作。

样品时间

如果Fortran代码有一个隐式算法步长,系数等,确保您注册适当的离散采样时间的C函数mdlInitializeSampleTimes方法,只有改变块的输出值mdlUpdate方法。

存储数据

如果你计划有多个副本的s函数中使用一个仿真软件模型,您需要分配存储为每个复制的功能模型。万博1manbetx推荐的方法是使用DWork向量(见DWork矢量基础知识)。

如果你计划只有一个副本的s函数模型,DWork向量仍然提供最先进的方法来存储数据。然而,另一个替代方法是分配一块内存使用malloc命令和内存的指针存储在PWork向量(见基本工作向量)。在这种情况下,您必须记住释放的内存使用免费的命令的功能mdlTerminate方法。

如果需要用燧石

用燧石(浮点整数)跟踪时间。燧石(ieee - 754浮点数字组成)的有用属性不舍入误差积累加减燧石。用燧石变量双精度存储(整数值)避免舍入误差积累,积累在浮点数加在一起数千倍。

双精度F: F = F + 1.0 = 0.003 * F

这种技术避免了模拟常见的陷阱。

考虑实时

因为很少使用Fortran应用在实时环境中,通常遇到仿真代码与实时环境相矛盾的。常见故障包括无界(或大)迭代和零星的但耗时的计算。你必须直接处理这些,如果你希望在实时运行。

相反,它仍然是非常好的实践迭代或零星的计算如果生成的代码没有被用于实时应用程序。

这个主题有帮助吗?