DetectorConfiguration.cpp 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. #include "stdafx.h"
  2. #include "CCOS.Dev.FPDDeviceMould.hpp"
  3. #include "DetectorConfiguration.h"
  4. #include "Detector_Model_Def.h"
  5. #include "CCOSConfigurations.h"
  6. namespace nsFPD = CCOS::Dev::Detail::Detector;
  7. nsFPD::DetectorConfiguration::DetectorConfiguration(string ConfigPath)
  8. {
  9. m_strConfigPath = ConfigPath;
  10. }
  11. nsFPD::DetectorConfiguration::~DetectorConfiguration()
  12. {
  13. }
  14. bool nsFPD::DetectorConfiguration::LoadConfigurations(DeviceIndexStruct & DeviceConf, ResDataObject & ACQMODElist)
  15. {
  16. FINFO("LoadConfigurations start m_strConfigPath:{$}", m_strConfigPath.c_str());
  17. if (!m_ConfigAll.loadFile(m_strConfigPath.c_str()))
  18. {
  19. FERROR("Load {$} failed!!!", m_strConfigPath.c_str());
  20. return false;
  21. }
  22. try
  23. {
  24. int nModeCount = 0; //探测器采集模式总数
  25. int nTemp = 0;
  26. m_Configurations = m_ConfigAll[NODE_CONFIGURATION];
  27. auto Child_table = m_Configurations[NODE_ModeTable];
  28. DeviceConf.strDeviceName = (string)m_Configurations[NODE_Description];
  29. nModeCount = (int)Child_table.size();
  30. if (nModeCount > 0)
  31. {
  32. DeviceConf.nDetModeCount = nModeCount;
  33. DeviceConf.pDetModeInfoStruct = new DetModeInfoStruct[nModeCount];
  34. m_DeviceInfo.pDetModeInfoStruct = new DetModeInfoStruct[nModeCount]; //add by wxx for 万东:20230725
  35. }
  36. for (int i = 0; i < nModeCount; i++)
  37. {
  38. //加载所有modeinfo到结构体
  39. auto stChild = DeviceConf.pDetModeInfoStruct[i];
  40. stChild.nLogicMode = (int)Child_table[i][NODE_LogicMode];
  41. stChild.nImageWidth = (int)Child_table[i][NODE_ImageWidth];
  42. stChild.nImageHeight = (int)Child_table[i][NODE_ImageHeight];
  43. stChild.nWidthOffset = (int)Child_table[i][NODE_WidthOffset];
  44. stChild.nHeightOffset = (int)Child_table[i][NODE_HeightOffset];
  45. stChild.nRawImgWidth = (int)Child_table[i][NODE_RawImgWidth];
  46. stChild.nRawImgHeight = (int)Child_table[i][NODE_RawImgHeight];
  47. stChild.nPhySizeInfoBit = (int)Child_table[i][NODE_PhySizeInfoBit];
  48. stChild.nSensitivity = (int)Child_table[i][NODE_Sensitivity];
  49. nTemp = (int)Child_table[i][NODE_PreviewEnable];
  50. if (0 == nTemp)
  51. {
  52. stChild.bPreviewEnable = false;
  53. }
  54. else
  55. {
  56. stChild.bPreviewEnable = true;
  57. }
  58. stChild.nPreviewWidth = (int)Child_table[i][NODE_PreviewWidth];
  59. stChild.nPreviewHeight = (int)Child_table[i][NODE_PreviewHeight];
  60. FINFO("i={$},nLogicMode={$},nRawImgWidth={$},nRawImgHeight={$},nImageWidth={$},nImageHeight={$}",
  61. i, stChild.nLogicMode, stChild.nRawImgWidth, stChild.nRawImgHeight, stChild.nImageWidth, stChild.nImageHeight);
  62. stChild.nPixelPitch = (int)Child_table[i][NODE_PixelPitch];
  63. stChild.nSyncType = (int)Child_table[i][NODE_SyncType];
  64. stChild.nXwindow = (int)Child_table[i][NODE_XwindowSize];
  65. stChild.nIsSaveRaw = (int)Child_table[i][NODE_IsSaveRaw];
  66. stChild.nRotateAngle = (int)Child_table[i][NODE_RotateAngle];
  67. stChild.nBinningDx = (int)Child_table[i][NODE_BinningX];
  68. stChild.nBinningDy = (int)Child_table[i][NODE_BinningY];
  69. stChild.nGainValue = (int)Child_table[i][NODE_GainValue];
  70. stChild.nFrequency = (int)Child_table[i][NODE_Frequency];
  71. stChild.nFrameCount = (int)Child_table[i][NODE_FrameCount];
  72. stChild.nWorkStation = (int)Child_table[i][NODE_WorkStation];
  73. //获取所有模式中最大图像尺寸,用于申请共享内存
  74. if (stChild.nImageWidth * stChild.nImageHeight >
  75. DeviceConf.nMaxImgWidth * DeviceConf.nMaxImgHeight)
  76. {
  77. DeviceConf.nMaxImgWidth = stChild.nImageWidth;
  78. DeviceConf.nMaxImgHeight = stChild.nImageHeight;
  79. }
  80. //加载采集模式到acqmodelist,用于反馈给上层(目前还没反馈)
  81. ResDataObject mode;
  82. mode.add(CcosAcqModeIdx, stChild.nLogicMode);
  83. mode.add(CcosAcqModeName, stChild.nLogicMode);
  84. mode.add(CcosImageWidth, stChild.nImageWidth);
  85. mode.add(CcosImageHeight, stChild.nImageHeight);
  86. mode.add(CcosImageBits, stChild.nPhySizeInfoBit);
  87. mode.add(CcosGainTitle, stChild.nGainValue);
  88. mode.add(CcosBinningX, stChild.nBinningDx);
  89. mode.add(CcosBinningY, stChild.nBinningDy);
  90. mode.add(CcosFrameRate, stChild.nFrequency);
  91. mode.add(CcosImagePixelSpacing, stChild.nPixelPitch);
  92. mode.add(CcosImageFPDSensitivity, stChild.nSensitivity);
  93. ACQMODElist.add(NODE_DetectorMode, mode);
  94. //加载校正配置
  95. int nNodeCount = 0; //校正曝光节点总数
  96. auto Child_Calib = m_Configurations[NODE_ModeTable][i][NODE_CalibConfig];
  97. nNodeCount = (int)Child_Calib.GetKeyCount(NODE_NodeInfo);
  98. if (nNodeCount > 0)
  99. {
  100. DeviceConf.stDetCalibInfo.nDetCalibNodeCount = nNodeCount;
  101. DeviceConf.stDetCalibInfo.pDetCalibNodeInfo = new DetCalibNodeInfo[nNodeCount];
  102. }
  103. for (int j = 0; j < nNodeCount; j++)
  104. {
  105. auto stChild = DeviceConf.stDetCalibInfo.pDetCalibNodeInfo[j];
  106. stChild.nImgCount = (int)Child_Calib[j][NODE_ImgCount];
  107. stChild.fDose = (float)Child_Calib[j][NODE_Dose];
  108. }
  109. m_DeviceInfo.pDetModeInfoStruct[i] = stChild;//add by wxx for 万东:20230725
  110. } //end for
  111. DeviceConf.fTemperMaxLimit = (float)m_Configurations[ConfKey::CcosTempMaxLimit];
  112. DeviceConf.fTemperMaxWarn = (float)m_Configurations[ConfKey::CcosTempUpperLimit];
  113. DeviceConf.fTemperLowLimit = (float)m_Configurations[ConfKey::CcosTempLowerLimit];
  114. DeviceConf.fTemperMinWarn = (float)m_Configurations[ConfKey::CcosTempMinLimit];
  115. DeviceConf.nBatteryWarning = (int)m_Configurations[ConfKey::CcosBatLowerLimit];
  116. DeviceConf.nBatteryLimit = (int)m_Configurations[ConfKey::CcosBatMiniLimit];
  117. DeviceConf.nWifiWarning = (int)m_Configurations[ConfKey::CcosWifiLowerLimit];
  118. DeviceConf.nWifiLimit = (int)m_Configurations[ConfKey::CcosWifiMiniLimit];
  119. DeviceConf.strCalibrationDate = (string)m_Configurations["DateofLastDetectorCalibration"];
  120. DeviceConf.strCalibrationTime = (string)m_Configurations["TimeofLastDetectorCalibration"];
  121. DeviceConf.fSid = (float)m_Configurations[NODE_SID];
  122. DeviceConf.fSod = (float)m_Configurations[NODE_SOD];
  123. DeviceConf.fAmplificationFactor = (float)m_Configurations[NODE_AmplificationFactor];
  124. m_DeviceInfo = DeviceConf;
  125. }
  126. catch (ResDataObjectExption &e)
  127. {
  128. printf("Get config error: %s \r\n", e.what());
  129. return false;
  130. }
  131. FINFO("LoadConfigurations over");
  132. return true;
  133. }
  134. /***
  135. * 根据nMode,获取对应的ModeInfo
  136. * nMode: 上层下发的AcqMode index
  137. ***/
  138. bool nsFPD::DetectorConfiguration::GetDetModeInfo(DetModeInfoStruct& DetModeInfo, DetCalibInfo& DetCalibInfo, int nMode)
  139. {
  140. bool bFind = false;
  141. for (int i = 0; i < m_DeviceInfo.nDetModeCount; i++)
  142. {
  143. auto stChild = m_DeviceInfo.pDetModeInfoStruct[i];
  144. if (nMode == stChild.nLogicMode)
  145. {
  146. DetModeInfo = m_DeviceInfo.pDetModeInfoStruct[i];
  147. DetCalibInfo = m_DeviceInfo.stDetCalibInfo;
  148. bFind = true;
  149. break;
  150. }
  151. }
  152. return bFind;
  153. }
  154. bool nsFPD::DetectorConfiguration::SaveConfig()
  155. {
  156. try
  157. {
  158. m_ConfigAll["CONFIGURATION"] = m_Configurations;
  159. }
  160. catch (...)
  161. {
  162. return false;
  163. }
  164. return m_ConfigAll.SaveFile((m_strConfigPath).c_str());
  165. }