TelenkovDmitry 1 jaar geleden
bovenliggende
commit
41b46ef420
2 gewijzigde bestanden met toevoegingen van 22 en 4 verwijderingen
  1. 17 1
      hw_libs/io_module.py
  2. 5 3
      hw_libs/modbus.py

+ 17 - 1
hw_libs/io_module.py

@@ -1,18 +1,33 @@
 from modbus import Modbus, MBError, NoResponseError
+import time
 
 class IO_Module(Modbus):
     def __init__(self, tty: str, brate: int, address: int):
         super().__init__(tty, brate, address)
+        self.update_segment_number = 0
 
     def iap_start(self):
         """Reboot device in IAP mode"""
         request = bytes((self.address, 0x41, 0x01))
         response = self.raw_communicate(request + self._crc(request))
 
-
+    def write_fw_start(self, size: int):
+        """Ask device to start update"""
+        self.update_segment_number = 0
+        request = bytes((self.address, 0x41, 0x01, 0xEF, 0xBE, 0xAD, 0xDE)) + size.to_bytes(4, 'big')
+        response = self.raw_communicate(request + self._crc(request), 5)
+        if len(response) == 0:
+            raise NoResponseError('No response on WRITE_START command')
+        if len(response) != 5:
+            raise MBError('Incorrect response length')
+        if response[:3] != bytes((self.address, 0x41, 0x01)):
+            raise MBError('Incorrect response')
 
     def update(self):
         self.iap_start()
+        time.sleep(4)
+        self.write_fw_start(123)
+
 
 
 
@@ -21,6 +36,7 @@ def main():
 
     dev.update()
     
+    
 
 if __name__ == '__main__':
     main()

+ 5 - 3
hw_libs/modbus.py

@@ -162,11 +162,13 @@ def main():
     
     # print(st.encode('utf-8'))
     dev = Modbus('COM22', 115200, 1)
-    to_send = b'\x01\x03\x01\x00\x00\x01'
-    dev.communicate(to_send, 7)
+    # to_send = b'\x01\x03\x01\x00\x00\x01'
+    # dev.communicate(to_send, 7)
 
     # Пример чтения одного регистра по адресу 0x0100
-    print(dev.read_holding_registers(0x0100, 1))
+    while True:
+        print(dev.read_holding_registers(0x0100, 1))
+        time.sleep(1)
     # dev._read_registers(0x03, 0x0100, 1, False)
     # print(dev._read_registers(0x03, 0x0100, 1, True))