allen_bradley_connect.py 813 B

12345678910111213141516171819202122232425262728293031
  1. from pylogix import PLC
  2. from threading import Thread
  3. import time
  4. from datetime import datetime
  5. from inputs.common import Input
  6. localtz = datetime.now().astimezone().tzinfo
  7. class AllenBradleyCPU(Input):
  8. def __init__(self, host):
  9. super().__init__(self.read_handler)
  10. self.comm = PLC()
  11. self.comm.IPAddress = host
  12. self.tag = "STL"
  13. self.port = 0
  14. self.E_offset = 12 + self.port * 48
  15. self.E_connected_offset = self.E_offset + 32
  16. self.E_error_offset = self.E_offset + 33
  17. self.A_offset = 6 + self.port * 32
  18. self.interval = 0.02
  19. def read_handler(self):
  20. timestamp = datetime.now(localtz)
  21. ret = self.comm.Read(F"{self.tag}:I")
  22. if ret.Status == "Success":
  23. raw = ret.Value
  24. self.queue_ifm_from_bytes("AB", timestamp, raw[self.E_offset:self.E_offset+30])