IConfigService.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.ObjectModel;
  4. using System.Threading.Tasks;
  5. using TeamAAS_VP.Models;
  6. using TeamAAS_VP.Models.Calibration;
  7. using TeamAAS_VP.Models.Feeder;
  8. using TeamAAS_VP.Models.Lights;
  9. namespace TeamAAS_VP.Interfaces
  10. {
  11. /// <summary>
  12. /// 配置管理服务:管理系统设置、相机、机器人、Feeder、PLC、后台通讯等配置的增删改查与持久化。
  13. /// 实现类负责在内存与持久化存储(例如文件或数据库)之间同步数据,并提供同步与异步的加载/保存接口。
  14. /// </summary>
  15. public interface IConfigService : IDisposable
  16. {
  17. // Load/Save
  18. /// <summary>
  19. /// 同步加载所有配置(从持久化存储读取并更新内存中的配置)。
  20. /// </summary>
  21. /// <remarks>
  22. /// 该方法为阻塞调用,适用于应用启动时或明确需要同步加载的场景。
  23. /// 实现应保证在发生错误时记录日志并在必要时抛出异常以通知调用方。
  24. /// </remarks>
  25. void LoadAll();
  26. /// <summary>
  27. /// 异步加载所有配置(从持久化存储读取并更新内存中的配置)。
  28. /// </summary>
  29. /// <returns>一个表示异步加载操作的任务。</returns>
  30. Task LoadAllAsync();
  31. /// <summary>
  32. /// 同步保存所有当前内存中的配置到持久化存储。
  33. /// </summary>
  34. /// <remarks>
  35. /// 该方法为阻塞调用,适用于需要立即保证配置持久化的场景。
  36. /// </remarks>
  37. void SaveAll();
  38. /// <summary>
  39. /// 异步保存所有当前内存中的配置到持久化存储。
  40. /// </summary>
  41. /// <returns>表示保存操作完成的任务。</returns>
  42. Task SaveAllAsync();
  43. // Cameras
  44. /// <summary>
  45. /// 获取所有已注册的相机信息的只读集合。
  46. /// </summary>
  47. /// <returns>相机信息的只读集合快照。</returns>
  48. IReadOnlyCollection<CameraInfo> GetAllCameras();
  49. /// <summary>
  50. /// 根据标识获取单个相机信息。
  51. /// </summary>
  52. /// <param name="id">相机的唯一标识符。</param>
  53. /// <returns>对应的 <see cref="CameraInfo"/> 实例;若未找到则返回 null。</returns>
  54. CameraInfo GetCamera(Guid id);
  55. /// <summary>
  56. /// 新增或更新指定的相机信息。
  57. /// </summary>
  58. /// <param name="camera">要新增或更新的相机信息,不能为 null。</param>
  59. /// <exception cref="ArgumentNullException">当 <paramref name="camera"/> 为 null 时抛出。</exception>
  60. CameraInfo AddOrUpdateCamera(CameraInfo camera);
  61. /// <summary>
  62. /// 移除指定标识的相机信息。
  63. /// </summary>
  64. /// <param name="id">要移除的相机的唯一标识符。</param>
  65. /// <returns>如果找到并移除成功则返回 true;否则返回 false。</returns>
  66. bool RemoveCamera(Guid id);
  67. /// <summary>
  68. /// 判断是否包含指定标识的相机配置。
  69. /// </summary>
  70. /// <param name="id">相机唯一标识符。</param>
  71. /// <returns>存在则返回 true,否则返回 false。</returns>
  72. bool ContainsCamera(Guid id);
  73. // Robots
  74. /// <summary>
  75. /// 获取所有已注册的机器人信息的只读集合。
  76. /// </summary>
  77. /// <returns>机器人信息的只读集合快照。</returns>
  78. IReadOnlyCollection<RobotInfo> GetAllRobots();
  79. /// <summary>
  80. /// 根据标识获取单个机器人信息。
  81. /// </summary>
  82. /// <param name="id">机器人的唯一标识符。</param>
  83. /// <returns>对应的 <see cref="RobotInfo"/> 实例;若未找到则返回 null。</returns>
  84. RobotInfo GetRobot(Guid id);
  85. /// <summary>
  86. /// 新增或更新指定的机器人信息。
  87. /// </summary>
  88. /// <param name="robot">要新增或更新的机器人信息,不能为 null。</param>
  89. /// <exception cref="ArgumentNullException">当 <paramref name="robot"/> 为 null 时抛出。</exception>
  90. RobotInfo AddOrUpdateRobot(RobotInfo robot);
  91. /// <summary>
  92. /// 移除指定标识的机器人信息。
  93. /// </summary>
  94. /// <param name="id">要移除的机器人的唯一标识符。</param>
  95. /// <returns>如果找到并移除成功则返回 true;否则返回 false。</returns>
  96. bool RemoveRobot(Guid id);
  97. /// <summary>
  98. /// 判断是否包含指定标识的机器人配置。
  99. /// </summary>
  100. /// <param name="id">机器人唯一标识符。</param>
  101. /// <returns>存在则返回 true,否则返回 false。</returns>
  102. bool ContainsRobot(Guid id);
  103. /// <summary>
  104. /// 修改指定机器人id的步进距离
  105. /// </summary>
  106. /// <param name="id">机器人唯一标识符。</param>
  107. /// <param name="stepDistance">步进距离</param>
  108. /// <returns></returns>
  109. bool UpdateRobotStepDistance(Guid id, double stepDistance);
  110. /// <summary>
  111. /// 获取指定机器人Id的步进距离
  112. /// </summary>
  113. /// <param name="id"></param>
  114. /// <returns></returns>
  115. double GetRobotStepDistance(Guid id);
  116. // Feeders
  117. /// <summary>
  118. /// 获取所有已注册的 Feeder 信息的只读集合。
  119. /// </summary>
  120. /// <returns>Feeder 信息的只读集合快照。</returns>
  121. IReadOnlyCollection<FeederInfo> GetAllFeeders();
  122. /// <summary>
  123. /// 根据标识获取单个 Feeder 信息。
  124. /// </summary>
  125. /// <param name="id">Feeder 的唯一标识符。</param>
  126. /// <returns>对应的 <see cref="FeederInfo"/> 实例;若未找到则返回 null。</returns>
  127. FeederInfo GetFeeder(Guid id);
  128. /// <summary>
  129. /// 新增或更新指定的 Feeder 信息。
  130. /// </summary>
  131. /// <param name="feeder">要新增或更新的 Feeder 信息,不能为 null。</param>
  132. /// <exception cref="ArgumentNullException">当 <paramref name="feeder"/> 为 null 时抛出。</exception>
  133. FeederInfo AddOrUpdateFeeder(FeederInfo feeder);
  134. /// <summary>
  135. /// 移除指定标识的 Feeder 信息。
  136. /// </summary>
  137. /// <param name="id">要移除的 Feeder 的唯一标识符。</param>
  138. /// <returns>如果找到并移除成功则返回 true;否则返回 false。</returns>
  139. bool RemoveFeeder(Guid id);
  140. /// <summary>
  141. /// 判断是否包含指定标识的 Feeder 配置。
  142. /// </summary>
  143. /// <param name="id">Feeder 唯一标识符。</param>
  144. /// <returns>存在则返回 true,否则返回 false。</returns>
  145. bool ContainsFeeder(Guid id);
  146. // PLCs
  147. /// <summary>
  148. /// 获取所有已注册的 PLC 信息的只读集合。
  149. /// </summary>
  150. /// <returns>PLC 信息的只读集合快照。</returns>
  151. IReadOnlyCollection<PlcInfo> GetAllPlcs();
  152. /// <summary>
  153. /// 根据标识获取单个 PLC 信息。
  154. /// </summary>
  155. /// <param name="id">PLC 的唯一标识符。</param>
  156. /// <returns>对应的 <see cref="PlcInfo"/> 实例;若未找到则返回 null。</returns>
  157. PlcInfo GetPlc(Guid id);
  158. /// <summary>
  159. /// 新增或更新指定的 PLC 信息。
  160. /// </summary>
  161. /// <param name="plc">要新增或更新的 PLC 信息,不能为 null。</param>
  162. /// <exception cref="ArgumentNullException">当 <paramref name="plc"/> 为 null 时抛出。</exception>
  163. PlcInfo AddOrUpdatePlc(PlcInfo plc);
  164. /// <summary>
  165. /// 移除指定标识的 PLC 信息。
  166. /// </summary>
  167. /// <param name="id">要移除的 PLC 的唯一标识符。</param>
  168. /// <returns>如果找到并移除成功则返回 true;否则返回 false。</returns>
  169. bool RemovePlc(Guid id);
  170. /// <summary>
  171. /// 判断是否包含指定标识的 PLC 配置。
  172. /// </summary>
  173. /// <param name="id">PLC 唯一标识符。</param>
  174. /// <returns>存在则返回 true,否则返回 false。</returns>
  175. bool ContainsPlc(Guid id);
  176. // Plc Addresses
  177. /// <summary>
  178. /// Get all PlcAddress entries
  179. /// </summary>
  180. /// <returns></returns>
  181. PlcAddressConfig GetPlcAddresses();
  182. // Background TCP
  183. /// <summary>
  184. /// 获取后台通讯(TCP/IP)配置。
  185. /// </summary>
  186. /// <returns>当前后台 TCP 配置快照。</returns>
  187. BgTcpIP GetBgTcp();
  188. /// <summary>
  189. /// 设置后台通讯(TCP/IP)配置(仅更新内存)。
  190. /// </summary>
  191. /// <param name="cfg">新的后台 TCP 配置,不能为 null。</param>
  192. /// <exception cref="ArgumentNullException">当 <paramref name="cfg"/> 为 null 时抛出。</exception>
  193. void SetBgTcp(BgTcpIP cfg);
  194. /// <summary>
  195. /// 将当前内存中的后台 TCP 配置保存到持久化存储。
  196. /// </summary>
  197. void SaveBgTcp();
  198. // Background Modbus
  199. /// <summary>
  200. /// 获取后台 Modbus TCP 配置。
  201. /// </summary>
  202. /// <returns>当前后台 Modbus TCP 配置快照。</returns>
  203. BgModbusTcp GetBgModbusTcp();
  204. /// <summary>
  205. /// 设置后台 Modbus TCP 配置(仅更新内存)。
  206. /// </summary>
  207. /// <param name="cfg">新的后台 Modbus TCP 配置,不能为 null。</param>
  208. /// <exception cref="ArgumentNullException">当 <paramref name="cfg"/> 为 null 时抛出。</exception>
  209. void SetBgModbusTcp(BgModbusTcp cfg);
  210. /// <summary>
  211. /// 将当前内存中的后台 Modbus TCP 配置保存到持久化存储。
  212. /// </summary>
  213. void SaveBgModbusTcp();
  214. //系统设置
  215. /// <summary>
  216. /// 获取系统设置
  217. /// </summary>
  218. /// <returns></returns>
  219. SystemConfiguration GetSystemConfiguration();
  220. /// <summary>
  221. /// 保存系统设置
  222. /// </summary>
  223. void SaveSystemConfiguration(SystemConfiguration systemConfiguration);
  224. //清料任务
  225. /// <summary>
  226. /// 获取所有清料任务
  227. /// </summary>
  228. /// <returns></returns>
  229. IReadOnlyCollection<FeederClearWork> GetAllClearanceTasks();
  230. /// <summary>
  231. /// 新增或更新清料任务
  232. /// </summary>
  233. /// <param name="task"></param>
  234. /// <returns></returns>
  235. FeederClearWork AddOrUpdateClearanceTask(FeederClearWork task);
  236. /// <summary>
  237. /// 移除清料任务
  238. /// </summary>
  239. /// <param name="id"></param>
  240. /// <returns></returns>
  241. bool RemoveClearanceTask(Guid id);
  242. /// <summary>
  243. /// 清除所有清料任务
  244. /// </summary>
  245. void ClearAllClearanceTasks();
  246. /// <summary>
  247. /// 判断是否包含指定标识的清料任务
  248. /// </summary>
  249. /// <param name="id"></param>
  250. /// <returns></returns>
  251. bool ContainsClearanceTask(Guid id);
  252. /// <summary>
  253. /// 根据标识获取单个清料任务信息
  254. /// </summary>
  255. /// <param name="id"></param>
  256. /// <returns></returns>
  257. FeederClearWork GetClearanceTask(Guid id);
  258. /// <summary>
  259. /// 判断是否包含指定编号的清料任务
  260. /// </summary>
  261. /// <param name="taskNumber"></param>
  262. /// <returns></returns>
  263. bool ContainsClearanceTaskByNumber(int taskNumber);
  264. /// <summary>
  265. /// 根据编号获取单个清料任务信息
  266. /// </summary>
  267. /// <param name="taskNumber"></param>
  268. /// <returns></returns>
  269. FeederClearWork GetClearanceTaskByNumber(int taskNumber);
  270. // Light controllers and channels
  271. /// <summary>
  272. /// 获取所有已注册的灯光控制器信息的只读集合。
  273. /// </summary>
  274. /// <returns>灯光控制器信息的只读集合快照。</returns>
  275. IReadOnlyCollection<LightControllerConfig> GetAllLightControllers();
  276. /// <summary>
  277. /// 根据标识获取单个灯光控制器信息。
  278. /// </summary>
  279. /// <param name="id">灯光控制器的唯一标识符。</param>
  280. /// <returns>对应的 <see cref="LightControllerConfig"/> 实例;若未找到则返回 null。</returns>
  281. LightControllerConfig GetLightController(int id);
  282. /// <summary>
  283. /// 新增或更新指定的灯光控制器信息。
  284. /// </summary>
  285. /// <param name="controller">要新增或更新的灯光控制器信息,不能为 null。</param>
  286. /// <exception cref="ArgumentNullException">当 <paramref name="controller"/> 为 null 时抛出。</exception>
  287. LightControllerConfig AddOrUpdateLightController(LightControllerConfig controller);
  288. /// <summary>
  289. /// 移除指定标识的灯光控制器信息。
  290. /// </summary>
  291. /// <param name="id">要移除的灯光控制器的唯一标识符。</param>
  292. /// <returns>如果找到并移除成功则返回 true;否则返回 false。</returns>
  293. bool RemoveLightController(int id);
  294. /// <summary>
  295. /// 判断是否包含指定标识的灯光控制器配置。
  296. /// </summary>
  297. /// <param name="id">灯光控制器唯一标识符。</param>
  298. /// <returns>存在则返回 true,否则返回 false。</returns>
  299. bool ContainsLightController(int id);
  300. /// <summary>
  301. /// 获取所有已注册的灯光通道信息的只读集合。
  302. /// </summary>
  303. /// <returns>灯光通道信息的只读集合快照。</returns>
  304. IReadOnlyCollection<ChannelConfig> GetAllLightChannels();
  305. /// <summary>
  306. /// 根据全局索引获取单个灯光通道信息。
  307. /// </summary>
  308. /// <param name="globalIndex">灯光通道的全局索引。</param>
  309. /// <returns>对应的 <see cref="ChannelConfig"/> 实例;若未找到则返回 null。</returns>
  310. ChannelConfig GetLightChannelByGlobalIndex(int globalIndex);
  311. /// <summary>
  312. /// 判断是否包含指定全局索引的灯光通道配置。
  313. /// </summary>
  314. /// <param name="globalIndex">灯光通道的全局索引。</param>
  315. /// <returns>存在则返回 true,否则返回 false。</returns>
  316. bool ContainsLightChannelByGlobalIndex(int globalIndex);
  317. /// <summary>
  318. /// 更新指定灯光通道的默认亮度值并保存到持久化存储。
  319. /// </summary>
  320. /// <param name="globalIndex">灯光通道的全局索引。</param>
  321. /// <param name="brightness">新的默认亮度值,范围应在合适的区间内。</param>
  322. /// <returns>如果找到并更新成功则返回 true;否则返回 false。</returns>
  323. bool UpdateChannelDefaultBrightness(int globalIndex, int brightness);
  324. }
  325. }