구조화된 텍스트

Structured text

ST 또는 STX로 약칭되는 구조화된 텍스트IEC 61131-3 표준이 지원하는 5개 언어 중 하나로, PLC(Programmable Logic Controller)를 위해 설계되었다.[1][2]블록체인이 기반한 파스칼과 구조적이고 구문적으로 닮은 수준 높은 언어다.[3]모든 언어는 IEC61131 공통 요소를 공유한다.변수와 함수 호출은 공통 요소에 의해 정의되므로 IEC 61131-3 표준 내의 다른 언어를 동일한 프로그램에서 사용할 수 있다.null

복잡한 문과 중첩된 지침이 지원됨:

  • 반복 루프(완전 반복; WHY-DO)
  • 조건부 실행(IF-THEN-ELSE; CASE)[3]
  • 함수(SQRT()), SIN()

샘플 프로그램

(* 단순 상태 컴퓨터 *) TxtState := 미국.[스테이트머신];  케이스 스테이트머신 OF    1: 클로징밸브();       스테이트머신 := 2;    2: 오프닝밸브(); 기타     배드케이스(); 끝_케이스; 

다른 프로그래밍 언어와 달리 CASE 문장은 번째 일치 조건을 입력하여 문구를 실행한 후 다른 조건을 확인하지 않고 CASE 블록을 그대로 둔다.null

추가 ST 프로그래밍 예제

// PLC 구성 배열 DefaultCfg     VAR_GLOBAL         b_Start_Stop  : BOOL;         // 부울을 나타내는 전역 변수.         b_ON_OFF      : BOOL;         // 부울을 나타내는 전역 변수.         Start_Stop AT %IX0.0:BOOL;    // PLC의 디지털 입력(주소 0.0)         ON_OFF     AT %QX0.0:BOOL;    // PLC(Address 0.0)의 디지털 출력(코일)     End_VAR      // 20ms마다 메인 프로그램을 실행하도록 예약     과제 눈금(간격 := t#20ms);      프로그램 메인 와 함께 눈금 : 모니터_Start_Stop; END_Configuration  프로그램 모니터_Start_Stop          // 실제 프로그램     VAR_외부         Start_Stop  : BOOL;         ON_OFF      : BOOL;     End_VAR     VAR                             // 로직 처리를 위한 임시 변수         ONS_트리거    : BOOL;         라이징_ONS  : BOOL;     End_VAR      // 논리 시작     // Start_Stop 입력의 상승 에지 원샷 포착     ONS_트리거    := Start_Stop AND NOT 라이징_ONS;          // Run_Contact의 기본 논리 -- Toggle ON / Toggle OFF ---     ON_OFF := (ONS_트리거 AND NOT ON_OFF) OR, (ON_OFF AND NOT ONS_트리거);      // 상승하는 원샷 논리     라이징_ONS := Start_Stop; 종료_프로그램 

함수 블록 예제

//======================================================================= // Function Block Timed Counter : 시간 간격의 증분 카운트 //======================================================================= 기능_블록 FB_Timed_Counter     VAR_INPUT         실행         : BOOL := 거짓의;        // 트리거 신호 시작 시간 카운트         시간_증가  : 진짜 := 1.25;         // 카운트 사이의 사이클 시간(초) 입력         카운트_주기    : INT  := 20;           // 원하는 카운트 사이클 수     End_VAR          VAR_Output         타이머_완료_비트  : BOOL := 거짓의;        // 타이머 사이클이 완료되었음을 나타내는 원 샷 비트         카운트_완료  : BOOL := 거짓의;        // 카운트가 완료되었음을 나타내는 출력 비트         현재_카운트   : INT  := 0;            // 카운터 값 축적     End_VAR          VAR         사이클타이머      : ;                  // 명령 라이브러리의 타이머 FB         사이클카운터    : CTU;                  // 명령 라이브러리의 카운터 FB         타이머프레셋     : 시간;                 // 변환된 시간_MS로 증분(초)     End_VAR              // Function Block 프로그래밍 시작     타이머프레셋 := REAL_TO_시간( := 시간_증가) * 1000;      사이클타이머(          := 실행 AND NOT 사이클타이머.Q,         pt := 타이머프레셋);      타이머_완료_비트 := 사이클타이머.Q;          사이클카운터(         CU := 사이클타이머.Q,         r := NOT 실행,         pv := 카운트_주기);      현재_카운트 := 사이클카운터.cv;     카운트_완료 := 사이클카운터.q;      끝_기능_블록 

참조

  1. ^ Bacidore, Mike (16 May 2018). "Should I limit programming to ladder logic or use all standards within IEC 61131?". Control Design.
  2. ^ Stevic, Tom (5 May 2017). "A very short history of PLC programming platforms". Control Design.
  3. ^ a b Roos, Nieke. "Programming PLCs using Structured Text". Pennsylvania State University. Department of Computing Science, University of Nijmegen. CiteSeerX 10.1.1.49.2016.