📄 sfunusbadda20.m
字号:
function [sys,x0,str,ts] = sfunUsbADDA(t,x,u,flag,chin,chout,tempT,detaT)
%sfunUsbADDA 是利用www.dzmi.com网站设计的usb20数据采集卡计算机主控模式的AD采集的S函数。
%chin为采集的通道号。1-4代表AD的ch1到ch4。
%chout为DA的通道号。1-2代表DA的ch1到ch2。
%tempT为采集卡的实际采样速率。detaT为采样速率微调。
switch flag,
%%%%%%%%%%%%%%%%%%
% Initialization %
%%%%%%%%%%%%%%%%%%
case 0,
[sys,x0,str,ts] = mdlInitializeSizes(tempT);
%%%%%%%%%%
% Update %
%%%%%%%%%%
case 2,
sys = mdlUpdate(t,x,u,chin,chout,tempT,detaT);
%%%%%%%%%%
% Output %
%%%%%%%%%%
case 3,
sys = mdlOutputs(t,x,u);
%%%%%%%%%%%%%
% Terminate %
%%%%%%%%%%%%%
case 9,
sys=mdlTerminate(t,x,u,chout);
otherwise
error(['unhandled flag = ',num2str(flag)]);
end
%end sfundsc2
%
%=============================================================================
% mdlInitializeSizes
% Return the sizes, initial conditions, and sample times for the S-function.
%=============================================================================
%
function [sys,x0,str,ts]=mdlInitializeSizes(tempT)
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 1;
sizes.NumOutputs = 1;
sizes.NumInputs = 1;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 = 0;
str = [];
ts = [tempT 0]; % Sample period of 0.1 seconds (10Hz)
% end mdlInitializeSizes
%
%=======================================================================
% mdlUpdate
% Handle discrete state updates, sample time hits, and major time step
% requirements.
%=======================================================================
%
function sys = mdlUpdate(t,x,u,chin,chout,tempT,detaT)
Send_Data(u,chout); %发送数据u给OUT1通道。
pause(tempT-detaT);%此处和Ts的区别在于:Ts确定了示波器横坐标数值,
%而此处是采集速度的真实时间值。严格来讲,此处应该减去一个常量:usb传输和采集的时间。以
%确保Ts和采集速度的尽量一致。假定此常量为0.008.可通过仿真时间与实际时间的比较估算.
sys= Read_Data(chin); %读取CH通道的数据。每次读一个点
%end mdlUpdate
%=======================================================================
% mdlOutputs
% Return the output vector for the S-function
%=======================================================================
function sys = mdlOutputs(t,x,u)
sys = x;
%=======================================================================
% mdlTerminate
%=======================================================================
function sys=mdlTerminate(t,x,u,chout)
sys = [];
Send_Data(0,chout); %发送数据0给OUT1通道。
%———以下函数不要轻易改动———————————————————————————
function Send_Data(temp,channel)
%函数名称:function Send_Data(temp,channel)
%入口参数:temp为输入数据,10位精度。channel为通道选择。
%出口参数:无
%函数功能:发送指定电压到DA。
tempH=fix(temp/256);%将一个10进制数转化成两个字节。
tempL=mod(temp,256);
dzmiUSB20(1,channel,tempH,tempL);
%--------------------------------------------------------------------------
function data = Read_Data(channel)
%函数名称:function data=Read_Data(channel)
%入口参数:channel为通道选择
%出口参数:data为接收到的数据。10位精度。
%函数功能:读取指定通道的数据。
data=dzmiUSB20(0,channel);
%--------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -