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();
}
}
}