Quellcode durchsuchen

Скрипты для работы с модулем IO.

TelenkovDmitry vor 1 Jahr
Ursprung
Commit
67c051f334
3 geänderte Dateien mit 90 neuen und 27 gelöschten Zeilen
  1. 30 0
      go/server/client.py
  2. 20 21
      go/server/main.go
  3. 40 6
      hw_libs/io_module.py

+ 30 - 0
go/server/client.py

@@ -0,0 +1,30 @@
+import socket
+
+class NetClient:
+    TIMEOUT = 3
+    def __init__(self, ip, port) -> None:
+        self.ip = ip
+        self.port = port
+
+    def request(self, path, method='GET', body=''):
+        sock = socket.socket()
+        sock.settimeout(self.TIMEOUT)
+        try:
+            sock.connect((self.ip, self.port))
+            req = '{} {} HTTP/1.1\r\nHost:\r\nContent-Length: {}\r\n\r\n{}'.format(method, path, len(body), body).encode()
+            sock.sendall(req)
+            data = sock.recv(1024)
+            print(data)
+            sock.close()
+            print(req)
+        except Exception as e:
+            print(e)
+
+
+def main():
+    client = NetClient('localhost', 9000)
+    # client.request('/index.html', 'GET', '')
+    # client.request('/fw.bin', 'GET', '')
+
+if __name__ == '__main__':
+    main()

+ 20 - 21
go/server/main.go

@@ -2,33 +2,32 @@ package main
 
 import (
 	"fmt"
-	"io"
 	"net/http"
-	"os"
 )
 
 func Index(w http.ResponseWriter, r *http.Request) {
-	fmt.Fprintf(w, "Hello world")
-
-	fmt.Println("File opening...")
-	file, err := os.Open("main.go")
-	if err != nil {
-		fmt.Println(err)
-		os.Exit(1)
-	}
-	defer file.Close()
+	fmt.Println("Recv data")
+	/*
+		fmt.Fprintf(w, "Hello world")
+		fmt.Println("File opening...")
+		file, err := os.Open("main.go")
+		if err != nil {
+			fmt.Println(err)
+			os.Exit(1)
+		}
+		defer file.Close()
 
-	data := make([]byte, 64)
+		data := make([]byte, 64)
 
-	for {
-		n, err := file.Read(data)
-		if err == io.EOF {
-			break
+		for {
+			n, err := file.Read(data)
+			if err == io.EOF {
+				break
+			}
+			w.Write(data)
+			fmt.Print(string(data[:n]))
 		}
-		w.Write(data)
-		fmt.Print(string(data[:n]))
-	}
-
+	*/
 }
 
 func Update(w http.ResponseWriter, r *http.Request) {
@@ -44,7 +43,7 @@ func Update(w http.ResponseWriter, r *http.Request) {
 
 func main() {
 	fmt.Println("Starting HTTP server...")
-	// http.HandleFunc("/", Index)
+	http.HandleFunc("/index.html", Index)
 	http.HandleFunc("/fw.bin", Update)
 	http.ListenAndServe(":9000", nil)
 }

+ 40 - 6
hw_libs/io_module.py

@@ -4,9 +4,9 @@ from colorama import Fore
 import time
 import os
 
-reg_table = {'in_bits': 0x0100, 'in_cnt': 0x0102, 'in_mode': 0x0120,'uptime': 0x0800, 
-             'in_norm': 0x0122,'rtc_unix': 0x0802, 'rtc_sinhro': 0x0804,
-             'in_deb_start': 0x124}
+reg_table = {'in_bits': 0x0100, 'in_cnt': 0x0102, 'in_mode': 0x0120, 'in_norm': 0x0122, 'in_deb_start': 0x124,
+             'out_cur': 0x0200, 
+             'rtc_unix': 0x0802, 'rtc_sinhro': 0x0804, 'uptime': 0x0800,}
 
 
 class IO_Module(Modbus):
@@ -116,9 +116,26 @@ class IO_Module(Modbus):
         data = self.read_holding_registers(reg_table['in_deb_start'] + input - 1, 1)
         return data[0]
 
-    def set_devounce_channel(self, input, val):
+    def set_debounce_channel(self, input, val):
         self.write_holding_register(reg_table['in_deb_start'] + input - 1, val)
 
+    # 0x0200 - текущее состояние выходов в обычно режиме
+    def get_output(self):
+        data = self.read_holding_registers(reg_table['out_cur'], 1)
+        return format(data[0], '08b')
+
+    # 0x0200 - текущее состояние выходов в обычно режиме
+    def set_outputs(self, val):
+        self.write_holding_register(reg_table['out_cur'], val)
+
+    def set_output(self, output, val):
+        ret = self.read_holding_registers(reg_table['out_cur'], 1)
+        if val == 1:
+            data = ret[0] | (0b1 << (output - 1))
+        else:
+            data = ret[0] & ~(0b1 << (output - 1))
+        self.set_outputs(data)
+
     def get_uptime(self):
         return self.read_uint32_holding(reg_table['uptime'])
 
@@ -154,7 +171,8 @@ def main():
         # 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_debounce_channel(i, 50 + i)
+        dev.set_output(i, 0)
     
     # Установить нормальное состояние входов
     # dev.set_inputs_norm_state(0b00110101)
@@ -173,7 +191,23 @@ def main():
         # Значение счетчиков
         data = dev.get_inputs_counters()
         print('Inputs counters           :', Fore.GREEN + ' | '.join(str(el) for el in data))
-                
+
+        # Текущее состояние выходов в обычном режиме
+        print('Outputs norm [bit field]  :', Fore.GREEN + dev.get_output())
+
+
+
+        # # Для проверки выходов в обычном режиме
+        # for i in range(1, 9):
+        #     dev.set_output(i, 1)
+        #     print('Outputs norm [bit field]  :', Fore.GREEN + dev.get_output())
+        #     time.sleep(0.1)
+
+        # for i in range(1, 9):
+        #     dev.set_output(i, 0)
+        #     print('Outputs norm [bit field]  :', Fore.GREEN + dev.get_output())
+        #     time.sleep(0.1)
+
         # break
         time.sleep(1)