|
| 1 | +/* SPDX-License-Identifier: MIT */ |
| 2 | +/* AUTO-GENERATED by arbiterc — do not edit */ |
| 3 | + |
| 4 | +#include "arbiter_model.h" |
| 5 | +#include <arbiter/arbiter.h> |
| 6 | + |
| 7 | +static const struct ARBITER_fact_def model_facts[] = { |
| 8 | + { .id = 0, .type = ARBITER_FACT_INT32, .range_min = 0, .range_max = 100000, .default_value = 800, .stale_after_ms = 0, .safety_relevant = false, .name = "gain.kd" }, |
| 9 | + { .id = 1, .type = ARBITER_FACT_INT32, .range_min = 0, .range_max = 100000, .default_value = 100, .stale_after_ms = 0, .safety_relevant = false, .name = "gain.ki" }, |
| 10 | + { .id = 2, .type = ARBITER_FACT_INT32, .range_min = 0, .range_max = 100000, .default_value = 2500, .stale_after_ms = 0, .safety_relevant = false, .name = "gain.kp" }, |
| 11 | + { .id = 3, .type = ARBITER_FACT_UINT32, .range_min = 1, .range_max = 1000, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "in.dt_ms" }, |
| 12 | + { .id = 4, .type = ARBITER_FACT_BOOL, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "in.enable" }, |
| 13 | + { .id = 5, .type = ARBITER_FACT_INT32, .range_min = -180000, .range_max = 180000, .default_value = 0, .stale_after_ms = 50, .safety_relevant = true, .name = "in.process_value" }, |
| 14 | + { .id = 6, .type = ARBITER_FACT_BOOL, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = true, .name = "in.sensor_valid" }, |
| 15 | + { .id = 7, .type = ARBITER_FACT_INT32, .range_min = -180000, .range_max = 180000, .default_value = 0, .stale_after_ms = 200, .safety_relevant = false, .name = "in.setpoint" }, |
| 16 | + { .id = 8, .type = ARBITER_FACT_UINT32, .range_min = 0, .range_max = 360000, .default_value = 0, .stale_after_ms = 0, .safety_relevant = true, .name = "pid.abs_error" }, |
| 17 | + { .id = 9, .type = ARBITER_FACT_INT32, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "pid.d_term" }, |
| 18 | + { .id = 10, .type = ARBITER_FACT_INT32, .range_min = -360000, .range_max = 360000, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "pid.error" }, |
| 19 | + { .id = 11, .type = ARBITER_FACT_INT32, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "pid.error_prev" }, |
| 20 | + { .id = 12, .type = ARBITER_FACT_INT32, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "pid.i_term" }, |
| 21 | + { .id = 13, .type = ARBITER_FACT_INT32, .range_min = -1000, .range_max = 1000, .default_value = 0, .stale_after_ms = 0, .safety_relevant = true, .name = "pid.output" }, |
| 22 | + { .id = 14, .type = ARBITER_FACT_INT32, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "pid.output_raw" }, |
| 23 | + { .id = 15, .type = ARBITER_FACT_INT32, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "pid.p_term" }, |
| 24 | +}; |
| 25 | + |
| 26 | +static const struct ARBITER_condition_def model_conditions[] = { |
| 27 | + { .fact_id = 6, .op = ARBITER_OP_EQ, .value = 0, .group = ARBITER_COND_ANY, .group_index = 0, .next = UINT16_MAX }, |
| 28 | + { .fact_id = 5, .op = ARBITER_OP_STALE, .value = 50, .group = ARBITER_COND_ANY, .group_index = 0, .next = UINT16_MAX }, |
| 29 | + { .fact_id = 8, .op = ARBITER_OP_GT, .value = 30000, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 30 | + { .fact_id = 4, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 31 | + { .fact_id = 4, .op = ARBITER_OP_EQ, .value = 0, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 32 | + { .fact_id = 4, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 33 | + { .fact_id = 6, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 34 | + { .fact_id = 4, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 35 | + { .fact_id = 6, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 36 | + { .fact_id = 14, .op = ARBITER_OP_GT, .value = 1000, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 37 | + { .fact_id = 14, .op = ARBITER_OP_LT, .value = -1000, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 38 | + { .fact_id = 4, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 39 | +}; |
| 40 | + |
| 41 | +static const struct ARBITER_action_def model_actions[] = { |
| 42 | + { .id = 0, .type = ARBITER_ACTION_CALLBACK, .target_fact_id = 0, .target_value = 0, .callback = NULL, .must_complete_within_ms = 0, .safe_state_action = false, .name = "update_actuator" }, |
| 43 | +}; |
| 44 | + |
| 45 | +static const struct ARBITER_rule_def model_rules[] = { |
| 46 | + { .id = 0, .rule_class = ARBITER_RULE_SAFETY_GUARD, .condition_start = 0, .condition_count = 2, .action_start = 0, .action_count = 1, .safety_goal_id = UINT16_MAX, .set_mode = 4, .safety_critical = true, .name = "01_fault.sensor", .explanation = "Sensor fault — zero output." }, |
| 47 | + { .id = 1, .rule_class = ARBITER_RULE_SAFETY_GUARD, .condition_start = 2, .condition_count = 2, .action_start = 0, .action_count = 1, .safety_goal_id = UINT16_MAX, .set_mode = 2, .safety_critical = true, .name = "02_fault.following", .explanation = "Following error > 30 deg — fault." }, |
| 48 | + { .id = 2, .rule_class = ARBITER_RULE_MODE_GUARD, .condition_start = 4, .condition_count = 1, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = 1, .safety_critical = false, .name = "03_check.disabled", .explanation = NULL }, |
| 49 | + { .id = 3, .rule_class = ARBITER_RULE_INFERENCE, .condition_start = 5, .condition_count = 2, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = 3, .safety_critical = false, .name = "10_pid.compute", .explanation = "PID compute: error, P, I+=, D." }, |
| 50 | + { .id = 4, .rule_class = ARBITER_RULE_INFERENCE, .condition_start = 7, .condition_count = 2, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = UINT16_MAX, .safety_critical = false, .name = "20_pid.output", .explanation = NULL }, |
| 51 | + { .id = 5, .rule_class = ARBITER_RULE_MODE_GUARD, .condition_start = 9, .condition_count = 1, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = 0, .safety_critical = false, .name = "30_windup.pos", .explanation = "Output saturated — integral clamped." }, |
| 52 | + { .id = 6, .rule_class = ARBITER_RULE_MODE_GUARD, .condition_start = 10, .condition_count = 1, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = 0, .safety_critical = false, .name = "31_windup.neg", .explanation = NULL }, |
| 53 | + { .id = 7, .rule_class = ARBITER_RULE_OBLIGATION, .condition_start = 11, .condition_count = 1, .action_start = 0, .action_count = 1, .safety_goal_id = UINT16_MAX, .set_mode = UINT16_MAX, .safety_critical = false, .name = "40_actuate", .explanation = "Write pid.output to actuator." }, |
| 54 | +}; |
| 55 | + |
| 56 | +static const char *model_mode_names[] = { |
| 57 | + "mode.anti_windup", |
| 58 | + "mode.disabled", |
| 59 | + "mode.following_fault", |
| 60 | + "mode.running", |
| 61 | + "mode.sensor_fault", |
| 62 | +}; |
| 63 | + |
| 64 | +const struct ARBITER_model ARBITER_generated_model = { |
| 65 | + .name = "pid_engine", |
| 66 | + .model_hash = { 0xc2, 0x13, 0x66, 0x7b, 0xc6, 0xdd, 0xaa, 0xb4, 0xe6, 0x94, 0x58, 0x36, 0xd5, 0xcd, 0x49, 0xce, 0x6c, 0x7e, 0x48, 0xd7, 0x8d, 0x08, 0x23, 0x33, 0x4e, 0x76, 0x51, 0x89, 0xb5, 0xcc, 0x65, 0xa2 }, |
| 67 | + .schema_hash = { 0x0d, 0x55, 0x33, 0x65, 0xf3, 0x4e, 0x02, 0xf3, 0xf8, 0x94, 0xe8, 0x25, 0xbb, 0x47, 0x86, 0x45, 0xfd, 0x8b, 0x78, 0xb1, 0x27, 0xf5, 0x8c, 0x42, 0xba, 0xbd, 0x80, 0x1f, 0x77, 0x57, 0x1f, 0x35 }, |
| 68 | + .fact_count = 16, |
| 69 | + .rule_count = 8, |
| 70 | + .condition_count = 12, |
| 71 | + .action_count = 1, |
| 72 | + .mode_count = 5, |
| 73 | + .facts = model_facts, |
| 74 | + .rules = model_rules, |
| 75 | + .conditions = model_conditions, |
| 76 | + .actions = model_actions, |
| 77 | + .mode_names = model_mode_names, |
| 78 | +}; |
0 commit comments