TelenkovDmitry 1 tahun lalu
induk
melakukan
ac5459bb18
3 mengubah file dengan 64 tambahan dan 6 penghapusan
  1. 36 0
      books/python/book3/1.py
  2. TEMPAT SAMPAH
      hw_libs/__pycache__/modbus.cpython-310.pyc
  3. 28 6
      hw_libs/sbs.py

+ 36 - 0
books/python/book3/1.py

@@ -0,0 +1,36 @@
+import collections
+
+Card = collections.namedtuple('Card', ['rank', 'suit'])
+
+class FrenchDeck:
+    ranks = [str(n) for n in range(2, 11)] + list('JQKA')
+    suits = 'spades diamonds clubs hearts'.split()
+
+    def __init__(self) -> None:
+        self._cards = [Card(rank, suit) for suit in self.suits
+                       for rank in self.ranks]
+
+    def __len__(self):
+        return len(self._cards)
+    
+    def __getitem__(self, position):
+        return self._cards[position]
+
+
+    def foo(self):
+        print(self.ranks)
+        print(self.suits)
+        print(self._cards)
+
+def main():
+    cards = FrenchDeck()
+    # cards.foo()
+    print(len(cards))
+    print(cards[0])
+    
+
+if __name__ == '__main__':
+    main()
+
+        
+    

TEMPAT SAMPAH
hw_libs/__pycache__/modbus.cpython-310.pyc


+ 28 - 6
hw_libs/sbs.py

@@ -3,25 +3,47 @@ import colorama
 from colorama import Fore
 import time
 import os
+import struct
+
+reg_table = {'hw_base': 0x0200}
 
 class SBS(Modbus):
     def __init__(self, tty: str, brate: int, address: int):
         super().__init__(tty, brate, address)
 
+    @staticmethod
+    def swap(data: bytes) -> bytes: 
+        return bytes([data[2], data[3], data[1], data[2]])
+
+    @staticmethod
+    def swap_registers(data: bytes, *args) -> bytes:
+        for i in args:
+            data[i], data[i + 2] = data[i + 2], data[i]
+            data[i + 1], data[i + 3] = data[i + 3], data[i + 1]
+        return data
+
     def read_pack(self, addr: int, cnt: int):
         return self.read_holding_registers(addr, cnt)
-        
+
+    def read_hv_params(self):
+        raw_data = self.read_holding_registers_raw(reg_table['hw_base'], 15)
+        self.swap_registers(raw_data, 2, 8, 12, 16, 20, 24)
+        return struct.unpack('>HfHfffffH', raw_data)
 
 
 def main():
     colorama.init(autoreset=True)
-    dev = SBS('COM3', 115200, 34)
+    dev = SBS('COM9', 115200, 34)
     dev.MB_DEBUG = False
 
     while True:
-        data = dev.read_pack(0x300, 30)
-        print("Output :", Fore.GREEN + ' '.join(str(el) for el in data))
-        time.sleep(0.25)
+        # data = dev.read_pack(0x300, 30)
+        # print("Output :", Fore.GREEN + ' '.join(str(el) for el in data))
+        
+        print(dev.read_hv_params())
+
+        time.sleep(1)
+
 
 if __name__ == '__main__':
-    main()
+    main()