TelenkovDmitry 1 年間 前
コミット
2eb7efc0cc

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

@@ -4,6 +4,20 @@ import (
 	"fmt"
 )
 
+type myStruct struct {
+	X, Y int
+}
+
+func (p myStruct) method() {
+	fmt.Println(p.X)
+	fmt.Println(p.Y)
+}
+
+func (p *myStruct) methodPtr() {
+	fmt.Println(p.X)
+	fmt.Println(p.Y)
+}
+
 func main() {
 	/*
 		http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
@@ -11,7 +25,11 @@ func main() {
 		})
 		http.ListenAndServe(":9000", nil)
 	*/
-	test2()
+
+	//test2()
+	// test3()
+	// test4()
+	test5()
 }
 
 func test1() {
@@ -26,3 +44,67 @@ func test2() {
 		fmt.Println(i)
 	}
 }
+
+func test3() {
+	s1 := myStruct{
+		X: 1,
+		Y: 2,
+	}
+
+	s2 := myStruct{X: 123, Y: 23434}
+
+	//ptr := &s2
+
+	s1.method()
+	s2.methodPtr()
+}
+
+func test4() {
+	var a [2]string
+	a[0] = "hello"
+	a[1] = "world"
+
+	numbers := [...]int{1, 2, 3}
+
+	fmt.Println(a)
+	fmt.Println(numbers)
+
+	// Слайсы. Не имеют фиксированной длины
+	letters := []string{"a", "b", "c"}
+	letters[1] = "sadfasd"
+	letters = append(letters, "new element", "werwe")
+
+	// Пустой слайс
+	createSlice := make([]string, 3)
+
+	fmt.Println(letters)
+	fmt.Println(len(createSlice))
+	fmt.Println(cap(createSlice))
+}
+
+func test5() {
+	animalArr := [4]string{
+		"dog",
+		"cat",
+		"giraffe",
+		"elephant",
+	}
+
+	/*
+		animalSlic := []string{
+			"dog",
+			"cat",
+			"giraffe",
+			"elephant",
+		}
+	*/
+	a := animalArr[0:2]
+	fmt.Println(a)
+
+	b := animalArr[1:3]
+	fmt.Println(b)
+
+	b[0] = "123"
+	fmt.Println(a)
+	fmt.Println(animalArr)
+}

BIN
hw_libs/__pycache__/modbus.cpython-310.pyc


+ 32 - 6
hw_libs/io_module.py

@@ -4,7 +4,8 @@ from colorama import Fore
 import time
 import os
 
-reg_table = {'in_bits': 0x0100, 'uptime': 0x0800, 'rtc_unix': 0x0802, 'rtc_sinhro': 0x0804}
+reg_table = {'in_bits': 0x0100, 'in_cnt': 0x0102, 'in_mode': 0x0120,'uptime': 0x0800, 
+             'rtc_unix': 0x0802, 'rtc_sinhro': 0x0804}
 
 
 class IO_Module(Modbus):
@@ -72,10 +73,26 @@ class IO_Module(Modbus):
         print('End of transmission')
         self.iap_finish()
 
-    def get_input_bit(self) -> str:
+    # 0x0100 - текущее состояние входов
+    def get_inputs_bit(self) -> str:
         data = self.read_holding_registers(reg_table['in_bits'], 1)
         return format(data[0], '08b')
 
+    # 0x0101 - 0x0110 Счетчики импульсов
+    def get_inputs_counters(self):
+        data = []
+        for i in range(reg_table['in_cnt'], reg_table['in_cnt'] + 16, 2):
+            data.append(self.read_uint32_holding(i))
+        return data                              
+
+    # 0x0120 - режим работы входов
+    def get_inputs_mode(self):
+        data = self.read_holding_registers(reg_table['in_mode'], 1)
+        return format(data[0], '08b')
+
+    def set_inputs_mode(self, val):
+        self.write_holding_register(reg_table['in_mode'], val)
+
     def get_uptime(self):
         return self.read_uint32_holding(reg_table['uptime'])
 
@@ -89,8 +106,8 @@ class IO_Module(Modbus):
 
 def main():
     colorama.init(autoreset=True)
-    dev = IO_Module('COM22', 115200, 1)
-    dev.MB_DEBUG = True
+    dev = IO_Module('COM24', 115200, 1)
+    dev.MB_DEBUG = False
     # dev.update('fw.bin')
 
     # Запрос системных параметров, установка времени
@@ -104,10 +121,19 @@ def main():
     # unix_time = dev.get_rtc()
     # print(f'RTC: {time.ctime(unix_time)}. Unix time stamp:  {unix_time}')
     
-    while True:
-        print(Fore.GREEN + 'Inputs values [bit field]:', Fore.YELLOW + dev.get_input_bit())
+    # while True:
+    for i in range(10):
+        print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
+        print('Inputs values [bit field :', Fore.GREEN + dev.get_inputs_bit())
+        print('Inputs mode [bit field]  :', Fore.GREEN + dev.get_inputs_mode())
+        data = dev.get_inputs_counters()
+        print('Inputs counters          :', Fore.GREEN + ' | '.join(str(el) for el in data))
+        dev.set_inputs_mode(i)
+
         time.sleep(1)
+
     
 
+
 if __name__ == '__main__':
     main()

+ 8 - 0
hw_libs/modbus.py

@@ -159,6 +159,14 @@ class Modbus(ModbusMixin):
         if request[:4] != response:
             raise MBError('Incorrect response payload')
     
+    #
+    def write_holding_register(self, address: int, value: int):
+        """Write 16-bit integer to register on device"""
+        request = address.to_bytes(2, 'big') + value.to_bytes(2, 'big')
+        response = self.mb_func(6, request, len(request))
+        if request != response:
+            raise MBError('Incorrect response payload')
+
     def write_uint32(self, address: int, value: int):
         """Write 32-bit integer to holding register"""
         self.write_holding_registers_raw(address, struct.pack('>I', value))