Error in module (Mac1609_4) Model error: ASSERT: condition useSCH false in function handleUpperMsg

Error in module (Mac1609_4) Model error: ASSERT: condition useSCH false in function handleUpperMsg

我用的是Veins-4a2,修改了demo例子的场景。我添加了一个新的 wsm,当节点收到消息时它是 ACK,它向源节点发送 ACK 消息。 我在 onData() 函数中添加了这一行:

sendWSM(prepareWSM("ack", ackLengthBits, type_SCH, ackPriority, sourcenode.idNode, 2));

我确实更改了 BaseWaveApplLayer.cc 中的 prepareWSM 和 handleLowerMsg() 函数,但是当我执行模拟时,它会在 10 秒后崩溃。这是错误消息:

模块错误 (Mac1609_4) RSUExampleScenario.node[2].nic.mac1609_4 (id=240) 在事件 #1196,t=9.210177776741:模型错误:断言:函数 handleUpperMsg 中的条件 useSCH 为假,veins/modules/mac/ieee80211p/Mac1609_4.cc 第 259 行。

难道我没有权利为ACK报文重用SCH信道? 请问我该如何解决这个问题?

Veins 4a2 的 1609.4 MAC 层可用于两种操作模式之一:单通道和多通道。可以通过设置 .ned 文件的此参数来配置行为:

// cycle between an SCH and the CCH (or stay on CCH all the time)
bool useServiceChannel = default(true);

从您发布的错误消息来看,您似乎已将此参数设置为 false,这意味着您希望无线电始终保持在控制信道 (CCH) 上。同时,您发布的代码请求通过服务频道 (SCH) 传输消息。

您因此要求互斥行为。

Veins 正确识别了这一点并中止了您的模拟。