如何实现基于调度发送任意信号

How to achieve transmitting arbitrary signal based on a schedule

在我的例子中,我想在特定的时间唤醒subnero调制解调器并传输我自己产生的信号。根据 unetStack 手册第 25 章,scheduler 模块具有在特定时间组织调制解调器唤醒的能力。所以我尝试使用 follow groovy 脚本来测试调制解调器。毫无疑问,它不起作用。

addsleep 1.minutes.later 5.minutes.later;
phy << new GetSleepScheduleReq();
plvl = -30;
signal = load('sig.txt');
5.times {
    phy << new TxBasebandSignalReq(signal:signal, fc:0);
    delay(5000);
}

我发现有一个名为“WakeFromSleepNtf”的函数,可以帮助控制调制解调器,但是没有详细说明这个函数。

虽然 delay 函数或 TxTimeTxBasebandSignalReq 函数或参数可以是用于制定一个时间表来控制调制解调器在特定的时间线内工作,它要求调制解调器一直工作。这样,调制解调器的电池就成了一个问题,尤其是当调制解调器与车辆集成在一起时。

我相信如果有通知功能或者其他方法实现运行我的脚本在subnero唤醒时自动实现,那么问题就可以解决了。

你的方向是正确的,但有一些细节不正确。如果我没理解错的话,你想睡5分钟,然后发射一个信号5次,发射之间有5秒的延迟。

如果是这样,我会在 shell:

上做这样的事情
// part 1: wait until its time to transmit
t = 5.minutes.later                  // calculate time of transmission
addsleep t                           // schedule sleep from now until time t
while (t-time/1000 > 1) delay(1000)  // wait until its time to transmit

// part 2: make your transmissions
plvl -30                             // set power level
signal = load('sig.txt')             // load your signal
5.times {                            // transmit it 5 times with 5 second delay
    phy << new TxBasebandSignalReq(signal:signal, fc:0)
    delay(5000)
}

代码的第一部分计算应该进行传输的时间t(以纪元秒为单位),并要求调制解调器安排在此之前休眠。让调制解调器进入睡眠状态需要几秒钟,因此脚本将在这段时间内继续 运行。因此,我们需要下一条语句等待传输时间,通过检查当前时间(time 以纪元毫秒为单位给出当前时间)与每秒的传输时间。

代码的第二部分与您的相同,但请注意 plvl 之后不应有 =

P.S。某些调制解调器(例如笔记本电脑上的 unet audio)可能没有低功耗睡眠模式,因此可能不会真正进入睡眠状态。第 1 部分中的等待循环还确保此代码在此类调制解调器上正常工作。