123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- #pragma once
- #define SINOmini_Com_NormalLen 12
- //*************************指令格式*************************************************
- //指令头尾
- #define SINOmini_STX 0xF0 //模块头
- //*************************指令ID*************************************************
- #define SINOmini_Parameter 0x01 //机架参数设置
- enum SINOmini_ParamType {
- EM_Param000 = 0x00, //0x00:?
- EM_Param001 = 0x01, //0x01:?
- EM_Param002 = 0x02, //0x02:?
- };
- #define SINOmini_WarningInfo 0x02 //告警信息
- enum SINOmini_WarnType {
- EM_Warn001 = 0x01, //0x01:开机高压错误
- EM_Warn002 = 0x02, //0x02:曝光控制板运行时高压错误
- EM_Warn003 = 0x03, //0x03:开机时灯丝错误
- EM_Warn004 = 0x04, //0x04:曝光时灯丝错误
- EM_Warn005 = 0x05, //0x05:曝光板读存储器错误
- EM_Warn006 = 0x06, //0x06:球管过温保护错误,由0x1F解除
- EM_Warn007 = 0x07, //0x07:球管运行绕阻线断开错误
- EM_Warn008 = 0x08, //0x08:阳极启动信号异常
- EM_Warn011 = 0x0B, //0x0B:曝光时高压电源未产生高压,由0xE4解除
- EM_Warn228 = 0xE4, //0xE4:解除EM_Warn011
- EM_Warn013 = 0x0D, //0x0D:球管打火计数错误
- EM_Warn014 = 0x0E, //0x0E:手闸激活没有及时释放,由0xE9解除
- EM_Warn233 = 0xE9, //0xE9:解除EM_Warn014
- EM_Warn015 = 0x0F, //0x0F:曝光时提前松开手闸错误,由0xEA解除
- EM_Warn234 = 0xEA, //0xEA:解除EM_Warn015
- EM_Warn016 = 0x10, //0x10:自动测试模式时,没有插短接头错误,由0xE3解除
- EM_Warn227 = 0xE3, //0xE3:解除EM_Warn016
- EM_Warn017 = 0x11, //0x11:曝光时管电流过高错误
- EM_Warn018 = 0x12, //0x12:曝光时管电流过低错误
- EM_Warn019 = 0x13, //0x13:灯丝板输入功率不正常
- EM_Warn020 = 0x14, //0x14:探测器反馈错误
- EM_Warn021 = 0x15, //0x15:曝光时滤线栅抖动错误
- EM_Warn025 = 0x19, //0x19:急停开关按下,由0x18解除
- EM_Warn024 = 0x18, //0x18:解除EM_Warn025
- EM_Warn027 = 0x1B, //0x1B:二次限位开关按下 ,由0x1A解除
- EM_Warn026 = 0x1A, //0x1A:解除EM_Warn027
- EM_Warn029 = 0x1D, //0x1D:在AAEC模式下,压迫器压力小于30N不可以曝光,由0x1C解除
- EM_Warn028 = 0x1C, //0x1C:解除EM_Warn029
- EM_Warn031 = 0x1F, //0x1F:系统在运动中(C臂旋转,C臂升降,压迫升降),由0x1E解除
- EM_Warn030 = 0x1E, //0x1E:解除EM_Warn031
- EM_Warn033 = 0x21, //0x21:屏蔽门打开,由0x20解除
- EM_Warn032 = 0x20, //0x20:解除EM_Warn033
- EM_Warn035 = 0x23, //0x23:校准开关已打开,由0x22解除
- EM_Warn034 = 0x22, //0x22:解除EM_Warn035
- EM_Warn037 = 0x25, //0x25:压迫器释放按钮在开机时按下错误,由0x24解除
- EM_Warn036 = 0x24, //0x24:解除EM_Warn037
- EM_Warn048 = 0x30, //0x30:C臂旋转方向控制引脚失效
- EM_Warn049 = 0x31, //0x31:压迫器升降方向控制引脚失效
- EM_Warn050 = 0x32, //0x32:系统自检未完成时脚踏开关被踩下,由0xED解除
- EM_Warn237 = 0xED, //0xED:解除EM_Warn050
- EM_Warn051 = 0x33, //0x33:系统自检未完成时C臂旋转或升降按键被按下,由0xEE解除
- EM_Warn238 = 0xEE, //0xEE:解除EM_Warn051
- EM_Warn052 = 0x34, //0x34:运动控制板自检未通过错误
- EM_Warn053 = 0x35, //0x35:滤线栅控制电路错误
- EM_Warn054 = 0x36, //0x36:急停开关按下时运动控制键被按下,由0xF1解除
- EM_Warn241 = 0xF1, //0xF1:解除EM_Warn054
- EM_Warn055 = 0x37, //0x37:滤片切换超时错误
- EM_Warn056 = 0x38, //0x38:运动板SysTick时钟初始化不通过错误
- EM_Warn057 = 0x39, //0x39:运动板存储器读取错误
- EM_Warn058 = 0x3A, //0x3A:运动板存储器写数据失败错误
- EM_Warn059 = 0x3B, //0x3B:C臂电机驱动器错误
- EM_Warn060 = 0x3C, //0x3C:压力传感器故障
- EM_Warn061 = 0x3D, //0x3D:压迫器电机位置超差错误
- EM_Warn062 = 0x3E, //0x3E:C臂电机位置超差错误
- EM_Warn063 = 0x3F, //0x3F:推杆电机位置超差错误
- EM_Warn064 = 0x40, //0x40:压迫器高度过低时插入放大架错误,由0xF6解除
- EM_Warn246 = 0xF6, //0xF6:解除EM_Warn064
- EM_Warn065 = 0x41, //0x41:压迫器电机驱动器错误
- EM_Warn066 = 0x42, //0x42:推杆电机驱动器错误
- EM_Warn067 = 0x43, //0x43:角度校准板失效错误
- EM_Warn069 = 0x45, //0x45:开机检测到压力报错,由0xF9解除
- EM_Warn249 = 0xF9, //0xF9:解除EM_Warn069
- EM_Warn070 = 0x46, //0x46:AEC主曝光MAS小于最小值,由0x48解除
- EM_Warn071 = 0x47, //0x47:AEC主曝光MAS大于最大值,由0x48解除
- EM_Warn072 = 0x48, //0x48:解除EM_Warn071
- EM_Warn073 = 0x49, //0x49:滤线栅自检不通过,由0x50解除
- EM_Warn080 = 0x50, //0x50:解除EM_Warn073
- EM_Warn081 = 0x51, //0x51:滤过挡片自检不通过
- EM_Warn082 = 0x52, //0x52:热容量已满,停止曝光,由0x53解除
- EM_Warn083 = 0x53, //0x53:解除EM_Warn082
- EM_Warn128 = 0x80, //0x80:运动板问询通信异常
- EM_Warn129 = 0x81, //0x81:曝光板问询通信异常
- EM_Warn130 = 0x82, //0x82:压力采集板问询通信异常
- EM_Warn131 = 0x83, //0x83:X光剂量检测板问询通信异常
- EM_Warn132 = 0x84, //0x84:阳极控制板问询通信异常
- EM_Warn133 = 0x85 //0x85:显示板通信异常
- };
- #define SINOmini_ExpStatus 0x03 //曝光状态
- enum SINOmini_ExpStatusType {
- EM_ExpStatus001 = 0x01, //0x01:进入曝光状态 PR1
- EM_ExpStatus002 = 0x02, //0x02:曝光预热中 PR2
- EM_ExpStatus003 = 0x03, //0x03:进入AEC模式预曝光阶段状态
- EM_ExpStatus004 = 0x04, //0x04:AEC模式预曝光结束状态
- EM_ExpStatus005 = 0x05, //0x05:正式曝光阶段高压启动完毕发出X射线
- EM_ExpStatus006 = 0x06, //0x06:曝光结束
- EM_ExpStatus238 = 0xEE, //0xEE:曝光板等待系统冷却,不能进行曝光
- EM_ExpStatus239 = 0xEF, //0xEF:曝光板等待系统冷却完毕
- EM_ExpStatus254 = 0xFE, //0xFE:正在曝光或曝光条件不充足
- EM_ExpStatus255 = 0xFF, //0xFF:系统曝光条件充足
- };
- #define SINOmini_DevStatus 0x04 //设备状态控制
- enum SINOmini_DevStatusType {
- EM_DevStatus001 = 0x01, //0x01:开启串口后的初始化
- EM_DevStatus002 = 0x02, //0x02:SyncTimestamp 时间戳
- EM_DevStatus003 = 0x03, //0x03:ExpEnabled 曝光使能开启
- EM_DevStatus004 = 0x04, //0x04:ExpEnabled 曝光使能关闭
- };
- #define SINOmini_cArmAngle 0x06 //c-arm angle
- #define SINOmini_GenAGD 0x07 //Generator AGD
- #define SINOmini_WorkMode 0x08 //WORK_MODE
- #define SINOmini_TubeHeat 0x0B //球管热容量
- #define SINOmini_RackAct 0x2A //机架功能
- enum SINOmini_RackACTType {
- EM_RackACT045 = 0x2D, //0x2D:一键归零
- EM_RackACT046 = 0x2E, //0x2E:压迫板自动释放
- EM_RackACT049 = 0x31, //0x31:在 Get generator warning info, type = 0x22 之后出现
- EM_RackACT050 = 0x32, //0x32:Filter
- EM_RackACT053 = 0x35, //0x35:?
- EM_RackACT054 = 0x36, //0x36:SendUnixTime
- EM_RackACT055 = 0x37, //0x37:ENTER_STUDY_QUERY
- };
- struct SINOminiCommand //as same as Exposure Parameter via query
- {
- char Command[SINOmini_Com_NormalLen] = {0};
- string * pUnCommand = nullptr;
- SINOminiCommand()
- {
- Command[0] = SINOmini_STX;
- }
- SINOminiCommand(const char *CMDd,int lengh = 0)
- {
- if (lengh > 0 && lengh < SINOmini_Com_NormalLen)
- {
- memcpy(Command, CMDd, (SINOmini_Com_NormalLen - 1) * sizeof(char));
- }
- else
- {
- pUnCommand = new string(CMDd, lengh);
- }
- }
- SINOminiCommand(char CMDd,char type = 0x00)
- {
- Command[0] = SINOmini_STX;
- Command[1] = CMDd;
- Command[2] = type;
- }
- ~SINOminiCommand()
- {
- if (pUnCommand)
- {
- delete pUnCommand;
- pUnCommand = nullptr;
- }
- }
- void SetAt(int pos,char value)
- {
- --pos;
- if (pos >= 0 && pos < SINOmini_Com_NormalLen-1)
- {
- Command[pos] = value;
- }
- }
- char GetAt(int pos)
- {
- --pos;
- if (pos >= 0 && pos <= SINOmini_Com_NormalLen - 1)
- {
- return Command[pos];
- }
- return Command[SINOmini_Com_NormalLen - 1];
- }
- const char* Get_Hex_Log()
- {
- char temp[5] = {0};
- string log;
- if (pUnCommand)
- {
- for (int i = 0; i < pUnCommand->length(); i++)
- {
- if (i == pUnCommand->length() - 1)
- {
- sprintf_s(temp, 4, "%02x", (UINT8)(pUnCommand->at(i)));
- }
- else
- sprintf_s(temp, 4, "%02x ", (UINT8)(pUnCommand->at(i)));
- log += temp;
- }
- }
- else
- for (int i = 0; i < SINOmini_Com_NormalLen - 1; i++)
- {
- if (i == SINOmini_Com_NormalLen - 2)
- {
- 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))
- {
- UINT8 Checksum = fun(Command, SINOmini_Com_NormalLen - 2);
- Command[10] = Checksum;
- }
- operator const char* () const { return Command; }
- };
|