TwinCAT Reference
Beckhoff TwinCAT3 함수블록/ST문법/EtherCAT 레퍼런스
TwinCAT Reference 소개
TwinCAT 레퍼런스는 Beckhoff TwinCAT 3 PLC 개발을 위한 IEC 61131-3 구조화 텍스트(ST) 프로그래밍 레퍼런스입니다. 변수 선언(VAR/VAR_GLOBAL), 제어 흐름(IF/ELSIF/CASE/FOR/WHILE), 함수 블록(FUNCTION_BLOCK, METHOD, PROPERTY, INTERFACE), 데이터 타입(STRUCT, ENUM, ARRAY, POINTER/REFERENCE) 등 전체 ST 문법을 실전 코드 예제와 함께 정리했습니다.
기본 문법 외에 IEC 표준 함수 블록(TON, TOF, TP 타이머, CTU/CTD/CTUD 카운터, R_TRIG/F_TRIG 엣지 감지, SR/RS 플립플롭)과 PLCopen 모션 제어 블록(MC_MoveAbsolute, MC_MoveRelative, MC_MoveVelocity, MC_Home, MC_Power)을 Axis, Execute, Position, Velocity, Acceleration, Deceleration 파라미터와 함께 수록했습니다.
EtherCAT 통신 영역에서는 ADS 프로토콜(NETID, PORT, IDXGRP/IDXOFFS 기반 FB_AdsRead)과 CoE SDO 접근(0x6041 StatusWord 읽기, 0x6060 ModeOfOperation 쓰기를 위한 FB_EcCoESdoRead/Write)을 다룹니다. Tc2_Utilities(문자열 변환, MEMCPY), Tc2_System(시간 함수, CPU 사용률) 등 TwinCAT 전용 라이브러리도 문서화되어 있습니다.
주요 기능
- IEC 61131-3 구조화 텍스트 전체 문법: VAR 선언, IF/CASE/FOR/WHILE 제어 흐름
- METHOD, PROPERTY, INTERFACE를 활용한 객체지향 함수 블록 프로그래밍
- 표준 타이머(TON, TOF, TP)와 카운터(CTU, CTD, CTUD) 블록 사용법 수록
- PLCopen 모션 제어: MC_MoveAbsolute, MC_MoveRelative, MC_MoveVelocity, MC_Home, MC_Power
- EtherCAT CoE SDO 읽기/쓰기(FB_EcCoESdoRead/Write)로 서보 파라미터(0x6041, 0x6060) 접근
- ADS 통신 설정: NETID, PORT, 인덱스 그룹/오프셋 기반 원격 PLC 접근 방법
- STRUCT 레시피, ENUM 상태머신, 다차원 ARRAY, POINTER/REFERENCE 데이터 타입 정의
- Beckhoff 라이브러리: Tc2_Utilities(문자열 변환, 메모리), Tc2_System(시간, CPU) 참조
자주 묻는 질문
이 TwinCAT 레퍼런스는 어떤 구조화 텍스트 문법을 다루나요?
변수 선언(VAR/VAR_GLOBAL, 타입 초기화), 조건 분기(IF/ELSIF/ELSE, CASE...OF 상태머신), 반복문(FOR BY 스텝, WHILE, REPEAT), 함수 블록 정의(VAR_INPUT, VAR_OUTPUT, METHOD, PROPERTY, INTERFACE 다형성)를 포함합니다.
TwinCAT ST에서 상태머신은 어떻게 구현하나요?
CASE...OF 구문을 사용합니다: CASE nStep OF로 번호가 매겨진 상태(0: 초기화, 10: 대기, 20: 동작)를 정의합니다. 각 상태에서 출력을 설정하고 IF 조건문으로 nStep을 변경하여 다음 단계로 진행합니다.
어떤 PLCopen 모션 제어 블록이 포함되어 있나요?
5개 핵심 모션 블록: MC_Power(서보 활성화, Enable_Positive/Negative), MC_Home(원점복귀), MC_MoveAbsolute(절대위치 이동), MC_MoveRelative(상대위치 이동), MC_MoveVelocity(속도 제어). 각각 Axis, Execute, Position/Velocity/Acceleration 파라미터를 포함합니다.
EtherCAT 서보 파라미터는 어떻게 읽고 쓰나요?
FB_EcCoESdoRead로 파라미터를 읽고(예: 인덱스 0x6041의 StatusWord), FB_EcCoESdoWrite로 씁니다(예: 0x6060의 ModeOfOperation). 둘 다 sNetId, nSlaveAddr, nIndex, nSubIndex, 버퍼 포인터(ADR), 버퍼 크기(SIZEOF), bExecute 트리거가 필요합니다.
ADS 통신이란 무엇이고 어떻게 설정하나요?
ADS(Automation Device Specification)는 Beckhoff의 통신 프로토콜입니다. FB_AdsRead는 NETID 문자열(예: '5.80.192.168.1.1'), PORT(851: PLC 런타임), IDXGRP/IDXOFFS 변수 주소, SIZEOF 버퍼 길이, ADR 대상 주소가 필요합니다.
어떤 타이머와 카운터 함수 블록을 다루나요?
타이머: TON(온딜레이, PT 경과 후 출력), TOF(오프딜레이, 입력 OFF 후 유지), TP(펄스, 고정 시간 출력). 카운터: CTU(업카운터, PV 프리셋), CTD(다운카운터), CTUD(양방향). 엣지 감지: R_TRIG(상승), F_TRIG(하강). 플립플롭: SR(Set 우선), RS(Reset 우선).
TwinCAT에서 사용자 정의 데이터 타입은 어떻게 만드나요?
STRUCT로 레코드 타입을 정의합니다(TYPE ST_Recipe : STRUCT, STRING/REAL/INT/BOOL 필드). ENUM으로 명명 상수를 만듭니다(TYPE E_MachineState, IDLE:=0, RUNNING:=1 등). ARRAY는 다차원 배열을 지원합니다(ARRAY[0..9] OF REAL). POINTER TO와 REFERENCE TO로 간접 접근(ADR(), ^ 역참조)합니다.
Beckhoff 전용 라이브러리는 어떤 것이 있나요?
Tc2_Utilities는 문자열 변환(REAL_TO_STRING, STRING_TO_INT)과 메모리 연산(ADR/SIZEOF 기반 MEMCPY)을 다룹니다. Tc2_System은 시스템 시간(fbGetTime, TIMESTR 출력)과 시스템 정보(fbSysInfo.CPUUSAGE를 통한 CPU 사용률 모니터링)를 제공합니다.