parametrizacao um982 com correcao rtk lora

This commit is contained in:
Diego Freitas 2025-08-18 15:16:09 -03:00
parent ebcabdd7e3
commit d56695adfc
229 changed files with 437497 additions and 426 deletions

Binary file not shown.

View File

@ -597,6 +597,7 @@
<Compile Include="Services\PythonService.cs" />
<Compile Include="Services\PZEMService.cs" />
<Compile Include="Services\RedisService.cs" />
<Compile Include="Services\RTCMSniffer.cs" />
<Compile Include="Services\SerialCanService.cs" />
<Compile Include="Services\SerialService.cs" />
<Compile Include="Services\SonarService.cs" />

View File

@ -293,8 +293,17 @@
Autonomo = 1,
DGPS = 2,
PPS = 3,
RTKFlutuante = 4,
RTKFixo = 5
RTKFixo = 4,
RTKFlutuante = 5,
DeadReckoing = 6,
BaseFix = 7,
}
public enum TiposDimensaoCorrecaoGPS
{
SemCorrecao = 0,
Correcao2D = 1,
Correcao3D = 2,
}
public enum TiposControladorDirecional

View File

@ -25,6 +25,10 @@ namespace AgroBase.Models
public string TipoOrientacao { get; set; }
public double VariacaoMagnetica { get; set; }
public TiposCorrecaoGPS QualidadeFix { get; set; }
public int IdadeCorrecao { get; set; }
public double PDOP { get; set; }
public double VDOP { get; set; }
public TiposDimensaoCorrecaoGPS FixDimensao { get; set; }
public double PrecisaoCm
{
get
@ -74,6 +78,10 @@ namespace AgroBase.Models
OrientacaoMovimento = OrientacaoMovimento,
AnguloCarroDefinido = AnguloCarroDefinido,
Heartbeat = Heartbeat,
IdadeCorrecao = IdadeCorrecao,
FixDimensao = FixDimensao,
PDOP = PDOP,
VDOP = VDOP
};
}
}
@ -448,6 +456,22 @@ namespace AgroBase.Models
return (resultado.ponto, resultado.index);
}
public static double DmmToDecimal(string dmm, int degLen)
{
if (string.IsNullOrWhiteSpace(dmm)) return double.NaN;
// NMEA: ddmm.mmmm (lat) / dddmm.mmmm (lon)
double deg = double.Parse(dmm.Substring(0, degLen), CultureInfo.InvariantCulture);
double min = double.Parse(dmm.Substring(degLen), CultureInfo.InvariantCulture);
return deg + (min / 60.0);
}
public static double ParseDouble(string s) =>
double.TryParse(s, NumberStyles.Float, CultureInfo.InvariantCulture, out var v) ? v : double.NaN;
public static int ParseInt(string s) =>
int.TryParse(s, NumberStyles.Integer, CultureInfo.InvariantCulture, out var v) ? v : 0;
}
}

View File

@ -1601,53 +1601,6 @@ namespace AgroBase.Models
public bool Mandatorio { get; set; }
public bool Utilizar { get; set; }
public bool Conectado { get; set; }
public bool Liberado
{
get
{
bool _liberado = true;
if (!Mandatorio || !Utilizar) return _liberado;
var _DispMvd = Variaveis.OperacaoEmAndamento.DispMvd;
switch (Dispositivo)
{
case T_Code.Mov:
{
(bool _EsqOperante, List<string> _EsqModsInoperantes) = _DispMvd?.Dados?.StatusModulosMOV(Direcao.Esquerda) ?? (true, new List<string>());
(bool _DirOperante, List<string> _DirModsInoperantes) = _DispMvd?.Dados?.StatusModulosMOV(Direcao.Direita) ?? (true, new List<string>());
_liberado = _EsqOperante && _DirOperante;
break;
}
case T_Code.Dir:
{
(bool _MksOperante, List<string> _MksModsInoperantes) = _DispMvd?.Dados?.StatusModulosDIR(Variaveis.OperacaoEmAndamento.Controle.TipoMovimento) ?? (true, new List<string>());
_liberado = _MksOperante;
break;
}
case T_Code.Atu:
{
(bool _AtuOperante, List<string> _AtuModsInoperantes) = Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.StatusModulosATU() ?? (true, new List<string>());
_liberado = _AtuOperante;
break;
}
case T_Code.Sen:
{
(bool _SenOperante, List<string> _SenModsInoperantes) = Variaveis.OperacaoEmAndamento.DispSen?.Dados?.StatusModulosSEN() ?? (true, new List<string>());
_liberado = _SenOperante;
break;
}
case T_Code.Gps:
{
_liberado = (Variaveis.OperacaoEmAndamento.Sensoriamento.Gps?.PrecisaoCm ?? 0) < GPSService.PrecisaoMinimaCm;
break;
}
}
return Conectado && _liberado;
}
}
}
public class OperacaoParametrosMandatoriosModel

View File

@ -184,8 +184,8 @@ namespace AgroBase.Models
{ TipoMovimentoDirecional.MovimentoLateral, 90 },
{ TipoMovimentoDirecional.Diagnostico, 25 },
};
public static double AnguloInclinacaoRollMax { get; set; } = 30.0;
public static double AnguloInclinacaoPitchMax { get; set; } = 15.0;
public static double AnguloInclinacaoRollMax { get; set; } = 15.0;
public static double AnguloInclinacaoPitchMax { get; set; } = 30.0;
public static SensorSinaleiroComportamentoModel ComportamentoPorStatus(StatusOperacao? _status = null)
{

View File

@ -41,12 +41,11 @@ namespace AgroBase.Services
public static int TaxaAmostragemHz { get; set; } = 5;
private static bool LoopRTK = false;
public static bool CorrecaoRTK = true;
private static int rtk_timeout = 60;
private static bool LoopRTK_Ntrip = false;
public static bool CorrecaoRTK_Ntrip = true;
public static DateTime UltimoEnvioCorrecaoRTK = DateTime.MinValue;
public static double PrecisaoMinimaCm { get; set; } = 100.0;
public static void AtualizarPortaCOM(SerialPort Porta)
{
if (PortaGPS == null)
@ -71,7 +70,10 @@ namespace AgroBase.Services
{
DefinirDispositivo();
Task.Run(async () => await ConfigurarModulo());
Task.Run(async () => await AplicarCorrecaoRTK());
if (LoopRTK_Ntrip)
{
Task.Run(async () => await AplicarCorrecaoRTK_Ntrip());
}
}
}
@ -90,11 +92,46 @@ namespace AgroBase.Services
private static async Task ConfigurarModulo()
{
string freq = (1.0 / TaxaAmostragemHz).ToString("0.0").Replace(",", ".");
string[] comandos = new string[]
if (Variaveis.IsAgroMonitor)
{
$"unlog\r\n",
$"unlog\r\ngngga {freq}\r\ngpths {freq}\r\n"
await ConfigurarModuloBase();
}
else
{
await ConfigurarModuloRover();
}
}
private static async Task ConfigurarModuloRover(string porta_usb = "com3", string porta_entrada = "com2", int comprimento_antena = 130, int tolerancia_antena = 3)
{
string freq = (1.0 / TaxaAmostragemHz).ToString("0.0").Replace(",", ".");
string[] comandos = {
// Bauds
$"config {porta_usb} 115200\r\n",
$"config {porta_entrada} 115200\r\n",
// limpa logs das portas
$"unlog com1\r\n",
$"unlog com2\r\n",
$"unlog com3\r\n",
// modo rover + RTK
$"mode rover uav\r\n",
// timeouts de correção
$"config rtk timeout {rtk_timeout}\r\n",
$"config dgps timeout 60\r\n", // ou 0 para desabilitar DGPS fallback
// heading 2 antenas
$"config heading fixlength\r\n",
$"config heading length {comprimento_antena} {tolerancia_antena}\r\n",
// (se precisar, existe 'config heading offset <azim_off> <pitch_off>')
// NMEA só na USB (COM1)
$"gpgga {porta_usb} {freq}\r\n",
$"gpths {porta_usb} {freq}\r\n",
$"saveconfig\r\n"
};
await Task.Delay(2000);
@ -107,6 +144,48 @@ namespace AgroBase.Services
}
}
private static async Task ConfigurarModuloBase(int tempo_fixacao = 60, string porta_usb = "com3", string porta_saida = "com2")
{
string[] comandos = {
// Bauds
$"config {porta_usb} 115200\r\n",
$"config {porta_saida} 115200\r\n",
// limpa logs das portas
$"unlog com1\r\n",
$"unlog com2\r\n",
$"unlog com3\r\n",
// Base com Survey-In (tempo + acurácia)
$"mode base time {tempo_fixacao}\r\n",
// RTCM perfil (comece leve; ative mais constelações se o LoRa aguentar)
$"RTCM1006 {porta_saida} 10\r\n",
$"RTCM1033 {porta_saida} 30\r\n",
$"RTCM1074 {porta_saida} 1\r\n", // GPS MSM4
$"RTCM1124 {porta_saida} 1\r\n", // BeiDou MSM4
// (Opcional) ativar mais constelações:
// $"RTCM1094 {porta_saida} 1\r\n", // Galileo MSM4
// $"RTCM1084 {porta_saida} 1\r\n", // GLONASS MSM4
// $"RTCM1230 {porta_saida} 10\r\n",// Bias GLONASS (OBRIGATÓRIO se 1084 estiver ativo)
// NMEA mínimo para debug na USB
$"gngga {porta_usb} 1\r\n",
$"saveconfig\r\n",
};
await Task.Delay(2000);
foreach (string cmd in comandos)
{
byte[] bytes = Encoding.ASCII.GetBytes(cmd);
PortaGPS.Write(bytes, 0, bytes.Length);
await Task.Delay(500);
}
}
private static StringBuilder _buffer = new StringBuilder();
@ -122,6 +201,8 @@ namespace AgroBase.Services
// Lê os dados disponíveis na porta
string recebido = PortaGPS.ReadExisting();
//Console.WriteLine(recebido);
// Adiciona ao buffer
_buffer.Append(recebido);
@ -168,6 +249,7 @@ namespace AgroBase.Services
if (string.IsNullOrWhiteSpace(linha)) continue;
var sentenca = linha.Trim();
//Console.WriteLine(sentenca);
// Identifica o tipo de sentença
@ -203,6 +285,20 @@ namespace AgroBase.Services
{
ProcessarGNTHS(sentenca);
}
// GLL (GP/GN/GL/GA/BD)
else if (sentenca.Length > 6 && sentenca[3] == 'G' && sentenca[4] == 'L' && sentenca[5] == 'L')
{
//ProcessarGNGLL(sentenca);
}
// GSA (GP/GN/GL/GA/BD)
else if (sentenca.Length > 6 && sentenca[3] == 'G' && sentenca[4] == 'S' && sentenca[5] == 'A')
{
ProcessarGxGSA(sentenca);
}
else if (sentenca.Length > 6 && sentenca[3] == 'R' && sentenca[4] == 'M' && sentenca[5] == 'C') // RMC
{
ProcessarGxRMC(sentenca);
}
else
{
Console.WriteLine($"Sentença desconhecida: {sentenca}");
@ -250,6 +346,7 @@ namespace AgroBase.Services
string satelitesUsados = campos[7].Replace(".", ",");
string hdop = campos[8].Replace(".", ",");
string altitudeRaw = campos[9].Replace(".", ",");
string idadeCorrecaoRaw = campos[13];
// Conversão de Latitude
double latitude = 0;
@ -280,6 +377,8 @@ namespace AgroBase.Services
int.TryParse(qualidade, out int fix);
int.TryParse(idadeCorrecaoRaw, out int idadeCorrecao);
//Console.WriteLine($"GNGGA: Hora={horaUTC}, Latitude={latitude}, Longitude={longitude}, Qualidade={qualidade}, Satélites={satelitesUsados}, HDOP={hdop}, Altitude={altitude}");
@ -291,6 +390,7 @@ namespace AgroBase.Services
PenultimaLeitura.NumeroSatelites.valor = UltimaLeitura.NumeroSatelites.valor;
PenultimaLeitura.QualidadeFix = UltimaLeitura.QualidadeFix;
PenultimaLeitura.DataHora = UltimaLeitura.DataHora;
PenultimaLeitura.IdadeCorrecao = UltimaLeitura.IdadeCorrecao;
// Armazenar os valores na última leitura
UltimaLeitura.Momento = DateTime.Now;
@ -300,12 +400,13 @@ namespace AgroBase.Services
UltimaLeitura.PrecisaoHorizontal = precisao;
UltimaLeitura.NumeroSatelites.valor = nsatelites;
UltimaLeitura.QualidadeFix = (TiposCorrecaoGPS)fix;
UltimaLeitura.IdadeCorrecao = idadeCorrecao;
// Parse a hora do formato HHmmss.ss
if (!string.IsNullOrEmpty(horaUTC) && TimeSpan.TryParseExact(horaUTC.Substring(0, 6), "hhmmss", CultureInfo.InvariantCulture, out TimeSpan timeOfDay))
{
DateTime currentDate = DateTime.UtcNow.Date;
UltimaLeitura.DataHora = currentDate.Add(timeOfDay);
UltimaLeitura.DataHora = currentDate.Add(timeOfDay).ToLocalTime();
}
}
@ -472,13 +573,228 @@ namespace AgroBase.Services
}
}
private static async Task AplicarCorrecaoRTK()
private static void ProcessarGNGLL(string sentenca)
{
if (LoopRTK)
// Aceita GP/GL/GN… qualquer “G?GLL”
var campos = sentenca.Split(',');
if (campos.Length < 7) return;
// lat/lon
string latRaw = campos[1];
string latHem = campos[2];
string lonRaw = campos[3];
string lonHem = campos[4];
string horaUTC = campos[5]; // hhmmss.ss
string status = campos[6]; // A/V
string mode = campos.Length > 7 ? campos[7].Split('*')[0] : ""; // pode não existir
bool valido = status == "A" && mode != "N";
if (valido && !string.IsNullOrWhiteSpace(latRaw) && !string.IsNullOrWhiteSpace(lonRaw))
{
double lat = GPSUtils.DmmToDecimal(latRaw, 2);
double lon = GPSUtils.DmmToDecimal(lonRaw, 3);
if (!double.IsInfinity(lat) && !double.IsNaN(lat) && !double.IsInfinity(lon) && !double.IsNaN(lon))
{
if (latHem == "S") lat = -lat;
if (lonHem == "W") lon = -lon;
// mantém histórico
PenultimaLeitura.Latitude = UltimaLeitura.Latitude;
PenultimaLeitura.Longitude = UltimaLeitura.Longitude;
UltimaLeitura.Latitude = lat;
UltimaLeitura.Longitude = lon;
}
}
// atualiza hora se veio no frame
if (!string.IsNullOrEmpty(horaUTC) && horaUTC.Length >= 6)
{
// hhmmss(.ss)
var hh = horaUTC.Substring(0, 2);
var mm = horaUTC.Substring(2, 2);
var ss = horaUTC.Substring(4);
if (TimeSpan.TryParseExact($"{hh}:{mm}:{ss}", @"hh\:mm\:ss\.ff",
CultureInfo.InvariantCulture, out var tod)
|| TimeSpan.TryParseExact($"{hh}:{mm}:{ss}", @"hh\:mm\:ss",
CultureInfo.InvariantCulture, out tod))
{
UltimaLeitura.DataHora = DateTime.UtcNow.Date.Add(tod).ToLocalTime();
}
}
// mapeia “mode” (se existir) para sua enum, sem sobrepor GGA melhor
// Ex.: A=Autonomous(1), D=DGPS(2), R=RTK Fix(4), F=RTK Float(5)
if (!string.IsNullOrEmpty(mode))
{
if (mode == "R") UltimaLeitura.QualidadeFix = TiposCorrecaoGPS.RTKFixo;
else if (mode == "F") UltimaLeitura.QualidadeFix = TiposCorrecaoGPS.RTKFlutuante;
else if (mode == "D") UltimaLeitura.QualidadeFix = TiposCorrecaoGPS.DGPS;
else if (mode == "E") UltimaLeitura.QualidadeFix = TiposCorrecaoGPS.DeadReckoing;
else if (mode == "A") UltimaLeitura.QualidadeFix = TiposCorrecaoGPS.Autonomo;
else if (mode == "N") UltimaLeitura.QualidadeFix = TiposCorrecaoGPS.SemCorrecao;
else UltimaLeitura.QualidadeFix = TiposCorrecaoGPS.SemCorrecao;
}
AtualizarCoordenadasGPS();
}
private static void ProcessarGxGSA(string sentenca)
{
// aceita $GPGSA, $GNGSA, $GLGSA, $GAGSA, $BDGSA…
var campos = sentenca.Split(',');
if (campos.Length < 17) return;
string modoSelecao = campos[1]; // M/A
TiposDimensaoCorrecaoGPS modoSolucao =(TiposDimensaoCorrecaoGPS)GPSUtils.ParseInt(campos[2]); // 1/2/3
// satélites usados: campos[3]..campos[14]
int satsUsados = 0;
for (int i = 3; i <= 14 && i < campos.Length; i++)
if (!string.IsNullOrWhiteSpace(campos[i])) satsUsados++;
double pdop = GPSUtils.ParseDouble(campos[15]);
double hdop = GPSUtils.ParseDouble(campos[16]);
double vdop = (campos.Length > 17) ? GPSUtils.ParseDouble(campos[17].Split('*')[0]) : double.NaN;
// Atualiza apenas o que faz sentido complementar
if (!double.IsInfinity(hdop) && !double.IsNaN(hdop)) UltimaLeitura.PrecisaoHorizontal = hdop;
if (satsUsados > 0) UltimaLeitura.NumeroSatelites.valor = Math.Max(UltimaLeitura.NumeroSatelites.valor, satsUsados);
// Se você quiser guardar os DOPs:
UltimaLeitura.PDOP = !double.IsInfinity(pdop) && !double.IsNaN(pdop) ? pdop : UltimaLeitura.PDOP;
UltimaLeitura.VDOP = !double.IsInfinity(vdop) && !double.IsNaN(vdop) ? vdop : UltimaLeitura.VDOP;
// Mapeia modoSolucao (não é igual ao “fix quality” do GGA!)
// 1=NoFix, 2=Fix2D, 3=Fix3D — pode guardar num campo próprio se tiver
UltimaLeitura.FixDimensao = modoSolucao; // crie int FixDimensao na sua struct, se não existir
}
private static void ProcessarGxRMC(string sentenca)
{
// Aceita $GPRMC, $GNRMC, $GLRMC, $GARMC, $BDRMC...
var raw = sentenca;
var campos = raw.Split(',');
if (campos.Length < 12) return;
string timeUTC = campos[1]; // hhmmss.ss
string status = campos[2]; // A=ativo, V=inválido
string latRaw = campos[3];
string latHem = campos[4];
string lonRaw = campos[5];
string lonHem = campos[6];
string spdKtsS = campos[7]; // knots
string cogS = campos[8]; // course over ground (graus)
string date = campos[9]; // ddmmyy
string magVarS = campos[10]; // pode estar vazio
string magHem = campos.Length > 11 ? campos[11] : "";
// mode pode vir no campo 12 (sem checksum) ou 12 com outro e 13 com checksum, depende do firmware
string mode = "";
if (campos.Length > 12)
{
var tmp = campos[12];
// tira checksum se estiver grudado
int asterix = tmp.IndexOf('*');
mode = (asterix >= 0 ? tmp.Substring(0, asterix) : tmp).Trim();
// alguns mandam mais um campo (navStatus) e o checksum só no final
if (mode.Length == 0 && campos.Length > 13)
{
tmp = campos[13];
asterix = tmp.IndexOf('*');
mode = (asterix >= 0 ? tmp.Substring(0, asterix) : tmp).Trim();
}
}
bool valido = status == "A";
// Converte lat/lon se válidos
if (valido && !string.IsNullOrWhiteSpace(latRaw) && !string.IsNullOrWhiteSpace(lonRaw))
{
if (latRaw.Length >= 4 && lonRaw.Length >= 5)
{
double lat = GPSUtils.DmmToDecimal(latRaw, 2);
double lon = GPSUtils.DmmToDecimal(lonRaw, 3);
if (!double.IsNaN(lat) && !double.IsInfinity(lat) && !double.IsNaN(lon) && !double.IsInfinity(lon))
{
if (latHem == "S") lat = -lat;
if (lonHem == "W") lon = -lon;
PenultimaLeitura.Latitude = UltimaLeitura.Latitude;
PenultimaLeitura.Longitude = UltimaLeitura.Longitude;
UltimaLeitura.Latitude = lat;
UltimaLeitura.Longitude = lon;
}
}
}
// Velocidade (knots -> m/s e km/h, se quiser guardar)
if (double.TryParse(spdKtsS, NumberStyles.Float, CultureInfo.InvariantCulture, out double spdKts))
{
UltimaLeitura.Velocidade = spdKts;
}
// Course over ground (graus)
if (double.TryParse(cogS, NumberStyles.Float, CultureInfo.InvariantCulture, out double cog))
UltimaLeitura.CursoVerdadeiro = cog;
// Data/hora (UTC)
// timeUTC: hhmmss(.ss), date: ddmmyy
DateTime? dt = null;
if (!string.IsNullOrEmpty(timeUTC) && timeUTC.Length >= 6 && !string.IsNullOrEmpty(date) && date.Length == 6)
{
string hh = timeUTC.Substring(0, 2);
string mm = timeUTC.Substring(2, 2);
string ss = timeUTC.Substring(4, 2);
string dd = date.Substring(0, 2);
string MM = date.Substring(2, 2);
string yy = date.Substring(4, 2);
// yy -> 20yy (assumindo 2000+; ajuste se precisar 19xx)
int year = 2000 + int.Parse(yy, CultureInfo.InvariantCulture);
if (int.TryParse(dd, out int d) && int.TryParse(MM, out int M) &&
int.TryParse(hh, out int H) && int.TryParse(mm, out int m) && int.TryParse(ss, out int s))
{
try
{
dt = new DateTime(year, M, d, H, m, s, DateTimeKind.Utc);
}
catch { /* ignora datas inválidas */ }
}
}
if (dt.HasValue) UltimaLeitura.DataHora = dt.Value.ToLocalTime();
// Variação magnética (se quiser armazenar)
if (double.TryParse(magVarS, NumberStyles.Float, CultureInfo.InvariantCulture, out double magVar))
{
if (magHem == "W") magVar = -magVar;
UltimaLeitura.VariacaoMagnetica = magVar;
}
// Mode → promove QualidadeFix (não rebaixa)
// A=Autônomo, D=DGPS, R=RTK Fix, F=RTK Float, N=No Fix
if (!string.IsNullOrEmpty(mode))
{
if (mode == "R") UltimaLeitura.QualidadeFix = TiposCorrecaoGPS.RTKFixo;
else if (mode == "F") UltimaLeitura.QualidadeFix = TiposCorrecaoGPS.RTKFlutuante;
else if (mode == "D") UltimaLeitura.QualidadeFix = TiposCorrecaoGPS.DGPS;
else if (mode == "E") UltimaLeitura.QualidadeFix = TiposCorrecaoGPS.DeadReckoing;
else if (mode == "A") UltimaLeitura.QualidadeFix = TiposCorrecaoGPS.Autonomo;
else if (mode == "N") UltimaLeitura.QualidadeFix = TiposCorrecaoGPS.SemCorrecao;
else UltimaLeitura.QualidadeFix = TiposCorrecaoGPS.SemCorrecao;
}
AtualizarCoordenadasGPS();
}
private static async Task AplicarCorrecaoRTK_Ntrip()
{
if (LoopRTK_Ntrip)
return;
LoopRTK = true;
LoopRTK_Ntrip = true;
// Configurações do NTRIP caster para RTK2Go
string host = "gps-ntrip.ibge.gov.br";
@ -487,7 +803,7 @@ namespace AgroBase.Services
string username = "Zendion"; // Geralmente vazio para RTK2Go
string password = "vyNEF$5*"; // Geralmente vazio para RTK2Go
while (true) // Loop para reconectar em caso de falha
while (LoopRTK_Ntrip) // Loop para reconectar em caso de falha
{
try
{
@ -515,15 +831,17 @@ namespace AgroBase.Services
using (StreamReader reader = new StreamReader(stream, Encoding.ASCII))
{
string response = await reader.ReadLineAsync();
if (LoopRTK_Ntrip)
{
if ((response ?? "").Contains("200 OK"))
{
Console.WriteLine("Conexão bem-sucedida ao mountpoint!");
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length)) > 0)
while (LoopRTK_Ntrip && (bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length)) > 0)
{
if (CorrecaoRTK && (PortaGPS?.IsOpen ?? false))
if (CorrecaoRTK_Ntrip && (PortaGPS?.IsOpen ?? false))
{
PortaGPS.Write(buffer, 0, bytesRead); // Envia os dados RTCM para o GPS
//Console.WriteLine($"Enviando {bytesRead} bytes de correção RTCM para o GPS");
@ -539,14 +857,13 @@ namespace AgroBase.Services
}
}
}
}
catch (Exception ex)
{
Console.WriteLine($"Erro na conexão RTK: {ex.Message}");
await Task.Delay(5000); // Aguarde antes de tentar novamente
}
}
LoopRTK = false;
}
@ -616,11 +933,15 @@ namespace AgroBase.Services
PenultimaLeitura.Inicializado = UltimaLeitura.Inicializado;
UltimaLeitura.Inicializado = Iniciado;
if (false && UltimoEnvioCorrecaoRTK.AddSeconds(10) < DateTime.Now)
if (CorrecaoRTK_Ntrip && UltimoEnvioCorrecaoRTK.AddSeconds(10) < DateTime.Now)
{
UltimoEnvioCorrecaoRTK = DateTime.Now;
LoopRTK = false;
Task.Run(() => AplicarCorrecaoRTK());
LoopRTK_Ntrip = false;
Task.Run(async () =>
{
await Task.Delay(5000);
await AplicarCorrecaoRTK_Ntrip();
});
}
}
@ -876,7 +1197,7 @@ namespace AgroBase.Services
("lon", UltimaLeitura.Longitude),
("theta", UltimaLeitura.AnguloCarroDefinido),
("fix", (int)UltimaLeitura.QualidadeFix),
("rtk", UltimoEnvioCorrecaoRTK.AddSeconds(10) > DateTime.Now),
("rtk", UltimaLeitura.IdadeCorrecao < rtk_timeout),
("hAcc", UltimaLeitura.PrecisaoCm),
("nSatelites", UltimaLeitura.NumeroSatelites.valor),
("freq", UltimaLeitura.NumeroSatelites.frequencia),

View File

@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Threading.Tasks;
namespace AgroBase.Services
{
public class RTCMSniffer
{
public async Task Main(string[] args)
{
string port = args.Length > 0 ? args[0] : "COM34"; // troque para a COM do E220
var sp = new SerialPort(port, 115200, Parity.None, 8, StopBits.One);
sp.ReadTimeout = 200;
sp.Open();
Console.WriteLine($"Sniffando RTCM em {port}... (Ctrl+C para sair)");
var buf = new List<byte>(8192);
while (true)
{
try
{
int n = sp.BytesToRead;
if (n > 0)
{
var tmp = new byte[n];
sp.Read(tmp, 0, n);
buf.AddRange(tmp);
int i = 0;
while (i + 6 < buf.Count)
{
if (buf[i] != 0xD3) { i++; continue; }
if (i + 2 >= buf.Count) break;
int len = ((buf[i + 1] & 0x03) << 8) | buf[i + 2]; // 10 bits
int frameEnd = i + 3 + len + 3; // header(3) + payload + CRC(3)
if (frameEnd > buf.Count) break;
if (len >= 2)
{
int msgType = (buf[i + 3] << 4) | (buf[i + 4] >> 4); // 12 bits iniciais
Console.WriteLine($"[{DateTime.Now:HH:mm:ss.fff}] RTCM{msgType} len={len}");
}
buf.RemoveRange(0, frameEnd);
i = 0;
}
}
await Task.Delay(5);
}
catch { /* timeout/ctrl-c */ }
}
}
}
}

View File

@ -446,6 +446,7 @@ namespace AgroBase.Services
{
EnviarComando("C\r");
_PortaCAN.Close();
_PortaCAN = null;
}
IsConnected = false;

View File

@ -223,7 +223,7 @@ namespace AgroBase.Services
}
}
if (CanManager.UseCanSerial && !CanManager.CanService.Iniciado)
if (!Variaveis.IsAgroMonitor && CanManager.UseCanSerial && !CanManager.CanService.Iniciado)
{
AtualizarConsole($"{PortaCom} - Procurando dispositivos no barramento CAN");
bool dispositivoCan = await ProcurarDispositivosCAN(_Porta);
@ -247,6 +247,13 @@ namespace AgroBase.Services
foreach (var Dispositivo in DispositivosRemovidos)
{
DispositivosMapeados.Remove(Dispositivo);
switch (Dispositivo.Dispositivo)
{
case T_Code.Gps:
GPSService.PortaGPS?.Close();
GPSService.PortaGPS = null;
break;
}
}
var cameras = CameraWorkerService.GetListaCameras().Where(x => x.Index > -1).ToList();
@ -432,6 +439,11 @@ namespace AgroBase.Services
}
}
if (!CanManager.CanService.Iniciado)
{
CanManager.CanService.Fechar();
}
return CanManager.CanService.Iniciado;
}

View File

@ -185,8 +185,8 @@ def _regras_taticas(contexto):
imu = ContextoGlobalRedis.get_modulo(T_Code.Imu)
if imu is not None and imu.get("saude", {}).get("status", StatusModulo.DESCONECTADO.value) == StatusModulo.OPERANTE.value:
ang_roll_max = contexto.get("Equipamento", {}).get("angulo_roll_max", 30.0)
ang_pitch_max = contexto.get("Equipamento", {}).get("angulo_pitch_max", 15.0)
ang_roll_max = contexto.get("Equipamento", {}).get("angulo_roll_max", 15.0)
ang_pitch_max = contexto.get("Equipamento", {}).get("angulo_pitch_max", 30.0)
if abs(imu.get("pitch", 0.0)) > ang_pitch_max or abs(imu.get("roll", 0.0)) > ang_roll_max:
mostrar_log(f"🟥 Inclinação perigosa detectada. Parando movimentação. roll: {imu.get('roll')}, pitch: {imu.get('pitch')}, yaw: {imu.get('yaw')}")
return _comando_direcional_parado(True)

View File

@ -50,6 +50,9 @@ namespace AgroMonitor
{
tmrDispositivos = new AsyncTaskTimerModel("tmrDispositivos", tmrDispositivos_Tick, 1000, this);
tmrDispositivos.Start();
//RTCMSniffer sniffer = new RTCMSniffer();
//Task.Run(async () => await sniffer.Main(new string[] { "COM34" }));
}
private async Task tmrDispositivos_Tick()

View File

@ -92,6 +92,8 @@
this.tvwFalhas = new System.Windows.Forms.TreeView();
this.lblMapa = new System.Windows.Forms.Label();
this.btnCarregar = new System.Windows.Forms.Button();
this.txtFix = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.pnlDados.SuspendLayout();
this.pnlControle.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.tkbAnguloMP)).BeginInit();
@ -150,6 +152,8 @@
// pnlDados
//
this.pnlDados.AutoScroll = true;
this.pnlDados.Controls.Add(this.txtFix);
this.pnlDados.Controls.Add(this.label1);
this.pnlDados.Controls.Add(this.txtCarroConectado);
this.pnlDados.Controls.Add(this.lblCarroConectado);
this.pnlDados.Controls.Add(this.chbFoco);
@ -683,10 +687,10 @@
//
// txtOrientacao
//
this.txtOrientacao.Location = new System.Drawing.Point(119, 136);
this.txtOrientacao.Location = new System.Drawing.Point(93, 136);
this.txtOrientacao.Name = "txtOrientacao";
this.txtOrientacao.ReadOnly = true;
this.txtOrientacao.Size = new System.Drawing.Size(100, 20);
this.txtOrientacao.Size = new System.Drawing.Size(76, 20);
this.txtOrientacao.TabIndex = 9;
this.txtOrientacao.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
@ -694,7 +698,7 @@
//
this.lblOrientacao.AutoSize = true;
this.lblOrientacao.Font = new System.Drawing.Font("Microsoft Sans Serif", 10.25F);
this.lblOrientacao.Location = new System.Drawing.Point(117, 116);
this.lblOrientacao.Location = new System.Drawing.Point(91, 116);
this.lblOrientacao.Name = "lblOrientacao";
this.lblOrientacao.Size = new System.Drawing.Size(78, 17);
this.lblOrientacao.TabIndex = 8;
@ -715,7 +719,7 @@
this.txtLeitura.Location = new System.Drawing.Point(11, 136);
this.txtLeitura.Name = "txtLeitura";
this.txtLeitura.ReadOnly = true;
this.txtLeitura.Size = new System.Drawing.Size(100, 20);
this.txtLeitura.Size = new System.Drawing.Size(76, 20);
this.txtLeitura.TabIndex = 6;
this.txtLeitura.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
@ -764,6 +768,25 @@
this.btnCarregar.UseVisualStyleBackColor = true;
this.btnCarregar.Click += new System.EventHandler(this.btnCarregar_Click);
//
// txtFix
//
this.txtFix.Location = new System.Drawing.Point(175, 136);
this.txtFix.Name = "txtFix";
this.txtFix.ReadOnly = true;
this.txtFix.Size = new System.Drawing.Size(44, 20);
this.txtFix.TabIndex = 56;
this.txtFix.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 10.25F);
this.label1.Location = new System.Drawing.Point(173, 116);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(25, 17);
this.label1.TabIndex = 55;
this.label1.Text = "Fix";
//
// frmMonitoramento
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -854,5 +877,7 @@
private System.Windows.Forms.TreeView tvwFalhas;
private System.Windows.Forms.TextBox txtCarroConectado;
private System.Windows.Forms.Label lblCarroConectado;
private System.Windows.Forms.TextBox txtFix;
private System.Windows.Forms.Label label1;
}
}

View File

@ -126,9 +126,10 @@ namespace AgroMonitor.Forms
MomentoLog = DateTime.Now;
txtLeitura.Text = MomentoLog.ToString("ddd HH:mm:ss");
txtOrientacao.Text = GPSService.UltimaLeitura.CursoVerdadeiro.ToString("0.00");
txtOrientacao.Text = GPSService.UltimaLeitura.OrientacaoReal.ToString("0.00");
txtLatitude.Text = GPSService.UltimaLeitura.Latitude.ToString();
txtLongitude.Text = GPSService.UltimaLeitura.Longitude.ToString();
txtFix.Text = GPSService.UltimaLeitura.QualidadeFix.ToString();
txtCodigoFalha.Text = "";
txtStatusOperacao.Text = "";
@ -168,6 +169,7 @@ namespace AgroMonitor.Forms
txtOrientacao.Text = Equipamento.Coordenadas.Orientacao.ToString("0.00");
txtLatitude.Text = Equipamento.Coordenadas.Latitude.ToString();
txtLongitude.Text = Equipamento.Coordenadas.Longitude.ToString();
txtFix.Text = Equipamento.Coordenadas.Correcao.ToString();
txtCodigoFalha.Text = Equipamento.CodigoFalha.ToString();

View File

@ -0,0 +1,5 @@
{
"description" : "AutoLaunch Protocols Preregistration",
"name" : "Protocol Preregistration",
"version" : "1.0.0.9"
}

View File

@ -0,0 +1,118 @@
{
"allow": [
{
"origins": [
"https://.get.microsoft.com",
"https://.apps.microsoft.com"
],
"protocol": "ms-windows-store"
},
{
"origins": [
"https://.onedrive.com",
"https://.onedrive.live.com",
"https://sharepoint.com"
],
"protocol": "ms-word"
},
{
"origins": [
"https://[a-z1-9-]*word-edit.officeapps.live.com",
"https://[a-z1-9-]*word-view.officeapps.live.com",
"https://[a-z1-9-]*onenote.officeapps.live.com",
"https://[a-z1-9-]*eap.officeapps.live.com",
"https://[a-z1-9-]*shared.officeapps.live.com",
"https://[a-z1-9-]*afhs.officeapps.live.com",
"https://[a-z1-9-]*vhs.officeapps.live.com",
"https://[a-z1-9-]*optin.online.office.com"
],
"use_regex": true,
"protocol": "ms-word"
},
{
"origins": [
"https://.onedrive.com",
"https://.onedrive.live.com",
"https://sharepoint.com"
],
"protocol": "ms-excel"
},
{
"origins": [
"https://[a-z1-9-]*excel.officeapps.live.com",
"https://[a-z1-9-]*onenote.officeapps.live.com",
"https://[a-z1-9-]*eap.officeapps.live.com",
"https://[a-z1-9-]*shared.officeapps.live.com",
"https://[a-z1-9-]*afhs.officeapps.live.com",
"https://[a-z1-9-]*vhs.officeapps.live.com",
"https://[a-z1-9-]*optin.online.office.com"
],
"use_regex": true,
"protocol": "ms-excel"
},
{
"origins": [
"https://.onedrive.com",
"https://.onedrive.live.com",
"https://sharepoint.com"
],
"protocol": "ms-powerpoint"
},
{
"origins": [
"https://[a-z1-9-]*powerpoint.officeapps.live.com",
"https://[a-z1-9-]*onenote.officeapps.live.com",
"https://[a-z1-9-]*eap.officeapps.live.com",
"https://[a-z1-9-]*shared.officeapps.live.com",
"https://[a-z1-9-]*afhs.officeapps.live.com",
"https://[a-z1-9-]*vhs.officeapps.live.com",
"https://[a-z1-9-]*optin.online.office.com"
],
"use_regex": true,
"protocol": "ms-powerpoint"
},
{
"origins": [
"https://.onedrive.com",
"https://.onedrive.live.com",
"https://sharepoint.com"
],
"protocol": "ms-visio"
},
{
"origins": [
"https://[a-z1-9-]*visio.officeapps.live.com",
"https://[a-z1-9-]*onenote.officeapps.live.com",
"https://[a-z1-9-]*eap.officeapps.live.com",
"https://[a-z1-9-]*shared.officeapps.live.com",
"https://[a-z1-9-]*afhs.officeapps.live.com",
"https://[a-z1-9-]*vhs.officeapps.live.com",
"https://[a-z1-9-]*optin.online.office.com"
],
"use_regex": true,
"protocol": "ms-visio"
},
{
"origins": [
"https://www.microsoft.com"
],
"protocol": "ms-copilot"
}
],
"warn": [
{
"origins": [
"*"
],
"protocol": "ms-test-warn"
}
],
"block": [
{
"origins": [
"*"
],
"protocol": "ms-test-block"
}
]
}

View File

@ -11,3 +11,133 @@
0:00:00 Tab1 FinishNav2
0:00:00 Tab1 PageLoad
0:00:52 Memory Pressure: Critical
0:00:00 Startup
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
0:00:00 Microsoft.NewBrowser_Popup
0:00:00 Microsoft.BrowserList.AddBrowser
0:00:00 Browser1 Insert active Tab1 at 0
0:00:00 Tab1 StartNav1 #auto_toplevel
0:00:00 Tab1 StartNav2 #typed
0:00:00 Tab1 FinishNav1
0:00:00 Tab1 PageLoad
0:00:00 Tab1 FinishNav2
0:00:00 Tab1 PageLoad
0:00:29 Widget Closed: StatusBubble
0:15:47 Microsoft.Shutdown.TabStripModel.SendDetachWebContentsNotifications
0:00:00 Startup
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
0:00:00 Microsoft.NewBrowser_Popup
0:00:00 Microsoft.BrowserList.AddBrowser
0:00:00 Browser1 Insert active Tab1 at 0
0:00:00 Tab1 StartNav1 #auto_toplevel
0:00:00 Tab1 StartNav2 #typed
0:00:00 Tab1 FinishNav1
0:00:00 Tab1 PageLoad
0:00:00 Tab1 FinishNav2
0:00:00 Tab1 PageLoad
0:04:14 Memory Pressure: Critical
0:04:17 Microsoft.UnloadController.IsUnclosableApp_IsNotWebApp
0:00:00 Startup
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
0:00:00 Microsoft.NewBrowser_Popup
0:00:00 Microsoft.BrowserList.AddBrowser
0:00:00 Browser1 Insert active Tab1 at 0
0:00:00 Tab1 StartNav1 #auto_toplevel
0:00:00 Tab1 StartNav2 #typed
0:00:00 Tab1 FinishNav1
0:00:00 Tab1 PageLoad
0:00:00 Tab1 FinishNav2
0:00:00 Tab1 PageLoad
0:16:56 Microsoft.UnloadController.IsUnclosableApp_IsNotWebApp
0:00:00 Startup
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
0:00:00 Microsoft.NewBrowser_Popup
0:00:00 Microsoft.BrowserList.AddBrowser
0:00:00 Browser1 Insert active Tab1 at 0
0:00:00 Tab1 StartNav1 #auto_toplevel
0:00:00 Tab1 StartNav2 #typed
0:00:00 Tab1 FinishNav1
0:00:00 Tab1 PageLoad
0:00:00 Tab1 FinishNav2
0:00:00 Tab1 PageLoad
0:08:23 Microsoft.UnloadController.IsUnclosableApp_IsNotWebApp
0:00:00 Startup
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
0:00:00 Microsoft.NewBrowser_Popup
0:00:00 Microsoft.BrowserList.AddBrowser
0:00:00 Browser1 Insert active Tab1 at 0
0:00:00 Tab1 StartNav1 #auto_toplevel
0:00:00 Tab1 StartNav2 #typed
0:00:00 Tab1 FinishNav1
0:00:00 Tab1 PageLoad
0:00:00 Tab1 FinishNav2
0:00:00 Tab1 PageLoad
0:01:00 Memory Pressure: Critical
0:00:00 Startup
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
0:00:00 Microsoft.NewBrowser_Popup
0:00:00 Microsoft.BrowserList.AddBrowser
0:00:00 Browser1 Insert active Tab1 at 0
0:00:00 Tab1 StartNav1 #auto_toplevel
0:00:00 Tab1 StartNav2 #typed
0:00:00 Tab1 FinishNav1
0:00:00 Tab1 PageLoad
0:00:00 Tab1 FinishNav2
0:00:00 Tab1 PageLoad
0:03:23 Memory Pressure: Critical
0:00:00 Startup
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
0:00:00 Microsoft.NewBrowser_Popup
0:00:00 Microsoft.BrowserList.AddBrowser
0:00:00 Browser1 Insert active Tab1 at 0
0:00:00 Tab1 StartNav1 #auto_toplevel
0:00:00 Tab1 StartNav2 #typed
0:00:00 Tab1 FinishNav1
0:00:00 Tab1 PageLoad
0:00:00 Tab1 FinishNav2
0:00:00 Tab1 PageLoad
0:02:14 Memory Pressure: Critical
0:02:15 Microsoft.UnloadController.IsUnclosableApp_IsNotWebApp
0:02:15 Microsoft.UnloadController.HasCompletedUnloadProcessing_False
0:02:15 Microsoft.Shutdown.OnWindowClosing
0:02:15 Microsoft.UnloadController.IsUnclosableApp_IsNotWebApp
0:02:15 Microsoft.UnloadController.HasCompletedUnloadProcessing_True
0:02:15 Microsoft.Shutdown.OnWindowClosing_MaybeClearBrowsingDataOnExit
0:02:15 Microsoft.Shutdown.OnWindowClosing_ClearBrowsingDataOnExitNotInProgress
0:02:15 Microsoft.Shutdown.OnWindowClosingPostClearBrowsingData_NoBrowsingDataCleared
0:02:15 Microsoft.Shutdown.TabStripModel.CloseAllTabs
0:02:15 Microsoft.Shutdown.TabStripModel.CloseTabs
0:02:15 Microsoft.Shutdown.TabStripModel.CloseTabs_EdgeBeforeClosingAllTabs
0:02:15 Microsoft.Shutdown.TabStripModel.InternalCloseTabsImpl
0:02:15 Microsoft.Shutdown.TabStripModel.InternalCloseTabsImpl_TabClosable
0:02:15 Microsoft.Shutdown.TabStripModel.InternalCloseTabsImpl_ClosingAll
0:02:15 Microsoft.Shutdown.TabStripModel.CloseWebContentses
0:02:15 Microsoft.Shutdown.TabStripModel.CloseWebContentses_FastShutdown
0:02:15 Microsoft.Shutdown.TabStripModel.ShouldRunUnloadListenerBeforeClosing_false
0:02:15 Tab1 RenderProcessGone
0:02:15 Microsoft.UnloadController.ClearUnloadState
0:02:15 Microsoft.Shutdown.TabStripModel.RunUnloadListenerBeforeClosing_false
0:02:15 Microsoft.Shutdown.TabStripModel.InternalCloseTabsImpl_ClosedAll
0:02:15 Microsoft.Shutdown.TabStripModel.SendDetachWebContentsNotifications
0:02:15 Microsoft.UnloadController.ClearUnloadState
0:02:15 Browser1 Close Tab1 at 0
0:02:15 Tab1 WebContentsDestroyed
0:02:15 Microsoft.UnloadController.TabStripEmpty
0:02:15 Microsoft.UnloadController.IsUnclosableApp_IsNotWebApp
0:02:15 Microsoft.UnloadController.HasCompletedUnloadProcessing_True
0:02:15 Microsoft.Shutdown.OnWindowClosing
0:02:15 Microsoft.UnloadController.IsUnclosableApp_IsNotWebApp
0:02:15 Microsoft.UnloadController.HasCompletedUnloadProcessing_True
0:02:15 Microsoft.Shutdown.OnWindowClosingPostClearBrowsingData_NoBrowsingDataCleared
0:02:15 Widget Closed: BrowserFrame
0:02:15 Microsoft.UnloadController.HasCompletedUnloadProcessing_True
0:02:15 Microsoft.Shutdown.OnWindowClosing
0:02:15 Microsoft.Shutdown.OnWindowClosing_DeleteScheduled
0:02:15 Microsoft.Last_Browser_Removed

View File

@ -0,0 +1,5 @@
{
"description": "Microsoft CRLSet",
"name": "MicrosoftCRLSet",
"version": "6498.2024.12.2"
}

View File

@ -1,13 +1,13 @@
{
"epochs": [ {
"calculation_time": "13397256133256177",
"calculation_time": "13398258282822851",
"config_version": 0,
"model_version": "0",
"padded_top_topics_start_index": 0,
"taxonomy_version": 0,
"top_topics_and_observing_domains": [ ]
}, {
"calculation_time": "13398258282822851",
"calculation_time": "13399989621907661",
"config_version": 0,
"model_version": "0",
"padded_top_topics_start_index": 0,
@ -15,5 +15,5 @@
"top_topics_and_observing_domains": [ ]
} ],
"hex_encoded_hmac_key": "171DAE543B88106F5155169E0A8C7502CB2A0757E4948C32E2A04D196E23BE70",
"next_scheduled_calculation_time": "13398863082822933"
"next_scheduled_calculation_time": "13400594421907790"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -1,3 +1,3 @@
2025/07/31-09:08:16.595 30b8 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Extension State/MANIFEST-000001
2025/07/31-09:08:16.596 30b8 Recovering log #3
2025/07/31-09:08:16.596 30b8 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Extension State/000003.log
2025/08/18-10:03:41.715 3014 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Extension State/MANIFEST-000001
2025/08/18-10:03:41.716 3014 Recovering log #3
2025/08/18-10:03:41.716 3014 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Extension State/000003.log

View File

@ -1,3 +1,3 @@
2025/07/30-15:00:17.699 3928 Reusing MANIFEST C:\ZendionINC\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Extension State/MANIFEST-000001
2025/07/30-15:00:17.700 3928 Recovering log #3
2025/07/30-15:00:17.701 3928 Reusing old log C:\ZendionINC\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Extension State/000003.log
2025/08/18-09:44:35.904 cb0 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Extension State/MANIFEST-000001
2025/08/18-09:44:35.905 cb0 Recovering log #3
2025/08/18-09:44:35.905 cb0 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Extension State/000003.log

View File

@ -1,3 +1,3 @@
2025/07/31-09:08:16.557 2098 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
2025/07/31-09:08:16.564 2098 Recovering log #3
2025/07/31-09:08:16.567 2098 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log
2025/08/18-10:03:41.676 461c Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
2025/08/18-10:03:41.681 461c Recovering log #3
2025/08/18-10:03:41.684 461c Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log

View File

@ -1,3 +1,3 @@
2025/07/30-15:00:17.786 9ac Reusing MANIFEST C:\ZendionINC\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
2025/07/30-15:00:17.803 9ac Recovering log #3
2025/07/30-15:00:17.807 9ac Reusing old log C:\ZendionINC\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log
2025/08/18-09:44:35.856 7520 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
2025/08/18-09:44:35.862 7520 Recovering log #3
2025/08/18-09:44:35.865 7520 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log

View File

@ -1 +1 @@
{"net":{"http_server_properties":{"servers":[{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13398455885221737","port":443,"protocol_str":"quic"}],"anonymization":["DAAAAAcAAABmaWxlOi8vAA==",false,0],"network_stats":{"srtt":44272},"server":"https://tile.openstreetmap.org","supports_spdy":true}],"supports_quic":{"address":"2804:d78:609:f200:474:dcf1:ff5b:53be","used_quic":true},"version":5},"network_qualities":{"CAISABiAgICA+P////8B":"3G","CAYSABiAgICA+P////8B":"Offline"}}}
{"net":{"http_server_properties":{"servers":[{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13400082225005264","port":443,"protocol_str":"quic"}],"anonymization":["DAAAAAcAAABmaWxlOi8vAA==",false,0],"network_stats":{"srtt":69044},"server":"https://tile.openstreetmap.org","supports_spdy":true}],"supports_quic":{"address":"2804:d78:627:be00:b128:5cd2:a1f6:e65c","used_quic":true},"version":5},"network_qualities":{"CAISABiAgICA+P////8B":"4G","CAYSABiAgICA+P////8B":"Offline"}}}

View File

@ -1 +1 @@
{"sts":[{"expiry":1785431885.228668,"host":"bWGAftl61rqoc0YzqPncsLvQQh/iC2Bdp3ejUeGC83w=","mode":"force-https","sts_include_subdomains":true,"sts_observed":1753895885.228675}],"version":2}
{"sts":[{"expiry":1787058222.144504,"host":"bWGAftl61rqoc0YzqPncsLvQQh/iC2Bdp3ejUeGC83w=","mode":"force-https","sts_include_subdomains":true,"sts_observed":1755522222.144507}],"version":2}

File diff suppressed because one or more lines are too long

View File

@ -1,3 +1,3 @@
2025/07/31-09:09:09.196 2098 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Session Storage/MANIFEST-000001
2025/07/31-09:09:09.198 2098 Recovering log #3
2025/07/31-09:09:09.201 2098 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Session Storage/000003.log
2025/08/18-10:05:56.841 461c Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Session Storage/MANIFEST-000001
2025/08/18-10:05:56.842 461c Recovering log #3
2025/08/18-10:05:56.846 461c Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Session Storage/000003.log

View File

@ -1,3 +1,3 @@
2025/07/30-15:58:59.952 9ac Reusing MANIFEST C:\ZendionINC\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Session Storage/MANIFEST-000001
2025/07/30-15:58:59.955 9ac Recovering log #3
2025/07/30-15:58:59.958 9ac Reusing old log C:\ZendionINC\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Session Storage/000003.log
2025/08/18-09:47:59.525 7520 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Session Storage/MANIFEST-000001
2025/08/18-09:47:59.526 7520 Recovering log #3
2025/08/18-09:47:59.528 7520 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Session Storage/000003.log

View File

@ -1,3 +1,3 @@
2025/07/31-09:08:16.477 6790 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Site Characteristics Database/MANIFEST-000001
2025/07/31-09:08:16.480 6790 Recovering log #3
2025/07/31-09:08:16.480 6790 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Site Characteristics Database/000003.log
2025/08/18-10:03:41.604 219c Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Site Characteristics Database/MANIFEST-000001
2025/08/18-10:03:41.605 219c Recovering log #3
2025/08/18-10:03:41.605 219c Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Site Characteristics Database/000003.log

View File

@ -1,3 +1,3 @@
2025/07/30-15:00:17.512 d20 Reusing MANIFEST C:\ZendionINC\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Site Characteristics Database/MANIFEST-000001
2025/07/30-15:00:17.515 d20 Recovering log #3
2025/07/30-15:00:17.515 d20 Reusing old log C:\ZendionINC\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Site Characteristics Database/000003.log
2025/08/18-09:44:35.788 5674 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Site Characteristics Database/MANIFEST-000001
2025/08/18-09:44:35.790 5674 Recovering log #3
2025/08/18-09:44:35.790 5674 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Site Characteristics Database/000003.log

View File

@ -1,3 +1,3 @@
2025/07/31-09:08:16.477 12c4 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Sync Data\LevelDB/MANIFEST-000001
2025/07/31-09:08:16.479 12c4 Recovering log #3
2025/07/31-09:08:16.480 12c4 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Sync Data\LevelDB/000003.log
2025/08/18-10:03:41.604 3014 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Sync Data\LevelDB/MANIFEST-000001
2025/08/18-10:03:41.605 3014 Recovering log #3
2025/08/18-10:03:41.605 3014 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Sync Data\LevelDB/000003.log

View File

@ -1,3 +1,3 @@
2025/07/30-15:00:17.519 10d4 Reusing MANIFEST C:\ZendionINC\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Sync Data\LevelDB/MANIFEST-000001
2025/07/30-15:00:17.520 10d4 Recovering log #3
2025/07/30-15:00:17.521 10d4 Reusing old log C:\ZendionINC\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Sync Data\LevelDB/000003.log
2025/08/18-09:44:35.788 cb0 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Sync Data\LevelDB/MANIFEST-000001
2025/08/18-09:44:35.790 cb0 Recovering log #3
2025/08/18-09:44:35.790 cb0 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\AgroMonitor.exe.WebView2\EBWebView\Default\Sync Data\LevelDB/000003.log

Some files were not shown because too many files have changed in this diff Show More