TwincatCoeManager.cs 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using Aitex.Core.RT.Log;
  2. using Aitex.Core.Util;
  3. using MECF.Framework.Common.Beckhoff.IOAxis;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace MECF.Framework.Common.TwinCat
  10. {
  11. public class TwincatCoeManager : Singleton<TwincatCoeManager>
  12. {
  13. #region 内部变量
  14. /// <summary>
  15. /// 模块COE字典(key-模块名称,key-TwincatCoe接口对象)
  16. /// </summary>
  17. private Dictionary<string, TwincatCoeInterface> _moduleCoeInterfaceDic = new Dictionary<string, TwincatCoeInterface>();
  18. /// <summary>
  19. /// 地址COE字典(key-NetId:Port,key-TwincatCoe接口对象)
  20. /// </summary>
  21. private Dictionary<string, TwincatCoeInterface> _addressInterfaceDic = new Dictionary<string, TwincatCoeInterface>();
  22. #endregion
  23. /// <summary>
  24. /// 初始化
  25. /// </summary>
  26. /// <param name="moduleName"></param>
  27. /// <param name="beckhoffAxis"></param>
  28. public void Initialize(BeckhoffAxis beckhoffAxis)
  29. {
  30. string address = $"{beckhoffAxis.COEAddress}.{beckhoffAxis.COEPort}";
  31. if (!_addressInterfaceDic.ContainsKey(address))
  32. {
  33. TwincatCoeInterface coeInterface = new TwincatCoeInterface(beckhoffAxis);
  34. _moduleCoeInterfaceDic[beckhoffAxis.Name] = coeInterface;
  35. _addressInterfaceDic[address] = coeInterface;
  36. coeInterface.Connect();
  37. }
  38. else
  39. {
  40. _moduleCoeInterfaceDic[beckhoffAxis.Name] = _addressInterfaceDic[address];
  41. }
  42. _addressInterfaceDic[address].InnitialInputAndOutputVariable(beckhoffAxis);
  43. }
  44. /// <summary>
  45. /// 停止
  46. /// </summary>
  47. public void Stop()
  48. {
  49. List<string> lst = _moduleCoeInterfaceDic.Keys.ToList();
  50. foreach (string key in lst)
  51. {
  52. try
  53. {
  54. TwincatCoeInterface coeInterface = _moduleCoeInterfaceDic[key];
  55. coeInterface.Stop();
  56. }
  57. catch
  58. {
  59. }
  60. }
  61. }
  62. /// <summary>
  63. /// 启动读取输入变量
  64. /// </summary>
  65. public void StartReadInput()
  66. {
  67. string[] strAry=_addressInterfaceDic.Keys.ToArray();
  68. foreach (string item in strAry)
  69. {
  70. _addressInterfaceDic[item].StartReadInputDataThread();
  71. }
  72. }
  73. /// <summary>
  74. /// 写变量数值
  75. /// </summary>
  76. /// <param name="variableName"></param>
  77. /// <param name="value"></param>
  78. /// <returns></returns>
  79. public bool WriteVariableValue(string moduleName,string variableName,object value)
  80. {
  81. if(_moduleCoeInterfaceDic.ContainsKey(moduleName))
  82. {
  83. return _moduleCoeInterfaceDic[moduleName].WriteModuleCoeData(moduleName,variableName, value);
  84. }
  85. else
  86. {
  87. LOG.WriteLog(eEvent.ERR_TWINCAT, moduleName, $"Twincat Coe variables doesnot have [{moduleName}] module");
  88. return false;
  89. }
  90. }
  91. }
  92. }