| | |
| | | private IServiceProvider _serviceProvider; |
| | | private readonly ILogger<PipeLineLemsProjectService> _logger; |
| | | private readonly IVariableDataCache _variableDataCache; |
| | | private readonly IWorkSectionManager _workSectionManager; |
| | | |
| | | /// <summary> |
| | | /// 变量服务 |
| | | /// </summary> |
| | |
| | | /// <param name="logger">The logger.</param> |
| | | /// <param name="variableDataCache">The variable data cache.</param> |
| | | public PipeLineLemsProjectService( |
| | | IWorkSectionManager workSectionManager, |
| | | VariableService variableService, |
| | | IServiceProvider serviceProvider, ILogger<PipeLineLemsProjectService> logger, IVariableDataCache variableDataCache) |
| | | { |
| | |
| | | _logger = logger; |
| | | _variableDataCache = variableDataCache; |
| | | _variableService = variableService; |
| | | _workSectionManager = workSectionManager; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | _monitorVariableNames = new Dictionary<string, string> |
| | | { |
| | | { "打码进站信号", "打码进站信号(描述)" }, |
| | | { "切割进站信号", "切割进站信号(描述)" }, |
| | | }; |
| | | |
| | | // 创建通道监听 |
| | |
| | | |
| | | _ = Task.Run(async () => |
| | | { |
| | | //await HanlderForPringBarCodeAsync(); |
| | | await HanlderForPringBarCodeAsync(); |
| | | // 例1:同步处理 |
| | | //await ProcessAsync(); |
| | | |
| | |
| | | }); |
| | | } |
| | | |
| | | //if (changed.Name == "切割进站信号" && changed.New?.Value.SafeString().ToBool() == true) |
| | | //{ |
| | | if (changed.Name == "切割进站信号" && changed.New?.Value.SafeString().ToBool() == true) |
| | | { |
| | | |
| | | // // TODO: 处理变量值变化 |
| | | // // Tips:https://cms-docs.shengyc.com/cms/api/%E5%90%8E%E7%AB%AF#3-%E5%8F%98%E9%87%8F%E6%A8%A1%E5%9D%97 |
| | | // /* 说明:通过订阅 IVariableDataCache.TagChanged 事件,您可以实时监控变量的变化。此事件会传递所有变量至事件处理函数,因此,业务层需在函数中筛选关注的变量。 |
| | | // 注意事项: |
| | | // (1)性能影响: 发布事件时,事件的发送者将阻塞流程。因此,强烈建议避免在事件处理函数中执行 I/ O 操作、HTTP 接口访问或其他耗时操作,以防止对系统性能产生严重影响,导致整个系统响应延迟。 |
| | | // (2)高频率触发: 由于事件订阅了全量变量,触发频率可能非常高。 |
| | | // (3)异步处理: 鉴于事件触发频率很高,建议业务层在筛选关注变量后,使用 Task 启动新线程处理业务逻辑,以避免阻塞核心的变量监听功能,实现业务层与平台基座的解耦。 |
| | | // (4)并发管理: 如果业务层并发量大,必须优化代码设计和实施,以减少在高并发情况下的系统资源消耗,防止系统性能问题。 |
| | | // (5)代码安全: 安装并使用 CMS.CodeAnalysis 分析器来分析 IVariableDataCache.TagChanged 的使用情况。该工具能在使用不当时提供编译错误,帮助您提高代码质量。*/ |
| | | // TODO: 处理变量值变化 |
| | | // Tips:https://cms-docs.shengyc.com/cms/api/%E5%90%8E%E7%AB%AF#3-%E5%8F%98%E9%87%8F%E6%A8%A1%E5%9D%97 |
| | | /* 说明:通过订阅 IVariableDataCache.TagChanged 事件,您可以实时监控变量的变化。此事件会传递所有变量至事件处理函数,因此,业务层需在函数中筛选关注的变量。 |
| | | 注意事项: |
| | | (1)性能影响: 发布事件时,事件的发送者将阻塞流程。因此,强烈建议避免在事件处理函数中执行 I/ O 操作、HTTP 接口访问或其他耗时操作,以防止对系统性能产生严重影响,导致整个系统响应延迟。 |
| | | (2)高频率触发: 由于事件订阅了全量变量,触发频率可能非常高。 |
| | | (3)异步处理: 鉴于事件触发频率很高,建议业务层在筛选关注变量后,使用 Task 启动新线程处理业务逻辑,以避免阻塞核心的变量监听功能,实现业务层与平台基座的解耦。 |
| | | (4)并发管理: 如果业务层并发量大,必须优化代码设计和实施,以减少在高并发情况下的系统资源消耗,防止系统性能问题。 |
| | | (5)代码安全: 安装并使用 CMS.CodeAnalysis 分析器来分析 IVariableDataCache.TagChanged 的使用情况。该工具能在使用不当时提供编译错误,帮助您提高代码质量。*/ |
| | | |
| | | // _ = Task.Run(async () => |
| | | // { |
| | | // await HanlderForCutAsync(); |
| | | // // 例1:同步处理 |
| | | // //await ProcessAsync(); |
| | | _ = Task.Run(async () => |
| | | { |
| | | await HanlderForCutAsync(); |
| | | // 例1:同步处理 |
| | | //await ProcessAsync(); |
| | | |
| | | // // 例2:调用外部API |
| | | // //await ExecuteExternalApiAsync(); |
| | | // }); |
| | | //} |
| | | // 例2:调用外部API |
| | | //await ExecuteExternalApiAsync(); |
| | | }); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | //TODO:暂时生成产品ID |
| | | //获取上一个工序的产品ID |
| | | //根据工序名获取工序对象 |
| | | var _workSectionManager = _serviceProvider.GetRequiredService<IWorkSectionManager>(); |
| | | var lastWorkSection = "打码工序"; |
| | | var workSection = await _workSectionManager.GetByNameAsync(lastWorkSection); |
| | | |