You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

175 lines
6.2 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using HighWayIot.Common.LANConnectConfig;
using HighWayIot.Common.XmlConfig;
using HighWayIot.TouchSocket;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace HighWayIot.Winform.MainForm
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
CheckForIllegalCrossThreadCalls = false;
TouchSocketCOM.Instance.ComAction += WeightData;
action += AddWeightData;
WeightCountComboBox.DataSource = Enumerable.Range(1, 24).ToList();
RollNumberTextBox.KeyDown += TextBox_KeyDown;
}
private string WholeData = string.Empty;
private string TempData = string.Empty;
private List<double> WeightResults = new List<double>();
private Action<string> action;
private string AverageResult;
/// <summary>
/// 登陆验证
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Login_Click(object sender, EventArgs e)
{
}
/// <summary>
/// 自动登录
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void LoginForm_Load(object sender, EventArgs e)
{
TouchSocketCOM.Instance.CreateConnection();
}
private void TestButton_Click(object sender, EventArgs e)
{
try
{
AddWeightData(XmlUtil.Instance.BaseInnerTextReader("InputPath"));
AddWeightData(XmlUtil.Instance.BaseInnerTextReader("OutputPath"));
foreach (var s in XmlUtil.Instance.ConfigReader())
{
AddWeightData(s);
}
}
catch
{
MessageBox.Show("配置文件读取失败,请检查配置文件是否存在或格式是否正确。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
/// <summary>
/// 处理串口数据
/// </summary>
/// <param name="data"></param>
public void WeightData(string data)
{
data.Trim();
TempData = TempData + data;
// 检查数据是否包含单次称量结束标志g
if (TempData.Contains("g"))
{
// 提取数据去掉结束标志g后的部分
WholeData = TempData.Substring(0, TempData.IndexOf("g")).Trim();
TempData = string.Empty;
// 检查数据是否为数字(浮点数)格式
if (double.TryParse(WholeData, out double result))
{
WeightResults.Add(result); // 将结果添加到列表中
}
else
{
action.Invoke($"第[{WeightResults.Count}]次称重数据格式转换失败");
return;
}
action.Invoke($"第{WeightResults.Count}次称重:{WholeData}g");
// 检查是否达到了预期的称重次数
if (WeightResults.Count.ToString() == WeightCountComboBox.Text)
{
double resultAvg = WeightResults.Average(); // 计算平均值
AverageResult = resultAvg.ToString("F5"); // 保留5位小数
action.Invoke($"膜卷号[{RollNumberTextBox.Text}]称重结束,结果为[{AverageResult}],请上传结果");
action.Invoke($"-----------------------------------------------------");
WeightResultTextBox.Text = AverageResult; // 结果输出到文本框
WeightResults.Clear(); // 清空结果列表,准备下一次称重
}
}
}
/// <summary>
/// 向ListBox中添加数据
/// </summary>
/// <param name="data"></param>
private void AddWeightData(string data)
{
LogBox.Items.Add(data);
LogBox.TopIndex = LogBox.Items.Count - 1;
}
/// <summary>
/// 按的是回车键时清空当前选中的 TextBox
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TextBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
TextBox currentTextBox = sender as TextBox;
if (currentTextBox != null)
{
//回车后的业务逻辑
//先核对膜卷号
//准备开始称重
action.Invoke($"膜卷号[{RollNumberTextBox.Text}]开始称重");
WeightResults.Clear();
WeightResultTextBox.Clear();
e.Handled = true; // 阻止触发 AcceptButton如果有
}
}
}
/// <summary>
/// 写入测试
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void WriteInTestButton_Click(object sender, EventArgs e)
{
AddWeightData(LANConnect.Instance.WriteTxt(XmlUtil.Instance.BaseInnerTextReader("OutputPath"), $"{RollNumberTextBox.Text}.txt", "测试11111").ToString());
}
/// <summary>
/// 剪切测试
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CutTestButton_Click(object sender, EventArgs e)
{
AddWeightData(LANConnect.Instance.MoveFile(XmlUtil.Instance.BaseInnerTextReader("InputPath"), XmlUtil.Instance.BaseInnerTextReader("ArchievePath"), $"{RollNumberTextBox.Text}.txt").ToString());
}
/// <summary>
/// 读取测试
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ReadTestButton_Click(object sender, EventArgs e)
{
AddWeightData(LANConnect.Instance.ReadTxt(XmlUtil.Instance.BaseInnerTextReader("InputPath"), $"{RollNumberTextBox.Text}.txt"));
}
}
}