查看: 150|回复: 0|关注: 0

[未答复] 关于simulink里S-fcu模块使用全局变量报错的问题,急求!

[复制链接]

新手

5 麦片

财富积分


050


1

主题

1

帖子

0

最佳答案
发表于 2020-5-23 23:01:34 | 显示全部楼层 |阅读模式
各位大佬您好,本人是新手,最近在做一个仿真实验,程序设计出来了,但是无法运行,问题如下。
首先,我在主函数M文件里,定义了4个全局变量,x1,x2,x3,x4,并且声明了,程序如下:
global x1 x2 x3 x4;
然后在主函数里对simulink进行运行:
sim('CCChard',[0,10*pi]);%%simulink仿真

因为在simulimk里我加入了一个s-fcu函数,自定义输入如下:
function [sys,x0,str,ts] = Ppecx(t,x,u,flag)
switch flag,                               %%%%%%%%判断flag,看当前处于哪个状态
case 0,
    [sys,x0,str,ts]=mdlInitializeSizes;     %%flag=0表示处于初始化状态,此时用函数mdlInitializeSizes进行初始化
case 3,                                     %%%flag=3表示此时要计算输出
    sys=mdlOutputs(t,x,u);
case {2,4,9}
    sys=[];
otherwise
    error(['Unhandled flag = ',num2str(flag)]);
end
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;%用于设置模块参数的结构体用simsizes来生成
sizes.NumContStates  = 0;%模块连续状态变量的个数
sizes.NumDiscStates  = 0;%模块离散状态变量的个数
sizes.NumOutputs     = 1;%模块输出变量的个数
sizes.NumInputs      = 0;%模块输入变量的个数
sizes.DirFeedthrough = 1;%模块是否存在直接贯通(直接贯通我的理解是输入能  %直接控制输出)
sizes.NumSampleTimes = 1;%模块的采样时间个数,至少是一个
sys = simsizes(sizes);%设置完后赋给sys输出
x0  = [];
str = [];
ts  = [0 0];
function sys=mdlOutputs(t,~,~)%输出为期望轨迹和相应导数
global x1 x2 x3 x4;
a=arccos((x1*x2*cos(t)+x3*x4*sin(t))/sqrt((x2^2+x3^2)*((x1cos(t))^2+(x4*sin(t))^2)));
b=a+t;
D=(sqrt((x1*cos(t))^2+(x2*sin(t)^2)*cos(t)/0.01)+sqrt((x3*cos(t))^2+(x4*sin(t)^2)*sin(t)/0.01))*0.01;
m=x4-D*sin(b);
n=m;
sys=n;

然后在主函数里运行,显示结果是:
错误使用 CCC (line 41)
Error in 'CCChard/S-Function12' while executing MATLAB S-function 'Ppecx', flag = 3 (output), at time 0.0.
原因:
    错误使用 CCC (line 41)
    未定义函数或变量 'x1'。

自己查了两天资料,没有找到解决办法,希望各位大佬们能够看看,万分感谢!!!


回复主题 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表