新的语法结构,采用了大括号
simple Mobility
{
parameters:
double MinSpeed;
double MaxSpeed;
@display( " i=block/broadcast " );
gates:
output out ;
}
simple BottomLayer
{
@display( " i=block/table " );
gates:
input fromMobility;
input fromPosition;
output toPosition;
}
simple Position
{
@display( " i=block/cogwheel " );
gates:
input fromBottom;
output toBottom;
}
module MobileHost
{
@display( " i=device/laptop " );
submodules:
bottomLayer: BottomLayer {
@display( " p=133,43 " );
}
mobility: Mobility {
@display( " p=236,43 " );
}
position: Position {
@display( " p=133,126 " );
}
connections:
mobility. out --> bottomLayer.fromMobility;
position.toBottom --> bottomLayer.fromPosition;
bottomLayer.toPosition --> position.fromBottom;
}
{
parameters:
double MinSpeed;
double MaxSpeed;
@display( " i=block/broadcast " );
gates:
output out ;
}
simple BottomLayer
{
@display( " i=block/table " );
gates:
input fromMobility;
input fromPosition;
output toPosition;
}
simple Position
{
@display( " i=block/cogwheel " );
gates:
input fromBottom;
output toBottom;
}
module MobileHost
{
@display( " i=device/laptop " );
submodules:
bottomLayer: BottomLayer {
@display( " p=133,43 " );
}
mobility: Mobility {
@display( " p=236,43 " );
}
position: Position {
@display( " p=133,126 " );
}
connections:
mobility. out --> bottomLayer.fromMobility;
position.toBottom --> bottomLayer.fromPosition;
bottomLayer.toPosition --> position.fromBottom;
}
新的like语法
moduleinterface Mobility // 被like的模块不再是simple,变为moduleinterface
{
parameters:
double minSpeed; // 最小速度
double maxSpeed; // 最大速度
double movKind; // 节点运动到边界时的处理方式
double XRange; // 节点布置区域的宽度
double YRange; // 节点布置区域的长度
double pauseTime; // 到达一个目标后的等待时间
double moveInterval; // 两步之间的时间
@display( " i=block/cogwheel,blue " );
gates:
output out ;
}
simple bottomLayer
{
parameters:
double seed_r; // 锚节点的通信半径
double node_r; // 待定位节点的通信半径
double isSeed; // 是否是锚节点
@display( " i=block/table,blue " );
gates:
input fromMobility;
input fromPosition;
output toPosition;
}
moduleinterface Positioning
{
parameters:
double isSeed; // 是否是锚节点
double announceInterval; // 锚节点广播自身位置的时间间隔
double updateInterval; // 待定位节点两次定位间的时间间隔
double seed_r; // 锚节点的通信半径
double node_r; // 待定位节点的通信半径
double max_v; // 最大速度
double delta; // 抽样点可能的误差
@display( " i=block/circle,blue " );
gates:
input fromBottom;
output toBottom;
}
module MobileHost
{
parameters:
int isSeed; // 是否是锚节点
int numHost; // 总的结点数
double x; // 真实位置的x坐标
double y; // 真实位置的y坐标
double Xbound; // 布置区域的宽度
double Ybound; // 布置区域的长度
double seed_r; // 锚节点的通信半径
double node_r; // 待定位节点的通信半径
string mobilityModel; // 移动模型
string posAlgorithm; // 定位算法
submodules:
mobility: < mobilityModel > like Mobility { // 新的like语法,增加尖括号
XRange = Xbound; // 增加大括号,parameters变为可选
YRange = Ybound;
@display( " p=96,77 " );
}
bottomlayer: bottomLayer {
isSeed = isSeed;
seed_r = seed_r;
node_r = node_r;
@display( " p=279,77 " );
}
position: < posAlgorithm > like Positioning {
isSeed = isSeed;
seed_r = seed_r;
node_r = node_r;
max_v = INPUT;
delta = INPUT;
announceInterval = INPUT;
updateInterval = INPUT;
@display( " p=279,170 " );
}
connections:
mobility. out --> bottomlayer.fromMobility;
position.toBottom --> bottomlayer.fromPosition;
bottomlayer.toPosition --> position.fromBottom;
}
{
parameters:
double minSpeed; // 最小速度
double maxSpeed; // 最大速度
double movKind; // 节点运动到边界时的处理方式
double XRange; // 节点布置区域的宽度
double YRange; // 节点布置区域的长度
double pauseTime; // 到达一个目标后的等待时间
double moveInterval; // 两步之间的时间
@display( " i=block/cogwheel,blue " );
gates:
output out ;
}
simple bottomLayer
{
parameters:
double seed_r; // 锚节点的通信半径
double node_r; // 待定位节点的通信半径
double isSeed; // 是否是锚节点
@display( " i=block/table,blue " );
gates:
input fromMobility;
input fromPosition;
output toPosition;
}
moduleinterface Positioning
{
parameters:
double isSeed; // 是否是锚节点
double announceInterval; // 锚节点广播自身位置的时间间隔
double updateInterval; // 待定位节点两次定位间的时间间隔
double seed_r; // 锚节点的通信半径
double node_r; // 待定位节点的通信半径
double max_v; // 最大速度
double delta; // 抽样点可能的误差
@display( " i=block/circle,blue " );
gates:
input fromBottom;
output toBottom;
}
module MobileHost
{
parameters:
int isSeed; // 是否是锚节点
int numHost; // 总的结点数
double x; // 真实位置的x坐标
double y; // 真实位置的y坐标
double Xbound; // 布置区域的宽度
double Ybound; // 布置区域的长度
double seed_r; // 锚节点的通信半径
double node_r; // 待定位节点的通信半径
string mobilityModel; // 移动模型
string posAlgorithm; // 定位算法
submodules:
mobility: < mobilityModel > like Mobility { // 新的like语法,增加尖括号
XRange = Xbound; // 增加大括号,parameters变为可选
YRange = Ybound;
@display( " p=96,77 " );
}
bottomlayer: bottomLayer {
isSeed = isSeed;
seed_r = seed_r;
node_r = node_r;
@display( " p=279,77 " );
}
position: < posAlgorithm > like Positioning {
isSeed = isSeed;
seed_r = seed_r;
node_r = node_r;
max_v = INPUT;
delta = INPUT;
announceInterval = INPUT;
updateInterval = INPUT;
@display( " p=279,170 " );
}
connections:
mobility. out --> bottomlayer.fromMobility;
position.toBottom --> bottomlayer.fromPosition;
bottomlayer.toPosition --> position.fromBottom;
}
新的子模块数组定义方式
module MobileSensorNet
{
parameters:
int numHost;
double anchorFraction;
double playgroundSizeX;
double playgroundSizeY;
@display("i=block/network2");
submodules:
seed[numHost * anchorFraction]: MobileHost { //新的子模块数组定义方式
isSeed = 1;
numHost = numHost;
Xbound = playgroundSizeX;
Ybound = playgroundSizeY;
x = intuniform(0,playgroundSizeX);
y = intuniform(0,playgroundSizeY);
}
node[numHost - numHost * anchorFraction]: MobileHost {
isSeed = 0;
numHost = numHost;
Xbound = playgroundSizeX;
Ybound = playgroundSizeY;
x = intuniform(0,playgroundSizeX);
y = intuniform(0,playgroundSizeY);
}
}
{
parameters:
int numHost;
double anchorFraction;
double playgroundSizeX;
double playgroundSizeY;
@display("i=block/network2");
submodules:
seed[numHost * anchorFraction]: MobileHost { //新的子模块数组定义方式
isSeed = 1;
numHost = numHost;
Xbound = playgroundSizeX;
Ybound = playgroundSizeY;
x = intuniform(0,playgroundSizeX);
y = intuniform(0,playgroundSizeY);
}
node[numHost - numHost * anchorFraction]: MobileHost {
isSeed = 0;
numHost = numHost;
Xbound = playgroundSizeX;
Ybound = playgroundSizeY;
x = intuniform(0,playgroundSizeX);
y = intuniform(0,playgroundSizeY);
}
}
总之,越来越像C++了