时序下发对消息体长度进行替换优化、工作时长以及循环间隔时间下发报文优化

This commit is contained in:
MoYue 2024-08-08 18:27:58 +08:00
parent c9b5f5f054
commit 7ebecbf4ee
6 changed files with 166 additions and 25 deletions

View File

@ -186,6 +186,30 @@ namespace InSituLaboratory.Entities
return txt;
}
/// <summary>
/// 将文本文件读取到末尾
/// </summary>
/// <param name="pathAName"></param>
/// <returns></returns>
public static string ReadTXT_StreamReader(string pathAName)
{
StreamReader ObjectName = new StreamReader(pathAName);
return ObjectName.ReadToEnd();
}
/// <summary>
/// 逐行读取文件,返回数组
/// </summary>
/// <param name="pathAName"></param>
/// <returns></returns>
public static string[] ReadTXT_ReadAllLines(string pathAName)
{
string[] txtContent = null;
txtContent = System.IO.File.ReadAllLines(pathAName, Encoding.UTF8);
return txtContent;
}
#endregion
#region

View File

@ -48,7 +48,7 @@ namespace InSituLaboratory.Common
//crc
static byte nr_crc = 0;
/// <summary>
/// <summary>
/// 数据解析
/// </summary>
/// <param name="byteList"></param>
@ -331,6 +331,24 @@ namespace InSituLaboratory.Common
db.Insertable<DataParsingModelSqlSugar>(dataParsingModel).ExecuteCommand();
}
}
//反馈正常时序
if (dataNew[1] == 0x01 && dataNew[2] == 0x07)
{
}
}

View File

@ -0,0 +1,81 @@
using InSituLaboratory.Entities.ExperimentalStationEntities;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace InSituLaboratory.Common
{
/// <summary>
/// 基站返回的数据解析
/// </summary>
public class TXTDataParsing
{
//连接钥匙
private static readonly string ConnStr = System.Configuration.ConfigurationManager.ConnectionStrings["db"].ConnectionString;
//获取当前程序运行路径
private string Save_Path = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"数据记录\";
//系统状态表
public SysStatus sysStatus = new SysStatus();
//当前工作设备 0-待机 1-工作
public CurrentWorkEquipment currentWorkEquipment = new CurrentWorkEquipment();
//当前故障设备 0-正常 1-故障
public CurrentFaultyEquipment currentFaultyEquipment = new CurrentFaultyEquipment();
//包头
string head = "AABB";
//包尾
string tail = "EEFF";
//版本号 -固定
byte version = 0x01;
//crc
static byte nr_crc = 0;
/// <summary>
/// 数据解析
/// </summary>
/// <param name="byteList"></param>
public void ParsingData(List<byte> byteList)
{
//如果数组长度为0 舍弃
if (byteList.Count() == 0)
return;
//将报文中的内容截取出来 并保存至本地TXT文件内
string NR_TXT = "";
for (int i = 0; i < byteList.Count; i++)
{
NR_TXT += byteList[i].ToString("X2") + " ";
}
//SqlSugar配置文件
ConnectionConfig connectionConfig = new ConnectionConfig()
{
ConnectionString = ConnStr,
IsAutoCloseConnection = true,
DbType = DbType.Sqlite
};
//包头包尾校验
if ((byteList[0].ToString("X2") + byteList[1].ToString("X2")) != head || (byteList[byteList.Count -1].ToString("X2") + byteList[byteList.Count -2].ToString("X2")) != tail)
return;
}
}
}

View File

@ -14,6 +14,7 @@ using InSituLaboratory.IService;
using Prism.Commands;
using System.Windows;
using System.Windows.Forms;
using InSituLaboratory.Entities;
namespace InSituLaboratory.ViewModels.Pages
{
@ -97,22 +98,31 @@ namespace InSituLaboratory.ViewModels.Pages
/// <summary>
/// 读取文本文档
/// </summary>
/// <param name="o"></param>
/// <param name="o"></param>
public void DoRead(object o)
{
System.Windows.Forms.MessageBox.Show("暂无此项功能!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
string? info = null;
string? txtContent = null;
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Title = "选择文件";
openFileDialog.Multiselect = false;//选择多个文件
openFileDialog.RestoreDirectory = true;//跟踪上次打开的文件的目录
//openFileDialog.Filter = "所有文件(*.*)|*";
openFileDialog.Filter = "Text files(*.txt) | *.txt";
openFileDialog.CheckFileExists = true;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
info = openFileDialog.FileName;
}
if (!string.IsNullOrEmpty(info))
{
//逐行读取文件,返回数组
txtContent = tools.ReadTXT_StreamReader(info);
}
}
}

View File

@ -2289,16 +2289,17 @@ namespace InSituLaboratory.ViewModels.Pages
if (regex.IsMatch(w.ToString()))
{
int worktime = (int)w;
byteaq.Add((byte)(worktime & 0xFF));
byteaq.Add((byte)((worktime & 0xFF00) >> 8));
byteaq.Add((byte)((worktime & 0xFF0000) >> 16));
byteaq.Add((byte)((worktime >> 24) & 0xFF));
byteaq.Add((byte)((worktime & 0xFF0000) >> 16));
byteaq.Add((byte)((worktime & 0xFF00) >> 8));
byteaq.Add((byte)(worktime & 0xFF));
}
else
{
byte[] bytes = BitConverter.GetBytes(w);
Array.Reverse(bytes);
byte[] bytes1 = tools.PadArrayWithZeros(bytes, 4);
Array.Reverse(bytes1);
byteaq.AddRange(bytes1);
}
@ -2309,16 +2310,17 @@ namespace InSituLaboratory.ViewModels.Pages
if (regex.IsMatch(dm.ToString()))
{
int durationTime = (int)dm;
byteaq.Add((byte)(durationTime & 0xFF));
byteaq.Add((byte)((durationTime & 0xFF00) >> 8));
byteaq.Add((byte)((durationTime & 0xFF0000) >> 16));
byteaq.Add((byte)((durationTime >> 24) & 0xFF));
byteaq.Add((byte)((durationTime & 0xFF0000) >> 16));
byteaq.Add((byte)((durationTime & 0xFF00) >> 8));
byteaq.Add((byte)(durationTime & 0xFF));
}
else
{
byte[] bytesm = BitConverter.GetBytes(dm);
Array.Reverse(bytesm);
byte[] bytesm1 = tools.PadArrayWithZeros(bytesm, 4);
Array.Reverse(bytesm1);
byteaq.AddRange(bytesm1);
}
@ -2339,6 +2341,12 @@ namespace InSituLaboratory.ViewModels.Pages
throw new Exception("当前所下发的时序中电能板4总功耗" + EnergyBoard4 + "W" + " 已超过电能板4额定功率250W \n 时序无法下发,请修改设备后重试!!!");
}
}
var length_data = byteaq.Count() - 6;
byte[] bytes_length = BitConverter.GetBytes(length_data);
byteaq[6] = bytes_length[1];
byteaq[7] = bytes_length[0];
return byteaq;
}

View File

@ -154,7 +154,7 @@
<StackPanel HorizontalAlignment="Right" Orientation="Horizontal">
<!--刷新按钮-->
<TextBlock Text="{Binding sequentStatusModel.Status1,Mode=TwoWay}" HorizontalAlignment="Center" VerticalAlignment="Center" Width="100" Foreground="#EE6363"/>
<Button Content="刷新" Style="{StaticResource NormalButtonStyle}" Command="{Binding RefreshSeCommand}" Width="60" Margin="5,0" Background="#88409EFE" Name="sequent1Refresh">
<Button Content="刷新" Style="{StaticResource NormalButtonStyle}" Command="{Binding RefreshSeCommand}" Width="60" Margin="5,-2,5,0" Background="#88409EFE" Name="sequent1Refresh">
<Button.CommandParameter>
<MultiBinding Converter="{StaticResource ResourceKey=BtnConvert}">
<MultiBinding.Bindings>
@ -163,7 +163,7 @@
</MultiBinding>
</Button.CommandParameter>
</Button>
<Button Content="新建" Style="{StaticResource IconWithContentButtonStyle}" Command="{Binding ModifyS1Command}" Tag="&#xE603;" >
<Button Content="新建" Style="{StaticResource IconWithContentButtonStyle}" Command="{Binding ModifyS1Command}" Width="60" Margin="5,0" Tag="&#xE603;" >
<Button.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
<GradientStop Color="#FE582D" Offset="0"/>
@ -325,7 +325,7 @@
<StackPanel HorizontalAlignment="Right" Orientation="Horizontal">
<!--刷新按钮-->
<TextBlock Text="{Binding sequentStatusModel.Status2,Mode=TwoWay}" HorizontalAlignment="Center" VerticalAlignment="Center" Width="100" Foreground="#EE6363"/>
<Button Content="刷新" Style="{StaticResource NormalButtonStyle}" Command="{Binding RefreshSeCommand}" Width="60" Margin="5,0" Background="#88409EFE" Name="sequent2Refresh">
<Button Content="刷新" Style="{StaticResource NormalButtonStyle}" Command="{Binding RefreshSeCommand}" Width="60" Margin="5,-2,5,0" Background="#88409EFE" Name="sequent2Refresh">
<Button.CommandParameter>
<MultiBinding Converter="{StaticResource ResourceKey=BtnConvert}">
<MultiBinding.Bindings>
@ -335,7 +335,7 @@
</Button.CommandParameter>
</Button>
<Button Content="新建" Style="{StaticResource IconWithContentButtonStyle}" Command="{Binding ModifyS2Command}" Tag="&#xE603;" >
<Button Content="新建" Style="{StaticResource IconWithContentButtonStyle}" Command="{Binding ModifyS2Command}" Width="60" Margin="5,0" Tag="&#xE603;" >
<Button.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
<GradientStop Color="#FE582D" Offset="0"/>
@ -496,7 +496,7 @@
<StackPanel HorizontalAlignment="Right" Orientation="Horizontal">
<!--刷新按钮-->
<TextBlock Text="{Binding sequentStatusModel.Status3,Mode=TwoWay}" HorizontalAlignment="Center" VerticalAlignment="Center" Width="100" Foreground="#EE6363"/>
<Button Content="刷新" Style="{StaticResource NormalButtonStyle}" Command="{Binding RefreshSeCommand}" Width="60" Margin="5,0" Background="#88409EFE" Name="sequent3Refresh">
<Button Content="刷新" Style="{StaticResource NormalButtonStyle}" Command="{Binding RefreshSeCommand}" Width="60" Margin="5,-2,5,0" Background="#88409EFE" Name="sequent3Refresh">
<Button.CommandParameter>
<MultiBinding Converter="{StaticResource ResourceKey=BtnConvert}">
<MultiBinding.Bindings>
@ -506,7 +506,7 @@
</Button.CommandParameter>
</Button>
<Button Content="新建" Style="{StaticResource IconWithContentButtonStyle}" Command="{Binding ModifyS3Command}" Tag="&#xE603;" >
<Button Content="新建" Style="{StaticResource IconWithContentButtonStyle}" Command="{Binding ModifyS3Command}" Width="60" Margin="5,0" Tag="&#xE603;" >
<Button.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
<GradientStop Color="#FE582D" Offset="0"/>
@ -666,7 +666,7 @@
<StackPanel HorizontalAlignment="Right" Orientation="Horizontal">
<!--刷新按钮-->
<TextBlock Text="{Binding sequentStatusModel.Status4,Mode=TwoWay}" HorizontalAlignment="Center" VerticalAlignment="Center" Width="100" Foreground="#EE6363"/>
<Button Content="刷新" Style="{StaticResource NormalButtonStyle}" Command="{Binding RefreshSeCommand}" Width="60" Margin="5,0" Background="#88409EFE" Name="sequent4Refresh">
<Button Content="刷新" Style="{StaticResource NormalButtonStyle}" Command="{Binding RefreshSeCommand}" Width="60" Margin="5,-2,5,0" Background="#88409EFE" Name="sequent4Refresh">
<Button.CommandParameter>
<MultiBinding Converter="{StaticResource ResourceKey=BtnConvert}">
<MultiBinding.Bindings>
@ -676,7 +676,7 @@
</Button.CommandParameter>
</Button>
<Button Content="新建" Style="{StaticResource IconWithContentButtonStyle}" Command="{Binding ModifyS4Command}" Tag="&#xE603;" >
<Button Content="新建" Style="{StaticResource IconWithContentButtonStyle}" Command="{Binding ModifyS4Command}" Width="60" Margin="5,0" Tag="&#xE603;" >
<Button.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
<GradientStop Color="#FE582D" Offset="0"/>
@ -836,7 +836,7 @@
<StackPanel HorizontalAlignment="Right" Orientation="Horizontal">
<!--刷新按钮-->
<TextBlock Text="{Binding sequentStatusModel.Status5,Mode=TwoWay}" HorizontalAlignment="Center" VerticalAlignment="Center" Width="100" Foreground="#EE6363"/>
<Button Content="刷新" Style="{StaticResource NormalButtonStyle}" Command="{Binding RefreshSeCommand}" Width="60" Margin="5,0" Background="#88409EFE" Name="sequent5Refresh">
<Button Content="刷新" Style="{StaticResource NormalButtonStyle}" Command="{Binding RefreshSeCommand}" Width="60" Margin="5,-2,5,0" Background="#88409EFE" Name="sequent5Refresh">
<Button.CommandParameter>
<MultiBinding Converter="{StaticResource ResourceKey=BtnConvert}">
<MultiBinding.Bindings>
@ -846,7 +846,7 @@
</Button.CommandParameter>
</Button>
<Button Content="新建" Style="{StaticResource IconWithContentButtonStyle}" Command="{Binding ModifyS5Command}" Tag="&#xE603;" >
<Button Content="新建" Style="{StaticResource IconWithContentButtonStyle}" Command="{Binding ModifyS5Command}" Width="60" Margin="5,0" Tag="&#xE603;" >
<Button.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
<GradientStop Color="#FE582D" Offset="0"/>