综合测控实验

上传人:第*** 文档编号:55702206 上传时间:2018-10-04 格式:PPT 页数:46 大小:992.50KB
返回 下载 相关 举报
综合测控实验_第1页
第1页 / 共46页
综合测控实验_第2页
第2页 / 共46页
综合测控实验_第3页
第3页 / 共46页
综合测控实验_第4页
第4页 / 共46页
综合测控实验_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《综合测控实验》由会员分享,可在线阅读,更多相关《综合测控实验(46页珍藏版)》请在金锄头文库上搜索。

1、综合测控实验(下),主 讲 人:黄弢、王峻峰,主要内容: Matlab、Simulink 测控系统应用:Matlab、Simulink调用*.dll,结合PID算法,实现对外部设备的闭环控制,其它控制系统软件平台: 组态软件在控制系统的应用 DR-Link Visual C+,Visual Basic 51单片机、ARM,控制实验内容,换算,算法输出,电流,电压,PWM,PID算法,被控对象,课程内容,PWM 脉宽调制 实现调压 直流斩波调压,直流斩波调压:将一个量值的直流电变为另一个量值的直流电,也称DC/DC变换,利用C写的S-Function执行步骤,mdlInitializeSizes

2、是Simulink与S-function交互时调用的第一个方法。随后Simulink将调用其他S-function方法(都以mdl开头)。仿真结束时,Simulink调用mdlTerminate。 注意:Simulink仿真时直接在适当的时间调用每个回调方法,利用C写的S-Function仿真步骤如图4.1所示:,2018年10月4日星期四,SIMULINK自定义模块,Commonly Used Blocks (公共模块库) Continuous(连续模块库) Discrete (离散模块库) Logic & Bit Operation (逻辑与位操作模块库) Ports & Subsyste

3、ms (端口与子系统模块库) Math Operation (数学模块库) Function & Tables (函数与表格模块) Ports & Subsystems Signal Attributes (信号与系统模块库) Sinks (接收器模块库) Sources (输入源模块库) User-Defined Functions,2018年10月4日星期四,Simulink s-Functuion应用,在MATLAB环境下使用MEX命令将已编译好的C文件(通过SIMULINK编译)转换成DLL文件,然后再结合SFUNCTION,调用该DLL文件。 首先在MATLAB的COMMAND窗口中

4、输入: mex -setup 会出现:Select a compiler: 1 Lcc C version 2.4 in F:MATLABsyslcc 2 Microsoft Visual C/C+ version 6.0 in C:Program FilesMicrosoft Visual Studio 0 None 即选择一个编译器。在这里一般选择VC+选项,直接在命令窗口中敲击编译器编号的数字键,然后回车即可。,S-Function模板创建DLL,新建一个文件夹,选择为当前目录 打开simulink,选择User-Defined Functions/S-Function Examples

5、/C-files S-Function/Basic C-MEX Template,根据所定义模块的功能,将该自动生成的文件重命名,并存入你指定的文件夹中 将模版的c文件另存,文件名自定义,如MyOn.cpp。将Function改成和文件名一样,如图4.5所示。,在mdlOutputs(SimStruct *S,int_T tid)函数中进行修改,将 real_T *y = ssGetOutputPortSignal(S,0); 替换为 real_T *y = ssGetOutputPortRealSignal(S,0);Matlab命令窗口,输入:mex MyOn.cpp,可以看到出现了一个M

6、yOn.dll文件 在simulink窗口下,新建一个mdl文件(可为mytemp1,mdl的文件名不能与sfunction的名字相同,即不能为MyOn,否则会出现命名冲突。),向其中添加一个S-Function模块,双击模块,将其中的S-Function Name改为dll的文件名(不加后缀,也就是MyOn)。,相同,输入输出设置及采集编程,以下编程均在MyOn.cpp文件中,标注输入输出设置:,三个接口没有任何,这样我们就不清楚道理每个接口作用。为此,我们可以在图4.10所示的模块上单击右键,然后选择Mask S-Function,,在该cpp文件mdlStart(SimStruct *S

7、)函数中添加采集卡初始化以及开启采集任务。const real_T *u1 = (const real_T *)ssGetInputPortRealSignalPtrs(S,0);const real_T *u2 = (const real_T *)ssGetInputPortRealSignalPtrs(S,1); const real_T *u3 = (const real_T *)ssGetInputPortRealSignalPtrs(S,2); double Fs=u10; /采样频率if( ADCardInit() != 1 ) /采集卡初始化 ssSetErrorStatus(S

8、,“Cant find the DAQCard!“); DAQ1(0x1, 5000, 1024*4 , buffer);/开启采集Fs=5000pnum=0; /初始化buf指针位置,采集卡初始化及开启数据采集:,if( u20 = 1 )DAQ1(0x1, Fs, 1024 , buffer);else if(u20 = 2 )DAQ1(0x2, Fs, 1024 , buffer); else if(u20 = 3 )DAQ1(0x4, Fs, 1024 , buffer); else if(u20 = 4 )DAQ1(0x8, Fs, 1024 , buffer); else if(u

9、20 = 5 )DAQ1(0x10, Fs, 1024 , buffer); else if(u20 = 6 )DAQ1(0x20, Fs, 1024 , buffer); else if(u20 = 7 )DAQ1(0x40, Fs, 1024 , buffer); else if(u20 = 8 )DAQ1(0x80, Fs, 1024 , buffer); elsessSetErrorStatus(S,“channel number is wrong!“);,ADCardInit()是采集卡DLL函数,作用是初始化采集卡。如果初始化成功则返回1,用于判断是否连上采集卡。 DAQ1()函数

10、为采集卡DLL单通道采样函数,作用是启动采集卡进行单通道数据采集。参数1为采样通道,是以8位2进制数表示各个通道是否开启,如对通道1进行采集,该参数即为:0000 0001;同理,对3通道进行采集,其参数为 0000 0100。各通道对应关系分别为: 0x1:通道1 0x2:通道2 0x4:通道3 0x8:通道4 0x10:通道5 0x20:通道6 0x40:通道7 0x80:通道8,DAQ2(ch,Fs,len,buffer1,buffer2)为双通道采样函数,第一个参数为通道号,和DAQ1一样,同样是以2进制数表示,如对1,2通道进行采集,该参数即为0000 0011;对3,4通道进行采集

11、,即为0000 1100;下面是几组通道的对应关系 0x3:通道1、2 0x0A:通道2、4 0x0C:通道3、4 0x11:通道1、5 0x12:通道2、5 0x22:通道2、6 程序中使用位操作,首先获取采样通道号,例如1和2,将通道变量置0,即程序中的: unsigned char channel=0x00; /初始化采集通道 用位操作方法,设置channel的第0位、第1位为1:channel |= (1ch1); /设置采样通道1(该例子中ch1为0)channel |= (1= Length ) pnum=0;/判断指针是否已满*y = bufferpnum; /输出第pnum个点

12、的值pnum+; /指针加1 函数ReadDaq()作用是读取下位机buf里的采样数据。 参数1为通道号,分别为1-8; 参数2为buffer长度; 参数3为保存的buffer指针。,退出采集卡:函数ADCardQuit()是采集卡dll函数,其作用是退出采集卡。 static void mdlTerminate(SimStruct *S) ADCardQuit(); 再次在MATLAB的Command Window中输入mex MyOn.cpp,完成数据采集卡的程序编写。 打开测试实验平台上的直流电源,打开通道1的信号源,返回使用该模块形成的mytemp1.mdl文件,将运行时间改为inf,

13、点击菜单栏上的“保存”图标,点击菜单栏上的“运行”图标,进行执行。双击Scope可以查看采集的信号波形。,调用界面设计,clf reset set(gcf,menubar,none) set(gcf,unit,normalized,position,0.2,0.2,0.5,0.35); set(gcf,defaultuicontrolunits,normalized)%设置用户缺省控件单位属性值 h_axes1=axes(position,0.05,0.55,0.6,0.4); h_axes2=axes(position,0.05,0.05,0.6,0.4); 有两轴对象和两个按钮对象。 hp

14、ush1=uicontrol(gcf,Style,push,. %制作“采集”按钮 position,0.8,0.25,0.18,0.15,string,采集);hpush2=uicontrol(gcf,Style,push,. %制作“停止”按钮 position,0.8,0.05,0.18,0.15,string,停止);,%首先让我们先前建立的mytemp1mdl文件运行 %“采集”按键引起的回调 set(hpush1,callback,. set_param(mytemp1,SimulationCommand,start),. t=timer(TimerFcn,getdata,Peri

15、od,1,ExecutionMode,fixedSpa cing,TasksToExecute,inf),.%设置定时器,运行getdata文件,与上面是一行。 pause(2);start(t);,. % 暂停2秒并启动定时器); %“停止”按键引起的回调 hpush2=uicontrol(gcf,Style,push,. position,0.8,0.05,0.18,0.15,string,停止); %制作“停止”按钮 set(hpush2,callback,stop(t);set_param(mytemp2,SimulationCommand,stop);); %停止定时器 ,mdl文件停止运行。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号