#pragma once #define SINO_Com_NormalLen 30 //*************************设备状态************************************************* typedef enum _Ccos_SINO_Status { SINO_STATUS_PowerOn = 1,//开机状态 对应 GENERATOR_STATUS_INIT SINO_STATUS_SysCooling = 2,//准备状态 对应 GENERATOR_STATUS_SLEEP SINO_STATUS_Standby = 4,//等待曝光状态 对应 GENERATOR_STATUS_STANDBY SINO_STATUS_EXP = 5,//曝光状态 对应 GENERATOR_STATUS_EXP SINO_STATUS_Error = 6,//系统报警状态 对应 GENERATOR_STATUS_ERROR }SINO_STATUS; //*************************指令格式************************************************* //指令头尾 #define SINO_WS_STX 0xA5 //模块头 #define SINO_WS_ETX 0x5A //模块尾 #define SINO_MU_STX 0xCF //设备头 #define SINO_MU_ETX 0xFC //设备尾 //发送 #define SINO_TYPE_SEND 0x00 //主动发送的指令 #define SINO_TYPE_BACK 0x01 //指令设置成功后,返回的数据,需要对方返回确认指令 #define SINO_TYPE_CONFIRM 0x02 //确认指令,不需要反馈 //应答状态 #define SINO_CONFIRM_OK 0x00 //数据成功接收并设置 #define SINO_CONFIRM_FAIL 0x01 //数据不正确,未成功设置 //*************************指令ID************************************************* //WS->MU #define SINO_DataQuery 0x06 //数据查询命令 enum SINO_QueryType{ EM_Query_STATUS = 0x01, //请求MU发送当前系统状态信息参数 EM_Query_LASTEXPOSURE = 0x02, //请求MU发送本次曝光的曝光参数 EM_Query_READY = 0x03, //WS反馈当前WS状态 READY,可以进行曝光 EM_Query_NOREADY = 0x04, //WS反馈当前WS状态 NOT READY,不可以进行曝光 }; #define SINO_SetMASPreEXP 0x09 //AEC/OpDose模式下,完成预曝光后WS需反馈此值 #define SINO_StatusQuery 0x30 //状态查询 #define SINO_SetPatam 0x31 //配置参数 #define SINO_ComInquiry 0xA0 //通信问询 enum SINO_ComInquiryType { EM_ComInquiry_PowerOn = 0x01, //系统上电通信问询 EM_ComInquiry_handshake = 0x02, //空闲时通信握手问询 }; //MU->WS #define SINO_RackPosition 0x01 //机架位置 #define SINO_DataFeedback 0x07 //MU反馈WS数据 enum SINO_FilterType { EM_Mo_Filtration = 0x01, //系统上电通信问询 EM_Rh_Filtration = 0x02, //空闲时通信握手问询 }; #define SINO_PostFeedback 0x08 //MU曝光完成反馈 #define SINO_SystemStatus 0x0A //系统状态 enum SINO_SysStatusType { EM_SysStatus001 = 0x01, //C臂正在做旋转运动 EM_SysStatus002 = 0x02, //C臂旋转运动停止 EM_SysStatus003 = 0x03, //C臂正在做升降运动 EM_SysStatus004 = 0x04, //C臂升降运动停止 EM_SysStatus005 = 0x05, //急停开关按下 EM_SysStatus006 = 0x06, //急停开关弹起 EM_SysStatus016 = 0x10, //压迫器正在做升降运动 EM_SysStatus017 = 0x11, //压迫器升降运动停止 EM_SysStatus018 = 0x12, //达到最佳压力停止 EM_SysStatus019 = 0x13, //解除达到最佳压力停止 EM_SysStatus020 = 0x14, //压迫器上升 EM_SysStatus021 = 0x15, //压迫器下降 EM_SysStatus022 = 0x16, //压迫器停止 EM_SysStatus032 = 0x20, //准直器滤过正在切换 EM_SysStatus033 = 0x21, //准直器滤过切换完毕 EM_SysStatus034 = 0x22, //准直器摄野范围正在调整 EM_SysStatus035 = 0x23, //准直器摄野范围调整完毕 EM_SysStatus036 = 0x24, //摄野灯点亮 EM_SysStatus037 = 0x25, //摄野灯熄灭 EM_SysStatus064 = 0x40, //允许曝光板开启曝光功能 EM_SysStatus065 = 0x41, //禁止曝光板开启曝光功能 EM_SysStatus066 = 0x42, //采集工作站启动曝光按钮 EM_SysStatus067 = 0x43, //曝光手闸按下 EM_SysStatus068 = 0x44, //系统曝光预热状态 EM_SysStatus070 = 0x46, //滤线栅同步命令(预留) EM_SysStatus071 = 0x47, //AEC/Opdose模式开启高压预曝光 EM_SysStatus073 = 0x49, //AEC/Opdose模式高压预曝光结束 EM_SysStatus075 = 0x4B, //开启高压,系统开始正常曝光 EM_SysStatus077 = 0x4D, //曝光进程中断 EM_SysStatus078 = 0x4E, //曝光完成开始冷却 EM_SysStatus079 = 0x4F, //系统冷却完成 EM_SysStatus080 = 0x50, //屏蔽房间门处于闭合状态 EM_SysStatus081 = 0x51, //屏蔽房间门处于敞开状态 EM_SysStatus160 = 0xA0, //MU初始化中 EM_SysStatus161 = 0xA1, //MU初始化完成 EM_SysStatus162 = 0xA2, //MU各个状态 READY,可以进行曝光 EM_SysStatus163 = 0xA3, //MU 各状态NOT READY,不可以进行曝光 }; #define SINO_SystemWarning 0x10 //报警信息 enum SINO_SysWarnType { EM_SysWarn001 = 0x01, //球管温度过高报警 EM_SysWarn002 = 0x02, //高压发生器高压输出未允许报警 EM_SysWarn003 = 0x03, //球管高速启动故障报警 EM_SysWarn004 = 0x04, //高压发生器产生高压电弧故障报警 EM_SysWarn005 = 0x05, //无效曝光参数设置导致高压输出大于5KW报警 EM_SysWarn006 = 0x06, //AEC曝光控制超时报警 EM_SysWarn007 = 0x07, //高压发生器反馈的mAs超出设置值报警 EM_SysWarn008 = 0x08, //曝光周期中间歇时间未完成就进行曝光报警 EM_SysWarn009 = 0x09, //高压发生器输出KV大于42765V且时间超过1ms报警 EM_SysWarn010 = 0x0A, //高压发生器输出mA大于213.828 mA且时间超过100ms报警 EM_SysWarn011 = 0x0B, //高压发生器输出KV或mA大于设置值的%25导致报警 EM_SysWarn012 = 0x0C, //高压发生器反馈球管灯丝开路报警 EM_SysWarn013 = 0x0D, //高压发生器反馈球管过流报警 EM_SysWarn014 = 0x0E, //高压发生器AD/DC输入电压过低报警 EM_SysWarn015 = 0x0F, //高压发生器强制超出曝光任务周期报警 EM_SysWarn016 = 0x10, //高压发生器管电压、管电流检测报警 EM_SysWarn017 = 0x11, //高压发生器强制恢复过压异常报警 EM_SysWarn018 = 0x12, //解除高压发生器报警 EM_SysWarn019 = 0x13, //曝光按钮短路或者未释放报警 EM_SysWarn020 = 0x14, //解除手闸短路报警命令 EM_SysWarn021 = 0x15, //曝光没有到设定时间提前松开手闸报警 EM_SysWarn022 = 0x16, //消除提前松开手闸报警 EM_SysWarn023 = 0x17, //自动测试模式时,检测到没有短接跳线报警 EM_SysWarn024 = 0x18, //解除自动测试跳线帽未短接报警 EM_SysWarn025 = 0x19, //曝光时,未收到运动板发来的滤线栅抖动信号 EM_SysWarn032 = 0x20, //高压通信超时 EM_SysWarn048 = 0x30, //运动控制板自检不通过报警 EM_SysWarn049 = 0x31, //解除运动控制板自检不通过报警 EM_SysWarn052 = 0x34, //运动控制板存储器读写数据失败报警 EM_SysWarn054 = 0x36, //解除运动控制板存储器读写数据失败报警 EM_SysWarn055 = 0x37, //急停开关按下时,运动控制键被按下报警 EM_SysWarn056 = 0x38, //解除急停开关按下时,运动控制键被按下错误 EM_SysWarn057 = 0x39, //脚踏开关自检未完成时被踩下报警 EM_SysWarn058 = 0x3A, //解除脚踏开关自检未完成时被踩下报警 EM_SysWarn059 = 0x3B, //旋转运动二次限位保护开关触发报警 EM_SysWarn060 = 0x3C, //旋转运动二次限位保护开关触发报警解除 EM_SysWarn061 = 0x3D, //C臂旋转方向控制引脚失效报警 EM_SysWarn062 = 0x3E, //解除C臂旋转方向控制引脚失效报警 EM_SysWarn063 = 0x3F, //C臂旋转或者升降按键在自检未完成时按下报警 EM_SysWarn064 = 0x40, //解除C臂旋转或者升降按键在自检未完成时按下报警 EM_SysWarn065 = 0x41, //C臂旋转电机驱动器报警 EM_SysWarn066 = 0x42, //解除C臂旋转电机驱动器报警 EM_SysWarn067 = 0x43, //C臂电机位置超差报警 EM_SysWarn068 = 0x44, //解除C臂电机位置超差报警 EM_SysWarn069 = 0x45, //升降运动二次限位保护开关触发报警 EM_SysWarn070 = 0x46, //升降运动二次限位保护开关触发报警解除 EM_SysWarn071 = 0x47, //升降电机方向控制引脚失效报警 EM_SysWarn072 = 0x48, //解除升降电机方向控制引脚失效报警 EM_SysWarn073 = 0x49, //机架升降电机驱动器报警 EM_SysWarn074 = 0x4A, //解除机架升降电机驱动器报警 EM_SysWarn075 = 0x4B, //升降电机位置超差报警 EM_SysWarn076 = 0x4C, //解除升降电机位置超差报警 EM_SysWarn077 = 0x4D, //角度校准板失效报警 EM_SysWarn078 = 0x4E, //解除角度校准板失效报警 EM_SysWarn096 = 0x60, //压迫器运动二次限位保护开关触发 EM_SysWarn097 = 0x61, //压迫器运动二次限位保护开关触发解除 EM_SysWarn098 = 0x62, //压迫器方向控制引脚失效 EM_SysWarn099 = 0x63, //解除压迫器方向控制引脚失效 EM_SysWarn100 = 0x64, //压迫器升降电机驱动器报警 EM_SysWarn101 = 0x65, //解除压迫器升降电机驱动器报警 EM_SysWarn102 = 0x66, //开机检测到压力报错 EM_SysWarn103 = 0x67, //解除开机检测到压力报错 EM_SysWarn104 = 0x68, //压力传感器故障报警 EM_SysWarn105 = 0x69, //解除压力传感器故障报警 EM_SysWarn106 = 0x6A, //压迫器电机位置超差报警 EM_SysWarn107 = 0x6B, //解除压迫器电机位置超差报警 EM_SysWarn108 = 0x6C, //压迫器高度过低时插入放大架报警 EM_SysWarn109 = 0x6D, //解除压迫器高度过低时插入放大架报警 EM_SysWarn110 = 0x6E, //远端压迫器自动释放按钮被开机时按下报警 EM_SysWarn111 = 0x6F, //解除远端压迫器自动释放按钮被开机时按下报警 EM_SysWarn112 = 0x70, //压力超限报警 EM_SysWarn113 = 0x71, //解除压力超限报警 EM_SysWarn128 = 0x80, //滤线栅控制电路错误 EM_SysWarn129 = 0x81, //解除滤线栅电路错误 EM_SysWarn152 = 0x98, //准直器滤片切换超时报警 EM_SysWarn153 = 0x99, //解除准直器滤片切换超时报警 EM_SysWarn154 = 0x9A, //准直器摄野调节超时报警 EM_SysWarn155 = 0x9B, //解除准直器摄野调节超时报警 EM_SysWarn156 = 0x9C, //准直器存储器读数据错误报警 EM_SysWarn157 = 0x9D, //解除准直器存储器读数据错误报警 EM_SysWarn161 = 0xA1, //曝光控制板通信异常 EM_SysWarn162 = 0xA2, //压迫器控制板通信异常 EM_SysWarn163 = 0xA3, //准直器控制板通信异常 EM_SysWarn165 = 0xA5, //底座显示板通信异常 EM_SysWarn166 = 0xA6, //远端控制盒通信异常 EM_SysWarn168 = 0xA8, //解除通信报警 }; //WS<->MU #define SINO_Compressor 0x02 //压迫器 enum SINO_CompressionPlateType{ EM_PlateType1 = 0x01, //24x30 cm 压迫板 EM_PlateType2 = 0x02, //1.5倍放大架压迫板 EM_PlateType3 = 0x03, //9x9cm点压板 }; enum SINO_AutoRelSwitchType { EM_AutoRelSwitch_Off = 0x00, //关闭自动释放功能 EM_AutoRelSwitch_On = 0x01, //开启自动释放功能 }; #define SINO_Collimator 0x03 //准直器 #define SINO_ExpoParam 0x04 //曝光参数 enum SINO_FocusType{ EM_Focus_Large = 0x01, //大焦点 EM_Focus_Small = 0x02, //小焦点 }; enum SINO_EXPMode{ EM_EXPMode_MAN = 0x01, //MAN曝光模式 EM_EXPMode_AEC = 0x02, //AEC曝光模式 EM_EXPMode_Opdose = 0x03, //Opdose曝光模式 }; #define SINO_TubeHeat 0x05 //球管热容量状态 enum SINO_TubeHeatState{ EM_THState_1 = 0x01, //球管热容量处于低温阶段 EM_THState_2 = 0x02, //球管热容量处于正常温度阶段 EM_THState_3 = 0x03, //球管热容量处于正常偏高温阶段 EM_THState_4 = 0x04, //球管热容量处于中温阶段 EM_THState_5 = 0x05, //球管热容量处于高温阶段 EM_THState_6 = 0x06, //当前球管热容量超出最大允许热容量,禁止曝光 }; struct SINOCommand //as same as Exposure Parameter via query { char Command[SINO_Com_NormalLen] = {0}; SINOCommand() { Command[0] = SINO_WS_STX; Command[3] = 7; Command[6] = SINO_WS_ETX; } SINOCommand(const char *CMDd) { int lengh = CMDd[3]; if (lengh < SINO_Com_NormalLen) { memcpy(Command, CMDd, lengh); } else { memcpy(Command, CMDd, SINO_Com_NormalLen-1); } } SINOCommand(const char* CMDd,int lengh) { if (lengh < SINO_Com_NormalLen) { memcpy(Command, CMDd, lengh); } } SINOCommand(char CMDd,char type,int size) { if (size >= 6) { Command[0] = SINO_WS_STX; Command[1] = type; Command[2] = CMDd; Command[3] = size; Command[size - 1] = SINO_WS_ETX; } } void SetAt(int pos,char value) { --pos; if (pos >= 0 && pos <= Command[3] - 1) { Command[pos] = value; } } char GetAt(int pos) { --pos; if (pos >= 0 && pos <= Command[3] - 1) { return Command[pos]; } return Command[SINO_Com_NormalLen - 1]; } const char* Get_Hex_Log() { char temp[5] = {0}; string log; for (int i = 0; i < Command[3]; i++) { if (i == Command[3]-1) { sprintf_s(temp, 4, "%02x", (UINT8)Command[i]); } else sprintf_s(temp,4,"%02x ", (UINT8)Command[i]); log += temp; } return log.c_str(); } void SetCRC(char (*fun)(char* cmdData, int size)) { char Checksum = fun(Command, Command[3]); Command[Command[3] - 2] = Checksum; } operator const char* () const { return Command; } };