# Error handling Fieldbus Access automatically sets up system signals during its initialization face. These signals are accessed for various error information in your application. ## CAN bus error The system signal `fieldbusAccess_CANBusError_CAN#` receives CAN-Bus info, warning and errors from the SocetCAN driver as follows: * WarningLimitSet * WarningLimitReset * ErrorPassiveSet * ErrorPassiveReset * BusOff * Overrun * StuffError * FormError * AckError * CrcError * RxBuffHighOverrun * RxBuffLowOverrun * BusOffReset * FirstBusContact ## J1939 J1939 errors and CAN bus errors are available on the following signals: * [fieldbusAccess_J1939Error_CAN#](#j1939-error) * [fieldbusAccess_CANBusError_CAN#](#can-bus-error) ### J1939 error With the LinX Manager plugin configured applications will have generated files injected. These files helps with Data Engine connection and communication. System signal `fieldbusAccess_J1939Error_CAN#` receives listed error codes from the J1939 stack. Following information is available for each received error message. | Info | Description | |-------------|----------------------------------------------------------------| | Bus | CAN bus interface # | | Level | [Error level](appendix/j1939errors.html#error-level) | | Code | [Error Codes](appendix/j1939errors.html#error-codes) | | Identifier | [Error identifier](appendix/j1939errors.html#error-identifier) | | AddInfo | Additional info if available, like PGN concerned | | Description | Descripton of the error in clear text | | Started | Time when error was received | | Ended | Time when the error was cleared (if possible) | | Exists | True if error still active | #### J1939 error example For a table showing received errors, use `fieldbusAccessErrorModel` and add following to main.qml: ```qml ListView { id: errorListView width: view.width - exitButton.width height: view.height / 1.5 model: fieldbusAccessErrorModel delegate: Rectangle { id: listComponent width: view.width - exitButton.width height: 20 color: "#333" border { width: 1 color: "#777" } property color textColor: level == 'OK' ? "#fff" : "#f33" Row { spacing: 25 topPadding: 2 Text { text: Number.fromLocaleString(addInfo).toString(16).toUpperCase() color: listComponent.textColor } Text { text: level color: listComponent.textColor } Text { text: description color: listComponent.textColor } Text { text: started color: listComponent.textColor } } } } ``` **Output:** Info | Level | Description | Received -----|-------|----------------------------------------------------|------------------------ FEEE | Error | A registered message wasn't received in given time | 2021-03-18T13:43:09.974 FF71 | Error | A registered message wasn't received in given time | 2021-03-18T13:43:09.974 FEEE | Error | A registered message wasn't received in given time | 2021-03-18T13:43:10.524 For a description of received error codes, please see [J1939 Error description](appendix/j1939errors) ## CANopen Stack errors, NMT state and bus errors will be available as Data Engine signals: * [fieldbusAccess_CANopenError_CAN#](#canopen-error) * [fieldbusAccess_CANopenStatus_CAN#](#canopen-status) * [fieldbusAccess_CANBusError_CAN#](#can-bus-error) If loosing connection to Data Engine, the node will go to pre-operational. This behaviour is configurable. ### CANopen error With the LinX Manager plugin configured applications will have generated files injected. These files helps with Data Engine connection and communication. The system signal `fieldbusAccess_CANopenError_CAN#` receives CANopen stack specific errors. For a description of received error codes, please see [CANopen Error description](appendix/canopenerrors) #### CANopen error example For a table showing received errors, use `canopenStatusModel` and add following to main.qml: ```qml ListView { id: listView anchors { left: parent.left right: parent.right top: parent.top margins: 10 } width: view.width - exitButton.width height: view.height / 1.5 model: canopenStatusModel delegate: Rectangle { id: listDelegate implicitWidth: listView.width - exitButton.width implicitHeight: 30 color: "#000" border { width: 1 color: "#ccc" } Row { anchors.fill: parent anchors.leftMargin: 10 spacing: 5 Text { anchors.verticalCenter: parent.verticalCenter color: "#fff" text: bus } Text { anchors.verticalCenter: parent.verticalCenter color: "#fff" text: type } Text { anchors.verticalCenter: parent.verticalCenter color: "#fff" text: message } Text { anchors.verticalCenter: parent.verticalCenter color: "#fff" text: received } } } } ``` **Output:** CAN-bus | Level | Description | Received --------|--------|-----------------|------------------------ 0 | Error | Successful | 2021-03-18T14:54:20.549 0 | Status | Pre-operational | 2021-03-18T14:54:20.549 ### CANopen status The system signal `fieldbusAccess_CANopenStatus_CAN#` receives stack state specific information from the Network Management (NMT). State | Code (hex) ----------------|----------- Initialisation | 0x00 Pre-Operational | 0x04 Operational | 0x05 Stopped | 0x7F #### CANopen status example To show information about received status, add following to main.qml. ```qml Text { anchors.right: parent.right anchors.bottom: parent.bottom color: "#C00" font.pixelSize: 32; text: (dataEngine.fieldbusAccess_CANopenStatus_CAN0.value === FieldbusAccessCANopenStatusModel.NodeStateInitialisation) ? "Initialisation" : (dataEngine.fieldbusAccess_CANopenStatus_CAN0.value === FieldbusAccessCANopenStatusModel.NodeStateStopped) ? "Stopped" : (dataEngine.fieldbusAccess_CANopenStatus_CAN0.value === FieldbusAccessCANopenStatusModel.NodeStateOperational) ? "Operational" : (dataEngine.fieldbusAccess_CANopenStatus_CAN0.value === FieldbusAccessCANopenStatusModel.NodeStatePreOperational) ? "Pre Operational" : "N/A"; } ``` **Output:** | Description | | ----------------| | Pre Operational |