记一次深度的踩坑,在这个坑中摸爬滚打了几天之后,发现进错坑了。留给后续使用veins做车联网仿真的入坑者,一点启示。
原来的目的:
我本来是打算实现RSU和Car有不同的通信距离。在修改了ini文件中的maxInterfDistdrawMaxIntfDist之后通过仿真页面观察到,车辆和RSU的覆盖范围发生了变化,而且在通信过程中数据包传输的距离也正好是maxInterfDist 的范围。我们就错误的认为,这里就是实现RSU和Car不同通信范围的地方。然后就开始了深度踩坑之旅。
结论:
如果你要实现RSU和Car不同的通信范围,只需要修改他们mac层的发送功率即可。connectionManager模块仅仅是对他们直接的连接进行管理,即对哪些模块进行连接(网卡端口之间),哪些结点去掉连接。但是具体的数据包能不能收到,则是根据发送功率,接收功率进行确定的。仿真页面太迷惑人了,即使仿真过程中有数据包过去,也不一定真的接收到(因为功率问题)。具体的可以在仿真的过程中看具体的输出,在连接范围内只能收到AirFrame,但是在处理的过程中会发现并没有收到数据包。
然后我们就来看看connectionManager模块具体是做什么的?
connectionManager模块

  • ConnectionManager.ned


从上面的注释我们可以看出,管理协调所有节点之间的连接,并且动态的处理门的创建。因此它周期性的和移动模块和信道接入模块进行通信。
maxInterfDist 是任何传输的最大上界。

  • ConnectionManager.h&ConnectionManager.cc

    头文件就定义了一个虚函数,计算最大的通信范围。

    这里仅仅是读取ini文件中定义的最大通信范围,然后返回。
    这里介绍另一种写法,更具功率、频率等,使用自由空间衰落模型进行计算。不过这里的需要ned文件和头文件都需要做出相应的改动。
   double interfDistance;//the minimum carrier frequency for this celldouble carrierFrequency = par("carrierFrequency").doubleValue();//maximum transmission power possibledouble pMax             = par("pMax").doubleValue();if (pMax <=0) {error("Max transmission power is <=0!");}//minimum signal attenuation thresholddouble sat              = par("sat").doubleValue();//minimum path loss coefficientdouble alpha            = par("alpha").doubleValue();//constdouble waveLength     = (BaseWorldUtility::speedOfLight()/carrierFrequency);//minimum power level to be able to physically receive a signaldouble minReceivePower = pow(10.0, sat/10.0);ccEV << "max interference distance:" << interfDistance << endl;return interfDistance;
  • BaseConnectionManager.h
    这个函数就是最重要的函数,这里仅介绍每个函数是干什么的。

    首先在头文件中声明了一个网格坐标类,大概意思就是,将整个仿真背景根据最大传输距离划分为若干个网格,然后用有一个坐标来表示每一个网格。

    这里是因为C++中没有hash set,新建了一个类来模拟hash set.


这里是主要的函数,很多函数之间是相互调用的关系。首先是initialize初始化的函数。然后就是从

ChannelAccess::receiveSignal函数开始,逐步进行调用,根据这个顺序,依次阅读源码的注释即可。
注:
在车联网的仿真中,这一块并不需要做出修改。只是能够帮助你理解Veins是如果如何工作起来的。

Veins源码阅读—connectionManager模块相关推荐

  1. openedge-hub模块请求处理源码浅析——百度BIE边缘侧openedge项目源码阅读(2)

    前言 在openedge-hub模块启动源码浅析--百度BIE边缘侧openedge项目源码阅读(1)一文中浅析了openedge-hub模块的启动过程,openedge-hub为每一个连接的请求创建 ...

  2. Python: matplotlib模块 源码阅读理解

      在写如下代码的时候,matplotlib模块引起了我的兴趣. #!/usr/bin/env python # -*- coding: utf-8 -*-import matplotlib as m ...

  3. Nginx模块开发:模块结构的源码阅读以及过滤器(Filter)模块的实现

    Nginx模块开发:模块结构的源码阅读以及过滤器(Filter)模块的实现 一.Nignx中的模块是什么? 二.模块的基本结构 `ngx_module_s` `ngx_command_s` `ngx_ ...

  4. FreeSWITCH 1.10 源码阅读(3)-sofia 模块原理及其呼入处理流程

    文章目录 1. 前言 2. 源码分析 2.1 sofia 模块的加载 2.2 呼入的处理流程 1. 前言 SIP(Session Initiation Protocol) 是应用层的信令控制协议,有许 ...

  5. 应用监控CAT之cat-client源码阅读(一)

    CAT 由大众点评开发的,基于 Java 的实时应用监控平台,包括实时应用监控,业务监控.对于及时发现线上问题非常有用.(不知道大家有没有在用) 应用自然是最初级的,用完之后,还想了解下其背后的原理, ...

  6. 24 UsageEnvironment使用环境抽象基类——Live555源码阅读(三)UsageEnvironment

    24 UsageEnvironment使用环境抽象基类--Live555源码阅读(三)UsageEnvironment 24 UsageEnvironment使用环境抽象基类--Live555源码阅读 ...

  7. webpack源码阅读——npm脚本运行webpack与命令行输入webpack的区别

    原文地址:webpack源码阅读--npm脚本执行webpack与命令行输入webpack执行的区别 如有错误,欢迎指正! webpack是目前被大家广为使用的模块打包器.从命令行输入webpack或 ...

  8. 【SeaJS】【3】seajs.data相关的源码阅读

    在SeaJS官网上推荐了源码阅读顺序,本文并没有采用这个顺序,而是按个人习惯以调试官方示例的方式进行源码阅读.早期版本作者玉伯使用了几个闭包形式,本文源码版本为2.1.1,它的编码方式个人认为更加脚本 ...

  9. koa源码阅读之koa-compose/application.js

    koa源码阅读之koa-compose/application.js koa-Compose 为了理解方便特地把注释也粘进来 //这英语.我也来翻译一波 //大概就是把所有的中间件组合返回一个完整大块 ...

最新文章

  1. EonerCMS——做一个仿桌面系统的CMS(十一)
  2. qq android2.0,取代QQ?腾讯TIM安卓2.0发布:10GB云盘免费用
  3. java基础之构造方法
  4. javaweb学习总结(三十八)——事务
  5. HBase - Filter - 过滤器的介绍以及使用
  6. 后端JAVA:说说你对【注解】的理解
  7. 面向对象 —— 对类(class)的理解
  8. C++常见谬误总结(1)
  9. 作团队感悟(4)----分享的心态
  10. 计算机基础硬件知识试题及答案,计算机基础知识试题及答案大全(总结一)
  11. 凯利公式计算器安卓_华为MatePad Pro 5G评测:一屏双任务,打破安卓平板生态限制...
  12. ONOS 南向抽象层分析
  13. response.getWriter().write()和 response.getWriter().print()的区别 以及 PrintWriter对象 和 out对象 的区别
  14. 给刚入市朋友的几点建议
  15. Linux中如何让命令在后台运行
  16. 看我如何偷取别人的云储币(Siacoin)
  17. 前台访问后台路径错误的解决
  18. 短视频seo获客系统,短视频SEO,短视频seo推广
  19. 汽车CAN总线分析仪
  20. linux 卸载nexus,CentOS7安装Nexus

热门文章

  1. Extjs新手教程代码
  2. Linux中延时/暂停函数(sleep/usleep/nanosleep/select)的比较、底层实现说明
  3. 完美实现跨域Iframe高度自适应【Iframe跨域高度自适应解决方案】
  4. 深入理解Android相机体系结构之九
  5. 【总结】利用AWS实现高可用性和云灾备
  6. lingo子模型——数学模型4.7 例1 广告投入
  7. 275. H 指数 II
  8. 二维码原理与编码介绍
  9. 网页制作:一个简易美观的登录界面
  10. 栈溢出之ret2dlresolve