Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

166 рядки
4.4 KiB

  1. using ModbusDemo.Uitls;
  2. using Prism.Commands;
  3. using Prism.Mvvm;
  4. using Prism.Regions;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.IO.Ports;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Windows;
  12. namespace ModbusDemo.VIewModel
  13. {
  14. class SettingsUCViewModel : BindableBase
  15. {
  16. //控制页面跳转
  17. private readonly IRegionManager _regionManager;
  18. //断开连接的命令
  19. public DelegateCommand DisConnectionCmm { get; set; }
  20. //链接窗口的命令
  21. public DelegateCommand ConnectionCmm { get; set; }
  22. //获取串口
  23. private SerialPort _serialPort;
  24. //设置串口名字
  25. private string _portName = "COM1";
  26. public string PortName
  27. {
  28. get { return _portName; }
  29. set
  30. {
  31. _portName = value;
  32. RaisePropertyChanged();
  33. }
  34. }
  35. //设置波特率
  36. private string _baudRate = "9600";
  37. public string BaudRate
  38. {
  39. get { return _baudRate; }
  40. set
  41. {
  42. _baudRate = value;
  43. RaisePropertyChanged();
  44. }
  45. }
  46. //设置数据位
  47. private string _dataBits = "8";
  48. public string DataBits
  49. {
  50. get { return _dataBits; }
  51. set
  52. {
  53. _dataBits = value;
  54. RaisePropertyChanged();
  55. }
  56. }
  57. //设置校验位
  58. private Parity _parity = Parity.Even;
  59. public Parity Parity
  60. {
  61. get { return _parity; }
  62. set
  63. {
  64. _parity = value;
  65. RaisePropertyChanged();
  66. }
  67. }
  68. //设置停止位
  69. private StopBits _stopBits = StopBits.One;
  70. public StopBits StopBits
  71. {
  72. get { return _stopBits; }
  73. set
  74. {
  75. _stopBits = value;
  76. RaisePropertyChanged();
  77. }
  78. }
  79. public SettingsUCViewModel()
  80. {
  81. }
  82. /// <summary>
  83. /// 从容器中获取创建的窗口
  84. /// </summary>
  85. /// <param name="serialPort"></param>
  86. public SettingsUCViewModel(SerialPort serialPort, IRegionManager regionManager)
  87. {
  88. _serialPort = serialPort;
  89. ConnectionCmm = new DelegateCommand(Connection);
  90. DisConnectionCmm = new DelegateCommand(DisConnection);
  91. _regionManager = regionManager;
  92. }
  93. private void DisConnection()
  94. {
  95. if (_serialPort.IsOpen)
  96. {
  97. _serialPort.Close();
  98. MessageBox.Show("连接已经断开");
  99. }
  100. }
  101. /// <summary>
  102. /// 串口参数设置
  103. /// </summary>
  104. private void Connection()
  105. {
  106. //TODO,做数据的判空处理
  107. if (!_serialPort.IsOpen)
  108. {
  109. _serialPort.PortName = GetComboBoxItemValue(this.PortName);
  110. _serialPort.BaudRate = int.Parse(GetComboBoxItemValue(this.BaudRate));
  111. _serialPort.Parity = this.Parity;
  112. _serialPort.StopBits = this.StopBits;
  113. _serialPort.DataBits = int.Parse(GetComboBoxItemValue(this.DataBits));
  114. //读取超时时间
  115. _serialPort.ReadTimeout = 500;
  116. //写入超时时间
  117. _serialPort.WriteTimeout = 500;
  118. try
  119. {
  120. _serialPort.Open();
  121. MessageBox.Show("串口链接成功");
  122. _regionManager.Regions["ModbusRegion"].RequestNavigate("CoilUC");
  123. }
  124. catch (Exception)
  125. {
  126. MessageBox.Show("串口已经链接,请先断开链接在尝试","warning",MessageBoxButton.OK,MessageBoxImage.Warning);
  127. }
  128. }
  129. }
  130. /// <summary>
  131. /// 处理下拉框的选择信息
  132. /// </summary>
  133. /// <param name="ComboBoxItem"></param>
  134. /// <returns></returns>
  135. private string GetComboBoxItemValue(string ComboBoxItem)
  136. {
  137. string displayText = ComboBoxItem.ToString();
  138. string cleanText = displayText.Replace("System.Windows.Controls.ComboBoxItem: ", "");
  139. return cleanText;
  140. }
  141. }
  142. }