综合平台编程器项目的远程存储
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

107 linhas
2.1 KiB

  1. #pragma once
  2. #include "domain/control_logic_model.h"
  3. #include <string>
  4. #include <vector>
  5. class LogicEditorService;
  6. enum class LogicCommandOpcode
  7. {
  8. Load,
  9. LoadInverse,
  10. LoadRising,
  11. LoadFalling,
  12. CompareEqual,
  13. CompareNotEqual,
  14. CompareLessThan,
  15. CompareLessThanOrEqual,
  16. CompareGreaterThan,
  17. CompareGreaterThanOrEqual,
  18. And,
  19. AndInverse,
  20. Or,
  21. OrInverse,
  22. Output,
  23. Set,
  24. Reset,
  25. Move,
  26. Add,
  27. Subtract
  28. };
  29. struct ParsedLogicCommand
  30. {
  31. LogicCommandOpcode opcode = LogicCommandOpcode::Load;
  32. LogicNodeConfig config = ContactNodeConfig{
  33. RegisterAddress{RegisterArea::M, 0}, ContactMode::NormallyOpen};
  34. };
  35. struct LogicCommandParseResult
  36. {
  37. bool succeeded = false;
  38. std::string message;
  39. ParsedLogicCommand command;
  40. };
  41. struct LogicCommandSuggestion
  42. {
  43. std::string mnemonic;
  44. std::string description;
  45. std::string operand_hint;
  46. bool supported = true;
  47. };
  48. enum class LogicCommandTargetKind
  49. {
  50. EmptyColumn,
  51. BranchEmptyColumn,
  52. WireColumn,
  53. GapColumn,
  54. Output,
  55. ExistingNode
  56. };
  57. struct LogicCommandTarget
  58. {
  59. LogicCommandTargetKind kind = LogicCommandTargetKind::EmptyColumn;
  60. std::string rungId;
  61. std::string expressionId;
  62. int column = 0;
  63. };
  64. struct LogicCommandRequest
  65. {
  66. std::string logicId;
  67. std::string text;
  68. LogicCommandTarget target;
  69. bool continuing = false;
  70. std::string currentRungId;
  71. std::vector<std::string> parallelNodeIds;
  72. };
  73. struct LogicCommandResult
  74. {
  75. bool succeeded = false;
  76. std::string message;
  77. std::string id;
  78. std::string rungId;
  79. LogicCommandOpcode opcode = LogicCommandOpcode::Load;
  80. };
  81. // 将单条命令语解析并原子转换为现有结构化梯形图编辑操作
  82. class LogicCommandService
  83. {
  84. public:
  85. explicit LogicCommandService(LogicEditorService &editor_service);
  86. static LogicCommandParseResult parse(const std::string &text);
  87. static const std::vector<LogicCommandSuggestion> &suggestions();
  88. LogicCommandResult execute(const LogicCommandRequest &request);
  89. private:
  90. LogicEditorService &editor_service_;
  91. };