omnet++ - 如何在 INET 中管理状态转换
问题描述
我正在尝试在 x-mac 协议中实现数据确认。算法是,数据包传输结束后,发送节点将等待接收方的确认。为此,我添加了一个新状态 WAIT_ACK。但是在运行时,我可以看到节点无法从WAIT_TX_DATA_OVER
to进行状态转换WAIT_ACK
。我收到以下错误。
<!> 状态 7(无线电状态 2)中类型 204 的未定义事件!-- 在模块 (inet::XMac1) SensorNetworkShowcaseA.sensor3.wlan[0].mac (id=181) 中,在 t=0.10677288732s,事件 #62
注意:XMAC1_DATA_TX_OVER
= 204 和状态 7 是WAIT_ACK
case SEND_DATA:
if (msg->getKind() == XMAC1_STOP_PREAMBLES) {
sendDataPacket();
macState = WAIT_TX_DATA_OVER;
return;
}
else if (msg->getKind() == XMAC1_SWITCHING_FINISHED) {
sendDataPacket();
macState = WAIT_TX_DATA_OVER;
return;
}
else {
return;
}
break;
case WAIT_TX_DATA_OVER:
if (msg->getKind() == XMAC1_DATA_TX_OVER) {
scheduleAt(simTime() + (slotDuration / 2), data_ack_timeout);
macState = WAIT_ACK;
radio->setRadioMode(IRadio::RADIO_MODE_RECEIVER);
changeDisplayColor(GREEN);
}
break;
case WAIT_ACK:
if (msg->getKind() == XMAC1_DATA_TX_OVER) {
delete msg;
return;
}
...
}
break;
更新
在运行时,以下是执行停止后我可以看到的
INFO (XMac1)SensorNetworkShowcaseA.sensor3.wlan[0].mac:节点 0A-AA-00-00-00-04:状态 WAIT_TX_DATA_OVER,消息 XMAC_DATA_TX_OVER,新状态 WAIT_ACK INFO (ApskScalarRadio)SensorNetworkShowcaseA.sensor3.wlan[0]。无线电:SensorNetworkShowcaseA.sensor3.wlan[0].radio:无线电模式从 TRANSMITTER 更改为 RECEIVER。INFO (ApskScalarRadio)SensorNetworkShowcaseA.sensor3.wlan[0].radio:SensorNetworkShowcaseA.sensor3.wlan[0].radio:将无线电接收状态从 UNDEFINED 更改为 IDLE。INFO (ApskScalarRadio)SensorNetworkShowcaseA.sensor3.wlan[0].radio:SensorNetworkShowcaseA.sensor3.wlan[0].radio:将无线电传输状态从 IDLE 更改为 UNDEFINED。<!> 状态 7(无线电状态 2)中类型 204 的未定义事件!-- 在模块 (inet::XMac1) SensorNetworkShowcaseA.sensor3.wlan[0].mac (id=181) 中,在 t=0.10677288732s,事件 #62
解决方案
根据您提供的信息,这不应该发生,因此您的假设中的某些内容是错误的。很可能,您没有运行此代码。确保确实执行了此代码(您可以构建发布版本并运行调试版本或其他内容)。在这些情况下,我经常临时修改代码中的错误消息,以查看代码更改是否真的编译到可执行文件中,以确保我运行的确实是我假设运行的代码。
推荐阅读
- django - Django cache.clear() 不工作(LocMemCache,AWS)
- python - 如何在 npm python-shell 中提供脚本特定选项?
- r - 如何在几对列之间创建差异?
- node.js - Electron 或 Node.js 应用程序是否有访问系统级图标的标准方法?
- gradle - 用 gradle 替换文件中的占位符
- sql - 如何修复 plpgsql LIKE 条件非整数类型未找到?
- twig - 如何用树枝中的另一个变量替换变量的值?
- javascript - 将 Azure 存储连接字符串放在使用配置文件而不是环境变量的 Node 应用程序中的什么位置?
- ruby-on-rails - Ruby on Rails 5.2 - Activestorage 可以将 Oracle 数据库视为服务吗?
- list - 如何计算列表中项目的出现次数