| | |
| | | #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 |
| | | std::string number; // 轴编号 |
| | | int positioningPointCount; // 定位点数 |
| | | //double maxPositioningSpeed; // 定位速度上限 |
| | | //double maxManualSpeed; // 手动速度上限 |
| | | std::string number; // 轴编号 |
| | | std::string description; // 轴描述 |
| | | std::string startAddress; // 起始地址 |
| | | double jogDistance; // 微动量 |
| | | double manualSpeed; // 手动速度 |
| | | double autoSpeed; // 自动速度 |
| | | double accelerationTime; // 加速时间 |
| | | double decelerationTime; // 减速时间 |
| | | std::vector<std::pair<std::string, double>> positions; // 定位点:描述和位置 |
| | | ValueRange jogDistance; // 微动量(最小值、最大值、当前值) |
| | | ValueRange manualSpeed; // 手动速度(最小值、最大值、当前值) |
| | | ValueRange autoSpeed; // 自动速度(最小值、最大值、当前值) |
| | | ValueRange accelerationTime; // 加速时间(最小值、最大值、当前值) |
| | | ValueRange decelerationTime; // 减速时间(最小值、最大值、当前值) |
| | | std::vector<PositionRange> positions; // 定位点:描述、位置及最小最大值 |
| | | }; |
| | | |
| | | // 配方管理类 |
| | |
| | | |
| | | // 设置配方文件夹路径 |
| | | void setRecipeFolder(const std::string& folderPath); |
| | | |
| | | // 获取当前配方名称 |
| | | std::string getCurrentRecipeName() const; |
| | | |
| | | // 加载配方(文件不存在时加载默认数据) |
| | | bool loadRecipe(const std::string& recipeName); |
| | |
| | | std::vector<int> getAllAxisID() const; |
| | | |
| | | // 获取指定页的定位点 |
| | | std::vector<std::pair<std::string, double>> getPositions(int axisId, int pageNumber, int pageSize) const; |
| | | std::vector<PositionRange> getPositions(int axisId, int pageNumber, int pageSize) const; |
| | | |
| | | // 获取指定页的定位点 |
| | | PositionRange getPositionByIndex(int axisId, int pageNumber, int pageSize, int currentIndex) const; |
| | | |
| | | private: |
| | | RecipeManager(); |
| | | |
| | | // 轴加载和保存函数 |
| | | bool loadAxes(pugi::xml_node axesNode); |
| | | void saveAxes(pugi::xml_node& axesNode); |
| | | |
| | | private: |
| | | std::string m_currentRecipeName; // 当前配方名称 |
| | | std::string m_recipeFolder; // 配方文件夹路径 |
| | | std::map<int, AxisInfo> m_axes; // 轴信息缓存 |
| | | }; |