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 WeightResults = new List(); private Action action; private string AverageResult; /// /// 登陆验证 /// /// /// private void Login_Click(object sender, EventArgs e) { } /// /// 自动登录 /// /// /// 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); } } /// /// 处理串口数据 /// /// 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(); // 清空结果列表,准备下一次称重 } } } /// /// 向ListBox中添加数据 /// /// private void AddWeightData(string data) { LogBox.Items.Add(data); LogBox.TopIndex = LogBox.Items.Count - 1; } /// /// 按的是回车键时清空当前选中的 TextBox /// /// /// 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(如果有) } } } /// /// 写入测试 /// /// /// private void WriteInTestButton_Click(object sender, EventArgs e) { AddWeightData(LANConnect.Instance.WriteTxt(XmlUtil.Instance.BaseInnerTextReader("OutputPath"), $"{RollNumberTextBox.Text}.txt", "测试11111").ToString()); } /// /// 剪切测试 /// /// /// private void CutTestButton_Click(object sender, EventArgs e) { AddWeightData(LANConnect.Instance.MoveFile(XmlUtil.Instance.BaseInnerTextReader("InputPath"), XmlUtil.Instance.BaseInnerTextReader("ArchievePath"), $"{RollNumberTextBox.Text}.txt").ToString()); } /// /// 读取测试 /// /// /// private void ReadTestButton_Click(object sender, EventArgs e) { AddWeightData(LANConnect.Instance.ReadTxt(XmlUtil.Instance.BaseInnerTextReader("InputPath"), $"{RollNumberTextBox.Text}.txt")); } } }