Simcenter Flomaster - Controller Script 함수 및 Liquid Level Control Valve 예시
작성자
최종인
작성일
2024-08-14 15:49
조회
214
keyword: Controller, Script, Liquid level
version: v2407
Simcenter Flomaster는 다양한 Controller component를 제공하고 있습니다.
시간에 따른 값과 선형보간으로 제어되는 General Tabular Controller, 각종 논리연산을 제공하는 Signals component, PID controller 등 여러 제어 방법을 제공하고 있습니다.
일부 복잡한 제어 로직의 경우, Tabular Controller, Signals component 등으로는 구현이 어려운 경우가 발생합니다.
이 경우, Controller Script를 구성하여 해결할 수 있습니다.
Script Type은 Controller, Gauge or Cam Correlation으로 선택하고, Script 언어는 편한 것으로 선택합니다. 이번 테크노트에서는 C#을 선택하였습니다.
Script Name을 정의하고 OK를 누르면 Script를 구성하는 창이 나타납니다.
자주 사용되는 함수들은 아래와 같습니다.
Script 구성시 주의사항으로는,
한번의 time step에서도 압력, 유량을 수렴시키기 위한 수십번의 iteration이 계산됩니다.
이로 인해 한번의 time step 동안 script가 수십번 동작하여 원하는 제어가 구현되지 않을 수 있습니다.
한번의 time step 동안 한번의 script를 동작하기 위한 쉬운 방법은 Manager.IsFirstIteration 함수를 사용하는 것입니다.
또한, 모든 iteration마다 동작함으로써 for문과 같은 반복 함수가 필요없을 수 있습니다.
Real Data 1 에는 밸브가 닫히기 시작하는 수위(5m)를 입력하였습니다.
Real Data 2에는 밸브가 완전히 닫히기 까지 걸리는 시간(15초)을 입력하였습니다.
liquid level 5m 도달 시 밸브가 닫히기 시작하며, 15초 동안 닫힙니다.
version: v2407
Simcenter Flomaster는 다양한 Controller component를 제공하고 있습니다.
시간에 따른 값과 선형보간으로 제어되는 General Tabular Controller, 각종 논리연산을 제공하는 Signals component, PID controller 등 여러 제어 방법을 제공하고 있습니다.
일부 복잡한 제어 로직의 경우, Tabular Controller, Signals component 등으로는 구현이 어려운 경우가 발생합니다.
이 경우, Controller Script를 구성하여 해결할 수 있습니다.
Controller Script
먼저 Project View 창에서 Script를 생성합니다.Script Type은 Controller, Gauge or Cam Correlation으로 선택하고, Script 언어는 편한 것으로 선택합니다. 이번 테크노트에서는 C#을 선택하였습니다.
Script Name을 정의하고 OK를 누르면 Script를 구성하는 창이 나타납니다.
자주 사용되는 함수들은 아래와 같습니다.
Controller.InputValue(#)은 Controller Template의 input signal port #번에 연결되어 읽어들이는 값을 의미합니다.
Controller.DataValue(#)은 Controller Template의 입력 데이터 Real Data #의 값을 의미합니다.
Manager.DeltaT는 현재 해석에서의 time step입니다.
Controller.OutputValue는 Script 동작 후 Controller Template의 output 값입니다.
Manager.IsSteadyStateCalc은 현재 해석 상태가 Steady State 해석 상태인지 판별해주는 값으로 1이면 steady, 0이면 transient 해석을 의미합니다.
Manager.IsFirstIteration은 현재 계산 중인 iteration이 현 time step 에서 제일 처음 iteration인지 판별해주는 값으로 1이면 처음 iteration이고, 0이면 그 이후 iteration입니다.
Script 구성시 주의사항으로는,
1. Script는 SI unit으로 동작됩니다.
2. Script에 정의된 변수들은 모두 지역변수이며, script에 재진입할 때 초기화됩니다.
3. 모든 iteration 마다 script에 진입하고 동작하고 종료됩니다.
특히, 3번 모든 iteration 마다 script가 동작한다는 점은 큰 주의가 필요합니다.한번의 time step에서도 압력, 유량을 수렴시키기 위한 수십번의 iteration이 계산됩니다.
이로 인해 한번의 time step 동안 script가 수십번 동작하여 원하는 제어가 구현되지 않을 수 있습니다.
한번의 time step 동안 한번의 script를 동작하기 위한 쉬운 방법은 Manager.IsFirstIteration 함수를 사용하는 것입니다.
또한, 모든 iteration마다 동작함으로써 for문과 같은 반복 함수가 필요없을 수 있습니다.
Liquid Level Control Valve 예시
script를 이용하여 Reservoir liquid level이 특정 수위에 도달하면 valve를 닫는 예시입니다.Real Data 1 에는 밸브가 닫히기 시작하는 수위(5m)를 입력하였습니다.
Real Data 2에는 밸브가 완전히 닫히기 까지 걸리는 시간(15초)을 입력하였습니다.
liquid level 5m 도달 시 밸브가 닫히기 시작하며, 15초 동안 닫힙니다.