#ifndef RECIPE_MANAGER_H
|
#define RECIPE_MANAGER_H
|
|
#include <string>
|
#include <vector>
|
#include <map>
|
#include "pugixml.hpp"
|
|
struct ValueRange {
|
double minValue; // ×îСֵ
|
double maxValue; // ×î´óÖµ
|
double currentValue; // µ±Ç°Öµ
|
|
// ¹¹Ô캯Êý³õʼ»¯
|
ValueRange(double minVal = 0.0, double maxVal = 0.0, double curVal = 0.0)
|
: minValue(minVal), maxValue(maxVal), currentValue(curVal) {}
|
};
|
|
struct PositionRange {
|
BOOL isEnable; // ÊÇ·ñÆôÓÃ
|
std::string description; // ¶¨Î»µãÃèÊö
|
ValueRange range; // λÖõÄ×îСֵ¡¢×î´óÖµºÍµ±Ç°Öµ
|
|
// ¹¹Ô캯Êý³õʼ»¯
|
PositionRange(BOOL b = TRUE, const std::string& desc = "", const ValueRange& r = ValueRange())
|
:isEnable(b), description(desc), range(r) {}
|
};
|
|
// ÖáÐÅÏ¢½á¹¹Ìå
|
struct AxisInfo {
|
int id; // ÖáID
|
int positioningPointCount; // ¶¨Î»µãÊý
|
std::string number; // Öá±àºÅ
|
std::string description; // ÖáÃèÊö
|
std::string startAddress; // ÆðʼµØÖ·
|
ValueRange jogDistance; // ΢¶¯Á¿£¨×îСֵ¡¢×î´óÖµ¡¢µ±Ç°Öµ£©
|
ValueRange manualSpeed; // ÊÖ¶¯ËÙ¶È£¨×îСֵ¡¢×î´óÖµ¡¢µ±Ç°Öµ£©
|
ValueRange autoSpeed; // ×Ô¶¯ËÙ¶È£¨×îСֵ¡¢×î´óÖµ¡¢µ±Ç°Öµ£©
|
ValueRange accelerationTime; // ¼ÓËÙʱ¼ä£¨×îСֵ¡¢×î´óÖµ¡¢µ±Ç°Öµ£©
|
ValueRange decelerationTime; // ¼õËÙʱ¼ä£¨×îСֵ¡¢×î´óÖµ¡¢µ±Ç°Öµ£©
|
std::vector<PositionRange> positions; // ¶¨Î»µã£ºÃèÊö¡¢Î»Öü°×îС×î´óÖµ
|
};
|
|
// Åä·½¹ÜÀíÀà
|
class AxisManager {
|
public:
|
AxisManager();
|
|
// ¼ÓÔØÅä·½£¨Îļþ²»´æÔÚʱ¼ÓÔØÄ¬ÈÏÊý¾Ý£©
|
bool LoadAxis(const std::string& strName);
|
|
// ±£´æÅä·½
|
bool SaveAxis(const std::string& strName);
|
|
// Éú³ÉĬÈÏÅä·½
|
void GenerateDefaultData();
|
|
// »ñÈ¡ËùÓÐÖáÐÅÏ¢
|
const std::map<int, AxisInfo>& GetAxes() const;
|
|
// »ñÈ¡µ¥¸öÖáÐÅÏ¢
|
AxisInfo GetAxis(int axisId) const;
|
|
// ¸üÐÂÖáÐÅÏ¢
|
bool UpdateAxis(const AxisInfo& axisInfo);
|
|
// Ìí¼ÓеÄÖáÐÅÏ¢
|
bool AddAxis(const AxisInfo& axisInfo);
|
|
// ɾ³ýÖáÐÅÏ¢
|
bool DeleteAxis(int axisId);
|
|
// »ñÈ¡ËùÓÐÖáID
|
std::vector<int> GetAllAxisID() const;
|
|
// »ñȡָ¶¨Ò³µÄ¶¨Î»µã
|
std::vector<PositionRange> GetPositions(int axisId, int pageNumber, int pageSize) const;
|
|
// »ñȡָ¶¨Ò³µÄ¶¨Î»µã
|
PositionRange GetPositionByIndex(int axisId, int pageNumber, int pageSize, int currentIndex) const;
|
|
private:
|
// Öá¼ÓÔØºÍ±£´æº¯Êý
|
bool LoadAxes(pugi::xml_node axesNode);
|
void SaveAxes(pugi::xml_node& axesNode);
|
|
private:
|
std::string m_directory; // Îļþ¼Ð·¾¶
|
std::map<int, AxisInfo> m_axes; // ÖáÐÅÏ¢»º´æ
|
};
|
|
#endif // RECIPE_MANAGER_H
|