首页> 中国专利> 一种基于TCP套接字的SCILAB与NS3协同仿真接口方法

一种基于TCP套接字的SCILAB与NS3协同仿真接口方法

摘要

基于TCP套接字的SCILAB与NS3协同仿真接口方法,首先是SCILAB和NS3软件的安装和配置;编写SCILAB接口程序;NS3内接口程序的编写;SCILAB内接口编程;编写SCILAB联合仿真循环程序,设置步数变量,是循环运行仿真的次数,设置主循环函数,XCOS输出数据变量通过扩展程序,发送给NS3,同时接受NS3上次仿真的结果,存放到文件中并读取到SCILAB工作空间,作为XCOS的输入数据值,启动XCOS,XCOS启动后从SCILAB工作空间读取NS3发送的值并开始仿真,将每次运行得到的延迟信息和数据包的值保留下来,结束循环,分别画出节点的延迟分布图和系统响应图。最终实现在网络化控制系统仿真中得到高精度的仿真结果。本发明仿真精度高,兼具开源和低成本的优点。

著录项

  • 公开/公告号CN112699515A

    专利类型发明专利

  • 公开/公告日2021-04-23

    原文格式PDF

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

    申请/专利号CN202110011849.9

  • 发明设计人 赵云波;卢帅领;梁启鹏;闫文晓;

    申请日2021-01-06

  • 分类号G06F30/18(20200101);G06F30/20(20200101);H04L29/06(20060101);G06F111/02(20200101);

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

  • 代理人王兵

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

  • 入库时间 2023-06-19 10:43:23

说明书

技术领域

本发明涉及无线网络化控制系统领域,具体涉及科学工程计算软件SCILAB和网络仿真软件NS3的协同仿真接口设计方法。

背景技术

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

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

发明内容

本发明要克服现有技术的上述缺点,要设计一种接口来实现SCILAB和NS3的协同通信仿真,基于TCP套接字技术,提出一种基于TCP套接字的SCILAB与NS3协同仿真接口方法,实现两软件间仿真的协同,可应用在NCS控制算法的仿真验证中。

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

一种基于TCP套接字的SCILAB与NS3协同仿真接口方法,含有以下步骤:

(1)SCILAB和NS3软件的安装和配置:安装Linux操作系统,具体安装的Ubuntu版本为最新的Ubuntu20.04 LTS,安装科学工程计算软件SCILAB,选择安装的SCIALB版本为最新的SCILAB 6.1.0Linux 64bits版,安装网络仿真软件NS3,选择安装的NS3版本为ns-3.31,编译仿真软件NS3。

(2)编写SCILAB接口程序:SCILAB与NS3协同仿真中需要交换数据,通过编写基于TCP的套接字接口程序实现SCILAB与NS3的通信,编写SCILAB内包含套接字的C++扩展程序。

(3)NS3内接口程序的编写:NS3接口程序应包含双向通信功能以及数据接收后启动仿真,NS3模拟脚本的编写,内核驱动模块的修改。

(4)SCILAB内接口编程:设计初始化并启动NS3的程序,在SCILAB编译C++扩展程序,编写XCOS模型驱动程序,搭建XCOS模型包含两个FROMWORKSPACE和两个TOWORKSPACE模块并嵌入到控制器模块和执行器被控对象和传感器的模块中。

(5)编写SCILAB联合仿真循环程序:交互一次会驱动SCILAB和NS3仿真一轮,即SCILAB和NS3把接收到的一次数据进行模拟,并到得一次结果输出。要驱动协同仿真运行需要的次数,就需要NS3与SCILAB工作区间以及XCOS仿真模块持续交换数据,进行多轮仿真;设置临时变量temp1和temp2,用于临时存放NS3接受的延迟数据信息,设置临时变量variable,用于临时存放NS3接受的数据包node2receive的内容信息,设置步数变量t,初始值为0,是循环运行仿真的次数,设置while主循环函数,给定t设定值,XCOS输出数据变量out1和out2赋给packetdata和packetdatae,运行一次在SCILAB编译过的扩展程序,运行命令main,启动扩展程序,将packetdata和packetdatae发送给NS3,同时接受NS3上次仿真的结果,存放到node1receive.txt和node2receive.txt文件中,命令loadmatfile从node1receive.txt和node2receive.txt文件中读取的数据,存入in1和in2中,作为XCOS的输入数据值,命令[result]=importXcosDiagram和xcos_simulate(scs_m,4)启动XCOS,XCOS开始运行,从SCILAB工作空间读取in1和in2的值并开始仿真,命令loadmatfile从node1receive_delay.txt和node2receive_delay.txt读取延迟信息赋给中间变量midnumber1和midnumber2,运行命令temp1=[temp1,midnumber1]和temp2=[temp2,midnumber2]将每次运行得到的延迟信息保留下来,命令fprintfMat将temp1和temp2放入名字为delay1.txt和delay2.txt的文件中,命令variable=[variable,in2],将每次运行的node2receive信息保存下来,命令fprintfMat将variable放入名字为state.txt的文件中,用end结束循环,设置x作为横坐标,运行命令loadmatfile(delay1)和loadmatfile(delay2),获得的的延迟值赋给y1和y2,命令plot(t,y1)和plot(t,y2)分别画出两个节点的延迟分布图,运行命令loadmatfile(state)获取状态量赋值给y3,plot(t,y3)画出系统响应图。

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

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

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

附图说明

图1是本发明方法的流程图;

图2是本发明实施例1的流程图;

图3是本发明的协同仿真接口示意图;

图4是本发明实施例2使用协同仿真接口的滞后-超前校正系统XCOS模型;

图5是本发明实施例2未使用协同仿真接口的滞后-超前校正系统XCOS模型;

图6是本发明实施例2使用协同仿真接口在系统中加入网络模拟的校正系统响应图;

图7是本发明实施例2未使用协同仿真接口的校正系统响应图。

具体实施方式

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

实施例1:

一种基于TCP套接字的SCILAB与NS3协同仿真接口方法,含有以下步骤:

(1)SCILAB和NS3软件的安装和配置;

步骤11:安装Linux操作系统;

由于NS3主要运行平台是GNU/Linux(如CentOS、Ubuntu、Fedora等),且SCILAB也可在Linux系统上稳定的运行,选择了用户易于上手的Linux发行版Ubuntu,Ubuntu作为全球最流行且最有影响力的Linux开源系统之一,使用Gnome桌面环境,具有良好的用户交互体验。选择安装的Ubuntu版本为Ubuntu20.04LTS;

步骤12:安装科学工程计算软件SCILAB;

SCILAB是由法国国家信息、自动化研究院的科学家们开发的开源软件;SCILAB作为一种科学工程计算软件,其数据类型丰富,可以很方便地实现各种矩阵运算与图形显示,能应用于科学计算、数学建模、信号处理、决策优化、线性/非线性控制等各个方面;安装的SCIALB版本为最新的SCILAB 6.1.0Linux64bits版;

步骤13:安装网络仿真软件NS3;

NS3是一款由C++语言编写的用于模拟通信网络的开源仿真软件,NS3没有图形用户界面,而是被构建为一个C++程序库,提供各种用于网络模拟的应用程序接口,安装NS3的版本为ns-3.31;

步骤14:编译仿真软件NS3;

由于NS3没有图形用户界面,要使用NS3进行网络模拟,需要经过以下步骤:下载源代码、编译源代码、编写模拟脚本和运行模拟脚本;

源代码的下载需要登录NS3的官方网站,之后需要对Ubuntu系统进行配置,使用Ubuntu系统终端命令apt-get install安装NS3运行必备的包,这些安装包包括gcc g++Python、mercurial、bzr等NS3运行需要的环境,之后运行配置命令“./waf configure--build-profile=debug--enable-examples--enable-tests”打开debug并开启例子及帮助,之后运行命令./waf build进行构建,输入命令“./test.py-c core”进行测试NS3是否安装完整,输入命令“./waf–run hello-simulator”运行模拟脚本例子来测试NS3是否编译完成。

(2)编写SCILAB接口程序;

步骤21:SCILAB与NS3协同仿真中需要交换数据,通过编写基于TCP的套接字接口程序实现SCILAB与NS3的通信;SCILAB本身不具备套接字功能,需要通过SCILAB 6版本内部提供的访问api_scilab来将C或C++扩展程序写入SCILAB,它允许定义本机函数(gateway),获取此类函数的输入参数,设置返回参数,访问局部变量,使用通用的辅助函数访问环境信息(错误或警告信息),通过扩展的C或C++程序,可以实现SCILAB内部变量与其他应用程序的数据交换。

步骤22:编写SCILAB内包含套接字的C++扩展程序;

扩展程序需要实现从SCILAB读取变量信息且能够发送给其他的程序的功能,需要创建C++结构体以承载交互信息,命令mexGetVariable能够获取SCILAB的变量信息,而将外部的数据输入到SCILAB则需要通过C++扩展程序的文件读取功能,具体包括NS3发送的信息通过TCP套接字扩展程序接受并将数据写入到txt文件中,SCILAB通过读取这些文件,将其中的数据赋给具体的变量供图形仿真模块XCOS使用,XCOS读取SCILAB工作空间的变量值来运行仿真,仿真完成后输出的值传递到SCILAB工作空间,SCILAB将接受来自XCOS值通过C++扩展程序发送给NS3,NS3使用这些数据信息进行仿真,仿真完成后将仿真结果通过NS3内的TCP套接字发送给SCILAB扩展程序,通过不断循环以上过程来完成SCILAB和NS3的协同仿真。

(3)NS3内接口程序的编写;

步骤31:NS3接口程序包含双向通信功能;

通过对NS3内核的修改,可实现从SCILAB接受数据后自动运行仿真,仿真完成后自动将数据发送给SCILAB的过程;

步骤32:NS3模拟脚本的编写;

脚本程序包含NS3必要的头文件,core模块、network模块、internet模块、applications模块以及内核驱动模块,包含网络拓扑的建立、安装网络协议、安装应用程序、启动与结束的Run和Stop;

步骤33:内核驱动模块的修改:

模拟脚本通过Run来驱使内核驱动模块工作,内核驱动模块内编写了通信模块,通信模块是一个与外部信息交换的接口,基于TCP协议的套接字编写,NS3通过此接口进行SCILAB通信,将通信接口嵌入到NS3仿真过程中,仿真过程中需要与SCILAB通信时调用此接口,NS3仿真过程包括:通过通信接口获取需要执行的事件、准备事件列表、从事件列表取下一个事件的指针、判断下一个事件是否超过仿真设定的时间、从事件列表不断取下一个事件、运行ProcessOneEvent推进仿真、仿真完成调用通信接口将结果发送给SCILAB。

(4)SCILAB内接口编程;

步骤41:设计初始化并启动NS3的程序;

通过在SCILAB内系统接口调用Linux命令启动并初始化NS3,初始化NS3节点个数nodenumber=4,NS3的模拟脚本命名为ExternallyTest,由于需要给已经编译过的NS3重新赋节点数,所以每次启动协同仿真前需要使用命令unix('gnome-terminal--./waf--run”scratch/ExternallyTest”')启动并重新编译NS3;

步骤42:在SCILAB编译C++扩展程序:

先给出需要扩展程序传送的数据包的具体内容,设定变量packetdata和packedatae用于传递数据包的内容,C++扩展程序命名为CLIENT,使用命令ilib_mex_build('libmex',['main','CLIENT','cmex'],[],[],”,”,”,”)编译CLIENT名字的C++文件,编译完成后通过名为main的命令进行调用扩展程序,实现SCILAB内变量信息传递给NS3的,从NS3接受仿真数据并存入指定的文件中;

步骤43:编写XCOS模型驱动程序:

在SCILAB中使用命令loadmatfile从指定的文件中读取数据并存入变量in1和in2,这两个变量属于XCOS需要的输入数据,XCOS模型通过FROMWORKSPACE和TOWORKSPACE模块实现与SCILAB工作空间的数据交换,命令xcos(“xcos模型路径”)打开搭建好的模型,命令[result]=importXcosDiagram(模型路径)和xcos_simulate(scs_m,4)启动并运行XCOS模型;

步骤44:搭建XCOS模型包含两个FROMWORKSPACE和两个TOWORKSPACE功能模块,XCOS模型可看为两大部分,控制模块和包含被控对象、执行器和传感器的模块,这两个模块在NS3内被模拟为两个节点;FROMWORKSPACE和TOWORKSPACE分别嵌入到控制器模块和执行器被控对象和传感器的模块中。将控制器模块包含一个FROMWORKSPACE命名为in1和一个TOWPRKSPACE命名为out1,执行器及传感器功能模块包含一个FROMWORKSPACE命名为in2和一个TOWORKSPACE命名为out2,负责XCOS模型与SCILAB工作空间的数据传递。

(5)编写SCILAB联合仿真循环程序:

交互一次会驱动SCILAB和NS3仿真一轮,即SCILAB和NS3把接收到的一轮数据进行模拟,并到得一轮结果输出。要驱动协同仿真运行需要的轮数,就需要NS3与SCILAB工作区间以及XCOS仿真模块持续交换数据,进行多轮仿真;

步骤501:设置临时变量temp1和temp2,用于临时存放NS3接受的延迟数据信息;

步骤502:设置临时变量variable,用于临时存放NS3接受的数据包node2receive的内容信息;

步骤503:设置步数变量t,初始值为0,是循环运行仿真的次数;

步骤504:设置while主循环函数,给定t设定值;

步骤505;XCOS输出数据变量out1和out2赋给packetdata和packetdatae;

步骤506:运行一次在SCILAB编译过的扩展程序,运行命令main,启动扩展程序,将packetdata和packetdatae发送给NS3,同时接受NS3上次仿真的结果,存放到node1receive.txt和node2receive.txt文件中;

步骤507:命令loadmatfile从node1receive.txt和node2receive.txt文件中读取的数据,存入in1和in2中,作为XCOS的输入数据值;

步骤508:命令[result]=importXcosDiagram和xcos_simulate(scs_m,4)启动XCOS;XCOS开始运行后,从SCILAB工作空间读取in1和in2的值并开始仿真;

步骤509:命令loadmatfile从node1receive_delay.txt和node2receive_delay.txt读取延迟信息赋给中间变量midnumber1和midnumber2;

步骤510:运行命令temp1=[temp1,midnumber1]和temp2=[temp2,midnumber2]将每次运行得到的延迟信息保留下来;

步骤511:命令fprintfMat将temp1和temp2放入名字为delay1.txt和delay2.txt的文件中;

步骤512:命令variable=[variable,in2],将每次运行的node2receive信息保存下来;

步骤513:命令fprintfMat将variable放入名字为state.txt的文件中;

步骤514:用end结束循环;

步骤515:设置x作为横坐标,运行命令loadmatfile(delay1)和loadmatfile(delay2),获得的延迟值分别赋给y1和y2,命令plot(t,y1)和plot(t,y2)分别画出两个节点的延迟分布图,运行命令loadmatfile(state)获取状态量赋值给y3,plot(t,y3)画出系统响应图。

实施例2:

(1)选取实验数据;

考虑到每次运行一轮仿真,XCOS只需在某一时刻运行一轮即可,XCOS时钟信息如表1所示。

表1 XCOS时钟

设定XCOS的时钟CLOCK块初始时间为0.01,为了设定在0.01时刻运行一次,周期为5,终止时间为5,在XCOS被启动时,在0.01时刻运行一次,下一个周期为5.01超过终止时间5,仿真停止。

(2)模型选取;

为了验证协同仿真接口,XCOS模型选择滞后-超前矫正系统,在使用协同仿真接口系统模型的滞后-超前校正环节与系统传递函数之间插入了FROMWORKSPACE和TOWORKSPACE,插入这两个模块可实现XCOS与SCILAB工作区间的数据交换,进而使用协同仿真接口。作为对比,未使用协同仿真接口的系统不插入FROMWORKSPACE和TOWORKSPACE,使用协同仿真接口系统模型为图4和未使用协同仿真接口的系统模型为图5。

(3)实验结果;

实验结果如图6和图7所示,图6为使用协同仿真接口在系统中加入网络模拟的校正系统响应图,图7为未使用协同仿真接口的校正系统响应图,可见使用协同仿真接口在校正系统加入了NS3网络模拟的系统响应与未使用协同仿真接口的系统响应图相比会随着时间的变长不稳定起来,符合加入网络后系统由于传输延迟造成的系统不稳定。实验验证了通过协同仿真接口成功在SCIALB的XCOS仿真中把NS3模拟的网络仿真协同起来,实现了两仿真软件协同仿真。

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

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号