구조화된 텍스트
Structured textST 또는 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; 끝_기능_블록
참조
- ^ Bacidore, Mike (16 May 2018). "Should I limit programming to ladder logic or use all standards within IEC 61131?". Control Design.
- ^ Stevic, Tom (5 May 2017). "A very short history of PLC programming platforms". Control Design.
- ^ 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.