@startuml title 终端指令执行模块 class Terminor_Command_Executor { + * 构造函数() + * parameter:该终端指令配置参数(待定) +Terminor_Command_Executor(Terminal::Terminor_parameter parameter); +~Terminor_Command_Executor(); + * 获取终端进度状态() +TerminorStatu get_terminor_statu(); + * 执行扫描,测量任务,阻塞知道任务完成或超时(单位秒)() + * 函数体只检测指令是否能执行,并启动线程执行指令,不等待指令完成.() + *lasers:需要启动的雷达() + * wj_lidar:万集雷达测量模块() + * plc:上传结果工具() + * locater:测量算法对象() + * verify_tool:结果检验工具,当该参数为NULL时,测量结果不作检验() + * 返回指令是否启动成功() +Error_manager execute_command(std::vector lasers,Fence_controller* wj_lidar,Plc_Communicator* plc,Locater* locater,Verify_result* verify_tool,float timeout=15); + * 强制正在执行的中断指令() +Error_manager force_stop_command(); + * 设置保存文件的root路径() + * 执行指令时会在此路径下,生成日期文件夹,格式为:/root_path/year/month/day/YYYYMMDD-HHMMSS文件夹() +void set_save_root_path(std::string root); -static void thread_command_working(Terminor_Command_Executor* terminor); - * 执行指令流程函数() - * 扫描() - * 测量,保存测量结果到成员变量() -Error_manager scanning_measuring(); - * 执行上传plc任务() - * plc终端编号从1开始() -Error_manager post_measure_information(); - * 根据长宽,角度,生成cv::RotateRect() -static cv::RotatedRect create_rotate_rect(float length,float width,float angle,float x,float y); -TerminorStatu m_terminor_statu; -//指令流程线程 -std::thread* mp_command_thread; -// -std::mutex m_mutex_lock; -//保存输入进来的雷达指针 -std::vector mp_laser_vector; -//万集雷达测量模块 -Fence_controller* mp_wj_lidar; -//plc -Plc_Communicator* mp_plc; -//locater* -Locater* mp_locater; -//配置参数 -Terminal::Terminor_parameter m_terminor_parameter; -//本次指令超时时间 单位秒 -float m_timeout_second; -//强制退出标示 -bool mb_force_quit; -//保存当前指令测量结果 -Locate_information m_measure_information; -//保存文件的root目录 -std::string m_save_root_path; -//检验结果工具 -Verify_result* mp_verify_tool; } note left of Terminor_Command_Executor * 终端指令执行类, * 执行指令, * 监控指令执行进度 * 输入雷达数组,plc对象,测量算法对象,执行扫描测量任务 * 检验测量结果合法性 end note class Terminor_parameter { +获取配置参数() +从文件流获取配置() } note bottom of Terminor_parameter * 终端配置类,protobuf格式 * end note note bottom of Fence_controller * 电子围栏雷达测量模块 * 详见 wj_lidar 模块 end note note bottom of Locater * 摆扫/大疆 雷达测量模块 * 详见 locate 模块 end note note bottom of Plc_Communicator * plc 通讯模块 * 详见 plc 模块 end note note bottom of Verify_result * verify : 测量结果检验模块 * 详见 verify 模块 end note Terminor_Command_Executor <-- Terminor_parameter Terminor_Command_Executor <-- Fence_controller Terminor_Command_Executor <-- Locater Terminor_Command_Executor <-- Plc_Communicator Terminor_Command_Executor <-- Verify_result @enduml