LogicDeviceMechCarm.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550
  1. #include "stdafx.h"
  2. #include "LogicDeviceMechCarm.h"
  3. #include "ExamHandlerManager.h"
  4. #include "LogicDriverThreadLocker.h"
  5. #include "IExamHandler.h"
  6. #include "CArmWorkflowManager.h"
  7. #include "PositionManager.h"
  8. #include "ICArmGeneralHandler.h"
  9. #include "..\\ExamHandlerNameDef.h"
  10. #include "ICBCTExamHandler.h"
  11. #include "DIOS.Dev.Machinery.Driver.ECOM.h"
  12. using namespace DIOS::Dev::Detail::MachineryECOM;
  13. LogicDeviceMechCarm::LogicDeviceMechCarm(MachineryECOMDriver* pMachineryDriver)
  14. :MotionControlUnit(pMachineryDriver)
  15. {
  16. }
  17. LogicDeviceMechCarm::~LogicDeviceMechCarm()
  18. {
  19. }
  20. //
  21. //RET_STATUS LogicDeviceMechCarm::SetExamInfo(ResDataObject& ParamIn)
  22. //{
  23. // RET_STATUS ret = RET_STATUS::RET_SUCCEED;
  24. //
  25. // if (ParamIn.IsObject())
  26. // {
  27. // const char* pszKey = ParamIn.GetKey(0);
  28. // if (pszKey)
  29. // {
  30. // int idx = m_ExamList.GetFirstOf(pszKey);
  31. // if (idx >= 0)
  32. // {
  33. // m_ExamList[pszKey] = ParamIn[pszKey];
  34. // }
  35. // else
  36. // {
  37. // //new one
  38. // m_ExamList.add(pszKey, ParamIn[pszKey]);
  39. // }
  40. //
  41. // return RET_STATUS::RET_SUCCEED;
  42. // }
  43. // }
  44. //
  45. // return ret;
  46. //}
  47. //
  48. //RET_STATUS LogicDeviceMechCarm::SelectExamMode(const char *pExamKey)
  49. //{
  50. // RET_STATUS ret = RET_STATUS::RET_FAILED;
  51. //
  52. // LogicDriverThreadLocker::Instance()->Lock();
  53. //
  54. // const char* pExamType = "DX";
  55. //
  56. // pExamType = m_ExamList[pExamKey].GetKey(0);
  57. //
  58. // m_Mode = (EXAM_MODE)CArmWorkflowManager::Instance()->ChangeExamMode(pExamKey, pExamType);
  59. //
  60. // LogicDriverThreadLocker::Instance()->UnLock();
  61. //
  62. // return ret;
  63. //}
  64. RET_STATUS LogicDeviceMechCarm::EnterCalibration()
  65. {
  66. return RET_STATUS::RET_SUCCEED;
  67. }
  68. RET_STATUS LogicDeviceMechCarm::ExitCalibration()
  69. {
  70. return RET_STATUS::RET_SUCCEED;
  71. }
  72. /****************************
  73. "P0": "TOMO"
  74. "P0": "Single"
  75. *****************************/
  76. RET_STATUS LogicDeviceMechCarm::SetExpMode(const char* pExpMode)
  77. {
  78. RET_STATUS ret = RET_STATUS::RET_SUCCEED;
  79. LogicDriverThreadLocker::Instance()->Lock();
  80. const char* pExamType = "DX";
  81. if(gbusinessLog) gbusinessLog->Info("[SelectExamMode]->[ExamKey={$}, ExamType={$}]", pExamType, pExpMode);
  82. m_Mode = (EXAM_MODE)CArmWorkflowManager::Instance()->ChangeExamMode(pExamType, pExpMode);
  83. LogicDriverThreadLocker::Instance()->UnLock();
  84. if(gbusinessLog) gbusinessLog->Info("[SelectExamMode]->[Leave]");
  85. return ret;
  86. }
  87. bool LogicDeviceMechCarm::GetMachineryReadyState()
  88. {
  89. return PositionManager::Instance()->IsSystemReady();
  90. }
  91. RET_STATUS LogicDeviceMechCarm::NotifyMachineryReadyState(bool bMachineryReady)
  92. {
  93. m_MachineryReady[AttrKey::MachineryReady] = bMachineryReady;
  94. return RET_STATUS::RET_SUCCEED;
  95. }
  96. RET_STATUS LogicDeviceMechCarm::GetTomoResult(ResDataObject &resultAngle, ResDataObject &resultHeight)
  97. {
  98. RET_STATUS ret = RET_STATUS::RET_FAILED;
  99. ICBCTExamHandler *handler = (ICBCTExamHandler *)ExamHandlerManager::Instance()->GetHandler(CBCT_EXAMHANDLER);
  100. if (handler)
  101. {
  102. ret = handler->OnGetExposurePositions(resultAngle, resultHeight);
  103. }
  104. return ret;
  105. }
  106. //RET_STATUS LogicDeviceMechCarm::StopMech()
  107. //{
  108. // RET_STATUS ret = RET_STATUS::RET_FAILED;
  109. //
  110. // LogicDriverThreadLocker::Instance()->Lock();
  111. //
  112. // IExamHandler *handler = ExamHandlerManager::Instance()->GetCurrentHandler();
  113. // if (handler)
  114. // {
  115. // ret = handler->OnStopMech();
  116. // }
  117. //
  118. // LogicDriverThreadLocker::Instance()->UnLock();
  119. //
  120. // return ret;
  121. //}
  122. RET_STATUS LogicDeviceMechCarm::StartMove()
  123. {
  124. RET_STATUS ret = RET_STATUS::RET_SUCCEED;
  125. if(gbusinessLog) gbusinessLog->Info("[StartMove]");
  126. return ret;
  127. }
  128. RET_STATUS LogicDeviceMechCarm::StopMove()
  129. {
  130. RET_STATUS ret = RET_STATUS::RET_SUCCEED;
  131. if(gbusinessLog) gbusinessLog->Info("[StopMove]");
  132. return ret;
  133. }
  134. RET_STATUS LogicDeviceMechCarm::ForceStopAllMotion()
  135. {
  136. if(gbusinessLog) gbusinessLog->Info("[ForceStopAllMotion]");
  137. LogicDriverThreadLocker::Instance()->Lock();
  138. //auto handler = CArmWorkflowManager::Instance()->GetCurrentWorkFlowHandler();
  139. //if (handler)
  140. //{
  141. // handler->OnStopMech();
  142. //}
  143. auto handler = ExamHandlerManager::Instance()->GetHandler(CARM_GENERAL_EXAMHANDLER);
  144. if (handler)
  145. {
  146. handler->OnStopMech();
  147. }
  148. LogicDriverThreadLocker::Instance()->UnLock();
  149. return RET_STATUS::RET_SUCCEED;
  150. }
  151. RET_STATUS LogicDeviceMechCarm::FramePrep()
  152. {
  153. RET_STATUS ret = RET_STATUS::RET_FAILED;
  154. LogicDriverThreadLocker::Instance()->Lock();
  155. IExamHandler *handler = ExamHandlerManager::Instance()->GetCurrentHandler();
  156. if (handler)
  157. {
  158. ret = handler->OnFramePrep();
  159. }
  160. LogicDriverThreadLocker::Instance()->UnLock();
  161. return ret;
  162. }
  163. RET_STATUS LogicDeviceMechCarm::FrameReady()
  164. {
  165. RET_STATUS ret = RET_STATUS::RET_FAILED;
  166. LogicDriverThreadLocker::Instance()->Lock();
  167. IExamHandler *handler = ExamHandlerManager::Instance()->GetCurrentHandler();
  168. if (handler)
  169. {
  170. ret = handler->OnFrameReady();
  171. }
  172. LogicDriverThreadLocker::Instance()->UnLock();
  173. return ret;
  174. }
  175. RET_STATUS LogicDeviceMechCarm::FrameAcq()
  176. {
  177. RET_STATUS ret = RET_STATUS::RET_FAILED;
  178. if(gbusinessLog) gbusinessLog->Info("[FrameAcq]");
  179. LogicDriverThreadLocker::Instance()->Lock();
  180. IExamHandler *handler = ExamHandlerManager::Instance()->GetCurrentHandler();
  181. if (handler)
  182. {
  183. ret = handler->OnFrameAcq();
  184. }
  185. LogicDriverThreadLocker::Instance()->UnLock();
  186. return ret;
  187. }
  188. RET_STATUS LogicDeviceMechCarm::FrameStart()
  189. {
  190. RET_STATUS ret = RET_STATUS::RET_FAILED;
  191. LogicDriverThreadLocker::Instance()->Lock();
  192. IExamHandler *handler = ExamHandlerManager::Instance()->GetCurrentHandler();
  193. if (handler)
  194. {
  195. ret = handler->OnFrameStart();
  196. }
  197. LogicDriverThreadLocker::Instance()->UnLock();
  198. return ret;
  199. }
  200. RET_STATUS LogicDeviceMechCarm::FrameEnd()
  201. {
  202. RET_STATUS ret = RET_STATUS::RET_FAILED;
  203. LogicDriverThreadLocker::Instance()->Lock();
  204. IExamHandler *handler = ExamHandlerManager::Instance()->GetCurrentHandler();
  205. if (handler)
  206. {
  207. ret = handler->OnFrameEnd();
  208. }
  209. LogicDriverThreadLocker::Instance()->UnLock();
  210. return ret;
  211. }
  212. RET_STATUS LogicDeviceMechCarm::FramePost()
  213. {
  214. RET_STATUS ret = RET_STATUS::RET_FAILED;
  215. LogicDriverThreadLocker::Instance()->Lock();
  216. IExamHandler *handler = ExamHandlerManager::Instance()->GetCurrentHandler();
  217. if (handler)
  218. {
  219. ret = handler->OnFramePost();
  220. }
  221. LogicDriverThreadLocker::Instance()->UnLock();
  222. return ret;
  223. }
  224. RET_STATUS LogicDeviceMechCarm::FrameError()
  225. {
  226. RET_STATUS ret = RET_STATUS::RET_FAILED;
  227. LogicDriverThreadLocker::Instance()->Lock();
  228. IExamHandler *handler = ExamHandlerManager::Instance()->GetCurrentHandler();
  229. if (handler)
  230. {
  231. ret = handler->OnFrameError();
  232. }
  233. LogicDriverThreadLocker::Instance()->UnLock();
  234. return ret;
  235. }
  236. RET_STATUS LogicDeviceMechCarm::SeqError()
  237. {
  238. RET_STATUS ret = RET_STATUS::RET_FAILED;
  239. LogicDriverThreadLocker::Instance()->Lock();
  240. IExamHandler *handler = ExamHandlerManager::Instance()->GetCurrentHandler();
  241. if (handler)
  242. {
  243. ret = handler->OnSeqError();
  244. }
  245. LogicDriverThreadLocker::Instance()->UnLock();
  246. return ret;
  247. }
  248. RET_STATUS LogicDeviceMechCarm::SeqEnd()
  249. {
  250. RET_STATUS ret = RET_STATUS::RET_FAILED;
  251. LogicDriverThreadLocker::Instance()->Lock();
  252. IExamHandler *handler = ExamHandlerManager::Instance()->GetCurrentHandler();
  253. if (handler)
  254. {
  255. ret = handler->OnSeqEnd();
  256. }
  257. LogicDriverThreadLocker::Instance()->UnLock();
  258. return ret;
  259. }
  260. RET_STATUS LogicDeviceMechCarm::SetFrameRate(FLOAT frameRate)
  261. {
  262. RET_STATUS ret = RET_STATUS::RET_FAILED;
  263. LogicDriverThreadLocker::Instance()->Lock();
  264. IExamHandler *handler = ExamHandlerManager::Instance()->GetCurrentHandler();
  265. if (handler)
  266. {
  267. ret = handler->OnSetFrameRate(frameRate);
  268. }
  269. LogicDriverThreadLocker::Instance()->UnLock();
  270. return ret;
  271. }
  272. RET_STATUS LogicDeviceMechCarm::SetTechParamsInfo(ResDataObject& pParam)
  273. {
  274. RET_STATUS ret = RET_STATUS::RET_FAILED;
  275. LogicDriverThreadLocker::Instance()->Lock();
  276. IExamHandler *handler = (IExamHandler *)ExamHandlerManager::Instance()->GetCurrentHandler();
  277. if (handler)
  278. {
  279. ret = handler->OnSetTechParamsInfo(pParam);
  280. }
  281. LogicDriverThreadLocker::Instance()->UnLock();
  282. return ret;
  283. }
  284. RET_STATUS LogicDeviceMechCarm::CalMotionTubeLineV(ResDataObject& ParamIn)
  285. {
  286. RET_STATUS ret = RET_STATUS::RET_FAILED;
  287. LogicDriverThreadLocker::Instance()->Lock();
  288. ICArmGeneralHandler *handler = (ICArmGeneralHandler *)ExamHandlerManager::Instance()->GetHandler(CARM_GENERAL_EXAMHANDLER);
  289. if (handler)
  290. {
  291. ret = handler->OnTubeCircular(ParamIn);
  292. }
  293. LogicDriverThreadLocker::Instance()->UnLock();
  294. return ret;
  295. }
  296. RET_STATUS LogicDeviceMechCarm::CalMotionTubeAngleRotate(ResDataObject& ParamIn)
  297. {
  298. RET_STATUS ret = RET_STATUS::RET_FAILED;
  299. LogicDriverThreadLocker::Instance()->Lock();
  300. ICArmGeneralHandler *handler = (ICArmGeneralHandler *)ExamHandlerManager::Instance()->GetHandler(CARM_GENERAL_EXAMHANDLER);
  301. if (handler)
  302. {
  303. ret = handler->OnTubeSwing(ParamIn);
  304. }
  305. LogicDriverThreadLocker::Instance()->UnLock();
  306. return ret;
  307. }
  308. RET_STATUS LogicDeviceMechCarm::CalGetEncoderofTubeLineV(ResDataObject& ParamOut)
  309. {
  310. RET_STATUS ret = RET_STATUS::RET_FAILED;
  311. if(gbusinessLog) gbusinessLog->Info("[CalGetEncoderofTubeLineV]");
  312. LogicDriverThreadLocker::Instance()->Lock();
  313. ICArmGeneralHandler *handler = (ICArmGeneralHandler *)ExamHandlerManager::Instance()->GetHandler(CARM_GENERAL_EXAMHANDLER);
  314. if (handler)
  315. {
  316. ret = handler->OnGetTubeCircularEncoder(ParamOut);
  317. }
  318. LogicDriverThreadLocker::Instance()->UnLock();
  319. return ret;
  320. }
  321. RET_STATUS LogicDeviceMechCarm::CalGetEncoderofTubeAngle(ResDataObject& ParamOut)
  322. {
  323. RET_STATUS ret = RET_STATUS::RET_FAILED;
  324. if(gbusinessLog) gbusinessLog->Info("[CalGetEncoderofTubeAngle]");
  325. LogicDriverThreadLocker::Instance()->Lock();
  326. ICArmGeneralHandler *handler = (ICArmGeneralHandler *)ExamHandlerManager::Instance()->GetHandler(CARM_GENERAL_EXAMHANDLER);
  327. if (handler)
  328. {
  329. ret = handler->OnGetTubeSwingEncoder(ParamOut);
  330. }
  331. LogicDriverThreadLocker::Instance()->UnLock();
  332. return ret;
  333. }
  334. RET_STATUS LogicDeviceMechCarm::ActiveTubeAngleZAxisClear()
  335. {
  336. RET_STATUS ret = RET_STATUS::RET_FAILED;
  337. if(gbusinessLog) gbusinessLog->Info("[ActiveTubeAngleZAxisClear]");
  338. LogicDriverThreadLocker::Instance()->Lock();
  339. ICArmGeneralHandler *handler = (ICArmGeneralHandler *)ExamHandlerManager::Instance()->GetHandler(CARM_GENERAL_EXAMHANDLER);
  340. if (handler)
  341. {
  342. ret = handler->OnActiveTubeSwingZAxis();
  343. }
  344. LogicDriverThreadLocker::Instance()->UnLock();
  345. return ret;
  346. }
  347. RET_STATUS LogicDeviceMechCarm::CancelTubeAngleZAxisClear()
  348. {
  349. RET_STATUS ret = RET_STATUS::RET_FAILED;
  350. if(gbusinessLog) gbusinessLog->Info("[CancelTubeAngleZAxisClear]");
  351. LogicDriverThreadLocker::Instance()->Lock();
  352. ICArmGeneralHandler *handler = (ICArmGeneralHandler *)ExamHandlerManager::Instance()->GetHandler(CARM_GENERAL_EXAMHANDLER);
  353. if (handler)
  354. {
  355. ret = handler->OnCancleTubeSwingZAxis();
  356. }
  357. LogicDriverThreadLocker::Instance()->UnLock();
  358. return ret;
  359. }
  360. RET_STATUS LogicDeviceMechCarm::ActiveTubeHeightZAxisClear()
  361. {
  362. RET_STATUS ret = RET_STATUS::RET_FAILED;
  363. if(gbusinessLog) gbusinessLog->Info("[ActiveTubeHeightZAxisClear]");
  364. LogicDriverThreadLocker::Instance()->Lock();
  365. ICArmGeneralHandler *handler = (ICArmGeneralHandler *)ExamHandlerManager::Instance()->GetHandler(CARM_GENERAL_EXAMHANDLER);
  366. if (handler)
  367. {
  368. ret = handler->OnActiveTubeCircularZAxis();
  369. }
  370. LogicDriverThreadLocker::Instance()->UnLock();
  371. return ret;
  372. }
  373. RET_STATUS LogicDeviceMechCarm::CancelTubeHeightZAxisClear()
  374. {
  375. RET_STATUS ret = RET_STATUS::RET_FAILED;
  376. if(gbusinessLog) gbusinessLog->Info("[CancelTubeHeightZAxisClear]");
  377. LogicDriverThreadLocker::Instance()->Lock();
  378. ICArmGeneralHandler *handler = (ICArmGeneralHandler *)ExamHandlerManager::Instance()->GetHandler(CARM_GENERAL_EXAMHANDLER);
  379. if (handler)
  380. {
  381. ret = handler->OnCancleTubeCircularZAxis();
  382. }
  383. LogicDriverThreadLocker::Instance()->UnLock();
  384. return ret;
  385. }
  386. RET_STATUS LogicDeviceMechCarm::NotifyMachineryTechParams(float tid, float sid, int project, float angle, int direction, std::string geometry)
  387. {
  388. m_MachineryTID[AttrKey::MachineryTID] = tid;
  389. m_pMachineryDriver->FireNotify(AttrKey::MachineryTID, to_string(tid));
  390. m_MachinerySID[AttrKey::MachinerySID] = sid;
  391. m_pMachineryDriver->FireNotify(AttrKey::MachinerySID, to_string(sid));
  392. m_MachineryProjectionNumber[AttrKey::MachineryProjectionNumber] = project;
  393. m_pMachineryDriver->FireNotify(AttrKey::MachineryProjectionNumber, to_string(project));
  394. m_MachineryScanAngle[AttrKey::MachineryScanAngle] = angle;
  395. m_pMachineryDriver->FireNotify(AttrKey::MachineryScanAngle, to_string(angle));
  396. m_MachineryScanDirection[AttrKey::MachineryScanDirection] = direction;
  397. m_pMachineryDriver->FireNotify(AttrKey::MachineryScanDirection, to_string(direction));
  398. m_MachineryScanGeometry[AttrKey::MachineryScanGeometry] = geometry.c_str();
  399. m_pMachineryDriver->FireNotify(AttrKey::MachineryScanGeometry, geometry);
  400. return RET_STATUS::RET_SUCCEED;
  401. }