终端一体化运控平台
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

PLCMachine.cs 3.8 KiB

před 2 roky
před 1 rokem
před 1 rokem
před 1 rokem
před 2 roky
před 1 rokem
před 2 roky
před 1 rokem
před 2 roky
před 2 roky
před 2 roky
před 2 roky
před 2 roky
před 2 roky
před 2 roky
před 2 roky
před 2 roky
před 2 roky
před 1 rokem
před 2 roky
před 1 rokem
před 2 roky
před 2 roky
před 2 roky
před 2 roky
před 1 rokem
před 1 rokem
před 2 roky
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. using BPASmartClient.Peripheral;
  2. using BPA.Helper;
  3. using BPASmartClient.Modbus;
  4. using BPASmartClient.Model;
  5. using BPASmartClient.Model.PLC;
  6. using static BPA.Helper.EventBus;
  7. namespace BPASmartClient.PLC
  8. {
  9. public class PLCMachine : BasePeripheral
  10. {
  11. ModbusTcp modbusTcp = new ModbusTcp();
  12. public override void Init()
  13. {
  14. modbusTcp.IsReconnect = true;
  15. Task.Run(new Action(() =>
  16. {
  17. modbusTcp.ConnectOk = new Action(() =>
  18. {
  19. ThreadManage.GetInstance().StartLong(new Action(() =>
  20. {
  21. IsConnected = modbusTcp.Connected;
  22. if (!IsConnected) IsWork = false;
  23. while (IsConnected)
  24. {
  25. IsWork = true;
  26. foreach (var par in variables)
  27. {
  28. if (par?.Address.Length > 0)
  29. {
  30. var res = modbusTcp.Read(par.Address, (ushort)par.ReadLeng);
  31. if (status.ContainsKey(par.Address))
  32. {
  33. status[par.Address] = res;
  34. }
  35. else
  36. {
  37. status.TryAdd(par.Address, res);
  38. }
  39. }
  40. }
  41. //foreach (var par in tempVar)
  42. //{
  43. // if (par.Value?.Address.Length > 0)
  44. // {
  45. // var res = modbusTcp.Read(par.Value.Address, (ushort)par.Value.ReadLeng);
  46. // if (status.ContainsKey(par.Value.Address))
  47. // {
  48. // status[par.Value.Address] = res;
  49. // }
  50. // else
  51. // {
  52. // status.TryAdd(par.Value.Address, res);
  53. // }
  54. // }
  55. //}
  56. Thread.Sleep(100);
  57. }
  58. Thread.Sleep(1000);
  59. }), $"设备[{DeviceId}][{modbusTcp.IPAdress}]PLC读取线程", true);
  60. });
  61. modbusTcp.ModbusTcpConnect(communicationPar.IPAddress, communicationPar.IPPort);
  62. })); //PLC 设备连接
  63. Thread.Sleep(1000);
  64. //写入数据
  65. EventBus.GetInstance().Subscribe<WriteModel>(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack)
  66. {
  67. if (@event == null) return;
  68. var par = @event as WriteModel;
  69. modbusTcp.Write(par?.Address, par?.Value);
  70. });
  71. }
  72. public override void Start()
  73. {
  74. }
  75. public override void Stop()
  76. {
  77. }
  78. public override void WriteData(string address, object value)
  79. {
  80. if (address != null && value != null)
  81. modbusTcp.Write(address, value);
  82. }
  83. //public override void AddVarInfo(string add, int len)
  84. //{
  85. // if (!tempVar.ContainsKey(add) && !string.IsNullOrEmpty(add) && len > 0)
  86. // {
  87. // tempVar.TryAdd(add, new Variable()
  88. // {
  89. // Address = add,
  90. // ReadLeng = len
  91. // });
  92. // }
  93. //}
  94. protected override void InitStatus()
  95. {
  96. }
  97. }
  98. }