Alohafancy 发表于 2024-3-11 10:53:45

IVF可以正常运行的代码在simulink中出现数值对不上的错误

我在尝试把一个Fortran77写成的大型代码打包成一个S函数放在simulink中调用,目前可以正常生成.mexw64文件和S函数,编译正常通过不会报错。但是实际运行simulink时MATLAB会崩溃。通过在Fortran代码里写输出文件的方式定位到问题所在,发现是Fortran中的实参并没有传递给子程序,子程序中对应的量是乱值。这种情况需要怎么解决呢?
在VISUAL STUDIO下,原Fortran代码是可以正常运行的,但是实际运行就会出现变量的值对不上的问题。
由于Fortran代码比较老,有很多不规范的写法,比如未经声明就使用变量,形参实参变量类型不一致。但很神奇的是在IVF中可以正常运行,只有放到MATLAB里才发现有问题。
VS里有设置项目属性的方式,可以忽略数组上限,不检查例程交互,默认变量初值为0之类的,把这些都关闭后,Fortran代码也会出错。但是打开后就能正常运行。MATLAB里有没有类似的可以设置这种属性的地方?
下面是出错地方的例子,排查掉很多了,但如果继续这么排查下去,不知道要多久。
图中的L2按道理应该是0,1,但是实际MATLAB运行中的值是很大的一个整数

li913 发表于 2024-3-11 14:24:09

一般是接口不匹配造成的,matlab默认8字节整型,数据类型和fortran不一样。

Alohafancy 发表于 2024-3-11 14:47:09

li913 发表于 2024-3-11 14:24
一般是接口不匹配造成的,matlab默认8字节整型,数据类型和fortran不一样。

但是出错的地方还在Fortran内部,还没到和MATLAB进行交互。举个例子就是用子程序算个1+1=2,出来后把2传给MATLAB,但是进入子程序后变成了321546856+152438215这种乱值。我试过写成INTEGER*8,但是似乎也没用

Alohafancy 发表于 2024-3-31 16:15:04

问题解决了,是只要在子程序变量声明的地方加一个“SAVE”就不会出现变量值对不上的问题了
页: [1]
查看完整版本: IVF可以正常运行的代码在simulink中出现数值对不上的错误