第三十九篇,杂记(三)

  • 多环控制系统的设计方法是从内环到外环,逐个设计各环的调节器,逐环设计可以使每个控制环都是稳定的,保证整个控制系统的稳定性。当电流环和速度环内的对象参数变化或收到扰动时,电流反馈和速度反馈能起到及时的抑制作用,使之对位置环的工作影响很小。同时,每个环节都有自己的控制对象,分工明确,易于调整。一种低速大惯量伺服系统的跟踪控制研究及实现 - 豆丁网 (docin.com)
  • Simulink中获取矢量信号长度的模块是“width” 。
  • 在sldd中定义枚举时,因为Simulink生成枚举代码的逻辑是直接做#define宏定义而不是c/cpp中的块结构,因此容易出现同名冲突,即如果不同枚举类型中有相同字面取值,比如两种枚举中都有取值“NONE”,则生成代码时会报冲突,此时需要在sldd的“Code Generation”里勾选上“Add Class Name To Enum Names”,宏定义中就会加上枚举参数的类型名,以示区分,如下图所示:(这种区分实际根源是因为Simulink生成的代码在使用枚举值时,并不是用域作用符访问,而是直接使用,因此导致冲突,实际手写代码不会出现这种情况)
  • 第三十九篇,杂记(三)_第1张图片
  • 还有一个问题是,如果在Storage Type里明确指定了类型,生成的代码就会是宏定义而不是块结构,而选择Native Integer(如下图)则会生成块结构而不是宏定义,但仅此也只是生成的代码的结构更清晰了而已,并不会引导其按照手写代码的方式使用枚举值,因为无法正常从根源上杜绝命名冲突问题
  • 第三十九篇,杂记(三)_第2张图片
  • 综合以上两条,在sldd中定义枚举时,为了使生成的代码结构清晰、命名无冲突,应选择Native Integer、勾选“Add Class Name To Enum Names”;
  • Simulink的if模块有奇怪要求,即要求所有u的类型和u1一致;
  • Simulink对数组Selector的索引index有严格保护,最好手动把index限制在valid的范围内,比如用min/max,否则在仿真运行Run时会报错如下图,但生成代码和update model好像都没事:
  • 第三十九篇,杂记(三)_第3张图片
  • pubscholar公益学术平台pubscholar.cn
  • struct中也可以写方法;若不指定访问权限,struct默认为public,class默认为private;
  • 步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。使得在速度、位置等控制领域用步进电机来控制变的非常的简单;
  • Simulink模型输出为图片的方法:打开模型->在MATLAB命令框中执行命令saveas(get_param(gcs,'handle'),'model','tiff')->命令中第一个参数不用管,第二个参数是生成的图片的名字,第三个参数是图片的格式。
  • 智能PID、4.5.4节速度加速度前馈大惯量伺服系统智能PID算法研究论文.pdf_淘豆网,低速大惯量一种低速大惯量伺服系统的跟踪控制研究及实现 - 豆丁网
  • 第三十九篇,杂记(三)_第4张图片

你可能感兴趣的:(程序人生)