From d9f134ea2d44c34bcdd74c7ced4ff6bae2f3f78c Mon Sep 17 00:00:00 2001 From: livefish Date: Sat, 18 Jan 2025 16:31:42 +0300 Subject: [PATCH] Addd reading powers --- .idea/PowerUI.iml | 2 +- .idea/misc.xml | 2 +- controller/controller_reifined.py | 23 +- interface.py | 16 +- main.py | 2 + ui/ControllerUI/ControllerUI.pyproject.user | 2 +- ui/ControllerUI/power.ui.autosave | 418 -------------------- протокол (2).xlsx | Bin 0 -> 28025 bytes 8 files changed, 31 insertions(+), 434 deletions(-) delete mode 100644 ui/ControllerUI/power.ui.autosave create mode 100644 протокол (2).xlsx diff --git a/.idea/PowerUI.iml b/.idea/PowerUI.iml index e35e19c..485c55f 100644 --- a/.idea/PowerUI.iml +++ b/.idea/PowerUI.iml @@ -4,7 +4,7 @@ - + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index dc71d4a..fcb7b14 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,5 +3,5 @@ - + \ No newline at end of file diff --git a/controller/controller_reifined.py b/controller/controller_reifined.py index 4d31512..b447703 100644 --- a/controller/controller_reifined.py +++ b/controller/controller_reifined.py @@ -180,12 +180,15 @@ class ControllerInterface: targets = { "currents set": (0xBE, 0xEE), "currents get": (0xBE, 0xEF), - "powers set": (0xBE, 0x10), - "powers get": (0xBE, 0x11), - "address": (0xBF, 0x20), - "device info": (0xBF, 0x00), - "device mode set": (0xBF, 0x10), - "device mode get": (0xBF, 0x11), + "powers": (0xBE, 0x10), + # "address": (0xBF, 0x20), + # "device info": (0xBF, 0x00), + # "device mode set": (0xBF, 0x10), + # "device mode get": (0xBF, 0x11), + "address": (0x00, 0xF0), + "device info": (0x00, 0x60), + "device mode set": (0x00, 0xE0), + "device mode get": (0x00, 0xE1), } # Currents # @@ -232,9 +235,9 @@ class ControllerInterface: return False def readMode(self, mode_index: int) -> tuple: - self.controller.readDop = True # READ MODE BUG FIX TODO + # self.controller.readDop = True # READ MODE BUG FIX TODO data = self.sendPacketWithResponse(self.c_codes['get'], self.targets['device mode get'], [mode_index + 1]) - self.controller.readDop = False # READ MODE BUG FIX TODO + # self.controller.readDop = False # READ MODE BUG FIX TODO print('Read bytes:') for i, b in enumerate(self.controller.read_buffer): @@ -276,10 +279,10 @@ class ControllerInterface: # Powers # def writePowers(self, currents: list, voltages: list, power: int, koeffs: list, a_max: int) -> bool: data = currents + voltages + [power] + koeffs + [a_max] - return self.sendPacket(self.c_codes['set'], self.targets['powers set'], data) + return self.sendPacket(self.c_codes['set'], self.targets['powers'], data) def readPowers(self) -> list: - return self.sendPacketWithResponse(self.c_codes['get'], self.targets['powers get'], []) + return self.sendPacketWithResponse(self.c_codes['get'], self.targets['powers'], []) # source: https://stackoverflow.com/a/14224477 @staticmethod diff --git a/interface.py b/interface.py index 10508c7..4f87d2b 100644 --- a/interface.py +++ b/interface.py @@ -38,6 +38,8 @@ check = tk.IntVar() def setStatus(new_status: str): + print(f'New status: {new_status}') + status.set(new_status) win.update() win.update_idletasks() @@ -125,7 +127,7 @@ def readControllerCurrentsAndData() -> bool: setStatus(f'Чтение адреса {controller.controller.ser.port}...') address = controller.readAddress() - + print(f'New address: {address}') if address == -1: dmx_address_field.configure(style='failedToRead.TEntry') else: @@ -133,7 +135,6 @@ def readControllerCurrentsAndData() -> bool: dmx_address_field.delete(0, tk.END) dmx_address_field.insert(tk.END, str(address)) - global modesself.ui.DeviceSelection.addItems(['/dev/ttyUSB0', '/dev/ttyUSB2']) modes = [] @@ -389,7 +390,16 @@ def finish(): if __name__ == "__main__": - controller.writePowers([100, 200, 300, 400], [300, 2000, 2341, 10], 49, [100, 240, 30, 239], 52) + controller.connect("/dev/ttyUSB0") + + pws = controller.readPowers() + print(pws) + + controller.writePowers([30, 47, 60, 60], [14, 45, 34, 9], 20, [10, 20, 30, 40], 10) + time.sleep(2) + + pws = controller.readPowers() + print(pws) win.configure(width=270, height=350) win.resizable(False, False) diff --git a/main.py b/main.py index b88b7bd..d743a50 100644 --- a/main.py +++ b/main.py @@ -61,6 +61,8 @@ class Window(QtWidgets.QMainWindow): def setStatus(self, text: str) -> None : print(text) + self.ui.Status.setText(text) + self.repaint() def deviceSelected(self, deviceIndex: int): device = self.ui.DeviceSelection.itemText(deviceIndex) diff --git a/ui/ControllerUI/ControllerUI.pyproject.user b/ui/ControllerUI/ControllerUI.pyproject.user index 4a4fc15..1854af3 100644 --- a/ui/ControllerUI/ControllerUI.pyproject.user +++ b/ui/ControllerUI/ControllerUI.pyproject.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/ui/ControllerUI/power.ui.autosave b/ui/ControllerUI/power.ui.autosave deleted file mode 100644 index db8d171..0000000 --- a/ui/ControllerUI/power.ui.autosave +++ /dev/null @@ -1,418 +0,0 @@ - - - Controller - - - - 0 - 0 - 273 - 350 - - - - - 0 - 0 - - - - - 273 - 350 - - - - - 273 - 350 - - - - Controller - - - - - - 0 - 0 - 284 - 251 - - - - - QFormLayout::DontWrapRows - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - 8 - - - 10 - - - 10 - - - 0 - - - - - - Ubuntu Sans - - - - COM Порт: - - - - - - - - 0 - 0 - - - - - 110 - 16777215 - - - - - Arial - 10 - - - - - /dev/ttyUSB0 - - - - - - - - DMX Адрес: - - - - - - - - 45 - 16777215 - - - - 10 - - - Qt::AlignCenter - - - no data - - - - - - - Personality: - - - - - - - I1 - - - - - - - - - - 45 - 16777215 - - - - 1000 - - - Qt::AlignCenter - - - - - - - - 16777215 - 16777215 - - - - mA - - - - - - - - - I2 - - - - - - - - - - 45 - 16777215 - - - - 450 - - - Qt::AlignCenter - - - - - - - mA - - - - - - - - - I3 - - - - - - - - - - 45 - 16777215 - - - - 520 - - - Qt::AlignCenter - - - - - - - mA - - - - - - - - - I4 - - - - - - - - - - 45 - 16777215 - - - - 780 - - - Qt::AlignCenter - - - - - - - mA - - - - - - - - - 0 - - - 0 - - - - - - 131 - 32 - - - - - Arial - 9 - - - - true - - - - 28:CH RGB45 SLO - - - - - - - - - 0 - 0 - - - - - 32 - 32 - - - - - - - - .. - - - - 20 - 20 - - - - false - - - - - - - - - - - 0 - 250 - 271 - 101 - - - - - - - 50 - - - 10 - - - 10 - - - - - Чтение - - - - - - - Запись - - - - - - - - - 0 - - - - - - 97 - 16777215 - - - - Проверить - - - - - - - - - Выбранный порт: /dev/ttyUSB0 - - - Qt::AlignCenter - - - - - - - - - - diff --git a/протокол (2).xlsx b/протокол (2).xlsx new file mode 100644 index 0000000000000000000000000000000000000000..92d2c227d9d40088d45ff1dfff296bdfee355c9b GIT binary patch literal 28025 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 literal 0 HcmV?d00001