Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

184 rindas
5.2 KiB

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