JMotion.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. #pragma once
  2. #include "IIO.h"
  3. #include "IAxisManager.h"
  4. #include "JSMotion.h"
  5. #include "ICard.h"
  6. #include <vector>
  7. #include <map>
  8. /*
  9. * 原先在抽象ICard中定义的数字移入此处
  10. * by liuyenuo 2024/10/21
  11. */
  12. #define c_nMaxCardNum 1
  13. #define c_nMaxAxisNum 4
  14. #define c_nMaxDigitModuleNum 1
  15. #define c_nDigitIndex0_ModuleNo 0
  16. class AxesParamPage;
  17. class AxesMapPage;
  18. class IOMapPage;
  19. class CoordTest;
  20. class ExtIOMapPage;
  21. struct bInitOK
  22. {
  23. bool bCardInitOK = false;
  24. bool bIOInitOK = false;
  25. bool bAxisInitOK = false;
  26. bool bCrdInitOK = false;
  27. };
  28. class DLL_API JMotion
  29. {
  30. public:
  31. JMotion();
  32. ~JMotion();
  33. //初始化
  34. bool Init();
  35. //显示参数页面
  36. bool ShowParaPage();
  37. //显示调试页面
  38. bool ShowAdjustPage();
  39. //显示IO调试界面
  40. bool ShowIOMap();
  41. //显示Coord坐标系测试界面(不必要长期保留)
  42. bool ShowCoordPage();
  43. //显示轴测试界面
  44. bool ShowAxisTestPage(std::string sAxisName);
  45. //显示AIO/DOS调试界面
  46. bool ShowExtIOMapPage();
  47. //获取轴参数界面指针
  48. AxesParamPage* getAxesParaPage();
  49. AxesMapPage* getMapPage();
  50. IOMapPage* getIOPage();
  51. //获取轴对象
  52. std::vector<JAxis *> getAxesObject();
  53. //根据名称获取单轴对象
  54. JAxis* getSingleAxis(std::string sName);
  55. //获取卡对象
  56. std::vector<ICard *> getCardObject();
  57. //获取坐标系对象
  58. std::vector<ICoord *> getCoordObject();
  59. ICoord* getSingleCoord(std::string sName);
  60. //获取轴管理对象指针
  61. IAxisManager* getAxisManagerObject();
  62. //下面是获取各个IO对象
  63. std::vector<CDigitInput*> getDi();
  64. CDigitInput* getSingleDi(std::string sName);
  65. std::vector<CDigitInputS*> getDiS();
  66. CDigitInputS* getSingleDiS(std::string sName);
  67. std::vector<CDigitOutput*> getDo();
  68. CDigitOutput* getSingleDo(std::string sName);
  69. std::vector<CDigitOutputS*> getDoS();
  70. CDigitOutputS* getSingleDoS(std::string sName);
  71. std::vector<CAnalogOutput*> getAo();
  72. CAnalogOutput* getSingleAo(std::string sName);
  73. std::vector<CAnalogInput*> getAi();
  74. CAnalogInput* getSingleAI(std::string sName);
  75. private:
  76. //退出或者关闭
  77. bool Exit();
  78. void createPage();
  79. //模板清除对象
  80. template <typename objType>
  81. void closeObject(std::vector<objType> &objDelete);
  82. //记录当前轴之前的卡含有的轴总数
  83. // void RecordCardAxis();
  84. private:
  85. /*
  86. *判断是否整个运动库是否初始化成功的标志位
  87. */
  88. bool m_bInitOK = false;
  89. /*
  90. *一个对应轴名称和其轴前面卡轴数量的map
  91. */
  92. // std::map<std::string,int> m_mpFormerCardAxis ;
  93. /*
  94. *下面为UI界面的指针
  95. */
  96. AxesParamPage *m_pParamPage =nullptr;
  97. AxesMapPage* m_pAxesMapPage = nullptr;
  98. IOMapPage* m_pIOMapPage = nullptr;
  99. CoordTest* m_pCoordTestPage = nullptr;
  100. ExtIOMapPage* m_pExtIOMapPage = nullptr;
  101. /*
  102. * 下面为JMotion中使用的轴,卡,IO信息,坐标系
  103. * 1、每一张卡需要对应一个IO输入,IO输出;以及若干轴;
  104. * 2、每一个Coord都对应若干轴,Coord是唯一在其中有使用其他子模块的
  105. */
  106. std::vector<JAxis*> m_vAxes;//[c_nMaxCardNum*c_nMaxAxisNum];
  107. //通过唯一的轴名称来获得轴
  108. std::map<std::string,JAxis*> m_mpAxes;
  109. //数据库中获取的轴数据
  110. std::vector<ServoAxisData> m_vServoAxisData;
  111. std::vector<StepAxisData> m_vStepAxisData;
  112. std::vector<ForcerAxisData> m_vForceAxisData;
  113. //数据库中获取的IO数据
  114. std::vector<DIOData> m_vDIOData;
  115. std::vector<AIOData> m_vAIOData;
  116. std::vector<CoordPara> m_vCoordData;
  117. std::vector<CDigitInput*> m_vDi;
  118. std::vector<CDigitOutput*> m_vDo;
  119. std::map<std::string,CDigitInput*> m_mpDi;
  120. std::map<std::string,CDigitOutput*> m_mpDo;
  121. std::vector<CDigitInputS*> m_vDiS;
  122. std::vector<CDigitOutputS*> m_vDoS;
  123. std::map<std::string,CDigitInputS*> m_mpDiS;
  124. std::map<std::string,CDigitOutputS*> m_mpDoS;
  125. std::vector<CAnalogOutput*> m_vAo;
  126. std::vector<CAnalogInput*> m_vAi;
  127. std::map<std::string,CAnalogOutput*> m_mpAo;
  128. std::map<std::string,CAnalogInput*> m_mpAi;
  129. // // 多卡多数字模块的输入输出
  130. // // 如:m_pExtDi(0,0)代表0号卡的0号数字模块
  131. // std::vector<std::vector<CDigitInput*>> m_vExtDi;//[c_nMaxCardNum][c_nMaxDigitModuleNum];
  132. // std::vector<std::vector<CDigitOutput*>> m_vExtDo;//[c_nMaxCardNum][c_nMaxDigitModuleNum];
  133. //对应的多坐标系
  134. std::vector<ICoord *> m_vCoord;//[c_nMaxCardNum]
  135. std::map<std::string,ICoord*> m_mpCoord;
  136. //对应的多张卡
  137. std::vector<ICard *> m_vCard;//[c_nMaxCardNum]
  138. //轴管理对象
  139. IAxisManager *m_cAxisManager;
  140. };