using MV485.db; using MV485.helper; using MV485.model; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; namespace MV485.Dlg { /// /// DlgAddDevice.xaml 的交互逻辑 /// public partial class DlgAddDevice : Window { private string PortName { get; set; } private int BaudRate { get; set; } private int[] SlaveAddreses { get; set; } public List NewSlaveList { get; private set; } public DlgAddDevice() { InitializeComponent(); Loaded += DlgAddDevice_Loaded; } private void DlgAddDevice_Loaded(object sender, RoutedEventArgs e) { LoadSerialPorts(); cmbBaudrate.ItemsSource = SerialHelper.BaudRates; mcmbAddress.SetItems(Enumerable.Range(1, 247).ToArray().Select(i => i.ToString()).ToArray(),false); var readInterval = ConfigManager.Instance.GetConfigValue(ConfigKey.ReadInterval, "60"); txtReadInterval.Text = readInterval; } private void LoadSerialPorts() { Dispatcher.BeginInvoke(new Action(() => { cmbPortNames.ItemsSource = SerialHelper.GetSerialPortsWithDetails(); if (cmbPortNames.Items.Count > 0) cmbPortNames.SelectedIndex = 0; //是否使用-基本配置选择的端口(应该用) var portName = ConfigManager.Instance.GetConfigValue(ConfigKey.ConfigPortName, ""); cmbPortNames.SelectedValue = portName; })); } private async void BtnOK_Click(object sender, RoutedEventArgs e) { if(cmbPortNames.SelectedItem == null) { MessageBox.Show(this, "请选择端口号", "提示", MessageBoxButton.OK, MessageBoxImage.Information); return; } if(cmbBaudrate.SelectedItem == null) { MessageBox.Show(this, "请选择波特率", "提示", MessageBoxButton.OK, MessageBoxImage.Information); return; } string addresses = mcmbAddress.GetSelectedItems(); if (string.IsNullOrWhiteSpace(addresses)) { MessageBox.Show(this, "请选择485地址", "提示", MessageBoxButton.OK, MessageBoxImage.Information); return; } if(!int.TryParse(txtReadInterval.Text,out int readInterval) || readInterval < 5 || readInterval > 1440) { MessageBox.Show(this, "请输入正确的间隔时间(5-1440)分钟", "提示", MessageBoxButton.OK, MessageBoxImage.Information); return; } PortName = cmbPortNames.SelectedValue.ToString(); BaudRate = int.Parse(cmbBaudrate.SelectedItem.ToString()); SlaveAddreses = addresses.Split(',').Select(int.Parse).ToArray(); string titleInfo = "正在插入数据库,请稍候..."; WaitWindow waitWindow = new WaitWindow(titleInfo) { Owner = this, WindowStartupLocation = WindowStartupLocation.CenterOwner }; waitWindow.Show(); NewSlaveList = new List(); foreach(var address in SlaveAddreses) { TSlave slave = new TSlave() { SlaveId = Guid.NewGuid().ToString().Replace("-",""), PortName = PortName, BaudRate = BaudRate, Address = address, RunFlag = chkRun.IsChecked == true ? 1 : 0, ReadImageFlag = chkReadImage.IsChecked == true ? 1 : 0, ReadInterval = readInterval, LastReadTime = "" }; try { bool blInsert = await Task.Run(() => { return DBSlave.InsertTSlave(slave); }); if (blInsert) { NewSlaveList.Add(slave); } } catch(Exception ex) { MessageBox.Show($"插入数据失败:{ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error); } } ConfigManager.Instance.UpdateConfig(ConfigKey.ReadInterval, readInterval.ToString()); waitWindow.Close(); DialogResult = true; this.Close(); } private void BtnClose_Click(object sender, RoutedEventArgs e) { DialogResult = false; this.Close(); } } }