class C37ReceiverThread(threading.Thread): def __init__(self, component): threading.Thread.__init__(self) self.active = threading.Event() self.active.clear() self.waiting = threading.Event() self.terminated = threading.Event() self.terminated.clear() self.component = component self.pdc = Pdc(pmu_ip=self.component.pmu_ip, pmu_port=self.component.pmu_port) def run(self): self.data_plug = self.component.data_queue.setupPlug(self) self.config_plug = self.component.config_queue.setupPlug(self) self.header_plug = self.component.header_queue.setupPlug(self) while True: if self.terminated.is_set(): break if not self.active.is_set(): if self.pdc.is_connected(): self.pdc.stop() self.active.wait() self.pdc.start() else: self.active.wait() if self.pdc.is_connected(): data = self.pdc.get() self.data_plug.send_pyobj(data) else: self.pdc.run() if self.pdc.is_connected(): header = self.pdc.get_header() self.header_plug.send_pyobj(header) config = self.pdc.get_config() self.config_plug.send_pyobj(config) self.pdc.start() else: # TODO: wait some? pass self.pdc.quit() def activate(self): self.active.set() def deactivate(self): self.active.clear() def terminate(self): self.terminated.set()
from pypmu.pdc import Pdc from pypmu.frame import DataFrame """ tinyPDC will connect to pmu_ip:pmu_port and send request for header message, configuration and eventually to start sending measurements. """ if __name__ == "__main__": pdc = Pdc(pdc_id=9, pmu_ip="192.168.1.119", pmu_port=4712) pdc.logger.setLevel("DEBUG") pdc.run() # Connect to PMU header = pdc.get_header() # Get header message from PMU config = pdc.get_config() # Get configuration from PMU pdc.start() # Request to start sending measurements while True: data = pdc.get() # Keep receiving data if type(data) == DataFrame: print(data.get_measurements()) if not data: pdc.quit() # Close connection break