首页> 中国专利> 一种基于XCOS和NS3的协同仿真时间同步方法

一种基于XCOS和NS3的协同仿真时间同步方法

摘要

一种基于XCOS和NS3的协同仿真时间同步方法,包括:安装NS3中协同仿真接口,在NS3中安装套接字服务端程序,定义缓冲区,缓存SCILAB同步数据;安装SCILAB中协同仿真接口;初始化NS3仿真脚本;新建NS3仿真脚本,在脚本中定义NS3仿真模块,定义初始化函数:节点设置函数、网络拓扑建立函数、信道属性配置函数、网络设备创建函数、网络协议栈安装函数、仿真开始及结束函数,通过NS3协同仿真接口初始化函数传值完成NS3配置;NS3同步机制设计;SCILAB内XCOS控制系统模型搭建;搭建被控对象模型;搭建控制器模型;搭建执行器模型;协同仿真软件间时间同步机制实现;绘制协同仿真结果图;最终实现在网络化控制系统仿真中得到高精度的仿真结果。

著录项

  • 公开/公告号CN113139281A

    专利类型发明专利

  • 公开/公告日2021-07-20

    原文格式PDF

  • 申请/专利权人 浙江工业大学;

    申请/专利号CN202110398847.X

  • 发明设计人 赵云波;卢帅领;郝小梅;梁启鹏;

    申请日2021-04-12

  • 分类号G06F30/20(20200101);G06F111/02(20200101);G06F119/12(20200101);

  • 代理机构33201 杭州天正专利事务所有限公司;

  • 代理人王兵

  • 地址 310014 浙江省杭州市拱墅区潮王路18号

  • 入库时间 2023-06-19 11:54:11

说明书

技术领域

本发明涉及无线网络化控制系统领域,具体涉及科学工程计算软件SCILAB的XCOS仿真模块和网络仿真软件NS3的协同仿真时间同步机制方法。

背景技术

随着通信技术,传感器技术和嵌入式计算的发展,网络化控制系统(NCS)在车联网、智慧建筑、工业4.0等场景中得到广泛应用。在NCS的理论研究和工程应用中,通过仿真软件对控制算法进行验证不可或缺。

一种基于XCOS和NS3的协同仿真时间同步方法是实现SCILAB与NS3协同仿真NCS的关键技术。首先,NCS通过网络形成闭环控制回路,单独的科学计算软件或网络仿真软件难以同时对通信网络和控制系统实现较为精确的仿真。利用科学计算软件和网络仿真软件进行协同仿真可以满足对NCS的仿真需求,软件间的接口是实现协同仿真的基础。其次,SCILAB与NS3作为当前较为优秀的控制系统和通信网络仿真开源软件,通过设计接口实现SCILAB与NS3的协同仿真可以兼具仿真精度和开源软件低成本,低版权风险的优势。

发明内容

本发明要克服现有技术的上述缺点,提供一种基于XCOS和NS3的协同仿真时间同步方法。本发明以一种时间同步方案来实现SCILAB和NS3的协同通信仿真,以此来保证协同仿真正确有序进行。基于XCOS可视化控制系统模型仿真和TCP套接字技术,提出一种时间同步方案使得SCILAB内的XCOS模块与NS3软件在仿真时间上一致,实现两个软件间仿真的协同,可应用在NCS控制算法的仿真验证中。

本发明解决其技术问题所采用的技术方案是:

1.一种基于XCOS和NS3的协同仿真时间同步方法,含有以下步骤:

(1)安装NS3中协同仿真接口;

步骤11:在NS3中安装套接字服务端程序。通过套接字接受SCILAB的同步数据;

步骤12:定义缓冲区,缓存SCILAB同步数据。

(2)安装SCILAB中协同仿真接口;

步骤21:在SCILAB中安装套接字客户端C++程序。利用mexArray指令从SCILAB获取需要发送给服务端的数据,通过套接字发送给NS3;

步骤22:执行命令ilib_mex_build([“接口名”“C++程序文件名”),编译接口程序;

步骤23:执行命令exec loader.sce,链接SCILAB动态库文件,在SCILAB中通过“接口名”即可调用接口程序。

(3)初始化NS3仿真脚本;

新建NS3仿真脚本,在脚本中定义NS3仿真模块,定义初始化函数:节点设置函数、网络拓扑建立函数、信道属性配置函数、网络设备创建函数、网络协议栈安装函数、仿真开始及结束函数,通过NS3协同仿真接口(1)向以上初始化函数传值完成NS3配置;

步骤31:定义并初始化NS3仿真同步周期的步长SimulationStep;

步长在SCILAB中意味着一个采样周期,在一个周期内SCILAB通知NS3运行节点间的收发事件;

步骤32:定义下一个仿真同步时刻TimeLimit,初始值为SimulationStep;

步骤3:定义并初始化仿真时间上限即仿真结束时间SimulationStopTime;

步骤34:定义当前仿真时刻CurrentTime=m_events->PeekNext().key.m_ts;

步骤35:定义节点发送时刻SendTime;

在NS3脚本中使用命令GetSendTime()获取节点发送的时刻,赋值给SendTime,并作为数据包内容的第一位发送给SCILAB,使得数据包在整个仿真过程都能携带发送时刻信息。

(4)NS3同步机制设计;

步骤41:定义回跳时间JumpTime=TimeLimit-SimulationStep-CurrentTime;

步骤42:寻找可以在当前同步周期内执行完成的最后一个事件的时间。执行命令m_events->PeekNext().key.m_ts取下一个事件的结束时刻,判断其是否小于等于TimeLimit。若是,则更新CurrentTime=m_events->PeekNext().key.m_ts,执行该事件,并继续取下一个事件,否则,说明当前事件为可以在当前同步周期内执行完成的最后一个事件,此时将TimeLimit移到下一个同步周期点,即TimeLi mit+=SimulationStep,并执行步骤23和步骤24与SCILAB同步信息;

步骤43:NS3向SCILAB同步信息。NS3将接受事件中的事件内容,包括时间戳,传感信号,控制量等通过协同仿真接口发给SCILAB;

步骤44:接受SCILAB的同步数据,计算回跳时间,安排新事件。回跳时间JumpTime的计算公式为JumpTime=TimeLimit-SimulationStep-CurrentTime,在Ju mpTime延时之后执行Simulator::Schedule(JumpTime,&UdpEchoClientNew::Send To,this)更新事件列表,其中&UdpEchoClientNew::SendTo()函数内可自定义一系列发送事件。

步骤45:重复执行步骤22到24,直到TimeLimit>SimulationStopTime,NS3仿真结束。

(5)SCILAB内XCOS控制系统模型搭建;

步骤51:搭建被控对象模型;

在XCOS中使用用户自定义模块scifunc_block_m模块,并在工作区间内新建脚本编写此模块功能。定义此模块的控制量u

y

其中A、C∈R

步骤52:搭建控制器模型;

使用scifunc_block_m模块创建控制器模块,模块接受NS3仿真输出数据作为输入,数据内容包括时间戳time_stamp,即传感器节点发送时刻,以及传感器信号,记为u

y

其中K为给定控制增益;

步骤53:搭建执行器模型;

定义变量ut_memory,用来与到达执行器的值比较时间戳(传感器节点发送数据包的时刻),给定初始时间戳为0和初始值的大小,定义变量ut_memory_update,用来更新ut_memory的值。到达执行器的包的内容为控制器处理过的数据包,会先比较含时间戳time_stamp数据包与初始化时存入变量ut_memory的数据大小,选择时间戳大的数据包执行,并将此包保存到ut_memory_update。

(6)协同仿真软件间时间同步机制实现;

步骤61:在SCILAB中给定传感器节点发送给控制器节点的变量C_A_data初值,控制器节点发送给执行器节点的变量S_C_data初值,调用接口程序将变量C_A_data和变量S_C_data的值传递给NS3,NS3会根据接收到的信息安排事件;

步骤62:NS3安排两个发送事件和两个接收事件,完成四个事件后,调用接口程序将仿真结果传送给SCILAB;

步骤63:SCILAB接受NS3的仿真结果,获取仿真结果中当前的仿真时刻,赋值给SCILAB当前时刻变量CurrentTime_SCI;

步骤64:设置状态变量State,将S_C_NS3的值赋给State,完成初始化;

步骤65:获取NS3仿真传感器节点到控制器节点的结果,将包的内容传给变量S_C_SCI,获取NS3仿真控制器节点到执行器节点的结果,将包的内容传给变量C_A_SCI;

步骤66:运行XCOS控制系统模型,获得运行结果即需要NS3下次仿真的安排,即控制器节点发送给执行器节点的包的内容传给变量C_A_NS3,传感器节点发送给控制器节点的内容传给变量S_C_NS3;

步骤67:设置循环体计次变量t,即传感器采样次数;

步骤68:进入循环体,将上次XCOS运行的结果变量C_A_NS3和S_C_NS3传给协同仿真接口程序的接口变量C_A_data和S_C_data,运行接口程序,将SCILAB需要仿真的事件发送给NS3,并接受NS3仿真的结果,存储延迟信息,包的内容更新到变量S_C_SCI和C_A_SCI,在运行XCOS控制系统模型,更新当前仿真时刻CurrentTime_SCI+=SimulationStep,之后将t+=1,进入下次循环,直到达到仿真上限时间;

(7)绘制协同仿真结果图;

步骤72:定义控制系统闭环延时close_loop_delay,数据计算公式如下:

close_loop_delay=CurrentTime_SCI-time_stamp; (3)

步骤71:以采样次数t为横坐标,close_loop_delay为纵坐标,使用命令plot(t,close_loop_delay)绘制控制系统传输的延时数据图。

与现有技术相比,本发明技术方案的优点有:

(1)本发明协同两软件进行仿真,相比于单软件的NCS系统仿真,可实现较高的仿真精度;

(2)选择开源软件,通过设计接口实现两仿真软件协同仿真可以兼具开源和低成本,低版权风险的优势。

附图说明

图1是本发明的协同仿真同步机制示意图;

图2是本发明的XCOS控制系统模型;

图3是本发明的XCOS中执行器模型;

图4是本发明的传感器S到控制器C之间的协同仿真接口;

图5是本发明的控制器C到执行器A之间的协同仿真接口;

图6是本发明的无线化网络控制系统闭环延时折线图。

具体实施方式

为了便于本领域普通技术人员理解和实施本发明,下面结合附图和实施例对本发明作进一步的详细描述。

实施例1:

为了验证XCOS与NS3的协同仿真时间同步方法的可靠性,以SCILAB为主导,调用NS3软件进行协同仿真,在仿真完成后提取两软件的仿真时刻进行比较,验证同步方案的可靠性。此次验证无线化网络控制系统,NS3网络类型设置为802.11b,考虑到每次运行一次采样(运行一次SCILAB仿真循环),NS3需要运行一个同步周期,而SCILAB也会调用XCOS一次,即两软件交替运行。XCOS控制系统模型执行器模块中A、B矩阵设置为二阶单位阵,C设置为元素全为1的二维列向量,控制器给定控制增益K为元素全为1的二维列向量。设置NS3的步长为30ms,总的仿真时长为,运行协同仿真程序,将其中SCILAB的节点发送时刻SendTime存入变量CurrentTime_SCI,N S3仿真结果中的CurrentTime存入文件转存区CurrentTime_record内,在仿真结束后通过命令loadmatfile("CurrentTime_record.txt"),将文件中的数据读入SCI LAB并存放到变量CurrentTime_NS3中,比较此时CurrentTime_SCI和CurrentTime_NS3的值,如果一致则说明两软件的仿真时刻协调一致,将NS3仿真产生的控制器到执行器和传感器到控制器延迟数据提取出来,运行画图命令plo t,以采样周期t为横轴,延迟数据为纵轴,得到随机的延迟数据,验证两个软件协同仿真有序正常,两软件的仿真时刻一致,该方案可行。

本发明的基于XCOS和NS3的协同仿真时间同步方法,以SCILAB为主导,调用NS3软件进行协同仿真,在仿真完成后提取两软件的仿真时刻进行比较,验证同步方案的可靠性。首先安装NS3中协同仿真接口,在NS3中安装套接字服务端程序,定义缓冲区,缓存SCILAB同步数据;安装SCILAB中协同仿真接口;初始化NS3仿真脚本;新建NS3仿真脚本,在脚本中定义NS3仿真模块,定义初始化函数:节点设置函数、网络拓扑建立函数、信道属性配置函数、网络设备创建函数、网络协议栈安装函数、仿真开始及结束函数,通过NS3协同仿真接口初始化函数传值完成NS3配置;NS3同步机制设计;SCILA B内XCOS控制系统模型搭建;搭建被控对象模型;搭建控制器模型;搭建执行器模型;协同仿真软件间时间同步机制实现;绘制协同仿真结果图;最终实现在网络化控制系统仿真中得到高精度的仿真结果。本发明仿真精度高,兼具开源和低成本的优点。

本说明书实施例所述的内容仅仅是对发明构思的实现形式的列举,本发明的保护范围不应当被视为仅限于实施例所陈述的具体形式,本发明的保护范围也及于本领域技术人员根据本发明构思所能够想到的等同技术手段。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号