GEN.DEV.IDETEC_Almax.h 9.7 KB

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