关于在使用(function(){})();中遇到的问题的记录

下午想编写一个jquery插件,结果在(function(){})(jQuery);这个问题上遇到了问题

插件的代码如下

;(function($){
	$.myplugin = $.myplugin || {};
	$.extend($.myplugin,{
		version:"1.0",
		dialog:{
			mAlert:function(title,text,callback) {
				var alertDiv = '<div style="position:absolute;top:100px;left:200px;width: 396px;height: 240px;border: 2px #3385ff solid;">'+
					'<div style="width: 396px;height: 40px;background-color: #3385ff;">' + 
					'<p style="text-align: center;color: white;margin: 0;line-height: 40px;">'+title+'</p>'+
					'</div>'+
					'<div style="width: 396px;height: 160px;background-color: #ffffff;">'+
					'<p style="text-align: center;color: black;margin: 0;line-height: 160px;">'+text+'</p>'+
					'</div><div style="width: 396px;height: 40px;">'+
					'<button style="margin-left:15px;padding:5px 7px;background-color: #FFFFFF;">确定</button>'+
					'</div>'+
					'</div>';
				var $alertDiv = $(alertDiv);
				$("body").append($alertDiv);
			}
		}
	});
})(jQuery);

然后我在页面中调用一下,发现无法调用$.myplugin.dialog.mAlert()这个方法。这是怎么回事呢,

然后我又试着在页面中的$(function() {})调用$.myplugin.dialog.mAlert(),结果成功了,这是为什么呢,百思不得其解,然后求助于万能的百度吧


于是我就找到了这个 http://www.linuxidc.com/Linux/2014-08/105462.htm

好的,原真的原因就是这个:(function(){...})()函数的执行时机并不是在DOM加载完毕后才执行,而是随着页面自上而下来执行。也就是说插件在执行的时候,DOM还没有加载完毕,果然在我将引入插件的那个<script></script>标签放在DOM的最后,再执行的时候,成功弹出提示框。


<think>好的,我现在需要帮用户解决如何在Simulink中使用S-Function实现实时参数更改的问题。用户之前已经询问过输入输出数量的问题,现在转向参数修改,可能需要结合之前的回答中的S-Function知识。首先,用户提到了引用[1]中的S-Function结构和回调函数,比如mdlInitializeSizes、mdlOutputs等。我需要考虑如何在回调函数中处理参数修改。引用[3]提到直接馈通,这可能影响参数更新的时机。 接下来,引用[2]是关于使用set_param修改模型参数,但用户现在想通过S-Function实时修改,而不是外部命令。需要区分这两种方法,可能用户希望内部动态调整参数,比如在仿真过程中根据某些条件改变参数。用户的需求是实时在线修改参数,这意味着在仿真运行时动态调整,而不需要停止仿真。这通常可以通过S-Function的运行时参数(RuntimeParameters)或者使用工作区变量结合回调函数实现。 我需要分步骤说明如何实现:1.在mdlInitializeSizes中声明运行时参数,这样参数可以在仿真过程中被修改。2.在mdlSetWorkArea或mdlProcessParameters中处理参数的更新。3.使用S-Function的接口函数来传递参数,可能需要使用ssSetRuntimePrmCheck函数允许运行时检查。 4.在输出函数mdlOutputs中使用最新的参数进行计算。同时,需要注意直接馈通的问题,如果参数变化会影响输出,可能需要设置DirFeedthrough为1,确保及时更新。 还要考虑示例代码的结构,展示如何在S-Function中定义和更新参数。比如,在初始化时设置参数,然后在仿真循环中通过某种方式(如全局变量或输入端口)获取新值,并应用到计算中。另外,用户可能遇到的问题包括参数未正确传递、仿真过程中修改参数导致的不稳定,或者如何将外部数据(如MATLAB工作区变量)实时传入S-Function。需要提到这些注意事项和调试方法。最后,生成相关问题,比如如何通过外部输入调整参数、处理参数更新时的稳定性,或者与其他模块(如MATLAB Function块)结合使用的方法。</think>### Simulink中使用S-Function实现实时参数修改的完整指南 #### 一、S-Function参数交互机制 在S-Function中实现实时参数修改的核心在于**运行时参数(Runtime Parameters)**的定义与更新机制[^1]。通过以下数学关系描述参数动态更新过程: $$ y(t) = f(u(t), p(t)) $$ 其中$p(t)$为随时间变化的参数,需通过特殊方法实现其在线修改。 --- #### 二、实现步骤详解 ##### 1. 声明运行时参数(初始化阶段) 在`mdlInitializeSizes`函数中声明可修改参数: ```matlab function sizes = mdlInitializeSizes(sizes) sizes.NumRuntimePrms = 1; % 声明运行时参数数量 sizes.RuntimePrms = {'Kp'}; % 参数名称 end ``` **作用**:建立参数存储区,允许仿真过程中修改参数[^3] ##### 2. 参数存取接口(动态更新) 在`mdlOutputs`函数中通过`ssGetRuntimePrm`获取最新参数值: ```matlab function mdlOutputs(t, x, u, sys, flag) Kp = ssGetRuntimePrm(S, 1); % 获取第1个运行时参数 sys = Kp * u; % 使用动态参数进行计算 end ``` ##### 3. 在线修改方法 ###### 方法1:通过MATLAB命令 在仿真运行期间执行: ```matlab % 修改名为'sfun_test'的S-Function模块参数 set_param('sfun_test', 'RuntimePrm1', '10.5') ``` **验证公式**: $$ \Delta K_p = |K_{p\_new} - K_{p\_old}| $$ ###### 方法2:通过输入端口 修改S-Function输入端口数,将参数作为外部输入: ```matlab function sizes = mdlInitializeSizes(sizes) sizes.NumInputs = 2; % 第1端口为信号,第2端口为参数 end ``` 此时参数更新关系为: $$ p(t) = u_2(t) $$ --- #### 三、关键配置项 | 配置项 | 作用说明 | 示例代码 | |-----------------------|--------------------------------------------------------------------------|-----------------------------------| | `ssAllowRuntimePrmCheck` | 允许运行时参数检查[^1] | `ssAllowRuntimePrmCheck(S, true)` | | `ssSetRuntimePrmCheck` | 设置参数变化检测频率 | `ssSetRuntimePrmCheck(S, 1)` | | `ssGetRuntimePrm` | 获取当前参数值 | `Kp = ssGetRuntimePrm(S, 1)` | --- #### 四、实时性验证方法 1. **阶跃响应测试** 在仿真过程中突然修改参数,观察输出变化延迟: $$ \tau_{delay} = t_{response} - t_{command} $$ 2. **数据记录对比** 使用`To Workspace`模块记录参数修改时间戳与输出变化时间戳 3. **性能指标计算** ```matlab update_rate = num_modify / sim_time; % 参数更新速率 ``` --- #### 五、注意事项 1. **线程安全** 当通过`set_param`外部修改参数时,需确保仿真步长与参数更新频率同步[^2] 2. **参数范围限制** 添加参数有效性检查: ```matlab if new_Kp > 100 error('参数超过最大限制'); end ``` 3. **直接馈通影响** 若参数修改需要立即影响输出,必须设置: ```matlab sizes.DirFeedthrough = 1; % 在mdlInitializeSizes中设置[^3] ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值