我正在执行Castalia 3.3模拟器的模拟示例中提供的BANtest实验。我正在IEEE 802.15.4 MAC的信标启用模式下的无竞争时段(CFP)中探索GTS。我想更改配置,即GTSon,以便每个单独的节点在命令行中请求不同的GTS插槽。我需要更改配置文件吗?
我已阅读并理解了Castalia用户手册“ 3.5.3节”中在命令行上更改配置的过程。目前,我能够在命令行中更改由GTSon配置中的节点发出的“相等” GTS请求,但我有兴趣从单个节点获取不同的GTS插槽请求。
情况1:所有节点均等量GTS请求的代码
# Define as set of equal GTS request for all nodes in omnetpp.ini
[Config GTSon]
SN.node[*].Communication.MAC.requestGTS = ${GTS=1,2}
# Execute BANtest example- take request GTS from config file
$ Castalia -c ZigBeeMAC,[GTSon]
# Changing configuration (i.e. GTSon) form command line-run successfully
$ Castalia -c GTSon=\$\{GTS=0,3\}
情况2:不同GTS请求表单节点的代码
# Define differnt GTS requests for nodes in omnetpp.ini
[Config GTSon]
SN.node[1].Communication.MAC.requestGTS = ${GTS1=0}
SN.node[2].Communication.MAC.requestGTS = ${GTS2=4}
SN.node[3].Communication.MAC.requestGTS = ${GTS3=3}
SN.node[4].Communication.MAC.requestGTS = ${GTS4=0}
SN.node[5].Communication.MAC.requestGTS = ${GTS5=0}
# Execute BANtest example- run successfully
$ Castalia -c ZigBeeMAC,[GTSon]
# Changing configuration (i.e.GTSon) form command line- showing error
$ Castalia -c GTSon=\$\{GTS1=0,GTS2=1,GTS3=5,GTS4=0,GTS5=0\}
case-1成功运行,但是case-2有错误,如下所示:
“错误:配置'GTSon'具有多个参数,不能与'='语法一起使用”
最佳答案
您得到的错误只是Castalia脚本的限制。 Castalia的用户手册在3.5.3节中明确说明了此限制。您还可以在Castalia脚本中搜索以下字符串:has more than one parameter and cannot be used with '=' syntax"
以了解更多详细信息,或考虑如何扩展该字符串以支持每个配置多个cmdline参数。
但是实际上并不需要扩展功能。一种简单的解决方法是为每个节点定义单独的配置。例如
[Config GTSon-n1]
SN.node[1].Communication.MAC.requestGTS = ${GTS1=0}
[Config GTSon-n2]
SN.node[2].Communication.MAC.requestGTS = ${GTS2=4}
...
然后,您可以使用Castalia运行
$ Castalia -c ZigBeeMAC,GTSon-n1,GTSon-n2
或在cmdline中更改参数
$ Castalia -c ZigBeeMAC,GTSon-n1=3,GTSon-n2=5
通常,我想建议在命令行更改仿真参数不是一个好主意(至少对于常规仿真而言)。您仅应使用此功能运行一次性探索性仿真,在此您可以快速地测试更改的效果,而无需编辑ini文件。此处的额外好处是,命令行与输出文件一起保存,因此您可以了解如何生成此输出文件。这就是为什么在Castalia中添加了此功能。但是,对于常规的模拟研究,您应该在ini文件本身中包含参数值(或值的范围)。这样,就可以正确记录模拟研究的假设。 OMNeT ++ ini文件非常通用,您可以通过它们的语法实现很多功能。阅读chapter 9 of the OMNeT++ 4.x manual,确保您了解OMNeT必须提供的所有内容。