y; text-indent: 2em; margin-top: 0px; margin-bottom: 0px; -ms-text-justify: inter-ideograph;">⎪ 0
⎩ 0 ������
������������−1
(������������ℎ − ∫ℎ �������������������������������������������) 0 ������������ℎ ∫ℎ ������������������������������������)
令������0 = �
0
−������� 0
� , ������1 = �
0
0 ������
�,由 Lyapunov 稳定性判据可知,
若∃������ > 0,使得(1 − ������)������0������������������0 + ������������1������������������1 − ������ < 0,则系统是均方稳定的。
运用 LMI 工具箱对 P>0 进行求解,得到当丢包率大于等于 0.96 时,系统不满足均方稳定(MSS),当丢包率小于等于 0.95 时,系统是均方稳定的。
1. h=0.01;
|
2. eAh=[1 1-exp(-h);0 exp(-h)];
|
3. A01=eAh-[h h+exp(-h)-1;0 1-exp(-h)]*[0;1000]*[0.005 0.005];
|
4. A0=[A01(1),A01(3),0;A01(2),A01(4),0;-0.005,-0.005,0];
|
5. tmp=[h h+exp(-h)-1;0 1-exp(-h)]*[0;1000];
|
6. A1=[eAh(1),eAh(3),tmp(1);eAh(2),eAh(4),tmp(2);0,0,1];
|
7. c=zeros(1,120);
|
8. i=1;
|
9. for p=0:0.01:1
|
10. setlmis([]);
|
11. P=lmivar(1,[3,1]);
|
12. lmiterm([-1,1,1,P],1,1);%P>0
|
13. lmiterm([2,1,1,P],(1-p)*A0',A0);
|
14. lmiterm([2,1,1,P],p*A1',A1);
|
15. lmiterm([2,1,1,P],-1,1);
|
16. lmis=getlmis;
|
17. [tmin,xfeas]=feasp(lmis);
|
18. if tmin>0
|
19. c(i)=p;
|
20. i=i+1;
|
|
21. end
|
22. %P=dec2mat(lmis,xfeas,P);
|
23. end
|
24. c
|
为了观察不稳定情况下,系统状态曲线、输出曲线和控制曲线的走势,我重新设置丢包率为 0.98,这时三条曲线走势如图 6 所示。
图 6 丢包率为 0.98 时,系统状态曲线、输出曲线和控制曲线,
该电机通过网络 IEEE 802.11b/g(WLAN)的方式进行远程控制,系统的控制结构如下图所示:
图 1 单闭环网络控制系统流程图
假设传感器采用时钟驱动的方式进行周期性采样,控制器和执行器采用事件驱动方式。存在网络丢包现象, 其状态空间模型可以描述成
������(������̇ )
= �0 1 � ������(������) + (1 − ������) � 0
� ������(������) + ������ � 0
� ������(������ − 1)
� 0 −1
1000
������ = �1 0� ������(������) 0 1
1000
其中初始状态为 x(0)=
1 ,p 为丢包概率,p=0 表示无数据丢包,p=1 表示有数据丢包,假设不会发生连续丢
� �
1
包。给定控制器为������(������) = ������������(������) = [−0.005 − 0.005]。
3.2 功能模块图仿真
这一部分主要介绍基于 Simulink 及 Truetime 工具箱的模块图绘制。通过理解 wireless 和 network 两个示例文件,搭建本次实验的网络控制系统的功能模块图,如图 2 所示。
图 2 仿真系统功能模块图
其中,TrueTime Wireless Network 模块模拟了网络部分,可以更改丢包率(Loss Probability)这一参数。在Regulator Node 中的TrueTime Kernel 中,模拟了控制器从网络中接收 y(k),并生成 u(k),将 u(k)发送到网络中的过程。在 Sensor/Actuator Node 的 TrueTime Kernel 中,模拟了传感器到控制器再到执行器节点的过程,执行器从网络中接收控制信号 u(k);进行零阶保持;若丢包贼改成 u(k-1),若不丢包则改成 u(k);再通过状态转移及传输延迟生成输出信号 y(k);再讲数字信号 y(k)发送至网络。如此形成闭环网络控制系统。仿真过程可参考图 3。
在搭建的过程中,依照数学模型的参数对部分模块的参数设置做出调整。
图 3 NCS 离散仿真流程图
3.3 编写相关代码
通过研究 TrueTime 2.0-reference manual 及阅读 wireless 文件夹中的相关代码后,可将代码编写分为两个步骤依次进行,模块初始化和编写任务代码。模块初始化针对控制器(Regulator)和执行器/传感器(Sensor/Actuator),任务代码仅针对控制节点(Regulator Node)。
3.3.1 模块初始化
对控制器(Regulator)和执行器/传感器(Sensor/Actuator)的初始化可直接参照 wireless 中的 regulator.m 文件和 actuator_init.m 文件进行,无需改动。代码如下:
1. function regulator_init
|
2.
|
3. % Distributed control system: regulator node
|
4. %
|
5. % Receives messages from the sensor node, computes control signal
|
6. % and sends it back to the actuator node.
|
7.
|
8. % Initialize TrueTime kernel
|
9. ttInitKernel('prioFP'); % fixed priority
|
10. ttSetKernelParameter('energyconsumption', 0.010); % 10 mW
|
|
11.
|
12. % Create mailboxes
|
13. ttCreateMailbox('sensor_signal', 10)
|
14. ttCreateMailbox('power_ping', 10)
|
15. ttCreateMailbox('power_response', 10)
|
16.
|
17. % Controller parameters
|
18. h = 0.010;
|
19. N = 100000;
|
20. Td = 0.035;
|
21. K = 1.5;
|
22.
|
23. % Create task data (local memory)
|
24. data.u = 0.0;
|
25. data.K = K;
|
26. data.ad = Td/(N*h+Td);
|
27. data.bd = N*K*Td/(N*h+Td);
|
28. data.Dold = 0.0;
|
29. data.yold = 0.0;
|
30.
|
31. % Create controller task
|
32. deadline = h;
|
33. prio = 1;
|
34. ttCreateTask('pid_task', deadline, 'ctrlcode', data);
|
35. ttSetPriority(prio, 'pid_task');
|
36.
|
37. % Create power controller task
|
38. offset = 2;
|
39. period = 0.025;
|
40. prio = 2;
|
41. power_data.transmitPower = 20;
|
42. power_data.name = 2; % We are node number 2 in the network
|
43. power_data.receiver = 1; % We are communicating with node 1
|
44. power_data.haverun = 0; % We have not run yet
|
45. ttCreatePeriodicTask('power_controller_task', offset, period, 'powctrlcode', power_data);
|
46. ttSetPriority(prio, 'power_controller_task');
|
47.
|
48. % Create power response task
|
49. deadline = 100;
|
50. prio = 3;
|
51. ttCreateTask('power_response_task', deadline, 'powrespcode');
|
52. ttSetPriority(prio, 'power_response_task');
|
53.
|
54. % Initialize network
|
55. ttCreateHandler('nw_handler', 1, 'msgRcvCtrl');
|
|
56. ttAttachNetworkHandler('nw_handler');
|
1. function actuator_init
|
2.
|
3. % Distributed control system: actuator node
|
4. %
|
5. % Receives messages from the controller and actuates
|
6. % the plant.
|
7.
|
8. % Initialize TrueTime kernel
|
9. ttInitKernel('prioFP'); % fixed priority
|
10. ttSetKernelParameter('energyconsumption', 0.010); % 10 mW
|
11.
|
12. % Create mailboxes
|
13. ttCreateMailbox('control_signal', 10)
|
14. ttCreateMailbox('power_ping', 10)
|
15. ttCreateMailbox('power_response', 10)
|
16.
|
17. % Create sensor task
|
18. data.y = 0;
|
19. offset = 0.0;
|
20. period = 0.010;
|
21. prio = 1;
|
22. ttCreatePeriodicTask('sens_task', offset, period, 'senscode', data);
|
23. ttSetPriority(prio, 'sens_task');
|
24.
|
25. % Create actuator task
|
26. deadline = 100;
|
27. prio = 2;
|
28. ttCreateTask('act_task', deadline, 'actcode');
|
29. ttSetPriority(prio, 'act_task');
|
30.
|
31. % Create power controller task
|
32. offset = 2.07;
|
33. period = 0.025;
|
34. prio = 3;
|
35. power_data.transmitPower = 20;
|
36. power_data.name = 1; % We are node number 1 in the network
|
37. power_data.receiver = 2; % We are communicating with node 2
|
38. power_data.haverun = 0; % We have not run yet
|
39. ttCreatePeriodicTask('power_controller_task', offset, period, 'powctrlcode', power_data);
|
40. ttSetPriority(prio, 'power_controller_task');
|
41.
|
|
42. % Create power response task
|
43. deadline = 100;
|
44. prio = 4;
|
45. ttCreateTask('power_response_task', deadline, 'powrespcode');
|
46. ttSetPriority(prio, 'power_response_task');
|
47.
|
48. % Initialize network
|
49. ttCreateHandler('nw_handler', 1, 'msgRcvActuator');
|
50. ttAttachNetworkHandler('nw_handler');
|
3.3.2 编写任务代码
1. function [exectime, data] = ctrlcode(seg, data)
|
2.
|
3. switch seg
|
4. case 1
|
5. % Read all buffered packets
|
6. temp = ttTryFetch('sensor_signal');
|
7. while ~isempty(temp)
|
8. y = temp;
|
9. temp = ttTryFetch('sensor_signal');
|
10. end
|
11. if isempty(y)
|
12. data.u = data.old; % 丢包,保持u(k-1)
|
13. else
|
14. data.u = -0.005 * (y(1) + y(2)); % 不丢包,保持u(k)
|
15. end
|
16. exectime = 0.0005;
|
17.
|
18. case 2
|
19. msg.msg = data.u;
|
20. msg.type = 'control_signal';
|
21. ttSendMsg(1, msg, 80); % Send 80 bits to node 1 (actuator)
|
22. exectime = -1; % finished
|
23. end
|
四、实验结果分析
4.1 不同丢包率下三条结果曲线
当丢包率分别为 0.3 和 0.6 时系统状态曲线、输出曲线和控制曲线如图 4 和图 5 所示。显然,在丢包率为 0.3 和
0.6 时,系统是稳定的。
图 4 丢包率为 0.3 时,系统状态曲线、输出曲线和控制曲线
图 5 丢包率为 0.6 时,系统状态曲线、输出曲线和控制曲线
4.2 不同丢包率下稳定性分析
根据上课讲解的 Bernoulli 过程的线性跳变系统,建立新的系统状态变量������������
������������
������������−1�。
由是否丢包情况下两种不同的控制率,即:
������������
= � −������������������� , ������ = 0
−�������������������−1 , ������ = 1
结合系统离散状态方程:
ℎ
������������+1 = ������������ℎ������������ + � ������������������������������������������������
0
其中,������ = �0 1 �,������ = � 0
�,采样周期为 0.01s。
将������������表达式代入������������+1,可得
ℎ
⎧�(������������ℎ − � �������������������������������������������) 0� � ������������
� , ������ = 0
������������+1
������������+1
= � ������������
⎪ 0
−������� 0
⎨ ℎ
�������������ℎ � ������������������������������������)� � ������������
������������−1
� , ������ = 1
全套毕业设计论文现成成品资料请咨询微信号:biyezuopin QQ:2922748026
返回首页
如转载请注明来源于www.biyezuopin.vip
|