SINOCommandDef.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. #pragma once
  2. #define SINO_Com_NormalLen 30
  3. //*************************设备状态*************************************************
  4. typedef enum _Ccos_SINO_Status
  5. {
  6. SINO_STATUS_PowerOn = 1,//开机状态 对应 GENERATOR_STATUS_INIT
  7. SINO_STATUS_SysCooling = 2,//准备状态 对应 GENERATOR_STATUS_SLEEP
  8. SINO_STATUS_Standby = 4,//等待曝光状态 对应 GENERATOR_STATUS_STANDBY
  9. SINO_STATUS_EXP = 5,//曝光状态 对应 GENERATOR_STATUS_EXP
  10. SINO_STATUS_Error = 6,//系统报警状态 对应 GENERATOR_STATUS_ERROR
  11. }SINO_STATUS;
  12. //*************************指令格式*************************************************
  13. //指令头尾
  14. #define SINO_WS_STX 0xA5 //模块头
  15. #define SINO_WS_ETX 0x5A //模块尾
  16. #define SINO_MU_STX 0xCF //设备头
  17. #define SINO_MU_ETX 0xFC //设备尾
  18. //发送
  19. #define SINO_TYPE_SEND 0x00 //主动发送的指令
  20. #define SINO_TYPE_BACK 0x01 //指令设置成功后,返回的数据,需要对方返回确认指令
  21. #define SINO_TYPE_CONFIRM 0x02 //确认指令,不需要反馈
  22. //应答状态
  23. #define SINO_CONFIRM_OK 0x00 //数据成功接收并设置
  24. #define SINO_CONFIRM_FAIL 0x01 //数据不正确,未成功设置
  25. //*************************指令ID*************************************************
  26. //WS->MU
  27. #define SINO_DataQuery 0x06 //数据查询命令
  28. enum SINO_QueryType{
  29. EM_Query_STATUS = 0x01, //请求MU发送当前系统状态信息参数
  30. EM_Query_LASTEXPOSURE = 0x02, //请求MU发送本次曝光的曝光参数
  31. EM_Query_READY = 0x03, //WS反馈当前WS状态 READY,可以进行曝光
  32. EM_Query_NOREADY = 0x04, //WS反馈当前WS状态 NOT READY,不可以进行曝光
  33. };
  34. #define SINO_SetMASPreEXP 0x09 //AEC/OpDose模式下,完成预曝光后WS需反馈此值
  35. #define SINO_StatusQuery 0x30 //状态查询
  36. #define SINO_SetPatam 0x31 //配置参数
  37. #define SINO_ComInquiry 0xA0 //通信问询
  38. enum SINO_ComInquiryType {
  39. EM_ComInquiry_PowerOn = 0x01, //系统上电通信问询
  40. EM_ComInquiry_handshake = 0x02, //空闲时通信握手问询
  41. };
  42. //MU->WS
  43. #define SINO_RackPosition 0x01 //机架位置
  44. #define SINO_DataFeedback 0x07 //MU反馈WS数据
  45. enum SINO_FilterType {
  46. EM_Mo_Filtration = 0x01, //系统上电通信问询
  47. EM_Rh_Filtration = 0x02, //空闲时通信握手问询
  48. };
  49. #define SINO_PostFeedback 0x08 //MU曝光完成反馈
  50. #define SINO_SystemStatus 0x0A //系统状态
  51. enum SINO_SysStatusType {
  52. EM_SysStatus001 = 0x01, //C臂正在做旋转运动
  53. EM_SysStatus002 = 0x02, //C臂旋转运动停止
  54. EM_SysStatus003 = 0x03, //C臂正在做升降运动
  55. EM_SysStatus004 = 0x04, //C臂升降运动停止
  56. EM_SysStatus005 = 0x05, //急停开关按下
  57. EM_SysStatus006 = 0x06, //急停开关弹起
  58. EM_SysStatus016 = 0x10, //压迫器正在做升降运动
  59. EM_SysStatus017 = 0x11, //压迫器升降运动停止
  60. EM_SysStatus018 = 0x12, //达到最佳压力停止
  61. EM_SysStatus019 = 0x13, //解除达到最佳压力停止
  62. EM_SysStatus020 = 0x14, //压迫器上升
  63. EM_SysStatus021 = 0x15, //压迫器下降
  64. EM_SysStatus022 = 0x16, //压迫器停止
  65. EM_SysStatus032 = 0x20, //准直器滤过正在切换
  66. EM_SysStatus033 = 0x21, //准直器滤过切换完毕
  67. EM_SysStatus034 = 0x22, //准直器摄野范围正在调整
  68. EM_SysStatus035 = 0x23, //准直器摄野范围调整完毕
  69. EM_SysStatus036 = 0x24, //摄野灯点亮
  70. EM_SysStatus037 = 0x25, //摄野灯熄灭
  71. EM_SysStatus064 = 0x40, //允许曝光板开启曝光功能
  72. EM_SysStatus065 = 0x41, //禁止曝光板开启曝光功能
  73. EM_SysStatus066 = 0x42, //采集工作站启动曝光按钮
  74. EM_SysStatus067 = 0x43, //曝光手闸按下
  75. EM_SysStatus068 = 0x44, //系统曝光预热状态
  76. EM_SysStatus070 = 0x46, //滤线栅同步命令(预留)
  77. EM_SysStatus071 = 0x47, //AEC/Opdose模式开启高压预曝光
  78. EM_SysStatus073 = 0x49, //AEC/Opdose模式高压预曝光结束
  79. EM_SysStatus075 = 0x4B, //开启高压,系统开始正常曝光
  80. EM_SysStatus077 = 0x4D, //曝光进程中断
  81. EM_SysStatus078 = 0x4E, //曝光完成开始冷却
  82. EM_SysStatus079 = 0x4F, //系统冷却完成
  83. EM_SysStatus080 = 0x50, //屏蔽房间门处于闭合状态
  84. EM_SysStatus081 = 0x51, //屏蔽房间门处于敞开状态
  85. EM_SysStatus160 = 0xA0, //MU初始化中
  86. EM_SysStatus161 = 0xA1, //MU初始化完成
  87. EM_SysStatus162 = 0xA2, //MU各个状态 READY,可以进行曝光
  88. EM_SysStatus163 = 0xA3, //MU 各状态NOT READY,不可以进行曝光
  89. };
  90. #define SINO_SystemWarning 0x10 //报警信息
  91. enum SINO_SysWarnType {
  92. EM_SysWarn001 = 0x01, //球管温度过高报警
  93. EM_SysWarn002 = 0x02, //高压发生器高压输出未允许报警
  94. EM_SysWarn003 = 0x03, //球管高速启动故障报警
  95. EM_SysWarn004 = 0x04, //高压发生器产生高压电弧故障报警
  96. EM_SysWarn005 = 0x05, //无效曝光参数设置导致高压输出大于5KW报警
  97. EM_SysWarn006 = 0x06, //AEC曝光控制超时报警
  98. EM_SysWarn007 = 0x07, //高压发生器反馈的mAs超出设置值报警
  99. EM_SysWarn008 = 0x08, //曝光周期中间歇时间未完成就进行曝光报警
  100. EM_SysWarn009 = 0x09, //高压发生器输出KV大于42765V且时间超过1ms报警
  101. EM_SysWarn010 = 0x0A, //高压发生器输出mA大于213.828 mA且时间超过100ms报警
  102. EM_SysWarn011 = 0x0B, //高压发生器输出KV或mA大于设置值的%25导致报警
  103. EM_SysWarn012 = 0x0C, //高压发生器反馈球管灯丝开路报警
  104. EM_SysWarn013 = 0x0D, //高压发生器反馈球管过流报警
  105. EM_SysWarn014 = 0x0E, //高压发生器AD/DC输入电压过低报警
  106. EM_SysWarn015 = 0x0F, //高压发生器强制超出曝光任务周期报警
  107. EM_SysWarn016 = 0x10, //高压发生器管电压、管电流检测报警
  108. EM_SysWarn017 = 0x11, //高压发生器强制恢复过压异常报警
  109. EM_SysWarn018 = 0x12, //解除高压发生器报警
  110. EM_SysWarn019 = 0x13, //曝光按钮短路或者未释放报警
  111. EM_SysWarn020 = 0x14, //解除手闸短路报警命令
  112. EM_SysWarn021 = 0x15, //曝光没有到设定时间提前松开手闸报警
  113. EM_SysWarn022 = 0x16, //消除提前松开手闸报警
  114. EM_SysWarn023 = 0x17, //自动测试模式时,检测到没有短接跳线报警
  115. EM_SysWarn024 = 0x18, //解除自动测试跳线帽未短接报警
  116. EM_SysWarn025 = 0x19, //曝光时,未收到运动板发来的滤线栅抖动信号
  117. EM_SysWarn032 = 0x20, //高压通信超时
  118. EM_SysWarn048 = 0x30, //运动控制板自检不通过报警
  119. EM_SysWarn049 = 0x31, //解除运动控制板自检不通过报警
  120. EM_SysWarn052 = 0x34, //运动控制板存储器读写数据失败报警
  121. EM_SysWarn054 = 0x36, //解除运动控制板存储器读写数据失败报警
  122. EM_SysWarn055 = 0x37, //急停开关按下时,运动控制键被按下报警
  123. EM_SysWarn056 = 0x38, //解除急停开关按下时,运动控制键被按下错误
  124. EM_SysWarn057 = 0x39, //脚踏开关自检未完成时被踩下报警
  125. EM_SysWarn058 = 0x3A, //解除脚踏开关自检未完成时被踩下报警
  126. EM_SysWarn059 = 0x3B, //旋转运动二次限位保护开关触发报警
  127. EM_SysWarn060 = 0x3C, //旋转运动二次限位保护开关触发报警解除
  128. EM_SysWarn061 = 0x3D, //C臂旋转方向控制引脚失效报警
  129. EM_SysWarn062 = 0x3E, //解除C臂旋转方向控制引脚失效报警
  130. EM_SysWarn063 = 0x3F, //C臂旋转或者升降按键在自检未完成时按下报警
  131. EM_SysWarn064 = 0x40, //解除C臂旋转或者升降按键在自检未完成时按下报警
  132. EM_SysWarn065 = 0x41, //C臂旋转电机驱动器报警
  133. EM_SysWarn066 = 0x42, //解除C臂旋转电机驱动器报警
  134. EM_SysWarn067 = 0x43, //C臂电机位置超差报警
  135. EM_SysWarn068 = 0x44, //解除C臂电机位置超差报警
  136. EM_SysWarn069 = 0x45, //升降运动二次限位保护开关触发报警
  137. EM_SysWarn070 = 0x46, //升降运动二次限位保护开关触发报警解除
  138. EM_SysWarn071 = 0x47, //升降电机方向控制引脚失效报警
  139. EM_SysWarn072 = 0x48, //解除升降电机方向控制引脚失效报警
  140. EM_SysWarn073 = 0x49, //机架升降电机驱动器报警
  141. EM_SysWarn074 = 0x4A, //解除机架升降电机驱动器报警
  142. EM_SysWarn075 = 0x4B, //升降电机位置超差报警
  143. EM_SysWarn076 = 0x4C, //解除升降电机位置超差报警
  144. EM_SysWarn077 = 0x4D, //角度校准板失效报警
  145. EM_SysWarn078 = 0x4E, //解除角度校准板失效报警
  146. EM_SysWarn096 = 0x60, //压迫器运动二次限位保护开关触发
  147. EM_SysWarn097 = 0x61, //压迫器运动二次限位保护开关触发解除
  148. EM_SysWarn098 = 0x62, //压迫器方向控制引脚失效
  149. EM_SysWarn099 = 0x63, //解除压迫器方向控制引脚失效
  150. EM_SysWarn100 = 0x64, //压迫器升降电机驱动器报警
  151. EM_SysWarn101 = 0x65, //解除压迫器升降电机驱动器报警
  152. EM_SysWarn102 = 0x66, //开机检测到压力报错
  153. EM_SysWarn103 = 0x67, //解除开机检测到压力报错
  154. EM_SysWarn104 = 0x68, //压力传感器故障报警
  155. EM_SysWarn105 = 0x69, //解除压力传感器故障报警
  156. EM_SysWarn106 = 0x6A, //压迫器电机位置超差报警
  157. EM_SysWarn107 = 0x6B, //解除压迫器电机位置超差报警
  158. EM_SysWarn108 = 0x6C, //压迫器高度过低时插入放大架报警
  159. EM_SysWarn109 = 0x6D, //解除压迫器高度过低时插入放大架报警
  160. EM_SysWarn110 = 0x6E, //远端压迫器自动释放按钮被开机时按下报警
  161. EM_SysWarn111 = 0x6F, //解除远端压迫器自动释放按钮被开机时按下报警
  162. EM_SysWarn112 = 0x70, //压力超限报警
  163. EM_SysWarn113 = 0x71, //解除压力超限报警
  164. EM_SysWarn128 = 0x80, //滤线栅控制电路错误
  165. EM_SysWarn129 = 0x81, //解除滤线栅电路错误
  166. EM_SysWarn152 = 0x98, //准直器滤片切换超时报警
  167. EM_SysWarn153 = 0x99, //解除准直器滤片切换超时报警
  168. EM_SysWarn154 = 0x9A, //准直器摄野调节超时报警
  169. EM_SysWarn155 = 0x9B, //解除准直器摄野调节超时报警
  170. EM_SysWarn156 = 0x9C, //准直器存储器读数据错误报警
  171. EM_SysWarn157 = 0x9D, //解除准直器存储器读数据错误报警
  172. EM_SysWarn161 = 0xA1, //曝光控制板通信异常
  173. EM_SysWarn162 = 0xA2, //压迫器控制板通信异常
  174. EM_SysWarn163 = 0xA3, //准直器控制板通信异常
  175. EM_SysWarn165 = 0xA5, //底座显示板通信异常
  176. EM_SysWarn166 = 0xA6, //远端控制盒通信异常
  177. EM_SysWarn168 = 0xA8, //解除通信报警
  178. };
  179. //WS<->MU
  180. #define SINO_Compressor 0x02 //压迫器
  181. enum SINO_CompressionPlateType{
  182. EM_PlateType1 = 0x01, //24x30 cm 压迫板
  183. EM_PlateType2 = 0x02, //1.5倍放大架压迫板
  184. EM_PlateType3 = 0x03, //9x9cm点压板
  185. };
  186. enum SINO_AutoRelSwitchType {
  187. EM_AutoRelSwitch_Off = 0x00, //关闭自动释放功能
  188. EM_AutoRelSwitch_On = 0x01, //开启自动释放功能
  189. };
  190. #define SINO_Collimator 0x03 //准直器
  191. #define SINO_ExpoParam 0x04 //曝光参数
  192. enum SINO_FocusType{
  193. EM_Focus_Large = 0x01, //大焦点
  194. EM_Focus_Small = 0x02, //小焦点
  195. };
  196. enum SINO_EXPMode{
  197. EM_EXPMode_MAN = 0x01, //MAN曝光模式
  198. EM_EXPMode_AEC = 0x02, //AEC曝光模式
  199. EM_EXPMode_Opdose = 0x03, //Opdose曝光模式
  200. };
  201. #define SINO_TubeHeat 0x05 //球管热容量状态
  202. enum SINO_TubeHeatState{
  203. EM_THState_1 = 0x01, //球管热容量处于低温阶段
  204. EM_THState_2 = 0x02, //球管热容量处于正常温度阶段
  205. EM_THState_3 = 0x03, //球管热容量处于正常偏高温阶段
  206. EM_THState_4 = 0x04, //球管热容量处于中温阶段
  207. EM_THState_5 = 0x05, //球管热容量处于高温阶段
  208. EM_THState_6 = 0x06, //当前球管热容量超出最大允许热容量,禁止曝光
  209. };
  210. struct SINOCommand //as same as Exposure Parameter via query
  211. {
  212. char Command[SINO_Com_NormalLen] = {0};
  213. SINOCommand()
  214. {
  215. Command[0] = SINO_WS_STX;
  216. Command[3] = 7;
  217. Command[6] = SINO_WS_ETX;
  218. }
  219. SINOCommand(const char *CMDd)
  220. {
  221. int lengh = CMDd[3];
  222. if (lengh < SINO_Com_NormalLen)
  223. {
  224. memcpy(Command, CMDd, lengh);
  225. }
  226. else
  227. {
  228. memcpy(Command, CMDd, SINO_Com_NormalLen-1);
  229. }
  230. }
  231. SINOCommand(const char* CMDd,int lengh)
  232. {
  233. if (lengh < SINO_Com_NormalLen)
  234. {
  235. memcpy(Command, CMDd, lengh);
  236. }
  237. }
  238. SINOCommand(char CMDd,char type,int size)
  239. {
  240. if (size >= 6)
  241. {
  242. Command[0] = SINO_WS_STX;
  243. Command[1] = type;
  244. Command[2] = CMDd;
  245. Command[3] = size;
  246. Command[size - 1] = SINO_WS_ETX;
  247. }
  248. }
  249. void SetAt(int pos,char value)
  250. {
  251. --pos;
  252. if (pos >= 0 && pos <= Command[3] - 1)
  253. {
  254. Command[pos] = value;
  255. }
  256. }
  257. char GetAt(int pos)
  258. {
  259. --pos;
  260. if (pos >= 0 && pos <= Command[3] - 1)
  261. {
  262. return Command[pos];
  263. }
  264. return Command[SINO_Com_NormalLen - 1];
  265. }
  266. const char* Get_Hex_Log()
  267. {
  268. char temp[5] = {0};
  269. string log;
  270. for (int i = 0; i < Command[3]; i++)
  271. {
  272. if (i == Command[3]-1)
  273. {
  274. sprintf_s(temp, 4, "%02x", (UINT8)Command[i]);
  275. }
  276. else
  277. sprintf_s(temp,4,"%02x ", (UINT8)Command[i]);
  278. log += temp;
  279. }
  280. return log.c_str();
  281. }
  282. void SetCRC(char (*fun)(char* cmdData, int size))
  283. {
  284. char Checksum = fun(Command, Command[3]);
  285. Command[Command[3] - 2] = Checksum;
  286. }
  287. operator const char* () const { return Command; }
  288. };