error_code.h 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595
  1. #define MAIN_TEST 1
  2. //#define PROCESS_TEST 1
  3. //#define TIME_TEST 1
  4. //Error_code是错误码的底层通用模块,
  5. //功能:用作故障分析和处理。
  6. //用法:所有的功能接口函数return错误管理类,
  7. //然后上层判断分析错误码,并进行故障处理。
  8. #ifndef TEST_ERROR_ERROR_CODE_H
  9. #define TEST_ERROR_ERROR_CODE_H
  10. #include <string>
  11. #include <string.h>
  12. #include<iostream>
  13. //错误管理类转化为字符串 的前缀,固定长度为58
  14. //这个是由显示格式来确定的,如果要修改格式或者 Error_code长度超过8位,Error_level长度超过2位,折需要重新计算
  15. #define ERROR_NAMAGER_TO_STRING_FRONT_LENGTH 58
  16. //进程加锁的状态,
  17. enum Lock_status
  18. {
  19. UNLOCK = 0,
  20. LOCK = 1,
  21. };
  22. //设备使能状态,
  23. enum Able_status
  24. {
  25. UNABLE = 0,
  26. ENABLE = 1,
  27. };
  28. //数据是否为空
  29. enum Empty_status
  30. {
  31. NON_EMPTY = 0,
  32. EMPTY = 1,
  33. };
  34. //错误码的枚举,用来做故障分析
  35. enum Error_code
  36. {
  37. //成功,没有错误,默认值0
  38. SUCCESS = 0x00000000,
  39. //基本错误码,
  40. ERROR = 0x00000001,//错误
  41. PARTIAL_SUCCESS = 0x00000002,//部分成功
  42. WARNING = 0x00000003,//警告
  43. FAILED = 0x00000004,//失败
  44. NODATA = 0x00000010,//没有数据,传入参数容器内部没有数据时,
  45. INVALID_MESSAGE = 0x00000011, //无效的消息,
  46. PARSE_FAILED = 0x00000012,//解析失败
  47. TASK_TIMEOVER = 0x00000020,//任务超时
  48. RESPONSE_TIMEOUT = 0x00000021,//答复超时
  49. POINTER_IS_NULL = 0x00000101,//空指针
  50. PARAMETER_ERROR = 0x00000102,//参数错误,传入参数不符合规范时,
  51. POINTER_MALLOC_FAIL = 0x00000103,//手动分配内存失败
  52. CLASS_BASE_FUNCTION_CANNOT_USE = 0x00000201,//基类函数不允许使用,必须使用子类的
  53. CONTAINER_IS_TERMINATE = 0x00000301,//容器被终止
  54. // 错误码的规范,
  55. // 错误码是int型,32位,十六进制。
  56. // 例如0x12345678
  57. // 12表示功能模块,例如:laser雷达模块 框架制定
  58. // 34表示文件名称,例如:laser_livox.cpp 框架制定
  59. // 56表示具体的类,例如:class laser_livox 个人制定
  60. // 78表示类的函数,例如:laser_livox::start(); 个人制定
  61. // 注:错误码的制定从1开始,不要从0开始,
  62. // 0用作错误码的基数,用来位运算,来判断错误码的范围。
  63. // laser扫描模块
  64. LASER_ERROR_BASE = 0x01000000,
  65. // laser_base基类
  66. LASER_BASE_ERROR_BASE = 0x01010000,
  67. LASER_TASK_PARAMETER_ERROR = 0x01010001, //雷达基类模块, 任务输入参数错误
  68. LASER_CONNECT_FAILED, //雷达基类模块, 连接失败
  69. LASER_START_FAILED, //雷达基类模块, 开始扫描失败
  70. LASER_CHECK_FAILED, //雷达基类模块, 检查失败
  71. LASER_STATUS_BUSY, //雷达基类模块, 状态正忙
  72. LASER_STATUS_ERROR, //雷达基类模块, 状态错误
  73. LASER_TASK_OVER_TIME, //雷达基类模块, 任务超时
  74. LASER_QUEUE_ERROR, //雷达基类模块, 数据缓存错误
  75. // laser_livox.cpp的错误码
  76. LIVOX_ERROR_BASE = 0x01020000,
  77. LIVOX_START_FAILE, //livox模块,开始扫描失败
  78. LIVOX_TASK_TYPE_ERROR, //livox模块,任务类型错误
  79. lIVOX_CANNOT_PUSH_DATA, //livox模块,不能添加扫描的数据
  80. lIVOX_CHECK_FAILED, //livox模块,检查失败
  81. lIVOX_STATUS_BUSY, //livox模块,状态正忙
  82. lIVOX_STATUS_ERROR, //livox模块,状态错误
  83. //laser_manager 雷达管理模块
  84. LASER_MANAGER_ERROR_BASE = 0x01030000,
  85. LASER_MANAGER_READ_PROTOBUF_ERROR, //雷达管理模块,读取参数错误
  86. LASER_MANAGER_STATUS_BUSY, //雷达管理模块,状态正忙
  87. LASER_MANAGER_STATUS_ERROR, //雷达管理模块,状态错误
  88. LASER_MANAGER_TASK_TYPE_ERROR, //雷达管理模块,任务类型错误
  89. LASER_MANAGER_IS_NOT_READY, //雷达管理模块,不在准备状态
  90. LASER_MANAGER_TASK_OVER_TIME, //雷达管理模块,任务超时
  91. LASER_MANAGER_LASER_INDEX_ERRPR, //雷达管理模块,雷达索引错误,编号错误。
  92. LASER_MANAGER_LASER_INDEX_REPEAT, //雷达管理模块,需要扫描的雷达索引重复,可忽略的错误,提示作用
  93. //livox_driver 雷达livox驱动模块
  94. LIVOX_DRIVER_ERROR_BASE = 0x01040000,
  95. LIVOX_DRIVER_SN_REPEAT, //livox驱动模块, 雷达广播码重复
  96. LIVOX_DRIVER_SN_ERROR, //livox驱动模块, 雷达广播码错误
  97. LIVOX_SKD_INIT_FAILED, //livox驱动模块, livox_sdk初始化失败
  98. LIVOX_DRIVER_NOT_READY, //livox驱动模块, livox没有准备好.
  99. //PLC error code ...
  100. PLC_ERROR_BASE = 0x02010000,
  101. PLC_UNKNOWN_ERROR, //plc未知错误
  102. PLC_EMPTY_TASK, //plc任务为空
  103. PLC_IP_PORT_ERROR, //plc的ip端口错误
  104. PLC_SLAVE_ID_ERROR, //plc的身份id错误
  105. PLC_CONNECTION_FAILED, //PLC连接失败
  106. PLC_READ_FAILED, //plc读取失败
  107. PLC_WRITE_FAILED, //plc写入失败
  108. PLC_NOT_ENOUGH_DATA_ERROR, //PLC没有足够的数据错误
  109. //locate 定位模块,
  110. LOCATER_ERROR_BASE = 0x03000000,
  111. //LASER_MANAGER 定位管理模块
  112. LOCATER_MANAGER_ERROR_BASE = 0x03010000,
  113. LOCATER_MANAGER_READ_PROTOBUF_ERROR, //定位管理模块,读取参数错误
  114. LOCATER_MANAGER_STATUS_BUSY, //定位管理模块,状态正忙
  115. LOCATER_MANAGER_STATUS_ERROR, //定位管理模块,状态错误
  116. LOCATER_MANAGER_TASK_TYPE_ERROR, //定位管理模块,任务类型错误
  117. LOCATER_MANAGER_IS_NOT_READY, //定位管理模块,不在准备状态
  118. LOCATER_MANAGER_CLOUD_MAP_ERROR, //定位管理模块,任务输入点云map的error
  119. LOCATER_MANAGER_TASK_OVER_TIME, //定位管理模块,任务超时
  120. //Locater.cpp error
  121. LOCATER_ALGORITHM_ERROR_BASE = 0x03020000,
  122. LOCATER_TASK_INIT_CLOUD_EMPTY , //定位任务初始化点云为空
  123. LOCATER_TASK_ERROR, //定位任务错误
  124. LOCATER_TASK_INPUT_CLOUD_UNINIT, //定位任务输入点云为空
  125. LOCATER_INPUT_CLOUD_EMPTY, //定位输入点云为空
  126. LOCATER_YOLO_UNINIT, //定位yolo未初始化
  127. LOCATER_POINTSIFT_UNINIT, //定位POINTSIFT未初始化
  128. LOCATER_3DCNN_UNINIT, //定位3DCNN未初始化
  129. LOCATER_INPUT_YOLO_CLOUD_EMPTY, //定位输入yolo点云为空
  130. LOCATER_Y_OUT_RANGE_BY_PLC, //定位超出plc的限制范围
  131. LOCATER_MEASURE_HEIGHT_CLOUD_UNINIT, //定位测量高点云未初始化
  132. LOCATER_MEASURE_HEIGHT_CLOUD_EMPTY, //定位测量高点云为空
  133. LOCATER_INPUT_CLOUD_UNINIT, //定位输入点云未初始化
  134. //point sift from 0x03010100-0x030101FF
  135. LOCATER_SIFT_ERROR_BASE =0x03020100,
  136. LOCATER_SIFT_INIT_FAILED, //定位过滤模块,初始化失败
  137. LOCATER_SIFT_INPUT_CLOUD_UNINIT, //定位过滤模块,输入点云未初始化
  138. LOCATER_SIFT_INPUT_CLOUD_EMPTY, //定位过滤模块,输入点云为空
  139. LOCATER_SIFT_GRID_ERROR, //定位过滤模块,筛选网格错误
  140. LOCATER_SIFT_SELECT_ERROR, //定位过滤模块,筛选选择错误
  141. LOCATER_SIFT_CLOUD_VERY_LITTLE, //定位过滤模块,筛选点云很少
  142. LOCATER_SIFT_CREATE_INPUT_DATA_FAILED, //定位过滤模块,筛选创建输入数据失败
  143. LOCATER_SIFT_PREDICT_FAILED, //定位过滤模块,预测失败
  144. LOCATER_SIFT_PREDICT_TIMEOUT, //定位过滤模块,预测超时
  145. LOCATER_SIFT_PREDICT_NO_WHEEL_POINT, //定位过滤模块,预测结果没有车轮点云
  146. LOCATER_SIFT_PREDICT_NO_CAR_POINT, //定位过滤模块,预测结果没有车身点云
  147. LOCATER_SIFT_FILTE_OBS_FAILED, //定位过滤模块,过滤OBS失败
  148. LOCATER_SIFT_INPUT_BOX_PARAMETER_FAILED, //定位过滤模块,输入范围参数错误
  149. // //yolo
  150. // LOCATER_YOLO_ERROR_BASE =0x03020200,
  151. // LOCATER_YOLO_DETECT_FAILED,
  152. // LOCATER_YOLO_DETECT_NO_TARGET,
  153. // LOCATER_YOLO_PARAMETER_INVALID,
  154. // LOCATER_YOLO_INPUT_CLOUD_UNINIT,
  155. //3dcnn from 0x03010300-0x030103FF
  156. LOCATER_3DCNN_ERROR_BASE =0x03020300,
  157. LOCATER_3DCNN_INIT_FAILED, //定位3DCNN模块,初始化失败
  158. LOCATER_3DCNN_INPUT_CLOUD_UNINIT, //定位3DCNN模块,输入点云未初始化
  159. LOCATER_3DCNN_INPUT_CLOUD_EMPTY, //定位3DCNN模块,输入点云为空
  160. LOCATER_3DCNN_INPUT_CLOUD_MAP_ERROR, //定位3DCNN模块,输入点云的map错误
  161. LOCATER_3DCNN_PCA_OUT_ERROR, //定位3DCNN模块,pca错误
  162. LOCATER_3DCNN_EXTRACT_RECT_ERROR, //定位3DCNN模块,提取矩形错误
  163. LOCATER_3DCNN_RECT_SIZE_ERROR, //定位3DCNN模块,矩形范围错误
  164. LOCATER_3DCNN_PREDICT_FAILED, //定位3DCNN模块,预测失败
  165. LOCATER_3DCNN_VERIFY_RECT_FAILED_3, //定位3DCNN模块,验证矩形失败3
  166. LOCATER_3DCNN_VERIFY_RECT_FAILED_4, //定位3DCNN模块,验证矩形失败4
  167. LOCATER_3DCNN_KMEANS_FAILED, //定位3DCNN模块,k均值失败
  168. LOCATER_3DCNN_IIU_FAILED, //定位3DCNN模块,IIU失败
  169. LOCATER_3DCNN_PCA_OUT_CLOUD_EMPTY, //定位3DCNN模块,pca输出点云为空
  170. //System_manager error from 0x04010000-0x0401FFFF
  171. SYSTEM_READ_PARAMETER_ERROR =0x04010100,
  172. SYSTEM_PARAMETER_ERROR,
  173. SYSTEM_INPUT_TERMINOR_NO_LASERS,
  174. //terminor_command_executor.cpp from 0x04010200-0x040102FF
  175. TERMINOR_NOT_READY =0x04010200,
  176. TERMINOR_INPUT_LASER_NULL,
  177. TERMINOR_NOT_CONTAINS_LASER,
  178. TERMINOR_INPUT_PLC_NULL,
  179. TERMINOR_INPUT_LOCATER_NULL,
  180. TERMINOR_CREATE_WORKING_THREAD_FAILED,
  181. TERMINOR_FORCE_QUIT,
  182. TERMINOR_LASER_TIMEOUT,
  183. TERMINOR_POST_PLC_TIMEOUT,
  184. TERMINOR_CHECK_RESULTS_ERROR,
  185. ////Hardware limit from 0x05010000 - 0x0501ffff
  186. ///railing.cpp from 0x05010100-0x050101ff
  187. HARDWARE_LIMIT_LEFT_RAILING =0x05010100, //左栏杆限制
  188. HARDWARE_LIMIT_RAILING_PARAMETER_ERROR,
  189. HARDWARE_LIMIT_RAILING_ERROR,
  190. HARDWARE_LIMIT_CENTER_X_LEFT,
  191. HARDWARE_LIMIT_CENTER_X_RIGHT,
  192. HARDWARE_LIMIT_CENTER_Y_TOP,
  193. HARDWARE_LIMIT_CENTER_Y_BOTTOM,
  194. HARDWARE_LIMIT_HEIGHT_OUT_RANGE,
  195. HARDWARE_LIMIT_ANGLE_OUT_RANGE,
  196. //termonal_limit from 0x05010200-0x050102ff
  197. HARDWARE_LIMIT_TERMINAL_LEFT_ERROR,
  198. HARDWARE_LIMIT_TERMINAL_RIGHT_ERROR,
  199. HARDWARE_LIMIT_TERMINAL_LR_ERROR,
  200. WANJI_LIDAR_DEVICE_ERROR_BASE =0x06080000, //万集设备模块,错误基类
  201. WANJI_LIDAR_DEVICE_STATUS_BUSY, //万集设备模块,状态正忙
  202. WANJI_LIDAR_DEVICE_STATUS_ERROR, //万集设备模块,状态错误
  203. WANJI_LIDAR_DEVICE_TASK_TYPE_ERROR, //万集设备模块,任务类型错误
  204. WANJI_LIDAR_DEVICE_TASK_OVER_TIME, //万集设备模块,任务超时
  205. WANJI_LIDAR_DEVICE_NO_CLOUD, //万集设备模块,没有点云
  206. //wj_lidar error from 0x06010000-0x0601FFFF
  207. WJ_LIDAR_COMMUNICATION_ERROR_BASE =0x06010000,
  208. WJ_LIDAR_COMMUNICATION_UNINITIALIZED, //万集通信,未初始化
  209. WJ_LIDAR_COMMUNICATION_DISCONNECT, //万集通信,断连
  210. WJ_LIDAR_COMMUNICATION_FAULT, //万集通信,故障
  211. WJ_LIDAR_CONNECT_FAILED,
  212. WJ_LIDAR_UNINITIALIZED,
  213. WJ_LIDAR_READ_FAILED,
  214. WJ_LIDAR_WRITE_FAILED,
  215. WJ_LIDAR_GET_CLOUD_TIMEOUT,
  216. //wj lidar protocol error from 0x06020000-0x0602FFFF
  217. WJ_PROTOCOL_ERROR_BASE =0x06020000,
  218. WJ_PROTOCOL_STATUS_BUSY, //万集解析, 状态正忙
  219. WJ_PROTOCOL_STATUS_ERROR, //系统执行模块, 状态错误
  220. WJ_PROTOCOL_INTEGRITY_ERROR,
  221. WJ_PROTOCOL_PARSE_FAILED,
  222. WJ_PROTOCOL_EMPTY_PACKAGE,
  223. WJ_PROTOCOL_EXCEED_MAX_SIZE,
  224. //wj region detect error from 0x06030000-0x0603FFFF
  225. WJ_REGION_ERROR_BASE = 0x06030000,
  226. WJ_REGION_EMPTY_CLOUD,
  227. WJ_REGION_EMPTY_NO_WHEEL_INFORMATION,
  228. WJ_REGION_RECTANGLE_ANGLE_ERROR,
  229. WJ_REGION_RECTANGLE_SIZE_ERROR,
  230. WJ_REGION_RECTANGLE_SYMMETRY_ERROR,
  231. WJ_REGION_CLUSTER_SIZE_ERROR,
  232. //wj manager error from 0x06040000-0x0604FFFF
  233. WJ_MANAGER_UNINITIALIZED =0x06040000,
  234. WJ_MANAGER_LIDAR_DISCONNECTED,
  235. WJ_MANAGER_PLC_DISCONNECTED,
  236. WJ_MANAGER_EMPTY_CLOUD,
  237. WJ_MANAGER_READ_PROTOBUF_ERROR, //万集管理模块,读取参数错误
  238. WJ_MANAGER_INIT_REPEAT, //万集管理模块,重复初始化
  239. WJ_MANAGER_TASK_TYPE_ERROR, //万集管理模块,任务类型错误
  240. WJ_MANAGER_STATUS_BUSY, //万集管理模块,状态正忙
  241. WJ_MANAGER_STATUS_ERROR, //万集管理模块,状态错误
  242. WJ_MANAGER_LASER_INDEX_ERRPR, //万集管理模块,雷达索引错误,编号错误。
  243. WJ_MANAGER_LASER_INDEX_REPEAT, //万集管理模块,需要扫描的雷达索引重复,可忽略的错误,提示作用
  244. WJ_MANAGER_TASK_OVER_TIME, //万集管理模块,任务超时
  245. WJ_LIDAR_TASK_EMPTY_RESULT=0x06050000,
  246. WJ_LIDAR_TASK_EMPTY_TASK,
  247. WJ_LIDAR_TASK_WRONG_TYPE,
  248. WJ_LIDAR_TASK_INVALID_TASK,
  249. WJ_LIDAR_TASK_MEASURE_FAILED,
  250. //task module, 任务模块 error from 0x10010000-0x1001FFFF
  251. TASK_MODULE_ERROR_BASE = 0x10010000,
  252. TASK_TYPE_IS_UNKNOW,
  253. TASK_NO_RECEIVER,
  254. //Communication module, 通信模块
  255. COMMUNICATION_BASE_ERROR_BASE = 0x11010000,
  256. COMMUNICATION_READ_PROTOBUF_ERROR, //模块,读取参数错误
  257. COMMUNICATION_BIND_ERROR,
  258. COMMUNICATION_CONNECT_ERROR,
  259. COMMUNICATION_ANALYSIS_TIME_OUT, //解析超时,
  260. COMMUNICATION_EXCUTER_IS_BUSY, //处理器正忙, 请稍等
  261. //system module, 系统模块
  262. SYSTEM_EXECUTOR_ERROR_BASE = 0x12010000, //系统执行模块,
  263. SYSTEM_EXECUTOR_PARSE_ERROR, //系统执行模块, 解析消息错误
  264. SYSTEM_EXECUTOR_STATUS_BUSY, //系统执行模块, 状态正忙
  265. SYSTEM_EXECUTOR_STATUS_ERROR, //系统执行模块, 状态错误
  266. SYSTEM_EXECUTOR_CHECK_ERROR, //系统执行模块, 检查错误
  267. LOCATER_MSG_TABLE_NOT_EXIST ,
  268. LOCATER_MSG_RESPONSE_TYPE_ERROR,
  269. LOCATER_MSG_RESPONSE_INFO_ERROR,
  270. LOCATER_MSG_REQUEST_INVALID,
  271. LOCATER_MSG_RESPONSE_HAS_NO_REQUEST,
  272. //Dispatch 调度 模块 错误码
  273. DISPATCH_ERROR_BASE = 0x13000000,
  274. //Dispatch_manager 调度管理模块 错误码
  275. DISPATCH_MANAGER_ERROR_BASE = 0x13010000,
  276. DISPATCH_MANAGER_READ_PROTOBUF_ERROR, //调度管理模块,读取参数错误
  277. DISPATCH_MANAGER_STATUS_BUSY, //调度管理模块,状态正忙
  278. DISPATCH_MANAGER_STATUS_ERROR, //调度管理模块,状态错误
  279. DISPATCH_MANAGER_TASK_TYPE_ERROR, //调度管理模块,任务类型错误
  280. DISPATCH_MANAGER_IS_NOT_READY, //调度管理模块,不在准备状态
  281. DISPATCH_MANAGER_SPACE_LOCK_ERROR, //调度管理模块,空间锁错误
  282. DISPATCH_PROCESS_ERROR_BASE = 0x13020000,
  283. DISPATCH_PROCESS_IS_NOT_READY, //调度流程, 不在准备状态
  284. DISPATCH_PROCESS_DEVICE_TYPE_ERROR, //调度流程, 设备类型错误
  285. DISPATCH_PROCESS_DEVICE_STATUS_ERROR, //调度流程, 设备状态错误
  286. DISPATCH_PROCESS_TASK_STATUS_ERROR, //调度流程, 任务类型错误
  287. DISPATCH_PROCESS_COMMAND_KEY_REPEAT, //调度流程, 唯一码错误
  288. DISPATCH_PROCESS_INIT_ERROR, //调度流程, 初始化错误
  289. DISPATCH_DEVICE_ERROR_BASE = 0x13030000,
  290. DISPATCH_DEVICE_READ_PROTOBUF_ERROR, //调度设备模块,读取参数错误
  291. DISPATCH_DEVICE_STATUS_BUSY, //调度设备模块,状态正忙
  292. DISPATCH_DEVICE_STATUS_ERROR, //调度设备模块,状态错误
  293. DISPATCH_DEVICE_STATUS_DISCONNECT, //调度设备模块,状态断连
  294. DISPATCH_DEVICE_TASK_TYPE_ERROR, //调度设备模块,任务类型错误
  295. DISPATCH_DEVICE_TASK_OVER_TIME, //调度设备模块,任务超时
  296. DISPATCH_DEVICE_TASK_REPEAT, //调度设备模块,任务重复, 任务已经存在
  297. DISPATCH_DEVICE_IS_NOT_READY, //调度设备模块,不在准备状态
  298. DISPATCH_DEVICE_RESPONS_ERROR, //调度设备模块,指令的执行失败
  299. DISPATCH_DEVICE_TASK_NOTHINGNESS, //调度设备模块,任务不存在
  300. DISPATCH_DEVICE_TASK_LEVEL_ERROR, //调度设备模块,任务等级错误
  301. CARRIER_ERROR_BASE = 0x13040000,
  302. CARRIER_READ_PROTOBUF_ERROR, //搬运器模块,读取参数错误
  303. CARRIER_STATUS_BUSY, //搬运器模块,状态正忙
  304. CARRIER_STATUS_ERROR, //搬运器模块,状态错误
  305. CARRIER_STATUS_DISCONNECT, //搬运器模块,状态断连
  306. CARRIER_TASK_TYPE_ERROR, //搬运器模块,任务类型错误
  307. CARRIER_TASK_OVER_TIME, //搬运器模块,任务超时
  308. CARRIER_IS_NOT_READY, //搬运器模块,不在准备状态
  309. CARRIER_RESPONS_ERROR, //搬运器模块,指令的执行失败
  310. CARRIER_TASK_NOTHINGNESS, //搬运器模块,任务不存在
  311. CARRIER_POSE_ERROR, //搬运器模块,姿态错误
  312. CARRIER_CONRTOL_PARAMETER_ERROR, //搬运器模块,控制参数错误
  313. CATCHER_ERROR_BASE = 0x13050000,
  314. CATCHER_READ_PROTOBUF_ERROR, //抓取器模块,读取参数错误
  315. CATCHER_STATUS_BUSY, //抓取器模块,状态正忙
  316. CATCHER_STATUS_ERROR, //抓取器模块,状态错误
  317. CATCHER_STATUS_DISCONNECT, //抓取器模块,状态断连
  318. CATCHER_TASK_TYPE_ERROR, //抓取器模块,任务类型错误
  319. CATCHER_TASK_OVER_TIME, //抓取器模块,任务超时
  320. CATCHER_IS_NOT_READY, //抓取器模块,不在准备状态
  321. CATCHER_RESPONS_ERROR, //抓取器模块,指令的执行失败
  322. CATCHER_TASK_NOTHINGNESS, //抓取器模块,任务不存在
  323. CATCHER_POSE_ERROR, //抓取器模块,姿态错误
  324. CATCHER_CONRTOL_PARAMETER_ERROR, //抓取器模块,控制参数错误
  325. PASSAGEWAY_ERROR_BASE = 0x13060000,
  326. PASSAGEWAY_READ_PROTOBUF_ERROR, //通道口模块,读取参数错误
  327. PASSAGEWAY_STATUS_BUSY, //通道口模块,状态正忙
  328. PASSAGEWAY_STATUS_ERROR, //通道口模块,状态错误
  329. PASSAGEWAY_STATUS_DISCONNECT, //通道口模块,状态断连
  330. PASSAGEWAY_TASK_TYPE_ERROR, //通道口模块,任务类型错误
  331. PASSAGEWAY_TASK_OVER_TIME, //通道口模块,任务超时
  332. PASSAGEWAY_IS_NOT_READY, //通道口模块,不在准备状态
  333. PASSAGEWAY_RESPONS_ERROR, //通道口模块,指令的执行失败
  334. PASSAGEWAY_TASK_NOTHINGNESS, //通道口模块,任务不存在
  335. //DISPATCH_COORDINATES module, 通信模块
  336. DISPATCH_COORDINATES_ERROR_BASE = 0x13060000,
  337. DISPATCH_COORDINATES_READ_PROTOBUF_ERROR, //调度坐标模块,读取参数错误
  338. DISPATCH_COORDINATES_ID_ERROR, //调度坐标模块,坐标id错误
  339. DISPATCH_COORDINATES_PATH_ERROR, //调度坐标模块,路径方向错误
  340. DISPATCH_COORDINATES_CAN_NOT_LOCK, //调度坐标模块,不能加锁
  341. //snap7 通信模块 错误码
  342. SNAP7_ERROR_BASE = 0x1401000,
  343. SNAP7_READ_PROTOBUF_ERROR, //snap7通信模块,读取参数错误
  344. SNAP7_CONNECT_ERROR, //snap7通信模块,连接错误
  345. SNAP7_DISCONNECT_ERROR, //snap7通信模块,断连错误
  346. SNAP7_READ_ERROR, //snap7通信模块,读取错误
  347. SNAP7_WRITE_ERROR, //snap7通信模块,写入错误
  348. SNAP7_ANALYSIS_TIME_OUT, //解析超时,
  349. SNAP7_EXCUTER_IS_BUSY, //处理器正忙, 请稍等
  350. };
  351. //错误等级,用来做故障处理
  352. enum Error_level
  353. {
  354. // 正常,没有错误,默认值0
  355. NORMAL = 0,
  356. // 轻微故障,可忽略的故障,NEGLIGIBLE_ERROR
  357. // 提示作用,不做任何处理,不影响代码的流程,
  358. // 用作一些不重要的事件,即使出错也不会影响到系统功能,
  359. // 例如:文件保存错误,等
  360. NEGLIGIBLE_ERROR = 1,
  361. // 一般故障,MINOR_ERROR
  362. // 用作底层功能函数的错误返回,表示该功能函数执行失败,
  363. // 返回给应用层之后,需要做故障分析和处理,
  364. // 例如:雷达数据传输失败,应用层就需要进行重新扫描,或者重连,或者重置参数等。
  365. MINOR_ERROR = 2,
  366. // 严重故障,MAJOR_ERROR
  367. // 用作应用层的任务事件的结果,表示该功能模块失败。
  368. // 通常是底层函数返回一般故障之后,应用层无法处理并解决故障,此时就要进行故障升级,
  369. // 从一般故障升级为严重故障,然后进行回退流程,回退已经执行的操作,最终回到故障待机状态。
  370. // 需要外部清除故障,并复位至正常待机状态,才能恢复功能的使用。
  371. // 例如:雷达扫描任务失败,且无法自动恢复。
  372. MAJOR_ERROR = 3,
  373. // 致命故障,CRITICAL_ERROR
  374. // 系统出现致命错误。导致系统无法正常运行,
  375. // 此时系统应该紧急停机,执行紧急流程,快速停机。
  376. // 此时不允许再执行任何函数和任务指令,防止系统故障更加严重。
  377. // 也不需要做任何错误处理了,快速执行紧急流程。
  378. // 例如:内存错误,进程挂死,关键设备失控,监控设备报警,等
  379. CRITICAL_ERROR = 4,
  380. };
  381. class Error_manager
  382. {
  383. public://外部接口函数
  384. //构造函数
  385. Error_manager();
  386. //拷贝构造
  387. Error_manager(const Error_manager & error_manager);
  388. //赋值构造
  389. Error_manager(Error_code error_code, Error_level error_level = NORMAL,
  390. const char* p_error_description = NULL);
  391. //赋值构造
  392. Error_manager(Error_code error_code, Error_level error_level , std::string & error_aggregate_string);
  393. //析构函数
  394. ~Error_manager();
  395. //初始化
  396. void error_manager_init();
  397. //初始化
  398. void error_manager_init(Error_code error_code, Error_level error_level = NORMAL,
  399. const char* p_error_description = NULL);
  400. //初始化
  401. void error_manager_init(Error_code error_code, Error_level error_level , std::string & error_aggregate_string);
  402. //重置
  403. void error_manager_reset(Error_code error_code, Error_level error_level = NORMAL,
  404. const char* p_error_description = NULL);
  405. //重置
  406. void error_manager_reset(Error_code error_code, Error_level error_level , std::string & error_aggregate_string);
  407. //重置
  408. void error_manager_reset(const Error_manager & error_manager);
  409. //清除所有内容
  410. void error_manager_clear_all();
  411. //重载=
  412. Error_manager& operator=(const Error_manager & error_manager);
  413. //重载=,支持Error_manager和Error_code的直接转化,会清空错误等级和描述
  414. Error_manager& operator=(Error_code error_code);
  415. //重载==
  416. bool operator==(const Error_manager & error_manager);
  417. //重载==,支持Error_manager和Error_code的直接比较
  418. bool operator==(Error_code error_code);
  419. //重载!=
  420. bool operator!=(const Error_manager & error_manager);
  421. //重载!=,支持Error_manager和Error_code的直接比较
  422. bool operator!=(Error_code error_code);
  423. //重载<<,支持cout<<
  424. friend std::ostream & operator<<(std::ostream &out, Error_manager &error_manager);
  425. //获取错误码
  426. Error_code get_error_code();
  427. //获取错误等级
  428. Error_level get_error_level();
  429. //获取错误描述的指针,(浅拷贝)
  430. std::string get_error_description();
  431. //复制错误描述,(深拷贝)
  432. //output:p_error_description 错误描述的字符串指针,不可以为NULL,必须要有实际的内存
  433. //output:description_length 错误描述的字符串长度,不可以为0,长度最好足够大,一般256即可。
  434. void copy_error_description(const char* p_error_description);
  435. //复制错误描述,(深拷贝)
  436. //output:error_description_string 错误描述的string
  437. void copy_error_description(std::string & error_description_string);
  438. //设置错误码
  439. void set_error_code(Error_code error_code);
  440. //比较错误等级并升级,取高等级的结果
  441. void set_error_level_up(Error_level error_level);
  442. //比较错误等级并降级,取低等级的结果
  443. void set_error_level_down(Error_level error_level);
  444. //错误等级,设定到固定值
  445. void set_error_level_location(Error_level error_level);
  446. //设置错误描述
  447. void set_error_description(const char* p_error_description);
  448. //设置错误描述
  449. void set_error_description(std::string & error_description_string);
  450. //尾部追加错误描述
  451. void add_error_description(const char* p_error_description);
  452. //尾部追加错误描述
  453. void add_error_description(std::string & error_description_string);
  454. //比较错误是否相同,
  455. // 注:只比较错误码和等级
  456. bool is_equal_error_manager(const Error_manager & error_manager);
  457. //比较并覆盖错误,讲低级错误转为字符串存放于描述中,
  458. //如果错误相同,则保留this的,将输入参数转入描述。
  459. void compare_and_cover_error(const Error_manager & error_manager);
  460. //比较并覆盖错误,讲低级错误转为字符串存放于描述中,
  461. //如果错误相同,则保留this的,将输入参数转入描述。
  462. void compare_and_cover_error( Error_manager * p_error_manager);
  463. //output:error_description_string 错误汇总的string
  464. void translate_error_to_string(std::string & error_aggregate_string);
  465. //错误码转字符串的简易版,可支持cout<<
  466. //return 错误汇总的string
  467. std::string to_string();
  468. protected:
  469. Error_code m_error_code; //错误码
  470. Error_level m_error_level; //错误等级
  471. std::string m_error_description; // 错误描述
  472. protected://内部功能函数
  473. public:
  474. //释放错误描述的内存,
  475. void free_description();
  476. //重新分配错误描述的内存,并从外部拷贝新的(深拷贝)
  477. //input:p_error_description 错误描述的字符串指针,可以为NULL,
  478. //input:description_length 错误描述的字符串长度,如果为0,则从p_error_description里面获取有效的长度
  479. void reallocate_memory_and_copy_string(const char* p_error_description, int description_length = 0);
  480. //重新分配错误描述的内存,并从外部拷贝新的(深拷贝)
  481. //input:error_aggregate_string 错误描述的string
  482. void reallocate_memory_and_copy_string(std::string & error_aggregate_string);
  483. };
  484. #endif //TEST_ERROR_ERROR_CODE_H