#region << 版 本 注 释 >> /*-------------------------------------------------------------------- * 版权所有 (c) 2026 WenJY 保留所有权利。 * CLR版本:4.0.30319.42000 * 机器名称:Mr.Wen's MacBook Pro * 命名空间:Sln.Wcs.Plc * 唯一标识:C46CF1F4-254E-4BA5-B32D-A7175A197EB1 * * 创建者:WenJY * 电子邮箱: * 创建时间:2026-05-06 16:58:24 * 版本:V1.0.0 * 描述: * *-------------------------------------------------------------------- * 修改人: * 时间: * 修改说明: * * 版本:V1.0.0 *--------------------------------------------------------------------*/ #endregion << 版 本 注 释 >> using System; using System.Collections.Generic; using HslCommunication; using Microsoft.Extensions.DependencyInjection; using Sln.Wcs.Model.Domain; using Sln.Wcs.Plc.Service; using Sln.Wcs.Plc.Service.Impl; using Sln.Wcs.Repository.service; using Sln.Wcs.Serilog; using SqlSugar; namespace Sln.Wcs.Plc; public static class PlcSetUp { public static void AddPlcSetup(this IServiceCollection services) { //获取 PLC 主机信息=>初始化链接=>将链接信息存入容器中 services.AddSingleton>(x => { var _log = x.GetService(); var _hostService = x.GetService(); List plcs = new List(); try { do { if (!Authorization.SetAuthorizationCode("3daa5a3b-defd-474d-b2d9-c4d2265dfe20")) { _log.Info("HslCommunication激活失败,可用时长为24小时"); break; } else { _log.Info("HslCommunication激活成功"); } //获取主机信息 List deviceHosts = _hostService.Query(x => x.isFlag == 1); foreach (var item in deviceHosts) { IPlc _plc = InitPlc(x, item.hostType); var conRes = _plc.Connect(item.hostIP, item.hostPort); if (conRes) { _log.Info($"PLC:{item.hostIP}:{item.hostPort};连接成功,时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}"); _plc.ConfigKey = item.hostCode; plcs.Add(_plc); } else { _log.Info($"PLC:{item.hostIP}:{item.hostPort};连接失败,时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}"); } } } while (false); } catch (Exception e) { _log.Error($"PLC初始化连接异常:{e.Message}"); } return plcs; }); } private static IPlc InitPlc(IServiceProvider serviceProvider, int plcType) { IPlc _plc = null; var _inovance = serviceProvider.GetRequiredService(); var _siemens = serviceProvider.GetRequiredService(); switch (plcType) { case 0: _plc = _siemens; break; case 1: _plc = _inovance; break; // case "MelsecBinaryPlc": // _plc = _melsecBinary; // break; // case "OmronNJPlc": // _plc = _omronNj; // break; default: break; } return _plc; } }