109 lines
2.9 KiB
C
109 lines
2.9 KiB
C
|
|
#pragma once
|
|||
|
|
/**
|
|||
|
|
* @file eqpm_alg.h
|
|||
|
|
* @brief 设备点检计划时间计算
|
|||
|
|
* @author your name (you@domain.com)
|
|||
|
|
* @version 0.1
|
|||
|
|
* @date 2023-12-22
|
|||
|
|
*
|
|||
|
|
* Copyright: Baosight Co. Ltd.
|
|||
|
|
* DO NOT COPY/USE WITHOUT PERMISSION
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
#include <eqpm/EqpmRecord.h>
|
|||
|
|
#include <eqpm/utility.h>
|
|||
|
|
#include <log4cplus/LOG.h>
|
|||
|
|
#include <chrono>
|
|||
|
|
#include <map>
|
|||
|
|
// #include <mutex>///<弃用
|
|||
|
|
|
|||
|
|
#include <string>
|
|||
|
|
using std::map;
|
|||
|
|
using std::string;
|
|||
|
|
/**
|
|||
|
|
* @brief 设备点检 数据
|
|||
|
|
*/
|
|||
|
|
struct EqpRule {
|
|||
|
|
int rule_type =
|
|||
|
|
0; ///< 设备保养规则类型:0-无;1-重量(吨);2-长度(千米);3-时间(天)
|
|||
|
|
double data = 0;
|
|||
|
|
TimePoint repair_date; ///<上次检修时间
|
|||
|
|
TimePoint repair_plan; ///<计划检修时间
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
class EqpmAlg {
|
|||
|
|
public:
|
|||
|
|
EqpmAlg();
|
|||
|
|
~EqpmAlg();
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
std::unique_ptr<LOG> logger_; ///< 本地logger
|
|||
|
|
map<string, EqpRule> map_rules_; ///<设备-保养规则
|
|||
|
|
double weight_slope_; ///<日产重量
|
|||
|
|
double length_slope_; ///<日产长度
|
|||
|
|
EqpRule rule_; ///<计算时更新的数据
|
|||
|
|
TimePoint EqpmShm_stime_; ///<累计的开始时间,从shm获取,初始化后不变
|
|||
|
|
TimePoint stime_; ///<更新shm累计数据的开始时间
|
|||
|
|
TimePoint etime_; ///<更新shm累计数据的结束时间
|
|||
|
|
EqpmShm::EqpmRecord eqpm_record_; ///<最新查询的日重量,日长度
|
|||
|
|
TimePoint init_time_;
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
// std::mutex local_mutext{}; ///<共享锁 弃用
|
|||
|
|
public:
|
|||
|
|
int init();
|
|||
|
|
bool update_data();
|
|||
|
|
bool select_eqpm_data(TimePoint stime);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 检测所有设备管理规则
|
|||
|
|
*
|
|||
|
|
* @return true
|
|||
|
|
* @return false
|
|||
|
|
*/
|
|||
|
|
void update_repair();
|
|||
|
|
/**
|
|||
|
|
* @brief 将时间转换为shm累计数据的map下标
|
|||
|
|
* @param time My Param doc
|
|||
|
|
* @return int
|
|||
|
|
*/
|
|||
|
|
int get_index(TimePoint time);
|
|||
|
|
/**
|
|||
|
|
* @brief 结束mq的json,更新对应设备的检修计划时间
|
|||
|
|
* @param mq mq消息的json
|
|||
|
|
* @return int
|
|||
|
|
*/
|
|||
|
|
int update_repair(std::string mq);
|
|||
|
|
/**
|
|||
|
|
* @brief 更新计算的规则数据
|
|||
|
|
* @param eqpid My Param doc
|
|||
|
|
* @param rule_type My Param doc
|
|||
|
|
* @param repair_date My Param doc
|
|||
|
|
* @param interval My Param doc
|
|||
|
|
* @return int
|
|||
|
|
*/
|
|||
|
|
int update_rule_data(std::string eqpid, int rule_type, TimePoint repair_date,
|
|||
|
|
double interval);
|
|||
|
|
/**
|
|||
|
|
* @brief 更新 db2 T_EQP_REPAIR 表
|
|||
|
|
* @param eqpid My Param doc
|
|||
|
|
* @return int
|
|||
|
|
*/
|
|||
|
|
int update_db2(std::string eqpid);
|
|||
|
|
/**
|
|||
|
|
* @brief 获取最新的斜率(日生产长度,日生产重量)
|
|||
|
|
* @param date My Param doc
|
|||
|
|
*/
|
|||
|
|
void update_slope(TimePoint date);
|
|||
|
|
/**
|
|||
|
|
* @brief 查询所有设备的点检规则
|
|||
|
|
* @return int
|
|||
|
|
*/
|
|||
|
|
int select_repair();
|
|||
|
|
/**
|
|||
|
|
* @brief 查询指定设备的点检规则参数
|
|||
|
|
* @param eqpid My Param doc
|
|||
|
|
* @return int
|
|||
|
|
*/
|
|||
|
|
int select_eqp_data(std::string eqpid);
|
|||
|
|
};
|