GEN.DEV.ContainerExample.h 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. #pragma once
  2. #include "CCOS.Dev.MouldDefine.hpp"
  3. #include "CCOS.Dev.MSG_V3.hpp"
  4. //#include "Definitions.h"
  5. namespace nsDetail = CCOS::Dev::Detail;
  6. namespace CCOS::Dev::Detail::Generator
  7. {
  8. static const int TIMEOUTVALUE = 100;
  9. class _CCOS_GEN_ContainerExample_API CGEN_DEV_ContainerExample
  10. {
  11. public:
  12. CGEN_DEV_ContainerExample(string configfile);
  13. ~CGEN_DEV_ContainerExample();
  14. //发生器模块通用
  15. std::string GetGUID(); //提供GUID
  16. std::string GetResource(); //提供Device对外的接口、属性
  17. void GetUnitHWValueFromCFG(); //读取配置文件设定值
  18. RET_STATUS SetWS(const std::string value); //设置工作位
  19. RET_STATUS SetExpSYN(EnSYNMode value); //设置曝光同步
  20. RET_STATUS SetExpEnable(); //曝光使能
  21. RET_STATUS SetExpDisable();
  22. RET_STATUS Reset(); //重置发生器错误
  23. RET_STATUS RefreshData(); //刷新部分数据
  24. RET_STATUS SetGenSynState(int value); //设置发生器曝光状态
  25. RET_STATUS SetGenState(int value); //设置发生器设备状态
  26. RET_STATUS Clear_DAP(); //清空DAP
  27. RET_STATUS GetValue_DAP(float& value); //获取DAP
  28. RET_STATUS SetDetectorWindow(bool value); //发送TIC
  29. RET_STATUS SetExposurePermit(bool value); //发送EXO
  30. //指令发送接口
  31. RET_STATUS HWSend(const char* strCommand, int lengh, bool reSend = false, int nTimeOut = TIMEOUTVALUE);
  32. void SetNotifyCallBack(callBackFun fun); //设置消息上报回调
  33. //发生器支持的通用点片命令
  34. RET_STATUS IncRadKV(); //点片KV调节
  35. RET_STATUS DecRadKV();
  36. RET_STATUS SetRadKV(float value);
  37. RET_STATUS IncRadMA(); //点片MA调节
  38. RET_STATUS DecRadMA();
  39. RET_STATUS SetRadMA(float value);
  40. RET_STATUS IncRadMS(); //点片MS调节
  41. RET_STATUS DecRadMS();
  42. RET_STATUS SetRadMS(float value);
  43. RET_STATUS IncRadMAS(); //点片MAS调节
  44. RET_STATUS DecRadMAS();
  45. RET_STATUS SetRadMAS(float value);
  46. RET_STATUS SetFocus(int value); //设置焦点
  47. RET_STATUS SetTechmode(int value); //设置技术模式:1point,2point,3point
  48. RET_STATUS SetAECDensity(int value); //设置AEC浓度
  49. RET_STATUS SetAECField(int value); //设置AEC取样区域
  50. RET_STATUS SetAECFilm(int value); //设置AEC胶片
  51. RET_STATUS SetAPR(const _tAPRArgs& t); //一次性设置点片参数
  52. RET_STATUS QueryPostKV(float& value); //查询曝光后的真实参数
  53. RET_STATUS QueryPostMA(float& value);
  54. RET_STATUS QueryPostMS(float& value);
  55. RET_STATUS QueryPostMAS(float& value);
  56. RET_STATUS SetRadFrameRate(float frameRate); //设置序列点片帧率
  57. RET_STATUS SetExpMode(std::string value); //设置曝光模式:单帧、序列、双能
  58. RET_STATUS SetEXAMMode(std::string value); //设置检测模式:手动、自动
  59. //发生器支持的通用透视命令
  60. RET_STATUS IncFluKV(); //透视KV调节
  61. RET_STATUS DecFluKV();
  62. RET_STATUS SetFluKV(float value);
  63. RET_STATUS IncFluMA(); //透视MA调节
  64. RET_STATUS DecFluMA();
  65. RET_STATUS SetFluMA(float value);
  66. RET_STATUS IncFluMS(); //透视MS调节
  67. RET_STATUS DecFluMS();
  68. RET_STATUS SetFluMS(float value);
  69. RET_STATUS IncFluMAS(); //透视MAS调节
  70. RET_STATUS DecFluMAS();
  71. RET_STATUS SetFluMAS(float value);
  72. RET_STATUS SetPPS(float frameRate); //脉冲透视帧率调节
  73. RET_STATUS GetPPS();
  74. RET_STATUS INCPPS();
  75. RET_STATUS DECPPS();
  76. RET_STATUS SetPluseWidth(float fplusewidth); //设置脉宽
  77. RET_STATUS SetABSMode(int nMode); //设置自动亮度调节(ABS)模式
  78. RET_STATUS SetABSCurve(); //ABS曲线调节
  79. RET_STATUS IncABSCurve();
  80. RET_STATUS DecABSCurve();
  81. RET_STATUS SetABSValue(float fABSValue);
  82. RET_STATUS SetABSTargetEXI(float fEXIValue);
  83. RET_STATUS SetAPF(const _tAPFArgs& t); //一次性设置透视参数
  84. RET_STATUS GetFluIntTimer(); //获取透视周期时间
  85. RET_STATUS GetFluAccTimer(); //获取透视曝光累计时间
  86. RET_STATUS ResetFluTimer(int ntype); //清空透视曝光累计时间
  87. RET_STATUS SetFluPre(int bPrepare); //设置透视预备阶段使能
  88. RET_STATUS SetFluEXP(int bPrepare); //设置透视曝光阶段使能
  89. RET_STATUS SetFluMode(std::string value); //设置透视模式
  90. RET_STATUS SetFluMAG(int nsize); //设置MG:0 to 3 - sets Mag size, ASCII character for 255 - Mag selection disabled
  91. RET_STATUS DisableMAG();
  92. RET_STATUS SetFluDoseLever(int nlever); //设置透视剂量等级( 0,1,2 )
  93. RET_STATUS SetHalfDose(int nlever); //设置透视半价剂量
  94. RET_STATUS TransferRadCurve(int ncurve); //点片KV跟随透视,0-3 Set curve 0:disable
  95. public:
  96. ResDataObject m_GenConfig; //配置文件
  97. string m_pDevicePath; //Container需要的设备路径
  98. static CcosAttrKey::UNIT_CTRL_TYPE m_nNotifyType; //消息上报方式
  99. //线程变量互斥锁
  100. static atomic<int> m_iLoopTime; //循环间隔时间(毫秒)轮询线程使用
  101. atomic<int> m_iHeartBeats; //心跳统计
  102. atomic<bool> m_bConnectFlag; //连接标记
  103. //硬件参数
  104. std::unique_ptr<StringMould> m_TubeInfo; //球管描述,多为型号
  105. std::unique_ptr<StringMould> m_TubeTargetMaterial; //阳极靶材
  106. std::unique_ptr<IntMould> m_TubeAngle; //球管角度,有的发生器可随时调整
  107. std::unique_ptr<FloatMould> m_TubeHE; //球管温度
  108. std::unique_ptr<FloatMould> m_GenHE; //逆变器(升压装置)温度
  109. std::unique_ptr<IntMould> m_BatteryChargeState; //电池状态:充电、未充电、未安装
  110. std::unique_ptr<IntMould> m_BatteryPowerState; //电池电量
  111. std::unique_ptr<IntMould> m_GenSynState; //发生器曝光状态:阳极旋转、阴阳两极加压、出线、停止旋转加压
  112. std::unique_ptr<IntMould> m_GenState; //发生器设备状态:断电、休眠、初始化、待机、曝光中、冷却、有错等
  113. std::unique_ptr<IntMould> m_Handswitch; //手闸状态:一档按下、二档按下、一档松开、二档松开
  114. std::unique_ptr<IntMould> m_Footswitch; //脚闸状态:踩下、抬起
  115. map<cfgWorkStationKey, cfgWorkStationData> m_arrWSMap; //工作位标记码查找表
  116. cfgWorkStationKey m_strCurrentWSName; //当前工作位名称; //工作位:站位、卧位
  117. //点片参数
  118. std::unique_ptr<FloatMould> m_RadKV; //阳极电压
  119. std::unique_ptr<FloatMould> m_RadMA; //阴极电流
  120. std::unique_ptr<FloatMould> m_RadMS; //加压时间
  121. std::unique_ptr<FloatMould> m_RadMAS; //电流时间积
  122. std::unique_ptr<IntMould> m_RadTechmode; //参数设置模式:一点、两点、三点
  123. std::unique_ptr<IntMould> m_RadFocus; //焦点类型
  124. std::unique_ptr<IntMould> m_RadAECField; //AEC取样区域
  125. std::unique_ptr<IntMould> m_RadAECFilm; //AEC胶片
  126. std::unique_ptr<FloatMould> m_RadAECDensity; //AEC浓度
  127. std::unique_ptr<IntMould> m_RadFrameRate; //序列点片帧率
  128. std::unique_ptr<FloatMould> m_PostKV; //曝光实际电压
  129. std::unique_ptr<FloatMould> m_PostMA; //曝光实际电流
  130. std::unique_ptr<FloatMould> m_PostMS; //曝光实际时间
  131. std::unique_ptr<FloatMould> m_PostMAS; //曝光实际电流时间积
  132. std::unique_ptr<StringMould> m_ExpMode; //曝光模式:点片、序列点片、双能
  133. std::unique_ptr<StringMould> m_EXAMMode; //检查模式:手动、自动
  134. float m_FocusSmall{ 0 }; //小灯丝尺寸(配置文件获取)
  135. float m_FocusLarge{ 1 }; //大灯丝尺寸(配置文件获取)
  136. //透视参数
  137. std::unique_ptr<FloatMould> m_FluKV; //阳极电压(动态发生器点片、透视的KV要分别设置)
  138. std::unique_ptr<FloatMould> m_FluMA; //阴极电流(动态发生器点片、透视的MA要分别设置)
  139. std::unique_ptr<FloatMould> m_FluMS; //加压时间(透视过程中的单个周期、脉宽)
  140. std::unique_ptr<FloatMould> m_FluMAS; //电流时间积(动态发生器点片、透视的MAS要分别设置)
  141. std::unique_ptr<IntMould> m_FluPPS; //帧率(脉冲频率,与序列点片不一样)
  142. std::unique_ptr<IntMould> m_FluABSStatus; //自动亮度调节开关
  143. std::unique_ptr<IntMould> m_FluDoseLever; //剂量等级
  144. std::unique_ptr<IntMould> m_FluFMode; //透视模式:连续、脉冲、高剂量连续、高剂量脉冲
  145. std::unique_ptr<FloatMould> m_FluIntTime; //透视周期时间:单次曝光时间+距离下一次曝光的间隔时间
  146. std::unique_ptr<FloatMould> m_FluAccTime; //透视累计时间:整个透视过程中,产生X-ray的累计时间
  147. private:
  148. RET_STATUS HWSendWaittimeCMD(char* strCommand, int lengh, int headLengh = 3); //发送"指令类型1"指令
  149. RET_STATUS HWSendHBCMD(char* strCommand, int lengh, int headLengh = 3); //发送"指令类型2"指令
  150. RET_STATUS HWSendWaitACKCMD(char* strCommand, int lengh, int headLengh = 3); //发送"指令类型3"指令
  151. void OnCallBack(); //定义指令回调函数
  152. bool StartHardwareStatusThread(); //启动轮询线程
  153. static DWORD HardwareStatusThread(LPVOID pParam); //定时查询状态信息
  154. void FireNotify(std::string key, const int context); //向上层上报整型消息
  155. void FireNotify(std::string key, const float context); //向上层上报浮点型消息
  156. void FireNotify(std::string key, const std::string context); //向上层上报字符串型消息
  157. void FireErrorMessage(const bool Act, const int Code, const char* ResInfo = ""); //上报错误消息
  158. void FireWarnMessage(const bool Act, const int Code, const char* ResInfo = ""); //上报告警消息
  159. private:
  160. callBackFun m_funV2DynamicCallBackFun{ nullptr };//V2动态消息处理回调
  161. int m_nCMDType_WaitTime{ 0 }; //指令类型1:发送后等待固定时间
  162. int m_nCMDType_HB{ 0 }; //指令类型2:心跳
  163. int m_nCMDType_WaitACK{ 0 }; //指令类型3:发送后等待ACK返回
  164. HANDLE m_pHardwareStatusThread; //轮询线程句柄
  165. atomic<bool> m_bExpEnable; //曝光使能
  166. EnSYNMode m_bExpSYN{ EnSYNMode::EXPOSURE_SYNMODE_HARDWARE_SYNBOX }; //曝光同步:软、硬
  167. atomic<bool> m_bSoftExpPermit{ 0 }; //软曝光确认
  168. std::unique_ptr<nsDetail::MSGUnit> m_MSGUnit; //错误消息处理类
  169. std::unique_ptr <IOEventCenter> m_EventCenter; //设置消息上报Center
  170. };
  171. }