opnet共享代码开发
- 共享代码开发概述
共享代码开发功能允许您编写可以编译以在多个平台上使用的代码。 例如,为新协议开发的代码可以设计为在承载它的物理硬件和OPNET网络模型中使用。
习惯上,Modeler用户使用行为建模。这些是捕获系统组件的行为而不是再现组件的确切内部功能的模型。行为模型通常做出简化假设。它们实现设计或算法,而不是复制实际代码。
在对现有系统建模时,行为建模有许多好处。 例如:
•您只需要对系统的关键部分进行建模。
•您可以编写高度可读的代码,并将其分解成逻辑块。
•您不受具体的,可能难以理解的平台的要求的束缚。
然而,行为模型分离了实际代码的开发工作和相应的模型。 另一方面,共享代码开发使用相同的代码来建模和在实际系统上执行。 这种方法
•整合建模和开发团队,允许更好的合作和减少工作量
•增加仿真结果与真实世界匹配的自信度(因为两者都使用相同的代码)
•通过一些操作实现更好的质量保证
- 作为代码更改的自动回归测试
- 使用真实代码和(与SITL)真实与虚拟设备的可扩展性测试
共享代码将需要一些修改,以允许它在所有目标(例如系统调用)上进行编译。 您不必使用所有的代码进行建模 - 子集可能就足够了。 此外,有时可以混合共享代码和行为建模。
共享代码是OPNET解决方案的可选功能。 要使用它,您必须具有共享代码开发许可证,并通过License > Product Modules菜单启用该功能。
1.1. 共享代码将以下组件添加到标准的OPNET Modeler:
•一个API,以方便在OPNET模型中使用共享代码
•共享代码的进程模型模板
1.2. 使用共享代码的工作流程
使用OPNET Modeler共享代码的一般步骤如下:
1)开发一个允许为多个目标编译代码的设计。
2)确定设计的哪些部分可以被简化用于建模,哪些部分是特定的实现。
3)决定设计模式。
4)创建使用共享代码进程模型的节点模型并将其包含在网络模型中。
- 使用共享代码
本节包括以下几个主题:
•设计共享代码系统
•共享代码的设计模式
•创建共享代码进程模型
•将共享代码添加到节点
•成功的建议
•共享代码偏好设置
2.1 设计共享代码系统
您需要以这样一种方式设计您的系统,使其可以为多个目标编译。首先确定系统需要完成的所有任务。然后根据以下两个条件选出不能共享的任务:
•可以从OPNET模型中省略哪些任务?
•哪些任务将需要高度定制化的实现?
对于上述这类任务将需要使用诸如在共享代码的设计模式中描述的技术对每个目标进行不同地处理。
哪些任务可以从OPNET模型中省略?
一般来说,您希望分享尽可能多的代码。但是,尝试建模过多的功能可能会使您的模型运行速度更慢,或者需要运行非常强大的计算机。您通常应用于传统行为建模的相同类型的标准也可以帮助降低共享模型代码的复杂性。您不需要建模的任务包括以下内容:
•POST例程
•加密(除非SITL需要,在这种情况下,您应该包括打开/关闭它的方法)
•与真实硬件相关的功能,例如输出状态,生成日志文件和执行硬件自诊断(包括打开/关闭这些功能的方法)
哪些任务将需要高度定制化的实现?
一些任务将与运行实际代码的硬件密切相关。对于这些,你将需要不同的实现代码和模型。例如:
•Windows设备驱动程序中的NDIS调用在OPNET模型中将需要一些可替换机制
•更改软件定义无线电的发射频率可能会使用某些用于硬件的自定义API,但只涉及在模型中的对象上设置属性值
2.2 共享代码的设计模式
共享代码项目的目的是为得到一个将为Modeler和真实平台编译和运行的存储库。根据您的需要,可能还有其他目标:多个真实平台,仿真器等等。有许多方法来实现这一目标,以下描述了两种常见的方法。
使用函数
在这种方法中,代码的主体产生针对特定平台行为的函数调用。您可以为每个平台实现一组函数并根据需要链接到适当的函数集中。
例如,您可能正在开发需要发送Hello数据包的协议。您已确定这涉及必须在OPNET模型和真实硬件上以不同方式处理的三个步骤。你的主要代码可能看起来像这样(注解中包含一些提炼的代码):
double
calculate_next_tx_time (MyProtoState *state_ptr)
{
double curtime = platform_get_current_time ();
// some complicated algorithm to determine when to send next, based on local state
return complicated_val;
}
void
send_hello_pkt (MyProtoState *state_ptr)
{
unsigned char pkt_data [500];
// fill packet data with proper hello data
platform_send_packet (state_ptr, pkt_data);
double next_tx_time = calculate_next_tx_time ();
platform_schedule_next_hello (state_ptr, next_tx_time);
}
这三个特定平台的步骤通过函数调用来处理
•platform_get_current_time()
•platform_send_packet()
•platform_schedule_next_hello()
这些功能将分别存在两个版本,一个用于模型代码,一个用于真实硬件。
使用#ifdefs
这种方法将所有代码放在一个块中,并使用#ifdefs在编译时选择所需的代码。 这有时比函数调用更容易,例如当程序逻辑必须根据平台改变时,或者当你想避免大量的“no-op”函数调用时。
以下示例使用OPD_DES来标识OPNET指定的代码。OPD_DES符号始终需要在OPNET代码中定义。
#ifdef OPD_DES
void
blocking_udp_client_main (blocking_udp_clientT_Svars *svars, const char *init_str);
#else
int main (int argc, char *argv [])
#endif
{
char *my_init;
#ifdef OPD_DES
my_init = init_str;
#else
my_init = argv [1];
#endif
……
}
2.3 创建共享代码进程模型
您可以在OPNET Modeler中使用进程编辑器开发共享代码。 新进程模型的启动向导为你的代码提供模板。
创建一个新的共享代码模型
1.在OPNET Modeler中,选择文件->新建…,从下拉菜单中选择进程模型,然后单击确定。
2.选择“共享代码”单选按钮,然后单击“下一步”。
3.指定共享代码详细信息:1)输入模型名称2)如果计划创建阻塞代码,请选中“创建阻止进程模型”复选框;取消选中非阻塞代码的复选框3)如果计划使用C ++,请选择“支持C ++代码”。
4.单击完成。
阻塞代码与非阻塞代码
开发阻塞或非阻塞代码取决于你的模型的需要(代码将要做什么)以及你是否从现有代码开始。一般来说,你应该使用你的实际代码将使用的模式。
非阻塞代码
非阻塞代码是OPNET仿真中的典型方法。它允许仿真内核具有事件调度的控制权和维护仿真时间。在这种方法中模型被分成小块,并且控制权在多个任务之间返回到仿真内核,即在非强制(红色)状态的输入执行之后。
图2-1显示了如何处理FTP会话。当前面的操作完成时仿真内核调用每个任务。因为每个任务是独立的,所以状态信息必须在多次调用之间的状态变量中保存。
非阻塞代码的启动向导模板定义了外部源文件中的几个函数。为您提供功能的每个函数是一个将被仿真内核在适当的时间调用的回调函数。例如,当分组到达时将调用分组到达函数。
不要在非阻塞代码中使用诸如op_sleep()或op_select()之类的阻塞函数。Socket函数将以非阻塞模式运行(有关详细信息,请参阅共享代码API)。
阻塞代码
阻塞代码在实际代码中是常见的(有一些例外,如GUI程序使用回调函数来响应用户事件)。当需要将已有的代码移植到共享代码模型上时,阻塞代码是一个很好的选择,因为它仅需少量的重分解,图2-2显示了在阻塞代码上如何处理FTP会话。
所有任务都放在单个函数中运行直到完成。op_connect()和op_select()的调用机制允许仿真时间提前,而不显式地将控制权返回到仿真内核。在op_connect()和op_select()调用期间,本地堆栈变量保持不变,因此不需要状态变量。
共享代码初始化属性
每个共享代码进程模型都有一个名为“Initialization”的字符串属性,可用于作为一组命令行参数或文件位置。 OPNET建议您将此属性用作文件位置,因为:
•更改文件的内容比更新项目中的属性更容易。
•这允许使用与实际代码相同的配置文件。
•您可以将一个文件用于多个进程模型,并保持同步。
将进程模型添加到节点时,应通过为其建立提升名和提升组来提升初始化属性。
2.4 将共享代码添加到节点
创建共享代码进程模型后,需要将其添加到节点模型中,以便可以在仿真中使用它。共享代码模型与传统进程模型的操作相同。
选择节点模型
如果具有正确数量和类型的接口的基本模型已存在,则可以使用它。例如,要向以太网工作站添加新应用,请编辑以太网工作站节点并添加使用共享代码的模块。
如果不存在合适的模型,请使用Device Creator创建与您想要的设备类似的节点。在大多数情况下,设备类型为路由器或Multihomed主机的将是使用共享代码的正确选择。如果您正在开发新的MAC协议,您可以在设备中使用以太网或无线LAN接口,并编辑它们以使用新协议,或配置Device Creator将新协议添加为可用接口。
有关使用Device Creator的帮助,请参阅创建自定义设备模型。
添加共享代码
您的共享代码进程模型可以作为新模块或作为现有模块的替代添加到节点模型。
路由和应用层是作为新模块添加的共享代码的常见示例。对于这些:
1)在节点编辑器中添加新模块。
2)将共享代码指定为模块的进程模型。
3)通过包流将模块连接到适当的位置(如对于应用的TCP / UDP、对于路由的IP)。
对于其他层(如M AC),通过替换现有模块来添加共享代码。
1)用共享代码模型替换相应模块的进程模型。
2)如果需要,替换发射机和接收机,同时设置管道阶段。
重命名初始化属性
我们建议您重命名共享代码模型的Initialization属性。这不是必需的,但这样做使事情变得更容易,当您有多个模块使用共享代码,并且您需要确定一个属性属于哪个模块。
要重命名Initialization属性,请在节点编辑器中选择Interfaces->Node Interfaces,然后单击Rename / Merge …按钮。将“Initialization”属性移动到对话框的右侧,并设置其“提升名”和“提升组”。
重命名将Initialization属性的状态更改为“Promoted”。如果在运行时不需要访问属性,可以将其更改为“Set”。
有关使用“Rename/Merge”属性对话框的详细信息,请参阅属性的结构化分组。
2.5 成功的建议
以下是一些改进您的共享代码开发过程的建议。
尽早开始
当你的代码库很小时开始共享代码开发,随着代码的增长你会做得更好。
•如果在流程的早期引入多平台编译和运行,则更有可能取得成功。
•特定的协议行为的初始设计可能不完整;早期测试将揭示缺陷。
使用版本控制
如果有多个用户正在使用共享代码,请使用版本控制。
•所有代码文件易于保存在版本控制中,更改也很容易合并。
•将节点模型存储为XML文件以便合并更容易。
自动化测试
自动测试可以使用OPNET Modeler和共享代码开发模块来完成。例如您可以执行以下操作:
1)从版本控制中获取最新代码。
2)从命令行编译和运行一组仿真。
3)使用op_cvov程序将.ov文件转换为CSV文件。
4)对统计信息和日志文件进行分析。
OPNET有一些附加模块使自动化测试更容易:
•自动化模块可以自动执行GUI任务。
•ODK模块允许更好地控制重写GUI和运行一组复杂的任务。
2.6 共享代码偏好设置
共享代码开发功能向OPNET Modeler添加以下偏好。
process_open_shared_code_directly
当为TRUE时,指定双击包含共享代码的模块将在指定的文本编辑器中打开共享代码。当为FALSE时,模型在进程编辑器中打开。 (通常,当有特殊需求时你才需要进程编辑器,例如注册统计信息。)
数据类型 boolean
默认值 TRUE
- 共享代码API
函数列表
共享代码API包含以下函数。
1)常规函数
op_get_packet_destination()
返回用于将数据包发送到给定目标协议或发送器的流。
op_schedule_timer()
调度一个自中断。
op_send_pkt()
将数据发送到另一个协议。
2)阻塞代码函数
op_sleep()
使进程模型在指定时间内休眠。
receive_packet()
获取接收的数据。
3)套接字函数
op_accept()
在服务器端建立客户端-服务器连接。
op_bind()
为套接字分配地址。
op_close()
关闭套接字。
op_connect()
将套接字连接到远程主机。
op_listen()
将套接字设置为仅侦听连接端点。
op_recv()
从连接的套接字接收消息。
op_recvfrom()
从指定的套接字接收消息。
op_select()
等待一个或多个套接字以便得到一个指定的条件。
op_send()
向已连接的套接字发送消息。
op_sendto()
向指定的套接字发送消息。
op_socket()
创建套接字。
opnet共享代码开发相关推荐
- android 共享代码,Android团队成员间的代码共享!(Git+Github版)
原创,转载请说明出处. 一. 这篇文章要解决什么问题,能学习到什么? 在android团队的开发中,少不了与队员之间的合作.为了避免我们傻瓜式地复制粘贴对方的负责的那部分功能代码,我们可以用svn或者 ...
- “低代码”开发管理应用,这家大型连锁企业也说好
简介:大型连锁企业的数字化升级,因为厂区门店分散.员工流动性高等因素,面临数据难以全面归集存储.流程不通畅.企业信息易泄露等一系列难题.现在,通过钉钉宜搭这一低代码应用构建平台,企业可以用更方便.快捷 ...
- 低代码开发平台_低代码开发平台测评——伙伴云
本次测评的产品严格来说不算低代码开发平台,它自己给自己的定位更多是全流程数据生产力平台.不过它依然具备应用搭建的关键要素,而且在数据管理方面还比较出彩,所以不能放过它--伙伴云,这款由Discuz! ...
- 一撕得:全员参与低代码开发,全面实现企业数字化管理
简介:借助钉钉宜搭,一撕得全面实现数字化管理,持续推动业务和企业进步. 北京一撕得物流技术有限公司 201-500人 / 互联网 / 中国-北京 / 数字化管理平台 "通过钉钉宜搭低代码技术 ...
- 低代码开发平台是什么
低代码开发平台(LCDP)是无需编码或通过少量代码就可以快速生成应用程序的开发平台.通过可视化进行应用程序开发的方法,使具有不同经验水平的开发人员可以通过图形化的用户界面,使用拖拽组件和模型驱动的逻辑 ...
- 共享代码库,为何总被程序员弃用?
我们鼓励可重用性,并不懈地为此努力,却从未实现过. 作者 | Jeremy Morgan 译者 | 弯月,责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 神秘的"可重用代码&q ...
- 基于BPM(业务流程管理)的低代码开发平台有哪些优势?
21世纪可以说是一个数字化的时代,这对于企业来说,无疑是一个极大的挑战.在数字化时代,企业对于风险管控.流程效率有了更高的要求.同时低代码的出现也让企业在软件开发上有了更高的效率.但随着业务的增长,管 ...
- 基于低代码开发平台实现政府督办管理系统
政务督查是贯彻上级精神,保证决策实施,狠抓工作落实的重要手段,是提供行政机关执行力的有效途径.而传统督办的形式比较单一,督办效果不佳导致工作效率低.如何采用信息技术进行规范.高效的事项督办是各级政府单 ...
- 无代码开发+MES管理系统双向奔赴,MES进化新方向
如今,我国的工业企业已经站在了全球最大规模的产业变革的前沿,而MES管理系统是构建智能和数字工厂的关键体系,其重要性是毋庸置疑的.但当前,企业的业务发展速度越来越快,新的.个性化的应用场 ...
- (六)python共享代码步骤
通过作为python模块共享代码,就可以向整个python社区开发你的代码.在这一章中将学习如何创建.安装和发布你自己的可共享模块,然后把模块加载到Web上的python软件共享网站. (一)函数转换 ...
最新文章
- 如何利用AI语义分析,做产品需求分析(1)
- android 评论输入框(PopupWindow)
- 2017.10.7 phi的反函数 失败总结
- 1.2、使用pip安装Python包
- hive不在同一台机 hue_【Impala篇】---Hue从初始到安装应用
- 餐饮点餐外卖小程序源码(外卖订餐系统源码)
- [生存志] 第22节 历代大事件概览 五代十国
- 做ppt课件直播(课堂直播)使用云课堂直播软件的教程
- 和云服务器同步文件,和云服务器同步文件
- 如何成为一名优秀的程序员(三)
- 北大青鸟 JQuery制作特效 第二章 (上机练习
- 图表制作中需要注意哪些问题:认识图表、选择图表
- 构建静态页面 之 [ 浮动 ]
- 雨林木风 GHOST_XP SP3 快速装机版YN12.08
- win10彻底关闭电脑的自动更新
- 河南省开封市谷歌高清卫星地图下载
- Do not use empty rulesetscss(emptyRules) html入门篇
- LTC4054/TP4054的高性价比替代,DP4054线性锂离子电池充电器
- keil怎样将c语言多个程序合并,keil多个子程序合并问题
- 阿里巴巴2017实习生笔试题+JAVA工程师能力评估部分题目