DigitalTwinLogger.cpp 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. #include "stdafx.h"
  2. #include "DigitalTwinLogger.h"
  3. #include "LogFacade.h"
  4. using namespace DIOS::Dev::Detail::MachineryECOM;
  5. DigitalTwinLogger *DigitalTwinLogger::m_instance = nullptr;
  6. DigitalTwinLogger::DigitalTwinLogger()
  7. :m_examMode(""),
  8. m_detectorHeight(0.0f),
  9. m_sid(0.0f),
  10. m_initialAngleSensorValue(0),
  11. m_initialHeightSensorValue(0),
  12. m_tomoStartAngleSensorValue(0),
  13. m_tomoStartHeightSensorValue(0),
  14. m_tomoHeightSpeed(0.0f),
  15. m_motionStopAngleSensorValue(0),
  16. m_motionStopHeightSensorValue(0),
  17. m_errorStoped(FALSE),
  18. m_tomoNormalRotatePeriod(0),
  19. m_acc(0.0f),
  20. m_lat(0.0f),
  21. m_sus(0.0f),
  22. m_brk(0.0f),
  23. m_tomoProjectNumber(0),
  24. m_tomoScanAngle(0.0f)
  25. {
  26. }
  27. DigitalTwinLogger::~DigitalTwinLogger()
  28. {
  29. }
  30. DigitalTwinLogger *DigitalTwinLogger::Instance()
  31. {
  32. if (m_instance == nullptr)
  33. {
  34. m_instance = new DigitalTwinLogger();
  35. }
  36. return m_instance;
  37. }
  38. void DigitalTwinLogger::Initialize(const std::string &workpath)
  39. {
  40. SYSTEMTIME st;
  41. GetLocalTime(&st);
  42. char tmp[32] = { 0 };
  43. sprintf_s(tmp, "A_DigitalTwin");
  44. m_logger = LogFacade::CreateLogger(workpath, tmp);
  45. }
  46. SimpleLog *&DigitalTwinLogger::Get()
  47. {
  48. return m_logger;
  49. }
  50. template<class T> void DigitalTwinLogger::Receive(const std::string &key, const T& data)
  51. {
  52. }
  53. void DigitalTwinLogger::ReceiveTimePoint()
  54. {
  55. m_tomoTimeLine.push_back(::GetTickCount64());
  56. }
  57. void DigitalTwinLogger::ReceiveExamMode(const std::string &examMode)
  58. {
  59. m_examMode = examMode;
  60. }
  61. void DigitalTwinLogger::ReceiveDetectorHeight(float height)
  62. {
  63. m_detectorHeight = height;
  64. }
  65. void DigitalTwinLogger::ReceiveSID(float sid)
  66. {
  67. m_sid = sid;
  68. }
  69. void DigitalTwinLogger::ReceiveTomoScanParam(int projectNumber, float scanAngle)
  70. {
  71. m_tomoProjectNumber = projectNumber;
  72. m_tomoScanAngle = scanAngle;
  73. }
  74. void DigitalTwinLogger::ReceiveMotionInitialPosition(int angleSensorValue, int heightSensorvalue)
  75. {
  76. m_initialAngleSensorValue = angleSensorValue;
  77. m_initialHeightSensorValue = heightSensorvalue;
  78. }
  79. void DigitalTwinLogger::ReceiveTomoStartPosition(int angleSensorValue, int heightSensorvalue)
  80. {
  81. m_tomoStartAngleSensorValue = angleSensorValue;
  82. m_tomoStartHeightSensorValue = heightSensorvalue;
  83. }
  84. void DigitalTwinLogger::ReceiveTomoExposureAnglePosition(int angleSensorValues)
  85. {
  86. m_tomoExpAngleSensorValues.push_back(angleSensorValues);
  87. m_tomoExpATimes.push_back(::GetTickCount64());
  88. }
  89. void DigitalTwinLogger::ReceiveTomoExposureHeightPosition(int heightSensorValue)
  90. {
  91. m_tomoExpHeightSensorValues.push_back(heightSensorValue);
  92. m_tomoExpHTimes.push_back(::GetTickCount64());
  93. }
  94. void DigitalTwinLogger::ReceiveTomoSliceRotateSpeeds(int *speeds, int count)
  95. {
  96. m_tomoSliceRotateSpeeds.clear();
  97. for (int i = 0; i < count;++i)
  98. {
  99. m_tomoSliceRotateSpeeds.push_back(speeds[i]);
  100. }
  101. }
  102. void DigitalTwinLogger::ReceiveTomoSliceRotateSteps(int *steps, int count)
  103. {
  104. m_tomoSliceRotateSteps.clear();
  105. for (int i = 0; i < count; ++i)
  106. {
  107. m_tomoSliceRotateSteps.push_back(steps[i]);
  108. }
  109. }
  110. void DigitalTwinLogger::ReceiveTomoHeightSpeed(float speed)
  111. {
  112. m_tomoHeightSpeed = speed;
  113. }
  114. void DigitalTwinLogger::ReceiveTomoNormalRotatePeriod(int period)
  115. {
  116. m_tomoNormalRotatePeriod = period;
  117. }
  118. void DigitalTwinLogger::ReceiveMotionStopPosition(int angleSensorValue, int heightSensorvalue)
  119. {
  120. m_motionStopAngleSensorValue = angleSensorValue;
  121. m_motionStopHeightSensorValue = heightSensorvalue;
  122. }
  123. void DigitalTwinLogger::ReceiveTomoProjectParams(float acc, float lat, float sus, float brk)
  124. {
  125. m_acc = acc;
  126. m_lat = lat;
  127. m_sus = sus;
  128. m_brk = brk;
  129. }
  130. void DigitalTwinLogger::ReceiveTomoProjectSliceParams(float *heights, int heightcount)
  131. {
  132. m_tomoSliceHeights.clear();
  133. for (int i = 0; i < heightcount; ++i)
  134. {
  135. m_tomoSliceHeights.push_back(heights[i]);
  136. }
  137. }
  138. void DigitalTwinLogger::ReceiveErrorStop()
  139. {
  140. m_errorStoped = TRUE;
  141. }
  142. void DigitalTwinLogger::SaveMotionRecord()
  143. {
  144. if (m_examMode == "")
  145. {
  146. return;
  147. }
  148. m_logger->Info("-------------------------------------------------\n"
  149. "[ERR]->[{$:d}]\n"
  150. "[MD]->[{$},{$:d},{$:f2}]\n"
  151. "[DTH]->[{$:f6}]\n"
  152. "[SID]->[{$:f6}]\n"
  153. "[IAS]->[{$:d}]\n"
  154. "[IHS]->[{$:d}]\n"
  155. "[SAS]->[{$:d}]\n"
  156. "[SHS]->[{$:d}]\n"
  157. "[EAP]->[{$}]\n"
  158. "[EHP]->[{$}]\n"
  159. "[SRS]->[{$}]\n"
  160. "[SRP]->[{$}]\n"
  161. "[HSP]->[{$:f6}]\n"
  162. "[EAS]->[{$:d}]\n"
  163. "[EHS]->[{$:d}]\n"
  164. "[TRP]->[{$:d}]\n"
  165. "[ACC]->[{$:f6}]\n"
  166. "[LAT]->[{$:f6}]\n"
  167. "[SUS]->[{$:f6}]\n"
  168. "[BRK]->[{$:f6}]\n"
  169. "[TPH]->[{$}]\n"
  170. "[TML]->[{$}]\n",
  171. m_errorStoped,
  172. m_examMode.c_str(), m_tomoProjectNumber, m_tomoScanAngle,
  173. m_detectorHeight,
  174. m_sid,
  175. m_initialAngleSensorValue,
  176. m_initialHeightSensorValue,
  177. m_tomoStartAngleSensorValue,
  178. m_tomoStartHeightSensorValue,
  179. FormatPairs(m_tomoExpAngleSensorValues, m_tomoExpATimes).c_str(),
  180. FormatPairs(m_tomoExpHeightSensorValues, m_tomoExpHTimes).c_str(),
  181. FormatIntVectors(m_tomoSliceRotateSpeeds).c_str(),
  182. FormatIntVectors(m_tomoSliceRotateSteps).c_str(),
  183. m_tomoHeightSpeed,
  184. m_motionStopAngleSensorValue,
  185. m_motionStopHeightSensorValue,
  186. m_tomoNormalRotatePeriod,
  187. m_acc,
  188. m_lat,
  189. m_sus,
  190. m_brk,
  191. FormatFloatVectors(m_tomoSliceHeights).c_str(),
  192. FormatLLongVectors(m_tomoTimeLine).c_str()
  193. );
  194. Clear();
  195. }
  196. void DigitalTwinLogger::Clear()
  197. {
  198. m_examMode = "";
  199. m_tomoExpAngleSensorValues.clear();
  200. m_tomoExpHeightSensorValues.clear();
  201. m_tomoSliceRotateSpeeds.clear();
  202. m_tomoSliceRotateSteps.clear();
  203. m_tomoExpATimes.clear();
  204. m_tomoExpHTimes.clear();
  205. m_errorStoped = FALSE;
  206. m_tomoSliceHeights.clear();
  207. m_tomoTimeLine.clear();
  208. }
  209. std::string DigitalTwinLogger::FormatIntVectors(std::vector<int> &params)
  210. {
  211. std::string ret = "";
  212. for (size_t i = 0; i < params.size();++i)
  213. {
  214. if (i != params.size()-1)
  215. {
  216. char tmp[10] = { 0 };
  217. sprintf_s(tmp, "%d,", params[i]);
  218. ret += std::string(tmp);
  219. }
  220. else
  221. {
  222. char tmp[10] = { 0 };
  223. sprintf_s(tmp, "%d", params[i]);
  224. ret += std::string(tmp);
  225. }
  226. }
  227. ret += "";
  228. return ret;
  229. }
  230. std::string DigitalTwinLogger::FormatFloatVectors(std::vector<float> &params)
  231. {
  232. std::string ret = "";
  233. for (size_t i = 0; i < params.size(); ++i)
  234. {
  235. if (i != params.size() - 1)
  236. {
  237. char tmp[16] = { 0 };
  238. sprintf_s(tmp, "%.6f,", params[i]);
  239. ret += std::string(tmp);
  240. }
  241. else
  242. {
  243. char tmp[16] = { 0 };
  244. sprintf_s(tmp, "%.6f", params[i]);
  245. ret += std::string(tmp);
  246. }
  247. }
  248. ret += "";
  249. return ret;
  250. }
  251. std::string DigitalTwinLogger::FormatLLongVectors(std::vector<ULONGLONG> &params)
  252. {
  253. std::string ret = "";
  254. for (size_t i = 0; i < params.size(); ++i)
  255. {
  256. if (i != params.size() - 1)
  257. {
  258. char tmp[16] = { 0 };
  259. sprintf_s(tmp, "%lld,", params[i]);
  260. ret += std::string(tmp);
  261. }
  262. else
  263. {
  264. char tmp[16] = { 0 };
  265. sprintf_s(tmp, "%lld", params[i]);
  266. ret += std::string(tmp);
  267. }
  268. }
  269. ret += "";
  270. return ret;
  271. }
  272. std::string DigitalTwinLogger::FormatPairs(std::vector<int> &params, std::vector<ULONGLONG> &ticks)
  273. {
  274. if (params.size() != ticks.size())
  275. {
  276. return "";
  277. }
  278. std::string ret = "";
  279. for (size_t i = 0; i < params.size(); ++i)
  280. {
  281. if (i != params.size() - 1)
  282. {
  283. char tmp[32] = { 0 };
  284. sprintf_s(tmp, "(%d,%lld),", params[i], ticks[i]);
  285. ret += std::string(tmp);
  286. }
  287. else
  288. {
  289. char tmp[32] = { 0 };
  290. sprintf_s(tmp, "(%d,%lld)", params[i], ticks[i]);
  291. ret += std::string(tmp);
  292. }
  293. }
  294. ret += "";
  295. return ret;
  296. }