using Microsoft.Extensions.Logging; using Seyounth.Extensions.Plc; namespace Seyounth.Auto.Hs.Runtime.Plc; public class PlcService : IPlcService { private readonly ILogger _logger; private readonly IPlc _plc; public PlcService(IPlc plc,ILogger logger) { _logger = logger; _plc = plc; //todo:此处创建PLC对象 } public async Task StartAsync() { await _plc.ConnectAsync(); } public async Task StopAsync() { await _plc.DisconnectAsync(); } public async Task GetTemperatureAsync() { return (await _plc.ReadAsync("1000", 1))[0]; } public async Task QueryWarningInfo() { var flags = await _plc.ReadAsync("1003", 2); if (flags.Any(f => f != 0)) OnWarning?.Invoke(Tuple.Create(flags[0], flags[1])); } public event Func, Task> OnWarning; public Task GetJackingFlagAsync() { throw new NotImplementedException(); } public Task WriteBoxLabelPrintResult(short rs) { throw new NotImplementedException(); } public Task WriteFilmLabelPrintResult(short rs) { throw new NotImplementedException(); } public async Task IsTop() { var arr = await _plc.ReadAsync("1002", 1); //_logger.LogInformation($"是否顶升寄存器值:{arr?.FirstOrDefault()}"); return arr?.FirstOrDefault() == 1; } public async Task BoxTagPrintDoneAsync(short value) { await _plc.WriteAsync("1102",value); _logger.LogInformation("已回复打印完成信号"); } public async Task SetTemperatureAsync(short val) { await _plc.WriteAsync("1100", val); } public async Task ClearTop() { await _plc.WriteAsync("1002",0); } }