using ACTMULTILib; using ProjectBase.Data.BaseDAL; using ProjectBase.Data.Logs; using SIMDP.BLL; using SIMDP.Device; using SIMDP.Model; using System; using System.Collections.Generic; using System.Linq; namespace SIMDP.Project { public class PlcHelper { public static PlcHelper Instance { get; private set; } static PlcHelper() { Instance = new PlcHelper(); } public static List deviceList = new List(); public static List plcInfoList = new List(); /// /// 连接PLC /// public void Connect() { if (deviceList.Count > 0) Close(); plcInfoList = BLLFactory.Instance.GetActivePLC(); if (plcInfoList.Count <= 0) return; foreach (var plcInfo in plcInfoList) { List opcPoints = BLLFactory.Instance.GetDataPointsByPlcID(plcInfo.PlcId); if (opcPoints.Count == 0) continue; // 直接通过PLC名称实例化对象,替代原有按类型区别方式 Type t = Type.GetType("SIMDP.Project." + plcInfo.PlcName); if (t == null) { LogHelper.log.Error("未找到设备对象类:" + plcInfo.PlcName); continue; } AbstractBaseDevice plc = (AbstractBaseDevice)t.Assembly.CreateInstance(t.FullName); deviceList.Add(plc); plc.Start(plcInfo, opcPoints); } } /// /// 断开连接 /// public void Close() { foreach (var plc in deviceList) { plc.Stop(); } deviceList.Clear(); } } }