修改RTK发送部分,限制数据量和封包,通过常量支持以前方式发送,兼容没有修改的固件
This commit is contained in:
parent
aea10b8382
commit
c3a3877323
@ -25,7 +25,7 @@ namespace Plane.FormationCreator.Formation
|
||||
public class CopterCollection : ObservableCollection<ICopter>
|
||||
{
|
||||
//软件过期时间---过期将无法添加飞机,并自动退出
|
||||
public static DateTime Expire_App = DateTime.Parse("2022-12-31");
|
||||
public static DateTime Expire_App = DateTime.Parse("2023-12-31");
|
||||
//超级用户过期时间--过期将无法使用内置超级用户登录
|
||||
public static DateTime Expire_SuperUser = Expire_App;
|
||||
//允许飞行的飞机数量
|
||||
|
@ -30,6 +30,41 @@ namespace Plane.FormationCreator.Formation
|
||||
private ControlPanelViewModel ControlPanelVM = ServiceLocator.Current.GetInstance<ControlPanelViewModel>();
|
||||
private CopterManager _copterManager = ServiceLocator.Current.GetInstance<CopterManager>();
|
||||
private bool _rtcmthreadrun = false;
|
||||
// rtcm发送类型0:直接发送,
|
||||
// 1:1秒只发一种卫星,1秒发GPS,第2秒发北斗,第3秒发格洛纳斯,其他数据随来随发
|
||||
private int _rtcmsendtype = 1;
|
||||
|
||||
const int MSG_GPS = 1074;
|
||||
const int MSG_GLONASS = 1084;
|
||||
const int MSG_Beidou = 1124;
|
||||
const int MSG_BasePos = 1005;
|
||||
const int MSG_REV = 1033;
|
||||
|
||||
public string rtcm_typename(int msgtype)
|
||||
{
|
||||
string typename = "Rtcm" + msgtype;
|
||||
switch (msgtype)
|
||||
{
|
||||
case MSG_GPS:
|
||||
typename = "GPS";
|
||||
break;
|
||||
case MSG_GLONASS:
|
||||
typename = "GLONASS";
|
||||
break;
|
||||
case MSG_Beidou:
|
||||
typename = "北斗";
|
||||
break;
|
||||
//位置5秒发一次就可以了
|
||||
case MSG_BasePos:
|
||||
typename = "基站位置";
|
||||
break;
|
||||
case MSG_REV: //这个没必要发
|
||||
typename = "版本";
|
||||
break;
|
||||
}
|
||||
return typename;
|
||||
|
||||
}
|
||||
public bool Rtcmthreadrun
|
||||
{
|
||||
get { return _rtcmthreadrun; }
|
||||
@ -142,6 +177,7 @@ namespace Plane.FormationCreator.Formation
|
||||
dispatcherTimer.Start();
|
||||
}
|
||||
|
||||
//用于刷新界面,显示消息状态,基站和卫星是否有效等
|
||||
private void OnTimedEvent(object sender, EventArgs e)
|
||||
{
|
||||
BaseState = baseTime > DateTime.Now;
|
||||
@ -168,7 +204,7 @@ namespace Plane.FormationCreator.Formation
|
||||
}
|
||||
|
||||
|
||||
|
||||
//显示卫星信号强度条
|
||||
private void Rtcm_ObsMessage(object sender, EventArgs e)
|
||||
{
|
||||
List<rtcm3.ob> obs = sender as List<rtcm3.ob>;
|
||||
@ -331,28 +367,10 @@ namespace Plane.FormationCreator.Formation
|
||||
{
|
||||
int reconnecttimeout = 10;
|
||||
DateTime lastrecv = DateTime.MinValue;
|
||||
//系统毫秒数
|
||||
long ls_send_ms = CurrentTimeMillis();
|
||||
|
||||
long ls_send_gps = CurrentTimeMillis();
|
||||
long ls_send_glonass = CurrentTimeMillis();
|
||||
long ls_send_baidu = CurrentTimeMillis();
|
||||
|
||||
const int MSG_GPS = 1074;
|
||||
const int MSG_GLONASS = 1084;
|
||||
const int MSG_Beidou = 1124;
|
||||
|
||||
int MSG_BasePos = 1005;
|
||||
int MSG_REV = 1033;
|
||||
|
||||
int Send_type = 0;
|
||||
long last_send_pos = CurrentTimeMillis()- 5000;//5秒发一次就可以了
|
||||
bool Ensend = false;
|
||||
int last_mag = 0;
|
||||
|
||||
|
||||
//新版本打包发送模式
|
||||
//await _commModuleManager.StartRtcmLoop();
|
||||
|
||||
while (Rtcmthreadrun)
|
||||
{
|
||||
try
|
||||
@ -395,62 +413,70 @@ namespace Plane.FormationCreator.Formation
|
||||
if ((seenmsg = rtcm.Read(buffer[a])) > 0)
|
||||
{
|
||||
bpsusefull += rtcm.length;
|
||||
string msgshowname = rtcm_typename(seenmsg);
|
||||
_commModuleManager.SetAllCoptersForWifi(_copterManager.Copters);
|
||||
/* 在数据量大的时候这样可以减少数据量,但测试结果是老方法更可靠,固定更快,特别是使用物理基站时
|
||||
switch (seenmsg)
|
||||
if (_rtcmsendtype == 0)
|
||||
{
|
||||
case MSG_GPS:
|
||||
if ((CurrentTimeMillis() - ls_send_gps) > 1000)
|
||||
{
|
||||
ls_send_gps = CurrentTimeMillis();
|
||||
Ensend = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case MSG_GLONASS:
|
||||
if ((CurrentTimeMillis() - ls_send_glonass) > 1000)
|
||||
{
|
||||
ls_send_glonass = CurrentTimeMillis();
|
||||
Ensend = true;
|
||||
}
|
||||
break;
|
||||
case MSG_Beidou:
|
||||
if ((CurrentTimeMillis() - ls_send_baidu) > 1000)
|
||||
{
|
||||
ls_send_baidu = CurrentTimeMillis();
|
||||
Ensend = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if ((seenmsg == MSG_REV) || (seenmsg == MSG_BasePos)) Ensend = true;
|
||||
|
||||
//Plane.Windows.Messages.Message.Show("---["+ seenmsg + "]RTCM:" + rtcm.length);
|
||||
|
||||
// await _commModuleManager.InjectGpsRTCMDataAsync(rtcm.packet, rtcm.length);
|
||||
if (rtcm.length <= 180)
|
||||
Ensend = true;
|
||||
else Ensend = false;
|
||||
|
||||
if (Ensend)
|
||||
await _commModuleManager.InjectGpsDataAsync(rtcm.packet, (ushort)rtcm.length);
|
||||
}else
|
||||
if (_rtcmsendtype == 1)
|
||||
{
|
||||
// await _commModuleManager.InjectGpsRTCMDataAsync(rtcm.packet, rtcm.length);
|
||||
|
||||
Ensend = false;
|
||||
//第1秒是gps,第2秒是GLONASS,第3秒是 Beidou
|
||||
//1秒内可能发送多个同一种类型的数据,看数据大小和原始频率
|
||||
long curr_s = CurrentTimeMillis()/1000;
|
||||
int sendtype = (int) (curr_s % 3);
|
||||
switch (seenmsg)
|
||||
{
|
||||
case MSG_GPS:
|
||||
if (sendtype==0) //第1秒是gps,
|
||||
Ensend = true;
|
||||
break;
|
||||
|
||||
case MSG_GLONASS:
|
||||
if (sendtype == 1) //第2秒是GLONASS,
|
||||
Ensend = true;
|
||||
break;
|
||||
case MSG_Beidou:
|
||||
if (sendtype == 2) //第3秒是 Beidou
|
||||
Ensend = true;
|
||||
break;
|
||||
//位置4秒发一次就可以了
|
||||
case MSG_BasePos:
|
||||
{
|
||||
long curr_send_pos = CurrentTimeMillis();
|
||||
if ((curr_send_pos - last_send_pos) > 4000)
|
||||
{
|
||||
last_send_pos = curr_send_pos;
|
||||
Ensend = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MSG_REV: //这个没必要发
|
||||
Ensend = false;
|
||||
break;
|
||||
default: //其他类型数据随到随发
|
||||
Ensend = true;
|
||||
break;
|
||||
}
|
||||
if (Ensend)
|
||||
{
|
||||
// Plane.Windows.Messages.Message.Show(DateTime.Now.ToString("HH:mm:ss")+"--Rtcm长度: " + (ushort)rtcm.length+" , 类型: "+ seenmsg);
|
||||
Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + "--Rtcm长度: " + (ushort)rtcm.length + " 类型: " + msgshowname + " ("+ seenmsg+")");
|
||||
await _commModuleManager.InjectGpsDataAsync(rtcm.packet, (ushort)rtcm.length);
|
||||
}
|
||||
//else
|
||||
// Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + "--放弃发送-----Rtcm长度: " + (ushort)rtcm.length + " 类型: " + msgshowname + " (" + seenmsg + ")");
|
||||
|
||||
|
||||
}
|
||||
*/
|
||||
//老的单频rtk发送
|
||||
await _commModuleManager.InjectGpsDataAsync(rtcm.packet, (ushort)rtcm.length);
|
||||
|
||||
string msgname = "Rtcm" + seenmsg;
|
||||
|
||||
if (!msgseen.ContainsKey(msgname))
|
||||
msgseen[msgname] = 0;
|
||||
msgseen[msgname] = (int)msgseen[msgname] + 1;
|
||||
|
||||
await ExtractBasePos(seenmsg);
|
||||
//await seenRTCM(seenmsg);
|
||||
//累加消息数量,用于界面显示
|
||||
if (!msgseen.ContainsKey(msgshowname))
|
||||
msgseen[msgshowname] = 0;
|
||||
msgseen[msgshowname] = (int)msgseen[msgshowname] + 1;
|
||||
//检测基站定位状态和卫星定位状态,用于在界面上显示
|
||||
await ExtractBasePos(seenmsg);
|
||||
}
|
||||
}
|
||||
await Task.Delay(10);
|
||||
|
@ -106,7 +106,9 @@
|
||||
<HintPath>..\packages\MaterialDesignThemes.1.4.0.473\lib\net45\MaterialDesignThemes.Wpf.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Expression.Drawing, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
|
||||
<Reference Include="Microsoft.Expression.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Unnoficial.Microsoft.Expression.Drawing.1.0.0\lib\Microsoft.Expression.Drawing.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Maps.MapControl.WPF, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Maps.MapControl.WPF.1.0.0.3\lib\net40-Client\Microsoft.Maps.MapControl.WPF.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
|
@ -261,7 +261,7 @@ namespace Plane.Util
|
||||
retrys--;
|
||||
}
|
||||
|
||||
throw new Exception("The ntrip is closed");
|
||||
throw new Exception("网络RTK基站通讯已关闭!");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2278,6 +2278,7 @@ namespace Plane.Util
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -54,10 +54,10 @@
|
||||
Fill="{Binding RtcmManager.BaseState,Converter={StaticResource ColorConverter}}"/>
|
||||
<TextBlock Margin="5" Text="Gps"/>
|
||||
<Rectangle Margin="0,0,15,0" Width="20" Height="20"
|
||||
Fill="{Binding RtcmManager.GlonassState,Converter={StaticResource ColorConverter}}"/>
|
||||
Fill="{Binding RtcmManager.GpsState ,Converter={StaticResource ColorConverter}}"/>
|
||||
<TextBlock Margin="5" Text="Glonass"/>
|
||||
<Rectangle Margin="0,0,15,0" Width="20" Height="20"
|
||||
Fill="{Binding RtcmManager.GpsState,Converter={StaticResource ColorConverter}}"/>
|
||||
Fill="{Binding RtcmManager.GlonassState,Converter={StaticResource ColorConverter}}"/>
|
||||
<TextBlock Margin="5" Text="北斗"/>
|
||||
<Rectangle Margin="0,0,15,0" Width="20" Height="20"
|
||||
Fill="{Binding RtcmManager.BeidouState,Converter={StaticResource ColorConverter}}"/>
|
||||
|
@ -15,4 +15,5 @@
|
||||
<package id="System.Data.SQLite.Core" version="1.0.109.1" targetFramework="net46" />
|
||||
<package id="System.Data.SQLite.EF6" version="1.0.109.0" targetFramework="net46" />
|
||||
<package id="System.Data.SQLite.Linq" version="1.0.109.0" targetFramework="net46" />
|
||||
<package id="Unnoficial.Microsoft.Expression.Drawing" version="1.0.0" targetFramework="net46" />
|
||||
</packages>
|
Loading…
Reference in New Issue
Block a user