#pragma once #include "CCOS.Dev.MouldDefine.hpp" #include "CCOS.Dev.MSG_V3.hpp" //#include "Definitions.h" namespace nsDetail = CCOS::Dev::Detail; namespace CCOS::Dev::Detail::Generator { class _CCOS_GEN_IDETEC_Almax_API CGEN_DEV_IDETEC_Almax { public: CGEN_DEV_IDETEC_Almax(string configfile); ~CGEN_DEV_IDETEC_Almax(); //发生器模块通用 std::string GetGUID(); //提供GUID std::string GetResource(); //提供Device对外的接口、属性 void GetUnitHWValueFromCFG(); //读取配置文件设定值 RET_STATUS SetWS(const std::string value); //设置工作位 RET_STATUS SetExpSYN(EnSYNMode value); //设置曝光同步 RET_STATUS SetExpEnable(); //曝光使能 RET_STATUS SetExpDisable(); RET_STATUS Reset(); //重置发生器错误 RET_STATUS RefreshData(); //刷新部分数据 RET_STATUS SetGenSynState(int value); //设置发生器曝光状态 RET_STATUS SetGenState(int value); //设置发生器设备状态 RET_STATUS Clear_DAP(); //清空DAP RET_STATUS GetValue_DAP(float& value); //获取DAP RET_STATUS SetDetectorWindow(bool value); //发送TIC RET_STATUS SetExposurePermit(bool value); //发送EXO //指令发送接口 RET_STATUS HWSend(const char* strCommand, int lengh, bool reSend = false, int nTimeOut = TIMEOUTVALUE); void SetNotifyCallBack(callBackFun fun); //设置消息上报回调 //发生器支持的通用点片命令 RET_STATUS IncRadKV(); //点片KV调节 RET_STATUS DecRadKV(); RET_STATUS SetRadKV(float value); RET_STATUS IncRadMA(); //点片MA调节 RET_STATUS DecRadMA(); RET_STATUS SetRadMA(float value); RET_STATUS IncRadMS(); //点片MS调节 RET_STATUS DecRadMS(); RET_STATUS SetRadMS(float value); RET_STATUS IncRadMAS(); //点片MAS调节 RET_STATUS DecRadMAS(); RET_STATUS SetRadMAS(float value); RET_STATUS SetFocus(int value); //设置焦点 RET_STATUS SetTechmode(int value); //设置技术模式:1point,2point,3point RET_STATUS SetAECDensity(int value); //设置AEC浓度 RET_STATUS SetAECField(int value); //设置AEC取样区域 RET_STATUS SetAECFilm(int value); //设置AEC胶片 RET_STATUS SetAPR(const _tAPRArgs& t); //一次性设置点片参数 RET_STATUS QueryPostKV(float& value); //查询曝光后的真实参数 RET_STATUS QueryPostMA(float& value); RET_STATUS QueryPostMS(float& value); RET_STATUS QueryPostMAS(float& value); RET_STATUS SetRadFrameRate(float frameRate); //设置序列点片帧率 RET_STATUS SetExpMode(std::string value); //设置曝光模式:单帧、序列、双能 RET_STATUS SetEXAMMode(std::string value); //设置检测模式:手动、自动 //发生器支持的通用透视命令 RET_STATUS IncFluKV(); //透视KV调节 RET_STATUS DecFluKV(); RET_STATUS SetFluKV(float value); RET_STATUS IncFluMA(); //透视MA调节 RET_STATUS DecFluMA(); RET_STATUS SetFluMA(float value); RET_STATUS IncFluMS(); //透视MS调节 RET_STATUS DecFluMS(); RET_STATUS SetFluMS(float value); RET_STATUS IncFluMAS(); //透视MAS调节 RET_STATUS DecFluMAS(); RET_STATUS SetFluMAS(float value); RET_STATUS SetPPS(float frameRate); //脉冲透视帧率调节 RET_STATUS GetPPS(); RET_STATUS INCPPS(); RET_STATUS DECPPS(); RET_STATUS SetPluseWidth(float fplusewidth); //设置脉宽 RET_STATUS SetABSMode(int nMode); //设置自动亮度调节(ABS)模式 RET_STATUS SetABSCurve(); //ABS曲线调节 RET_STATUS IncABSCurve(); RET_STATUS DecABSCurve(); RET_STATUS SetABSValue(float fABSValue); RET_STATUS SetABSTargetEXI(float fEXIValue); RET_STATUS SetAPF(const _tAPFArgs& t); //一次性设置透视参数 RET_STATUS GetFluIntTimer(); //获取透视周期时间 RET_STATUS GetFluAccTimer(); //获取透视曝光累计时间 RET_STATUS ResetFluTimer(int ntype); //清空透视曝光累计时间 RET_STATUS SetFluPre(int bPrepare); //设置透视预备阶段使能 RET_STATUS SetFluEXP(int bPrepare); //设置透视曝光阶段使能 RET_STATUS SetFluMode(std::string value); //设置透视模式 RET_STATUS SetFluMAG(int nsize); //设置MG:0 to 3 - sets Mag size, ASCII character for 255 - Mag selection disabled RET_STATUS DisableMAG(); RET_STATUS SetFluDoseLever(int nlever); //设置透视剂量等级( 0,1,2 ) RET_STATUS SetHalfDose(int nlever); //设置透视半价剂量 RET_STATUS TransferRadCurve(int ncurve); //点片KV跟随透视,0-3 Set curve 0:disable //Almax特有指令 RET_STATUS SetPanelField(int value); //用于与客户控制面板平板成像区域选择功能的对应 RET_STATUS SetShutDown(int value); //在客户控制台按下关机按钮,DFOC收到“SSD1”,退出软件 RET_STATUS SetExamView(int value); //使用该命令将DFOC Profile 与客户操作面板上的检查部位对应起来 RET_STATUS SetDSA(int value); //设置血管、心脏的造影模式 RET_STATUS SetRoadMap(int value); //设置Road Map RET_STATUS EnterExam(int value); //标识进入检查 public: ResDataObject m_GenConfig; //配置文件 string m_pDevicePath; //Container需要的设备路径 static CcosAttrKey::UNIT_CTRL_TYPE m_nNotifyType; //消息上报方式 //线程变量互斥锁 static atomic m_iLoopTime; //循环间隔时间(毫秒)轮询线程使用 atomic m_iHeartBeats; //心跳统计 atomic m_bConnectFlag; //连接标记 //硬件参数 std::unique_ptr m_TubeInfo; //球管描述,多为型号 std::unique_ptr m_TubeTargetMaterial; //阳极靶材 std::unique_ptr m_TubeAngle; //球管角度,有的发生器可随时调整 std::unique_ptr m_TubeHE; //球管温度 std::unique_ptr m_GenHE; //逆变器(升压装置)温度 std::unique_ptr m_BatteryChargeState; //电池状态:充电、未充电、未安装 std::unique_ptr m_BatteryPowerState; //电池电量 std::unique_ptr m_GenSynState; //发生器曝光状态:阳极旋转、阴阳两极加压、出线、停止旋转加压 std::unique_ptr m_GenState; //发生器设备状态:断电、休眠、初始化、待机、曝光中、冷却、有错等 std::unique_ptr m_Handswitch; //手闸状态:一档按下、二档按下、一档松开、二档松开 std::unique_ptr m_Footswitch; //脚闸状态:踩下、抬起 map m_arrWSMap; //工作位标记码查找表 cfgWorkStationKey m_strCurrentWSName; //当前工作位名称; //工作位:站位、卧位 float m_fAirKerm{ 0 }; // float AirKermRate{ 0 }; // //点片参数 std::unique_ptr m_RadKV; //阳极电压 std::unique_ptr m_RadMA; //阴极电流 std::unique_ptr m_RadMS; //加压时间 std::unique_ptr m_RadMAS; //电流时间积 std::unique_ptr m_RadTechmode; //参数设置模式:一点、两点、三点 std::unique_ptr m_RadFocus; //焦点类型 std::unique_ptr m_RadAECField; //AEC取样区域 std::unique_ptr m_RadAECFilm; //AEC胶片 std::unique_ptr m_RadAECDensity; //AEC浓度 std::unique_ptr m_RadFrameRate; //序列点片帧率 std::unique_ptr m_PostKV; //曝光实际电压 std::unique_ptr m_PostMA; //曝光实际电流 std::unique_ptr m_PostMS; //曝光实际时间 std::unique_ptr m_PostMAS; //曝光实际电流时间积 std::unique_ptr m_ExpMode; //曝光模式:点片、序列点片、双能 std::unique_ptr m_EXAMMode; //检查模式:手动、自动 float m_FocusSmall{ 0 }; //小灯丝尺寸(配置文件获取) float m_FocusLarge{ 1 }; //大灯丝尺寸(配置文件获取) //透视参数 std::unique_ptr m_FluKV; //阳极电压(动态发生器点片、透视的KV要分别设置) std::unique_ptr m_FluMA; //阴极电流(动态发生器点片、透视的MA要分别设置) std::unique_ptr m_FluMS; //加压时间(透视过程中的单个周期、脉宽) std::unique_ptr m_FluMAS; //电流时间积(动态发生器点片、透视的MAS要分别设置) std::unique_ptr m_FluPPS; //帧率(脉冲频率,与序列点片不一样) std::unique_ptr m_FluABSStatus; //自动亮度调节开关 std::unique_ptr m_FluDoseLever; //剂量等级 std::unique_ptr m_FluFMode; //透视模式:连续、脉冲、高剂量连续、高剂量脉冲 std::unique_ptr m_FluIntTime; //透视周期时间:单次曝光时间+距离下一次曝光的间隔时间 std::unique_ptr m_FluAccTime; //透视累计时间:整个透视过程中,产生X-ray的累计时间 private: RET_STATUS HWSendWaittimeCMD(char* strCommand, int lengh, int headLengh = 3); //发送"指令类型1"指令 RET_STATUS HWSendHBCMD(char* strCommand, int lengh, int headLengh = 3); //发送"指令类型2"指令 RET_STATUS HWSendWaitACKCMD(char* strCommand, int lengh, int headLengh = 3); //发送"指令类型3"指令 void OnCallBack(); //定义指令回调函数 bool StartHardwareStatusThread(); //启动轮询线程 static DWORD HardwareStatusThread(LPVOID pParam); //定时查询状态信息 void FireNotify(std::string key, const int context); //向上层上报整型消息 void FireNotify(std::string key, const float context); //向上层上报浮点型消息 void FireNotify(std::string key, const std::string context); //向上层上报字符串型消息 void FireErrorMessage(const bool Act, const int Code, const char* ResInfo = ""); //上报错误消息 void FireWarnMessage(const bool Act, const int Code, const char* ResInfo = ""); //上报告警消息 private: callBackFun m_funV2DynamicCallBackFun{ nullptr };//V2动态消息处理回调 HANDLE m_pHardwareStatusThread; //轮询线程句柄 atomic m_bExpEnable; //曝光使能 EnSYNMode m_bExpSYN{ EnSYNMode::EXPOSURE_SYNMODE_HARDWARE_SYNBOX }; //曝光同步:软、硬 atomic m_bSoftExpPermit{ 0 }; //软曝光确认 std::unique_ptr m_MSGUnit; //错误消息处理类 std::unique_ptr m_EventCenter; //设置消息上报Center int m_IPM{ 0 }; int m_IPF{ 0 }; int m_IPL{ 0 }; }; }