LabVIEW论坛
直播中

李芳

5年用户 34经验值
私信 关注
[问答]

labview通过mit调用simulink编译的dll模型,计算结果不正确

我想利用simulink编写控制程序,仿真完成后将控制程序编译成dll供labview调用实现控制,目前遇到了一些情况:
simulink模型为简单加减乘除运算时,labview调用编译后的dll,计算结果正确。但是,若simulink模型包括了连续积分、离散积分、memory等模块时(目前仅仅尝试了这三个模块),labview调用后,输出结果均为0,即计算结果不正确。不知道是什么原因造成了这个问题?该如何去解决?感谢大神回答!
使用的软件版本根据labview官方建议进行了匹配,为:labview 2019 sp1,matlab 2019a,veristand 2019 r3。
labview使用的测试程序如下:
QQ截图20201019092915.jpg
simulink编译设置如下:
QQ截图20201019092944.jpg
已退回10积分

回帖(3)

邹重基

2020-10-19 11:30:38
labview调用dll最常见的错误是配置问题. 你没有说具体做法.
从图上看, 不是输出为0, 而是没有输出(empty array).

3 举报
  • 李芳: 即使用simulink中的连续积分模块,输入端和输出端替换为niveristand的输入输出,然后按照说明设置模型停止时间inf,定步长,按照问题中的方法设置编译条件,接着编译成dll,使用labview mit工具包调用。常规的加减法结果是正确的,积分这些模块就没有输出了。
  • 邹重基 回复 李芳: 从 LabVIEW 程序员的角度来看, 你在调用外部程序.  能帮你的只有验证输入输出参数是否正确. 如果加减法的参数设定和积分时完全一样, 说明配置正确.
  • 邹重基 回复 李芳: 也可以用 MATLAB script Nodes, 避免调用 dll:
    https://zone.ni.com/reference/en-XX/help/371361R-01/gmath/matlab_script_node/

李芳

2020-10-19 16:01:00
顶一下顶一下定于i下
举报

李芳

2020-10-22 14:27:35
问题已经解决,按照NI支持中,把运行时间步VI用移位寄存器而不是隧道连接循环外vi,积分即正常工作,并且利用PI程序仿真和实验验证了这个结果。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分