using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using Serilog; using SlnMesnac.Config; using SlnMesnac.Model.dto; using SlnMesnac.Plc; using SlnMesnac.TouchSocket; using System; using System.Collections.Generic; using System.Linq; using System.Text; using TouchSocket.Sockets; namespace SlnMesnac.Extensions { public static class MesPlcSingalSetup { /// /// MES PLC 信号下发处理 /// /// /// public static IApplicationBuilder UseMesPlcSingalHandleExtensions(this IApplicationBuilder app) { var plcFactories = app.ApplicationServices.GetService>(); var _server = app.ApplicationServices.GetService(); _server.ReceivedClientBufferEvent += (client, buffer) => { string asciiStr = Encoding.ASCII.GetString(buffer); Log.Information($"收到客户端指令:{asciiStr}"); var request = JsonConvert.DeserializeObject(asciiStr); if(request != null ) { var plc = plcFactories.Where(x => x.ConfigKey == "mesSingal").First(); var result = SingaleHandle(plc, request.stationNo); var resultJson = JsonConvert.SerializeObject(result); client.Send(resultJson); } }; _server.Init(6000); return app; } /// /// 信号处理 /// /// /// /// private static MesPlcHandleResponse SingaleHandle(PlcAbsractFactory _plc, int stationId) { MesPlcHandleResponse response = new MesPlcHandleResponse() { code = 500 }; bool res = false; try { if (_plc == null) { throw new ArgumentException("PLC连接信息为空"); } res = _plc.writeInt16ByAddress("M200", stationId); if (res) { response.code = 200; response.message = "下发成功"; } else { response.message = "下发失败"; } } catch (Exception ex) { response.message = $"MES信号处理异常:{ex.Message}"; } finally { response.isFlag = res; DateTime currentTimeUtc = DateTime.UtcNow; long unixTimeStamp = ((DateTimeOffset)currentTimeUtc).ToUnixTimeSeconds(); response.timestamp = unixTimeStamp; } return response; } } }