%Delay Control with Dalin Algorithm clear all; close all; ts=0.5; %Plant sys1=tf([1],[0.4,1],'inputdelay',0.76); dsys1=c2d(sys1,ts,'zoh'); [num1,den1]=tfdata(dsys1,'v'); %Ideal closed loop sys2=tf([1],[0.15,1],'inputdelay',0.76); dsys2=c2d(sys2,ts,'zoh'); %Design Dalin controller dsys=1/dsys1*dsys2/(1-dsys2); [num,den]=tfdata(dsys,'v'); u_1=0.0;u_2=0.0;u_3=0.0;u_4=0.0;u_5=0.0; y_1=0.0; error_1=0.0;error_2=0.0;error_3=0.0; ei=0; for k=1:1:50 time(k)=k*ts; rin(k)=1.0; %Tracing Step Signal yout(k)=-den1(2)*y_1+num1(2)*u_2+num1(3)*u_3; error(k)=rin(k)-yout(k); M=1; if M==1 %Using Dalin Method u(k)=(num(1)*error(k)+num(2)*error_1+num(3)*error_2+num(4)*error_3... -den(3)*u_1-den(4)*u_2-den(5)*u_3-den(6)*u_4-den(7)*u_5)/den(2); elseif M==2 %Using PID Method ei=ei+error(k)*ts; u(k)=1.0*error(k)+0.10*(error(k)-error_1)/ts+0.50*ei; end %----------Return of dalin parameters------------ u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k); y_1=yout(k); error_3=error_2;error_2=error_1;error_1=error(k); end plot(time,rin,'b',time,yout,'r'); xlabel('time(s)');ylabel('rin,yout');
时间: 2024-04-02 10:37:05 浏览: 98
这段代码实现了一个使用大林算法进行延迟控制的控制器。在第8-13行中,定义了待控制的系统和理想闭环系统,并将它们离散化。接下来,使用大林算法设计控制器,计算出控制器的分子和分母系数(第15-16行)。
在主循环内(第18-43行),首先计算出待控制系统的输出和误差信号,并根据选择的控制方法计算出控制器的输出。如果选择的是大林算法(M=1),则使用大林算法计算控制器的输出;如果选择的是PID方法(M=2),则使用PID方法计算控制器的输出。最后,更新控制器的历史输入输出和误差数据(第38-42行)。
这段代码中可能会出现的错误是,由于待控制系统具有延迟,因此在使用大林算法计算控制器输出时可能会出现非因果模型的情况(第25行)。如果使用非因果模型进行计算,则会出现线性代数运算错误。为了解决这个问题,您可以尝试使用因果模型或对延迟进行补偿。
相关问题
dalin的从机配合主机编地址程序
DALIN是一种现代化的数字控制系统,它包括一个主机和多个从机。在编写地址程序时,需要首先确定每个从机的地址。从机地址通常通过设置 DIP 开关来完成。然后,在主机上编写地址程序,将每个从机的地址映射到特定的输入/输出端口。这样,主机就可以向每个从机发送指令或接收来自从机的数据。
下面是一个简单的地址程序示例,假设主机上有两个从机,地址分别为 01 和 10:
```
MOV A, 01H ; 将 01H 存储到寄存器 A 中,表示要向地址为 01 的从机发送指令
OUT 01H, A ; 向地址为 01 的从机发送指令
MOV A, 10H ; 将 10H 存储到寄存器 A 中,表示要向地址为 10 的从机发送指令
OUT 01H, A ; 向地址为 10 的从机发送指令
```
这个程序的作用是向地址为 01 和 10 的两个从机发送指令。在实际应用中,地址程序可能会更加复杂,需要根据具体的硬件配置进行编写。
阅读全文