SettingViewModel.cs 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979
  1. using ICSharpCode.AvalonEdit.Search;
  2. using MaterialDesignThemes.Wpf;
  3. using NPOI.SS.Formula.Functions;
  4. using Opc.Ua;
  5. using Prism.Commands;
  6. using Prism.Events;
  7. using Prism.Ioc;
  8. using Prism.Mvvm;
  9. using Prism.Regions;
  10. using Prism.Services.Dialogs;
  11. using System;
  12. using System.Collections.Generic;
  13. using System.Collections.ObjectModel;
  14. using System.ComponentModel;
  15. using System.Globalization;
  16. using System.Linq;
  17. using System.Text;
  18. using System.Windows;
  19. using TeamAAS_VP.Controls;
  20. using TeamAAS_VP.Core;
  21. using TeamAAS_VP.Core.Cameras;
  22. using TeamAAS_VP.Enums;
  23. using TeamAAS_VP.Events;
  24. using TeamAAS_VP.Models;
  25. using TeamAAS_VP.Resources.Languages;
  26. using TeamAAS_VP.ViewModels.User;
  27. using TouchSocket.Core;
  28. using WPFLocalizeExtension.Engine;
  29. namespace TeamAAS_VP.ViewModels
  30. {
  31. public class SettingViewModel : BindableBase
  32. {
  33. IRegionManager _regionManager;
  34. IEventAggregator _eventAggregator;
  35. IContainerProvider _container;
  36. IDialogService _dialogService;
  37. bool isFirstLoad = true;
  38. #region 属性
  39. private Management _management;
  40. public Management management
  41. {
  42. get { return _management; }
  43. set { SetProperty(ref _management, value); }
  44. }
  45. private DeviceConfiguration _DeviceConfig;
  46. /// <summary>
  47. /// 设备配置参数
  48. /// </summary>
  49. public DeviceConfiguration DeviceConfig
  50. {
  51. get { return _DeviceConfig; }
  52. set { SetProperty(ref _DeviceConfig, value); }
  53. }
  54. private ModbusTcpMasterConfig _ModbusTcpMasterConfig = new ModbusTcpMasterConfig();
  55. /// <summary>
  56. /// Modbus TCP 主站配置(MDC 电批)
  57. /// </summary>
  58. public ModbusTcpMasterConfig ModbusTcpMasterConfig
  59. {
  60. get { return _ModbusTcpMasterConfig; }
  61. set { SetProperty(ref _ModbusTcpMasterConfig, value); }
  62. }
  63. private RobotInfo _SelectRobot;
  64. /// <summary>
  65. /// 选中的机器人
  66. /// </summary>
  67. public RobotInfo SelectRobot
  68. {
  69. get { return _SelectRobot; }
  70. set { SetProperty(ref _SelectRobot, value);
  71. if (value!=null && (value.RobotBrand == RobotBrand.XYZ_Platform || value.RobotBrand == RobotBrand.XYZU_Platform))
  72. {
  73. RobotSelectedPlc = management.DeviceConfig.Plcs.FirstOrDefault(p=>p.Id==value.PLC);
  74. var root= management.RobotService.GetRobot(SelectRobot.Id);
  75. if (root != null)
  76. {
  77. ResultsValues.Clear();
  78. var res= root.GetNodesValue();
  79. for (int i = 0; i < res.Count; i++)
  80. {
  81. if (res[i].StatusCode.Code != 2150891520)
  82. {
  83. ResultsValues.Add(res[i].Value.ToString());
  84. }
  85. else
  86. {
  87. break;
  88. }
  89. }
  90. }
  91. }
  92. }
  93. }
  94. private FeederInfo _SelectFeeder;
  95. /// <summary>
  96. /// 选中的Feeder
  97. /// </summary>
  98. public FeederInfo SelectFeeder
  99. {
  100. get { return _SelectFeeder; }
  101. set { SetProperty(ref _SelectFeeder, value); }
  102. }
  103. private PlcInfo _SelectPlc;
  104. public PlcInfo SelectPlc
  105. {
  106. get { return _SelectPlc; }
  107. set { SetProperty(ref _SelectPlc, value); }
  108. }
  109. private ObservableCollection<string> _ResultsValues = new ObservableCollection<string>();
  110. public ObservableCollection<string> ResultsValues { get => _ResultsValues; set => _ResultsValues = value; }
  111. private CameraInfo _SelectCamera;
  112. /// <summary>
  113. /// 选中的Camera
  114. /// </summary>
  115. public CameraInfo SelectCamera
  116. {
  117. get { return _SelectCamera; }
  118. set { SetProperty(ref _SelectCamera, value); }
  119. }
  120. private double _Title1;
  121. public double Title1
  122. {
  123. get { return _Title1; }
  124. set { SetProperty(ref _Title1, value); }
  125. }
  126. private double _Title2;
  127. public double Title2
  128. {
  129. get { return _Title2; }
  130. set { SetProperty(ref _Title2, value); }
  131. }
  132. private double _Title3;
  133. public double Title3
  134. {
  135. get { return _Title3; }
  136. set { SetProperty(ref _Title3, value); }
  137. }
  138. private double _Title4;
  139. public double Title4
  140. {
  141. get { return _Title4; }
  142. set { SetProperty(ref _Title4, value); }
  143. }
  144. private double _Body1;
  145. public double Body1
  146. {
  147. get { return _Body1; }
  148. set { SetProperty(ref _Body1, value); }
  149. }
  150. private double _Body2;
  151. public double Body2
  152. {
  153. get { return _Body2; }
  154. set { SetProperty(ref _Body2, value); }
  155. }
  156. private double _Body3;
  157. public double Body3
  158. {
  159. get { return _Body3; }
  160. set { SetProperty(ref _Body3, value); }
  161. }
  162. private double _Body4;
  163. public double Body4
  164. {
  165. get { return _Body4; }
  166. set { SetProperty(ref _Body4, value); }
  167. }
  168. private double _Captions1;
  169. public double Captions1
  170. {
  171. get { return _Captions1; }
  172. set { SetProperty(ref _Captions1, value); }
  173. }
  174. private double _Captions2;
  175. public double Captions2
  176. {
  177. get { return _Captions2; }
  178. set { SetProperty(ref _Captions2, value); }
  179. }
  180. private double _Captions3;
  181. public double Captions3
  182. {
  183. get { return _Captions3; }
  184. set { SetProperty(ref _Captions3, value); }
  185. }
  186. private double _Captions4;
  187. public double Captions4
  188. {
  189. get { return _Captions4; }
  190. set { SetProperty(ref _Captions4, value); }
  191. }
  192. private PlcInfo _RobotSelectedPlc;
  193. public PlcInfo RobotSelectedPlc
  194. {
  195. get { return _RobotSelectedPlc; }
  196. set { SetProperty(ref _RobotSelectedPlc, value);
  197. if (SelectRobot != null)
  198. {
  199. if (value != null)
  200. {
  201. SelectRobot.PLC=value.Id;
  202. }
  203. else
  204. {
  205. SelectRobot.PLC = Guid.Empty;
  206. }
  207. }
  208. }
  209. }
  210. #endregion
  211. #region 命令
  212. public DelegateCommand LoadedCommand { get; set; }
  213. private DelegateCommand _AddRobotCommand;
  214. public DelegateCommand AddRobotCommand =>
  215. _AddRobotCommand ?? (_AddRobotCommand = new DelegateCommand(ExecuteAddRobotCommand));
  216. private DelegateCommand _RemoveCommand;
  217. public DelegateCommand RemoveCommand =>
  218. _RemoveCommand ?? (_RemoveCommand = new DelegateCommand(ExecuteRemoveCommand));
  219. private DelegateCommand _AddFeederCommand;
  220. public DelegateCommand AddFeederCommand =>
  221. _AddFeederCommand ?? (_AddFeederCommand = new DelegateCommand(ExecuteAddFeederCommand));
  222. private DelegateCommand _RemoveFeederCommand;
  223. public DelegateCommand RemoveFeederCommand =>
  224. _RemoveFeederCommand ?? (_RemoveFeederCommand = new DelegateCommand(ExecuteRemoveFeederCommand));
  225. private DelegateCommand<string> _SelectLanguageCommand;
  226. public DelegateCommand<string> SelectLanguageCommand =>
  227. _SelectLanguageCommand ?? (_SelectLanguageCommand = new DelegateCommand<string>(ExecuteSelectLanguageCommand));
  228. private DelegateCommand _SaveRobotsCommand;
  229. public DelegateCommand SaveRobotsCommand =>
  230. _SaveRobotsCommand ?? (_SaveRobotsCommand = new DelegateCommand(ExecuteSaveRobotsCommand));
  231. private DelegateCommand _SaveFeedersCommand;
  232. public DelegateCommand SaveFeedersCommand =>
  233. _SaveFeedersCommand ?? (_SaveFeedersCommand = new DelegateCommand(ExecuteSaveFeedersCommand));
  234. private DelegateCommand<string> _SaveCommunicateCommand;
  235. public DelegateCommand<string> SaveCommunicateCommand =>
  236. _SaveCommunicateCommand ?? (_SaveCommunicateCommand = new DelegateCommand<string>(ExecuteSaveCommunicateCommand));
  237. private DelegateCommand _AddCameraCommand;
  238. public DelegateCommand AddCameraCommand =>
  239. _AddCameraCommand ?? (_AddCameraCommand = new DelegateCommand(ExecuteAddCameraCommand));
  240. private DelegateCommand _EditCameraCommand;
  241. public DelegateCommand EditCameraCommand =>
  242. _EditCameraCommand ?? (_EditCameraCommand = new DelegateCommand(ExecuteEditCameraCommand));
  243. private DelegateCommand _RemoveCameraCommand;
  244. public DelegateCommand RemoveCameraCommand =>
  245. _RemoveCameraCommand ?? (_RemoveCameraCommand = new DelegateCommand(ExecuteRemoveCameraCommand));
  246. private DelegateCommand _SaveCamerasCommand;
  247. public DelegateCommand SaveCamerasCommand =>
  248. _SaveCamerasCommand ?? (_SaveCamerasCommand = new DelegateCommand(ExecuteSaveCamerasCommand));
  249. private DelegateCommand _AddPlcCommand;
  250. public DelegateCommand AddPlcCommand =>
  251. _AddPlcCommand ?? (_AddPlcCommand = new DelegateCommand(ExecuteAddPlcCommand));
  252. private DelegateCommand _RemovePlcCommand;
  253. public DelegateCommand RemovePlcCommand =>
  254. _RemovePlcCommand ?? (_RemovePlcCommand = new DelegateCommand(ExecuteRemovePlcCommand));
  255. private DelegateCommand _SavePlcsCommand;
  256. public DelegateCommand SavePlcsCommand =>
  257. _SavePlcsCommand ?? (_SavePlcsCommand = new DelegateCommand(ExecuteSavePlcsCommand));
  258. #endregion
  259. #region 事件
  260. #endregion
  261. public SettingViewModel(IRegionManager regionManager, IEventAggregator ea, IContainerProvider container, IDialogService dialogService)
  262. {
  263. _regionManager = regionManager;
  264. _eventAggregator = ea;
  265. _container = container;
  266. _dialogService = dialogService;
  267. management = _container.Resolve<Management>();
  268. LoadedCommand = new DelegateCommand(OnLoad);
  269. //订阅权限登录事件
  270. _eventAggregator.GetEvent<UserLoginNotification>().Subscribe(LoginChange);
  271. }
  272. #region 方法
  273. #region 机器人
  274. private void ExecuteAddRobotCommand()
  275. {
  276. _dialogService.ShowDialog("AddRobot", rst =>
  277. {
  278. //对话框关闭之后的回调函数,可以在这解析结果。
  279. ButtonResult result1 = rst.Result;
  280. if (result1 == ButtonResult.OK)
  281. {
  282. var param = rst.Parameters.GetValue<RobotInfo>("Robot");
  283. DeviceConfig.Robots.Add(new RobotInfo()
  284. {
  285. Id = param.Id,
  286. RobotName = param.RobotName,
  287. ConnectType = param.ConnectType,
  288. RobotBrand = param.RobotBrand,
  289. IP = param.IP,
  290. Port = param.Port,
  291. Terminator = param.Terminator,
  292. });
  293. _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = $"{Lang.添加完成}", Duration = 1 });
  294. }
  295. });
  296. }
  297. void ExecuteRemoveCommand()
  298. {
  299. if (MessageBox.Show(Lang.是否移除机器人, $"AAS", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
  300. {
  301. // 找到要删除的机器人
  302. var robotToRemove = DeviceConfig.Robots.FirstOrDefault(r => r.Id == SelectRobot.Id);
  303. if (robotToRemove != null)
  304. {
  305. DeviceConfig.Robots.Remove(robotToRemove);
  306. _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = Lang.移除完成, Duration = 1 });
  307. }
  308. }
  309. }
  310. async void ExecuteSaveRobotsCommand()
  311. {
  312. var view = new ShowMessage($"AAS", Lang.是否保存机器人);
  313. //show the dialog
  314. var result = await DialogHost.Show(view, "RootDialog", null, null, null);
  315. if (result != null && result is bool)
  316. {
  317. if (((bool)result))
  318. {
  319. management.DeviceConfig.Robots = DeviceConfig.Robots;
  320. management.SaveRobotsDeviceConfig();
  321. management.DeviceConfig.Robots = DeviceConfig.Robots;
  322. _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 });
  323. }
  324. }
  325. }
  326. #endregion
  327. #region 相机
  328. /// <summary>
  329. /// 保存所有相机
  330. /// </summary>
  331. async void ExecuteSaveCamerasCommand()
  332. {
  333. var view = new ShowMessage($"AAS", Lang.是否保存相机配置);
  334. //show the dialog
  335. var result = await DialogHost.Show(view, "RootDialog", null, null, null);
  336. if (result != null && result is bool)
  337. {
  338. if (((bool)result))
  339. {
  340. management.DeviceConfig.Cameras = DeviceConfig.Cameras;
  341. management.SaveCamerasDeviceConfig();
  342. management.DeviceConfig.Cameras = DeviceConfig.Cameras;
  343. _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 });
  344. }
  345. }
  346. }
  347. /// <summary>
  348. /// 移除相机
  349. /// </summary>
  350. void ExecuteRemoveCameraCommand()
  351. {
  352. if (MessageBox.Show(Lang.是否移除相机, $"AAS", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
  353. {
  354. // 找到要删除的相机
  355. var cameraToRemove = DeviceConfig.Cameras.FirstOrDefault(r => r.Id == SelectCamera.Id);
  356. if (cameraToRemove != null)
  357. {
  358. DeviceConfig.Cameras.Remove(cameraToRemove);
  359. _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 });
  360. }
  361. }
  362. }
  363. /// <summary>
  364. /// 编辑相机
  365. /// </summary>
  366. void ExecuteEditCameraCommand()
  367. {
  368. if (SelectCamera == null) return;
  369. bool isSelectedCameraBrandSucced = false;
  370. CameraBrand cameraBrand = CameraBrand.HikRobot_MVS;
  371. IDialogParameters parameters1 = new DialogParameters();
  372. parameters1.Add("CameraBrand", SelectCamera.CameraBrand);
  373. _dialogService.ShowDialog("SelectCameraBrand", parameters1, rst =>
  374. {
  375. if (rst.Result == ButtonResult.OK)
  376. {
  377. isSelectedCameraBrandSucced = true;
  378. cameraBrand = rst.Parameters.GetValue<CameraBrand>("CameraBrand");
  379. }
  380. else
  381. {
  382. return;
  383. }
  384. });
  385. if (!isSelectedCameraBrandSucced) { return; }
  386. (bool isInstalled, string version) result = (false, "");
  387. string softwarename = "";
  388. switch (cameraBrand)
  389. {
  390. case CameraBrand.HikRobot_MVS:
  391. softwarename = "MVS";
  392. result = MvCamera.CheckSoftwareInstalled();
  393. break;
  394. case CameraBrand.Basler_Pylon:
  395. softwarename = "Pylon 7";
  396. result = BaslerCamera.CheckSoftwareInstalled();
  397. break;
  398. case CameraBrand.IRayple:
  399. softwarename = "MV Viewer";
  400. result = AHuaCamera.CheckSoftwareInstalled();
  401. break;
  402. case CameraBrand.Cognex:
  403. softwarename = "Cognex VisionPro";
  404. result = CognexCamera.CheckSoftwareInstalled();
  405. break;
  406. case CameraBrand.Galaxy:
  407. softwarename = "Galaxy Viewer";
  408. result = GalaxyCamera.CheckSoftwareInstalled();
  409. break;
  410. default:
  411. break;
  412. }
  413. if (!result.isInstalled)
  414. {
  415. if (string.IsNullOrEmpty(result.version))
  416. {
  417. //未安装
  418. MessageBox.Show(Lang.CameraSDKCheck_Message1.Replace("{name}", softwarename), "AAS", MessageBoxButton.OK, MessageBoxImage.Asterisk);
  419. }
  420. else
  421. {
  422. //版本较低
  423. MessageBox.Show(Lang.CameraSDKCheck_Message2.Replace("{name}", softwarename).Replace("{version}", result.version).Replace("\\n", Environment.NewLine), "AAS", MessageBoxButton.OK, MessageBoxImage.Asterisk);
  424. }
  425. return;
  426. }
  427. IDialogParameters parameters = new DialogParameters();
  428. parameters.Add("CameraBrand", cameraBrand);
  429. parameters.Add("Camera", SelectCamera.Copy());
  430. _dialogService.ShowDialog("EditCamera", parameters, rst =>
  431. {
  432. //对话框关闭之后的回调函数,可以在这解析结果。
  433. ButtonResult result1 = rst.Result;
  434. if (result1 == ButtonResult.OK)
  435. {
  436. var param = rst.Parameters.GetValue<CameraInfo>("Camera");
  437. SelectCamera.CameraName = param.CameraName;
  438. SelectCamera.SerialNumber = param.SerialNumber;
  439. SelectCamera.Model = param.Model;
  440. SelectCamera.ManufacturerName = param.ManufacturerName;
  441. SelectCamera.CameraType = param.CameraType;
  442. SelectCamera.CameraBrand = param.CameraBrand;
  443. SelectCamera.CameraIp = param.CameraIp;
  444. _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 });
  445. }
  446. });
  447. }
  448. /// <summary>
  449. /// 增加相机
  450. /// </summary>
  451. void ExecuteAddCameraCommand()
  452. {
  453. bool isSelectedCameraBrandSucced = false;
  454. CameraBrand cameraBrand = CameraBrand.HikRobot_MVS;
  455. _dialogService.ShowDialog("SelectCameraBrand", rst =>
  456. {
  457. if (rst.Result == ButtonResult.OK)
  458. {
  459. isSelectedCameraBrandSucced = true;
  460. cameraBrand = rst.Parameters.GetValue<CameraBrand>("CameraBrand");
  461. }
  462. else
  463. {
  464. return;
  465. }
  466. });
  467. if (!isSelectedCameraBrandSucced) { return; }
  468. ;
  469. (bool isInstalled, string version) result = (false, "");
  470. string softwarename = "";
  471. switch (cameraBrand)
  472. {
  473. case CameraBrand.HikRobot_MVS:
  474. softwarename = "MVS";
  475. result = MvCamera.CheckSoftwareInstalled();
  476. break;
  477. case CameraBrand.Basler_Pylon:
  478. softwarename = "Pylon 7";
  479. result = BaslerCamera.CheckSoftwareInstalled();
  480. break;
  481. case CameraBrand.IRayple:
  482. softwarename = "MV Viewer";
  483. result = AHuaCamera.CheckSoftwareInstalled();
  484. break;
  485. case CameraBrand.Cognex:
  486. softwarename = "Cognex VisionPro";
  487. result = CognexCamera.CheckSoftwareInstalled();
  488. break;
  489. case CameraBrand.Galaxy:
  490. softwarename = "Galaxy Viewer";
  491. result = GalaxyCamera.CheckSoftwareInstalled();
  492. break;
  493. default:
  494. break;
  495. }
  496. if (!result.isInstalled)
  497. {
  498. if (string.IsNullOrEmpty(result.version))
  499. {
  500. //未安装
  501. MessageBox.Show(Lang.CameraSDKCheck_Message1.Replace("{name}", softwarename), "AAS", MessageBoxButton.OK, MessageBoxImage.Asterisk);
  502. }
  503. else
  504. {
  505. //版本较低
  506. MessageBox.Show(Lang.CameraSDKCheck_Message2.Replace("{name}", softwarename).Replace("{version}", result.version).Replace("\\n", Environment.NewLine), "AAS", MessageBoxButton.OK, MessageBoxImage.Asterisk);
  507. }
  508. return;
  509. }
  510. IDialogParameters parameters = new DialogParameters();
  511. parameters.Add("CameraBrand", cameraBrand);
  512. _dialogService.ShowDialog("AddCamera", parameters, rst =>
  513. {
  514. //对话框关闭之后的回调函数,可以在这解析结果。
  515. ButtonResult result1 = rst.Result;
  516. if (result1 == ButtonResult.OK)
  517. {
  518. var param = rst.Parameters.GetValue<CameraInfo>("Camera");
  519. DeviceConfig.Cameras.Add(new CameraInfo()
  520. {
  521. Id = param.Id,
  522. CameraName = param.CameraName,
  523. SerialNumber = param.SerialNumber,
  524. Model = param.Model,
  525. ManufacturerName = param.ManufacturerName,
  526. CameraType = param.CameraType,
  527. CameraBrand = param.CameraBrand,
  528. CameraIp = param.CameraIp
  529. });
  530. _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 });
  531. }
  532. });
  533. }
  534. #endregion
  535. #region Feeder
  536. void ExecuteAddFeederCommand()
  537. {
  538. _dialogService.ShowDialog("AddFeeder", rst =>
  539. {
  540. //对话框关闭之后的回调函数,可以在这解析结果。
  541. ButtonResult result1 = rst.Result;
  542. if (result1 == ButtonResult.OK)
  543. {
  544. var param = rst.Parameters.GetValue<FeederInfo>("Feeder");
  545. DeviceConfig.Feeders.Add(new FeederInfo()
  546. {
  547. Id = param.Id,
  548. FeederName = param.FeederName,
  549. ConnectType = param.ConnectType,
  550. FeederBrand = param.FeederBrand,
  551. IP = param.IP,
  552. Port = param.Port
  553. });
  554. _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = Lang.添加完成, Duration = 1 });
  555. }
  556. });
  557. }
  558. void ExecuteRemoveFeederCommand()
  559. {
  560. if (MessageBox.Show(Lang.是否移除Feeder, " AAS", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
  561. {
  562. // 找到要删除的机器人
  563. var feederToRemove = DeviceConfig.Feeders.FirstOrDefault(r => r.Id == SelectFeeder.Id);
  564. if (feederToRemove != null)
  565. {
  566. DeviceConfig.Feeders.Remove(feederToRemove);
  567. _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = Lang.移除完成, Duration = 1 });
  568. }
  569. }
  570. }
  571. async void ExecuteSaveFeedersCommand()
  572. {
  573. var view = new ShowMessage($"AAS", Lang.是否保存Feeder);
  574. //show the dialog
  575. var result = await DialogHost.Show(view, "RootDialog", null, null, null);
  576. if (result != null && result is bool)
  577. {
  578. if (((bool)result))
  579. {
  580. management.DeviceConfig.Feeders = DeviceConfig.Feeders;
  581. management.SaveFeederDeviceConfig();
  582. _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 });
  583. }
  584. }
  585. }
  586. #endregion
  587. #region PLC
  588. /// <summary>
  589. /// 保存PLC
  590. /// </summary>
  591. async void ExecuteSavePlcsCommand()
  592. {
  593. var view = new ShowMessage($"AAS", Lang.是否保存PLC);
  594. //show the dialog
  595. var result = await DialogHost.Show(view, "RootDialog", null, null, null);
  596. if (result != null && result is bool)
  597. {
  598. if (((bool)result))
  599. {
  600. management.DeviceConfig.Plcs = DeviceConfig.Plcs;
  601. management.SavePlcDeviceConfig();
  602. management.DeviceConfig.Plcs = DeviceConfig.Plcs;
  603. _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 });
  604. }
  605. }
  606. }
  607. /// <summary>
  608. /// 移除PLC
  609. /// </summary>
  610. void ExecuteRemovePlcCommand()
  611. {
  612. if (MessageBox.Show(Lang.是否移除PLC, $"AAS", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
  613. {
  614. // 找到要删除的plc
  615. var plcToRemove = DeviceConfig.Plcs.FirstOrDefault(r => r.Id == SelectPlc.Id);
  616. if (plcToRemove != null)
  617. {
  618. DeviceConfig.Plcs.Remove(plcToRemove);
  619. _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = Lang.移除完成, Duration = 1 });
  620. }
  621. }
  622. }
  623. /// <summary>
  624. /// 增加PLC
  625. /// </summary>
  626. void ExecuteAddPlcCommand()
  627. {
  628. _dialogService.ShowDialog("AddPlc", rst =>
  629. {
  630. //对话框关闭之后的回调函数,可以在这解析结果。
  631. ButtonResult result1 = rst.Result;
  632. if (result1 == ButtonResult.OK)
  633. {
  634. var param = rst.Parameters.GetValue<PlcInfo>("PLC");
  635. DeviceConfig.Plcs.Add(new PlcInfo()
  636. {
  637. Id = param.Id,
  638. Name = param.Name,
  639. CommunicationType = param.CommunicationType,
  640. EndpointUrl = param.EndpointUrl,
  641. PlcIp = param.PlcIp,
  642. PlcPort = param.PlcPort,
  643. PlcForwardEnabled = param.PlcForwardEnabled,
  644. PlcPortDevice = param.PlcPortDevice,
  645. PlcQualityDevice = param.PlcQualityDevice,
  646. PlcDataStartDevice = param.PlcDataStartDevice,
  647. PlcReadyBitDevice = param.PlcReadyBitDevice,
  648. PlcOkBitDevice = param.PlcOkBitDevice,
  649. PlcNgBitDevice = param.PlcNgBitDevice,
  650. PlcReceiveBitDevice = param.PlcReceiveBitDevice,
  651. PlcHeartbeatDevice = param.PlcHeartbeatDevice,
  652. PlcHeartbeatIntervalMs = param.PlcHeartbeatIntervalMs,
  653. PlcBitTestDevice = param.PlcBitTestDevice,
  654. PlcMaxDataBytes = param.PlcMaxDataBytes,
  655. });
  656. _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = Lang.添加完成, Duration = 1 });
  657. }
  658. });
  659. }
  660. #endregion
  661. #region 通讯
  662. async void ExecuteSaveCommunicateCommand(string parm)
  663. {
  664. if (parm == "TCPIP")
  665. {
  666. var view = new ShowMessage($"AAS", Lang.是否保存后台TCP通讯配置);
  667. //show the dialog
  668. var result = await DialogHost.Show(view, "RootDialog", null, null, null);
  669. if (result != null && result is bool)
  670. {
  671. if (((bool)result))
  672. {
  673. management.DeviceConfig.BgCommunicate = DeviceConfig.BgCommunicate;
  674. management.SaveBgTcpIpDeviceConfig();
  675. _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 });
  676. }
  677. }
  678. }
  679. else if (parm == "ModbusTCP")
  680. {
  681. var view = new ShowMessage($"AAS", Lang.是否保存后台ModbusTCP通讯配置);
  682. //show the dialog
  683. var result = await DialogHost.Show(view, "RootDialog", null, null, null);
  684. if (result != null && result is bool)
  685. {
  686. if (((bool)result))
  687. {
  688. management.DeviceConfig.BgModbusCommunicate = DeviceConfig.BgModbusCommunicate;
  689. management.SaveBgModbusTcpDeviceConfig();
  690. _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 });
  691. }
  692. }
  693. }
  694. else if (parm == "ModbusTCPMaster")
  695. {
  696. var view = new ShowMessage("AAS", Lang.是否保存ModbusTCP主站配置);
  697. var result = await DialogHost.Show(view, "RootDialog", null, null, null);
  698. if (result != null && result is bool && (bool)result)
  699. {
  700. management.ModbusTcpMasterConfig = ModbusTcpMasterConfig.Clone();
  701. management.SaveModbusTcpMasterDeviceConfig();
  702. management.InitModbusTcpMaster();
  703. _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 });
  704. }
  705. }
  706. else if (parm == "EIP")
  707. {
  708. var view = new ShowMessage("AAS", Lang.是否保存ModbusTCP主站配置);
  709. var result = await DialogHost.Show(view, "RootDialog", null, null, null);
  710. if (result != null && result is bool && (bool)result)
  711. {
  712. management.DeviceConfig.BgEthernetIPCommunicate = DeviceConfig.BgEthernetIPCommunicate;
  713. management.SaveBgEthernetIPDeviceConfig();
  714. _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 });
  715. }
  716. }
  717. else if (parm == "SFIS")
  718. {
  719. var view = new ShowMessage("AAS", "是否保存 SFIS 通讯配置");
  720. var result = await DialogHost.Show(view, "RootDialog", null, null, null);
  721. if (result != null && result is bool && (bool)result)
  722. {
  723. management.DeviceConfig.BgSfisCommunicate = DeviceConfig.BgSfisCommunicate;
  724. management.SaveBgSfisDeviceConfig();
  725. _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 });
  726. }
  727. }
  728. else
  729. {
  730. return;
  731. }
  732. }
  733. #endregion
  734. #region 语言
  735. void ExecuteSelectLanguageCommand(string language)
  736. {
  737. if (string.Equals(language, "ChineseSimplified"))
  738. {
  739. management.CurrentLanguage = Enums.Language.ChineseSimplified;
  740. management.SaveLanguageDeviceConfig();
  741. var culture = new CultureInfo("zh-CN");
  742. App.Current.Dispatcher.Thread.CurrentCulture = culture;
  743. App.Current.Dispatcher.Thread.CurrentUICulture = culture;
  744. LocalizeDictionary.Instance.Culture = culture;
  745. Lang.Culture = culture;
  746. Application.Current.Resources["DefaultFont"] = new System.Windows.Media.FontFamily("Microsoft YaHei");
  747. _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 0.5 });
  748. }
  749. else if (string.Equals(language, "ChineseTraditional"))
  750. {
  751. management.CurrentLanguage = Enums.Language.ChineseTraditional;
  752. management.SaveLanguageDeviceConfig();
  753. var culture = new CultureInfo("zh-TW");
  754. App.Current.Dispatcher.Thread.CurrentCulture = culture;
  755. App.Current.Dispatcher.Thread.CurrentUICulture = culture;
  756. LocalizeDictionary.Instance.Culture = culture;
  757. Lang.Culture = culture;
  758. Application.Current.Resources["DefaultFont"] = new System.Windows.Media.FontFamily("Microsoft YaHei");
  759. _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 0.5 });
  760. }
  761. else if (string.Equals(language, "English"))
  762. {
  763. management.CurrentLanguage = Enums.Language.English;
  764. management.SaveLanguageDeviceConfig();
  765. var culture = new CultureInfo("en");
  766. App.Current.Dispatcher.Thread.CurrentCulture = culture;
  767. App.Current.Dispatcher.Thread.CurrentUICulture = culture;
  768. LocalizeDictionary.Instance.Culture = culture;
  769. Lang.Culture = culture;
  770. Application.Current.Resources["DefaultFont"] = new System.Windows.Media.FontFamily("Segoe UI");
  771. _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 0.5 });
  772. }
  773. else if (string.Equals(language, "Japanese"))
  774. {
  775. management.CurrentLanguage = Enums.Language.Japanese;
  776. management.SaveLanguageDeviceConfig();
  777. var culture = new CultureInfo("ja-JP");
  778. App.Current.Dispatcher.Thread.CurrentCulture = culture;
  779. App.Current.Dispatcher.Thread.CurrentUICulture = culture;
  780. LocalizeDictionary.Instance.Culture = culture;
  781. Lang.Culture = culture;
  782. Application.Current.Resources["DefaultFont"] = new System.Windows.Media.FontFamily("Segoe UI");
  783. _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 0.5 });
  784. }
  785. }
  786. #endregion
  787. private void OnLoad()
  788. {
  789. DeviceConfig = management.DeviceConfig.Clone();
  790. ModbusTcpMasterConfig = management.ModbusTcpMasterConfig.Clone();
  791. if (_container.Resolve<Management>().CurrentUser.userPart == Enums.UserPart.Operator)
  792. {
  793. IsAllowEdit = false;
  794. }
  795. else
  796. {
  797. IsAllowEdit = true;
  798. }
  799. if (isFirstLoad)
  800. {
  801. Title1 = (double)Application.Current.Resources["Font.Size.Title1"];
  802. Title2 = (double)Application.Current.Resources["Font.Size.Title2"];
  803. Title3 = (double)Application.Current.Resources["Font.Size.Title3"];
  804. Title4 = (double)Application.Current.Resources["Font.Size.Title4"];
  805. Body1 = (double)Application.Current.Resources["Font.Size.Body1"];
  806. Body2 = (double)Application.Current.Resources["Font.Size.Body2"];
  807. Body3 = (double)Application.Current.Resources["Font.Size.Body3"];
  808. Body4 = (double)Application.Current.Resources["Font.Size.Body4"];
  809. Captions1 = (double)Application.Current.Resources["Font.Size.Captions1"];
  810. Captions2 = (double)Application.Current.Resources["Font.Size.Captions2"];
  811. Captions3 = (double)Application.Current.Resources["Font.Size.Captions3"];
  812. Captions4 = (double)Application.Current.Resources["Font.Size.Captions4"];
  813. this.PropertyChanged += OnPropertyChanged;
  814. isFirstLoad = false;
  815. }
  816. }
  817. private void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
  818. {
  819. switch (e.PropertyName)
  820. {
  821. case "Title1":
  822. Application.Current.Resources["Font.Size.Title1"] = Title1;
  823. break;
  824. case "Title2":
  825. Application.Current.Resources["Font.Size.Title2"] = Title2;
  826. break;
  827. case "Title3":
  828. Application.Current.Resources["Font.Size.Title3"] = Title3;
  829. break;
  830. case "Title4":
  831. Application.Current.Resources["Font.Size.Title4"] = Title4;
  832. break;
  833. case "Body1":
  834. Application.Current.Resources["Font.Size.Body1"] = Body1;
  835. break;
  836. case "Body2":
  837. Application.Current.Resources["Font.Size.Body2"] = Body2;
  838. break;
  839. case "Body3":
  840. Application.Current.Resources["Font.Size.Body3"] = Body3;
  841. break;
  842. case "Body4":
  843. Application.Current.Resources["Font.Size.Body4"] = Body4;
  844. break;
  845. case "Captions1":
  846. Application.Current.Resources["Font.Size.Captions1"] = Captions1;
  847. break;
  848. case "Captions2":
  849. Application.Current.Resources["Font.Size.Captions2"] = Captions2;
  850. break;
  851. case "Captions3":
  852. Application.Current.Resources["Font.Size.Captions3"] = Captions3;
  853. break;
  854. case "Captions4":
  855. Application.Current.Resources["Font.Size.Captions4"] = Captions4;
  856. break;
  857. default:
  858. break;
  859. }
  860. }
  861. #endregion
  862. private bool _IsAllowEdit = false;
  863. public bool IsAllowEdit
  864. {
  865. get { return _IsAllowEdit; }
  866. set { SetProperty(ref _IsAllowEdit, value); }
  867. }
  868. private void LoginChange(Models.User user)
  869. {
  870. if (user.userPart == Enums.UserPart.Operator)
  871. {
  872. IsAllowEdit = false;
  873. }
  874. else
  875. {
  876. IsAllowEdit = true;
  877. }
  878. }
  879. }
  880. }