Kaynağa Gözat

testovacie skripty pre nBus bridge

Juraj Ďuďák 8 ay önce
ebeveyn
işleme
35d04c3d10
3 değiştirilmiş dosya ile 96 ekleme ve 28 silme
  1. 31 20
      test/app.py
  2. 1 0
      test/comm.py
  3. 64 8
      test/nbus_slave.py

+ 31 - 20
test/app.py

@@ -16,9 +16,9 @@ def show_data(data):
 if __name__ == "__main__":
 
     nbus = NbusSystem(True)
-    s1_adr = 5
-    s2_adr = 6
-    adrs = [s1_adr]
+    s1_adr = 6
+    s2_adr = 9
+    adrs = [s1_adr, s2_adr]
 
     foundSlaves = {}
     for adr in adrs:
@@ -50,30 +50,41 @@ if __name__ == "__main__":
 
     # !!!! slave1.cmd_set_param(1, PARAM_SAMPLERATE, 10)
     # !!!! slave1.cmd_set_param(2, PARAM_SAMPLERATE, 10)
-    for adr in adrs:
-        for s in range(1):
-            sr = nbus.get_slave(adr).cmd_get_param(s + 1, PARAM_SAMPLERATE)
-            r = nbus.get_slave(adr).cmd_get_param(s + 1, PARAM_RANGE)
-            lpf = nbus.get_slave(adr).cmd_get_param(s + 1, PARAM_FILTER)
-            ee = nbus.get_slave(adr).cmd_get_param(s + 1, PARAM_GAIN)
-            print(sr, r, lpf, ee)
-
-        # sr = nbus.get_slave(adr).cmd_get_param(1, PARAM_SAMPLERATE)
-
-        # nbus.get_slave(adr).cmd_set_param(1, PARAM_RANGE, 1)
-        # print(nbus.get_slave(adr).slave_params)
+    # for adr in adrs:
+    #     for s in range(1):
+    #         sr = nbus.get_slave(adr).cmd_get_param(s + 1, PARAM_SAMPLERATE)
+    #         r = nbus.get_slave(adr).cmd_get_param(s + 1, PARAM_RANGE)
+    #         lpf = nbus.get_slave(adr).cmd_get_param(s + 1, PARAM_FILTER)
+    #         ee = nbus.get_slave(adr).cmd_get_param(s + 1, PARAM_GAIN)
+    #         print(sr, r, lpf, ee)
 
     pocet = {}
     for adr in adrs:
         pocet[adr] = nbus.get_slave(adr).cmd_sensor_cnt()
         # sys.exit()
-        print("pocet senzorov=", pocet)
+    print("pocet senzorov=", pocet)
 
-    nbus.cmd_start()
-    time.sleep(0.1)
-    #nbus.cmd_stop()
-    #sys.exit()
+    types = {}
+    for adr in adrs:
+        types[adr] = nbus.get_slave(adr).cmd_sensors_type()
+    print("TYPES=", types)
+
+    info = {}
+    for adr in adrs:
+        info[adr] = nbus.get_slave(adr).cmd_sensor_info()
+    print("INFO=", info)
+
+    info = {}
+    for adr in adrs:
+        info[adr] = nbus.get_slave(adr).cmd_sensors_format()
+    print("FORMAT=", info)
 
+    
+    nbus.cmd_start()
+    time.sleep(1)
+    nbus.cmd_stop()
+    
+    sys.exit()
     data_acc = {}
     for adr in adrs:
         data_acc[adr] = []

+ 1 - 0
test/comm.py

@@ -22,6 +22,7 @@ CMD_DATA = 0x0B
 CMD_SYNC = 0x0C
 CMD_SENSOR_TYPE = 0x0D
 CMD_INFO = 0x0E
+CMD_FORMAT = 0x0F
 
 PARAM_NONE = 0xFF
 PARAM_TIMEBASE = 0

+ 64 - 8
test/nbus_slave.py

@@ -61,14 +61,70 @@ class NbusSlave():
 
     def cmd_sensor_type(self, index):
         resp = self.serial_port.request(self.module, index, CMD_SENSOR_TYPE, [])
-        return resp[3]
-
-    def cmd_sensors_type(self, pocet):
-        resp = self.serial_port.request(self.module, 0, CMD_SENSOR_TYPE, [])
-        typy = [];
-        for i in range(pocet):
-            typy.append([resp[3 + 2 * i], resp[4 + 2 * i]])
-        return typy
+        type_struct={}
+        n = (len(resp) - 4)//2 # pocet typov
+        for i in range(n):            
+            type_struct[resp[i*2+3]] = resp[i*2+4]
+        return type_struct
+
+    def cmd_sensors_format(self):
+        resp = self.serial_port.request(self.module, 0, CMD_FORMAT, [])
+        type_struct={}
+        n = (len(resp) - 4)//4 # pocet typov
+        for i in range(n):
+            fmt={}
+            b1 = resp[3+i*4+1]
+            b2 = resp[3+i*4+2]
+            b3 = resp[3+i*4+3]
+            fmt["sign"] = (b1 & 0x80)>>7
+            fmt["multiplier"] = b1 & 0x7F
+            fmt["value_multiplier"] = b2
+            fmt["byte_length"] = b3>>4
+            fmt["samples"] = b2 & 0xF
+            type_struct[resp[i*4+3]] = fmt
+        return type_struct        
+
+    def cmd_sensor_info(self):
+        resp = self.serial_port.request(self.module, 0, CMD_INFO, [])
+        info_struct={}
+        n = (len(resp))
+        print(n)
+        if n<34:
+            return {}
+        info_struct["name"] = ""
+        for i in range(8):
+            if resp[i+3]>=32:
+                info_struct["name"] += chr(resp[i+3])
+        info_struct["type"] = ""
+        for i in range(3):
+            info_struct["type"] += chr(resp[i+11])
+        info_struct["id"] = ""
+        idhw=0
+        for i in range(4):
+            idhw = idhw*256 + resp[i+14]
+        info_struct["id"] = hex(idhw)
+
+        info_struct["FW"] = ""
+        for i in range(3):
+            info_struct["FW"] += chr(resp[i+18])        
+
+        info_struct["HW"] = ""
+        for i in range(3):
+            info_struct["HW"] += chr(resp[i+21])
+
+        info_struct["MEM"] = ""
+        idhw=0
+        for i in range(8):
+            idhw = idhw*256 + resp[i+24]
+        info_struct["MEM"] = hex(idhw)
+
+        info_struct["sensors"] = resp[32]
+        info_struct["actuators"] = resp[33]
+
+        return info_struct
+
+    def cmd_sensors_type(self):
+        return self.cmd_sensor_type(0)
 
     def cmd_sensor_get_data(self, index):
         resp = self.serial_port.request(self.module, index, CMD_DATA, [])