添加校时

This commit is contained in:
MoYue 2023-03-11 08:34:39 +08:00
parent 6dcf9b82fa
commit 255a87096d
5 changed files with 130 additions and 13 deletions

View File

@ -6,6 +6,7 @@
<!--数据库连接信息-->
<connectionStrings>
<add name="db" connectionString="server=127.0.0.1;port=3306;user=root;password=zttZTT1234;database=monitoringtechnology;Allow User Variables=True;" />
<!--<add name="db" connectionString="server=81.68.201.26;port=3306;user=root;password=123456;database=monitoringtechnology;Allow User Variables=True;" />-->
</connectionStrings>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

View File

@ -43,8 +43,11 @@ namespace MonitoringTechnology.Ble
private readonly CharacteristicDictionary GattCharacteristics = new CharacteristicDictionary();
public static FileModel FileModel { get; set; } = new FileModel();
public event TypedEventHandler<GattCharacteristic, byte[]> CharacteristicValueChanged;
public event TypedEventHandler<BleDevice, bool> ConnectionStateChanged;
public event TypedEventHandler<GattCharacteristic, byte[]> CharacteristicValueChanged;//数据解析 -- 报文返回
public event TypedEventHandler<GattCharacteristic, string> ReceiveValueChanged; //数据解析 --自定义数据返回
public event TypedEventHandler<BleDevice, bool> ConnectionStateChanged;//连接状态变化
public static MonitoringSensorModel monitoringSensorModel { get; set; } = new MonitoringSensorModel();
static LocalDataAccess localDataAccess = new LocalDataAccess();
@ -272,7 +275,7 @@ namespace MonitoringTechnology.Ble
private static string _localtime => $"{DateTime.Now: yyyy-MM-dd HH:mm:ss.fff}";
/// <summary>
/// 收到数据
/// 收到数据 ----报文fanhui
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
@ -286,12 +289,21 @@ namespace MonitoringTechnology.Ble
ParsingData(data.ToList());
}
/// <summary>
/// 自定义数据接收--数据解析
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
private void ReceiveValueChangedChanged(GattCharacteristic sender, string data)
{
ReceiveValueChanged?.Invoke(sender, data);
}
/// <summary>
/// 定义一个委托,用于传值老的版本号
/// </summary>
Action<byte[]> func = new Action<byte[]>(SystemOperationView.Setbbh);
string _message = "";
byte[] bbh = new byte[4] { 0x00, 0x00, 0x00, 0x00 };
/// <summary>
/// 解析数据
@ -299,6 +311,8 @@ namespace MonitoringTechnology.Ble
/// <param name="byteList"></param>
private void ParsingData(List<byte> byteList)
{
string _message = "";
//校验当前List是否为空或者长度
if (byteList == null || byteList.Count == 0)
return;
@ -364,7 +378,7 @@ namespace MonitoringTechnology.Ble
switch (_fun_code)
{
//数据解析
//数据解析 ---实时数据
case 0x02:
switch (_kind)
{
@ -467,6 +481,9 @@ namespace MonitoringTechnology.Ble
AttitudeDisplayView.monitoringSensor.F_DegreesZ = monitoringSensorModel.degrees_z;
localDataAccess.write("INSERT INTO monitoringsensormodel(F_CreateDate,F_DatetimeSensor,F_Tem,F_Hum,F_Pressure,F_AccelerationX,F_AccelerationY,F_AccelerationZ,F_AngularVelocityX,F_AngularVelocityY,F_AngularVelocityZ,F_DegreesX,F_DegreesY,F_DegreesZ) VALUES('" + monitoringSensorModel.f_CreateDate + "','" + monitoringSensorModel._datetime_Sensor + "','" + monitoringSensorModel._Tem + "','" + monitoringSensorModel._Hum + "','" + monitoringSensorModel._pressure + "','" + monitoringSensorModel._acceleration_X + "','" + monitoringSensorModel._acceleration_Y + "','" + monitoringSensorModel._acceleration_Z + "','" + monitoringSensorModel._angularVelocity_X + "','" + monitoringSensorModel._angularVelocity_Y + "','" + monitoringSensorModel._angularVelocity_Z + "','" + monitoringSensorModel.degrees_x + "','" + monitoringSensorModel.degrees_y + "','" + monitoringSensorModel.degrees_z + "');");
_message = "状态数据获取成功: 温度:"+ monitoringSensorModel._Tem + "℃ 湿度:" + monitoringSensorModel._Hum + "% 气压:" + monitoringSensorModel._pressure + "KPa 俯仰角:" + monitoringSensorModel._acceleration_X + "° 横滚角:"+ monitoringSensorModel._acceleration_Y + "° 偏航角:" + monitoringSensorModel._acceleration_Z + "° 角速度X" + monitoringSensorModel._angularVelocity_X + "m/s² 角速度Y" + monitoringSensorModel._angularVelocity_Y + "m/s² 角速度Z" + monitoringSensorModel._angularVelocity_Z + "m/s² 角度X" + monitoringSensorModel.degrees_x + "rad/s 角度Y" + monitoringSensorModel.degrees_y + "rad/s 角度Z" + monitoringSensorModel.degrees_z + "rad/s" ;
ReceiveValueChangedChanged(null, _message);
break;
//主系统数据
@ -508,27 +525,47 @@ namespace MonitoringTechnology.Ble
switch (byteList[11])
{
case 0x00:
_message += "获取成功";
_message += "版本查询:获取成功";
break;
case 0x01:
_message += "空";
_message += "版本查询:空";
ReceiveValueChangedChanged(null, _message);
break;
case 0x02:
_message += "设备忙";
_message += "版本查询:设备忙";
ReceiveValueChangedChanged(null, _message);
break;
default:
break;
}
//显示版本号
SystemOperationView.systemOperationViewModel.VersionQueryData = ((int)bbh[0]).ToString() + "." + ((int)bbh[1]).ToString() + "." + ((int)bbh[2]).ToString() + "." + ((int)bbh[3]).ToString();
_message += " 版本号:" + SystemOperationView.systemOperationViewModel.VersionQueryData;
ReceiveValueChangedChanged(null, _message);
break;
//设备回复文件数据指令
case 0x66:
int _start = Convert.ToInt32(byteList[6].ToString("X2") + byteList[7].ToString("X2") + byteList[8].ToString("X2") + byteList[9].ToString("X2"), 16);
int _Length = Convert.ToInt32(byteList[10].ToString("X2") + byteList[11].ToString("X2"), 16);
systemOperationView._send(_start, _Length);
break;
//校时
case 0x06:
//UTC时间
dt = startTime.AddSeconds(Convert.ToInt32(byteList[6].ToString("X2") + byteList[7].ToString("X2") + byteList[8].ToString("X2") + byteList[9].ToString("X2"), 16));
if ((time_DataBase - dt).TotalMinutes < 60)
{
_message = "系统校时成功";
ReceiveValueChangedChanged(null, _message);
}
else
{
_message = "系统校时失败";
ReceiveValueChangedChanged(null, _message);
}
break;
default:
break;
}

View File

@ -230,6 +230,28 @@ namespace MonitoringTechnology.Common
#endregion
/// 16进制原码字符串转字节数组
/// </summary>
/// <param name="hexString">"AABBCC"或"AA BB CC"格式的字符串</param>
/// <returns></returns>
public static byte[] ConvertHexStringToBytes(string hexString)
{
hexString = hexString.Replace(" ", "");
if (hexString.Length % 2 != 0)
{
throw new ArgumentException("参数长度不正确");
}
byte[] returnBytes = new byte[hexString.Length / 2];
for (int i = 0; i < returnBytes.Length; i++)
{
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
}
return returnBytes;
}
public static List<bool> O_C(string o_c)
{
List<bool> result = new List<bool>();

View File

@ -104,6 +104,8 @@
Click="buttonSend_Click" Template="{StaticResource ButtonTemplate}"/>
<Button Grid.Column="7" x:Name="buttonRead" Content="读取名称" Width="90" Height="30" Margin="10,-2,10,6"
Click="buttonRead_Click" Template="{StaticResource ButtonTemplate}"/>
<Button Grid.Column="8" x:Name="TimeCheck" Content="系统校时" Width="90" Height="30" Margin="10,-2,10,6"
Click="TimeCheck_Click" Template="{StaticResource ButtonTemplate}"/>
</Grid>
<Label Grid.Row="1" Content="日志记录" Foreground="White"/>
<!-- Log区禁止 ListBox 横向滚动 TextBlock 才能实现自动换行 -->

View File

@ -141,6 +141,17 @@ namespace MonitoringTechnology.Views
}
/// <summary>
/// 系统校时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TimeCheck_Click(object sender, RoutedEventArgs e)
{
TimeSpan ts = DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0);
send_port_time(Convert.ToInt64(ts.TotalSeconds).ToString("X2"));
}
/// <summary>
/// 收数据
/// </summary>
@ -151,6 +162,16 @@ namespace MonitoringTechnology.Views
AddLog($"收到数据 <<< {args.ToHex()}");
}
/// <summary>
/// 自定义数据显示功能 --数据解析
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
private void BleDevice_ReceiveValueChanged(GattCharacteristic sender, string data)
{
AddLog($"{data}");
}
/// <summary>
/// 连接按钮
/// </summary>
@ -322,7 +343,7 @@ namespace MonitoringTechnology.Views
bool success = await systemOperationViewModel.BleDevice.Write(_send);
if (success)
{
AddLog("版本查询指令发送成功");
AddLog("已发送版本查询指令,请稍等!");
PreservationData(_send.ToList(), "版本查询指令");
}
}
@ -406,7 +427,7 @@ namespace MonitoringTechnology.Views
bool success = await systemOperationViewModel.BleDevice.Write(_send);
if (success)
{
AddLog("版本升级指令发送成功");
AddLog("已发送版本升级指令,请稍等!");
PreservationData(_send.ToList(), "版本升级指令");
}
}
@ -423,8 +444,9 @@ namespace MonitoringTechnology.Views
public SystemOperationView(BleDevice device) : this()
{
systemOperationViewModel.BleDevice = device;
systemOperationViewModel.BleDevice.CharacteristicValueChanged += BleDevice_CharacteristicValueChanged;
systemOperationViewModel.BleDevice.ConnectionStateChanged += BleDevice_ConnectionStateChanged;
systemOperationViewModel.BleDevice.CharacteristicValueChanged += BleDevice_CharacteristicValueChanged;//收数据
systemOperationViewModel.BleDevice.ConnectionStateChanged += BleDevice_ConnectionStateChanged;//连接变化
systemOperationViewModel.BleDevice.ReceiveValueChanged += BleDevice_ReceiveValueChanged;//自定义数据显示功能
DataContext = systemOperationViewModel;
isSelect = true;//已选择蓝牙设备
if (device.IsConnected == true)
@ -461,6 +483,37 @@ namespace MonitoringTechnology.Views
});
}
/// <summary>
/// 时间同步
/// </summary>
/// <param name="time"></param>
public async void send_port_time(string time)
{
if (isConnection)
{
byte[] time_byte = tools.ConvertHexStringToBytes(time);
int a = 0xFE + 0xEF + 0x00 + 0x08 + 0x00 + 0x06;
for (int i = 0; i < time_byte.Length; i++)
{
a += time_byte[i];
}
//取十六进制最低两位
a = a & 0xFF;
string send_mes = "FEEF00080006" + time + a.ToString("X2") + "16";
byte[] bytea = tools.ConvertHexStringToBytes(send_mes);
//调用发送的那个方法
bool success = await systemOperationViewModel.BleDevice.Write(bytea);
if (success)
{
AddLog("时间正在同步中,请稍等!");
}
}
else
{
AddLog("请搜索附近蓝牙设备并连接后重试!!!");
}
}
/// <summary>
/// int数组转化为byte数组
/// </summary>
@ -587,5 +640,7 @@ namespace MonitoringTechnology.Views
tools.AddLgoToTXT(FileModel.File_Name + FileModel.File_Time.ToString("yyyy-MM-dd") + "日志" + ".txt", FileModel.File_Path + FileModel.File_Time.ToString("yyyy-MM-dd") + @"\", _localtime + " " + type + ": " + rec_16 + "\r\n");
}
#endregion
}
}