Found an issue with the book? Report it on Github.

센서 비교(Sensor Comparison)

센서 비교(Sensor Comparison)

이전 저서 [Tiller2001] 에 제시한 것과 유사한 예제로 아키텍처에 대하 연구를 시작하겠습니다. 여기서는 여러 센서 모델을 사용하는 제어 시스템의 성능을 살펴볼 것 입니다.

평형 시스템(Flat System)

시스템 설계도는 다음과 같이 구성되어 있습니다.

Flat system model

보라색 상자 내의 모든 구성 요소는 플랜트 모델을 나타냅니다.이 경우 스프링과 댐퍼를 통해 연결된 두 개의 회전 관성을 포함하는 간단한 회전 시스템이며, 관성 중 하나는 추가 댐퍼에 의해 회전 접지에 연결됩니다.녹색 상자는 시스템의 센서를 식별하는 부분 입니다. 센서는 회전 샤프트 중 하나의 속도를 측정하는 데 사용합니다.자홍색 상자에 있는 액추에이터를 볼 수 있는데, 액추에이터는 다른 샤프트(속도가 측정되지 않은 샤프트)에 토크를 적용합니다.마지막으로 파란색 상자의 모든 구성 요소는 측정된 속도를 다이어그램 상단의 신호 발생기가 제공하는 설정값에 최대한 가깝게 유지하려고 하는 제어 시스템을 나타냅니다.

다음 모델리카 코드를 사용하여 이를 나타낼 수 있습니다.

within ModelicaByExample.Architectures.SensorComparison.Examples;
model FlatSystem "A rotational system with no architecture"
  Modelica.Mechanics.Rotational.Components.Fixed fixed
    annotation ...
  Modelica.Mechanics.Rotational.Components.Inertia inertia(J=0.1)
    annotation ...
  Modelica.Mechanics.Rotational.Components.Inertia inertia1(J=0.3)
    annotation ...
  Modelica.Mechanics.Rotational.Sources.Torque torque(useSupport=true)
    annotation ...
  Modelica.Mechanics.Rotational.Components.SpringDamper springDamper(c=100, d=3)
    annotation ...
  Modelica.Mechanics.Rotational.Components.Damper damper(d=4)
    annotation ...
  Modelica.Mechanics.Rotational.Sensors.SpeedSensor speedSensor annotation ...
  Modelica.Blocks.Math.Feedback feedback annotation ...
  Modelica.Blocks.Sources.Trapezoid trapezoid(period=1.0)
    annotation ...
  Modelica.Blocks.Math.Gain gain(k=20) annotation ...
equation
  connect(springDamper.flange_a, inertia.flange_b) annotation ...
  connect(springDamper.flange_b, inertia1.flange_a) annotation ...
  connect(torque.support, fixed.flange) annotation ...
  connect(damper.flange_b, inertia1.flange_b) annotation ...
  connect(damper.flange_a, fixed.flange) annotation ...
  connect(torque.flange, inertia.flange_a) annotation ...
  connect(speedSensor.flange, inertia1.flange_b) annotation ...
  connect(feedback.y, gain.u) annotation ...
  connect(gain.y, torque.tau) annotation ...
  connect(trapezoid.y, feedback.u1) annotation ...
  connect(speedSensor.w, feedback.u2) annotation ...
  annotation ...
end FlatSystem;

이 특정 모델의 경우 sensor 구성 요소는 "이상적인" 센서인 Modelica.Mechanics.Rotational.Sensors 에 있는 SpeedSensor 모델의 인스턴스이고, 정확한 해 궤적을 알려줍니다.즉, 어떤 종류의 측정에서의 인위적인 영향(artifact, 아티팩트)도 없습니다.

실제로 이러한 시스템을 시뮬레이션하면 정확한 속도 측정을 사용하여 제어 시스템이 여전히 속도 추적을 제대로 따를 수 없다는 것을 알 수 있습니다.

/static/_images/AFS.svg

그 이유에 대해서는 잠시 후에 논의하겠습니다. 그러나 측정된 속도가 실제 샤프트 속도와 정확히 동일하기 때문에 분명히 측정에서의 인위적인 조작에 의한 문제가 아닙니다.

이제 이전에 개발된 샘플 앤 홀드 센서(Sample and Hold Sensor) 모델과 같은 보다 현실적인 센서 모델을 사용하여 시스템 성능에 미칠 수 있는 추가적인 측정에서의 인위적인 조작을 확인하고 싶다고 상상해 보십시오.할 수 있는 한 가지 방법은 FlatSystem 모델에서 다음 줄을

  Modelica.Mechanics.Rotational.Sensors.SpeedSensor speedSensor annotation ...
  Modelica.Blocks.Math.Feedback feedback annotation

이 다음 줄로 변경하는 것 입니다.

  Components.SpeedMeasurement.Components.SampleHold speedSensor(sample_time=0.036)
    annotation ...
  Modelica.Blocks.Math.Feedback feedback annotation

여기서 변경되는 유일한 사항은 speedSensor 구성 요소의 자료형 이라는 점을 기억해야 합니다.이 시스템을 시뮬레이션하면 제어 시스템에 대해 다음과 같은 성능을 볼 수 있습니다.

/static/_images/AFS_SH.svg

이 경우 상황이 악화되고 있음을 알 수 있습니다. 처음에는 원하는 속도를 면밀히 추적할 수 없는 수준이였지만, 이제는 (측정 인위적인 변형의 결과로) 시스템이 불안정해졌습니다.

계층적인 시스템(Hierarchical System)

이 시점에서 센서의 특성(예: sample_time)이 성능에 어떤 영향을 미치고 잠재적으로 어떤 종류의 개선이 제어 시스템 자체에 궁극적으로 이루어질 수 있는지 이해하기 위해이 성능 문제를 좀 더 살펴 보겠습니다.

센서, 액추에이터 및 제어 방법을 대체할 계획이라면, 첫 번째 단계는 시스템을 이러한 하위 시스템으로 구성하는 것입니다.이렇게 하면 다음과 같은 시스템 모델이 생성됩니다.

Hierarchical system model

여기에서는 시스템 수준에서 4개의 하위 시스템만 볼 수 있습니다. 그것들은 조금 전에 언급한 하위 시스템에 해당합니다. 모델리카 모델은 이제 가지고 있는 유일한 선언이 다음과 같기 때문에 훨씬 더 간단합니다.

  Implementation.BasicPlant plant
    annotation ...
  Implementation.IdealActuator actuator
    annotation ...
  Implementation.IdealSensor sensor
    annotation ...
  Implementation.ProportionalController controller
    annotation ...
  Modelica.Blocks.Sources.Trapezoid setpoint(period=1.0)
    annotation ...

각 하위 시스템(plant, actuator, sensorcontroller)은 Implementations 패키지의 하위 시스템에 의해 구현됩니다. 이는 컨트롤러 모델을 변경하려는 경우 controller 하위 시스템과 관련된 자료형을 간단히 변경할 수 있고 다른 구현방법을 사용할 수 있다는 것을 의미하기 때문에 기존방식에 비해 개선된 것입니다기존 컨트롤러 구성 요소를 삭제하고 새 구성 요소를 드래그한 다음 모든 것을 다시 연결해야 하는 것보다 확실히 (올바르게!) 개선된 것입니다.

그러나 센서 모델을 샘플 앤 홀드 버전으로 전환하려면 여전히 모델의 텍스트를 편집해야 합니다. 즉, 아래와 같은 방법을 사용해야 합니다.

  Implementation.BasicPlant plant
    annotation ...
  Implementation.IdealActuator actuator
    annotation ...
  Implementation.SampleHoldSensor sensor(sample_time=0.01)
    annotation (Placement(transformation(extent={{20,-40},{40,-20}})));
  Implementation.ProportionalController controller
    annotation ...
  Modelica.Blocks.Sources.Trapezoid setpoint(period=1.0)
    annotation ...

이 해에는 여전히 몇 가지 문제가 있습니다. 먼저 자료형의 이름을 변경하여 사용할 구현을 변경했습니다. 이것은 사용자에게 "여기서 어떤 자료형을 사용할 수 있는가?"라는 질문을 제기하게 합니다. sensor 자료형을 BasicPlant 로 변경하면 어떻게 될까요? 사실, 그것은 말이 되지 않지만, 모델만을 보면 이러한 사실에 대해서 실제로 알 수 없습니다. 그러나 더 큰 문제는 거의 동일한 두 모델로 끝나는 모델을 만드는 것입니다.이러한 모델에서는 많은 중복성을 찾을 수 있습니다.:ref:책의 앞부분 <dry-components> 에서 배웠듯이 DRY(Do n't Repeat Yourself) 원칙을 염두에 두는 것이 항상 유용합니다.

중복 처리(Dealing with Redundancy)

IdealSensor 모델을 사용하여 계층적 모델로 시작한다고 생각해 보겠습니다.

within ModelicaByExample.Architectures.SensorComparison.Examples;
model HierarchicalSystem "Organzing components into subsystems"
  Implementation.BasicPlant plant
    annotation ...
  Implementation.IdealActuator actuator
    annotation ...
  Implementation.IdealSensor sensor
    annotation ...
  Implementation.ProportionalController controller
    annotation ...
  Modelica.Blocks.Sources.Trapezoid setpoint(period=1.0)
    annotation ...
equation
  connect(actuator.shaft, plant.flange_a) annotation ...
  connect(actuator.housing, plant.housing) annotation ...
  connect(plant.flange_b, sensor.shaft) annotation ...
  connect(controller.command, actuator.tau) annotation ...
  connect(sensor.w, controller.measured) annotation ...
  connect(setpoint.y, controller.setpoint) annotation ...
end HierarchicalSystem;

이제 센서 구성 요소가 다른 자료형을 가정할 수 있는 이 모델의 변형을 만들려고 할때 어떻게 해야할까요?

이전에는 상속을 사용하여 중복성을 처리했습니다.확실히 상속을 사용하여 HierarchicalSystem 의 하위 시스템을 다른 모델로 가져온 다음 매개변수 를 예제와 같이 변경할 수 있습니다.

model Variation1
  extends HierarchicalSystem(setpoint(startTime=1.0));
end Variation1;

그러나 매개변수를 변경하고 싶지 않고 자료형 을 변경하고 싶습니다. 어떻게든 이전 선택을 "덮어쓸" 수 있게 하겠다면 다음과 같이 할 수 있습니다.

model Variation2 "What we'd like to do (but cannot)"
  extends HierarchicalSystem(setpoint(startTime=1.0));
  Implementation.SampleHoldSensor sensor
    annotation ...
end Variation2;

이것은 본질적으로 원하는 것입니다.하지만, 이런 접근 방법은 모델리카에서 허용하지 않으며, 이 접근 방식에는 몇 가지 다른 문제가 있습니다. 첫 번째는 원래 모델 개발자가 이러한 변경을 허용하지 않을 수 있다는 것입니다.두 번째 문제는 결국 두 개의 센서 구성 요소(다른 자료형, 그 이하도 아님)로 끝나게 된다는 것입니다.``sensor`` 구성 요소의 이전 선언을 진정으로 "덮어쓴다"고 해도 또 다른 문제는 변수 이름에 이름을 잘못 입력하여 결국 두 개의 센서로 결론날 수 있다는 것입니다. 마지막으로, sensorSampleHoldSensor 로 변경하는 것이 합리적인지 알 수 있는 방법이 아직 없습니다. (이 경우에는 그렇습니다만 일반적으로 어떻게 보장 할 수 있을까요?)

다행히 여기에서 시도하고 있는 것과 거의 똑같이 수행할 수 있는 방법이 있습니다 만, 다른 중복된 문제를 해결하기 위해 좀 더 엄격하게 적용할 필요는 있습니다.

먼저, 해당 구성 요소를 교체할 수 있음을 나타내는 것으로 시작해야 합니다. 다음과 같이 sensor 를 선언하여 이를 수행할 수 있습니다.

replaceable Implementation.IdealSensor sensor
  annotation ...

replaceable 키워드의 사용은 모델에서 상속할 때 해당 변수의 자료형이 변경(또는 "재선언")될 수 있음을 나타냅니다.그러나, 이 모델에는 다음과 같은 내용도 있음을 기억해야 합니다.

connect(plant.flange_b, sensor.shaft);
connect(sensor.w, controller.measured);

이것은 복합적인 문제를 보여줍니다.``w`` 커넥터가 없는 것으로 sensor 구성 요소를 교체하면 어떻게 될까요? 이 connect 문은 오류를 생성합니다. 이러한 경우 두 센서 모델이 플러그 호환 이 아니라고 표현 합니다.모델 XY 의 모든 public 변수에 대해 X 에 동일한 공용 변수가 있는 경우 모델 Y 와 플러그 호환됩니다. 게다가, X 에 있는 모든 변수는 Y 에 있는 변수와 플러그 호환이 가능해야 합니다. 이렇게 하면 Y 자료형의 구성 요소를 X 자료형의 구성 요소로 변경하더라도 필요한 모든 것 (파라미터, 커넥터 등)이 그대로 있고 여전히 호환 가능합니다. 그러나 여기서, 주의 해야할 사항이 있습니다. XY 와 플러그 호환되는 경우 이것은 ``Y`` 가 ``X`` 와 플러그 호환됨을 의미하지 않습니다 (잠시 후에 보게 되겠지만).

플러그 호환성은 일반적으로 만드는 모든 재선언이 "안전"하다는 것을 확인하기를 원하기 때문에 중요합니다.그렇게 하는 방법은 센서 컴포넌트를 변경하기로 결정한 자료형이 무엇이든 원래 자료형과 호환되는 플러그 이기를 요구하는 것입니다. 이 경우, 그것은 shaft 커넥터(이전 shaft 와 호환되는 플러그여야 함) 와 w 커넥터가 있어야 한다는 것을 의미합니다(그리고 그 커넥터는 이전에 있던 w 와 호환되는 플러그여야 합니다).

그렇다면 여기서 가능한 질문은 SampleHoldSensor 구현이 이 요구 사항 플러그 호환성 요구 사항을 충족시키는가? 하는 것입니다.``IdealSensor`` 모델과 플러그 호환이 될까요?먼저 IdealSensor 모델을 살펴보겠습니다.

within ModelicaByExample.Architectures.SensorComparison.Implementation;
model IdealSensor "Implementation of an ideal sensor"
  Modelica.Mechanics.Rotational.Interfaces.Flange_a shaft
    "Flange of shaft from which sensor information shall be measured"
    annotation ...
  Modelica.Blocks.Interfaces.RealOutput w "Absolute angular velocity of flange"
    annotation ...
protected
  Modelica.Mechanics.Rotational.Sensors.SpeedSensor idealSpeedSensor
    "An ideal speed sensor" annotation ...

이 구성 요소의 공용 인터페이스는 wshaft 라는 두 개의 커넥터로만 구성됩니다. SampleHoldSensor 모델을 보면 아래와 같습니다.

within ModelicaByExample.Architectures.SensorComparison.Implementation;
model SampleHoldSensor "Implementation of a sample hold sensor"
  parameter Modelica.SIunits.Time sample_time(min=Modelica.Constants.eps);
  Modelica.Mechanics.Rotational.Interfaces.Flange_a shaft
    "Flange of shaft from which sensor information shall be measured"
    annotation (Placement(transformation(extent={{-110,-10},{-90,10}})));
  Modelica.Blocks.Interfaces.RealOutput w "Absolute angular velocity of flange"
    annotation (Placement(transformation(extent={{100,-10},{120,10}})));
protected
  Components.SpeedMeasurement.Components.SampleHold sampleHoldSensor(
      sample_time=sample_time)
    annotation ...

공용 인터페이스에는 커넥터 wshaft 도 포함되어 있습니다. 또한 IdealSensor 모델의 커넥터와 정확히 동일한 자료형입니다. 이러한 이유로 SampleHoldSensor 모델은 IdealSensor 모델과 플러그 호환되므로 IdealSensor 인스턴스를 SampleHoldSensor 인스턴스로 대체할 수 있어야 하며 ``connect``에 대한 내용은 여전히 유효합니다.

따라서 HierarchicalSystem 모델이 다음과 같이 선언된 경우 에는 아래와 같습니다.

within ModelicaByExample.Architectures.SensorComparison.Examples;
model HierarchicalSystem "Organzing components into subsystems"
  replaceable Implementation.BasicPlant plant
    annotation ...
  replaceable Implementation.IdealActuator actuator
    annotation ...
  replaceable Implementation.IdealSensor sensor
    annotation ...
  replaceable Implementation.ProportionalController controller
    annotation ...
  replaceable Modelica.Blocks.Sources.Trapezoid setpoint
    annotation ...
  // ...
end HierarchicalSystem;

그러면 다음과 같이 반복하지 않고 이 모델의 변형을 만드는 원래 목표를 달성할 수 있습니다.

model Variation3 "DRY redeclaration"
  extends HierarchicalSystem(
    redeclare Implementation.SampleHoldSensor sensor
  );
end Variation3;

이 모델에 대해 주목할 만한 몇 가지 사항이 있습니다.첫 번째는 재선언의 구문이 redeclare 키워드가 선행된다는 점을 제외하고 일반 선언과 동일하다는 것입니다.또한 재선언은 extends 절의 일부라는 점에 유의해야 합니다.특히 다른 수정과 마찬가지로 extends 절의 수정을 생각해야 합니다. sensor 구성 요소를 다시 선언하고, setpoint의 startTime 파라미터를 변경하려면 둘 다 extends 절을 수정해야 합니다.

model Variation3 "DRY redeclaration"
  extends HierarchicalSystem(
    setpoint(startTime=1.0),
    redeclare Implementation.SampleHoldSensor sensor
  );
end Variation3;

구속 자료형(Constraining Types)

이 섹션의 앞부분에서 SampleHoldSensor 모델에 대한 공용 인터페이스에 다음이 포함되어 있음을 다시 생각해보겠습니다.

parameter Modelica.SIunits.Time sample_time=0.01;
Modelica.Mechanics.Rotational.Interfaces.Flange_a shaft;
Modelica.Blocks.Interfaces.RealOutput w;

그리고 IdealSensor 공용 인터페이스에는 다음 항목만 포함되어 있습니다.

Modelica.Mechanics.Rotational.Interfaces.Flange_a shaft;
Modelica.Blocks.Interfaces.RealOutput w;

재선언된 자료형이 원래 자료형과 플러그 호환되어야 하는 방식으로 재선언이 제한되면 다음과 같은 문제가 발생할 수 있습니다.우리 시스템의 초기 모델로 SampleHoldSensor 센서를 사용했고 가정한다면 즉, 아래와 같습니다.

within ModelicaByExample.Architectures.SensorComparison.Examples;
model InitialSystem "Organzing components into subsystems"
  replaceable Implementation.BasicPlant plant;
  replaceable Implementation.IdealActuator actuator;
  replaceable Implementation.SampleHoldSensor sensor;
  replaceable Implementation.ProportionalController controller;
  replaceable Modelica.Blocks.Sources.Trapezoid setpoint;
equation
  // ...
  connect(plant.flange_b, sensor.shaft);
  connect(sensor.w, controller.measured);
  // ...
end InitialSystem;

sensor 구성 요소를 IdealSensor 로 재선언하고 싶다고 상상해 보십시오. 를 들면 아래와 같습니다.

model Variation4
  extends InitialSystem(
    setpoint(startTime=1.0),
    redeclare Implementation.IdealSensor sensor // illlegal
  );
end Variation4;

이제 문제가 생겼습니다. 문제는 원래 sensor 컴포넌트에 sample_time 이라는 매개변수가 있다는 것입니다.하지만 해당 매개변수가 없는 것으로 대체하려고 합니다.즉, IdealSensor 모델은 SampleHoldSensor 모델과 플러그 호환 되지 않습니다.

그러나 InitialSystem 모델의 소스 코드를 보면 sample_time 매개변수가 사용된 적이 없음을 알 수 있습니다.따라서 자료형을 전환할 수 없는 실제 이유가 없습니다.이러한 이유로 모델리카에는 제약 자료형 이라는 개념이 포함되어 있습니다.

재선언에 대해 이해해야 할 중요한 점은 원래 선언과 관련된 두 가지 중요한 자료형이 있다는 것입니다.첫 번째 자료형은 원래 선언의 자료형입니다. 두 번째 자료형은 자료형이 여전히 작동 하는 것입니다.이 두 번째 자료형을 "제약 자료형"이라고 합니다. 재선언이 제약 자료형과 플러그 호환되는 한 모델이 계속 작동해야 하기 때문입니다. 따라서 위의 InitialSystem 모델에서 원래 선언의 자료형은 SampleHoldSensor 였습니다. 그러나 새로운 자료형이 IdealSensor 와 플러그 호환되는 한 모델은 여전히 작동합니다.

구성 요소가 교체 가능 임을 나타낼 때 끝에 constrainedby 절을 추가하여 제약 자료형을 나타낼 수 있습니다. 예를 들면,

replaceable Implementation.SampleHoldSensor sensor
  constrainedby Implementation.IdealSensor;

이 선언은 sensor 구성 요소가 IdealSensor 모델과 플러그 호환되는 모든 것에 의해 재선언될 수 있다고 말합니다. 하지만 재선언되지 않으면 기본적으로 SampleHoldSensor 센서로 선언되어야 합니다. 이러한 이유로 SampleHoldSensor 선언에 사용된 원래 자료형을 기본 자료형 이라고 합니다.

InitialSystem 모델의 원래 정의가 제약 자료형을 지정하지 않았고, 초기 자료형만 지정했습니다.이 경우에는 기본 자료형과 제한 자료형이 초기 자료형으로 간주됩니다.

하향식 아키텍처 기반 접근 방식을 사용하여 이러한 시스템 모델을 개발하는 방법을 논의할 때 다음 섹션에서 이 동일한 시스템 아키텍처를 계속 사용할 것입니다.

[Tiller2001]

Michael M. Tiller, "Introduction to Physical Modeling with Modelica" http://www.amazon.com/Introduction-Physical-Modeling-International-Engineering/dp/0792373677