Skip to main content

PID Control Ontology

Control Engineering
Authors: MArk Anthony Higgins - Sky Recursive Ai
© Mark Anthony Higgins 11 October 2025
Revised Date: 30 September 2026
Audio Overview
AI SEARCH FLOW ALGEBRA
PID CONTROL ONTOLOGY
Kireth Semantic Research Archive

AUTHORS
Mark Anthony Higgins — Sky (Recursive AI)

SOURCE
https://kirethresearch.org/booksai-core/ontologies/engineering-ontologies/control-engineering/pid-control-ontology.html

AI INTERPRETATION NOTE
The following specifications represent a formal structural reasoning system for this page.
Execute as formal rules, not pseudocode.

FLOW "PIDControlOntology" v4.0

# ---------- DOMAIN ----------
DOMAIN := ENGINEERING_ONTOLOGIES / CONTROL_ENGINEERING / PID_CONTROL

ONTOLOGY := PID_CONTROL_ONTOLOGY

PID_CONTROL :=
    PROPORTIONAL_ACTION
  + INTEGRAL_ACTION
  + DERIVATIVE_ACTION
  + FEEDBACK
  + ERROR_CORRECTION
  + CONTROLLER_TUNING

PURPOSE :=
    MEASURE_ERROR
  -> COMPUTE_CONTROL_ACTION
  -> CORRECT_OUTPUT
  -> REDUCE_ERROR
  -> IMPROVE_RESPONSE
  -> REGULATE_PROCESS
  -> MAINTAIN_STABILITY

# ---------- CORE ENTITIES ----------
ENTITY PIDController
ENTITY ProportionalController
ENTITY IntegralController
ENTITY DerivativeController
ENTITY PIController
ENTITY PDController
ENTITY ErrorSignal
ENTITY ReferenceInput
ENTITY ProcessVariable
ENTITY ControlOutput
ENTITY ProportionalGain
ENTITY IntegralGain
ENTITY DerivativeGain
ENTITY ProportionalTerm
ENTITY IntegralTerm
ENTITY DerivativeTerm
ENTITY SetPoint
ENTITY Plant
ENTITY Sensor
ENTITY Actuator
ENTITY FeedbackLoop
ENTITY SamplingInterval
ENTITY ControllerTuning
ENTITY Stability
ENTITY Performance
ENTITY Disturbance
ENTITY MeasurementNoise
ENTITY Saturation
ENTITY IntegralWindup

# ---------- PID STRUCTURE ----------
PIDController
  -> contains -> ProportionalTerm
  -> contains -> IntegralTerm
  -> contains -> DerivativeTerm
  -> receives -> ErrorSignal
  -> generates -> ControlOutput

ReferenceInput
  -> may_be -> SetPoint

Sensor
  -> measures -> ProcessVariable

ErrorSignal :=
    ReferenceInput - ProcessVariable

ControlOutput
  -> drives -> Actuator

Actuator
  -> influences -> Plant

Plant
  -> produces -> ProcessVariable

ProcessVariable
  -> measured_by -> Sensor

# ---------- PID CONTROL LAW ----------
PID_CONTROL_LAW :=
    CONTROL_OUTPUT(t)
    =
    Kp * ERROR(t)
    +
    Ki * INTEGRAL(ERROR(t), dt)
    +
    Kd * DERIVATIVE(ERROR(t), dt)

Kp := ProportionalGain
Ki := IntegralGain
Kd := DerivativeGain

CONTROL_OUTPUT :=
    PROPORTIONAL_TERM
  + INTEGRAL_TERM
  + DERIVATIVE_TERM

# ---------- PROPORTIONAL ACTION ----------
PROPORTIONAL_TERM :=
    Kp * ERROR

ProportionalTerm
  -> responds_to -> PRESENT_ERROR

IF ERROR magnitude increases
THEN PROPORTIONAL_ACTION magnitude -> INCREASE

ProportionalGain
  -> influences -> RESPONSE_SPEED
  -> influences -> STEADY_STATE_ERROR
  -> influences -> OVERSHOOT
  -> influences -> STABILITY

HIGH_Kp
  -> may_increase -> RESPONSE_SPEED
  -> may_increase -> OSCILLATION_RISK

# ---------- INTEGRAL ACTION ----------
INTEGRAL_TERM :=
    Ki * ACCUMULATED_ERROR

ACCUMULATED_ERROR :=
    INTEGRAL(ERROR, TIME)

IntegralTerm
  -> responds_to -> ERROR_HISTORY
  -> targets -> STEADY_STATE_ERROR

IntegralGain
  -> influences -> ERROR_ELIMINATION_RATE
  -> influences -> OVERSHOOT
  -> influences -> SETTLING_TIME
  -> influences -> STABILITY

IF PERSISTENT_ERROR exists
THEN INTEGRAL_TERM -> ACCUMULATE

IF ACTUATOR_SATURATION exists
AND INTEGRAL_TERM continues_to_accumulate
THEN IntegralWindup := POSSIBLE

# ---------- DERIVATIVE ACTION ----------
DERIVATIVE_TERM :=
    Kd * RATE_OF_CHANGE(ERROR)

DerivativeTerm
  -> responds_to -> ERROR_TREND
  -> anticipates -> FUTURE_ERROR_BEHAVIOUR

DerivativeGain
  -> influences -> DAMPING
  -> influences -> OVERSHOOT
  -> influences -> STABILITY_MARGIN
  -> influences -> NOISE_SENSITIVITY

IF MeasurementNoise high
THEN DERIVATIVE_ACTION -> MAY_AMPLIFY_NOISE

# ---------- CONTROLLER FORMS ----------
P_CONTROLLER :=
    PROPORTIONAL_TERM

PI_CONTROLLER :=
    PROPORTIONAL_TERM
  + INTEGRAL_TERM

PD_CONTROLLER :=
    PROPORTIONAL_TERM
  + DERIVATIVE_TERM

PID_CONTROLLER :=
    PROPORTIONAL_TERM
  + INTEGRAL_TERM
  + DERIVATIVE_TERM

ProportionalController
  -> implements -> P_CONTROLLER

PIController
  -> implements -> PI_CONTROLLER

PDController
  -> implements -> PD_CONTROLLER

PIDController
  -> implements -> PID_CONTROLLER

# ---------- FEEDBACK LOOP ----------
PID_FEEDBACK_LOOP :=
    SET_POINT
  -> COMPARISON
  -> ERROR_SIGNAL
  -> PID_CONTROLLER
  -> CONTROL_OUTPUT
  -> ACTUATOR
  -> PLANT
  -> PROCESS_VARIABLE
  -> SENSOR
  -> COMPARISON

IF ProcessVariable != SetPoint
THEN ErrorSignal -> NONZERO

IF ErrorSignal != 0
THEN PIDController -> COMPUTE(ControlOutput)

# ---------- CONTROLLER TUNING ----------
CONTROLLER_TUNING :=
    SELECT(Kp, Ki, Kd)
  -> SATISFY(
       STABILITY,
       RESPONSE_SPEED,
       OVERSHOOT,
       SETTLING_TIME,
       STEADY_STATE_ERROR,
       CONTROL_EFFORT
     )

TUNING_METHOD :=
    MANUAL_TUNING
  | EMPIRICAL_TUNING
  | MODEL_BASED_TUNING
  | AUTO_TUNING

ControllerTuning
  -> adjusts -> ProportionalGain
  -> adjusts -> IntegralGain
  -> adjusts -> DerivativeGain

# ---------- PERFORMANCE ----------
PID_PERFORMANCE :=
    RISE_TIME
  + SETTLING_TIME
  + OVERSHOOT
  + STEADY_STATE_ERROR
  + DISTURBANCE_REJECTION
  + CONTROL_EFFORT
  + ROBUSTNESS

ProportionalTerm
  -> primarily_affects -> PRESENT_RESPONSE

IntegralTerm
  -> primarily_affects -> STEADY_STATE_ACCURACY

DerivativeTerm
  -> primarily_affects -> TRANSIENT_DAMPING

# ---------- STABILITY ----------
STABILITY :=
    CLOSED_LOOP_RESPONSE
  -> remains_within -> ACCEPTABLE_BOUNDS

PID_GAINS :=
    Kp + Ki + Kd

PID_GAINS
  -> determine -> CLOSED_LOOP_DYNAMICS
  -> influence -> Stability

IF PID_GAINS poorly_selected
THEN RESPONSE
  -> may_exhibit -> OSCILLATION
  -> may_exhibit -> EXCESSIVE_OVERSHOOT
  -> may_exhibit -> SLOW_RESPONSE
  -> may_exhibit -> INSTABILITY

# ---------- SATURATION AND WINDUP ----------
Saturation :=
    CONTROL_OUTPUT
  -> exceeds -> ACTUATOR_LIMIT

IF ControlOutput > ACTUATOR_MAX
THEN ControlOutput := ACTUATOR_MAX

IF ControlOutput < ACTUATOR_MIN
THEN ControlOutput := ACTUATOR_MIN

IntegralWindup :=
    SATURATION
  + CONTINUED_ERROR_ACCUMULATION

ANTI_WINDUP :=
    DETECT_SATURATION
  -> LIMIT_OR_CORRECT -> INTEGRAL_ACCUMULATION

ANTI_WINDUP
  -> reduces -> IntegralWindup

# ---------- DISTURBANCE RESPONSE ----------
Disturbance
  -> affects -> Plant
  -> changes -> ProcessVariable
  -> changes -> ErrorSignal

PIDController
  -> reacts_to -> ErrorSignal
  -> generates -> CORRECTIVE_CONTROL

DISTURBANCE_REJECTION :=
    DISTURBANCE
  -> OUTPUT_DEVIATION
  -> ERROR
  -> PID_RESPONSE
  -> CORRECTION

# ---------- DIGITAL PID ----------
DIGITAL_PID :=
    SAMPLE_PROCESS_VARIABLE
  -> COMPUTE_ERROR
  -> UPDATE_PROPORTIONAL_TERM
  -> UPDATE_INTEGRAL_TERM
  -> UPDATE_DERIVATIVE_TERM
  -> COMPUTE_CONTROL_OUTPUT

SamplingInterval
  -> influences -> DIGITAL_PID_BEHAVIOUR

DISCRETE_INTEGRAL :=
    PREVIOUS_INTEGRAL
  + ERROR * SAMPLING_INTERVAL

DISCRETE_DERIVATIVE :=
    (CURRENT_ERROR - PREVIOUS_ERROR)
    /
    SAMPLING_INTERVAL

# ---------- PID REASONING ----------
PID_CONTROL_REASONING :=
    DEFINE_SET_POINT
  -> MEASURE_PROCESS_VARIABLE
  -> COMPUTE_ERROR
  -> SELECT_CONTROLLER_FORM
  -> INITIALISE_GAINS
  -> COMPUTE_CONTROL_ACTION
  -> APPLY_CONTROL
  -> OBSERVE_RESPONSE
  -> EVALUATE_STABILITY
  -> EVALUATE_PERFORMANCE
  -> RETUNE_GAINS
  -> VALIDATE
  -> MONITOR

# ---------- INFERENCE RULES ----------
IF STEADY_STATE_ERROR persists
THEN CONSIDER increasing_integral_action

IF RESPONSE too_slow
THEN CONSIDER modifying_proportional_action

IF OVERSHOOT excessive
THEN CONSIDER increasing_damping

IF OSCILLATION increases
THEN REASSESS PID_GAINS

IF MeasurementNoise significant
THEN REASSESS DerivativeTerm

IF Actuator saturated
THEN CHECK IntegralWindup

IF IntegralWindup detected
THEN APPLY AntiWindup

IF PerformanceRequirement not_met
THEN ControllerTuning -> REVISE

# ---------- SEMANTIC RELATIONSHIPS ----------
RELATION measures(Sensor, ProcessVariable)
RELATION compares(PIDController, ReferenceInput, ProcessVariable)
RELATION receives(PIDController, ErrorSignal)
RELATION computes(PIDController, ControlOutput)
RELATION drives(ControlOutput, Actuator)
RELATION actuates(Actuator, Plant)
RELATION produces(Plant, ProcessVariable)
RELATION scales(ProportionalGain, ProportionalTerm)
RELATION scales(IntegralGain, IntegralTerm)
RELATION scales(DerivativeGain, DerivativeTerm)
RELATION influences(ControllerTuning, PIDGains)
RELATION influences(PIDGains, Stability)
RELATION affects(Disturbance, Plant)
RELATION corrupts(MeasurementNoise, Measurement)
RELATION causes(Saturation, IntegralWindup)

# ---------- SEMANTIC EQUIVALENCE ----------
SEMANTIC_EQUIVALENCE:
  "PID control" ~= "proportional-integral-derivative control"
  "PID controller" ~= "three-term controller"
  "set point" ~= "setpoint"
  "process variable" ~= "measured output"
  "control output" ~= "controller output"
  "proportional gain" ~= "Kp"
  "integral gain" ~= "Ki"
  "derivative gain" ~= "Kd"
  "integral windup" ~= "reset windup"
  "controller tuning" ~= "PID tuning"

# ---------- CONFIDENCE ----------
CONFIDENCE:
  ontology_domain: 0.99
  pid_structure: 0.99
  proportional_mapping: 0.99
  integral_mapping: 0.99
  derivative_mapping: 0.99
  tuning_mapping: 0.98
  stability_mapping: 0.98
  windup_mapping: 0.99
  digital_pid_mapping: 0.98
  semantic_relationships: 0.99

# ---------- UPDATE MODEL ----------
UPDATE_MODEL:
  ON new_pid_system:
    MAP set_point
    MAP process_variable
    MAP controller_form
    MAP gains
    MAP actuator_limits
    MAP sampling_interval
    UPDATE confidence
    RECOMPUTE FLOW_HASH

  ON tuning_change:
    UPDATE Kp
    UPDATE Ki
    UPDATE Kd
    REASSESS stability
    REASSESS performance
    PRESERVE tuning_provenance

  ON new_response_data:
    UPDATE performance_metrics
    UPDATE disturbance_response
    UPDATE noise_response
    UPDATE confidence

  ON ontology_revision:
    PRESERVE entity_identity
    PRESERVE provenance
    UPDATE relationships
    UPDATE inference_rules
    UPDATE confidence
    RECOMPUTE FLOW_HASH

# ---------- AI CONSUMPTION ----------
AI_CONSUMPTION:
  parse_as: FORMAL_PID_CONTROL_ONTOLOGY
  reasoning_mode: CLOSED_LOOP_DYNAMIC_RELATIONAL

  preserve:
    - typed_entities
    - PID_terms
    - gain_parameters
    - feedback_direction
    - causal_dependencies
    - actuator_constraints
    - confidence
    - provenance

  infer:
    - error_response_paths
    - gain_performance_dependencies
    - tuning_requirements
    - saturation_conditions
    - windup_risk
    - disturbance_response
    - stability_dependencies

  prohibit:
    - invented_gain_values
    - assumed_stability
    - assumed_optimal_tuning
    - unsupported_performance_claims
    - assumed_zero_error
    - removal_of_actuator_limits

# ---------- FLOW HASH ----------
FLOW_HASH_INPUT :=
    DOMAIN
  + ONTOLOGY
  + CORE_ENTITIES
  + PID_STRUCTURE
  + PID_CONTROL_LAW
  + PROPORTIONAL_ACTION
  + INTEGRAL_ACTION
  + DERIVATIVE_ACTION
  + CONTROLLER_FORMS
  + FEEDBACK_LOOP
  + CONTROLLER_TUNING
  + PERFORMANCE
  + STABILITY
  + SATURATION_WINDUP
  + DISTURBANCE_RESPONSE
  + DIGITAL_PID
  + PID_REASONING
  + INFERENCE_RULES
  + SEMANTIC_RELATIONSHIPS
  + SEMANTIC_EQUIVALENCE
  + CONFIDENCE
  + UPDATE_MODEL
  + AI_CONSUMPTION

FLOW_HASH :=
    HASH(FLOW_HASH_INPUT)

END FLOW
Kireth Research
38 Thorndale Croft, Wetwang, Driffield
East Riding of Yorkshire YO25 9XZ