PlcHelper.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using ACTMULTILib;
  2. using ProjectBase.Data.BaseDAL;
  3. using ProjectBase.Data.Logs;
  4. using SIMDP.BLL;
  5. using SIMDP.Device;
  6. using SIMDP.Model;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. namespace SIMDP.Project
  11. {
  12. public class PlcHelper
  13. {
  14. public static PlcHelper Instance { get; private set; }
  15. static PlcHelper()
  16. {
  17. Instance = new PlcHelper();
  18. }
  19. public static List<AbstractBaseDevice> deviceList = new List<AbstractBaseDevice>();
  20. public static List<MoPlcInfo> plcInfoList = new List<MoPlcInfo>();
  21. /// <summary>
  22. /// 连接PLC
  23. /// </summary>
  24. public void Connect()
  25. {
  26. if (deviceList.Count > 0)
  27. Close();
  28. plcInfoList = BLLFactory<BlPlcInfo>.Instance.GetActivePLC();
  29. if (plcInfoList.Count <= 0)
  30. return;
  31. foreach (var plcInfo in plcInfoList)
  32. {
  33. List<MoDataPoint> opcPoints = BLLFactory<BlDataPoint>.Instance.GetDataPointsByPlcID(plcInfo.PlcId);
  34. if (opcPoints.Count == 0) continue;
  35. // 直接通过PLC名称实例化对象,替代原有按类型区别方式
  36. Type t = Type.GetType("SIMDP.Project." + plcInfo.PlcName);
  37. if (t == null)
  38. {
  39. LogHelper.log.Error("未找到设备对象类:" + plcInfo.PlcName);
  40. continue;
  41. }
  42. AbstractBaseDevice plc = (AbstractBaseDevice)t.Assembly.CreateInstance(t.FullName);
  43. deviceList.Add(plc);
  44. plc.Start(plcInfo, opcPoints);
  45. }
  46. }
  47. /// <summary>
  48. /// 断开连接
  49. /// </summary>
  50. public void Close()
  51. {
  52. foreach (var plc in deviceList)
  53. {
  54. plc.Stop();
  55. }
  56. deviceList.Clear();
  57. }
  58. }
  59. }