TelenkovDmitry 1 年之前
父節點
當前提交
b826718d96
共有 5 個文件被更改,包括 152 次插入9 次删除
  1. 17 0
      exer/deep.py
  2. 2 0
      go/simple-app/go.mod
  3. 2 0
      go/simple-app/go.sum
  4. 69 1
      go/simple-app/main.go
  5. 62 8
      hw_libs/io_module.py

+ 17 - 0
exer/deep.py

@@ -0,0 +1,17 @@
+import token
+import dis
+import sys
+
+def fnc():
+    x = 5
+    y = 7
+    z = x + y
+    print(z)
+
+# print(dir(fnc))
+# print(fnc.__code__.co_code)
+
+# dis.dis(fnc)
+    
+# print(sys.getwindowsversion())
+print(sys.getswitchinterval())

+ 2 - 0
go/simple-app/go.mod

@@ -1,3 +1,5 @@
 module simple-app
 
 go 1.22.1
+
+require github.com/mitchellh/mapstructure v1.5.0 // indirect

+ 2 - 0
go/simple-app/go.sum

@@ -0,0 +1,2 @@
+github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
+github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=

+ 69 - 1
go/simple-app/main.go

@@ -2,6 +2,8 @@ package main
 
 import (
 	"fmt"
+
+	"github.com/mitchellh/mapstructure"
 )
 
 type myStruct struct {
@@ -18,6 +20,11 @@ func (p *myStruct) methodPtr() {
 	fmt.Println(p.Y)
 }
 
+type Point struct {
+	X int
+	Y int
+}
+
 func main() {
 	/*
 		http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
@@ -29,7 +36,10 @@ func main() {
 	//test2()
 	// test3()
 	// test4()
-	test5()
+	// test5()
+	// test6()
+	// test7()
+	test8()
 }
 
 func test1() {
@@ -108,3 +118,61 @@ func test5() {
 	fmt.Println(a)
 	fmt.Println(animalArr)
 }
+
+func test6() {
+	arr := []string{"a", "b", "c"}
+	for i, l := range arr {
+		fmt.Println(i, l)
+	}
+
+	for _, l := range arr {
+		fmt.Println(l)
+	}
+}
+
+func test7() {
+	pointMap := map[string]Point{}
+	otherMap := map[string]Point{
+		"b": {X: 23, Y: 12},
+	}
+	otherPointMap := make(map[int]Point)
+
+	pointMap["a"] = Point{
+		X: 1,
+		Y: 2,
+	}
+
+	fmt.Println(pointMap)
+	fmt.Println(pointMap["a"])
+
+	otherPointMap[1] = Point{X: 3, Y: 7}
+	fmt.Println(otherPointMap[1])
+
+	fmt.Println(otherMap["b"])
+
+	key := 2
+	value, ok := otherPointMap[key]
+	if ok {
+		fmt.Printf("key=%d exist in map", key)
+		fmt.Println(value)
+	} else {
+		fmt.Printf("key=%d does exist in map", key)
+		fmt.Println(value)
+	}
+}
+
+func test8() {
+	pointsMap := map[string]int{
+		"X": 1,
+		"Y": 2,
+	}
+
+	p1 := Point{}
+	mapstructure.Decode(pointsMap, &p1)
+	fmt.Println(p1)
+
+	for k, v := range pointsMap {
+		fmt.Println(k)
+		fmt.Println(v)
+	}
+}

+ 62 - 8
hw_libs/io_module.py

@@ -5,7 +5,8 @@ import time
 import os
 
 reg_table = {'in_bits': 0x0100, 'in_cnt': 0x0102, 'in_mode': 0x0120,'uptime': 0x0800, 
-             'rtc_unix': 0x0802, 'rtc_sinhro': 0x0804}
+             'in_norm': 0x0122,'rtc_unix': 0x0802, 'rtc_sinhro': 0x0804,
+             'in_deb_start': 0x124}
 
 
 class IO_Module(Modbus):
@@ -93,6 +94,31 @@ class IO_Module(Modbus):
     def set_inputs_mode(self, val):
         self.write_holding_register(reg_table['in_mode'], val)
 
+    #        
+    def set_input_mode(self, input, val):
+        ret = self.read_holding_registers(reg_table['in_mode'], 1)
+        if val == 1:
+            data = ret[0] | (0b1 << (input - 1))
+        else:
+            data = ret[0] & ~(0b1 << (input - 1))
+        self.set_inputs_mode(data)
+
+    # 0x0122 - нормальное состояние входов
+    def get_inputs_norm_state(self):
+        data = self.read_holding_registers(reg_table['in_norm'], 1)
+        return format(data[0], '08b')
+
+    def set_inputs_norm_state(self, val):
+        self.write_holding_register(reg_table['in_norm'], val)
+
+    # 0x0124 - время антидребезга (ms)
+    def get_debounce_channel(self, input):
+        data = self.read_holding_registers(reg_table['in_deb_start'] + input - 1, 1)
+        return data[0]
+
+    def set_devounce_channel(self, input, val):
+        self.write_holding_register(reg_table['in_deb_start'] + input - 1, val)
+
     def get_uptime(self):
         return self.read_uint32_holding(reg_table['uptime'])
 
@@ -121,19 +147,47 @@ def main():
     # unix_time = dev.get_rtc()
     # print(f'RTC: {time.ctime(unix_time)}. Unix time stamp:  {unix_time}')
     
-    # while True:
-    for i in range(10):
+    
+    
+    for i in range(1, 9):
+        dev.set_input_mode(i, 1)
+        # print('Inputs mode [bit field]   :', Fore.GREEN + dev.get_inputs_mode())
+
+    for i in range(1, 9):
+        dev.set_devounce_channel(i, 50 + i)
+    
+    # Установить нормальное состояние входов
+    # dev.set_inputs_norm_state(0b00110101)
+
+    while True:
         print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
-        print('Inputs values [bit field :', Fore.GREEN + dev.get_inputs_bit())
-        print('Inputs mode [bit field]  :', Fore.GREEN + dev.get_inputs_mode())
+        # Значения входов (битовое поле)
+        print('Inputs values [bit field] :', Fore.GREEN + dev.get_inputs_bit())
+        # Режим работы входов (битовое поле)
+        print('Inputs mode [bit field]   :', Fore.GREEN + dev.get_inputs_mode())
+        # Нормальное состояние входов (битовое поле)
+        print('Inputs norm [bit field]   :', Fore.GREEN + dev.get_inputs_norm_state())
+        # Период антидребезга (ms)
+        for i in range(1, 9):
+            print(f'Debounce input {i} (ms)     :', Fore.GREEN + str(dev.get_debounce_channel(i)))
+        # Значение счетчиков
         data = dev.get_inputs_counters()
-        print('Inputs counters          :', Fore.GREEN + ' | '.join(str(el) for el in data))
-        dev.set_inputs_mode(i)
-
+        print('Inputs counters           :', Fore.GREEN + ' | '.join(str(el) for el in data))
+                
+        # break
         time.sleep(1)
 
+
+
+    # for i in range(1, 9):
+    #     dev.set_input_mode(i, 1)
+    #     print('Inputs mode [bit field]  :', Fore.GREEN + dev.get_inputs_mode())
     
 
+    # for i in range(8, 0, -1):
+    #     dev.set_input_mode(i, 0)
+    #     print('Inputs mode [bit field]  :', Fore.GREEN + dev.get_inputs_mode())
+        
 
 if __name__ == '__main__':
     main()