Просмотр исходного кода

2023/2/2 修复检查节点BUG

wk 2 лет назад
Родитель
Сommit
7ddb51c5e1

+ 17 - 12
指令检查节点/CheckEntrance.py

@@ -5,7 +5,7 @@ import time
 import async_communication as CM
 import message_pb2 as message
 import google.protobuf.text_format as tf
-
+import asyncio
 MeasureStatu={"ok":0,"无数据":1,"噪声":2,"超界":3}
 ArrowType={0:"正确图片",0x01:"向后调整",0x02:"向前调整",0x04:"向右调整",0x08:"向左调整"
            ,0x10:"左前调整",0x06:"右前调整",0x09:"右后调整",0x05:"左后调整"}
@@ -29,26 +29,21 @@ class EntranceChecker(threading.Thread):
     def receive_measureInfo(self,statu):
         self.measure_statu=statu
 
-    def exit_isOK(self, pick_table):
+    async def exit_isOK(self, pick_table):
         if pick_table.primary_key is None:
             pick_table.statu.execute_statu = message.eError
             pick_table.statu.statu_description = " 唯一码不能为空!"
             return tf.MessageToString(pick_table, as_utf8=True)
         return tf.MessageToString(pick_table, as_utf8=True)
 
-    def entrance_isOK(self,park_table):
+    async def entrance_isOK(self,park_table):
         park = message.park_table()
         park.CopyFrom(park_table)
         measure_info = message.measure_info()
-        if self.measure_statu.statu is not None and self.measure_statu.timeout() is False:
-            tf.Parse(self.measure_statu.statu, measure_info)
-        else:
-            park.statu.execute_statu = message.eError
-            park.statu.statu_description = "服务器超时,请联系管理员!"
-            return tf.MessageToString(park, as_utf8=True)
+        tf.Parse(self.measure_statu.statu, measure_info)
         tm = time.time()
         if self.error_str == 'OK':
-            while time.time() - tm < 1:
+            while time.time() - tm < 2:
                 if measure_info.border_statu == MeasureStatu["ok"] and measure_info.ground_status == 0:
                     park.statu.execute_statu = message.eNormal
                     park.statu.statu_description = self.error_str
@@ -63,13 +58,23 @@ class EntranceChecker(threading.Thread):
                         park.entrance_measure_info.height = 1.90
                     return tf.MessageToString(park, as_utf8=True)
                 else:
+                    await asyncio.sleep(0.1)
+                    #time.sleep(0.1)
                     if self.measure_statu.statu is not None and self.measure_statu.timeout() is False:
-                        tf.Parse(self.measure_statu.statu, measure_info)
-                time.sleep(0.05)
+                        try:
+                            measure_info = message.measure_info()
+                            tf.Parse(self.measure_statu.statu, measure_info)
+                            print("check measure info again:",measure_info)
+                        except:
+                            print("parse exception:\n"+self.measure_statu.statu)
+
+
+            print(measure_info)
             park.statu.execute_statu = message.eError
             park.statu.statu_description = "请检查入口处是否有人员逗留!"
             return tf.MessageToString(park, as_utf8=True)
         else:
+            print(measure_info)
             park.statu.execute_statu = message.eError
             park.statu.statu_description = self.error_str
             return tf.MessageToString(park, as_utf8=True)

+ 1 - 1
指令检查节点/async_communication.py

@@ -84,7 +84,7 @@ class RabbitAsyncCommunicator(threading.Thread):
         async with queue.iterator() as queue_iter:
             async for message in queue_iter:
                 if not callback==None:
-                    callback(message.body.decode())
+                    await callback(message.body.decode())
                     await message.ack()
                 if self._closing==True:
                     return

+ 13 - 20
指令检查节点/node.py

@@ -25,31 +25,28 @@ statu_ex_keys = [
     ["statu_ex","dispatch_3_statu_port"]
 ]
 # mq参数
-# mq_ip = "192.168.1.233"
-mq_ip = "127.0.0.1"
-
+mq_ip = "192.168.1.233"
 mq_port = 5672
-# mq_user = "zx"
-# mq_password = "zx123456"
-mq_user = "wk"
-mq_password = "123456"
+mq_user = "zx"
+mq_password = "zx123456"
 ex_name = "command_ex"
-def user_command_callback(body):
+
+async def user_command_callback(body):
     if body.find("car_number")>=0:
-        check_park_command(body)
+        await check_park_command(body)
     elif body.find("primary_key")>=0:
-        check_pick_command(body)
+        await check_pick_command(body)
     else:
         print("指令类型错误!\n%s" % body)
 
 
 
 
-def check_park_command(body):
+async def check_park_command(body):
     print("recieve park_command_queue message:%s" % body)
     park = message.park_table()
     tf.Parse(body, park)
-    table = EntranceCheckers[park.terminal_id-1].entrance_isOK(park)
+    table = await EntranceCheckers[park.terminal_id-1].entrance_isOK(park)
     cmd = message.park_table()
     tf.Parse(table, cmd)
     if cmd.statu.execute_statu == message.eNormal:
@@ -66,11 +63,11 @@ def check_park_command(body):
     print("发送反馈端口:%s    反馈表单:%s"%(response_port,table))
 
 
-def check_pick_command(body):
+async def check_pick_command(body):
     print("recv pick_command_queue message:%s" % body)
     pick = message.pick_table()
     tf.Parse(body, pick)
-    table = EntranceCheckers[0].exit_isOK(pick)
+    table = await EntranceCheckers[0].exit_isOK(pick)
     cmd = message.pick_table()
     tf.Parse(table, cmd)
     if cmd.statu.execute_statu == message.eNormal:
@@ -114,12 +111,8 @@ for i in range(6):
 
 if __name__ == '__main__':
 # 消费指令消息
-    statu = message.park_table()
-    statu.statu.execute_statu = message.eNormal
-    statu.car_number = "鄂AWK0001"
-    statu.terminal_id = 5
-    statu.unit_id = 3
-    print(statu)
+    statu = message.table_statu()
+    statu.execute_statu = message.eNormal
     body = tf.MessageToString(statu, as_utf8=True)
     while True:
         g_rabbitmq.publish("statu_ex", "command_check_statu_port",body)