基于 MATLAB 、Simulink 仿真和 TrueTime 工具箱的网络控制系统的仿真方法 附完整代码

通过动手实践了解网络控制系统的架构及运行控制原理

熟悉使用基于 MATLAB 平台、Simulink 仿真工具和 TrueTime 工具箱的网络控制系统的仿真方法

考察不同丢包率下网络控制系统状态、输出和控制曲线的影响

研究丢包率对无线网络传输的网络控制系统的稳定性的影响

二、仿真平台构建


Truetime 是瑞典隆德(Lund)大学自动化系 MartinOhin,Dan Henriksson 和 Anton Cervin 于 2002 年推出的基 于 MATLAB/Simulink 的网络控制系统仿真工具箱。针对每一特定的网络协议,该工具箱可以实现控制系统与实时调 度的综合仿真研究,是目前网络控制系统理想的虚拟仿真工具之一。

本次实验使用 Truetime2.0 工具箱的七大模块中的 TrueTime Kernel 模块和 TrueTime Wireless Network 模块。 其中,系统的传感器、执行器和控制器由 TrueTime Kernel 表示,无线网络由 TrueTime Wireless Network 表示。传感器采用时钟驱动的方式进行周期性采样,控制器和执行器采用事件驱动方式。

在确定各个功能模块之后,需要对各模块进行初始化,即初始化模块内核,定义消息函数并设置消息调度策略 和初始化网络端口并设置节点对应的网络端口代号。

三、实验步骤


对于本次仿真实验,按照 Truetime 仿真流程,我将实验步骤分为三步:建立数学模型,功能模块图仿真和编写 相关代码。

3.1 建立数学模型

这一部分简要重述该网络控制系统的数学模型。 已知直流电机的传递函数为:

该电机通过网络 IEEE 802.11b/g(WLAN)的方式进行远程控制,系统的控制结构如下图所示:

图 1 单闭环网络控制系统流程图

假设传感器采用时钟驱动的方式进行周期性采样,控制器和执行器采用事件驱动方式。存在网络丢包现象, 其状态空间模型可以描述成

其中初始状态为

,p 为丢包概率,p=0 表示无数据丢包,p=1 表示有数据丢包,假设不会发生连续丢包。给定控制器为

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 文件进行,无需改动。代码如下:

 function regulator_init

 % Distributed control system: regulator node  %
 % Receives messages from the sensor node, computes control signal
 % and sends it back to the actuator node. 7.
 % Initialize TrueTime kernel
 ttInitKernel('prioFP'); % fixed priority
 ttSetKernelParameter('energyconsumption', 0.010); % 10 mW

 % Create mailboxes
 ttCreateMailbox('sensor_signal', 10)
 ttCreateMailbox('power_ping', 10)
 ttCreateMailbox('power_response', 10) 16.
 % Controller parameters 
  h = 0.010;
 N = 100000;
  Td = 0.035;
 K = 1.5;

 % Create task data (local memory)
 data.u = 0.0;
 data.K = K;
 data.ad = Td/(N*h+Td);
 data.bd = N*K*Td/(N*h+Td);
 data.Dold = 0.0;
 data.yold = 0.0; 
 % Create controller task
 deadline = h;
 prio = 1;
 ttCreateTask('pid_task', deadline, 'ctrlcode', data);
 ttSetPriority(prio, 'pid_task'); 36.
 % Create power controller task
 offset = 2;
 period = 0.025;
 prio = 2;
 power_data.transmitPower = 20;
 power_data.name = 2;    % We are node number 2 in the network
 power_data.receiver = 1; % We are communicating with node 1
 power_data.haverun = 0; % We have not run yet
 ttCreatePeriodicTask('power_controller_task', offset, period, 'powctrlcode', power_data);
 ttSetPriority(prio, 'power_controller_task'); 47.
 % Create power response task
 deadline = 100;
 prio = 3;
 ttCreateTask('power_response_task', deadline, 'powrespcode');
 ttSetPriority(prio, 'power_response_task'); 53.
 % Initialize network
 ttCreateHandler('nw_handler', 1, 'msgRcvCtrl');
 ttAttachNetworkHandler('nw_handler');
 function actuator_init

 % Distributed control system: actuator node 
  %
 % Receives messages from the controller and actuates
 % the plant. 7.
 % Initialize TrueTime kernel
 ttInitKernel('prioFP'); % fixed priority
 ttSetKernelParameter('energyconsumption', 0.010); % 10 mW 11.
 % Create mailboxes
 ttCreateMailbox('control_signal', 10)
 ttCreateMailbox('power_ping', 10)
 ttCreateMailbox('power_response', 10) 16.
 % Create sensor task
 data.y = 0;
 offset = 0.0;
 period = 0.010;
 prio = 1;
 ttCreatePeriodicTask('sens_task', offset, period, 'senscode', data);
 ttSetPriority(prio, 'sens_task'); 
 % Create actuator task
 deadline = 100;
 prio = 2;
 ttCreateTask('act_task', deadline, 'actcode');
 ttSetPriority(prio, 'act_task'); 30.
 % Create power controller task
 offset = 2.07;
period = 0.025;
 prio = 3;
 power_data.transmitPower = 20;
 power_data.name = 1;    % We are node number 1 in the network
 power_data.receiver = 2; % We are communicating with node 2
 power_data.haverun = 0; % We have not run yet
 ttCreatePeriodicTask('power_controller_task', offset, period, 'powctrlcode', power_data);
 ttSetPriority(prio, 'power_controller_task');

 % Create power response task
 deadline = 100;
 prio = 4;
 ttCreateTask('power_response_task', deadline, 'powrespcode');
 ttSetPriority(prio, 'power_response_task'); 
 % Initialize network
ttCreateHandler('nw_handler', 1, 'msgRcvActuator');
 ttAttachNetworkHandler('nw_handler');
3.3.2 编写任务代码
 function [exectime, data] = ctrlcode(seg, data) 2.
 switch seg
  case 1
   % Read all buffered packets
   temp = ttTryFetch('sensor_signal');
   while ~isempty(temp)
     y = temp;
     temp = ttTryFetch('sensor_signal');
  end
  if isempty(y)
    data.u = data.old; % 丢包,保持 u(k-1)
  else
    data.u = -0.005 * (y(1) + y(2)); % 不丢包,保持 u(k)
  end
  exectime = 0.0005; 17.
 case 2
msg.msg = data.u;
msg.type = 'control_signal';
ttSendMsg(1, msg, 80);   % Send 80 bits to node 1 (actuator)
 exectime = -1; % finished
 end

四、实验结果分析


4.1 不同丢包率下三条结果曲线

当丢包率分别为 0.3 和 0.6 时系统状态曲线、输出曲线和控制曲线如图 4 和图 5 所示。显然,在丢包率为 0.3 和 0.6 时,系统是稳定的。

图 4 丢包率为 0.3 时,系统状态曲线、输出曲线和控制曲线

图 5 丢包率为 0.6 时,系统状态曲线、输出曲线和控制曲线

4.2 不同丢包率下稳定性分析

根据上课讲解的 Bernoulli 过程的线性跳变系统,建立新的系统状态变量

由是否丢包情况下两种不同的控制率,即:

结合系统离散状态方程:

其中,

采样周期为 0.01s。

由 Lyapunov 稳定性判据可知,

运用 LMI 工具箱对 P>0 进行求解,得到当丢包率大于等于 0.96 时,系统不满足均方稳定(MSS),当丢包率小于等于 0.95 时,系统是均方稳定的。

 h=0.01;
 eAh=[1 1-exp(-h);0 exp(-h)];
 A01=eAh-[h h+exp(-h)-1;0 1-exp(-h)]*[0;1000]*[0.005 0.005];
 A0=[A01(1),A01(3),0;A01(2),A01(4),0;-0.005,-0.005,0];
 tmp=[h h+exp(-h)-1;0 1-exp(-h)]*[0;1000];
 A1=[eAh(1),eAh(3),tmp(1);eAh(2),eAh(4),tmp(2);0,0,1];
 c=zeros(1,120);
 i=1;
 for p=0:0.01:1
 setlmis([]);
 P=lmivar(1,[3,1]);
 lmiterm([-1,1,1,P],1,1);%P>0
 lmiterm([2,1,1,P],(1-p)*A0',A0);
 lmiterm([2,1,1,P],p*A1',A1);
 lmiterm([2,1,1,P],-1,1);
 lmis=getlmis;
 [tmin,xfeas]=feasp(lmis);
 if tmin>0
 c(i)=p;
 i=i+1;
 end
 %P=dec2mat(lmis,xfeas,P);
end
 c

为了观察不稳定情况下,系统状态曲线、输出曲线和控制曲线的走势,我重新设置丢包率为 0.98,这时三条曲 线走势如图 6 所示。

图 6 丢包率为 0.98 时,系统状态曲线、输出曲线和控制曲线

完整代码:https://download.csdn.net/download/weixin_55771290/87407365

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
基于MATLAB网络控制系统仿真-基于MATLAB网络控制系统仿真.pdf 基于MATLAB网络控制系统仿真 【英文篇名】The simulation of networked control systems based on MATLAB【作者中文名】[url=]许顺孝[/url];【作者英文名】[url=]XU Shun-xiao(Marine Engineering Institute[/url]; [url=]Jimei University[/url]; [url=]Xiamen[/url]; [url=]Fujian 361021[/url]; [url=]China)[/url];【作者单位】[url=]集美大学轮机工程学院[/url];【文献出处】福州大学学报, Journal of Fuzhou University, 编辑部邮箱 2008年 S1期   期刊荣誉:中文核心期刊要目总览  ASPT来源刊  CJFD收录刊【关键词】[url=]网络控制系统[/url]; [url=]ActiveX[/url]; [url=]MATLAB[/url]; [url=]TrueTime[/url];【英文关键词】[url=]networked control system[/url]; [url=]Active X[/url]; [url=]MATLAB[/url]; [url=]TrueTime[/url];【摘要】介绍了基于TrueTime工具包和Active X技术的仿真平台实现方法.前者是根据网络MAC协议对通信延迟机理进行建模的仿真软件包;后者是针对网络控制系统通信模型仿真困难的缺点而提出,该方法通过ActiveX技术实现了对象模型和控制器通信,为网络控制系统的理论研究提供有效的检验平台.通过对两者的比较指出两种方法的优缺点.【英文摘要】This paper introduces two methods of simulation based on TrueTime and Active X,the first is a soft package which create model according to delay principle of networked MAC protocol,the latter is a new method to deal with the difficulty on the simulation of communication model.This method realizes the communication of the plant model and controller through ActiveX technology,then provides an effective test platform for theory research on NCS.Finally this paper gives the advantage and disadvantage by comparin...
控制系统建模与仿真 基于matlabsimulink实现》是一本介绍如何使用MatlabSimulink进行控制系统建模和仿真的书籍。Matlab是一种强大的数值计算和编程环境,而SimulinkMatlab的一个扩展模块,专门用于模拟和仿真动态系统。 这本书首先介绍了控制系统的基本概念和原理,包括传递函数、状态空间和反馈控制。然后,书中详细介绍了如何使用MatlabSimulink进行控制系统的建模。读者可以学习如何使用Matlab进行数值计算和编程,以及如何使用Simulink进行系统建模。 书中的案例涵盖了多个不同的领域和应用,包括机械系统、电气系统和化学系统等。每个案例都具有明确的目标和要求,读者可以按照书中的指导完成建模和仿真实验。通过这些案例,读者可以学习如何将实际问题转化为数学模型,并使用MatlabSimulink进行仿真和分析。 值得一提的是,MatlabSimulink具有友好的界面和丰富的工具箱,可以方便地进行系统建模和仿真。同时,MatlabSimulink还支持多种不同的控制系统设计和分析方法,如PID控制、根轨迹分析和频域分析等。这本书也详细介绍了这些方法的原理和实践。 总的来说,《控制系统建模与仿真 基于matlabsimulink实现》是一本很好的学习材料,可以帮助读者快速入门控制系统建模与仿真的基本技能。无论是对于学习控制理论的学生,还是对于工程师和研究人员来说,这本书都将提供有价值的指导和实践经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一枚爱吃大蒜的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值