SINOminiCommandDef.h 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. #pragma once
  2. #define SINOmini_Com_NormalLen 12
  3. //*************************指令格式*************************************************
  4. //指令头尾
  5. #define SINOmini_STX 0xF0 //模块头
  6. //*************************指令ID*************************************************
  7. #define SINOmini_Parameter 0x01 //机架参数设置
  8. enum SINOmini_ParamType {
  9. EM_Param000 = 0x00, //0x00:?
  10. EM_Param001 = 0x01, //0x01:?
  11. EM_Param002 = 0x02, //0x02:?
  12. };
  13. #define SINOmini_WarningInfo 0x02 //告警信息
  14. enum SINOmini_WarnType {
  15. EM_Warn001 = 0x01, //0x01:开机高压错误
  16. EM_Warn002 = 0x02, //0x02:曝光控制板运行时高压错误
  17. EM_Warn003 = 0x03, //0x03:开机时灯丝错误
  18. EM_Warn004 = 0x04, //0x04:曝光时灯丝错误
  19. EM_Warn005 = 0x05, //0x05:曝光板读存储器错误
  20. EM_Warn006 = 0x06, //0x06:球管过温保护错误,由0x1F解除
  21. EM_Warn007 = 0x07, //0x07:球管运行绕阻线断开错误
  22. EM_Warn008 = 0x08, //0x08:阳极启动信号异常
  23. EM_Warn011 = 0x0B, //0x0B:曝光时高压电源未产生高压,由0xE4解除
  24. EM_Warn228 = 0xE4, //0xE4:解除EM_Warn011
  25. EM_Warn013 = 0x0D, //0x0D:球管打火计数错误
  26. EM_Warn014 = 0x0E, //0x0E:手闸激活没有及时释放,由0xE9解除
  27. EM_Warn233 = 0xE9, //0xE9:解除EM_Warn014
  28. EM_Warn015 = 0x0F, //0x0F:曝光时提前松开手闸错误,由0xEA解除
  29. EM_Warn234 = 0xEA, //0xEA:解除EM_Warn015
  30. EM_Warn016 = 0x10, //0x10:自动测试模式时,没有插短接头错误,由0xE3解除
  31. EM_Warn227 = 0xE3, //0xE3:解除EM_Warn016
  32. EM_Warn017 = 0x11, //0x11:曝光时管电流过高错误
  33. EM_Warn018 = 0x12, //0x12:曝光时管电流过低错误
  34. EM_Warn019 = 0x13, //0x13:灯丝板输入功率不正常
  35. EM_Warn020 = 0x14, //0x14:探测器反馈错误
  36. EM_Warn021 = 0x15, //0x15:曝光时滤线栅抖动错误
  37. EM_Warn025 = 0x19, //0x19:急停开关按下,由0x18解除
  38. EM_Warn024 = 0x18, //0x18:解除EM_Warn025
  39. EM_Warn027 = 0x1B, //0x1B:二次限位开关按下 ,由0x1A解除
  40. EM_Warn026 = 0x1A, //0x1A:解除EM_Warn027
  41. EM_Warn029 = 0x1D, //0x1D:在AAEC模式下,压迫器压力小于30N不可以曝光,由0x1C解除
  42. EM_Warn028 = 0x1C, //0x1C:解除EM_Warn029
  43. EM_Warn031 = 0x1F, //0x1F:系统在运动中(C臂旋转,C臂升降,压迫升降),由0x1E解除
  44. EM_Warn030 = 0x1E, //0x1E:解除EM_Warn031
  45. EM_Warn033 = 0x21, //0x21:屏蔽门打开,由0x20解除
  46. EM_Warn032 = 0x20, //0x20:解除EM_Warn033
  47. EM_Warn035 = 0x23, //0x23:校准开关已打开,由0x22解除
  48. EM_Warn034 = 0x22, //0x22:解除EM_Warn035
  49. EM_Warn037 = 0x25, //0x25:压迫器释放按钮在开机时按下错误,由0x24解除
  50. EM_Warn036 = 0x24, //0x24:解除EM_Warn037
  51. EM_Warn048 = 0x30, //0x30:C臂旋转方向控制引脚失效
  52. EM_Warn049 = 0x31, //0x31:压迫器升降方向控制引脚失效
  53. EM_Warn050 = 0x32, //0x32:系统自检未完成时脚踏开关被踩下,由0xED解除
  54. EM_Warn237 = 0xED, //0xED:解除EM_Warn050
  55. EM_Warn051 = 0x33, //0x33:系统自检未完成时C臂旋转或升降按键被按下,由0xEE解除
  56. EM_Warn238 = 0xEE, //0xEE:解除EM_Warn051
  57. EM_Warn052 = 0x34, //0x34:运动控制板自检未通过错误
  58. EM_Warn053 = 0x35, //0x35:滤线栅控制电路错误
  59. EM_Warn054 = 0x36, //0x36:急停开关按下时运动控制键被按下,由0xF1解除
  60. EM_Warn241 = 0xF1, //0xF1:解除EM_Warn054
  61. EM_Warn055 = 0x37, //0x37:滤片切换超时错误
  62. EM_Warn056 = 0x38, //0x38:运动板SysTick时钟初始化不通过错误
  63. EM_Warn057 = 0x39, //0x39:运动板存储器读取错误
  64. EM_Warn058 = 0x3A, //0x3A:运动板存储器写数据失败错误
  65. EM_Warn059 = 0x3B, //0x3B:C臂电机驱动器错误
  66. EM_Warn060 = 0x3C, //0x3C:压力传感器故障
  67. EM_Warn061 = 0x3D, //0x3D:压迫器电机位置超差错误
  68. EM_Warn062 = 0x3E, //0x3E:C臂电机位置超差错误
  69. EM_Warn063 = 0x3F, //0x3F:推杆电机位置超差错误
  70. EM_Warn064 = 0x40, //0x40:压迫器高度过低时插入放大架错误,由0xF6解除
  71. EM_Warn246 = 0xF6, //0xF6:解除EM_Warn064
  72. EM_Warn065 = 0x41, //0x41:压迫器电机驱动器错误
  73. EM_Warn066 = 0x42, //0x42:推杆电机驱动器错误
  74. EM_Warn067 = 0x43, //0x43:角度校准板失效错误
  75. EM_Warn069 = 0x45, //0x45:开机检测到压力报错,由0xF9解除
  76. EM_Warn249 = 0xF9, //0xF9:解除EM_Warn069
  77. EM_Warn070 = 0x46, //0x46:AEC主曝光MAS小于最小值,由0x48解除
  78. EM_Warn071 = 0x47, //0x47:AEC主曝光MAS大于最大值,由0x48解除
  79. EM_Warn072 = 0x48, //0x48:解除EM_Warn071
  80. EM_Warn073 = 0x49, //0x49:滤线栅自检不通过,由0x50解除
  81. EM_Warn080 = 0x50, //0x50:解除EM_Warn073
  82. EM_Warn081 = 0x51, //0x51:滤过挡片自检不通过
  83. EM_Warn082 = 0x52, //0x52:热容量已满,停止曝光,由0x53解除
  84. EM_Warn083 = 0x53, //0x53:解除EM_Warn082
  85. EM_Warn128 = 0x80, //0x80:运动板问询通信异常
  86. EM_Warn129 = 0x81, //0x81:曝光板问询通信异常
  87. EM_Warn130 = 0x82, //0x82:压力采集板问询通信异常
  88. EM_Warn131 = 0x83, //0x83:X光剂量检测板问询通信异常
  89. EM_Warn132 = 0x84, //0x84:阳极控制板问询通信异常
  90. EM_Warn133 = 0x85 //0x85:显示板通信异常
  91. };
  92. #define SINOmini_ExpStatus 0x03 //曝光状态
  93. enum SINOmini_ExpStatusType {
  94. EM_ExpStatus001 = 0x01, //0x01:进入曝光状态 PR1
  95. EM_ExpStatus002 = 0x02, //0x02:曝光预热中 PR2
  96. EM_ExpStatus003 = 0x03, //0x03:进入AEC模式预曝光阶段状态
  97. EM_ExpStatus004 = 0x04, //0x04:AEC模式预曝光结束状态
  98. EM_ExpStatus005 = 0x05, //0x05:正式曝光阶段高压启动完毕发出X射线
  99. EM_ExpStatus006 = 0x06, //0x06:曝光结束
  100. EM_ExpStatus238 = 0xEE, //0xEE:曝光板等待系统冷却,不能进行曝光
  101. EM_ExpStatus239 = 0xEF, //0xEF:曝光板等待系统冷却完毕
  102. EM_ExpStatus254 = 0xFE, //0xFE:正在曝光或曝光条件不充足
  103. EM_ExpStatus255 = 0xFF, //0xFF:系统曝光条件充足
  104. };
  105. #define SINOmini_DevStatus 0x04 //设备状态控制
  106. enum SINOmini_DevStatusType {
  107. EM_DevStatus001 = 0x01, //0x01:开启串口后的初始化
  108. EM_DevStatus002 = 0x02, //0x02:SyncTimestamp 时间戳
  109. EM_DevStatus003 = 0x03, //0x03:ExpEnabled 曝光使能开启
  110. EM_DevStatus004 = 0x04, //0x04:ExpEnabled 曝光使能关闭
  111. };
  112. #define SINOmini_cArmAngle 0x06 //c-arm angle
  113. #define SINOmini_GenAGD 0x07 //Generator AGD
  114. #define SINOmini_WorkMode 0x08 //WORK_MODE
  115. #define SINOmini_TubeHeat 0x0B //球管热容量
  116. #define SINOmini_RackAct 0x2A //机架功能
  117. enum SINOmini_RackACTType {
  118. EM_RackACT045 = 0x2D, //0x2D:一键归零
  119. EM_RackACT046 = 0x2E, //0x2E:压迫板自动释放
  120. EM_RackACT049 = 0x31, //0x31:在 Get generator warning info, type = 0x22 之后出现
  121. EM_RackACT050 = 0x32, //0x32:Filter
  122. EM_RackACT053 = 0x35, //0x35:?
  123. EM_RackACT054 = 0x36, //0x36:SendUnixTime
  124. EM_RackACT055 = 0x37, //0x37:ENTER_STUDY_QUERY
  125. };
  126. struct SINOminiCommand //as same as Exposure Parameter via query
  127. {
  128. char Command[SINOmini_Com_NormalLen] = {0};
  129. string * pUnCommand = nullptr;
  130. SINOminiCommand()
  131. {
  132. Command[0] = SINOmini_STX;
  133. }
  134. SINOminiCommand(const char *CMDd,int lengh = 0)
  135. {
  136. if (lengh > 0 && lengh < SINOmini_Com_NormalLen)
  137. {
  138. memcpy(Command, CMDd, (SINOmini_Com_NormalLen - 1) * sizeof(char));
  139. }
  140. else
  141. {
  142. pUnCommand = new string(CMDd, lengh);
  143. }
  144. }
  145. SINOminiCommand(char CMDd,char type = 0x00)
  146. {
  147. Command[0] = SINOmini_STX;
  148. Command[1] = CMDd;
  149. Command[2] = type;
  150. }
  151. ~SINOminiCommand()
  152. {
  153. if (pUnCommand)
  154. {
  155. delete pUnCommand;
  156. pUnCommand = nullptr;
  157. }
  158. }
  159. void SetAt(int pos,char value)
  160. {
  161. --pos;
  162. if (pos >= 0 && pos < SINOmini_Com_NormalLen-1)
  163. {
  164. Command[pos] = value;
  165. }
  166. }
  167. char GetAt(int pos)
  168. {
  169. --pos;
  170. if (pos >= 0 && pos <= SINOmini_Com_NormalLen - 1)
  171. {
  172. return Command[pos];
  173. }
  174. return Command[SINOmini_Com_NormalLen - 1];
  175. }
  176. const char* Get_Hex_Log()
  177. {
  178. char temp[5] = {0};
  179. string log;
  180. if (pUnCommand)
  181. {
  182. for (int i = 0; i < pUnCommand->length(); i++)
  183. {
  184. if (i == pUnCommand->length() - 1)
  185. {
  186. sprintf_s(temp, 4, "%02x", (UINT8)(pUnCommand->at(i)));
  187. }
  188. else
  189. sprintf_s(temp, 4, "%02x ", (UINT8)(pUnCommand->at(i)));
  190. log += temp;
  191. }
  192. }
  193. else
  194. for (int i = 0; i < SINOmini_Com_NormalLen - 1; i++)
  195. {
  196. if (i == SINOmini_Com_NormalLen - 2)
  197. {
  198. sprintf_s(temp, 4, "%02x", (UINT8)Command[i]);
  199. }
  200. else
  201. sprintf_s(temp, 4, "%02x ", (UINT8)Command[i]);
  202. log += temp;
  203. }
  204. return log.c_str();
  205. }
  206. void SetCRC(char (*fun)(char* cmdData, int size))
  207. {
  208. UINT8 Checksum = fun(Command, SINOmini_Com_NormalLen - 2);
  209. Command[10] = Checksum;
  210. }
  211. operator const char* () const { return Command; }
  212. };