Commit 72525d10 authored by 张晓彤's avatar 张晓彤

1.`调度系统部署说明`更新 2.路网异常修复 3.实时调度更新

parent f9d005e2
...@@ -4,8 +4,12 @@ from para_config import * ...@@ -4,8 +4,12 @@ from para_config import *
from equipment.truck import TruckInfo from equipment.truck import TruckInfo
from equipment.excavator import ExcavatorInfo from equipment.excavator import ExcavatorInfo
from equipment.dump import DumpInfo from equipment.dump import DumpInfo
from dispatcher import Dispatcher, PreSchedule, DispatchSubmission from core.dispatcher import Dispatcher, PreSchedule
from core.group import Group
from flask_caching import Cache from flask_caching import Cache
from alg.algorithm import ExpectedTime
from data.dispatchInfo import DispatchInfo
from core.dispatcher import DispatchSubmission
config = { config = {
"DEBUG": True, # some Flask specific configs "DEBUG": True, # some Flask specific configs
...@@ -35,6 +39,9 @@ def dispatch_request(): ...@@ -35,6 +39,9 @@ def dispatch_request():
# 获取日志器 # 获取日志器
logger = get_logger("zxt.request") logger = get_logger("zxt.request")
# 更新周期参数
logger.info("#####################################请求调度更新开始#####################################")
try: try:
# 清空数据库缓存 # 清空数据库缓存
...@@ -47,7 +54,7 @@ def dispatch_request(): ...@@ -47,7 +54,7 @@ def dispatch_request():
except Exception as es: except Exception as es:
logger.error("数据库访问异常") logger.error("数据库访问异常")
logger.error(es) logger.error(es)
return jsonify(msg="未知异常, 请联系管理员", code=506) return jsonify(msg="未知异常, 请联系管理员", code=501)
try: try:
...@@ -55,62 +62,109 @@ def dispatch_request(): ...@@ -55,62 +62,109 @@ def dispatch_request():
global_period_para_update() global_period_para_update()
# get_global_para_from_cache(cache) # get_global_para_from_cache(cache)
except Exception as es:
logger.error("全局参数更新异常")
logger.error(es)
session_mysql.rollback()
session_postgre.rollback()
return jsonify(msg="未知异常, 请联系管理员", code=502)
try:
# 更新调度信息
DispatchInfo.reset()
DispatchInfo.update_device_group_structure()
if group_id not in DispatchInfo.group_set:
raise Exception("请求调度分组不存在")
DispatchInfo.update_route_distance()
DispatchInfo.update_group_mode()
DispatchInfo.update_group_name()
except Exception as es:
logger.error("调度信息更新异常")
logger.error(es)
session_mysql.rollback()
session_postgre.rollback()
return jsonify(msg="未知异常, 请联系管理员", code=503)
logger.info("Dispatchinfo,更新后信息")
logger.info("group_set")
logger.info(DispatchInfo.group_set)
logger.info("group_excavator_dict")
logger.info(DispatchInfo.group_excavator_dict)
logger.info("group_unload_area_dict")
logger.info(DispatchInfo.group_unload_area_dict)
logger.info("group_truck_dict")
logger.info(DispatchInfo.group_truck_dict)
logger.info("group_mode")
logger.info(DispatchInfo.group_mode)
logger.info("load_distance")
logger.info(DispatchInfo.load_distance)
logger.info("unload_distance")
logger.info(DispatchInfo.unload_distance)
try:
# 实例化设备对象 # 实例化设备对象
dump = DumpInfo() dump = DumpInfo()
excavator = ExcavatorInfo() excavator = ExcavatorInfo()
truck = TruckInfo(dump, excavator) truck = TruckInfo(dump, excavator)
# 设备信息更新
dump.dump_para_period_update()
excavator.excavator_para_period_update()
truck.truck_para_period_update(dump, excavator)
truck.state_period_update()
# 实例化调度预测器 # 实例化调度预测器
pre_sch = PreSchedule(truck, excavator, dump) pre_sch = PreSchedule(truck, excavator, dump)
# 实例化矿卡调度器 # 实例化输出器
dispatcher = Dispatcher(dump, excavator, truck, pre_sch, True) submission = DispatchSubmission(dump, excavator, truck)
# 实例化调度分组
group = Group(group_id, truck, pre_sch)
# 更新调度分组信息
group.info_update()
# 周期更新
dispatcher.dispatcher_period_update()
except Exception as es: except Exception as es:
logger.error("参数更新异常") logger.error("对象实例化异常")
logger.error(es) logger.error(es)
session_mysql.rollback() session_mysql.rollback()
session_postgre.rollback() session_postgre.rollback()
return jsonify(msg="未知异常, 请联系管理员", code=505)
request_trucks = []
try:
request_trucks = dispatcher.group.group_dispatch_truck[group_id]
except Exception as es:
logger.error(es)
return jsonify(msg="未知异常, 请联系管理员", code=504) return jsonify(msg="未知异常, 请联系管理员", code=504)
try: try:
# 更新周期参数
logger.info("#####################################请求调度更新开始#####################################")
if get_value("dynamic_dump_num") * get_value("dynamic_excavator_num") == 0: # 调度分组派车计划计算
# raise Exception("无动态派车计划可用") try:
return jsonify(msg="未知异常, 请联系管理员", code=503) truck_dispatch_plan_dict = group.group_dispatch(ExpectedTime)
if get_value("dynamic_truck_num") == 0: except Exception as es:
# raise Exception("无动态派车可用矿卡") logger.error(es)
return jsonify(msg="未知异常, 请联系管理员", code=502) logger.error(f'分组{group.group_id} 调度计算异常')
# 更新请调矿卡派车计划 try:
for truck_id in request_trucks:
# 调度计算
dispatcher.truck_request(truck_id)
logger.info("#####################################请求调度更新结束#####################################") logger.info(f'调度分组: {group.group_id} {DispatchInfo.group_name[group.group_id]}')
submission.group_dispatch_to_redis(group, truck_dispatch_plan_dict)
except Exception as es:
logger.error(es)
logger.error(f'分组{group.group_id} 调度写入异常')
except Exception as es: except Exception as es:
logger.error("最外层异常捕获") logger.error("最外层异常捕获")
logger.error(es) logger.error(es)
return jsonify(msg="未知异常, 请联系管理员", code=501) return jsonify(msg="未知异常, 请联系管理员", code=505)
# DBsession_postgre.close_all()
# DBsession_mysql.close_all()
session_mysql.close() session_mysql.close()
session_postgre.close() session_postgre.close()
logger.info("#####################################请求调度更新结束#####################################")
# 调度结束时间 # 调度结束时间
rtd_end_time = datetime.now() rtd_end_time = datetime.now()
......
...@@ -228,6 +228,9 @@ class DispatchInfo: ...@@ -228,6 +228,9 @@ class DispatchInfo:
logger.error("group_id->name更新异常") logger.error("group_id->name更新异常")
logger.error(es) logger.error(es)
logger.info("group_name")
logger.info(cls.group_name)
@classmethod @classmethod
# 距离-->>数据格式:矩阵-->>to_load_distance # 距离-->>数据格式:矩阵-->>to_load_distance
def update_route_distance(cls): def update_route_distance(cls):
...@@ -267,7 +270,7 @@ class DispatchInfo: ...@@ -267,7 +270,7 @@ class DispatchInfo:
except Exception as es: except Exception as es:
logger.error(f'{item} 分组装载路网异常') logger.error(f'{item} 分组装载路网异常')
cls.load_distance[item] = np.zeros((len(unload_areas), len(load_areas)), 10000) cls.load_distance[item] = np.full((len(unload_areas), len(load_areas)), 10000)
logger.error(es) logger.error(es)
try: try:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment