Parcourir la source

fix snap7 server

Johannes Müller il y a 3 ans
Parent
commit
fbdf015f9e

+ 3 - 0
.gitignore

@@ -5,6 +5,7 @@
 
 *.csv
 *.csv.zip
+logs_*.zip
 
 ~$*
 __pycache__/
@@ -13,3 +14,5 @@ __pycache__/
 *.Wrk
 *.Sem
 *.ACD.Recovery
+
+/box-pc/influxdb2*/

+ 3 - 2
box-pc/application/database/csvFile.py

@@ -2,7 +2,7 @@ import csv
 import os
 from datetime import datetime
 import dataclasses
-from zipfile import ZipFile
+import zipfile
 
 from structures.measurement import Measurement24v
 
@@ -15,13 +15,14 @@ class CSVFile:
   def __init__(self) -> None:
     if not os.path.exists(self.path):
       os.mkdir(self.path)
+    self.zipname = os.path.join(self.path, F"logs_{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.zip")
     self.new_file()
 
   def new_file(self):
 
     if self.file:
       self.file.close()
-      with ZipFile(self.filename + ".zip", 'w') as zf:
+      with zipfile.ZipFile(self.zipname, 'a', compression=zipfile.ZIP_BZIP2, compresslevel=9) as zf:
         zf.write(self.filename, os.path.basename(self.filename))
       os.remove(self.filename)
       

+ 10 - 3
box-pc/application/inputs/__main__.py

@@ -1,14 +1,21 @@
 import time
 
+from snap7.client import Client
+
 from .allen_bradley_connect import AllenBradleyCPU
+from .snap7_server import SiemensCPU
 
-cpu = AllenBradleyCPU()
+cpu = SiemensCPU()
 cpu.start()
 
+client = Client()
+client.connect("127.0.0.1", 0, 0, 1102)
 
 while True:
-  time.sleep(.1)
+  time.sleep(1)
   vals = [0] * 16
   for meas in cpu.read():
     vals[meas.channel] = meas.current
-  print(vals)
+
+  client.db_write(1, 0, b'Hello World')
+  client.db_read(1, 0, 4)

+ 0 - 1
box-pc/application/inputs/allen_bradley_connect.py

@@ -3,7 +3,6 @@ from threading import Thread
 import time
 from datetime import datetime
 
-
 from inputs.common import Input
 
 localtz = datetime.now().astimezone().tzinfo

+ 23 - 5
box-pc/application/inputs/snap7_server.py

@@ -1,10 +1,28 @@
 import snap7
 import time
-import ctypes
+import re
+from datetime import datetime
 
-server = snap7.server.Server()
+from inputs.common import Input
 
-data = ctypes.c_buffer(0, 12)
+class SiemensCPU(Input):
+  interval = 0.02
 
-server.register_area(1, 0, data)
-snap7.server.mainloop(102)
+  def __init__(self):
+    super().__init__(self.read_handler)
+    self.server = snap7.server.Server(True)
+    size = 100
+    self.DBdata = (snap7.types.wordlen_to_ctypes[snap7.types.WordLen.Byte.value] * size)()
+    self.server.register_area(snap7.types.srvAreaDB, 1, self.DBdata)
+    self.server.start(1102)
+
+  def read_handler(self):
+    event : snap7.types.SrvEvent
+    while event := self.server.pick_event():
+      timestamp = datetime.now()
+      text = self.server.event_text(event)
+      match = re.match("^(?P<datetime>\d+-\d+-\d+ \d+:\d+:\d+) \[(?P<host>[\w\.:]+)\] (?P<type>[\w ]+), Area : (?P<area>.+), Start : (?P<start>\d+), Size : (?P<size>\d+) --> (?P<response>.+)$", text)
+      if not match:
+        print(text)
+        continue
+      

BIN
box-pc/requirements.txt


+ 7 - 0
box-pc/setup.sh

@@ -0,0 +1,7 @@
+RELEASE=influxdb2-2.1.1-windows-amd64
+
+if [ ! -d "./$RELEASE" ]; then
+  curl https://dl.influxdata.com/influxdb/releases/$RELEASE.zip -o $RELEASE.zip
+  unzip ./$RELEASE.zip -d "./$RELEASE"
+  rm ./$RELEASE.zip
+fi