123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- #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<int> m_iLoopTime; //循环间隔时间(毫秒)轮询线程使用
- atomic<int> m_iHeartBeats; //心跳统计
- atomic<bool> m_bConnectFlag; //连接标记
- //硬件参数
- std::unique_ptr<StringMould> m_TubeInfo; //球管描述,多为型号
- std::unique_ptr<StringMould> m_TubeTargetMaterial; //阳极靶材
- std::unique_ptr<IntMould> m_TubeAngle; //球管角度,有的发生器可随时调整
- std::unique_ptr<FloatMould> m_TubeHE; //球管温度
- std::unique_ptr<FloatMould> m_GenHE; //逆变器(升压装置)温度
- std::unique_ptr<IntMould> m_BatteryChargeState; //电池状态:充电、未充电、未安装
- std::unique_ptr<IntMould> m_BatteryPowerState; //电池电量
- std::unique_ptr<IntMould> m_GenSynState; //发生器曝光状态:阳极旋转、阴阳两极加压、出线、停止旋转加压
- std::unique_ptr<IntMould> m_GenState; //发生器设备状态:断电、休眠、初始化、待机、曝光中、冷却、有错等
- std::unique_ptr<IntMould> m_Handswitch; //手闸状态:一档按下、二档按下、一档松开、二档松开
- std::unique_ptr<IntMould> m_Footswitch; //脚闸状态:踩下、抬起
- map<cfgWorkStationKey, cfgWorkStationData> m_arrWSMap; //工作位标记码查找表
- cfgWorkStationKey m_strCurrentWSName; //当前工作位名称; //工作位:站位、卧位
- float m_fAirKerm{ 0 }; //
- float AirKermRate{ 0 }; //
- //点片参数
- std::unique_ptr<FloatMould> m_RadKV; //阳极电压
- std::unique_ptr<FloatMould> m_RadMA; //阴极电流
- std::unique_ptr<FloatMould> m_RadMS; //加压时间
- std::unique_ptr<FloatMould> m_RadMAS; //电流时间积
- std::unique_ptr<IntMould> m_RadTechmode; //参数设置模式:一点、两点、三点
- std::unique_ptr<IntMould> m_RadFocus; //焦点类型
- std::unique_ptr<IntMould> m_RadAECField; //AEC取样区域
- std::unique_ptr<IntMould> m_RadAECFilm; //AEC胶片
- std::unique_ptr<FloatMould> m_RadAECDensity; //AEC浓度
- std::unique_ptr<IntMould> m_RadFrameRate; //序列点片帧率
- std::unique_ptr<FloatMould> m_PostKV; //曝光实际电压
- std::unique_ptr<FloatMould> m_PostMA; //曝光实际电流
- std::unique_ptr<FloatMould> m_PostMS; //曝光实际时间
- std::unique_ptr<FloatMould> m_PostMAS; //曝光实际电流时间积
- std::unique_ptr<StringMould> m_ExpMode; //曝光模式:点片、序列点片、双能
- std::unique_ptr<StringMould> m_EXAMMode; //检查模式:手动、自动
- float m_FocusSmall{ 0 }; //小灯丝尺寸(配置文件获取)
- float m_FocusLarge{ 1 }; //大灯丝尺寸(配置文件获取)
- //透视参数
- std::unique_ptr<FloatMould> m_FluKV; //阳极电压(动态发生器点片、透视的KV要分别设置)
- std::unique_ptr<FloatMould> m_FluMA; //阴极电流(动态发生器点片、透视的MA要分别设置)
- std::unique_ptr<FloatMould> m_FluMS; //加压时间(透视过程中的单个周期、脉宽)
- std::unique_ptr<FloatMould> m_FluMAS; //电流时间积(动态发生器点片、透视的MAS要分别设置)
- std::unique_ptr<IntMould> m_FluPPS; //帧率(脉冲频率,与序列点片不一样)
- std::unique_ptr<IntMould> m_FluABSStatus; //自动亮度调节开关
- std::unique_ptr<IntMould> m_FluDoseLever; //剂量等级
- std::unique_ptr<IntMould> m_FluFMode; //透视模式:连续、脉冲、高剂量连续、高剂量脉冲
- std::unique_ptr<FloatMould> m_FluIntTime; //透视周期时间:单次曝光时间+距离下一次曝光的间隔时间
- std::unique_ptr<FloatMould> 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<bool> m_bExpEnable; //曝光使能
- EnSYNMode m_bExpSYN{ EnSYNMode::EXPOSURE_SYNMODE_HARDWARE_SYNBOX }; //曝光同步:软、硬
- atomic<bool> m_bSoftExpPermit{ 0 }; //软曝光确认
- std::unique_ptr<nsDetail::MSGUnit> m_MSGUnit; //错误消息处理类
- std::unique_ptr <IOEventCenter> m_EventCenter; //设置消息上报Center
- int m_IPM{ 0 };
- int m_IPF{ 0 };
- int m_IPL{ 0 };
- };
- }
|