How to diagnose a siliXcon device over MCP
This is the general method. A device-specific playbook, when one matches, has the detailed steps; follow it after the first four steps here.
Ground rules
- Read-only. Diagnose with
emgui_status,list_devices,list_variables,read_variable,list_commands,command_reference, andexecute_commandforlog,pmlogandversiononly. - Paths are absolute and case-sensitive (
/io/IN_acc, not/io/in_acc). If a path does not exist, find the right one withlist_variables(pattern,path) instead of guessing. Features differ between applications and builds, so a missing path can simply mean a different build. - Ask the user for the symptom first, in their words: what they did, what they expected, what happened, since when.
- Quote values exactly and name the device by its name and serial number, never by bus address alone.
1. Posture
Call emgui_status. Note the emGUI version, how many devices it knows, and posture: read-only, writes enabled, or writes and dangerous commands enabled (the read, write and danger levels). The level is set by the operator in emGUI; you cannot change it.
2. Find the device
Call list_devices. It needs no bus traffic.
- Empty list: go through Could not discover any nodes with the user (power, cabling, address, bus speed). Call
search_devicesonly after that: it rescans the bus, changes what the user sees in emGUI, and makes every earlier address stale. - Several devices: ask which one misbehaves, or check each.
3. Identify it
From list_devices: the hwid starts with the family (esc = motor controller, bms = battery management, ift = display) - see HWID. The swid names the application and version - see SWID. Then call list_playbooks with the device address and apply only a playbook marked as matching the device (matches_device); it takes over from here. Applications reuse variable names and numbers with other meanings, so a playbook for another application does not apply even when its symptoms fit.
4. First reads
Read these with list_variables (kind: state, path: /, recurse: true) or single read_variable calls:
- Motor controller (esc):
/mode(the application state; its meaning is on the application's mode page),/driver/error,/common/error,/disarm_reasonif the application has it,/driver/stat. Look each value up (step 6) before interpreting it. - BMS and display: there is no per-application playbook yet. List the root states (
list_variables,kind: state,path: /) and usesearch_docsfor the application's state or mode page, for examplesearch_docs("CAPRA state").
Non-zero error words and a mode that blocks operation are the leads. Do not change anything yet.
5. History
execute_commandlogprints the device's error log. It can return -1 even when it printed entries: use the printed output. Each entry carries the power-up counterrun; compare it with the device's currentrunpermanent (read_variable/permanents/run): a smallerrunis an earlier power-up; a larger one means the counter was reset since, so the entry is older still. The line format of a motor controller is in Error log.pmlogprints the recorded permanents per power-down (pmlog). Optional; useful for voltage and temperature history.
6. Look facts up, do not recall them
search_docs- the documentation search. Always add the application name from theswidto the exact variable name (LYNX disarm_reason 21): mode and reason numbers are per application. Cite the URLs it returns.read_doc- reads one documentation page as text: use it when a hit has no snippet or a playbook links a table.doc_link- the documentation page of one variable on this device. An emGUI without that tool: the doc-link API gives the same,https://docs.silixcon.com/api/doc-link?family=<esc|bms|ift>&app=<swid>&path=<path>(URL-encoded). The wholeswidgoes inapp, so a pre-release firmware gets the matching docs version.documented: falsemeans it fell back to a search.command_reference- the syntax of a built-in command, before you run one.- A table in the docs (mode values, reasons, bit meanings) is the source; read it and link it in your answer rather than restating it from memory.
7. What you may do, and what never
- A write,
save,rebootor a motor command runs only if the operator has raised emGUI's level, and only when the user asked for that exact change. A refusal is final: report it. - Propose one change at a time, say which variable changes from what to what, and let the user decide. A change is live only until power-down unless the user also saves it.
- Never run motor commands (
run,stop, identification) yourself, never reboot to see if it helps, never use a command flag thatcommand_referencedoes not list.
8. Report
Five lines:
- Device: name, serial number,
swid. - State: the values read, quoted exactly (
/mode, error words,/disarm_reason). - Cause: one sentence, with the chain of values that shows it.
- Fix: what the user does; which step needs a write and therefore the operator's permission.
- Sources: the documentation URLs you used; old log entries named as history.
9. When to ask for a diagnostic report
If the cause is not found, a driver error comes back after a reboot, or the evidence points at hardware, ask the user for a diagnostic report and to send it to siliXcon support.