oldwine пре 3 месеци
родитељ
комит
2c38e80d67
6 измењених фајлова са 239 додато и 124 уклоњено
  1. 50 49
      conf/5#nodes.csv
  2. 46 46
      conf/6#nodes.csv
  3. 3 3
      main.py
  4. 16 0
      models/data_forward.py
  5. 98 4
      utils/s7data.py
  6. 26 22
      utils/statepoint.py

+ 50 - 49
conf/5#nodes.csv

@@ -1,49 +1,50 @@
-name,type,db,start,offset,size,read_allow,write_allow,frequency
-浇铸信号,boollist,130,0,0,1,TRUE,FALSE,500
-大包重量1,real,130,20,0,4,TRUE,FALSE,500
-大包重量2,real,130,40,0,4,TRUE,FALSE,500
-中包重量,real,130,44,0,4,TRUE,FALSE,500
-L1切割信号,boollist,131,4,0,1,TRUE,FALSE,500
-L2切割信号,boollist,132,4,0,1,TRUE,FALSE,500
-L3切割信号,boollist,133,4,0,1,TRUE,FALSE,500
-L4切割信号,boollist,134,4,0,1,TRUE,FALSE,500
-L5切割信号,boollist,135,4,0,1,TRUE,FALSE,500
-L6切割信号,boollist,136,4,0,1,TRUE,FALSE,500
-L7切割信号,boollist,137,4,0,1,TRUE,FALSE,500
-L8切割信号,boollist,138,4,0,1,TRUE,FALSE,500
-L1定尺,int,100,20,0,2,TRUE,FALSE,500
-L2定尺,int,100,22,0,2,TRUE,FALSE,500
-L3定尺,int,100,24,0,2,TRUE,FALSE,500
-L4定尺,int,100,26,0,2,TRUE,FALSE,500
-L5定尺,int,101,20,0,2,TRUE,FALSE,500
-L6定尺,int,101,22,0,2,TRUE,FALSE,500
-L7定尺,int,101,24,0,2,TRUE,FALSE,500
-L8定尺,int,101,26,0,2,TRUE,FALSE,500
-L1拉速,real,131,20,0,4,TRUE,FALSE,500
-L2拉速,real,132,20,0,4,TRUE,FALSE,500
-L3拉速,real,133,20,0,4,TRUE,FALSE,500
-L4拉速,real,134,20,0,4,TRUE,FALSE,500
-L5拉速,real,135,20,0,4,TRUE,FALSE,500
-L6拉速,real,136,20,0,4,TRUE,FALSE,500
-L7拉速,real,137,20,0,4,TRUE,FALSE,500
-L8拉速,real,138,20,0,4,TRUE,FALSE,500
-推钢机激光,real,360,56,0,4,TRUE,FALSE,500
-L1挡板,bool,131,40,0,1,TRUE,FALSE,500
-L2挡板,bool,132,40,0,1,TRUE,FALSE,500
-L3挡板,bool,133,40,0,1,TRUE,FALSE,500
-L4挡板,bool,134,40,0,1,TRUE,FALSE,500
-L5挡板,bool,135,40,0,1,TRUE,FALSE,500
-L6挡板,bool,136,40,0,1,TRUE,FALSE,500
-L7挡板,bool,137,40,0,1,TRUE,FALSE,500
-L8挡板,bool,138,40,0,1,TRUE,FALSE,500
-L1坯头位置,int,100,2,0,2,TRUE,FALSE,500
-L2坯头位置,int,100,4,0,2,TRUE,FALSE,500
-L3坯头位置,int,100,6,0,2,TRUE,FALSE,500
-L4坯头位置,int,100,8,0,2,TRUE,FALSE,500
-L5坯头位置,int,101,2,0,2,TRUE,FALSE,500
-L6坯头位置,int,101,4,0,2,TRUE,FALSE,500
-L7坯头位置,int,101,6,0,2,TRUE,FALSE,500
-L8坯头位置,int,101,8,0,2,TRUE,FALSE,500
-天车A1位置,dint,360,100,0,4,TRUE,FALSE,500
-天车A2位置,dint,360,104,0,4,TRUE,FALSE,500
-天车A3位置,dint,360,108,0,4,TRUE,FALSE,500
+name,type,db,start,offset,size,read_allow,write_allow,frequency,group
+浇铸信号,boollist,130,0,0,1,TRUE,FALSE,500,1
+大包重量1,real,130,20,0,4,TRUE,FALSE,500,1
+大包重量2,real,130,40,0,4,TRUE,FALSE,500,1
+中包重量,real,130,44,0,4,TRUE,FALSE,500,1
+L1切割信号,boollist,131,4,0,1,TRUE,FALSE,500,1
+L2切割信号,boollist,132,4,0,1,TRUE,FALSE,500,1
+L3切割信号,boollist,133,4,0,1,TRUE,FALSE,500,1
+L4切割信号,boollist,134,4,0,1,TRUE,FALSE,500,1
+L5切割信号,boollist,135,4,0,1,TRUE,FALSE,500,1
+L6切割信号,boollist,136,4,0,1,TRUE,FALSE,500,1
+L7切割信号,boollist,137,4,0,1,TRUE,FALSE,500,1
+L8切割信号,boollist,138,4,0,1,TRUE,FALSE,500,1
+L1定尺,int,100,20,0,2,TRUE,FALSE,500,1
+L2定尺,int,100,22,0,2,TRUE,FALSE,500,1
+L3定尺,int,100,24,0,2,TRUE,FALSE,500,1
+L4定尺,int,100,26,0,2,TRUE,FALSE,500,1
+L5定尺,int,101,20,0,2,TRUE,FALSE,500,1
+L6定尺,int,101,22,0,2,TRUE,FALSE,500,1
+L7定尺,int,101,24,0,2,TRUE,FALSE,500,1
+L8定尺,int,101,26,0,2,TRUE,FALSE,500,2
+L1拉速,real,131,20,0,4,TRUE,FALSE,500,2
+L2拉速,real,132,20,0,4,TRUE,FALSE,500,2
+L3拉速,real,133,20,0,4,TRUE,FALSE,500,2
+L4拉速,real,134,20,0,4,TRUE,FALSE,500,2
+L5拉速,real,135,20,0,4,TRUE,FALSE,500,2
+L6拉速,real,136,20,0,4,TRUE,FALSE,500,2
+L7拉速,real,137,20,0,4,TRUE,FALSE,500,2
+L8拉速,real,138,20,0,4,TRUE,FALSE,500,2
+推钢机激光,real,360,56,0,4,TRUE,FALSE,500,2
+L1挡板,bool,131,40,0,1,TRUE,FALSE,500,2
+L2挡板,bool,132,40,0,1,TRUE,FALSE,500,2
+L3挡板,bool,133,40,0,1,TRUE,FALSE,500,2
+L4挡板,bool,134,40,0,1,TRUE,FALSE,500,2
+L5挡板,bool,135,40,0,1,TRUE,FALSE,500,2
+L6挡板,bool,136,40,0,1,TRUE,FALSE,500,2
+L7挡板,bool,137,40,0,1,TRUE,FALSE,500,2
+L8挡板,bool,138,40,0,1,TRUE,FALSE,500,2
+L1坯头位置,int,100,2,0,2,TRUE,FALSE,500,2
+L2坯头位置,int,100,4,0,2,TRUE,FALSE,500,3
+L3坯头位置,int,100,6,0,2,TRUE,FALSE,500,3
+L4坯头位置,int,100,8,0,2,TRUE,FALSE,500,3
+L5坯头位置,int,101,2,0,2,TRUE,FALSE,500,3
+L6坯头位置,int,101,4,0,2,TRUE,FALSE,500,3
+L7坯头位置,int,101,6,0,2,TRUE,FALSE,500,3
+L8坯头位置,int,101,8,0,2,TRUE,FALSE,500,3
+天车A1位置,dint,360,100,0,4,TRUE,FALSE,500,3
+天车A2位置,dint,360,104,0,4,TRUE,FALSE,500,3
+天车A3位置,dint,360,108,0,4,TRUE,FALSE,500,3
+爬坡监测点,boollist,105,38,0,1,TRUE,FALSE,500,3

+ 46 - 46
conf/6#nodes.csv

@@ -1,46 +1,46 @@
-name,type,db,start,offset,size,read_allow,write_allow,frequency
-浇铸信号,boollist,230,0,0,1,TRUE,FALSE,500
-大包重量1,real,230,20,0,4,TRUE,FALSE,500
-大包重量2,real,230,40,0,4,TRUE,FALSE,500
-中包重量,real,230,28,0,4,TRUE,FALSE,500
-L1切割信号,boollist,231,4,0,1,TRUE,FALSE,500
-L2切割信号,boollist,232,4,0,1,TRUE,FALSE,500
-L3切割信号,boollist,233,4,0,1,TRUE,FALSE,500
-L4切割信号,boollist,234,4,0,1,TRUE,FALSE,500
-L5切割信号,boollist,235,4,0,1,TRUE,FALSE,500
-L6切割信号,boollist,236,4,0,1,TRUE,FALSE,500
-L7切割信号,boollist,237,4,0,1,TRUE,FALSE,500
-L8切割信号,boollist,238,4,0,1,TRUE,FALSE,500
-L1定尺,int,200,20,0,2,TRUE,FALSE,500
-L2定尺,int,200,22,0,2,TRUE,FALSE,500
-L3定尺,int,200,24,0,2,TRUE,FALSE,500
-L4定尺,int,200,26,0,2,TRUE,FALSE,500
-L5定尺,int,201,20,0,2,TRUE,FALSE,500
-L6定尺,int,201,22,0,2,TRUE,FALSE,500
-L7定尺,int,201,24,0,2,TRUE,FALSE,500
-L8定尺,int,201,26,0,2,TRUE,FALSE,500
-L1拉速,real,231,20,0,4,TRUE,FALSE,500
-L2拉速,real,232,20,0,4,TRUE,FALSE,500
-L3拉速,real,233,20,0,4,TRUE,FALSE,500
-L4拉速,real,234,20,0,4,TRUE,FALSE,500
-L5拉速,real,235,20,0,4,TRUE,FALSE,500
-L6拉速,real,236,20,0,4,TRUE,FALSE,500
-L7拉速,real,237,20,0,4,TRUE,FALSE,500
-L8拉速,real,238,20,0,4,TRUE,FALSE,500
-推钢机激光,real,205,38,0,4,TRUE,FALSE,500
-L1挡板,bool,231,40,0,1,TRUE,FALSE,500
-L2挡板,bool,232,40,0,1,TRUE,FALSE,500
-L3挡板,bool,233,40,0,1,TRUE,FALSE,500
-L4挡板,bool,234,40,0,1,TRUE,FALSE,500
-L5挡板,bool,235,40,0,1,TRUE,FALSE,500
-L6挡板,bool,236,40,0,1,TRUE,FALSE,500
-L7挡板,bool,237,40,0,1,TRUE,FALSE,500
-L8挡板,bool,238,40,0,1,TRUE,FALSE,500
-L1坯头位置,int,200,2,0,2,TRUE,FALSE,500
-L2坯头位置,int,200,4,0,2,TRUE,FALSE,500
-L3坯头位置,int,200,6,0,2,TRUE,FALSE,500
-L4坯头位置,int,200,8,0,2,TRUE,FALSE,500
-L5坯头位置,int,201,2,0,2,TRUE,FALSE,500
-L6坯头位置,int,201,4,0,2,TRUE,FALSE,500
-L7坯头位置,int,201,6,0,2,TRUE,FALSE,500
-L8坯头位置,int,201,8,0,2,TRUE,FALSE,500
+name,type,db,start,offset,size,read_allow,write_allow,frequency,group
+浇铸信号,boollist,230,0,0,1,TRUE,FALSE,500,1
+大包重量1,real,230,20,0,4,TRUE,FALSE,500,1
+大包重量2,real,230,40,0,4,TRUE,FALSE,500,1
+中包重量,real,230,28,0,4,TRUE,FALSE,500,1
+L1切割信号,boollist,231,4,0,1,TRUE,FALSE,500,1
+L2切割信号,boollist,232,4,0,1,TRUE,FALSE,500,1
+L3切割信号,boollist,233,4,0,1,TRUE,FALSE,500,1
+L4切割信号,boollist,234,4,0,1,TRUE,FALSE,500,1
+L5切割信号,boollist,235,4,0,1,TRUE,FALSE,500,1
+L6切割信号,boollist,236,4,0,1,TRUE,FALSE,500,1
+L7切割信号,boollist,237,4,0,1,TRUE,FALSE,500,1
+L8切割信号,boollist,238,4,0,1,TRUE,FALSE,500,1
+L1定尺,int,200,20,0,2,TRUE,FALSE,500,1
+L2定尺,int,200,22,0,2,TRUE,FALSE,500,1
+L3定尺,int,200,24,0,2,TRUE,FALSE,500,1
+L4定尺,int,200,26,0,2,TRUE,FALSE,500,1
+L5定尺,int,201,20,0,2,TRUE,FALSE,500,1
+L6定尺,int,201,22,0,2,TRUE,FALSE,500,1
+L7定尺,int,201,24,0,2,TRUE,FALSE,500,1
+L8定尺,int,201,26,0,2,TRUE,FALSE,500,2
+L1拉速,real,231,20,0,4,TRUE,FALSE,500,2
+L2拉速,real,232,20,0,4,TRUE,FALSE,500,2
+L3拉速,real,233,20,0,4,TRUE,FALSE,500,2
+L4拉速,real,234,20,0,4,TRUE,FALSE,500,2
+L5拉速,real,235,20,0,4,TRUE,FALSE,500,2
+L6拉速,real,236,20,0,4,TRUE,FALSE,500,2
+L7拉速,real,237,20,0,4,TRUE,FALSE,500,2
+L8拉速,real,238,20,0,4,TRUE,FALSE,500,2
+推钢机激光,real,205,38,0,4,TRUE,FALSE,500,2
+L1挡板,bool,231,40,0,1,TRUE,FALSE,500,2
+L2挡板,bool,232,40,0,1,TRUE,FALSE,500,2
+L3挡板,bool,233,40,0,1,TRUE,FALSE,500,2
+L4挡板,bool,234,40,0,1,TRUE,FALSE,500,2
+L5挡板,bool,235,40,0,1,TRUE,FALSE,500,2
+L6挡板,bool,236,40,0,1,TRUE,FALSE,500,2
+L7挡板,bool,237,40,0,1,TRUE,FALSE,500,2
+L8挡板,bool,238,40,0,1,TRUE,FALSE,500,2
+L1坯头位置,int,200,2,0,2,TRUE,FALSE,500,2
+L2坯头位置,int,200,4,0,2,TRUE,FALSE,500,3
+L3坯头位置,int,200,6,0,2,TRUE,FALSE,500,3
+L4坯头位置,int,200,8,0,2,TRUE,FALSE,500,3
+L5坯头位置,int,201,2,0,2,TRUE,FALSE,500,3
+L6坯头位置,int,201,4,0,2,TRUE,FALSE,500,3
+L7坯头位置,int,201,6,0,2,TRUE,FALSE,500,3
+L8坯头位置,int,201,8,0,2,TRUE,FALSE,500,3

+ 3 - 3
main.py

@@ -30,7 +30,7 @@ s7_5.connect('192.168.1.215', 0, 0)
 data_5 = S7data(r"conf/5#nodes.csv")
 data_5.set_S7Client(s7_5)
 data_5.set_logger(logger_5)
-data_5.start_auto_update()
+data_5.auto_update_group()
 logger_5.info('[PREPARE]5#机PLC连接成功')
 
 s7_6 = S7Client()
@@ -38,7 +38,7 @@ s7_6.connect('192.168.1.216', 0, 0)
 data_6 = S7data(r"conf/6#nodes.csv")
 data_6.set_S7Client(s7_6)
 data_6.set_logger(logger_6)
-data_6.start_auto_update()
+data_6.auto_update_group()
 logger_6.info('[PREPARE]6#机PLC连接成功')
 
 
@@ -53,7 +53,7 @@ logger_6.info('[PREPARE]6#机PLC连接成功')
 # logger_5.info('[PREPARE]与MES使用MQTT连接成功')
 # logger_6.info('[PREPARE]与MES使用MQTT连接成功')
 
-mqtt_web = MqttClient('python-mqtt-992_test')
+mqtt_web = MqttClient('python-mqtt-992_forward_test')
 mqtt_web.connect('192.168.0.119', 1883)
 mqtt_web.loop_start()
 data_web = Mqttdata()

+ 16 - 0
models/data_forward.py

@@ -1,5 +1,6 @@
 from utils.s7data import *
 from models.data_sender import *
+from utils.statepoint import *
 import copy
 
 class Forward:
@@ -21,6 +22,9 @@ class Forward:
             self.crane_A2 = data_s7.make_point("天车A2位置")
             self.crane_A3 = data_s7.make_point("天车A3位置")
 
+            self.roller_one_sig = Through_state_continues3(data_s7.make_point("爬坡监测点[1]"), data_s7.make_point("爬坡监测点[2]"), data_s7.make_point("爬坡监测点[3]"))
+            self.roller_one_sig.set_excite_action(self.roller_one_hostsend)
+
         self.topic = 'trace/performance/billet/monitor'
         self.qos = 0
         self.template = {
@@ -83,6 +87,16 @@ class Forward:
         
         self.sender.mqtt_publish(self.topic, tmp, self.qos)
 
+    def roller_one_hostsend(self):
+        tmp = copy.deepcopy(self.template)
+        tmp['type'] = 'roller_one'
+        tmp['data']['has_billet'] = True
+        
+        if self.sender.mqtt_publish(self.topic, tmp, self.qos)[0]:
+            print("发送失败")
+        else:
+            print('发送成功')
+
     def auto_forward(self):
         while self.run_flag:
             for i in range(8):
@@ -101,5 +115,7 @@ class Forward:
             self.run_flag = False
             self.task_thread.join()
         self.run_flag = True
+        if self.crane_flag:
+            self.roller_one_sig.allow_update()
         self.task_thread = threading.Thread(target=self.auto_forward)
         self.task_thread.start()

+ 98 - 4
utils/s7data.py

@@ -1,7 +1,33 @@
-import snap7, csv, threading, warnings, time
+import snap7, csv, threading, warnings, time, ctypes
 from utils.statepoint import *
 
-S7Client = snap7.client.Client
+class TS7DataItem(ctypes.Structure):
+    _fields_ = [
+        ('Area', ctypes.c_int),
+        ('WordLen', ctypes.c_int),
+        ('Result', ctypes.c_int),
+        ('DBNumber', ctypes.c_int),
+        ('Start', ctypes.c_int),
+        ('Amount', ctypes.c_int),
+        ('pdata', ctypes.c_void_p)
+    ]
+
+class S7Client(snap7.client.Client):
+    def multi_db_read_py(self, db_number: list, start: list, size: list):
+        count = len(size)
+        buffers = [ctypes.create_string_buffer(i) for i in size]
+        params = []
+        for i in range(count):
+            params.append(TS7DataItem(snap7.type.Areas.DB, snap7.type.WordLen.Byte, 0, db_number[i], start[i], size[i], ctypes.cast(buffers[i], ctypes.c_void_p)))
+        
+        array_type = TS7DataItem * count
+        param_array = array_type(*params)
+        result = self.read_multi_vars(param_array)
+        if result[0]:
+            raise RuntimeError("多组读取失败")
+        
+        res_rtn = [bytearray(i) for i in buffers]
+        return res_rtn
 
 class S7data:
     def __init__(self, csvfile):
@@ -13,6 +39,7 @@ class S7data:
         self.threads = []
         self.nodes = {}
         self.node_data = {}
+        self.groups = {}
         self.target_from_name = {}
         with open(csvfile) as f:
             for i in csv.DictReader(f):
@@ -21,11 +48,14 @@ class S7data:
                 else:
                     self.nodes[i['name']] = i
                     self.node_data[i['name']] = bytearray(int(i['size']))
+                    if i['group'] not in self.groups:
+                        self.groups[i['group']] = []
+                    self.groups[i['group']].append(i['name'])
 
     def set_logger(self, logger):
         self.logger = logger
 
-    def set_S7Client(self, s7c):
+    def set_S7Client(self, s7c: S7Client):
         self.S7Client = s7c
 
     def get_S7Client(self):
@@ -43,7 +73,7 @@ class S7data:
         elif self.nodes[name]['type'] == 'real':
             data = snap7.util.get_real(self.node_data[name], 0)
         elif self.nodes[name]['type'] == 'string':
-            data = name, snap7.util.get_string(self.node_data[name], 0)
+            data = self.node_data[name][2:2+int.from_bytes(self.node_data[name][1:2])].decode('gbk')
         elif self.nodes[name]['type'] == 'wstring':
             data = self.node_data[name][4:].decode(encoding='utf-16be')
         else:
@@ -108,6 +138,69 @@ class S7data:
         for i in self.threads:
             i.start()
 
+    def update_group(self, group_name):
+        nodesname = self.groups[group_name]
+        db_number = []
+        start = []
+        size = []
+
+        for name in nodesname:
+            nodeinfo = self.nodes[name]
+            db_number.append(int(nodeinfo['db']))
+            start.append(int(nodeinfo['start']))
+            size.append(int(nodeinfo['size']))
+
+        while True:
+            if not self.thread_run:
+                return None
+            
+            tmp = False
+            read_valid = True
+            with self.lock:
+                if not self.S7Client.get_connected():
+                    warnings.warn('S7Client连接中断')
+                    if self.logger:
+                        self.logger.error('S7Client连接中断')
+                    self.thread_run = False
+                    return None
+
+                try:
+                    tmp = self.S7Client.multi_db_read_py(db_number, start, size)
+                except RuntimeError as reason:
+                    warnings.warn(reason)
+                    read_valid = False
+                    if self.logger:
+                        self.logger.error(reason)
+                    self.thread_run = False
+
+            if read_valid and tmp:
+                for i in range(len(tmp)):
+                    if self.node_data[nodesname[i]] != tmp[i]:
+                        self.node_data[nodesname[i]] = tmp[i]
+                        self.send(nodesname[i])
+
+    def auto_update_group(self):
+        if self.thread_run:
+            return None
+        self.threads = []
+        if self.S7Client == None:
+            warnings.warn('未初始化S7Client')
+            if self.logger:
+                self.logger.error('未初始化S7Client')
+            return None
+        if not self.S7Client.get_connected():
+            warnings.warn('S7Client未连接')
+            if self.logger:
+                self.logger.error('S7Client未连接')
+            return None
+        
+        for group in self.groups.keys():
+            self.threads.append(threading.Thread(target=self.update_group, args=(group,)))
+
+        self.thread_run = True
+        for i in self.threads:
+            i.start()
+
     def end_auto_update(self):
         self.thread_run = False
         for i in self.threads:
@@ -134,4 +227,5 @@ class S7data:
             self.target_from_name[solvedname].append(res)
         else:
             self.target_from_name[solvedname][index].append(res)
+        self.send(name)
         return res

+ 26 - 22
utils/statepoint.py

@@ -4,6 +4,7 @@ class Statepoint:
     def __init__(self, initvalue = False, initstate = False):
         self.data = initvalue
         self.state = initstate
+        self.hmd = set()
         self.lock = threading.Lock()
         self.permitted_update = True
         self.__private_permitted_update = True
@@ -13,8 +14,11 @@ class Statepoint:
         self.keep_time = 1000
         self.pre_reset = False
 
+    def hmd_add(self, data):
+        self.hmd.add(data)
+
     def inject(self, data):
-        if self.data == data:
+        if self.data == data or (self.hmd and data in self.hmd):
             return None
         #数据更新
         self.data = data
@@ -31,29 +35,28 @@ class Statepoint:
         self.do_reset()
 
     def __update_state(self):
-        self.lock.acquire()
-        last_state = self.state
-        self.state = self.converter(self.data)
-        if last_state == False and self.state == True:
-            self.pre_reset = False
-            self.excite()
-        elif last_state == True and self.state == False:
-            if self.keep_time <= 0:
-                self.reset()
-            elif self.pre_reset:
+        with self.lock:
+            last_state = self.state
+            self.state = self.converter(self.data)
+            if last_state == False and self.state == True:
+                self.pre_reset = False
+                self.excite()
+            elif last_state == True and self.state == False:
+                if self.keep_time <= 0:
+                    self.reset()
+                elif self.pre_reset:
+                    self.pre_reset = False
+                    self.reset()
+                else:
+                    self.state = True
+                    self.__private_allow_update(False)
+                    self.pre_reset = True
+                    timer = threading.Timer(self.keep_time/1000, lambda: self.__private_allow_update())
+                    timer.start()
+            elif last_state == True and self.state == True:
                 self.pre_reset = False
-                self.reset()
             else:
-                self.state = True
-                self.__private_allow_update(False)
-                self.pre_reset = True
-                timer = threading.Timer(self.keep_time/1000, lambda: self.__private_allow_update())
-                timer.start()
-        elif last_state == True and self.state == True:
-            self.pre_reset = False
-        else:
-            self.pre_reset = False
-        self.lock.release()
+                self.pre_reset = False
 
     def __async_update_state(self):
         threading.Thread(target=self.__update_state).start()
@@ -159,6 +162,7 @@ class Through_state_separation2(Statepoint):
         self.point2.state = False
         #logger.debug('推钢机刚刚经过')
         super().reset()
+        self.point1.allow_update()
 
     def allow_update(self, enable: bool = True):
         if enable: