Всем привет. Мы разрабатываем систему связи для беспилотного вертолета с использованием плат mikrotik. На вертолете установлен SR2 с двумя антеннами, одна находится слева от БПЛА, а другая справа, поэтому, независимо от ориентации вертолета, у нас есть хотя бы одна антенна с прямой видимостью. Мы используем простой скрипт, который отслеживает уровень сигнала, и когда он опускается ниже нуля, мы переключаем антенны. Вот код скрипта, который выполняет переключение… :global radio "wlanSR2";
:global countdown 0;
:global signal;
:global ant;
:log warning "Соединение потеряно на $radio";
:set ant [/interface wireless get $radio antenna-mode];
:if (ant = "ant-a") do={
/interface wireless set $radio antenna-mode=ant-b;
}
:if (ant = "ant-b") do={
/interface wireless set $radio antenna-mode=ant-a;
}
:set countdown 10;
:set signal 0;
:while ((countdown != 0) && (! (signal<0))) do={
:delay 500ms;
/interface wireless monitor $radio once do={:set signal $"signal-strength";}
:set countdown ($countdown-1);
:log warning "Ожидание соединения на $radio. Обратный отсчет # $countdown . Сигнал:$signal";
}
} Он просто меняет значение antenna-mode, и если я запускаю этот скрипт вручную, переключение антенн и переподключение происходят менее чем за секунду. Проблема возникает, когда я пытаюсь запустить этот скрипт из скрипта Monitor… вот код скрипта Monitor. :global radio "wlanSR2";
:global signal;
:global snr;
:global noise;
:global thruput;
:global freq;
:global ccq;
:global voltage;
:global rxvar;
:global txvar;
:global txpower;
:global countdown;
:global ant;
:global divisor 0;
:while (1=1) do={
/interface wireless monitor $radio once do={:set signal $"signal-strength";}
:if (! (signal<0)) do={/system script run cambia}
:led user-led=yes;
:set divisor ($divisor+1);
:if (divisor = 5) do={
/interface wireless monitor $radio once do={
:set signal $"signal-strength";
:set snr $"signal-to-noise";
:set noise $"noise-floor";
:set thruput $"p-throughput";
:set freq $"frequency";
:set ccq $"overall-tx-ccq";
:set txpower [/interface wireless get $radio tx-power];
:set voltage [/system health get voltage];
/interface monitor-traffic $radio once do={
:set rxvar $"rx-bits-per-second";
:set txvar $"tx-bits-per-second";
}
}
:set divisor 0;
:log info "RadioName:$radio-$ant_SNR:$snr_Signal:$signal_Noise:$noise_Thruput:$thruput_Freq:$freq_CCQ:$ccq_Volt:$voltage_RX:$rxvar_TX:$txvar_TxPower:$txpower";
}
:delay 45ms;
:led user-led=no;
:delay 45ms;
} Когда скрипт переключения антенн запускается из скрипта Monitor, переключение антенн и переподключение занимают около 5 секунд! Кто-нибудь знает, почему? Заранее спасибо.
:global countdown 0;
:global signal;
:global ant;
:log warning "Соединение потеряно на $radio";
:set ant [/interface wireless get $radio antenna-mode];
:if (ant = "ant-a") do={
/interface wireless set $radio antenna-mode=ant-b;
}
:if (ant = "ant-b") do={
/interface wireless set $radio antenna-mode=ant-a;
}
:set countdown 10;
:set signal 0;
:while ((countdown != 0) && (! (signal<0))) do={
:delay 500ms;
/interface wireless monitor $radio once do={:set signal $"signal-strength";}
:set countdown ($countdown-1);
:log warning "Ожидание соединения на $radio. Обратный отсчет # $countdown . Сигнал:$signal";
}
} Он просто меняет значение antenna-mode, и если я запускаю этот скрипт вручную, переключение антенн и переподключение происходят менее чем за секунду. Проблема возникает, когда я пытаюсь запустить этот скрипт из скрипта Monitor… вот код скрипта Monitor. :global radio "wlanSR2";
:global signal;
:global snr;
:global noise;
:global thruput;
:global freq;
:global ccq;
:global voltage;
:global rxvar;
:global txvar;
:global txpower;
:global countdown;
:global ant;
:global divisor 0;
:while (1=1) do={
/interface wireless monitor $radio once do={:set signal $"signal-strength";}
:if (! (signal<0)) do={/system script run cambia}
:led user-led=yes;
:set divisor ($divisor+1);
:if (divisor = 5) do={
/interface wireless monitor $radio once do={
:set signal $"signal-strength";
:set snr $"signal-to-noise";
:set noise $"noise-floor";
:set thruput $"p-throughput";
:set freq $"frequency";
:set ccq $"overall-tx-ccq";
:set txpower [/interface wireless get $radio tx-power];
:set voltage [/system health get voltage];
/interface monitor-traffic $radio once do={
:set rxvar $"rx-bits-per-second";
:set txvar $"tx-bits-per-second";
}
}
:set divisor 0;
:log info "RadioName:$radio-$ant_SNR:$snr_Signal:$signal_Noise:$noise_Thruput:$thruput_Freq:$freq_CCQ:$ccq_Volt:$voltage_RX:$rxvar_TX:$txvar_TxPower:$txpower";
}
:delay 45ms;
:led user-led=no;
:delay 45ms;
} Когда скрипт переключения антенн запускается из скрипта Monitor, переключение антенн и переподключение занимают около 5 секунд! Кто-нибудь знает, почему? Заранее спасибо.
