06.05.2015 Views

tpc9x_manv1.pdf

tpc9x_manv1.pdf

tpc9x_manv1.pdf

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

TinyPLC TPC9X User’s Manual<br />

TinyPLC<br />

TPC9X 시리즈<br />

제품 사용설명서<br />

MANUAL VERSION : 1.0<br />

컴파일 테크놀로지㈜<br />

- 1 -


TinyPLC TPC9X User’s Manual<br />

머리말<br />

TPC9X 시리즈는 3 세대 TinyPLC 제품입니다. 최초 TPC0X 시리즈 (1997 년)부터 시작해서<br />

TPC3X(2000 년)을 거쳐 TPC9X(2006 년)시리즈를 출시하게 되었습니다.<br />

그동안의 반도체 기술발달에 힘입어, 좀더 파워풀한 성능을 가지고 있는 TPC9X 시리즈를<br />

발표하게 된 것을 매우 기쁘게 생각합니다.<br />

이번 시리즈에서는 기존제품에서 부족한 부분을 대폭 보강하였습니다.<br />

1. MODBUS RTU SLAVE 기능을 내장하여, 원활한 통신기능을 제공합니다.<br />

2. RS232 범용통신을 지원합니다.<br />

3. 실수연산을 지원합니다.<br />

4. 빠른 스캔타임 (스캔타임 1mS 부터 지원)<br />

5. 온도센서 (NTC 서미스터) 자동 온도변환 기능을 지원합니다.<br />

6. D/A 변환기 (PWM 방식)을 지원합니다.<br />

7. 스탭모터제어 기능 (최대 2 축)<br />

기존 제품의 기능중 우수한점은 그대로 계승 발전시켰습니다.<br />

1. LCD 디스플레이, 키패드 인터페이스 기능을 사용할 수 있습니다.<br />

2. A/D 변환기와 고속카운터를 내장하고 있습니다.<br />

3. 내장된 EEPROM 을 사용하여, 정전시 데이터를 유지할 수 있습니다.<br />

무엇보다도, 기존 TPC3X 시리즈에서 문제가 되었던, 통신기능을 대폭 보강하여,<br />

상위기계로부터 요구되는 데이터송신요구에 빠짐없이 응답할 수 있도록 하였습니다<br />

뿐만 아니라, 통신의 마스터가 되어 주변기기로부터의 데이터 수신/송신을 할 수 있도록<br />

하였습니다.<br />

TPC3X 의 명령어 체계를 대부분 그대로 유지하고 있으며, 릴레이 표현방식을 사용하기<br />

편리하도록 개선하였습니다. 또한 모니터링/타임차트 모니터링기능들을 보강하여, 좀더<br />

직관적으로 PLC 의 상태를 파악할 수 있도록 하였습니다.<br />

기존 TinyPLC 사용자에게는 갈증(?)을 해소시켜주는 제품, 그리고 TinyPLC 를 처음 접하는<br />

사용자에게는 “반도체형 PLC”의 진면목을 보여줄 수 있는 제품이 될 것을 확신하는<br />

바입니다.<br />

컴파일 테크놀로지㈜<br />

- 2 -


TinyPLC TPC9X User’s Manual<br />

차 례<br />

제 1 장 TINYPLC 소개 ..................................................................................................................... 9<br />

TINYPLC의 개요........................................................................................................................... 10<br />

반도체형 PLC의 장점은 무엇인가?............................................................................................ 11<br />

LADDER LOGIC은 무엇인가? ................................................................................................... 13<br />

TINYPLC의 특징은? ..................................................................................................................... 16<br />

I/O의 차이 ..................................................................................................................................... 17<br />

TINYPLC의 응용분야................................................................................................................... 18<br />

제 2 장 TPC9X 시리즈 소개............................................................................................................ 19<br />

TPC9X 시리즈에 대하여.. ........................................................................................................... 20<br />

기존제품과의 호환성 .................................................................................................................. 21<br />

큐블록과 TINYPLC....................................................................................................................... 23<br />

이더넷(인터넷)을 사용한 원격 다운로드 .................................................................................. 25<br />

제 3 장 TPC9X 시리즈 코어모듈.................................................................................................... 27<br />

코어모듈 ....................................................................................................................................... 28<br />

코어모듈비교 ............................................................................................................................... 31<br />

TPC91A......................................................................................................................................... 32<br />

TPC93A......................................................................................................................................... 34<br />

코어모듈의 I/O ............................................................................................................................. 38<br />

다운로드 케이블 연결.................................................................................................................. 40<br />

제 4 장 메모리 맵.............................................................................................................................. 41<br />

TINYPLC의 메모리....................................................................................................................... 42<br />

TPC91A의 메모리맵 .................................................................................................................... 43<br />

정전시 데이터 보관...................................................................................................................... 46<br />

스탭 릴레이 .................................................................................................................................. 49<br />

주변장치 제어 레지스터.............................................................................................................. 50<br />

리얼타임 클록 .............................................................................................................................. 52<br />

시스템 제어 레지스터.................................................................................................................. 52<br />

TPC93A의 메모리맵 .................................................................................................................... 53<br />

TPC91A와 TPC93A의 메모리 차이점 ........................................................................................ 54<br />

특수릴레이 ................................................................................................................................... 55<br />

제 5 장 기본명령어........................................................................................................................... 59<br />

기본명령어 ................................................................................................................................... 60<br />

LOAD,LOADN, OT......................................................................................................................62<br />

- 3 -


- 4 -<br />

TinyPLC TPC9X User’s Manual<br />

NOT, AN,IOR ............................................................................................................................... 63<br />

ANDS,ORS ................................................................................................................................... 66<br />

SETOUT, RSTOUT ...................................................................................................................... 69<br />

DF, DFN ........................................................................................................................................ 71<br />

TON, TAON .................................................................................................................................. 72<br />

KTON, KTAON ............................................................................................................................ 74<br />

TOFF, TAOFF............................................................................................................................... 76<br />

CTU ............................................................................................................................................... 79<br />

CTD ............................................................................................................................................... 80<br />

UP/DOWN COUNTER.................................................................................................................82<br />

KCTU ............................................................................................................................................ 83<br />

KCTD ............................................................................................................................................ 84<br />

MCS, MCSCLR............................................................................................................................. 85<br />

STEPSET....................................................................................................................................... 88<br />

STEPOUT...................................................................................................................................... 91<br />

비교명령 ....................................................................................................................................... 92<br />

제 6 장 응용명령어........................................................................................................................... 93<br />

워드와 더블워드 저장방식.......................................................................................................... 95<br />

2 진수와 10 진수, 16 진수 ............................................................................................................ 96<br />

WMOV, DWMOV ........................................................................................................................ 97<br />

WXCHG, DWXCHG ....................................................................................................................98<br />

FMOV............................................................................................................................................ 99<br />

GMOV......................................................................................................................................... 100<br />

WINC, DWINC WDEC, DWDEC ..............................................................................................101<br />

WADD, DWADD........................................................................................................................ 102<br />

WSUB, DWSUB .........................................................................................................................103<br />

WMUL, DWMUL .......................................................................................................................104<br />

WDIV, DWDIV........................................................................................................................... 106<br />

WOR, DWOR.............................................................................................................................. 107<br />

WXOR, DWXOR ........................................................................................................................ 108<br />

WAND, DWAND........................................................................................................................ 109<br />

WROL,DWROL.......................................................................................................................... 110<br />

WROR,DWROR ......................................................................................................................... 111<br />

GOTO,LABEL ............................................................................................................................ 112<br />

CALLS,SBRT,RET..................................................................................................................... 113<br />

TND............................................................................................................................................. 114<br />

제 7 장 FUNC형 명령어 소개........................................................................................................ 115<br />

FUNC형 명령어란...................................................................................................................... 116<br />

FUNC형 명령 사용법................................................................................................................. 117<br />

제 8 장 FUNC형 연산식................................................................................................................ 121<br />

FUNC형 명령어에서의 연산식................................................................................................. 122


TinyPLC TPC9X User’s Manual<br />

연산자 사용법 ............................................................................................................................ 123<br />

+, - 연산자................................................................................................................................... 125<br />

*, / 연산자 ................................................................................................................................... 125<br />

MOD 연산자 ............................................................................................................................... 126<br />

^ 연산자 ...................................................................................................................................... 126<br />

AND 연산자................................................................................................................................ 127<br />

OR 연산자................................................................................................................................... 127<br />

XOR 연산자................................................................................................................................ 128<br />

> 연산자 (우 쉬프트)................................................................................................................ 128<br />

수학함수 ..................................................................................................................................... 129<br />

SIN, COS, TAN ...........................................................................................................................129<br />

ASIN, ACOS, ATAN .................................................................................................................. 130<br />

SINH, COSH, TANH .................................................................................................................. 131<br />

SQR ............................................................................................................................................. 132<br />

EXP.............................................................................................................................................. 132<br />

LOG, LOG10 .............................................................................................................................. 133<br />

FABS ........................................................................................................................................... 133<br />

FLOOR ........................................................................................................................................ 134<br />

ABS ............................................................................................................................................. 134<br />

비교하기 ..................................................................................................................................... 135<br />

IF.................................................................................................................................................. 135<br />

컴퓨터에서의 실수사용 ............................................................................................................ 137<br />

인덱스 지정 ................................................................................................................................ 138<br />

제 9 장 LCD 디스플레이 ............................................................................................................... 141<br />

TINYPLC에서의 LCD디스플레이............................................................................................. 142<br />

CLS.............................................................................................................................................. 145<br />

CSROFF ...................................................................................................................................... 145<br />

CSRON........................................................................................................................................ 145<br />

PRINT.......................................................................................................................................... 146<br />

LOC ............................................................................................................................................. 146<br />

DEC ............................................................................................................................................. 147<br />

HEX............................................................................................................................................. 148<br />

FLOAT ........................................................................................................................................ 149<br />

FP( ) ............................................................................................................................................. 149<br />

제 10 장 7 세그먼트 디스플레이 ................................................................................................... 151<br />

TINYPLC에서의 7 세그먼트 디스플레이 ................................................................................. 152<br />

CSGDEC ..................................................................................................................................... 154<br />

CSGHEX ..................................................................................................................................... 154<br />

CSGNPUT................................................................................................................................... 155<br />

CSGXPUT................................................................................................................................... 156<br />

- 5 -


- 6 -<br />

TinyPLC TPC9X User’s Manual<br />

제 11 장 A/D, PWM, 고속카운터.................................................................................................. 159<br />

A/D변환 ...................................................................................................................................... 160<br />

PWM............................................................................................................................................ 167<br />

고속 카운터 ................................................................................................................................ 173<br />

제 12 장 기타기능........................................................................................................................... 175<br />

온도센싱 ..................................................................................................................................... 176<br />

키패드 입력 ................................................................................................................................ 178<br />

펄스 출력 .................................................................................................................................... 182<br />

STEPPULSE................................................................................................................................ 182<br />

STEPSTOP .................................................................................................................................. 183<br />

제 13 장 MODBUS 데이터 통신 ................................................................................................... 187<br />

MODBUS 데이터 통신 .............................................................................................................. 188<br />

MODBUS에 대하여… ............................................................................................................... 190<br />

펑션코드 01 : READ COIL STATUS.............................................................................................. 192<br />

펑션코드 02 : READ INPUT STATUS ............................................................................................ 192<br />

펑션코드 03 : READ HOLDING REGISTERS ................................................................................. 194<br />

펑션코드 04 : READ INPUT REGISTERS....................................................................................... 194<br />

펑션코드 05 : FORCE SINGLE COIL............................................................................................. 195<br />

펑션코드 06 : PRESET SINGLE REGISTERS.................................................................................. 196<br />

펑션코드 15 : FORCE MULTIPLE COILS ...................................................................................... 197<br />

펑션코드 16 : PRESET MULTIPLE REGS ...................................................................................... 198<br />

에러처리 ..................................................................................................................................... 199<br />

MODBUS 셋업하기 ................................................................................................................... 200<br />

제 14 장 RS232 범용통신............................................................................................................... 203<br />

RS232 통신 ................................................................................................................................. 204<br />

RS232 통신 설정......................................................................................................................... 205<br />

데이터 송신 ................................................................................................................................ 206<br />

TX................................................................................................................................................ 207<br />

PUTSTR ...................................................................................................................................... 207<br />

TBF의 활용 ................................................................................................................................. 208<br />

PUTA........................................................................................................................................... 208<br />

PUTA2......................................................................................................................................... 209<br />

데이터 송신상태 확인방법........................................................................................................ 210<br />

포맷화된 송신 ............................................................................................................................ 211<br />

HP................................................................................................................................................ 211<br />

데이터 수신 ................................................................................................................................ 212<br />

RBF로 수신................................................................................................................................. 217<br />

ASCII코드 변환.......................................................................................................................... 219


- 7 -<br />

TinyPLC TPC9X User’s Manual<br />

GETHEXVAL............................................................................................................................. 220<br />

RS232 송수신 회로..................................................................................................................... 221<br />

TPC91A에서 RS232 사용 .......................................................................................................... 223<br />

TPC93A에서 RS232 사용 .......................................................................................................... 224<br />

RS485 사용 ................................................................................................................................. 225<br />

제 15 장 기타기능........................................................................................................................... 227<br />

기타 FUNC형 명령어................................................................................................................. 228<br />

FOR ............................................................................................................................................. 228<br />

레지스터 ..................................................................................................................................... 229<br />

테이블 변환 ................................................................................................................................ 230<br />

D = 테이블명 (인덱스)............................................................................................................... 232<br />

테이블 정의 명령........................................................................................................................ 233<br />

기타 명령어 ................................................................................................................................ 236<br />

COUNTRESET ........................................................................................................................... 236<br />

고속카운터 자동 비교(COMPARE)..........................................................................................237<br />

COMPARE.................................................................................................................................. 237<br />

제 16 장 TPCWORKS 사용법 ...................................................................................................... 239<br />

TPCWORKS의 개요 ..................................................................................................................... 240<br />

TPCWORKS 설치 ......................................................................................................................... 241<br />

TPCWORKS 사용법 기초.......................................................................................................... 244<br />

PLC SETUP................................................................................................................................. 247<br />

이름짓기 ..................................................................................................................................... 250<br />

파일의 오픈 및 저장................................................................................................................... 253<br />

다운로드와 실행 ........................................................................................................................ 255<br />

레더작성용 아이콘 툴바............................................................................................................ 256<br />

LADDER 작성법 ........................................................................................................................ 257<br />

LADDER 편집 ............................................................................................................................ 260<br />

모니터링 ..................................................................................................................................... 264<br />

WATCH POINT.......................................................................................................................... 265<br />

타임 차트 모니터........................................................................................................................ 266<br />

메뉴 설명 .................................................................................................................................... 268<br />

환경설정 ..................................................................................................................................... 270<br />

제 17 장 입출력 회로..................................................................................................................... 275<br />

다운로드 케이블 연결................................................................................................................ 276<br />

USB-RS232 케이블 사용............................................................................................................ 280<br />

다운로드 시 발생되는 에러멧세지........................................................................................... 282<br />

TINYPLC 기본회로..................................................................................................................... 283<br />

입출력 회로 구성법.................................................................................................................... 284


TinyPLC TPC9X User’s Manual<br />

제 18 장 응용 노트......................................................................................................................... 287<br />

노트 1. 자기유지 (래치)회로..................................................................................................... 288<br />

노트 2. 인터록 회로.................................................................................................................... 291<br />

노트 3. 스위칭 회로.................................................................................................................... 293<br />

부록 ............................................................................................................................................. 295<br />

- 8 -


TinyPLC TPC9X User’s Manual<br />

제 1 장<br />

TinyPLC 소개<br />

- 9 -


TinyPLC TPC9X User’s Manual<br />

TinyPLC 의 개요<br />

이 책을 읽고 계신 분들은 프로그래머블 로직 콘트롤러 (이하 PLC)가 무엇인지는 잘 알고<br />

계실겁니다. 전통적으로 PLC 라 하면 아래 사진처럼 생긴 장치를 말합니다. 주로<br />

공장자동화분야에서 시퀀스제어나 자동제어의 메인 콘트롤러로 사용되고 있습니다.<br />

좀 복잡하게 생긴 이 장치의 내부구성을 보면 다음 그림과 같이 CPU, MEMORY, POWER<br />

SUPPLY 그리고 I/O, RELAY 등으로 구성되어 있습니다.<br />

CPU<br />

MEMORY<br />

I/O<br />

OPTO<br />

INPUT<br />

RELAY<br />

POWER SUPPLY<br />

Traditional PLC<br />

TinyPLC 는 위의 그림중 CPU, MEMORY, I/O 부분만을 반도체형으로 따로 제작한 것이며,<br />

다른 PLC 와 마찬가지로 LADDER LOGIC 으로 프로그램을 작성합니다.<br />

TinyPLC<br />

CPU<br />

MEMORY<br />

I/O<br />

OPTO<br />

INPUT<br />

RELAY<br />

POWER SUPPLY<br />

즉, 기존 PLC 에서 핵심 코어부분만을 “반도체형”으로 제작한 제품이 TinyPLC 입니다.<br />

- 10 -


반도체형 PLC 의 장점은 무엇인가?<br />

TinyPLC TPC9X User’s Manual<br />

PLC 를 사용해서, 제어반을 만들어 보신 분들은 그 불편함과 비용부담에 대해서 잘 알고<br />

계실것입니다. 작은 기계, 여러 개를 반복적으로 생산하기에는 적합하지 않은 방식이라는<br />

것에 대해서도 어느정도 공감하시리라 생각됩니다.<br />

수많은 선으로 일일이 배선을 해야하고, 소형케이스안에 실장하고 설치하는 일을<br />

반복하다보면, 이 모든 것을 한장의 PCB 로 만들 수 없을 까 하는 생각을 하게됩니다.<br />

이런식으로는 하루에 1 개 만드는것도<br />

어렵겠어<br />

그래서, “원칩마이컴 (MCU)”등으로 컨버젼하는 경우도 많이 있습니다만, 원칩마이컴에서<br />

사용하는 언어와 개발환경등은 PLC 유저가 감당하기에는 매우 벅찹니다. 뿐만 아니라<br />

현장에서 문제가 발생했을 경우의 유지보수에도 문제가 있습니다.<br />

MCU 로 개발하려면 에뮬레이터, 컴파일러<br />

가 있어야하고, C 언어로 개발해야되!<br />

개발하는데 시간도 오래걸리고, 현장에서<br />

문제생기면 정말 골치가 아파!<br />

PLC 는 노트북하고 RS232 케이블 하<br />

나만 있으면 개발할 수 있는데…<br />

- 11 -


TinyPLC TPC9X User’s Manual<br />

TinyPLC 는 “반도체형 PLC”로 마치 원칩마이컴 처럼 PCB 에 장착하여 사용할 수 있는<br />

제품입니다. PLC 에서 사용하는 프로그래밍 방식인 “레더 로직”을 그대로 사용할 수 있고,<br />

PC 와 RS232 로 연결하여, 간단하게 다운로드 및 모니터링을 할 수 있습니다.<br />

TinyPLC 는 PLC 의 장점과 “원칩마이컴”의 장점을 모두 가지고 있는 제품이라 하겠습니다.<br />

- 12 -


LADDER LOGIC 은 무엇인가?<br />

TinyPLC TPC9X User’s Manual<br />

레더로직은 한마디로 전기회로의 또다른 표현방식입니다. 다음은 모터를 On/Off 할 수 있는<br />

전기 회로입니다.<br />

START<br />

2<br />

3<br />

M<br />

STOP<br />

이 회로를 레더도로 표현하면 다음과 같이 됩니다.<br />

POWER<br />

LINE<br />

POWER<br />

LINE<br />

STOP<br />

START<br />

2<br />

M0<br />

3<br />

M<br />

일반적인 전기회로는 도면상에서 자유롭게 전기소자를 배치하고, 배선을 하는 방식으로<br />

회로를 그립니다.<br />

M<br />

- 13 -


TinyPLC TPC9X User’s Manual<br />

레더도에서는 몇가지 원칙을 지켜가면서 회로를 그리는 것입니다. 첫번째, 양쪽끝에<br />

수직으로 전원선을 그려줍니다.<br />

POWER<br />

LINE<br />

POWER<br />

LINE<br />

두번째, 마치 책을 쓰듯이 회로의 왼쪽에서 오른쪽으로, 그리고 위에서 아래쪽으로 회로를<br />

작성해 갑니다.<br />

POWER<br />

LINE<br />

POWER<br />

LINE<br />

STOP<br />

POWER<br />

LINE<br />

POWER<br />

LINE<br />

STOP<br />

START<br />

2<br />

M0<br />

3<br />

세번째, 전기소자 또는 디바이스의 심볼위에 이름을 적어줍니다. 위에 레더도에서 START,<br />

STOP 과 같은 이름을 말합니다.<br />

- 14 -


TinyPLC TPC9X User’s Manual<br />

이름을 적어주는데에는 몇가지 규칙이 있습니다. 예를 들어 내부 릴레이는 M0 과<br />

같은식으로 영문자 M 과 숫자(M 릴레이 번호)로 구성됩니다.<br />

네번쨰, 역할에 따라 정해진 심볼을 사용하는 것을 권장합니다. 다음과 같이 A 접점과<br />

B 접점에 따라 사용하는 심볼의 모양이 다릅니다.<br />

A 접점<br />

B 접점<br />

(누르면 ON 됨) (누르면 OFF 됨)<br />

출력접점은 둥근 원으로 표현합니다.<br />

Output<br />

PLC 제조회사에 따라 Ladder Logic 의 모양은 다소 차이가 있을수 있지만, 전체적인 모양은<br />

거의 비슷합니다. 앞의 레더도를 TinyPLC 에서 입력하면 다음과 같은 형태가 됩니다.<br />

P1 포트에 MOTOR 를 연결하는 것으로 가정한 것입니다.<br />

- 15 -


TinyPLC TPC9X User’s Manual<br />

TinyPLC 의 특징은?<br />

기존 PLC 의 장점과 “MCU (마이크로 콘트롤러)”의 장점을 모두 가지고 있는 제품입니다.<br />

기존 PLC 와 비슷한점은 …<br />

1. 레더로직을 주언어로 사용합니다.<br />

2. PC 와 RS232 케이블로 연결하여, 다운로드 및 모니터링합니다.<br />

3. 플레쉬메모리에 계속 새로운 프로그램을 다운로드할 수 있습니다.<br />

4. RS232 다운로드 케이블을 제거하면, 곧바로 현장에 적용할 수 있는 운영상태 (RUN<br />

MODE)가 됩니다.<br />

MCU (마이크로 콘트롤러)와 비슷한 점은…<br />

1. PCB (인쇄회로 기판)에 장착할 수 있습니다.<br />

2. 완제품 PLC 에 비해 상대적으로 가격이 저렴합니다.<br />

3. 양산품에 적용하기 위해 만들어 졌습니다.<br />

4. 최종제품의 크기를 작게 만들 수 있습니다. (기존 PLC 로 만드는것과 비교해서)<br />

- 16 -


TinyPLC TPC9X User’s Manual<br />

I/O 의 차이<br />

TinyPLC 코어모듈과 일반적인 PLC 의 가장 큰 차이점은 I/O 의 연결방식에 대한 차이입니다.<br />

5V<br />

S/W<br />

TinyPLC<br />

LED<br />

LED<br />

TinyPLC 코어모듈에는 5V 레벨의<br />

신호만 입출력 할 수 있습니다.<br />

스위치또는 LED 등의 소자는 바로<br />

연결할 수 있습니다.<br />

S/W<br />

Core<br />

Module<br />

GROUND<br />

TinyPLC 코어모듈의 I/O 에 릴레이와 같은 추가회로를 부착하면 기존 PLC 처럼 큰전압을<br />

사용하는 I/O 를 구성할 수 있습니다.<br />

LOAD<br />

24VDC<br />

INPUT<br />

TinyPLC<br />

Core<br />

Module<br />

OUTPUT<br />

LOAD<br />

24VDC<br />

24VDC<br />

코어모듈에 I/O 추가회로를 부착<br />

I/O 추가회로에 대한 자세한 설명은 “제 17 장 입출력 회로”편에서 자세히 소개하고 있습니다.<br />

- 17 -


TinyPLC TPC9X User’s Manual<br />

TinyPLC 의 응용분야<br />

기존에 PLC 로 할 수 있는 일의 대부분을 수행할 수 있으므로, PLC 의 응용분야와 동일<br />

합니다. 다만 최대 I/O 접점수가 128 점 미만이므로, 매우 복잡한 기기 (창고제어/ 발전기<br />

제어처럼 1000 점 이상의 I/O 포인트 소요)에는 적용할 수 없습니다.<br />

기존 PLC 보다는 가격이 저렴하고, 크기가 작으므로, 보다 작은 단위의 콘트롤기기에 응용될<br />

수 있습니다.<br />

예를들어, 중앙에 PC 를 배치하고, 공장 여러곳에 TinyPLC 를 설치한다음, RS485 통신을<br />

사용해서 데이터 수집 및 정보분석시스템에 응용할 수 있습니다.<br />

TinyPLC<br />

TinyPLC<br />

대량으로 양산하는 전용기 설게에 응용할 수 있습니다. PCB 를 사용하여 결선을 최소화 하고,<br />

최종제품의 크기를 작게 만들어, 다루기 편하게 합니다.<br />

컴프레셔 콘트롤기기, 생산수량 표시기, 온도제어기, 컨베이어 콘트롤, 폐수 처리기, 각종<br />

전용기기 콘트롤 박스, 데이터 수집 및 처리기, 포장기기 콘트롤러 등 사용분야는<br />

다양합니다.<br />

- 18 -


TinyPLC TPC9X User’s Manual<br />

제 2 장<br />

TPC9X<br />

시리즈 소개<br />

- 19 -


TinyPLC TPC9X User’s Manual<br />

TPC9X 시리즈에 대하여..<br />

PLC 의 본래 기능은 시퀀스 제어 또는 로직 제어정도로, 과거 릴레이 제어반을 대체하는<br />

역할이였지만, 요즘에는 단순 LADDER LOGIC 이외에도 여러가지 통신, 디스플레이, 키입력,<br />

아날로그처리와 관련된 기능에 대한 시장의 요구가 많은 편입니다.<br />

TinyPLC 가 처음 시장에 출시되었을 때에는 기존 PLC 를 좀더 작게 만든 “반도체형<br />

PLC”라는 점에 많은 의미를 두었습니다만, TPC9X 시리즈 에서는 단순히 작은 PLC 라기<br />

보다는 통신과 아날로그처리, 디스플레이 처리등을 원활히 처리할 수 있는 PLC 로 거듭나게<br />

되었습니다.<br />

물론 상당부분은 기존 TPC3X 의 컨셉과 유사하거나 일치하는 부분도 있습니다만, 기존<br />

TPC3X 코어를 업그레이드한 것이 아니라, 기초부터 새롭게 디자인하여 기존제품의 단점을<br />

극복한 제품입니다.<br />

무엇보다도, 통신의 원활한 처리에 중점을 두었고, 통신중에 레더실행에 영향을 미치지<br />

않도록 하였습니다.<br />

TPC3X 시리즈에서는 통신량의 변화에 따라, 레더의 스캔타임에 영향을 주는 일이<br />

있었습니다. 또한 많은 양의 통신요구가 있을때에는 일부 놓치는 현상도 있었습니다. TPC9X<br />

시리즈에서는 이러한 문제가 발생하지 않습니다.<br />

그리고, 대부분의 HMI 소프트웨어나 TOUCH 제품군에 서 지원하고 있는 프로토콜인<br />

MODBUS RTU 를 지원하여, 타사의 제품과 원활하게 통신할 수 있도록 하였습니다.<br />

또한, 고가의 PLC 에서 볼 수 있는 실수연산 기능을 탑재하였습니다. TPC9X 시리즈는<br />

32 비트 실수처리 능력을 가지고 있으며, 4 칙연산을 비롯한 SIN, COS, LOG 와 같은<br />

수학함수도 사용할 수 있어, 복잡한 연산을 필요로하는 어플리케이션에 적합합니다.<br />

그리고, 최대 16 채널 A/D 입력과 12 채널 PWM 기능을 서포트합니다. PWM 출력은 D/A<br />

변환기로도 사용할 수 있어, 아날로그 신호를 처리와 관련된 능력이 향상되었습니다.<br />

TPC9X시리즈를 사용하기 위한 소프트웨어인 TPCworks는 저희회사 홈페이지<br />

www.comfile.co.kr에서 무료로 다운로드받을 수 있습니다.<br />

- 20 -


TinyPLC TPC9X User’s Manual<br />

기존제품과의 호환성<br />

TPC9X 시리즈는 기존 TPC3X 시리즈와 많은 부분에서 업그레이드가 단행된 제품입니다.<br />

따라서 기존 TPC3X 용으로 작성된 레더프로그램을 TPC9X 시리즈에서 그대로 사용하는<br />

것은 불가능합니다.<br />

TPC3X 용으로 작성된 레더로직을 TPC9X 시리즈용으로 바꾸기 위해서는 상당부분 기존<br />

소스에서 수정을 해주어야 합니다.<br />

첫번째 달라진점은 TPC3X 에서 사용하던 릴레이 표현방식을 TPC9X 에서는 좀더 간편한<br />

방식으로 변경하였습니다.<br />

기존방식은 P1:3 과 같이 콜론(: )을 중간에 삽입하는 방식으로, 불편함을 호소하는<br />

유저분들이 많이 있었습니다. 그래서 TPC9X 시리즈 에서는 콜론없이 P19 과 같은 형태의<br />

릴레이 표현방식을 사용합니다.<br />

P0:1<br />

M2:1<br />

P0:3<br />

P1<br />

M17<br />

P3<br />

두번째, TPC3X 시리즈에서는 DF, DFN 명령 (미분명령)사용시 M 릴레이를 써주어야 하지만,<br />

TPC9X 시리즈에서는 그럴필요가 없습니다. DF, DFN 명령어는 별도의 릴레이 없이<br />

동작되도록 수정보완 되었습니다.<br />

P1 M8 P3<br />

- 21 -


TinyPLC TPC9X User’s Manual<br />

세번째, 응용명령어에서 데이터를 저장하는 순서가 변경되었습니다. 기존 TPC3X 에서는<br />

HIGH BYTE 를 먼저 저장하고, LOW BYTE 를 뒤에 저장하는 방식이였지만,<br />

TPC9X 시리즈에서는 LOW BYTE 를 먼저 저장하는 방식으로 변경하였습니다.<br />

Store 0x1234<br />

Address<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

TPC3X<br />

0x12<br />

0x34<br />

Address<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

TPC9x<br />

0x34<br />

0x12<br />

LCD 와, 7 세그먼트, 키패드 방식과 명령어도 변경되었습니다.<br />

ALCD module<br />

GND<br />

5V<br />

RX<br />

CLCD module<br />

GND<br />

5V<br />

TX<br />

TPC3X<br />

TPC9X<br />

TPC3X 의 경우 RS232 방식으로 되어<br />

있고, I/O 핀 사용에 제한이 없었습니다만,<br />

이 방식은 레더스캔에 많은 부하를 주어,<br />

스캔타임을 느리게 만드는 원인이<br />

되었습니다.<br />

TPC9X 에서는 I2C 방식으로 되어 있고,<br />

정해진 핀 (SCL, SDA 핀)을 사용해야<br />

합니다. 메인칩에 내장되어 있는<br />

하드웨어를 사용하기 때문에 레더스캔에<br />

영향을 주지 않는 방식입니다.<br />

이외에도 여러가지 사소한 변경이 있습니다. 기존 소스를 그대로 사용하는 것보다, 아예<br />

처음부터 새로입력하는 방식으로 컨버젼하는 것이 더 효율적일 것 같습니다.<br />

기존 TPC3X 사용자들에게는 다소 혼동을 줄 수 있는 내용이겠으나, 기존제품의 단점을<br />

극복하는 과정에서 불가피하게 수정된 부분이라는 점을 양해하여 주시기바랍니다.<br />

- 22 -


TinyPLC TPC9X User’s Manual<br />

큐블록과 TinyPLC<br />

저희 컴파일 테크놀로지에서 출시되고 있는 또하나의 Embedde Computer 제품인 “큐블록”<br />

제품군이 있습니다. 이 제품군은 BASIC 언어와 Ladder 로직을 동시에 사용할 수 있는<br />

제품입니다만, 실제로는 BASIC 언어에 초점이 맞추어져 있습니다.<br />

TinyPLC 는 레더로직만으로 프로그램을 작성할 수있으므로 , BASIC 언어를 사용해본 적이<br />

없는 기존 PLC 유저들에게는 TinyPLC 제품이 더욱 쉽게 접근할 수 있는 제품입니다.<br />

TPC9X 시리즈는 최소 1mS 의 고속 스캔타임을 지원하며, 다양한 레더 특수기능 코멘드를<br />

지원하여, 레더로직에서 실수연산, LCD 표시등의 기능을 사용할 수 있습니다. 다음은<br />

TinyPLC 와 큐블록을 비교해놓은 표입니다.<br />

TinyPLC<br />

큐블록<br />

스캔타임<br />

1mS 부터<br />

(레더용량에 따라 가변)<br />

10mS 고정스캔타임<br />

또는 레더에 따라 가변<br />

레더의 릴레이영역 TPC91A 은 2.5KB<br />

TPC93A 은 4.5KB<br />

CB280 의 경우 1KB<br />

CB290 의 경우 4KB<br />

레더에서 실수연산 가능 불가능<br />

레더에서 디스플레이 가능 불가능<br />

레더에서 통신 가능 불가능<br />

사용언어 Ladder Logic 만 사용 BASIC 과 Ladder Logic<br />

비고<br />

Core Module 의 System<br />

자원을 Ladder 쪽에서<br />

100% 사용함<br />

Core Module 의 System<br />

자원을 BASIC 과<br />

Ladder 가 공유하는 방식,<br />

제품 TPC91A, TPC93A CB220, CB280, CB290 등<br />

명령어수 80 여개 200 여개<br />

어떤 제품을 선택해야 합니까?<br />

만들고자 하는 제품이 비슷하다고 가정했을 때, 당신이 어떤분야에 경험이 있는지에 따라서,<br />

큐블록과 TinyPLC 중 하나를 선택하실 수 있습니다.<br />

BASIC 언어를 다루어본 경험 (VISUAL BASIC 또는 PICBASIC)이 있다면 CUBLOC 을<br />

선택하십시오. CUBLOC 은 BASIC 언어가 중심이 되어 운영되는 콘트롤러입니다.<br />

만약, PLC 를 많이 사용해본 유저라면 TinyPLC 가 훨씬 편리할 것입니다. TinyPLC 는 Ladder<br />

Logic 이 중심이 되어 운영되는 콘트롤러이기 때문입니다.<br />

- 23 -


TinyPLC TPC9X User’s Manual<br />

두 제품은 비슷한 하드웨어환경을 사용하고 있지만, CUBLOC 은 BASIC 언어를 처리하는<br />

쪽에 무게를 두었고, TinyPLC 는 Ladder logic 을 처리하는 쪽에 무게를 둔 제품입니다.<br />

이 그래프는 시스템자원 활용상태를 표현한 것입니다. 큐블록에서는 시스템 자원의<br />

70%정도를 BASIC 에서 사용하고 있으므로, Ladder Logic 은 베이직을 보조하는 용도로<br />

사용됩니다.<br />

TinyPLC 에서는 시스템 자원의 100%를 Ladder Logic 에서 활용하고 있으므로, 모든<br />

I/O 포트와 ADC, PWM 등을 Ladder Logic 에서 콘트롤할 수 있습니다.<br />

일반적으로 BASIC 언어로는 통신, 그래픽, 유저인터페이스와 같은 복잡한 일을 처리하는데<br />

편리하고, Ladder Logic 은 시퀀스제어, 논리제어등을 하는데 편리합니다.<br />

난 BASIC 언어를 사용해 경험도 있고, 좀<br />

복잡한 기계를 만들어야 되서, 큐블록으로<br />

해야될거 같어!<br />

난, PLC 기술자라서 BASIC 언어를 잘<br />

몰라..나는 TinyPLC 가 편할거 같어.<br />

- 24 -


TinyPLC TPC9X User’s Manual<br />

이더넷(인터넷)을 사용한 원격 다운로드<br />

장비를 만들어서 전국적으로 납품하는 회사들의 가장 큰 골칫거리중 하나는 A/S 문제일<br />

것입니다. 처음부터 완벽한 장비를 만들어서 납품하면 되겠지만, 현실적으로는 불가능한<br />

일입니다. 그래서 현장에서의 문제점을 파악하고, 그 문제점이 해결된 새로운 프로그램을<br />

다운로드해주기 위해서, 출장은 불가피한 선택일 것입니다.<br />

하지만, 단순한 업그레이드나 정기점검을 위해서, 매번 먼거리를 출장가려면, 인건비와<br />

시간낭비가 만만치 않을 것입니다. 이를 위해서 개발된 방법이 “인터넷 접속을 통한<br />

다운로드 및 모니터링”입니다.<br />

최근, 인터넷 활성화에 힘입어, 집집마다 회사마다 DSL 인터넷 모뎀이 설치되어있지 않은<br />

곳이 없을 정도입니다. 이를 위해서 여러분들이 지불하고 있는 비용은 과거 인터넷<br />

고정 I/P 사용 요금보다는 월등히 저렴한 수준이며, 속도또한 만족스러울 것입니다.<br />

이런 환경을 적극 활용한다면 얼마나 좋을까? 하고 생각끝에 TinyPLC 에서도 인터넷 접속을<br />

통한 원격다운로드 툴을 개발하였습니다. 별도 판매품인 MAXPORT 를 구입하여, TinyPLC<br />

다운로드 RS232 포트 에 연결한뒤, 인터넷이 연결된 랜케이블을 접속해 준다면, 서울에서<br />

부산에 있는 기계에 새로운 레더프로그램을 다운로드할 수 있습니다.<br />

뿐만 아니라, 특정 릴레이상태를 모니터링 하면서, 기계의 동작상태를 체크할 수도 있고,<br />

데이터를 수집하는 것도 가능합니다. 물론, 데이터수집이나 동작체크를 위한 PC 측<br />

소프트웨어는 TinyPLC 의 제품군 영역에 속해있지는 않습니다만, 그 일을 수행하기 위한<br />

최소한의 하드웨어 환경을 저렴한 비용으로 구축할 수 있습니다.<br />

INTERNET<br />

MAXPORT<br />

PC<br />

TPC91A<br />

- 25 -


- 26 -<br />

TinyPLC TPC9X User’s Manual


TinyPLC TPC9X User’s Manual<br />

제 3 장<br />

TPC9X<br />

시리즈 코어모듈<br />

- 27 -


TinyPLC TPC9X User’s Manual<br />

코어모듈<br />

코어모듈이란 PLC 의 핵심기능만을 가지고 있는 CPU 모듈을 의미합니다. 코어모듈은 작은<br />

기판위에 여러 개의 반도체칩이 들어있는 “싱글보드 컴퓨터”와 같은 모습을 하고 있습니다.<br />

뒤집어서 아랫쪽을 보면 여러 개의 핀이 있는 것을 볼 수 있습니다.<br />

이들 핀의 대부분은 I/O 핀입니다. 나머지는 전원핀과 통신핀이 있습니다.<br />

• 전원핀 : 코어모듈에 전원을 공급해주는 역할을 합니다. VDD 단자에는 5V 를 공급해주고,<br />

VSS 단자에는 GND 를 연결해주면 됩니다.<br />

• 통신핀 : PC 와 연결해서 유저프로그램을 다운로드하는 통신핀과, 외부기기와 RS232<br />

(또는 RS422/485)접속을 통해 데이터를 주고 받을 수 있는 통신핀이 있습니다.<br />

• I/O 핀 : 외부에 입출력 기기들과 연결하여, 실질적인 제어를 담당하는 핀들입니다.<br />

TinyPLC 코어모듈의 I/O 핀은 Input 또는 Output 상태를 유저가 임의대로 결정할 수<br />

있으며, 일부핀들은 다른 용도 (AD 입력, PWM 출력, HIGH COUNT 입력)로<br />

사용가능합니다.<br />

코어모듈만으로 현장의 기기와 바로 연결하여 사용할 수는 없습니다. 왜냐하면, 코어모듈의<br />

I/O 핀은 5V 의 소신호를 다루기 때문입니다. 현장의 센서와 릴레등은 24V 또는 110V,<br />

220V 정도의 높은 전압을 사용합니다.<br />

그래서, 코어모듈을 I/O 보강회로를 갖춘 PCB 에 장착하여 사용합니다. 여기에는 두가지<br />

선택이 있을 수 있습니다.<br />

- 28 -


여러분이 직접 제작하신 PCB 를 사용하는 경우<br />

TinyPLC TPC9X User’s Manual<br />

제작하고자 하는 최종제품에 적합한 I/O 구성을 갖춘 보드를 직접 디자인하실 수 있습니다.<br />

예를 들어 RELAY 2 개, 센서입력 4 개, 온도센서 1 포인트등과 같이, I/O 를 입맛대로 구성할<br />

수 있습니다.<br />

단점은, PCB 를 제작할 수 있는 기술력을 보유하고 있어야 합니다. 입출력 회로는 본<br />

사용설명서에서 제공하고 있으므로, 따로 자료를 수집할 필요는 없습니다만, PCB 를<br />

설계하고 부품을 구해서 납땜하는 과정들을 거쳐야, 비로소 사용할 수 있는 상태가 됩니다.<br />

(아니면 이 과정을 대신해줄 외주용역업체와 일을 하시는 방법이 있습니다.)<br />

장점은, I/O 포인트의 구성을 최적화할 수 있으므로, 제조원가를 최대한 낮출수 있습니다.<br />

뿐만 아니라, PCB 의 형태를 여러분이 생각하고 계신 케이스의 외형에 맞추어, 컴팩트하게<br />

제작할 수 있으므로, 외관상 미려한 제품을 만드실 수 있게 됩니다.<br />

우리 기계에 딱맞는 나만의 PLC 를 만들고<br />

싶어..시중에 파는 PLC 는 적당한게 없어!<br />

TinyPLC 를 써서 만들어봐 !<br />

기존 PLC 에서 CPU 만 파는 따로 파는<br />

것이니까..여기에다가 자네가 원하는<br />

입출력을 구성하면 되!<br />

다음은 이전모델인 TPC3X 를 가지고<br />

업체에서 제작한 보드입니다.<br />

LCD 와 스위치, 파워서플라이,<br />

압력측정센서등을 모두 내장하고 있으며,<br />

압축포장기에서 사용되는 콘트롤러<br />

입니다.<br />

- 29 -


TinyPLC TPC9X User’s Manual<br />

베이스보드, 일체형 PLC 를 사용하는 경우<br />

따로 PCB 를 제작할 필요없이, 저희 회사에 판매하고 있는 “베이스보드” 나 “일체형 PLC”를<br />

사용하면, 간단하게 현장에서 바로 응용할 수 있습니다.<br />

여러분의 입맛에 딱맞는 I/O 구성을 할순 없지만, PCB 제작기술을 보유하고 있지 않거나,<br />

빠른시일안에 현장에 응용하고자 하는 분들에게 적합한 방법입니다.<br />

저희회사 판매하고 있는 I/O CELL 베이스<br />

보드와 TPC3X 시리즈로 제작된<br />

제어반입니다.<br />

- 30 -


TinyPLC TPC9X User’s Manual<br />

코어모듈비교<br />

현재 2 종류의 TPC9X 시리즈 코어모듈이 출시되어 있습니다. (2006 년 12 월 기준)<br />

외형<br />

TPC91A<br />

TPC93A<br />

프로그램 메모리 64KB 192KB<br />

I/O 포인트 48 포인트 80 포인트<br />

총 데이터 메모리 2.5KB 4.5KB<br />

P 릴레이 48 점 80 점<br />

M 릴레이 2048 점 4096 점<br />

K 릴레이 2048 점 2048 점<br />

T 영역 (타이머) 100 워드 256 워드<br />

C 영역 (카운터) 50 워드 100 워드<br />

D 영역 (데이터) 256 워드 256 워드<br />

Y 영역 (주변장치) 50 워드 100 워드<br />

A 영역 (실수) 50 더블워드 100 더블워드<br />

B 영역 (32 비트 50 더블워드 100 더블워드<br />

정수)<br />

DF,DFN 허용갯수 2048 개 4096 개<br />

A/D (10 비트) 8 채널 16 채널<br />

PWM (16 비트, 6 채널 12 채널<br />

DAC)<br />

고속카운터 2 채널 2채널<br />

(32 비트)<br />

RS232 1 채널 3채널<br />

펙케지 64 핀 108 핀<br />

스캔타임 최소 1mS 부터 최소 1mS 부터<br />

- 31 -


TinyPLC TPC9X User’s Manual<br />

TPC91A<br />

TPC91A 은 64 핀의 모듈형 펙키지로 되어 있으며, 48 핀의 I/O 포트를 내장하고 있습니다.<br />

SOUT<br />

SIN<br />

ATN<br />

VSS<br />

SS_P0<br />

(Input_only)SCK_P1<br />

MOSI_P2<br />

MISO_P3<br />

P4<br />

PWM0_P5<br />

PWM1_P6<br />

PWM2_P7<br />

(CUNET)SCL_P8<br />

(CUNET)SDA_P9<br />

P10<br />

P11<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

13<br />

14<br />

15<br />

16<br />

17<br />

18<br />

19<br />

20<br />

21<br />

22<br />

23<br />

24<br />

25<br />

26<br />

27<br />

28<br />

29<br />

30<br />

31<br />

32<br />

VDD<br />

VSS<br />

RES<br />

N/C<br />

P16<br />

P17<br />

P18<br />

P19_PWM3<br />

P20_PWM4_INT0<br />

P21_PWM5_INT1<br />

P22_INT2<br />

P23_INT3<br />

P15_HCNT1<br />

P14_HCNT0<br />

P13<br />

P12<br />

TX1<br />

RX1<br />

AVDD<br />

N/C<br />

ADC0_P24<br />

ADC1_P25<br />

ADC2_P26<br />

ADC3_P27<br />

P47<br />

P46<br />

P45<br />

P44<br />

P43<br />

P42<br />

P41<br />

P40<br />

33<br />

34<br />

35<br />

36<br />

37<br />

38<br />

39<br />

40<br />

41<br />

42<br />

43<br />

44<br />

45<br />

46<br />

47<br />

48<br />

49<br />

50<br />

51<br />

52<br />

53<br />

54<br />

55<br />

56<br />

57<br />

58<br />

59<br />

60<br />

61<br />

62<br />

63<br />

64<br />

TTLTX1<br />

TTLRX1<br />

AVREF<br />

P48<br />

P31_ADC7<br />

P30_ADC6<br />

P29_ADC5<br />

P28_ADC4<br />

P32<br />

P33<br />

P34<br />

P35<br />

P36<br />

P37<br />

P38<br />

P39<br />

TPC91A<br />

아래 표는 핀번호 순이 아닌 기능별로 정리된 것입니다.<br />

이름 핀번호 I/O Port Block 설명<br />

SOUT 1 OUT DOWNLOAD 를 위한 SERIAL OUTPUT<br />

SIN 2 IN DOWNLOAD 를 위한 SERIAL INPUT<br />

ATN 3 IN DOWNLOAD 를 위한 SERIAL INPUT<br />

VSS 4 POWER GROUND<br />

P0 5 I/O SPI 의 SS<br />

P1 6 Input SPI 의 SCK<br />

P2 7 I/O SPI 의 MOSI<br />

P3 8 I/O Block 0 SPI 의 MISO<br />

P4 9 I/O<br />

P5 10 I/O PWM0<br />

P6 11 I/O PWM1<br />

P7 12 I/O<br />

PWM2<br />

P8 13 I/O CuNET 의 SCL<br />

P9 14 I/O CuNET 의 SDA<br />

P10 15 I/O<br />

P11 16 I/O Block 1<br />

P12 32 I/O<br />

P13 31 I/O<br />

P14 30 I/O High Counter Channel 0<br />

P15 29 I/O<br />

High Counter Channel 1<br />

P16 21 I/O Co-processor 의 SCL (1)<br />

P17 22 I/O Co-processor 의 SDA (1)<br />

P18 23 I/O Co-processor 의 INT (1)<br />

- 32 -


TinyPLC TPC9X User’s Manual<br />

P19 24 I/O Block 2 PWM3<br />

P20 25 I/O PWM4 / INT0<br />

P21 26 I/O PWM5 / INT1<br />

P22 27 I/O INT2<br />

P23 28 I/O<br />

INT3<br />

P24 37 I/O ADC0 : AD Channel 0<br />

P25 38 I/O ADC1 : AD Channel 1<br />

P26 39 I/O ADC2 : AD Channel 2<br />

P27 40 I/O Block 3 ADC3 : AD Channel 3<br />

P28 56 I/O ADC4 : AD Channel 4<br />

P29 55 I/O ADC5 : AD Channel 5<br />

P30 54 I/O ADC6 : AD Channel 6<br />

P31 53 I/O<br />

ADC7 : AD Channel 7<br />

P32 57 I/O<br />

P33 58 I/O<br />

P34 59 I/O<br />

P35 60 I/O Block 4<br />

P36 61 I/O<br />

P37 62 I/O<br />

P38 63 I/O<br />

P39 64 I/O<br />

P40 48 I/O<br />

P41 47 I/O<br />

P42 46 I/O<br />

P43 45 I/O Block 5<br />

P44 44 I/O<br />

P45 43 I/O<br />

P46 42 I/O<br />

P47 41 I/O<br />

P48 52 OUT CH1 RS485 사용시 (송신허가, HIGH<br />

ACTIVE 출력)<br />

VDD 17 IN 전원전압, 4.5V~5.5V 공급<br />

VSS 18 IN GROUND<br />

RES 19 IN 리셋단자, LOW 입력 시 리셋 됨,<br />

평상시 HIGH 입력 또는 OPEN<br />

TX1 33 RS232 채널 1, +/- 12V 데이터 출력<br />

RX1 34 RS232 채널 1, +/- 12V 데이터 입력<br />

AVDD 35 ADC 용 전원전압<br />

TTLTX1 49 RS232 채널 1, 5V (TTL 레벨) 데이터 출력<br />

TTLRX1 50 RS232 채널 1, 5V (TTL 레벨) 데이터 입력<br />

AVREF 51 ADC 용 리퍼런스전압<br />

- 33 -


TinyPLC TPC9X User’s Manual<br />

TPC93A<br />

TPC93A 은 108 핀의 모듈형 펙키지로 되어 있으며, 80 핀의 I/O 포트를 내장하고 있습니다.<br />

Input<br />

Only<br />

Sout<br />

Sin<br />

Atn<br />

Vss<br />

P0<br />

SCK / P1<br />

MOSI / P2<br />

MISO / P3<br />

P4<br />

PWM0 / P5<br />

PWM1 / P6<br />

PWM2 / P7<br />

RX2 / P8<br />

TX2 / P9<br />

P10<br />

PWM6 / P11<br />

PWM7 / P12<br />

PWM8 / P13<br />

P14<br />

P15<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

13<br />

14<br />

15<br />

16<br />

17<br />

18<br />

19<br />

20<br />

21<br />

22<br />

23<br />

24<br />

25<br />

26<br />

27<br />

28<br />

29<br />

30<br />

31<br />

32<br />

33<br />

34<br />

35<br />

36<br />

37<br />

38<br />

39<br />

40<br />

Vdd<br />

Vss<br />

RES<br />

VBB<br />

P16 / AD0<br />

P17 / AD1<br />

P18 / AD2<br />

P19 / AD3<br />

P20 / AD4<br />

P21 / AD5<br />

P22 / AD6<br />

P23 / AD7<br />

P24<br />

P25<br />

P26<br />

P27 / PWM3<br />

P28 / PWM4/<br />

INT0<br />

P29 / PWM5/ INT 1<br />

P30 / INT2<br />

P31 / INT3<br />

TPC93A<br />

Vdd<br />

Vdd<br />

N/C<br />

N/C<br />

P64<br />

P65<br />

P66<br />

P67<br />

P68<br />

P69<br />

P70<br />

P71<br />

P80<br />

P81<br />

81<br />

82<br />

83<br />

84<br />

85<br />

86<br />

87<br />

88<br />

89<br />

90<br />

91<br />

92<br />

93<br />

94<br />

TXE<br />

RXE<br />

AVdd<br />

Vdd<br />

AD8 / P32<br />

AD9 / P33<br />

AD10 / P34<br />

AD11 / P35<br />

AD12 / P36<br />

AD13 / P37<br />

AD14 / P38<br />

AD15 / P39<br />

HCNT1 / P47<br />

HCNT0 / P46<br />

P45<br />

P44<br />

TX1 / P43<br />

RX1 / P42<br />

SDA / P41<br />

SCL / P40<br />

41<br />

42<br />

43<br />

44<br />

45<br />

46<br />

47<br />

48<br />

49<br />

50<br />

51<br />

52<br />

53<br />

54<br />

55<br />

56<br />

57<br />

58<br />

59<br />

60<br />

61<br />

62<br />

63<br />

64<br />

65<br />

66<br />

67<br />

68<br />

69<br />

70<br />

71<br />

72<br />

73<br />

74<br />

75<br />

76<br />

77<br />

78<br />

79<br />

80<br />

TtlTXE<br />

TtlRXE<br />

AVref<br />

Vss<br />

P48<br />

P49<br />

P50<br />

P51 / PWM9<br />

P52 / PWM10<br />

P53 / PWM11<br />

P54<br />

P55<br />

P63<br />

P62<br />

P61<br />

P60<br />

P59<br />

P58<br />

P57 / TX3<br />

P56 / RX3<br />

Vss<br />

Vss<br />

N/C<br />

N/C<br />

P72<br />

P73<br />

P74<br />

P75<br />

P76<br />

P77<br />

P78<br />

P79<br />

P82<br />

N/C<br />

95<br />

96<br />

97<br />

98<br />

99<br />

100<br />

101<br />

102<br />

103<br />

104<br />

105<br />

106<br />

107<br />

108<br />

I/O 포트를 제외한 나머지 핀에 대한 설명입니다.<br />

이름 핀번호 I/O 설명<br />

SOUT 1 OUT DOWNLOAD 를 위한 SERIAL OUTPUT<br />

SIN 2 IN DOWNLOAD 를 위한 SERIAL INPUT<br />

ATN 3 IN DOWNLOAD 를 위한 SERIAL INPUT<br />

VSS 4, 22, 64 POWER IN GROUND<br />

VDD 21, 44 POWER IN 4.5V to 5.5V 공급<br />

AVDD 43 POWER IN 아날로그 변환기를 위한 전원공급핀<br />

AVREF 63 IN 아날로그 변환기의 레퍼런스 전압공급<br />

VBB 24 POWER IN 밧데리 백업을 위한 밧데리 연결핀 (TPC 93A 에서는<br />

사용안함)<br />

RES 23 IN RESET 핀<br />

TTLTXE 61 OUT RS232 to TTL232 변환회로, TX 연결단자<br />

TTLRXE 62 IN RS232 to TTL232 변환회로, RX 연결단자<br />

TXE 41 OUT RS232 출력단자, 외부의 RS232 포트와 연결<br />

RXE 42 IN RS232 입력단자, 외부의 RS232 포트와 연결<br />

* TTL232 란 5V 레벨로 출력/입력되는 RS232 의 변형된 형태입니다. 본래 RS232 는 +12V 와<br />

–12V 로 신호를 입출력합니다.<br />

- 34 -


다음은 I/O 포트를 “포트블록”별로 나누어 설명한 것입니다.<br />

블록 이름 핀번호 I/O 특수기능 설명<br />

P0 5 I/O SPI 의 SS<br />

P1 6 Input SPI 의 SCK 입력전용핀입니다.<br />

P2 7 Input SPI 의 MOSI 입력전용핀입니다.<br />

0 P3 8 Input SPI 의 MISO 입력전용핀입니다.<br />

P4 9 I/O<br />

P5 10 I/O PWM CHANNEL 0<br />

P6 11 I/O PWM CHANNEL 1<br />

P7 12 I/O PWM CHANNEL 2<br />

TinyPLC TPC9X User’s Manual<br />

1<br />

2<br />

3<br />

P8 13 I/O TTL232 RX2<br />

P9 14 I/O TTL232 TX2<br />

P10 15 I/O<br />

P11 16 I/O PWM CHANNEL 6<br />

P12 17 I/O PWM CHANNEL 7<br />

P13 18 I/O PWM CHANNEL 8<br />

P14 19 I/O<br />

P15 20 I/O<br />

P16 25 I/O AD CHANNEL 0<br />

P17 26 I/O AD CHANNEL 1<br />

P18 27 I/O AD CHANNEL 2<br />

P19 28 I/O AD CHANNEL 3<br />

P20 29 I/O AD CHANNEL 4<br />

P21 30 I/O AD CHANNEL 5<br />

P22 31 I/O AD CHANNEL 6<br />

P23 32 I/O AD CHANNEL 7<br />

P24 33 I/O Co-processor SCL 1)<br />

P25 34 I/O Co-processor SDA 1)<br />

P26 35 I/O Co-processor INT 1)<br />

P27 36 I/O PWM3<br />

P28 37 I/O PWM4 / INT0<br />

P29 38 I/O PWM5 / INT1<br />

P30 39 I/O INT2<br />

P31 40 I/O INT3<br />

1) 코프로세서와 연결하기 위한 통신선 (추가 기능구현을 위한 코프로세서와 연결하는<br />

핀이므로, 가능한 사용하지 말고, 남겨두시기 바랍니다.)<br />

- 35 -


TinyPLC TPC9X User’s Manual<br />

블록 이름 핀번호 I/O 특수기능 설명<br />

P32 45 I/O AD CHANNEL 8<br />

P33 46 I/O AD CHANNEL 9<br />

P34 47 I/O AD CHANNEL 10<br />

4 P35 48 I/O AD CHANNEL 11<br />

P36 49 I/O AD CHANNEL 12<br />

P37 50 I/O AD CHANNEL 13<br />

P38 51 I/O AD CHANNEL 14<br />

P39 52 I/O AD CHANNEL 15<br />

5<br />

6<br />

7<br />

P40 60 I/O SCL CUNET 클록<br />

P41 59 I/O SDA CUNET 데이터<br />

P42 58 I/O RX1 TTLRX 채널 1<br />

P43 57 I/O TX1 TTLTX 채널 1<br />

P44 56 I/O<br />

P45 55 I/O<br />

P46 54 I/O HCNT0 고속 카운터 채널 0<br />

P47 53 I/O HCNT1 고속 카운터 채널 1<br />

P48 65 I/O<br />

P49 66 I/O<br />

P50 67 I/O<br />

P51 68 I/O PWM CANNEL 9<br />

P52 69 I/O PWM CANNEL 10<br />

P53 70 I/O PWM CANNEL 11<br />

P54 71 I/O<br />

P55 72 I/O<br />

P56 80 I/O RX3 TTLRX 채널 3<br />

P57 79 I/O TX3 TTLTX 채널 3<br />

P58 78 I/O<br />

P59 77 I/O<br />

P60 76 I/O<br />

P61 75 I/O<br />

P62 74 I/O<br />

P63 73 I/O<br />

- 36 -


TinyPLC TPC9X User’s Manual<br />

블록 이름 핀번호 I/O 특수기능 설명<br />

P64 85 I/O<br />

P65 86 I/O<br />

P66 87 I/O<br />

8 P67 88 I/O<br />

P68 89 I/O<br />

P69 90 I/O<br />

P70 91 I/O<br />

P71 92 I/O<br />

9<br />

P72 99 I/O<br />

P73 100 I/O<br />

P74 101 I/O<br />

P75 102 I/O<br />

P76 103 I/O<br />

P77 104 I/O<br />

P78 105 I/O<br />

P79 106 I/O<br />

P80 93 Output CH1 RS485 TE Transmit Enable (Active High)<br />

P81 94 Output CH2 RS485 TE Transmit Enable (Active High)<br />

P82 107 Output CH3 RS485 TE Transmit Enable (Active High)<br />

- 37 -


TinyPLC TPC9X User’s Manual<br />

코어모듈의 I/O<br />

코어모듈의 I/O 포트는 입력과 출력중 하나를 유저가 결정하여 사용할 수 있는 포트입니다.<br />

TPCWORKS 의 PLCSETUP 에서 IN 또는 OUT 중 하나를 선택하십시오.<br />

어떤 핀은 입력전용으로만 사용할 수<br />

있습니다 .앞에서 설명한 모델별 PIN<br />

OUT 을 참조하십시오.<br />

TPC93A 의 경우, P1,2,3 은 입력전용<br />

핀입니다.<br />

실행중 I/O 의 상태를 변경할 수 없습니다.<br />

입력핀은 하이 임피던스상태이며, 거의 전류가 흐르지 않는 상태입니다. 대략 3.5V 이상을<br />

High 로 판단하고, 1.4V 이하를 Low 로 판단합니다.<br />

VDD (5V)<br />

HIGH<br />

3.5V<br />

LOW<br />

1.4V<br />

GND (0V)<br />

출력핀은 High 출력시 20mA 정도가 흘러나옵니다. 이것을 소스전류라고 합니다. 출력핀에서<br />

Low 를 출력하고 있다면 외부로부터 20 mA 정도를 받아들일 수 있습니다 .이것을<br />

싱크전류라고 합니다.<br />

5V<br />

"Low"<br />

20mA<br />

"High"<br />

20mA<br />

GROUND<br />

TinyPLC<br />

- 38 -


TinyPLC TPC9X User’s Manual<br />

코어모듈 상태에서 입력/출력 핀 모두 최대 5V 만 입,출력할 수 있습니다 .이보다 높은 전압을<br />

입출력하려면 옵토커플러를 사용한, 별도의 추가회로가 필요합니다.<br />

다음은 I/O 포트에 출력하기위한 옵토커플러를 연결한 예입니다.<br />

High 가 출력되면 옵토커플러안에있는 LED 가 켜지고, 바로 옆에<br />

위치한 포토 TR 이 Turn-on 됩니다.<br />

I/O Port<br />

Opto-coupler<br />

Tr 에는 DC24V 를 연결할 수<br />

있습니다 .결과적으로 5V 의<br />

신호로 DC24V 를 On / Off 할 수<br />

있습니다.<br />

입력회로에도 옵토커플러가 사용되며, 위의 경우와는 정반대의 상황으로 회로를 구성하는<br />

것입니다. 옵토 커플러는 전기신호를 빛의 신호로 바꾸어, 주기 때문에 노이즈가 전달되지<br />

않는 다는 장점이 있습니다. 이러한 전압변환회로에 자주 사용되는 소자입니다. 자세한<br />

설명은 뒤에 나오는 “입출력 회로”편을 참고하시기 바랍니다.<br />

어떤핀은 I/O 기능이외에 AD 컨버터나, PWM 등과 연결되어 있는 경우가 있습니다 .이 경우<br />

둘중 하나를 선택해야 합니다. 즉, TPC91A 의 P24 핀의 경우, AD 컨버터로 사용하는 경우<br />

I/O 포트로 사용할 수 없습니다.<br />

주의사항<br />

어떠한 경우에도 I/O 포트에 코어모듈 전원전압 (0V - VDD)보다 0.5V 이상, 높은 전압또는<br />

낮은전압을 인가해서는 안됩니다. 이 경우 칩이 파손될 가능성이 있습니다.<br />

- 39 -


TinyPLC TPC9X User’s Manual<br />

다운로드 케이블 연결<br />

RS232 케이블을 사용해서 PC 의 COM 포트와 TPC 9X 코어모듈을 연결합니다.<br />

PC<br />

6<br />

7<br />

8<br />

9<br />

1<br />

2<br />

3<br />

4<br />

5<br />

Rx<br />

Tx<br />

DTR<br />

GND<br />

SOUT<br />

SIN<br />

ATN<br />

VSS<br />

SS_P0<br />

(Input_only)SCK_P1<br />

MOSI_P2<br />

MISO_P3<br />

P4<br />

PWM0_P5<br />

PWM1_P6<br />

PWM2_P7<br />

(CUNET)SCL_P8<br />

(CUNET)SDA_P9<br />

P10<br />

P11<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

13<br />

14<br />

15<br />

16<br />

17<br />

18<br />

19<br />

20<br />

21<br />

22<br />

23<br />

24<br />

25<br />

26<br />

27<br />

28<br />

29<br />

30<br />

31<br />

32<br />

VDD<br />

VSS<br />

RES<br />

N/C<br />

P16<br />

P17<br />

P18<br />

P19_PWM3<br />

P20_PWM4_INT0<br />

P21_PWM5_INT1<br />

P22_INT2<br />

P23_INT3<br />

P15_HCNT1<br />

P14_HCNT0<br />

P13<br />

P12<br />

TX1<br />

RX1<br />

AVDD<br />

N/C<br />

ADC0_P24<br />

ADC1_P25<br />

ADC2_P26<br />

ADC3_P27<br />

P47<br />

P46<br />

P45<br />

P44<br />

P43<br />

P42<br />

P41<br />

P40<br />

33<br />

34<br />

35<br />

36<br />

37<br />

38<br />

39<br />

40<br />

41<br />

42<br />

43<br />

44<br />

45<br />

46<br />

47<br />

48<br />

49<br />

50<br />

51<br />

52<br />

53<br />

54<br />

55<br />

56<br />

57<br />

58<br />

59<br />

60<br />

61<br />

62<br />

63<br />

64<br />

TTLTX1<br />

TTLRX1<br />

AVREF<br />

P48<br />

P31_ADC7<br />

P30_ADC6<br />

P29_ADC5<br />

P28_ADC4<br />

P32<br />

P33<br />

P34<br />

P35<br />

P36<br />

P37<br />

P38<br />

P39<br />

TPC91A<br />

동작을 위한 기본회로<br />

TinyPLC 를 동작시키기 위해서는 5V 전원이 필요합니다. 5V 전원을 VDD 단자에, GND 를<br />

VSS 단자에 연결하면,동작가능한 상태가 됩니다. 이 상태에서 PC 와 RS232 로 연결한뒤<br />

TPCWORKS 개발환경 소프트웨어로 레더 프로그램을 다운로드합니다.<br />

DC5V<br />

6<br />

7<br />

8<br />

9<br />

1<br />

2<br />

3<br />

4<br />

5<br />

Rx<br />

Tx<br />

DTR<br />

GND<br />

SOUT<br />

SIN<br />

ATN<br />

VSS<br />

SS_P0<br />

(Input_only)SCK_P1<br />

MOSI_P2<br />

MISO_P3<br />

P4<br />

PWM0_P5<br />

PWM1_P6<br />

PWM2_P7<br />

(CUNET)SCL_P8<br />

(CUNET)SDA_P9<br />

P10<br />

P11<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

13<br />

14<br />

15<br />

16<br />

17<br />

18<br />

19<br />

20<br />

21<br />

22<br />

23<br />

24<br />

25<br />

26<br />

27<br />

28<br />

29<br />

30<br />

31<br />

32<br />

VDD<br />

VSS<br />

RES<br />

N/C<br />

P16<br />

P17<br />

P18<br />

P19_PWM3<br />

P20_PWM4_INT0<br />

P21_PWM5_INT1<br />

P22_INT2<br />

P23_INT3<br />

P15_HCNT1<br />

P14_HCNT0<br />

P13<br />

P12<br />

TX1<br />

RX1<br />

AVDD<br />

N/C<br />

ADC0_P24<br />

ADC1_P25<br />

ADC2_P26<br />

ADC3_P27<br />

P47<br />

P46<br />

P45<br />

P44<br />

P43<br />

P42<br />

P41<br />

P40<br />

33<br />

34<br />

35<br />

36<br />

37<br />

38<br />

39<br />

40<br />

41<br />

42<br />

43<br />

44<br />

45<br />

46<br />

47<br />

48<br />

49<br />

50<br />

51<br />

52<br />

53<br />

54<br />

55<br />

56<br />

57<br />

58<br />

59<br />

60<br />

61<br />

62<br />

63<br />

64<br />

TTLTX1<br />

TTLRX1<br />

AVREF<br />

P48<br />

P31_ADC7<br />

P30_ADC6<br />

P29_ADC5<br />

P28_ADC4<br />

P32<br />

P33<br />

P34<br />

P35<br />

P36<br />

P37<br />

P38<br />

P39<br />

TPC91A<br />

- 40 -


TinyPLC TPC9X User’s Manual<br />

제 4 장<br />

메모리 맵<br />

- 41 -


TinyPLC TPC9X User’s Manual<br />

TinyPLC 의 메모리<br />

TinyPLC 내부에는 3 종류의 메모리가 들어있습니다.<br />

1. FLASH (프로그램 메모리) : 유저가 작성한 레더로직이 저장되는 기억장소<br />

2. SRAM (데이터 메모리) : 실행시 각종 정보를 기록하는 기억장소<br />

3. EEPROM (데이터 메모리) : 정전시 유지(KEEP 영역)를 위한 기억장소<br />

FLASH SRAM<br />

EEPROM<br />

이중 FLASH 메모리는 유저가 작성한 레더로직을 저장하는 장소로, 전기적으로 지웠다<br />

썼다할 수 있습니다. 따라서 한번 다운로드된 프로그램은 전기가 공급되지 않아도 계속<br />

기록되어 있습니다.<br />

여러분이 새로운 프로그램을 다운로드하기 전까지 최근 다운로드된 프로그램이 계속<br />

저장되어 있습니다.<br />

SRAM 은 레더로직 실행도중 사용하는 각종 데이터 정보를 기록하는 장소입니다. M 릴레이,<br />

D 영역등에 저장하는 값들은 SRAM 에 기록됩니다. SRAM 은 전원이 공급되지 않으면, 그<br />

내용이 사라지는 메모리입니다. 따라서 전원이 꺼져도 내용이 보존될 필요가 있을때에는<br />

EEPROM 에 데이터를 저장해 두어야 합니다.<br />

EEPROM 은 플레쉬 메모리처럼 전기가 없어도 데이터가 보존되는 메모리입니다. K 릴레이<br />

저장한 데이터는 EEPROM 에 이동저장되며, 전원이 OFF 되었다가 다시 ON 되는 순간에<br />

EEPROM 에 있는 데이터가 K 릴레이로 이동됩니다.<br />

플레쉬와 EEPROM<br />

플레쉬 메모리와 EEPROM 의 차이점은 무엇일까요? 둘다 전기가 없어도 데이터를 유지하는<br />

특성을 가진 메모리입니다만, 플레쉬 메모리에는 프로그램 코드가 저장되고, EEPROM 에는<br />

데이터가 저장됩니다. 사실 두 메모리의 전기적인 특성도 조금 차이가 있습니다만,<br />

TinyPLC 를 사용하는데 있어서 이런 부분까지 알 필요는 없습니다.<br />

- 42 -


TinyPLC TPC9X User’s Manual<br />

TPC91A 의 메모리맵<br />

크게 나누어 비트단위 영역과 워드단위 영역, 더블워드영역이 있습니다.<br />

비트단위 영역 워드단위 영역 더블워드단위 영역<br />

비트수 1 비트 16 비트 32 비트<br />

해당 릴레이명 P, M, F, K T, C, D, Y A, B<br />

비트 단위영역 입니다. (비트단위일 경우 릴레이라고 부릅니다.)<br />

릴레이 설명 범위 총 개수 기능<br />

P 입출력 릴레이 P0-P127 128 점 외부 기기와의 인터페이스<br />

M 내부릴레이 M0-M2047 2048 점 내부 상태의 보존<br />

F 특수기능 릴레이 F0-F127 128 점 시스템 상태<br />

K KEEP 릴레이 K0-K2047 2048 점 정전시 데이터 유지<br />

워드 단위 영역입니다.<br />

릴레이 설명 범위 총 개수 기능<br />

T 타이머 T0-T99 100 개 타이머용<br />

C 카운터 C0-C49 50 개 카운터용<br />

D 데이터영역 D0-D255 256 개 데이터용<br />

Y 시스템 데이터영역 Y0-Y49 50 개 A/D 결과를 저장 또는<br />

PWM 에 출력될 값을 보관하는<br />

시스템 데이터 보관영역<br />

다음은 더블워드 단위 영역입니다.<br />

릴레이 설명 범위 총 개수 기능<br />

A 실수데이터 A0-A49 50 개 32 비트 실수데이터 보관<br />

B 정수데이터 B0-B49 50 개 32 비트 정수데이터 보관<br />

이전 TPC3X 시리즈에서는 P1:3 과 같은 형태의 릴레이표현을 사용했습니다만, TPC9X<br />

시리즈에서는 콜론( : ) 을 사용하지 않고, P12 와 같이 단순한 표현을 사용합니다.<br />

릴레이 이름 (P, M, C, T 등)<br />

기억장소위치 (10 진수)<br />

일부 다른회사의 PLC 에서는 기억장소 위치를 16 진형으로 사용하고 있으므로, 혼동하지<br />

않도록 주의하시기 바랍니다.<br />

- 43 -


TinyPLC TPC9X User’s Manual<br />

데이터 영역을 그림을 표현하면 다음과 같습니다.<br />

= 1 Bit<br />

P0<br />

P1<br />

P2<br />

P3<br />

M0<br />

M1<br />

M2<br />

M3<br />

F0<br />

F1<br />

F2<br />

F3<br />

K0<br />

K1<br />

K2<br />

K3<br />

P125<br />

P126<br />

P127<br />

M2045<br />

M2046<br />

M2047<br />

F125<br />

F126<br />

F127<br />

K2045<br />

K2046<br />

K2047<br />

D0<br />

D1<br />

D2<br />

D3<br />

D243<br />

D244<br />

D245<br />

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 = Bit Position<br />

A,B 영역은 32 비트단위로 구성된 공간입니다.<br />

A0<br />

A1<br />

A2<br />

A3<br />

A97<br />

A98<br />

A99<br />

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0<br />

A,B 영역에 대하여…<br />

TPC9X 시리즈에서는 실수연산기능을 제공하고 있습니다. 이를 위해서 32 비트<br />

실수데이터를 저장할 수 있는 A 영역과 , 32 비트 정수데이터를 저장할 수 있는 B 영역을<br />

제공하고 있습니다.<br />

A 영역에는 실수데이터만을 저장할 수 있으며, IEEE 724 포맷으로 데이터를 기록합니다.<br />

- 44 -


TinyPLC TPC9X User’s Manual<br />

P,M,F 는 비트단위로 되어 있고, T,C,D 는 워드단위로 되어 있습니다. 비트 영역으로 되어<br />

있는 P, M, F, K 를 워드단위로 억세스 하려면 WP, WM, WF, WK 를 사용해야 합니다.<br />

릴레이 명칭 범위 단위 기능<br />

WP WP0~7 16 비트 (1 워드) P 영역의 워드단위 억세스<br />

WM WM0~WM127 16 비트 (1 워드) M 영역의 워드단위 억세스<br />

WK WK0~WK127 16 비트 (1 워드) K 영역의 워드단위 억세스<br />

WF WF0~WF7 16 비트 (1 워드) F 영역의 워드단위 억세스<br />

WP0 는 P0~P15 까지의 내용을 담고 있으며, P0 이 가장아래쪽(LSB)에 P15 가 가장<br />

위쪽(MSB)에 위치합니다. WMOV 등과 같은 응용명령어 군에서 사용할수 있습니다.<br />

WP0<br />

WP1<br />

WP2<br />

WP3<br />

WP4<br />

WP5<br />

WP6<br />

WP7<br />

P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0<br />

다음은 WP0 사용예입니다. 파워온 리셋 (F2 파워온시 한 스캔만 ON 됨) P0 부터 P15 까지<br />

전부 0 으로 초기화합니다.<br />

- 45 -


TinyPLC TPC9X User’s Manual<br />

정전시 데이터 보관<br />

K 영역은 정전시 데이터값을 유지하는 영역입니다. TPC91A, TPC93A 에서는 별도의 밧데리<br />

백업장치 대신, EEPROM 을 가지고 데이터를 보관합니다.<br />

EEPROM 은 전기적으로 지웠다, 썼다 할 수 있는 플레쉬메모리입니다. EEPROM 의 장점은<br />

밧데리 백업 없이도 데이터를 안정적으로 보존한다는 것입니다. EEPROM 의 단점은 1<br />

바이트를 WRITE 하는데에 약 10mS 초의 시간이 필요하다는 것입니다.<br />

TPC91A 의 경우 총 2048 개의 K 영역을 가지고 있습니다. 이 영역을 모두 EEPROM 에<br />

저장하려면 2.5 초의 시간이 필요합니다. 즉, 어떤 번지이든 K 영역에 새로운 값을 넣은뒤<br />

2.5 초가 지나서야 그 값이 안정적으로 EEPROM 에 기록됩니다.<br />

정전이 언제 될지 모르는 상황에서 2.5 초는 긴 시간이라고 할 수 있습니다 .이 시간을 줄이는<br />

방법은 EEPROM 에 저장할 데이터의 개수를 줄이는 것입니다. 만약, 여러분이 단 255 비트의<br />

데이터만을 정전유지하고 싶다면, 2048 비트 전부를 EEPROM 에 기록할 필요는 없습니다.<br />

255 비트만 EEPROM 에 기록한다면, 기록시간은 0.2 초로 단축됩니다. 즉, 0.2 초만에<br />

255 비트가 전부 EEPROM 에 기록된다는 뜻입니다.<br />

K영역을 사용하지 않을 경우에는 이 체크박스를 OFF (비워둠)하시면<br />

Func 명령의 전체 처리 속도가 증가됩니다.<br />

4가지 선택사항중 하나를 선택하시면, 그에 맞추어서 자동적으로 K 영역의<br />

데이터를 EEPROM 으로 저장합니다.<br />

- 46 -


TinyPLC TPC9X User’s Manual<br />

TPCworks 에서 PLC Setup 메뉴에 보면, EEPROM 저장할 K 영역의 데이터 개수를 선택하는<br />

메뉴가 있습니다. 여러분이 사용하시고자 하는 데이터양에 맞추어서 옵션을 선택하여<br />

준다면, 그만큼 빠른시간만에 EEPROM 에 기록하도록 할 수 있습니다.<br />

EEPROM 에 기록된 데이터는 파워온시, 다시 K 영역으로 로드됩니다.<br />

K0 to K255 WK0 to WK15 0.3 초 소요<br />

K0 to K511 WK0 to WK31 0.6 초 소요<br />

K0 to K1023 WK0 to WK63 1.2 초 소요<br />

K0 to K2047 WK0 to WK127 2.5 초 소요<br />

실제로, K 릴레이 영역은 SRAM 영역입니다. 이 K 릴레이 영역을 TinyPLC 의 OS (오퍼레이팅<br />

시스템)에서 자동적으로 EEPROM 으로 옮겨서 저장해줍니다. 만약에 정전이 일어나서<br />

전기공급이 중단되면, SRAM 의 데이터는 모두 사라지지만, EEPROM 의 데이터는<br />

이전상태를 그대로 보존하고 있습니다.<br />

다시 전기가 들어오면, TinyPLC 의 OS 에서 EEPROM 에 있던 데이터를 SRAM 의 K 영역으로<br />

복귀시켜줍니다. 유저는 이런과정을 신경쓸 필요없이 K 릴레이 영역에 데이터를 저장하기만<br />

하면 됩니다.<br />

K0<br />

K1<br />

K2<br />

K3<br />

K253<br />

K254<br />

K255<br />

EEPROM<br />

- 47 -


D 영역, C, T 영역등을 정전시 보관하는 방법<br />

TinyPLC TPC9X User’s Manual<br />

보관하고 싶은 C, T, D 영역 (16 비트값)을 WK 영역으로 이동시키는 방법으로 보관합니다.<br />

K 영역의 EEPROM 저장 영역을 최대치 (K0 to K2047)까지 하면 총 128 워드의 데이터를<br />

저장할 수 있는 공간이 됩니다.<br />

다음은 T3 영역을 정전시 보관하기 위한 레더예제입니다.<br />

파워온시 (초기화 F2 릴레이) WK1 에<br />

저장된 데이터를 T3 로 이동시킵니다.<br />

운영시에 M2 릴레이가 ON 되면 T3 의<br />

내용을 WK1 으로 이동시킵니다.<br />

이때 사용중인 K 릴레이영역과 중복되지 않도록 주의하셔야 합니다. (레더의 다른곳에서<br />

K0 을 사용중이라면 WK0 을 사용하시지 말아야 합니다. 이 부분은 레더컴파일시에<br />

에러멧세지가 따로 발생되지 않으므로, 유저여러분이 레더로직을 작성하실 때<br />

신경써주어야 합니다.)<br />

정전은 언제 발생될지 모르는 상황이므로, 정전되기 바로 직전상태를 그대로 보존하는 것이<br />

가장 좋은 방법입니다. 이를 위해서, 밧데리 백업을 사용하는 방법이 있습니다. 현재 TPC91A,<br />

TPC93A 제품에서는 밧데리 백업기능을 지원하고 있지 않습니다. 추후 밧데리 백업에 의해,<br />

전체 메모리를 정전유지할 수 있는 제품에서는 KEEP 영역은 물론 다른<br />

릴레이영역/데이터영역을 모두 정전시 유지할 수 있습니다.<br />

- 48 -


TinyPLC TPC9X User’s Manual<br />

스탭 릴레이<br />

다음은 스탭제어를 위한 S 릴레이 설명입니다. 총 16 조의 영역이 있고, 각 조에서<br />

256 스탭까지 제어할 수 있습니다.<br />

릴레이 명칭 범위 단위 기능<br />

S S0~15 256 스탭 (1 바이트) 스탭 콘트롤<br />

S 릴레이는 다른 릴레이와는 조금 다른 표기법을 가지고 있습니다. 앞에는 “조”를 써주고<br />

콜론 ( : )뒤에는 스탭을 적어줍니다.<br />

조 (0~15 까지 사용)<br />

스탭 (0~255 까지 사용가능)<br />

S 릴레이 사용법은 STEPOUT, STEPSET 명령에서 자세하게 설명합니다.<br />

- 49 -


TinyPLC TPC9X User’s Manual<br />

주변장치 제어 레지스터<br />

Y 는 “주변장치”를 제어하기 위한 버퍼영역입니다. A/D 결과가 기록되거나, PWM 을<br />

제어하기 위한 값을 기록하기 위해 사용합니다.<br />

다음은 TPC91A 을 위한 Y 영역 맵입니다.<br />

기능 채널 Y 영역 READ/WRITE 설명<br />

ADC0 Y10 READ only<br />

ADC1 Y11 READ only<br />

ADC2 Y12 READ only<br />

A/D 입력 ADC3 Y13 READ only<br />

ADC4 Y14 READ only<br />

ADC5 Y15 READ only<br />

ADC6 Y16 READ only<br />

ADC7 Y17 READ only<br />

PWM0 Y26 WRITE only<br />

PWM1 Y27 WRITE only<br />

PWM2 Y28 WRITE only<br />

PWM 출력 PWM3 Y29 WRITE only<br />

PWM4 Y30 WRITE only<br />

PWM5 Y31 WRITE only<br />

HIGH<br />

COUNT0 Y38, Y39 READ only<br />

COUNTER COUNT1 Y40, Y41 READ only<br />

A/D 입력의 결과가<br />

해당 Y 영역으로<br />

저장됩니다.<br />

해당 Y 영역에 있는<br />

값으로 PWM 채널에<br />

출력됩니다.<br />

카운터입력이 저장되는<br />

영역입니다.<br />

KEYPAD Y42 READ only 키패드 콘트롤러로부터<br />

받은 키스캔코드<br />

초 Y43 R / W<br />

CLOCK 분 Y44 R / W<br />

시 Y45 R / W<br />

이 표에 나와있지 않은 Y 영역은 추후 다른 목적으로 사용될 가능성이 있는 예약된<br />

번지입니다.<br />

A/D 영역은 16 비트로 구성되어 있지만,실제로 저장되는 값은 10 비트 값 (0 to 1023)입니다.<br />

PWM 출력은 0~65535 까지 최대 16 비트 해상도를 가지고 있으며, 출력주파수는 조정할 수<br />

있도록 되어 있습니다.<br />

HIGH COUNTER 는 32 비트까지 카운트가능하며, 2 개의 Y 영역을 차지합니다.<br />

- 50 -


TinyPLC TPC9X User’s Manual<br />

다음은 TPC93A 을 위한 Y 영역 맵입니다.<br />

기능 채널 Y 영역 READ/WRITE 설명<br />

ADC0 Y10 READ only<br />

ADC1 Y11 READ only<br />

ADC2 Y12 READ only<br />

ADC3 Y13 READ only<br />

ADC4 Y14 READ only<br />

ADC5 Y15 READ only<br />

A/D 입력<br />

ADC6 Y16 READ only<br />

ADC7 Y17 READ only<br />

ADC8 Y18 READ only<br />

ADC9 Y19 READ only<br />

ADC10 Y20 READ only<br />

ADC11 Y21 READ only<br />

ADC12 Y22 READ only<br />

ADC13 Y23 READ only<br />

ADC14 Y24 READ only<br />

ADC15 Y25 READ only<br />

PWM0 Y26 WRITE only<br />

PWM1 Y27 WRITE only<br />

PWM2 Y28 WRITE only<br />

PWM3 Y29 WRITE only<br />

PWM4 Y30 WRITE only<br />

PWM5 Y31 WRITE only<br />

PWM 출력 PWM6 Y32 WRITE only<br />

PWM7 Y33 WRITE only<br />

PWM8 Y34 WRITE only<br />

PWM9 Y35 WRITE only<br />

PWM10 Y36 WRITE only<br />

PWM11 Y37 WRITE only<br />

HIGH<br />

COUNT0 Y38, Y39 READ only<br />

COUNTER COUNT1 Y40, Y41 READ only<br />

A/D 입력의 결과가<br />

해당 Y 영역으로<br />

저장됩니다.<br />

해당 Y 영역에 있는<br />

값으로 PWM 채널에<br />

출력됩니다.<br />

카운터입력이 저장되는<br />

영역입니다.<br />

KEYPAD Y42 READ only 키패드 콘트롤러로부터<br />

받은 키스캔코드<br />

초 Y43 R / W<br />

CLOCK 분 Y44 R / W<br />

시 Y45 R / W<br />

- 51 -


TinyPLC TPC9X User’s Manual<br />

리얼타임 클록<br />

TPC91A, 93A 에는 RTC 칩이 내장되어 있지 않습니다. 대신 Y 영역에 자동갱신되는<br />

시간정보가 기록됩니다. 유저는 이 영역의 정보를 읽어서 이용할 수 있습니다. 이 영역에<br />

새로운 값을 써넣으면, 그 값부터 갱신이 시작됩니다.<br />

기능 채널 Y 영역 READ/WRITE 설명<br />

초 Y43 R / W 0~59 까지 변화됨<br />

CLOCK 분 Y44 R / W 0~59 까지 변화됨<br />

시 Y45 R / W 0~65535 까지 변화됨<br />

65535 이후에는 0 이됨<br />

이 영역의 값은 전원이 없는 상황에서 자동적으로 갱신되지 않습니다.<br />

시스템 제어 레지스터<br />

Y 영역중 일부는 “시스템”운영과 관련된 수치를 수정하거나 확인할 수 있는 “시스템 제어<br />

레지스터”영역입니다. 이 영역은 모든 TPC9X 시리즈에서 동일하게 사용됩니다.<br />

기능 Y 영역 READ/WRITE 기능<br />

Y0<br />

사용안함<br />

Y1 Read/ Write RS232 채널 1 수신 START 번지 (D 영역)<br />

Y2 Read/ Write RS232 채널 2 수신 START 번지 (D 영역)<br />

Y3 Read/ Write RS232 채널 3 수신 START 번지 (D 영역)<br />

시스템 제어 Y4<br />

사용안함<br />

Y5<br />

사용안함<br />

Y6<br />

사용안함<br />

Y7<br />

사용안함<br />

Y8<br />

사용안함<br />

Y9<br />

사용안함<br />

- 52 -


TinyPLC TPC9X User’s Manual<br />

TPC93A 의 메모리맵<br />

TPC93A 의 메모리맵은 TPC91A 와 구성요소는 동일합니만, 사용할수 있는 용량이 확대되어<br />

있습니다.<br />

비트단위 영역 워드단위 영역 더블워드단위 영역<br />

비트수 1 비트 16 비트 32 비트<br />

해당 릴레이명 P, M, F, K T, C, D, Y A, B<br />

비트 단위영역 입니다. (비트단위일 경우 릴레이라고 부릅니다.)<br />

릴레이 설명 범위 총 개수 기능<br />

P 입출력 릴레이 P0-P127 128 점 외부 기기와의 인터페이스<br />

M 내부릴레이 M0-M4095 4096 점 내부 상태의 보존<br />

F 특수기능 릴레이 F0-F127 128 점 시스템 상태<br />

K KEEP 릴레이 K0-K2047 2048 점 정전시 데이터 유지<br />

워드 단위 영역입니다.<br />

릴레이 설명 범위 총 개수 기능<br />

T 타이머 T0-T255 255 개 타이머용<br />

C 카운터 C0-C99 100 개 카운터용<br />

D 데이터영역 D0-D255 256 개 데이터용<br />

Y 시스템 데이터영역 Y0-Y99 100 개 A/D 결과를 저장 또는<br />

PWM 에 출력될 값을 보관하는<br />

시스템 데이터 보관영역<br />

다음은 더블워드 단위 영역입니다.<br />

릴레이 설명 범위 총 개수 기능<br />

A 실수데이터 A0-A99 100 개 32 비트 실수데이터 보관<br />

B 정수데이터 B0-B99 100 개 32 비트 정수데이터 보관<br />

- 53 -


TinyPLC TPC9X User’s Manual<br />

TPC91A 와 TPC93A 의 메모리 차이점<br />

두 모델간의 메모리용량차이를 정리한 표입니다.<br />

릴레이 설명 TPC91A TPC93A 설명<br />

P 입출력 릴레이 P0-P127 P0-P127 동일함<br />

M 내부릴레이 M0-M4096 M0-M4096 동일함<br />

F 특수기능 릴레이 F0-F127 F0-F127 동일함<br />

K KEEP 릴레이 K0-K1023 K0-K1023 동일함<br />

릴레이 설명 TPC91A TPC93A 설명<br />

T 타이머 T0-T99 T0-T255 TPC93A 에서 확장됨<br />

C 카운터 C0-C49 C0-C99 TPC93A 에서 확장됨<br />

D 데이터영역 D0-D255 D0-D255 동일함<br />

Y 시스템 데이터영역 Y0-Y49 Y0-Y99 TPC93A 에서 확장됨<br />

릴레이 설명 TPC91A TPC93A 설명<br />

A 실수데이터 A0-A49 A0-A99 TPC93A 에서 확장됨<br />

B 정수데이터 B0-B49 B0-B99 TPC93A 에서 확장됨<br />

- 54 -


TinyPLC TPC9X User’s Manual<br />

특수릴레이<br />

특수릴레이를 통하여 TinyPLC 의 상태나 타이밍 정보, 시스템정보 등을 알 수 있습니다.<br />

특수릴레이 설명 별명 (Alias)<br />

F0 상시 OFF F_OFF<br />

F1 상시 ON F_ON<br />

F2 최초 LADDER 실행 시 1 SCAN 만 On F_INIT<br />

F3<br />

F4<br />

F5<br />

F6<br />

F7<br />

F8 10mS 마다 1 SCAN 만 On<br />

F9 100mS 마다 1SCAN 만 On<br />

F10<br />

F11<br />

F12<br />

F13<br />

F14<br />

F15<br />

F16 1 스캔타임간격으로 ON/OFF 를 반복 F_SCAN<br />

F17 2 스캔타임간격으로 ON/OFF 를 반복<br />

F18 4 스캔타임간격으로 ON/OFF 를 반복<br />

F19 8 스캔타임간격으로 ON/OFF 를 반복<br />

F20 16 스캔타임간격으로 ON/OFF 를 반복<br />

F21 32 스캔타임간격으로 ON/OFF 를 반복<br />

F22 64 스캔타임간격으로 ON/OFF 를 반복<br />

F23 128 스캔타임간격으로 ON/OFF 를 반복<br />

F24 10mS 마다 ON/OFF 를 반복 F_10MS<br />

F25 20mS 마다 ON/OFF 를 반복 F_20MS<br />

F26 40mS 마다 ON/OFF 를 반복 F_40MS<br />

F27 80mS 마다 ON/OFF 를 반복 F_80MS<br />

F28 160mS 마다 ON/OFF 를 반복 F_160MS<br />

F29 320mS 마다 ON/OFF 를 반복 F_320MS<br />

F30 640mS 마다 ON/OFF 를 반복 F_640MS<br />

F31 1.28 초마다 ON/OFF 를 반복 F_1S<br />

- 55 -


TinyPLC TPC9X User’s Manual<br />

F32 5.12 초마다 ON/OFF 를 반복 F_5S<br />

F33 10.24 초마다 ON/OFF 를 반복 F_10S<br />

F34 20.48 초마다 ON/OFF 를 반복 F_20S<br />

F35 40.96 초마다 ON/OFF 를 반복 F_40S<br />

F36 81.92 초마다 ON/OFF 를 반복 F_80S<br />

F37 163.84 초마다 ON/OFF 를 반복 F_160S<br />

F38 327.68 초마다 ON/OFF 를 반복 F_320S<br />

F39 655.36 초마다 ON/OFF 를 반복 F_640S<br />

F40 시스템에서 사용<br />

F41 FUNC 처리기가 한번 스캔할때마다 ON / OFF 를 반복 F_FUNCSCAN<br />

F42 키패드 콘트롤러에서 키입력 검출시 ON F_KEYIN<br />

F43<br />

F44 RS232 CH1 에서 데이터 수신완료시 ON F_RX1<br />

F45 RS232 CH2 에서 데이터 수신완료시 ON F_RX2<br />

F46 RS232 CH3 에서 데이터 수신완료시 ON F_RX3<br />

F47<br />

F48 RS232 CH1 의 수신장소를 RBF 로 사용<br />

F49 RS232 CH2 의 수신장소를 RBF 로 사용<br />

F50 RS232 CH3 의 수신장소를 RBF 로 사용<br />

F51 RS232 CH1 송신중 ON F_TX1<br />

F52 RS232 CH2 송신중 ON F_TX2<br />

F53 RS232 CH3 송신중 ON F_TX3<br />

F54<br />

F55<br />

F56 STEP PULSE CH0 BUSY (펄스 출력중 1 이됨)<br />

F57 STEP PULSE CH1 BUSY (펄스 출력중 1 이 됨)<br />

:<br />

F127 사용안함 (예약되어 있음)<br />

* F40 은 시스템에서 사용하는 특수릴레이 이므로 사용하면 안됩니다.<br />

* F2 는 최초실행 시 (SET LADDER ON 실행 시점)에서 한 스캔만 ON 됩니다. 초기화 관련<br />

처리를 할 때 사용합니다.<br />

*공백으로 되어 있는 특수릴레이는 사용하지 않는 특수릴레이입니다.<br />

- 56 -


TinyPLC TPC9X User’s Manual<br />

*별명을 사용해서 표기할 수 있습니다. 예를 들어 F1 을 F_ON 으로 표기할 수 있습니다.<br />

F_ON WMOV 100,D1<br />

‘ F1 은 항상 ON 되어 있는 특수릴레이 입니다.<br />

’ 따라서 항상 D1 영역에 100 을 넣게됩니다.<br />

- 57 -


- 58 -<br />

TinyPLC TPC9X User’s Manual


TinyPLC TPC9X User’s Manual<br />

제 5 장<br />

기본명령어<br />

- 59 -


TinyPLC TPC9X User’s Manual<br />

기본명령어<br />

명령어 Symbol 설명<br />

LOAD<br />

A 접점 (Normal Open)의 시작<br />

LOADN<br />

OT<br />

NOT<br />

STEPSET<br />

STEPOUT<br />

MCS<br />

MCSCLR<br />

DF<br />

DFN<br />

SETOUT<br />

RSTOUT<br />

END<br />

GOTO<br />

LABEL<br />

CALLS<br />

SBRT<br />

RET<br />

B 접점 (Normal Close)의 시작<br />

연산 결과 출력<br />

NOT 이전의 연산결과를 반전<br />

스탭 콘트롤러 출력 (순차제어용)<br />

스탭 콘트롤러 출력 (후입우선용)<br />

마스터 콘트롤 시작<br />

마스터 콘트롤 종료<br />

입력조건 상승 시 1 스캔타임만 ON 출력<br />

입력조건 하강 시 1 스캔타임만 ON 출력<br />

출력을 ON 상태로 유지<br />

출력을 OFF 상태로 유지<br />

프로그램의 종료<br />

무조건 분기<br />

라벨선언<br />

서브루틴 분기<br />

서브루틴 선언<br />

서브루틴 종료<br />

- 60 -


TinyPLC TPC9X User’s Manual<br />

타이머<br />

명령어 Symbol 설명<br />

TON<br />

0.01 초 단위 ON 타이머<br />

TOFF<br />

TAON<br />

TAOFF<br />

KTON<br />

KTAON<br />

0.01 초 단위 OFF 타이머<br />

0.1 초 단위 ON 타이머<br />

0.1 초 단위 OFF 타이머<br />

0.01 초 단위 ON 타이머 (전원 ON 시 초기화<br />

하지 않음)<br />

0.1 초 단위 ON 타이머 (전원 ON 시 초기화<br />

하지 않음)<br />

카운터<br />

명령어 Symbol 설명<br />

CTU<br />

UP 카운터<br />

CTD<br />

KCTU<br />

KCTD<br />

DOWN 카운터<br />

UP 카운터 (전원 ON 시 초기화 하지 않음)<br />

DOWN 카운터 (전원 ON 시 초기화 하지<br />

않음)<br />

- 61 -


TinyPLC TPC9X User’s Manual<br />

LOAD,LOADN,<br />

OT<br />

• LOAD 는 A 접점의 시작입니다.<br />

• LOADN 은 B 접점의 시작입니다.<br />

• OT 은 출력접점입니다.<br />

레더도<br />

LOAD<br />

OUT<br />

니모닉 표기<br />

LOAD P0<br />

OT P2<br />

LOADN P1<br />

OT P3<br />

LOADN<br />

사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 상수<br />

LOAD O O O O O O O<br />

LOADN<br />

OT O O<br />

.<br />

P 릴레이는 I/O 포트에 연결되어 있으므로, 포트로부터 입출력 되는 상황이 그대로<br />

전달됩니다. M.F 등 다른 릴레이는 메모리 내부에 저장되는 것이므로 외부 I/O 포트에<br />

전달되지 않습니다. 위 레더도에 대한 타이밍 차트는 다음과 같습니다.<br />

P0<br />

P2<br />

P1<br />

P3<br />

- 62 -


TinyPLC TPC9X User’s Manual<br />

NOT,<br />

AN,IOR<br />

• NOT 은 지금까지 연산의 결과를 반전시킵니다.<br />

• AN 는 이전연산의 결과와 AND 연산을 수행합니다.<br />

• IOR 은 이전연산의 결과와 OR 연산을 수행합니다.<br />

레더도<br />

NOT Symbol<br />

AND<br />

니모닉 표기<br />

LOAD P0<br />

NOT<br />

OT P5<br />

LOAD P0<br />

AN P1<br />

OT P5<br />

LOAD P0<br />

IOR P1<br />

OT P5<br />

OR<br />

사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 상수<br />

AN<br />

IOR<br />

O O O O O O O<br />

.<br />

NOT 심볼을 만나면 직전까지의 연산결과를 반전시킵니다. 화면 상단의 NOT 심볼을<br />

누르거나 슬레쉬 “/” 키를 누르면 커서위치에 NOT 이 표시됩니다.<br />

이 레더는 다음과 같이 써도 동일한 동작을 수행합니다. 즉 A 접점과 NOT 이 만나면<br />

B 접점과 같은 동작을 수행합니다.<br />

- 63 -


TinyPLC TPC9X User’s Manual<br />

AND 연산을 하려면 입력심볼을 나란히 위치시키면 됩니다. 두 개의 입력조건이 모두<br />

“True”일때 연산결과도 “True”가 됩니다.<br />

OR 연산을 하려면 위아래로 입력심볼을 위치시킵니다. 두 개의 입력조건 중 하나라도<br />

“True”가 되면 연산결과도 “True”가 됩니다.<br />

DEMO PROGRAM<br />

다음 샘플 프로그램을 입력 후 실행시키면, P0, P1 에 연결된 스위치의 동작에 따라 P2 에<br />

연결된 LED 가 점멸됩니다. 먼저 AND 를 실험해볼 수 있는 레더로직입니다.<br />

회로는 다음과 같이 구성하여 주십시오.<br />

P0<br />

5V<br />

P0 과 P1 의 스위치를 모두 눌러야, P2 에<br />

연결된 LED 에 불이 들어오는 것을<br />

확인할 수 있습니다.<br />

P2<br />

P1<br />

5V<br />

- 64 -


이것은 AND 논리게이트와 같은 회로로 설명될 수 있습니다.<br />

TinyPLC TPC9X User’s Manual<br />

같은 회로도에서 다음과 같이 레더로직을 바꾸어 입력한 뒤 실행시켜 보세요! 이것은<br />

OR 명령을 실험해 볼 수 있는 레더로직입니다.<br />

이것은 OR 논리 게이트와 같은 회로로 볼 수 있습니다.<br />

- 65 -


TinyPLC TPC9X User’s Manual<br />

ANDS,ORS<br />

• ANDS 는 블록간 AND 연산을 수행합니다.<br />

• ORS 는 블록간 OR 연산을 수행합니다.<br />

레더도<br />

BLOCK AND<br />

BLOCK OR<br />

니모닉 표기<br />

LOAD P0<br />

IOR P1<br />

LOAD P2<br />

OR P3<br />

ANDS<br />

OT P5<br />

LOAD P0<br />

AN P2<br />

LOAD P1<br />

AN P3<br />

ORS<br />

OT P5<br />

블록단위 논리연산이 왜 필요한지 알아보도록 하겠습니다. 블록단위 논리연산이라는<br />

개념을 적용하지 않고, 아래 레더 다이어그램을 니모닉으로 한번 변환을 해보겠습니다.<br />

LOAD P0<br />

IOR P1<br />

AN P3<br />

OT P2<br />

얼핏 보면 이렇게 번역될 것 같습니다. 하지만 이렇게 번역한다면, 아래처럼 동작되고<br />

맙니다.<br />

- 66 -


TinyPLC TPC9X User’s Manual<br />

위의 P0 와 아래의 P1 AND P3 연산을 다른 블록으로 나누어 생각해야 합니다.<br />

다음 레더 다이어그램을 TinyPLC 에서는 어떻게 번역하는지 보겠습니다.<br />

P0 를 먼저 LOAD 한 뒤, 다시 새롭게 P1 을 LOAD 합니다. 레더에서 새로운 연산을 시작할<br />

때에는 LOAD 명령으로 시작합니다. 이때 이전 연산의 결과는 특정장소에 백업해 놓습니다.<br />

LOAD P1 이후에 P3 와 AND 연산을 합니다.<br />

그리고 백업해 놓은 이전상태와 현재의 상태를 서로 OR 연산합니다. 이때 사용하는<br />

OR 연산은 기존 OR 연산과 구분할 필요가 있습니다. 그래서 블록간의 OR 연산을 의미하는<br />

ORS 명령어를 사용합니다.<br />

다음은 두 개의 AND 블록이 있는 경우입니다.<br />

- 67 -


TinyPLC TPC9X User’s Manual<br />

이 경우는 아래와 같이 번역됩니다.<br />

P0 OR P1 의 결과와 P3 OR P4 의 결과를 서로 블록간 AND 하는 것입니다. 이 경우에도<br />

기존의 AND 연산과 구분하기 위해서 ANDS 명령어가 사용됩니다.<br />

LOAD P0<br />

OR P1<br />

LOAD P3<br />

OR P4<br />

ANDS<br />

- 68 -


TinyPLC TPC9X User’s Manual<br />

SETOUT,<br />

RSTOUT<br />

SETOUT 은 입력이 있을 때 출력을 ON 하고, ON 상태를 계속 유지합니다. 반대로<br />

RSTOUT 은 입력이 있을 때 출력을 OFF 한 뒤 OFF 상태를 계속 유지합니다.<br />

레더도<br />

니모닉 표기<br />

LOAD P0<br />

SETOUT P5<br />

LOAD P1<br />

SSTOUT P5<br />

사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 상수<br />

SETOUT O O O O<br />

RSTOUT O O O O<br />

.<br />

위의 레더 실행결과를 타임챠트로 표시한 것입니다.<br />

P0<br />

P1<br />

P5<br />

- 69 -


TinyPLC TPC9X User’s Manual<br />

DEMO PROGRAM<br />

다음은 SETOUT, RSTOUT 의 동작을 확인할 수 있는 샘플 프로그램입니다.<br />

회로는 다음과 같이 구성하여 주십시오.<br />

5V<br />

P0<br />

P2<br />

P1<br />

5V<br />

P0 스위치를 누르면, P2 LED 가 켜집니다. 그리고 P0 스위치를 OFF 해도 P2 는 ON 상태를<br />

유지합니다. 이후 P1 스위치를 누르면 P2 LED 가 OFF 됩니다.<br />

- 70 -


TinyPLC TPC9X User’s Manual<br />

DF,<br />

DFN<br />

DF 는 입력조건에서 상승에지 (OFF -> ON) 상황이 발생하면 출력접점을 1 스캔시간 동안<br />

ON 하는 명령입니다. 반대로, DFN 은 입력조건에서 하강에지 (ON -> OFF)상황이 발생하면<br />

1 스캔시간 동안 OFF 하는 명령입니다.<br />

레더도<br />

DF<br />

DFN<br />

니모닉 표기<br />

LOAD P0<br />

DF<br />

OT P5<br />

LOAD P1<br />

DFN<br />

OT P6<br />

DF, DFN 은 심볼만으로 동작됩니다. 별도로 릴레이를 할당할 필요가 없습니다. DF, DFN 의<br />

동작 파형은 다음과 같습니다.<br />

P0<br />

P1<br />

P5<br />

1 SCAN<br />

P6<br />

1 SCAN<br />

TinyPLC TPC9X 시리즈에서 1 스캔시간은 1mS 입니다..<br />

*TPC3X 시리즈를 사용해보신 분들은 주의 깊게 보십시오. TPC9X 시리즈에서는 더 이상 DF,<br />

DFN 심볼 사용시 M 릴레이를 적어줄 필요가 없습니다.<br />

- 71 -


TinyPLC TPC9X User’s Manual<br />

TON, TAON<br />

입력 조건이 ON 이 되면 타이머 값이 증가되어, 설정 치에 도달하면 출력접점이 ON 됩니다.<br />

시간 단위가 틀린 두 종류의 ON TIMER 가 있습니다.<br />

타이머종류 분해능 최대치<br />

TON 0.01 초 655.35 초<br />

TAON 0.1 초 6553.5 초<br />

레더도<br />

니모닉 표기<br />

LOAD START<br />

TON T0, 100<br />

LOAD START<br />

TAON T1,100<br />

설정치로 사용가능한 데이터영역<br />

가능영역 P M F S K C T D Y A B 상수<br />

설정치 O O O O O<br />

.<br />

TON, TAON 명령에는 2 개의 인수가 있습니다. 타이머번호는 T0~99 중 하나의 값을<br />

지정하고, 설정 치로는 상수 및 데이터영역 등을 사용할 수 있습니다.<br />

위의 LADDER 에서 START 입력이 들어오면 T0 타이머가 증가됩니다. 0.01 초마다 1 씩<br />

증가되어 증가치가 100 (1 초경과) 이 되면 T0 접점이 ON 됩니다. TAON 을 사용한<br />

T1 타이머의 경우에는 0.1 초마다 1 씩 증가되어 10 초가 경과되면 T1 접점이 ON 됩니다.<br />

입력신호가 OFF 되면 타이머는 초기값으로 설정되고, 타이머 접점도 OFF 됩니다.<br />

1sec<br />

START<br />

T0<br />

TON, TAON 은 파워 ON 시 초기화되므로, 밧데리 백업 시 그 값이 유지 되지 않습니다.<br />

밧데리 백업 시, 전원 OFF 후 다시 ON 된 상황에서 기존 값을 유지한 채 계속 타이머가<br />

갱신되길 원한다면 KTON, KTAON 명령을 사용하시기 바랍니다.<br />

- 72 -


DEMO PROGRAM<br />

다음은 TON 의 동작을 확인할 수 있는 샘플 프로그램입니다.<br />

TinyPLC TPC9X User’s Manual<br />

타이밍 차트를 사용해서 P0 과 T0, P2 의<br />

상태를 체크해 보면 왼쪽과 같이<br />

표시됩니다.<br />

P0 스위치를 누른 뒤 1 초 뒤에 T0 이<br />

ON 되는 것을 볼 수 있습니다.<br />

T0 을 입력접점으로 사용할 경우에는<br />

TIMER 의 ON /OFF 상태를 나타내는<br />

접점과 동일합니다.<br />

T0 을 P2 에 그대로 출력했으므로, T0 이<br />

ON 되었을 때 T2 도 ON 됩니다.<br />

- 73 -


TinyPLC TPC9X User’s Manual<br />

KTON, KTAON<br />

• 이 명령은 밧데리 백업에 의한 정전보상이 지원되는 TinyPLC 코어모듈에서 사용할<br />

수 있는 명령입니다. (TPC91A, TPC93A 에서는 사용할 수 없습니다.)<br />

KTON, KTAON 명령은 TON, TAON 명령과 모든 것이 동일하지만, 최초 전원 ON 시에<br />

초기화하지 않으므로, KEEP 기능을 구현할 수 있습니다.<br />

KEEP 기능이란 전원 OFF 상태에서 이전 값을 기억하고 있다가, 다시 전원이 ON 되면,<br />

이전상태에서 계속되는 것을 말합니다.<br />

타이머종류 분해능 최대치<br />

KTON 0.01 초 655.35 초<br />

KTAON 0.1 초 6553.5 초<br />

레더도<br />

니모닉 표기<br />

LOAD START<br />

KTON T0, 100<br />

LOAD START<br />

KTAON T1,100<br />

설정치로 사용가능한 데이터영역<br />

가능영역 P M F S K C T D Y 상수<br />

설정치 O O O O O<br />

.<br />

1sec<br />

START<br />

T0<br />

좀더 구체적으로 이해하기 위해서는 TON 의 동작과정에 대한 이해가 필요합니다.<br />

TON 명령은 입력조건이 OFF 일 경우 초기화 됩니다. 초기화할 때, 타이머 값 최고치에서<br />

1 을 뺀 값을 해당영역에 써넣습니다. TON T10,100 일 경우 99 를 T10 영역에 써넣는<br />

것입니다. 이 과정을 “초기화”라고 부릅니다.<br />

전원 ON 시 입력도 ON 이라면 KTON 에서는 초기화를 하지 않게 됩니다.<br />

전원 ON 시 입력도 ON 인 상황에서 TON 명령은 초기화를 하게 됩니다. 이것이 두 명령간의<br />

차이점입니다.<br />

- 74 -


TinyPLC TPC9X User’s Manual<br />

입력이 OFF 가 되면, KTON 과 TON 명령 모두에서 초기화를 하게 됩니다. TAON 과<br />

KTAON 도 마찬가지입니다.<br />

만약, 전원 ON 시 타이머 입력조건도 ON 상태이면, 메모리에 저장된 값부터 카운트다운이<br />

됩니다.<br />

- 75 -


TinyPLC TPC9X User’s Manual<br />

TOFF, TAOFF<br />

입력 조건이 ON 이 되면 타이머접점은 바로 ON 됩니다. 이후 입력이 OFF 되면 타이머접점은<br />

OFF 되지 않고, 설정치 만큼의 시간이 경과된 뒤 OFF 됩니다. 시간 단위가 틀린 두 종류의<br />

ON TIMER 가 있습니다.<br />

타이머종류 분해능 최대치<br />

TOFF 0.01 초 655.35 초<br />

TAOFF 0.1 초 6553.5 초<br />

레더도<br />

니모닉 표기<br />

LOAD START<br />

TOFF T0,100<br />

LOAD START<br />

TAOFF T1,100<br />

설정치로 사용가능한 데이터영역<br />

가능영역 P M F S K C T D Y A B 상수<br />

설정치 O O O O O<br />

.<br />

위의 LADDER 에서 START 입력이 들어오면 T0 접점은 바로 ON 됩니다. 이후 START 접점이<br />

OFF 된 뒤 타이머가 증가됩니다. 0.01 초마다 1 씩 증가되어 증가치가 100 (1 초경과) 이 되면<br />

T0 접점이 OFF 됩니다. TAON 을 사용한 T1 타이머의 경우에는 0.1 초마다 1 씩 증가되어<br />

10 초가 경과되면 T1 접점이 OFF 됩니다.<br />

1sec<br />

START<br />

T0<br />

*KTOFF, KTAOFF 명령은 존재하지 않습니다. TOFF, TAOFF 명령은 파워 ON 시 별도의<br />

초기화 과정이 없기 때문입니다.<br />

- 76 -


DEMO PROGRAM<br />

다음은 TOFF 동작을 확인할 수 있는 샘플 프로그램입니다.<br />

TinyPLC TPC9X User’s Manual<br />

P0 이 OFF 된 후에도 T0 이 1 초간 ON<br />

상태를 유지합니다.<br />

5V<br />

P0<br />

P2<br />

- 77 -


TinyPLC TPC9X User’s Manual<br />

DEMO PROGRAM - 플리커 프로그램<br />

다음은 타이머를 이용해서 P2 포트를 일정한 주기로 깜박이도록 하는 레더로직 입니다.<br />

P2<br />

- 78 -


TinyPLC TPC9X User’s Manual<br />

CTU<br />

업 카운터 명령입니다. 입력이 들어오면 카운터 값을 1 증가 시킵니다. 카운터 값이 설정치와<br />

일치하면 카운터 접점을 ON 합니다. 리셋 입력이 들어오면 카운터 값은 0 이 됩니다.<br />

레더도<br />

니모닉 표기<br />

LOAD PULSE<br />

LOAD RESET<br />

CTU C0,100<br />

설정치로 사용가능한 데이터영역<br />

가능영역 P M F S K C T D Y A B 상수<br />

설정치 O O O O O<br />

.<br />

100 pulse<br />

PULSE<br />

RESET<br />

C0<br />

- 79 -


TinyPLC TPC9X User’s Manual<br />

CTD<br />

다운 카운터 명령입니다. 입력이 들어오면 카운터 값을 1 감소 시킵니다. 카운터 값이 0 이<br />

되면 카운터 접점을 ON 합니다. 리셋 입력이 들어오면 카운터 값은 설정치로 초기화 됩니다.<br />

레더도<br />

니모닉 표기<br />

LOAD PULSE<br />

LOAD RESET<br />

CTD C0,100<br />

설정치로 사용가능한 데이터영역<br />

가능영역 P M F S K C T D Y A B 상수<br />

설정치 O O O O O<br />

.<br />

100 pulse<br />

PULSE<br />

RESET<br />

C1<br />

- 80 -


DEMO PROGRAM<br />

다음은 카운터의 동작을 확인할 수 있는 샘플 프로그램입니다.<br />

TinyPLC TPC9X User’s Manual<br />

실행결과를 타이밍 차트로 볼 수<br />

있습니다.<br />

P0 가 5 번 ON 되었을 때, C0 가<br />

ON 됩니다.<br />

리셋신호인 P1 이 ON 되면 C0 이<br />

OFF 됩니다.<br />

- 81 -


TinyPLC TPC9X User’s Manual<br />

UP/DOWN COUNTER<br />

별도의 업다운 카운터 명령이 준비되어 있지는 않지만 아래와 같이 입력하면 업다운<br />

카운터를 사용할 수 있습니다.<br />

P0 가 UP 신호, P2 가 DOWN 신호, P1 이 RESET 신호가 됩니다. UP/DOWN 을 반복하다가<br />

100 이 되면 C0 접점이 ON 됩니다.<br />

P0<br />

P2<br />

P1<br />

C0<br />

COUNT<br />

C0<br />

- 82 -


TinyPLC TPC9X User’s Manual<br />

KCTU<br />

• 이 명령은 밧데리 백업에 의한 정전보상이 지원되는 TinyPLC 코어모듈에서 사용할<br />

수 있는 명령입니다. (TPC91A, TPC93A 에서는 사용할 수 없습니다.)<br />

KEEP 이 가능한 업 카운터 명령입니다. 기본적인 사항은 CTU 명령과 동일합니다. 다만,<br />

정전시 데이터값이 유지되는 영역에서만 사용할 수 있습니다. KCTU 명령은 전원 OFF 시<br />

현재 상황을 기억하고 있다가, 전원 ON 후에도 지속적으로 카운트를 수행하게 됩니다. 이에<br />

반해 CTU 명령은 전원 ON 시 초기값으로 자동 리셋 됩니다.<br />

레더도<br />

니모닉 표기<br />

LOAD P1<br />

LOAD R2<br />

KCTU C0,100<br />

설정치로 사용가능한 데이터영역<br />

가능영역 P M F S K C T D Y A B 상수<br />

설정치 O O O O O<br />

.<br />

100 pulse<br />

P0<br />

P1<br />

C0<br />

리셋 신호를 먼저<br />

발생시켜 주어야 합니다.<br />

Power off & on<br />

이 명령 사용시 최초의 카운터 값은 알 수 없는 값으로 셋팅되어 있을 수 있으므로, 카운터<br />

리셋이 먼저 수행될 수 있도록 레더를 구성해 주어야 합니다. 즉, 최초 카운터 값 리셋에 대한<br />

부분은 유저프로그램에서 담당해 주어야 합니다.<br />

- 83 -


TinyPLC TPC9X User’s Manual<br />

KCTD<br />

• 이 명령은 밧데리 백업에 의한 정전보상이 지원되는 TinyPLC 코어모듈에서 사용할<br />

수 있는 명령입니다. (TPC91A, TPC93A 에서는 사용할 수 없습니다.)<br />

KEEP 이 가능한 다운 카운터 명령입니다. 기본적인 사항은 CTD 명령과 동일하며,<br />

KCTU 처럼 전원 OFF 시 상황을 기억하고 있다가, 전원 ON 후에도 지속적인 카운팅이<br />

가능합니다.<br />

레더도<br />

니모닉 표기<br />

LOAD P1<br />

LOAD R2<br />

KCTD C0,100<br />

설정치로 사용가능한 데이터영역<br />

가능영역 P M F S K C T D Y A B 상수<br />

설정치 O O O O O<br />

.<br />

- 84 -


TinyPLC TPC9X User’s Manual<br />

MCS,<br />

MCSCLR<br />

레더를 블록단위로 나누어서 제어할 수 있는 명령입니다.<br />

MCS (마스터 콘트롤)의 입력조건이 ON 하면 같은 번호를 가진 MCSCLR 까지 실행하고,<br />

입력조건이 OFF 이면 실행하지 않습니다. LADDER LOGIC 중 특정블록을 ON 하거나<br />

OFF 할 수 있는 명령입니다.<br />

MCS번호 (0~7)<br />

M0 가 ON 되면 MCS 0 ~MCSCLR 0 사이에 있는 LADDER LOGIC 이 동작됩니다. M0 가<br />

OFF 이면 동작되지 않고, P5 와 P6 출력은 OFF 상태가 됩니다.<br />

MCS 번호는 0 에서 7 까지 사용 가능합니다. 0 부터 사용해서, 1, 2, 3 순으로 증가해야 하며,<br />

0 번 블록 안에 1 번 블록이 있어야 하고, 1 번 블록 안에 2 번 블록이 있어야 합니다. 이런<br />

식으로 7 번 블록까지 사용할 수 있습니다. MCSCLR 명령은 블록을 해제하는 명령입니다.<br />

2 번 블록을 해제 하면, 2 번 블록은 물론, 3 번 이후의 블록까지 모두 해제됩니다. 0 번 블록을<br />

해제하면 모든 MCS 블록이 해제됩니다.<br />

MCS 입력조건이 OFF 일 경우 해당 블록 안에 있는 모든 출력은 OFF 되고, 타이머는 리셋<br />

되며, 카운터는 정지됩니다. MCS OFF 시 상황을 표로 정리하면 다음과 같습니다.<br />

명령어 MCS 가 ON 일 때 MCS 가 OFF 일 때<br />

OUT 정상동작 무조건 OFF<br />

SETOUT 정상동작 MCS 가 OFF 되기 전 상황을 유지<br />

RSTOUT 정상동작 MCS 가 OFF 되기 전 상황을 유지<br />

타이머 정상동작 초기값으로 리셋<br />

카운터 정상동작 MCS 가 OFF 되기 전 상황을 유지<br />

기타명령 정상동작 동작안함<br />

- 85 -


TinyPLC TPC9X User’s Manual<br />

다음은 MCS 명령의 중첩 사용 예입니다. 낮은 번호 안에 큰 번호의 블록이 들어가도록 해야<br />

합니다.<br />

*만약 중첩할 필요가 없다면 MCS 0 번만 연속적으로 사용하면 됩니다.<br />

- 86 -


DEMO PROGRAM<br />

다음은 마스터 콘트롤의 동작을 확인할 수 있는 샘플 프로그램입니다.<br />

TinyPLC TPC9X User’s Manual<br />

MCS 0 블록 안에는 “플리커 프로그램”이<br />

들어가 있습니다. P0 에 있는 스위치를<br />

ON 상태로 해주어야, P2 에 연결된 LED 가<br />

점멸하는 것을 확인할 수 있습니다. 즉<br />

P0 이 MCS0 번 블록을 제어하는 것입니다.<br />

P0<br />

5V<br />

P2<br />

- 87 -


TinyPLC TPC9X User’s Manual<br />

스탭 콘트롤<br />

스탭 콘트롤에는 S 릴레이가 사용됩니다. S 릴레이의 표기방법은 다음과 같습니다.<br />

조<br />

: 0~15 까지 사용가능<br />

S7:126<br />

스탭번호<br />

: 0~255 까지 사용가능<br />

스탭 콘트롤에는 “순차제어”와 “후입우선제어”가 있습니다. 순차제어란 말 그대로,<br />

순서대로 스탭이 증가되는 것을 의미합니다. 이를 위해 STEPSET 명령을 사용합니다.<br />

STEPSET<br />

동일조의 바로 전 스탭이 ON 되었을 때, 현재 스탭이 ON 되고, 이전 스탭은 OFF 됩니다.<br />

순차적으로만 ON 되기 때문에 순차제어라고 부릅니다. 위의 예에서 동작상황을 설명하면,<br />

P1 이 ON 되면 0 조의 2 번 스탭을 ON 하려고 시도합니다. 이때 1 번 스탭이 ON 상태였다면<br />

2 번 스탭이 ON 됩니다. 그리고 1 번 스탭은 OFF 됩니다. P2 가 ON 되면 0 조는 0 번 스탭으로<br />

무조건 돌아갑니다. 0 번 스탭은 리셋용도로 사용합니다. 다음은 위의 LADDER 회로가<br />

동작하는 경우를 타임차트로 표현한 것입니다.<br />

P0<br />

P1<br />

P2<br />

S0:0<br />

S0:1<br />

S0:2<br />

- 88 -


DEMO PROGRAM<br />

다음은 STEPSET 의 동작을 확인할 수 있는 샘플 프로그램입니다.<br />

레더로직은 아래 그림을 보고 입력하세요!<br />

TinyPLC TPC9X User’s Manual<br />

회로는 다음과 같이 P0, P1, P3 에는 스위치를 연결하고, P2 에는 LED 를 연결합니다.<br />

- 89 -


TinyPLC TPC9X User’s Manual<br />

이 프로그램을 다운로드 후 P3 스위치를 누르면 STEP 상태는 RESET 됩니다. 이 상태에서<br />

P1 스위치를 눌러도 MCS 0 블록이 동작하지 않습니다. P0 스위치를 눌러서 STEP 1 상태로<br />

만들어 놓은 뒤, 이 상태에서 P1 스위치를 눌러야 MCS 0 블록이 동작하고 P2 에 연결된<br />

LED 가 점멸합니다. 이처럼 어떤 상황이 준비된 뒤, 다음상황을 허락하는 용도로<br />

스탭콘트롤을 사용합니다.<br />

- 90 -


TinyPLC TPC9X User’s Manual<br />

STEPOUT<br />

“후입우선”방식의 스탭제어에 대하여 설명합니다. 동일조에서 여러 개의 입력이 들어와도<br />

가장 나중에 들어온 스탭만 ON 되고, 나머지 스탭은 OFF 됩니다.<br />

P1 이 ON 되면 0 조의 2 번 스탭이 ON 됩니다. P0 이 ON 되면 0 조의 1 번 스탭이 ON 됩니다.<br />

무조건 나중에 들어온 입력이 ON 되고 나머지는 자동적으로 OFF 됩니다. 한번 결정된<br />

상태는 다른 입력이 있을 때까지 계속 유지됩니다.<br />

P0<br />

P1<br />

P2<br />

S0:0<br />

S0:1<br />

S0:2<br />

이 타이밍도에 의하면 0 조의 2 번 스탭이 들어온 뒤, 1 번 스탭이 나중에 들어온 것을 되어<br />

있습니다. 1 번 스탭이 먼저 들어오고 2 번 스탭이 나중에 들어온 경우에는, 2 번 스탭이<br />

ON 되고 나머지는 OFF 됩니다. 순서에 상관없이 무조건 나중에 들어온 것 하나만 ON 되는<br />

상황입니다.<br />

스탭 콘트롤은 공정처리에 사용됩니다. 1 공정, 2 공정, 3 공정이 차례대로 수행되는 회로가<br />

필요한 경우, STEPSET, STEPOUT 명령을 사용하면 S 릴레이를 일정한 상태로 설정할 수<br />

있습니다. 이렇게 해서 상태가 결정된 S 릴레이를 MCS 등과 연계하여 사용하는 방법으로<br />

공정제어를 할 수 있습니다.<br />

S 릴레이는 자기 보존기능을 가지고 있습니다. 다른 입력이 있기 전까지는 현재상태를<br />

유지하게 됩니다. 또한 S 릴레이의 한 조에는 반드시 하나의 출력만 ON 상태가 됩니다.<br />

- 91 -


TinyPLC TPC9X User’s Manual<br />

비교명령<br />

두 개의 워드(16 비트), 또는 더블워드(32 비트)값을 비교해서 조건을 만족하면 접점을<br />

ON 합니다. 총 12 개의 비교명령이 있습니다.<br />

비교명령 비교대상 동작설명<br />

=, s1, s2 워드(16 비트) S1 과 s2 가 서로 같을 때 접점이 On 됩니다.<br />

, s1, s2 워드(16 비트) S1 과 s2 가 서로 다를 때 접점이 On 됩니다.<br />

>, s1, s2 워드(16 비트) S1 > s2 일 때 접점이 On 됩니다.<br />

=, s1, s2 워드(16 비트) S1 >= s2 일 때 접점이 On 됩니다.<br />

s2 일 때 접점이 On 됩니다.<br />

D=, s1, s2 더블워드(32 비트) S1 >= s2 일 때 접점이 On 됩니다.<br />

D= 99 이면 M0 이<br />

ON 됩니다. 마치 베이직에서 IF D0 = T1 AND C0 >= 99 ….와 같은 식으로 AND, OR 로 여러<br />

개의 조건을 나열하는 것과 같습니다.<br />

* 주의사항 : 이 비교명령으로 실수 (A 영역) 또는 32 비트 정수 (B 영역)의 값을 비교할 수<br />

없습니다. A,B 영역의 값을 비교할 때에는 IF 명령(FUNC 형 명령)을 사용하시기 바랍니다.<br />

- 92 -


TinyPLC TPC9X User’s Manual<br />

제 6 장<br />

응용명령어<br />

- 93 -


TinyPLC TPC9X User’s Manual<br />

응용명령어<br />

명령어 파라메터 설명<br />

전 송 명 령 군<br />

WMOV s,d 워드 데이터 전송<br />

DWMOV s,d 더블워드 데이터전송<br />

WXCHG s,d 워드 데이터 교환<br />

DWXCHG s,d 더블워드 데이터 교환<br />

FMOV s,d,n 데이터 채움 명령<br />

GMOV s,d,n 그룹전송 명령<br />

증 감 명 령 군<br />

WINC d 워드 1 증가 명령<br />

DWINC d 더블워드 1 증가 명령<br />

WDEC d 워드 1 감소 명령<br />

DWDEC d 더블워드 1 감소 명령<br />

사 칙 연 산 명 령 군<br />

WADD s1,s2,d 워드 덧셈 명령<br />

DWADD s1,s2,d 더블워드 덧셈 명령<br />

WSUB s1,s2,d 워드 뺄셈 명령<br />

DWSUB s1,s2,d 더블워드 뺄셈 명령<br />

WMUL s1,s2,d 워드 곱셈 명령<br />

DWMUL s1,s2,d 더블워드 곱셈 명령<br />

WDIV s1,s2,d 워드 나눗셈 명령<br />

DWDIV s1,s2,d 더블워드 나눗셈 명령<br />

논 리 연 산 명 령 군<br />

WAND s1,s2,d 워드 AND 연산 명령<br />

DWAND s1,s2,d 더블워드 AND 연산 명령<br />

WOR s1,s2,d 워드 OR 연산 명령<br />

DWOR s1,s2,d 더블워드 OR 연산 명령<br />

WXOR s1,s2,d 워드 XOR 연산 명령<br />

DWXOR s1,s2,d 더블워드 XOR 연산 명령<br />

회 전 명 령 군<br />

WROL d 워드 1 비트 좌 회전 명령<br />

DWROL d 더블워드 1 비트 좌 회전 명령<br />

WROR d 워드 1 비트 우 회전 명령<br />

DWROR d 더블워드 1 비트 우 회전 명령<br />

- 94 -


TinyPLC TPC9X User’s Manual<br />

워드와 더블워드 저장방식<br />

더블워드는 4 개의 바이트로 구성되어 있고, 워드는 2 개의 바이트로 구성되어 있습니다.<br />

1 BYTE<br />

DOUBLE WORD<br />

1 WORD<br />

워드 또는 더블워드를 메모리에 저장하는 방식에는 두 가지가 있습니다. LOW BYTE 부터<br />

저장하는 방식과, HIGH BYTE 부터 저장하는 방식입니다. TPC9X 시리즈에서는 이중 LOW<br />

BYTE 부터 저장하는 방식을 채택하였습니다.<br />

메모리 0 번지에 1 워드 1234H 를 저장하고, 5 번지에 더블워드 12345678H 를 저장하는<br />

경우를 그림으로 표현한 것입니다. 단, 메모리번지 하나에 1 바이트의 값이 저장되는<br />

경우입니다.<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

34<br />

12<br />

78<br />

56<br />

34<br />

12<br />

C, T, D 영역의 경우 1 워드단위로 되어 있어, 더블워드를 기억하기 위해서 2 워드의<br />

기억장소가 필요합니다. 다음은 D0 에 더블워드 값인 12345678H 저장하는 경우입니다.<br />

D1 위치에 상위워드인 1234H 가 저장됩니다.<br />

D0<br />

D1<br />

D2<br />

D3<br />

D4<br />

5678<br />

1234<br />

*TPC3X 와는 저장하는 방식이 반대이므로, 주의하시기 바랍니다. TPC3X 에서는 워드를 저장<br />

할때에 HIGH BYTE 를 먼저저장하고, LOW BYTE 가 뒤에 저장됩니다.<br />

- 95 -


TinyPLC TPC9X User’s Manual<br />

2 진수와 10 진수, 16 진수<br />

프로그램을 작성하기 위해서는 10 진수 이외에도 2 진수, 16 진수를 사용합니다. 다음은<br />

2 진수와 10 진수, 16 진수와의 관계를 정리한 표입니다. 16 진수에서는 10 부터 15 까지의<br />

수를 표시하기 위해, A~F 까지의 알파벳을 사용합니다.<br />

10 진수 2 진수 16 진수<br />

0 0000 0<br />

1 0001 1<br />

2 0010 2<br />

3 0011 3<br />

4 0100 4<br />

5 0101 5<br />

6 0110 6<br />

7 0111 7<br />

8 1000 8<br />

9 1001 9<br />

10 1010 A<br />

11 1011 B<br />

12 1100 C<br />

13 1101 D<br />

14 1110 E<br />

15 1111 F<br />

TPC9X 시리즈에서는 다음과 같은 방법으로 16 진수를 표기합니다.<br />

16 진수 표기방법 1 : 0XABCD<br />

16 진수 표기방법 2 : 0ABCDH<br />

표기방법 1 은 기본명령어, 응용명령어, FUNC 형명령어에 모두 사용가능합니다.<br />

표기방법 2 는 기본명령어, 응용명령어에만 사용가능합니다. (영문자로 시작하는 경우 0 을<br />

붙이고 맨뒤에 H 를 붙여야 합니다.)<br />

10 진수는 100, 200, 123 과 같은 식으로 표시합니다.<br />

*16 진수 표기방식의 혼용을 피하기 위해 앞에 0X 를 붙이는 방식으로 통일해서 사용하는 것을<br />

권장합니다.<br />

- 96 -


TinyPLC TPC9X User’s Manual<br />

WMOV, DWMOV<br />

WMOV s, d<br />

DWMOV s, d<br />

WMOV 는 16 비트 데이터 전송명령으로, s 에 들어있는 값 (또는 16 비트 상수 값)을 d 로<br />

전송합니다. DWMOV 는 32 비트 데이터를 대상으로 하는 명령으로, 동작은 WMOV 와<br />

동일합니다.<br />

레더도<br />

사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

s (소스) O O O O O O<br />

d (목적지) O O O O O<br />

.<br />

M1 입력이 들어오면 D0 영역에 100 을 저장합니다. M2 입력이 들어오면 더블워드 값인<br />

1234H 를 D2 영역에 저장합니다.<br />

D0 100<br />

D1<br />

D2<br />

1234H<br />

D3 0 여기에는 0 이 저장됩니다.<br />

D4<br />

주의!<br />

DWMOV 명령으로 D2 영역에 값을 저장하면, D3 영역까지 영향을 준다는 사실을 잊지<br />

않도록 하세요!. 명령어 앞에 DW 가 붙어있는 명령어는 Double Word 명령이기에,<br />

32 비트영역에 영향을 주게 됩니다.<br />

- 97 -


TinyPLC TPC9X User’s Manual<br />

WXCHG, DWXCHG<br />

WXCHG s, d<br />

DWXCHG s, d<br />

데이터 교환명령으로, s 에 들어있는 값과 d 에 들어있는 값을 서로 맞교환 합니다.<br />

WXCHG 는 1 워드를 대상으로, DWXCHG 는 더블워드를 대상으로 명령을 수행합니다.<br />

레더도<br />

사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

s (소스) O O O O O O<br />

d (목적지) O O O O O<br />

.<br />

M1 입력이 들어오면 D0 영역에 100 을, D1 에 123 을 저장합니다. M2 입력이 들어오면 D0 과<br />

D1 의 내용을 서로 교환합니다. 그 결과는 다음과 같습니다.<br />

D0 123<br />

D1 100<br />

D2<br />

D3<br />

D4<br />

- 98 -


TinyPLC TPC9X User’s Manual<br />

FMOV<br />

FMOV s, d, n<br />

s 의 값을 d 에 저장합니다. 여기까지는 WMOV 명령과 같습니다. FMOV 는 n 의 숫자만큼<br />

계속해서 저장합니다. 일정구간을 같은 값으로 채울 수 있습니다. 주로 초기화를 하거나,<br />

메모리 클리어를 하는 목적으로 사용합니다.<br />

레더도<br />

사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

s (소스) O O O O O O<br />

d (목적지) O O O O O<br />

n<br />

O<br />

.<br />

LADDER 의 실행결과는 다음과 같습니다.<br />

D0 100<br />

D1 100<br />

D2 100<br />

D3 100<br />

D4 100<br />

D5 100<br />

*n 을 255 이내로 해야합니다.<br />

- 99 -


TinyPLC TPC9X User’s Manual<br />

GMOV<br />

GMOV s, d, n<br />

여러 개의 데이터를 한꺼번에 전송하는 그룹전송 명령입니다. 메모리의 일부분을 다른<br />

곳으로 카피할 수 있습니다. s 의 값을 d 로 지정된 개수 n 만큼 복사합니다. n 은 255 까지만<br />

사용하세요<br />

레더도<br />

사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

s (소스) O O O O O O<br />

d (목적지) O O O O O<br />

n<br />

O<br />

.<br />

LADDER 의 실행결과는 다음과 같습니다.<br />

D0 12<br />

D1 34<br />

D2 56<br />

D3 78<br />

D4 90<br />

D5<br />

D6<br />

D7<br />

D8<br />

D9<br />

D10 12<br />

D11 34<br />

D12 56<br />

D13 78<br />

D14 90<br />

D15<br />

D16<br />

- 100 -


TinyPLC TPC9X User’s Manual<br />

WINC, DWINC<br />

WDEC, DWDEC<br />

WINC d<br />

DWINC d<br />

WDEC d<br />

DWDEC d<br />

d 에 있는 값을 증가 또는 감소하는 명령입니다. WINC 는 1 워드 증가, DWINC 는 더블워드<br />

증가, WDEC 는 1 워드 감소, DWDEC 는 더블워드 감소합니다.<br />

레더도<br />

사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

d (목적지) O O O O O<br />

.<br />

LADDER 의 실행결과는 다음과 같습니다.<br />

D0 99<br />

D1<br />

D2<br />

D3<br />

- 101 -


TinyPLC TPC9X User’s Manual<br />

WADD,<br />

DWADD<br />

WADD s1, s2, d<br />

DWADD s1, s2, d<br />

s1 과 s2 를 더해서 d 에 저장합니다. WADD 는 워드연산, DWADD 는 더블워드 연산을<br />

수행합니다.<br />

레더도<br />

사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

S1 O O O O O O<br />

S2 O O O O O O<br />

d O O O O O<br />

.<br />

레더의 수행결과 결과 D1 에는 105 가 저장됩니다.<br />

D0 100<br />

D1 105<br />

D2<br />

- 102 -


TinyPLC TPC9X User’s Manual<br />

WSUB,<br />

DWSUB<br />

WSUB s1, s2, d<br />

DWSUB s1, s2, d<br />

S1 에서 s2 를 뺀 뒤, 결과를 d 에 저장합니다. WSUB 는 워드연산, DWSUB 는 더블워드<br />

연산을 수행합니다.<br />

레더도<br />

사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

S1 O O O O O O<br />

S2 O O O O O O<br />

d O O O O O<br />

.<br />

레더의 수행결과 결과 D1 에는 95 가 저장됩니다.<br />

D0 100<br />

D1 95<br />

D2<br />

- 103 -


TinyPLC TPC9X User’s Manual<br />

WMUL,<br />

DWMUL<br />

WMUL s1, s2, d<br />

DWMUL s1, s2, d<br />

s1 과 s2 를 곱해서 d 에 저장합니다. WMUL 는 워드끼리 연산한 뒤, 결과는 더블워드로<br />

저장합니다. DWMUL 은 더블워드끼리 연산한 뒤 결과는 64 비트 값으로 저장합니다.<br />

레더도<br />

사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

S1 O O O O O O<br />

S2 O O O O O O<br />

d O O O O O<br />

.<br />

연산결과 D1 에는 1234H * 1234H 의 결과값인 14B5A90H 가 더블워드로 저장됩니다.<br />

D0<br />

D1<br />

D2<br />

1234H<br />

5A90H<br />

14BH<br />

- 104 -


TinyPLC TPC9X User’s Manual<br />

이 레더의 실행결과 D2 에는 123456H * 1234H 의 결과값인 4B60AD78H 가 64 비트로<br />

저장됩니다. 결과가 D2 부터 D6 까지 저장된다는것에 주의하시기 바랍니다.<br />

D0<br />

3456H<br />

D1<br />

0012H<br />

D2<br />

0AD78H<br />

D3<br />

4B60H<br />

D4 0<br />

D5 0<br />

- 105 -


TinyPLC TPC9X User’s Manual<br />

WDIV,<br />

DWDIV<br />

WDIV s1, s2, d<br />

DWDIV s1, s2, d<br />

S1 에서 s2 를 나눈 뒤, 몫을 d 에 저장하고, 나머지는 d+1 위치에 저장합니다. WDIV 는<br />

워드연산, DWDIV 는 더블워드 연산입니다.<br />

레더도<br />

사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

S1 O O O O O O<br />

S2 O O O O O O<br />

d O O O O O<br />

.<br />

D0<br />

1234H<br />

D1<br />

D2 3<br />

D3<br />

D4<br />

611H<br />

D5 1<br />

D0<br />

5678H<br />

D1<br />

1234H<br />

D2 7<br />

D3 0<br />

D4<br />

0C335H<br />

D5<br />

299H<br />

D6 5<br />

D7 0<br />

- 106 -


TinyPLC TPC9X User’s Manual<br />

WOR,<br />

DWOR<br />

WOR s1, s2, d<br />

DWOR s1, s2, d<br />

s1 과 s2 를 OR 연산한 뒤 결과를 d 에 저장합니다. WOR 는 워드단위 연산, DWOR 는<br />

더블워드 단위 연산을 수행합니다.<br />

레더도<br />

사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

S1 O O O O O O<br />

S2 O O O O O O<br />

d O O O O O<br />

.<br />

위 레더가 수행된 결과는 다음과 같습니다.<br />

D0<br />

D1<br />

D2<br />

1200H<br />

34H<br />

1234H<br />

- 107 -


TinyPLC TPC9X User’s Manual<br />

WXOR,<br />

DWXOR<br />

WXOR s1, s2, d<br />

DWXOR s1, s2, d<br />

s1 과 s2 를 XOR 연산한 뒤 결과를 d 에 저장합니다. WXOR 는 워드단위 연산, DWXOR 는<br />

더블워드 단위 연산을 수행합니다.<br />

레더도<br />

사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

S1 O O O O O O<br />

S2 O O O O O O<br />

d O O O O O<br />

.<br />

위 레더가 수행된 결과는 다음과 같습니다.<br />

D0<br />

D1<br />

D2<br />

1234H<br />

0FFH<br />

12CBH<br />

특정비트를 반전시키고자 할 때, XOR 연산을 사용합니다.<br />

- 108 -


TinyPLC TPC9X User’s Manual<br />

WAND,<br />

DWAND<br />

WAND s1, s2, d<br />

DWAND s1, s2, d<br />

s1 과 s2 를 AND 연산한 뒤 결과를 d 에 저장합니다. WAND 는 워드단위 연산, DWAND 는<br />

더블워드 단위 연산을 수행합니다.<br />

레더도<br />

사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

S1 O O O O O O<br />

S2 O O O O O O<br />

d O O O O O<br />

.<br />

위 레더가 수행된 결과는 다음과 같습니다.<br />

D0<br />

D1<br />

D2<br />

1234H<br />

0FFH<br />

34H<br />

특정비트만 남기고자 할 때, AND 연산을 사용합니다.<br />

- 109 -


TinyPLC TPC9X User’s Manual<br />

WROL,DWROL<br />

WROL d<br />

DWROL d<br />

지정된 번지 d 의 내용은 좌로 1 비트씩 회전합니다. WROL 은 워드단위 좌회전명령이고,<br />

DWROL 명령은 더블워드 단위 좌회전명령입니다.<br />

레더도<br />

사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

d (목적지) O O O O O<br />

.<br />

D0 에 8421H 가 들어있었다고 가정할 때, 위 레더의 실행결과는 다음과 같습니다.<br />

D0<br />

D1<br />

0843H<br />

WROL, DWROL 의 동작을 그림으로 표현한 것입니다.<br />

- 110 -


TinyPLC TPC9X User’s Manual<br />

WROR,DWROR<br />

WROR d<br />

DWROR d<br />

지정된 번지 d 의 내용은 우로 1 비트씩 회전합니다. WROR 은 워드단위 우회전명령이고,<br />

DWROR 명령은 더블워드 단위 우회전명령입니다.<br />

레더도<br />

사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

d (목적지) O O O O O<br />

.<br />

D1 에 8421H 가 들어있었다고 가정할 때, 위 레더의 실행결과는 다음과 같습니다.<br />

D0<br />

D1<br />

0C210H<br />

WROR, DWROR 의 동작을 그림으로 표현한 것입니다.<br />

- 111 -


TinyPLC TPC9X User’s Manual<br />

GOTO,LABEL<br />

GOTO label<br />

LABEL label<br />

GOTO 는 지정된 라벨로 점프하는 분기명령입니다. label 은 라벨을 선언하기 위한<br />

명령입니다.<br />

START 가 ON 되면 SK_1 으로 점프합니다. 아래와 같이 사용하면 조건 분기명령으로<br />

사용할 수 있습니다. D0=C0 상황이 되면 SK_1 으로 점프합니다.<br />

- 112 -


TinyPLC TPC9X User’s Manual<br />

CALLS,SBRT,RET<br />

CALLS label<br />

SBRT label<br />

서브루틴과 관련된 명령군입니다. CALLS 는 서브루틴을 콜하고, SBRT 는 서브루틴의<br />

시작위치를 알리는 선언문입니다. RET 는 반드시 서브루틴의 맨 끝에 위치해야 합니다.<br />

메인 프로그램<br />

메인류틴의 끝에는 END가<br />

아닌 RET가 위치해야 함<br />

서브루틴의 시작지점<br />

서브루틴의 종료<br />

LADDER의 끝을<br />

알리는 END<br />

서브루틴을 작성할 때 주의사항이 있습니다. 메인 프로그램의 끝 지점에는 END 가 아닌 RET<br />

명령을 사용해서 “메인 프로그램의 끝 지점”을 구분해 주어야 합니다.<br />

RET 명령에는 조건을 연결할 수 없습니다. RET 명령은 무조건 복귀명령입니다.<br />

LADDER 프로그램의 가장 끝 지점에는 “END”를 작성해 주어야 합니다.<br />

* 서브루틴안에 다른 서브루틴을 정의할 수 없습니다.<br />

- 113 -


TinyPLC TPC9X User’s Manual<br />

TND<br />

TND 는 조건부 스캔종료명령입니다. 레더의 특정부분에서 임시로 스캔을 종료하고자 할 때<br />

사용합니다.<br />

위의 레더는 P0 의 입력이 ON 이면 스캔을 종료하는 예제입니다.<br />

서브루틴 강제종료에도 사용할 수 있습니다. 위의 예제에서 처럼 서브루틴 실행도중<br />

서브루틴 탈출조건 (P1)이 ON 되면, 루틴을 벗어나는 명령으로 사용합니다. TND 명령이<br />

서브루틴안에서 사용되었을 경우에는 스캔종료가 아니라 조건부 서브루틴 종료명령으로<br />

동작하게 됩니다.<br />

- 114 -


TinyPLC TPC9X User’s Manual<br />

제 7 장<br />

FUNC 형<br />

명령어 소개<br />

- 115 -


TinyPLC TPC9X User’s Manual<br />

FUNC 형 명령어란..<br />

실수연산, LCD 표시, 키패드입력등과 같이 기본명령어나 응용명령어에서 처리할 수 없는<br />

기능을 지원하는 명령어 입니다.<br />

FUNC 형 명령어는 “FUNC 릴레이번호, 명령어”와 같은 형식으로 기술합니다.<br />

FUNC 는 Function 의 약자로, 뒷부분의 명령어를 “특수기능”명령어로 선언해주는<br />

선언문입니다. 바로 뒤에 있는 숫자는 M 릴레이 영역중 하나를 의미합니다. 이 명령어가<br />

실행되는 동안, 해당 M 릴레이가 ON 상태를 유지합니다.<br />

FUNC 형 명령어는 1mS 스캔타임보다 긴 처리시간을 요구하는 명령어들이 많이 있습니다.<br />

“FUNC 형 명령어”를 레더 스캔타임안에서 실행하도록 한다면, 그 명령어가 끝날때까지<br />

레더의 다른부분이 실행하지 못하게 됩니다.<br />

그래서, “FUNC 형 명령어”가 실행되는 동안 레더의 실행이 멈추지 않게 하기 위해,<br />

스캔타임과 별도로 “FUNC 형 명령어”를 처리하도록 하고 있습니다.<br />

그리고, 이 FUNC 형 명령어가 처리되는 동안 해당 M 릴레이가 ON 되어 있도록해서,<br />

레더로직의 다른 부분에서 해당 M 릴레이를 참조하여, “특수명령”이 언제 시작했는지, 또는<br />

언제 끝났는지 알 수 있도록 하였습니다.<br />

- 116 -


TinyPLC TPC9X User’s Manual<br />

FUNC 형 명령 사용법<br />

다음은 FUNC 형 명령어를 사용하여, 실수연산을 하고 있는 예입니다. TPC9X 시리즈 에서<br />

A 영역에 실수를 저장할 수 있습니다. 그리고 각종 연산자를 사용해서, A 영역에 있는<br />

데이터와 또 다른 실수를 서로 연산하여, 그 결과를 다시 A 영역에 저장할 수 있습니다.<br />

M1 FUNC 4, A0 = 3.14<br />

M2 FUNC 4, A1 = A0 * 2.123 + 32.201<br />

M1 릴레이가 ON 되면, FUNC 4, A0 = 3.14 에 의해서, A0 영역에 3.14 가 저장됩니다.<br />

그리고, M2 릴레이가 ON 되면 A1 영역에 위에 기술한 연산결과가 저장됩니다.<br />

동시에 실행되는 두개의 다른 명령어가 있다면, 콜론을 사용해서 한줄에 적을수 도 있습니다.<br />

M1 FUNC 4, A0 = 3.14 : A1 = A0 * 2.123 * 32.201<br />

콜론대신, 세미콜론 (;)을 사용한다면, 한줄 아래로 내려서 표시됩니다.<br />

M1 FUNC 4, A0 = 3.14<br />

A1 = A0 * 2.123 * 32.201<br />

세미콜론이 있는 자리에서 줄바꿈이 되었습니다. 세미콜론은 레더표시에서는 보이지 않고,<br />

줄바꿈으로 바뀌게 됩니다. 입력하는 창에서는 세미콜론이 표시됩니다.<br />

아래 처럼, 미분 (DF 명령)을 사용해서, F30 이 ON 되었을때, 한번만 동작하도록 할 필요는<br />

없습니다. FUNC 명령사용시 자동적으로 미분(DF 명령)효과를 갖도록 되어 있기 때문입니다.<br />

- 117 -


FUNC 형 명령어가 많아지면 어떻게 되나?<br />

TinyPLC TPC9X User’s Manual<br />

하나의 레더 프로그램에서 FUNC 형 명령어가 많아진다고 해도, 레더의 스캔타임은 변화가<br />

없습니다.대신 FUNC 형 명령어에서 실행하는 명령어의 수행 대기시간이 길어집니다.<br />

좀더 쉽게 이해하기 위해서, 레더 처리기와, FUNC 처리기 두개가 있다고 가정해 보겠습니다.<br />

Ladder Logic<br />

Processor<br />

FUNC command<br />

Processor<br />

FUNC 8,PRINT<br />

FUNC 9,A0=0<br />

레더 처리기는 최소 1mS 간격으로 스캔하면서 레더를 처리합니다. 레더로직안에 FUNC 형<br />

명령이 있다면, FUNC 처리기에 “처리요청”을 해두고, 계속 나머지 레더를 수행합니다.<br />

FUNC 처리기에서는 레더처리기에서 요청한 FUNC 형 명령어를 처리해 나갑니다.<br />

FUNC 처리기도 일정시간의 스캔타임으로 레더처리기에서 요청한 “처리목록”을<br />

처리합니다. FUNC 형 명령어가 많아질수록 FUNC 처리기의 스캔타임이 길어지게 됩니다.<br />

레더처리기는 빠른 처리를 필요로하는 부분을 담당하고, FUNC 처리기는 실행시간을<br />

필요로하는 처리이면서 레더처리기에서 할 수 없는 부분을 담당합니다.<br />

* FUNC 처리가 한번 스캔할 때마다 F41 특수릴레이를 반전시킵니다. F41 을 출력포트에<br />

연결한뒤 “오실로 스코프”등으로 주기를 측정한다면, FUNC 처리기가 얼마만큼의 간격으로<br />

한번씩 실행되는지 알 수 있습니다.<br />

- 118 -


TinyPLC TPC9X User’s Manual<br />

FUNC 형 명령어는 왜 필요한가?<br />

레더로직으로는 능력의 한계가 있기 때문입니다. 레더로직은 빠른시간으로 스캐닝하면서<br />

입력접점과 출력접점사이의 논리연산을 처리하도록 만들어진 방식입니다.<br />

20,30 년전의 기계들은 단순한 로직구성만으로도 운영이 가능했지만, 최근의 기계들은<br />

여러가지 복잡한 요소들을 콘트롤 해야만 합니다. 예를 들어 통신, 디스플레이,<br />

산술연산등의 기능을 추가적으로 요구하고 있습니다.<br />

레더로직으로 이런일까지 처리하기에는 구조상 문제가 있습니다. 레더로직의 스캔타임은<br />

반드시 지켜져야 하기에, 이 스캔타임 안에서 산술연산과 디스플레이, 키패드입력과 같은<br />

일을 모두 처리할 수가 없는 것입니다.<br />

그래서 TPC9X 시리즈에서는 FUNC 형 명령어로 레더의 부족한 부분을 보충하도록 하고<br />

있습니다. FUNC 형 명령어는 내부적으로 SCRIPT 언어로 자동 번역되어, Ladder 와는 별도로<br />

처리됩니다.<br />

즉, Ladder 는 빠른 스캔타임을 보장해주면서, 부가적이고 복잡한 기능은 Func 처리기에서<br />

처리하는 것입니다.<br />

난 바쁘니까, 이 일좀 대신 처리해줘..<br />

복잡한 일은 나한테 맡겨!<br />

LADDER LOGIC 처리기<br />

FUNC 처리기<br />

- 119 -


TinyPLC TPC9X User’s Manual<br />

FUNC 형 명령어 사용시 주의할 점<br />

여러 개의 FUNC 형 명령어를 사용할 때, 가장 주의할 점은 FUNC 명령 바로뒤에 있는<br />

M 릴레이를 서로 중복되지 않도록 하는 것입니다.<br />

P20<br />

FUNC 9, PRINT “ABC”<br />

P21<br />

FUNC 9, PRINT “BCD”<br />

만약 중복된 번호를 사용한다면, 어느 한쪽의 입력 조건이 만족되었을 경우, 다 같이<br />

실행되는 결과가 발생됩니다. 위 경우 P20 이 ON 되면 두줄모두 실행이 되고 맙니다.<br />

그리고, Func 번호가 틀리더라도, 동작조건이 같으면 동시에 수행됩니다. 이때에는<br />

레더도에서 윗줄에 있는 명령이 먼저 수행됩니다.<br />

P20 FUNC 9, A1 = 3.14<br />

P20 FUNC 10, A2 = A1 * 3.0<br />

이 경우는 다음과 같은 레더처럼 콜론 ( : )을 사용해서 한줄에 모두 기술해주는 것이<br />

좋습니다.<br />

P20 FUNC 9, A1 = 3.14 : A2 = A1 * 3.0<br />

알아두세요!<br />

FUNC 뒤에 적은 M 릴레이의 번호 순서대로 실행되는 것이 아닙니다. 레더의 위에적은<br />

FUNC 형명령부터 아래쪽으로 실행됩니다.<br />

- 120 -


TinyPLC TPC9X User’s Manual<br />

제 8 장<br />

FUNC 형<br />

연산식<br />

- 121 -


FUNC 형 명령어에서의 연산식<br />

TinyPLC TPC9X User’s Manual<br />

FUNC 형 명령어에서는 실제 수학식에 가까운, 직관적인 표현으로 수식을 기술합니다.<br />

앞에서 설명한 응용명령어 (WADD, WMUL)에 사용하는 방법보다는 월등히 편리한<br />

방법입니다.<br />

D0 = D1 * D3 + 100 – D4<br />

이 수식을 응용명령어로 풀어쓰면 다음과 같이 됩니다.<br />

한눈에 이해하기 힘든 형태입니다. 이것을 FUNC 형 명령어로 바꾸면 다음과 같이 됩니다.<br />

두 방법의 결과는 동일하지만, 다음과 같은 차이점이 있습니다.<br />

앞의 방법 (WMUL, WADD 를 사용한 방법)은 레더의 스캔타임 안에서 동작하는 것이고,<br />

FUNC 형 명령어를 사용한 방법은 레더의 스캔타임 밖에서 별도로 (FUNC 처리기에서..)<br />

처리를 하는 것입니다.<br />

위의 경우, D0=D1*D3 + 100 – D4 연산을 수행하는 동안 M2 릴레이가 ON 상태를 유지하고,<br />

연산이 끝나면 M2 릴레이가 OFF 됩니다. 즉, M2 릴레이가 OFF 될때까지 기다린후, D0<br />

영역을 확인해보면 결과가 들어있는 것을 볼 수 있습니다.<br />

- 122 -


FUNC 형 수식에서의 릴레이/저장영역 사용법<br />

TinyPLC TPC9X User’s Manual<br />

레더에서 사용하는 각 릴레이 (P, M K 등) 과 데이터 저장 영역( D 영역) 을 FUNC 형<br />

수식에서 사용할 수 있습니다.<br />

영역 설명 범위<br />

P,M,K 1 비트 정수 1 또는 0<br />

C,T,D,Y 16 비트 부호없는 정수 0~ 65535<br />

A 부호있는 실수 (32 비트) -3.402823E+38 to 3.402823E+38<br />

B 32 비트 부호있는 정수 -2147483648 to +2147483647<br />

연산자 사용법<br />

+, -와 같은 부호를 연산자라고 합니다. FUNC 형 명령어에서 다음과 같은 연산자를 사용할<br />

수 있습니다.<br />

연산자 설명 종류 우선순위<br />

^ 거듭제곱 산술연산 높음<br />

*,/,MOD 곱하기,나누기,나머지 산술연산<br />

+,- 더하기,빼기 산술연산<br />

좌쉬프트, 우쉬프트 논리연산<br />

AND, XOR, OR AND,XOR,OR 연산 논리연산 낮음<br />

각 각의 연산자별로 우선순위가 있습니다. 여러 개의 연산자가 하나의 연산식에 동시에<br />

사용되었을 경우, 다음과 같은 우선순위에 의해서 처리합니다.<br />

1. 괄호안의 수식을 가장 먼저 처리합니다.<br />

2. – (마이너스)부호를 처리합니다.<br />

3. 거듭제곱을 처리합니다.<br />

4. 곱하기,나누기, 나머지연산을 처리합니다.<br />

5. 더하기,빼기를 처리합니다.<br />

6. 좌쉬프트, 우쉬프트연산을 처리합니다.<br />

7. AND, XOR, OR 와 같은 논리연산을 처리합니다.<br />

같은 우선순위를 같는 연산자가 나열되어 있다면, 왼쪽에서 오른쪽으로 연산을 진행합니다.<br />

- 123 -


TinyPLC TPC9X User’s Manual<br />

FUNC 3, B0 = B1 + 300 * B2<br />

이 경우, 300 * B2 를 먼저 계산한뒤, 계산결과와 B1 을 더합니다. *연산자가 +연산자보다<br />

우선순위가 높습니다.<br />

수학에서 사용하는 연산기호와 다른 연산기호를 사용합니다.<br />

Operator 수학식 Func 수식 사용 예<br />

덧셈 + + 3+4+5, 6+A<br />

뺄셈 - - 10-3, 63-B<br />

곱셈 X * 2 * 4, A * 5<br />

나누기 / 1234/3, 3843/A<br />

제곱 5 3 ^ 5^3, A^2<br />

나머지연산 없음 mod 102 mod 3<br />

다음과 같은 분수 식은 괄호와 슬레쉬를 사용한 식으로 바꾸어 사용합니다.<br />

알아두세요!<br />

컴퓨터에서 음수는 2 의 보수로 표현합니다. 16 비트 사용시 –1 은 0XFFFF 가 됩니다.<br />

–2 는 0XFFFE 입니다.<br />

D0 영역에 1 이 들어있는데, 빼기 2 를 한 경우에는 –1 이 되므로, 0XFFFF 가 저장됩니다.<br />

0XFFFF 를 그대로 10 진수로 바꾸면 65535 가 됩니다. –1 이 65535 라는 숫자로<br />

둔갑한것입니다. 이런 오류를 막기 위해서는 가장상위비트를 부호비트로 해석하면 됩니다.<br />

가장 상위비트가 1 이면 음수입니다.<br />

TPC9X 시리즈에서는 A, B 영역에만 음수를 저장할 수 있습니다. 나머지 C,T,D 영역에서<br />

FUNC 형 명령어로 연산하였을 경우에는 모두 양수로 취급되므로 주의하시기 바랍니다.<br />

- 124 -


TinyPLC TPC9X User’s Manual<br />

+, - 연산자<br />

레더도<br />

설명<br />

FUNC 3, B0 = B1 + 100<br />

B1 에 있는 값과 100 을 더하여,<br />

B0 에 저장합니다.<br />

FUNC 3, B0 = B1 - 100<br />

B1 에 있는 값에서 100 을 뺀뒤<br />

B0 에 저장합니다.<br />

연산자와 함께 사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

피연산자 O O O O O O O O<br />

결과 O O O O O O<br />

.<br />

*, / 연산자<br />

레더도<br />

설명<br />

FUNC 3, B0 = B1 * 3<br />

B1 에 있는 값에 3 을 곱해서,<br />

B0 에 저장합니다.<br />

FUNC 3, B0 = B1 / 5<br />

B1 에 있는 값을 5 로 나눈뒤<br />

몫을 B0 에 저장합니다.<br />

연산자와 함께 사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

피연산자 O O O O O O O O<br />

결과 O O O O O O<br />

.<br />

- 125 -


TinyPLC TPC9X User’s Manual<br />

MOD 연산자<br />

레더도<br />

설명<br />

FUNC 3, B0 = B1 MOD 3<br />

B1 에 들어있는값을 3 으로<br />

나눈뒤 그 나머지를 B0 에<br />

저장합니다.<br />

연산자와 함께 사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

피연산자 O O O O O O<br />

결과 O O O O O<br />

.<br />

^ 연산자<br />

레더도<br />

설명<br />

FUNC 3, B0 = B1 ^ 3<br />

B1 에 들어있는값을 3 제곱한뒤<br />

그 결과를 B0 에 저장합니다.<br />

연산자와 함께 사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

피연산자 O O O O O O O O<br />

결과 O O O O O O<br />

.<br />

- 126 -


TinyPLC TPC9X User’s Manual<br />

AND 연산자<br />

레더도<br />

설명<br />

FUNC 3, B0 = B1 AND 0X00FF<br />

B1 에 들어있는값을 0X00FF 와<br />

AND 연산한후 그 결과를 B0 에<br />

저장합니다.<br />

연산자와 함께 사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

피연산자 O O O O O O<br />

결과 O O O O O<br />

.<br />

B1 에 0X1234 가 들어있을 경우, 결과는 0X34 가 됩니다. 즉, 아래 8 비트만 남기고, 상위<br />

8 비트를 제거한 것입니다. AND 연산은 특정 비트만 남기는 “마스크’연산에 사용됩니다.<br />

OR 연산자<br />

레더도<br />

설명<br />

FUNC 3, B0 = B1 OR 0X1200<br />

B1 에 들어있는값을 0X1200 와<br />

OR 연산한후 그 결과를 B0 에<br />

저장합니다.<br />

연산자와 함께 사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

피연산자 O O O O O O<br />

결과 O O O O O<br />

.<br />

B1 에 0X34 가 들어있을 경우 결과는 0X1234 가 됩니다. OR 연산은 “비트합”연산을 할 때<br />

사용됩니다.<br />

- 127 -


TinyPLC TPC9X User’s Manual<br />

XOR 연산자<br />

레더도<br />

설명<br />

FUNC 3, B0 = B1 XOR 0XFF<br />

B1 에 들어있는값을 0XFF 와<br />

XOR 연산한후 그 결과를 B0 에<br />

저장합니다.<br />

연산자와 함께 사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

피연산자 O O O O O O<br />

결과 O O O O O<br />

.<br />

> 연산자 (우 쉬프트)<br />

레더도<br />

설명<br />

FUNC 3, B0 = B1 > 3<br />

B1 에 들어있는값을 왼쪽으로<br />

3 비트 쉬프트 시킨뒤, B0 에<br />

저장합니다.<br />

B1 에 들어있는값을 오른쪽으로<br />

3 비트 쉬프트 시킨뒤, B0 에<br />

저장합니다.<br />

연산자와 함께 사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

피연산자 O O O O O<br />

결과 O O O O O<br />

.<br />

정수형 영역 (C,T,D,Y,B)에서만 사용할 수 있습니다. 밀려나간 값은 소실되고, 새로 들어오는<br />

비트는 모두 0 이 됩니다.<br />

- 128 -


TinyPLC TPC9X User’s Manual<br />

수학함수<br />

TPC9X 시리즈에서는 실수와 함께 다양한 수학함수를 사용하여, 복잡한 연산식을 처리할 수<br />

있습니다. 수학함수는 실수형 상수 또는 A 영역(실수영역)데이터만을 취급합니다.<br />

SIN, COS, TAN<br />

레더도<br />

설명<br />

FUNC 3, A0 = SIN A1<br />

SIN A1 의 결과를 A0 에<br />

저장합니다.<br />

FUNC 3, A0 = COS A1<br />

COS A1 의 결과를 A0 에<br />

저장합니다.<br />

FUNC 3, A0 = TAN A1<br />

TAN A1 의 결과를 A0 에<br />

저장합니다.<br />

함께 사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

피연산자 O O<br />

결과<br />

O<br />

.<br />

- 129 -


TinyPLC TPC9X User’s Manual<br />

ASIN, ACOS, ATAN<br />

Arc SIN, Arc COS, Arc TAN 결과값을 반환합니다.<br />

레더도<br />

설명<br />

FUNC 3, A0 = ASIN A1<br />

ASIN A1 의 결과를 A0 에<br />

저장합니다.<br />

FUNC 3, A0 = ACOS A1<br />

ACOS A1 의 결과를 A0 에<br />

저장합니다.<br />

FUNC 3, A0 = ATAN A1<br />

ATAN A1 의 결과를 A0 에<br />

저장합니다.<br />

함께 사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

피연산자 O O<br />

결과<br />

O<br />

.<br />

- 130 -


TinyPLC TPC9X User’s Manual<br />

SINH, COSH, TANH<br />

하이퍼 볼릭 SIN, 하이퍼볼릭 COS, 하이퍼 볼릭 TAN 결과값을 반환합니다.<br />

레더도<br />

설명<br />

FUNC 3, A0 = SINH A1<br />

SINH A1 의 결과를 A0 에<br />

저장합니다.<br />

FUNC 3, A0 = COSH A1<br />

COSH A1 의 결과를 A0 에<br />

저장합니다.<br />

FUNC 3, A0 = TANHA1<br />

TANH A1 의 결과를 A0 에<br />

저장합니다.<br />

함께 사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

피연산자 O O<br />

결과<br />

O<br />

.<br />

- 131 -


TinyPLC TPC9X User’s Manual<br />

SQR<br />

제곱근 값을 반환합니다.<br />

레더도<br />

설명<br />

FUNC 3, A0 = SQR A1<br />

A1 의 제곱근 값을 A0 에<br />

저장합니다.<br />

함께 사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

피연산자 O O<br />

결과<br />

O<br />

.<br />

EXP<br />

자연대수 E X 값을 반환합니다.<br />

레더도<br />

설명<br />

FUNC 3, A0 = EXP A1<br />

A1 의 자연대수값을 A0 에<br />

저장합니다.<br />

함께 사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

피연산자 O O<br />

결과<br />

O<br />

.<br />

- 132 -


TinyPLC TPC9X User’s Manual<br />

LOG, LOG10<br />

레더도<br />

설명<br />

FUNC 3, A0 = LOG A1<br />

A1 의 자연로그값을 A0 에<br />

저장합니다.<br />

FUNC 3, A0 = LOG10 A1<br />

A1 의 상용로그값을 A0 에<br />

저장합니다.<br />

함께 사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

피연산자 O O<br />

결과<br />

O<br />

.<br />

FABS<br />

실수의 절대값을 반환합니다. 정수의 절대값을 구하고자 할때는 ABS 함수를 사용하십시오.<br />

레더도<br />

설명<br />

FUNC 3, A0 = FABS A1<br />

A1 의 절대값을 A0 에<br />

저장합니다.<br />

함께 사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

피연산자 O O<br />

결과<br />

O<br />

.<br />

- 133 -


TinyPLC TPC9X User’s Manual<br />

FLOOR<br />

레더도<br />

설명<br />

FUNC 3, B0 = FLOOR A1<br />

A1 을 넘지않는 정수를 B0 에<br />

저장합니다.<br />

함께 사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

피연산자 O O O<br />

결과<br />

O<br />

.<br />

ABS<br />

정수의 절대값을 반환합니다. 실수의 절대값을 구하고자 할때는 FABS 함수를 사용하십시오.<br />

레더도<br />

설명<br />

FUNC 3, B0 = ABS B1<br />

B1 의 절대값을 B0 에<br />

저장합니다.<br />

함께 사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

피연산자 O O O O O O<br />

결과 O O O O O<br />

.<br />

- 134 -


TinyPLC TPC9X User’s Manual<br />

비교하기<br />

아래와 같은 방식의 비교명령으로는 C,T,D,Y 영역등 16 비트 정수만을 대상으로 합니다.<br />

실수 및 32 비트 정수를 비교하기 위해서는, IF 명령을 사용해서 비교를 해야 합니다.<br />

IF<br />

레더도<br />

FUNC 5, IF A0 > 0.123 THEN : 실행문 : END IF<br />

함께 사용가능한 릴레이/데이터영역<br />

가능영역 P M F S K C T D Y A B 정수형상수 실수형상수<br />

피연산자 O O O O O O O O<br />

.<br />

*주의사항 : THEN 뒤에 반드시 콜론( : ) 또는 세미콜론 (; )을 붙이고, 조건이 만족되었을 때<br />

실행할 명령문을 적습니다. 그리고 맨끝에는 콜론 또는 세미콜론을 붙이고 END IF 를 적어<br />

줍니다.<br />

END 와 IF 는 붙여써도 되고, 한칸 띄어 써도 됩니다.<br />

- 135 -


조건식에 AND 조건 (또는 OR 조건)을 사용할 수 있습니다.<br />

TinyPLC TPC9X User’s Manual<br />

FUNC 5, IF A0 > 0.123 AND A0 < 0.2 THEN : A0=123 : B0 = 345 : END IF<br />

다음과 같은 방법으로 명령문 여러 개를 동시에 적어줄 수도 있습니다.<br />

FUNC 5, IF A0 > 0.123 THEN : A0=123 : B0 = 345 : END IF<br />

조건이 참이 아닌경우에 대한 처리를 추가하고 싶다면, ELSE 를 사용하여 다음과 같이<br />

기술하십시오.<br />

FUNC 5, IF A0 > 0.123 THEN : A=123 : ELSE : B=123 : END IF<br />

실수값을 서로 비교할 때, 다음과 같은 사항에 주의하시기 바랍니다.<br />

1 나누기 3 의 결과는 0.33333333333(무한대로 3 이 계속되는 순환소수가 됨) 이 됩니다.<br />

A0 에 0.333333333 을 넣고 1/3 의 결과값과 비교한다면, 두 수는 일치하지 않음으로<br />

판단됩니다. 근사치이지만, 일치하지는 않기 때문입니다.<br />

FUNC 5, A0 = 1/3 : IF A0 = 0.33333333 THEN : A1=1 : END IF<br />

실수를 서로 비교할때에는 소수점 맨 뒷자리까지 완벽히 일치하는 경우가 아니면, 서로<br />

일치하지 않음으로 판단됩니다. 실수 비교시 =보다는 대소 비교 (어느 범위에 들어있는지<br />

판단)로 판단하시는 것이 좋습니다.<br />

FUNC 5, A0 = 1/3 : IF A0 > 0.3 AND A0 < 0.4 THEN : A1=1 : END IF<br />

- 136 -


TinyPLC TPC9X User’s Manual<br />

컴퓨터에서의 실수사용<br />

2 진수로 실수를 표현하는데 에는 수학적인 한계상황이 있습니다. 1 나누기 3 을 10 진수로<br />

완벽히 표시할 수 없듯이, 2 진체계를 사용하는 컴퓨터가 모든 실수를 기록할 수는 없습니다.<br />

TinyPLC 에서도 2 진법으로 실수를 관리하기 때문에 표현할 수 없는 숫자가 존재합니다.<br />

예를들어, 42.0 을 A0 영역에 저장한뒤, LCD 등에 표시해보면 41.99999999 로 표시됩니다.<br />

그 이유는 다음과 같습니다. 2 진수로 소수점을 표시한뒤, 다시 10 진수로 바꿔보겠습니다.<br />

0.0 은 십진수로도 역시 0 이 됩니다.<br />

0.0001 은 십진수로 0.0625 가 됩니다.<br />

0.0010 은 십진수로 0.125 가 됩니다.<br />

0.0011 은 십진수로 0.1875 가 됩니다.<br />

0.0100 은 십진수로 0.25 가 됩니다.<br />

0.0101 은 십진수로 0.3125 가 됩니다.<br />

따라서 2 진법의 소수점(실수)표현으로는 0.25, 0.125, 0.0625 등을 조합한 (더한) 소수만이<br />

표현할 수 있게 됩니다.<br />

따라서, 표현할 수 없는 숫자는 근사치로 대신하게 됩니다. 42.0 을 저장했는데 41.9999 가<br />

저장되는 것도 같은 원리입니다.<br />

실수가 포함된 연산식<br />

연산식에는 정수와 실수를 동시에 사용할 수 있습니다. 결과를 저장하는 곳이 A 영역이면<br />

실수형태로 저장되고, 정수영역 (B, C, T, D, Y)이면 정수로 저장됩니다.<br />

FUNC 3, A0 = B0 * 3.14<br />

B0 는 정수영역이지만, 3.14 와 곱한뒤 A0 에 실수형태로 저장됩니다. 이 처럼 연산과정에서,<br />

정수가 사용되었는지, 실수가 사용되었는지는 중요하지 않고, 최종 결과가 저장될 영역이<br />

실수영역(A 영역)이면 실수로 저장되고, 정수영역이면 정수로 저장됩니다.<br />

- 137 -


TinyPLC TPC9X User’s Manual<br />

인덱스 지정<br />

FUNC 형 명령에서 수식을 사용할 때, 인덱스 변수의 사용이 가능합니다. 인덱스 변수를<br />

사용하기 위해서는 다음과 같은 형태로 기술해 주어야 합니다.<br />

원래 표기방법 인덱스변수 표기방법 사용예 D1=8 일때<br />

최종번지<br />

D0 _D(0) _D(D1) D8<br />

T0 _T(0) _T(D1) T8<br />

C0 _C(0) _C(D1) C8<br />

R0 _R(0) _R(D1) R8<br />

A0 _A(0) _A(D1) A8<br />

B0 _B(0) _B(D1) B8<br />

언더바와 릴레이명을 붙여서 쓴 뒤 괄호안에 번지를 적어줍니다. 번지대신 다른<br />

데이터영역을 적어주면 “인덱스변수”가 됩니다.<br />

D0 에 0 이 들어있으므로, A0 영역에 42.1 을 저장합니다.<br />

- 138 -


TinyPLC TPC9X User’s Manual<br />

Func 형 연산식 사용시 주의할 점 1<br />

응용명령어를 사용하는 연산식과 Func 형 연산식을 혼용한다면, 엉뚱한 결과값이 나오게<br />

됩니다.<br />

FUNC 5, D0 = 123<br />

WMOV 100, D1<br />

WMUL D0, D1, D2<br />

D0 에 123 을 넣고, D1 에 100 을 넣고, 두값을 곱해서 D2 에 넣는 레더프로그램입니다.<br />

얼핏봐서는 제대로된 것 같지만, D2 에는 제대로된 결과값이 들어가지 않습니다.<br />

응용명령어 WMOV 는 레더스캐닝중 곧바로 실행되지만, FUNC 형 명령어는<br />

FUNC 처리기에 실행을 의뢰만 하기 때문입니다.<br />

위의 레더프로그램에서는 WMUL 이 실행되는 시점에 D1 에는 100 이 들어가 있지 않게<br />

됩니다.<br />

응용명령어를 사용하려면 하나의 연산식을 처음부터 끝까지 모두 응용명령어로만 작성해<br />

주어야합니다.<br />

마찬가지로 FUNC 형 명령어를 사용하려면, 하나의 연산식을 처음부터 끝까지 모두<br />

FUNC 형 명령어로 작성해 주어야 합니다.<br />

FUNC 5, D0=123 : D1=100 : D2 = D0 * D1<br />

- 139 -


TinyPLC TPC9X User’s Manual<br />

Func 형 연산식 사용시 주의할 점 2<br />

FUNC 형 명령어의 실행조건으로 F1 (상시 ON)을 사용할 수 없습니다. 왜냐하면<br />

FUNC 명령은 내부적으로 DF (상승엣지 검출)이 들어있기 때문입니다. F1 은 처음부터<br />

ON 인상태를 계속 유지하고 있기 때문에 상승엣지가 발생하지 않습니다.<br />

F1<br />

FUNC 2, D0 = D10<br />

‘ F1 을 사용할 수 없습니다.<br />

릴레이명, 영역명칭을 사용할 경우 반드시 알파벳과 숫자를 붙여서 써주어야 합니다.<br />

FUNC 2, Y10 = 0<br />

‘ 제대로된 입력방법입니다.<br />

FUNC 2, Y 10 = 0<br />

‘ Y 와 10 사이에 공백이 있으면 안됩니다.<br />

- 140 -


TinyPLC TPC9X User’s Manual<br />

제 9 장<br />

LCD<br />

디스플레이<br />

- 141 -


TinyPLC 에서의 LCD 디스플레이<br />

TinyPLC TPC9X User’s Manual<br />

TPC9X 시리즈에서는 I2C 통신방식의 디스플레이 모듈인 CLCD 를 사용할 수 있습니다. 이<br />

디스플레이 모듈은 “컴파일 테크놀로지”에서 시판하고 있는 제품입니다.<br />

TPC9X 시리즈의 코어모듈의 CUNET 포트 (TPC91A 의 경우 8,9 번핀)와 연결합니다.<br />

여러분이 직접 회로를 구성하실 경우에는 P8, P9 번 핀에 반드시 풀업저항 (4.7K 오옴) 을<br />

부착하여 주십시오.<br />

CLCD 모듈 뒷면에 보시면, Slave Address 를 셋팅할 수 있는 딥스위치가 있습니다. CLCD 를<br />

사용하기에 앞서, 딥스위치가 어떤상태인지 확인해 두시기 바랍니다.<br />

- 142 -


TinyPLC TPC9X User’s Manual<br />

CLCD 는 CUNET 통신 이외에도 RS232 신호를 받을 수 있도록 되어 있습니다만,<br />

TinyPLC 에서는 CUNET 통신만을 서포트 하고 있습니다.<br />

다음은 딥스위치로 설정방법에 대한 표입니다. DIP 스위치 중 4 번 스위치는 사용하지 않는<br />

스위치입니다.<br />

DIP 스위치 상태<br />

ON<br />

1 2 3<br />

I2C 의 SLAVE<br />

ADDRESS<br />

0<br />

ON<br />

ON<br />

ON<br />

ON<br />

ON<br />

ON<br />

ON<br />

1 2 3<br />

1 2 3<br />

1 2 3<br />

1 2 3<br />

1 2 3<br />

1 2 3<br />

1 2 3<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

- 143 -


TinyPLC TPC9X User’s Manual<br />

TpcWORKS 의 “PLC SETUP”탭 Advenced Setup 에서 아래 그림처럼, 셋팅을 해주어야 합니다.<br />

LCD 를 사용, CLCD 모듈, Slave Address 를 0 으로 맞춤<br />

CLCD 모듈 뒷면의 딥스위치상태와 위 화면에서의 Slave Address 값과 일치해야 합니다.<br />

- 144 -


TinyPLC TPC9X User’s Manual<br />

CLS<br />

레더도<br />

설명<br />

F2 FUNC 1, CLS LCD 화면을 클리어합니다.<br />

위의 레더도에서 처럼 F2 릴레이 (파워온시 1 스캔펄스만 ON 됨)에 CLS 명령을 연결해두면,<br />

TinyPLC 가 처음 파워온될 때, CLCD 로 CLS 명령이 전송되어, CLCD 화면이 클리어 됩니다.<br />

커서위치는 X=0, Y=0 으로 초기화합니다.<br />

CSROFF<br />

CSRON<br />

레더도<br />

F2<br />

FUNC 1, CSROFF<br />

설명<br />

커서표시를 OFF 합니다.<br />

F2<br />

FUNC 1, CSRON<br />

커서표시를 ON 합니다.<br />

CLCD 상에 표시되는 커서를 지웁니다. 다시 표시하고 싶을때에는 CSRON 명령을<br />

사용합니다. CLCD 최초 전원 ON 시에는 CSRON 상태입니다.<br />

- 145 -


TinyPLC TPC9X User’s Manual<br />

PRINT<br />

레더도<br />

표시결과<br />

FUNC 3, PRINT “ABCD”<br />

LCD 화면상에 문자 “ABCD”를 표시합니다.<br />

PRINT 명령은 CLCD 에 문자를 표시하거나, 숫자를 표시할 수 있는 가장 기본적인<br />

명령입니다. 위의 레더도에서 처럼 간단하게 문자를 표시할때에도 PRINT 명령어를<br />

사용합니다. 이 명령만 보내면, 현재 커서의 위치 (CLS 직후에는 X=0, Y=0 에 위치함)에<br />

ABC 를 표시합니다. 커서의 위치를 지정하고 싶다면, LOC 문자와 함께 PRINT 문을<br />

사용해야 합니다.<br />

LOC<br />

레더도<br />

표시결과<br />

FUNC 3, PRINT LOC, 2, 1, “ABCD”<br />

LCD 화면 위치 X=2, Y=1 에 ABCD 문자를<br />

표시합니다. LOC 다음에 코머(,)를 반드시 사용해야<br />

합니다.<br />

0<br />

1<br />

2<br />

3<br />

- 146 -


TinyPLC TPC9X User’s Manual<br />

DEC<br />

레더도<br />

표시결과<br />

FUNC 3, PRINT DEC D0<br />

D0 의 내용을 10 진수로 표시합니다.<br />

100<br />

정수영역 (C,T,D,Y,B)의 내용을 10 진형태로 표시할 때 사용합니다.<br />

FUNC 3, PRINT DEC8 D0<br />

100<br />

포맷화된 10 진수를 표시합니다.<br />

DEC 뒤에 숫자를 적으면 (1 에서 10) 정해진 자릿수안에서 오른쪽 자리맞춤으로 된 숫자를<br />

표시합니다. DEC8 로 한경우, 표시할 내용이 세자릿수이면, 앞의 5 자리를 블랭크(공백)으로<br />

표시한뒤 숫자를 표시합니다.<br />

FUNC 3, PRINT LOC,1,1,”MAC”, DEC8 D0<br />

LOC 와 함께, 일부문자와 함께 사용할수 있습니다.<br />

MAC 10300<br />

- 147 -


TinyPLC TPC9X User’s Manual<br />

HEX<br />

레더도<br />

표시결과<br />

FUNC 3, PRINT HEX D0<br />

D0 의 내용을 16 진수로 표시합니다.<br />

정수영역 (C,T,D,Y,B)의 내용을 16 진형태로 표시할 때 사용합니다.<br />

FUNC 3, PRINT HEX8 D0<br />

포맷화된 16 진수를 표시합니다.<br />

HEX 뒤에 숫자를 적으면 (1 에서 8) 정해진 자릿수안에서 오른쪽 자리맞춤으로 된 숫자를<br />

표시합니다. HEX8 로 한경우, 표시할 내용이 4 자릿수이면, 앞의 4 자리를 블랭크(공백)으로<br />

표시한뒤 숫자를 표시합니다.<br />

FUNC 3, PRINT LOC,1,1,”PLC”, HEX8 D0<br />

LOC 와 함께, 일부문자와 함께 사용할수 있습니다.<br />

- 148 -


TinyPLC TPC9X User’s Manual<br />

FLOAT<br />

레더도<br />

표시결과<br />

FUNC 3, PRINT FLOAT A0<br />

A0 의 내용을 실수형태로 표시합니다.<br />

실수영역 (A 영역)의 내용을 실수형태로 표시할 때 사용합니다. 이 방법으로는 표시자릿수를<br />

정해진 포맷으로 제한할 수 없습니다만, 실수의 유효자릿수를 전부 표시할 수 있습니다.<br />

FP( )<br />

USAGE : FP (표시할 영역, 정수부 자릿수, 소수부 자릿수)<br />

레더도<br />

표시결과<br />

FUNC 3, PRINT FP(A0,3,2)<br />

A0 의 내용을 포맷화된 실수형태로 표시합니다.<br />

위의 경우 정수부 3 자리, 소수부 2 자리로<br />

표시합니다.<br />

실수를 표현할 때, 정수부와 소수부의 자릿수를 지정하여, 표시하는 명령입니다. 위의 경우<br />

정수부 3 자리, 소수부 2 자리이므로, 소수점까지 포함해서 모두 6 자리로 실수를 표시합니다.<br />

정수부 앞부분은 숫자가 없는 부분은 공백으로 표시됩니다. 다른 명령 (HEX, DEC)와 달리<br />

괄호를 필요로 하는 명령입니다.<br />

*FP 사용시 소수점 아래부분은 실제 수와 다른 수가 표시될 수 있습니다. 포맷변환과정에서<br />

발생하는 오차 때문에, 소수점 아랫부분이 실제 수와 다른 경우가 발생합니다. 따라서<br />

실수는 가능한한 FLOAT 로 표시하는 것이 좋습니다.<br />

- 149 -


TinyPLC TPC9X User’s Manual<br />

DEMO PROGRAM<br />

LCD 화면상에 증가되는 숫자를 16 진수로 표시하는 프로그램입니다.<br />

F2 는 최초 파워온 (또는 리셋시) 한 스캔타임만 ON 되는 신호입니다 .F2 에 CLS 명령을<br />

넣어두면, 파워온시에 LCD 화면이 클리어 됩니다.<br />

F29 는 320mS 마다 On 되는 신호입니다. 여기에 WINC 응용명령어로 D0 영역을 1 씩<br />

증가시킵니다.<br />

F28 는 160mS (약 0.16 초) 마다 On 되는 신호입니다. 여기에 PRINT 명령으로 D0 영역의 값을<br />

LCD 에 표시하도록 하였습니다.<br />

- 150 -


TinyPLC TPC9X User’s Manual<br />

제 10 장<br />

7 세그먼트<br />

디스플레이<br />

- 151 -


TinyPLC TPC9X User’s Manual<br />

TinyPLC 에서의 7 세그먼트 디스플레이<br />

TPC9X 시리즈에서는 CSG 디스플레이 모듈을 사용해서 7 세그먼트 디스플레이를 구현할 수<br />

있습니다. 이 디스플레이 모듈은 “컴파일 테크놀로지”에서 시판하고 있는 제품입니다.<br />

CSG-4S<br />

CSG-4M<br />

CSG 모듈은 I2C 방식으로 구동됩니다. TPC9X 시리즈의 모든 I/O 포트 (입력 전용제외) 는<br />

I2C 통신으로 설정하여 사용할 수 있습니다.<br />

TpcWORKS 의 “PLC SETUP”탭 Advenced Setup 에서 CSG 사용을 위한 메뉴 부분이 있습니다.<br />

이 부분을 다음과 같이 설정하시기 바랍니다.<br />

- 152 -


TinyPLC TPC9X User’s Manual<br />

I2C 통신에는 2 가닥의 I/O 선이 필요합니다. 이중 하나는 CLOCK 핀이고, 나머지 하나는<br />

DATA 핀입니다. CSG 모듈의 뒷면을 보시면 4 핀연결 케이블이 있습니다.<br />

이 케이블을 TPC9X 와 연결하시면 됩니다. 이 케이블의 4 핀중 2 핀은 전원선 (5V, GND)를<br />

연결하시고, 나머지 2 핀을 TPC9X 의 I/O 핀과 연결합니다. 이 I/O 핀중 어떤 핀을<br />

CLOCK 으로 하고 어떤핀을 DATA 로 할것인지를 미리 생각해두셨다가, TpcWORKS 에<br />

입력해주시면 됩니다.<br />

CSG 모듈 뒷면에는 DIP 스위치가 있습니다. I2C 통신은 같은 선상에 여러 개의 디바이스를<br />

연결할 수 있으며, 이중 하나의 디바이스와 통신하는 방식으로 운용됩니다. 이를 위해서<br />

각각의 디바이스마다 Slave Address 라는 것이 필요합니다.<br />

CSG 모듈 뒷면에 있는 DIP 스위치는 Slave Address 를 설정하기 위한 것입니다.<br />

DIP 스위치 상태 슬레이브 어드레스 DIP 스위치 상태 슬레이브 어드레스<br />

1 2 3<br />

-<br />

1 2 3<br />

ON<br />

ON<br />

0<br />

2<br />

1 2 3<br />

1 2 3<br />

ON<br />

1<br />

ON<br />

3<br />

- 153 -


TinyPLC TPC9X User’s Manual<br />

CSGDEC<br />

USAGE : CSGDEC 슬레이브 어드레스, 데이터<br />

레더도<br />

표시결과<br />

FUNC 3, CSGDEC 3, D0<br />

D0 값을 10 진형태로 CSG 모듈에 표시합니다. Slave<br />

Address 는 3 번을 선택합니다.<br />

데이터는 숫자 또는 릴레이영역등을 사용할 수<br />

있습니다.<br />

CSGHEX<br />

USAGE : CSGHEX 슬레이브 어드레스, 데이터<br />

레더도<br />

표시결과<br />

FUNC 3, CSGHEX 3, D0<br />

D0 값을 16 진형태로 CSG 모듈에 표시합니다. Slave<br />

Address 는 3 번을 선택합니다.<br />

- 154 -


CSGNPUT<br />

USAGE : CSGNPUT 슬레이브 어드레스, 위치, 데이터<br />

TinyPLC TPC9X User’s Manual<br />

레더도<br />

표시결과<br />

FUNC 3, CSGNPUT 3, 0, &H30<br />

3 번 슬레이브 어드레스에, 0 번위치에 숫자 0 을<br />

표시합니다.<br />

CSG4M (CSG 4S)는 4 개의 7 세그먼트가 있습니다. 원하는 위치에 원하는 숫자(문자)를<br />

표시하고 싶을 때 사용하는 명령입니다. 데이터는 ASCII 코드를 사용합니다. 즉 &H30 은<br />

0 을 표시하고, &H39 는 9 를 표시합니다. &H41 은 A 를 표시합니다.<br />

표시가능한 숫자는 0 부터 9 까지이고, 영문자는 A 부터 F 까지만 표시할 수 있습니다.<br />

CSGDEC, CSGHEX 는 CSG 모듈 전체에 어떤 숫자를 표시하고자 할 때 사용하고,<br />

CSGNPUT 은 CSG 모듈의 특정위치에 특정숫자(문자)를 표시할 때 사용합니다.<br />

표시위치는 왼쪽부터 0,1,2,3 입니다.<br />

- 155 -


CSGXPUT<br />

USAGE : CSGXPUT 슬레이브 어드레스, 위치, 데이터<br />

TinyPLC TPC9X User’s Manual<br />

레더도<br />

표시결과<br />

FUNC 3, CSGXPUT 3, 0, &HFF<br />

CSGNPUT 과 사용방법은 같습니다. 7 세그먼트의 각각의 LED 를 ON 하거나 OFF 할 수<br />

있습니다 .한바이트는 8 비트로 구성되어 있습니다. 아래 표를 보고, 각각의 비트위치를 1 로<br />

하여, 숫자를 만든뒤 위 명령어에 대입하면, 해당위치의 LED 가 켜지게 됩니다.<br />

A<br />

F<br />

G<br />

B<br />

E<br />

C<br />

D<br />

H<br />

비트 7 6 5 4 3 2 1 0<br />

LED H G F E D C B A<br />

예를들어, B 하고 C 위치의 LED 만 ON 하고 싶다면, 0000 0110 을 대입하면 됩니다. 0000<br />

0110 은 10 진수로 6 이 되므로 다음과 같이 명령어를 작성하십시오.<br />

FUNC 3, CSGXPUT 3, 0, 6<br />

- 156 -


TinyPLC TPC9X User’s Manual<br />

DEMO PROGRAM<br />

7 세그먼트 모듈 (CSG)에 증가되는 숫자를 표시해보도록 하겠습니다.<br />

F29 는 320mS 마다 On 되는 신호입니다. 여기에 WINC 응용명령어로 D0 영역을 1 씩<br />

증가시킵니다.<br />

F28 는 160mS (약 0.16 초) 마다 On 되는 신호입니다. 여기에 CSGHEX 명령으로 D0 영역의<br />

값을 CSG 에 표시하도록 하였습니다.<br />

- 157 -


TinyPLC TPC9X User’s Manual<br />

초보자 페이지<br />

Q. I2C가 무엇인가요?<br />

시리얼 통신 규격중 하나입니다. CLOCK 과 DATA 선을 사용해서 신호를 전달합니다.<br />

Clock<br />

SCL<br />

Data<br />

SDA<br />

0 1 1 0 1 0 1 0<br />

SCL 은 CLOCK 을 의미하고, SDA 는 DATA 를 의미합니다. 이렇게 두선을 사용하는 이유는<br />

CLOCK 선에서 발생되는 펄스에 맞추어 DATA 선에 신호를 실어주는 “동기식 통신”이기<br />

때문입니다.<br />

이에 반해 RS232 는 단 한선으로 데이터를 주고 받는 “비동기식 통신’입니다. 비동기식<br />

통신에서는 “보레이트”가 필요합니다. 서로 시간약속을 하는 것입니다. 예를 들어 1 초에<br />

한번씩 데이터를 보내겠다고 약속하는 것입니다. 시간약속이 틀리게 되면 제대로된<br />

데이터를 받을 수 없습니다.<br />

“보레이트”를 서로 모르는 경우, 그리고 통신 중간 중간에 보레이트를 지킬수 없는<br />

환경에서는 “동기식 통신”이 보다 안정적으로 데이터를 보내고 받을 수 있습니다.<br />

그래서 TinyPLC 에서는 “동기식 통신”인 I2C 를 사용합니다. LCD 모듈이나 7 세그먼트<br />

모듈은 I2C 방식으로 되어 있어, 전원선이외에 2 가닥의 통신선을 필요로합니다.<br />

I2C 통신은 최대 전송거리는 대략 2 미터정도 입니다. 그 이상되는 거리에서는 별도의 칩을<br />

사용해서 통신거리를 확장할 수 있습니다.<br />

N/C<br />

VCC<br />

LX<br />

SX<br />

P82B715<br />

LY<br />

SY<br />

LX, LY : Buffered Bus, LDA or LCL<br />

SX, SY : I2C Bus, SDA or SCL<br />

SDA<br />

LDA<br />

LDA<br />

SDA<br />

GND<br />

N/C<br />

SCL<br />

LCL<br />

LCL<br />

SCL<br />

LONG CABLE<br />

CUBLOC<br />

P82B715<br />

P82B715<br />

I2C DEVICE<br />

P82B715 칩은 최대 1.6 킬로미터까지 송수신을 확장할 수 있는 칩입니다.<br />

- 158 -


TinyPLC TPC9X User’s Manual<br />

제 11 장<br />

A/D,<br />

PWM,<br />

고속카운터<br />

- 159 -


TinyPLC TPC9X User’s Manual<br />

A/D 변환<br />

TPC9X 시리즈에는 A/D 변환기가 내장되어 있습니다. 해상도는 10 비트이고 측정가능 최대<br />

전압 범위는 0V 에서 5V 까지 입니다.<br />

해상도가 10 비트라는 뜻은 측정범위안의 전압을 0~1024 로 변환할 수 있다는 뜻입니다.<br />

해상도가 8 비트일 경우에는 0~255 로 변환됩니다.<br />

1023<br />

1022<br />

1021<br />

1020<br />

1019<br />

5V<br />

255<br />

254<br />

5V<br />

253<br />

252<br />

2<br />

5<br />

4<br />

3<br />

2<br />

1<br />

0<br />

10 Bit<br />

0V<br />

1<br />

0<br />

8 Bit<br />

0V<br />

TPC9X 코어모듈에는 VREF 핀이 따로 있습니다. VREF 핀에 입력한 전압이 AD 변환의 최대<br />

전압이 됩니다. VREF 에 5V 를 연결하였다면 0~5V 까지 변환되는 것이고, 3V 를<br />

연결하였다면 0~3V 까지 변환됩니다. (VREF 에는 2V 에서 5V 까지 연결할 수 있습니다.<br />

AD 입력핀과 VREF 에 5V 이상의 전압을 입력하면, 제품이 파손될 수 있으므로<br />

주의바랍니다.)<br />

만약 0~10V 를 변환하고 싶다면 아래와 같이 회로를 구성하시면 됩니다.<br />

5V<br />

0~10V<br />

1Kohm<br />

1Kohm<br />

AREF<br />

ADCx<br />

- 160 -


TinyPLC TPC9X User’s Manual<br />

만약 0~20mA 를 변환하고 싶다면 아래와 같이 회로를 구성하시면 됩니다.<br />

5V<br />

AREF<br />

0~20mA<br />

250ohm<br />

ADCx<br />

TPCworks 상에서 PLC setup 에는 AD 변환기에 대한 설정을 위한 부분이 있습니다.<br />

맨위에 있는 Use A/D convertor 를<br />

선택하면 AD 변환기가 활성화됩니다.<br />

그리고 사용하고자 하는 채널의<br />

체크박스를 체크해두시면 됩니다.<br />

TPC9X 코어모듈 핀 아웃을 보시면<br />

AD 입력은 일반 I/O 포트와 같이 사용할<br />

수 있도록 되어 있습니다.<br />

이 말은 둘중 하나만 쓸 수 있다는 뜻이<br />

됩니다.<br />

즉, AD 입력으로 사용하는 핀은 I/O 로<br />

사용할 수 없고, AD 입력 전용으로만<br />

사용해야 합니다.<br />

유저가 A/D 변환을 위해 특별한 명령어를 레더로직에 입력할 필요는 없습니다. 앞에서<br />

설명한 PLC SETUP 메뉴에 있는 체크박스를 선택하시기만 하면, TinyPLC 의 OS<br />

(운영체계)에서 자동적으로 해당 A/D 채널을 변환하여 줍니다.<br />

- 161 -


TinyPLC TPC9X User’s Manual<br />

A/D 변환의 결과는 Y 영역의 특정번지에 저장됩니다. 레더로직에서는 이 영역에 있는<br />

데이터를 읽어오기만 하면 됩니다.<br />

기능 채널 Y 영역 READ/WRITE 사용 가능 모델<br />

ADC0 Y10 READ only<br />

A/D 입력<br />

ADC1 Y11 READ only<br />

ADC2 Y12 READ only<br />

ADC3 Y13 READ only<br />

ADC4 Y14 READ only<br />

ADC5 Y15 READ only<br />

ADC6 Y16 READ only<br />

ADC7 Y17 READ only<br />

ADC8 Y18 READ only<br />

ADC9 Y19 READ only<br />

ADC10 Y20 READ only<br />

ADC11 Y21 READ only<br />

ADC12 Y22 READ only<br />

ADC13 Y23 READ only<br />

ADC14 Y24 READ only<br />

ADC15 Y25 READ only<br />

ADC8~15 까지는 TPC93A 에서만 사용할 수 있습니다.<br />

이 영역은 TPC9X 시리<br />

즈 모두 사용가능합니<br />

다.<br />

이 영역은 TPC93A 에서<br />

만 사용가능합니다.<br />

A/D 변환기를 사용하지 않는다면, Use A/D convertor 를 Off 로 해두세요. FUNC 처리기의<br />

스캔타임 주기가 빨라집니다.<br />

- 162 -


TinyPLC TPC9X User’s Manual<br />

코어모듈에 따른 A/D 입력 채널<br />

SOUT<br />

SIN<br />

ATN<br />

VSS<br />

SS_P0<br />

(Input_only)SCK_P1<br />

MOSI_P2<br />

MISO_P3<br />

P4<br />

PWM0_P5<br />

PWM1_P6<br />

PWM2_P7<br />

(CUNET)SCL_P8<br />

(CUNET)SDA_P9<br />

P10<br />

P11<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

13<br />

14<br />

15<br />

16<br />

17<br />

18<br />

19<br />

20<br />

21<br />

22<br />

23<br />

24<br />

25<br />

26<br />

27<br />

28<br />

29<br />

30<br />

31<br />

32<br />

VDD<br />

VSS<br />

RES<br />

N/C<br />

P16<br />

P17<br />

P18<br />

P19_PWM3<br />

P20_PWM4_INT0<br />

P21_PWM5_INT1<br />

P22_INT2<br />

P23_INT3<br />

P15_HCNT1<br />

P14_HCNT0<br />

P13<br />

P12<br />

TX1<br />

RX1<br />

AVDD<br />

N/C<br />

ADC0_P24<br />

ADC1_P25<br />

ADC2_P26<br />

ADC3_P27<br />

P47<br />

P46<br />

P45<br />

P44<br />

P43<br />

P42<br />

P41<br />

P40<br />

33<br />

34<br />

35<br />

36<br />

37<br />

38<br />

39<br />

40<br />

41<br />

42<br />

43<br />

44<br />

45<br />

46<br />

47<br />

48<br />

49<br />

50<br />

51<br />

52<br />

53<br />

54<br />

55<br />

56<br />

57<br />

58<br />

59<br />

60<br />

61<br />

62<br />

63<br />

64<br />

TTLTX1<br />

TTLRX1<br />

AVREF<br />

P48<br />

P31_ADC7<br />

P30_ADC6<br />

P29_ADC5<br />

P28_ADC4<br />

P32<br />

P33<br />

P34<br />

P35<br />

P36<br />

P37<br />

P38<br />

P39<br />

TPC91A<br />

TPC91A 는 8 채널의 A/D 변환기가 내장되어 있으며, P24 부터 P31 까지 AD 입력채널로<br />

사용할 수 있습니다.<br />

Input<br />

Only<br />

Sout<br />

Sin<br />

Atn<br />

Vss<br />

P0<br />

SCK / P1<br />

MOSI / P2<br />

MISO / P3<br />

P4<br />

PWM0 / P5<br />

PWM1 / P6<br />

PWM2 / P7<br />

RX2 / P8<br />

TX2 / P9<br />

P10<br />

PWM6 / P11<br />

PWM7 / P12<br />

PWM8 / P13<br />

P14<br />

P15<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

13<br />

14<br />

15<br />

16<br />

17<br />

18<br />

19<br />

20<br />

21<br />

22<br />

23<br />

24<br />

25<br />

26<br />

27<br />

28<br />

29<br />

30<br />

31<br />

32<br />

33<br />

34<br />

35<br />

36<br />

37<br />

38<br />

39<br />

40<br />

Vdd<br />

Vss<br />

RES<br />

VBB<br />

P16 / AD0<br />

P17 / AD1<br />

P18 / AD2<br />

P19 / AD3<br />

P20 / AD4<br />

P21 / AD5<br />

P22 / AD6<br />

P23 / AD7<br />

P24<br />

P25<br />

P26<br />

P27 / PWM3<br />

P28 / PWM4/<br />

INT0<br />

P29 / PWM5/ INT 1<br />

P30 / INT2<br />

P31 / INT3<br />

TPC93A<br />

Vdd<br />

Vdd<br />

N/C<br />

N/C<br />

P64<br />

P65<br />

P66<br />

P67<br />

P68<br />

P69<br />

P70<br />

P71<br />

P80<br />

P81<br />

81<br />

82<br />

83<br />

84<br />

85<br />

86<br />

87<br />

88<br />

89<br />

90<br />

91<br />

92<br />

93<br />

94<br />

TXE<br />

RXE<br />

AVdd<br />

Vdd<br />

AD8 / P32<br />

AD9 / P33<br />

AD10 / P34<br />

AD11 / P35<br />

AD12 / P36<br />

AD13 / P37<br />

AD14 / P38<br />

AD15 / P39<br />

HCNT1 / P47<br />

HCNT0 / P46<br />

P45<br />

P44<br />

TX1 / P43<br />

RX1 / P42<br />

SDA / P41<br />

SCL / P40<br />

41<br />

42<br />

43<br />

44<br />

45<br />

46<br />

47<br />

48<br />

49<br />

50<br />

51<br />

52<br />

53<br />

54<br />

55<br />

56<br />

57<br />

58<br />

59<br />

60<br />

61<br />

62<br />

63<br />

64<br />

65<br />

66<br />

67<br />

68<br />

69<br />

70<br />

71<br />

72<br />

73<br />

74<br />

75<br />

76<br />

77<br />

78<br />

79<br />

80<br />

Vss<br />

Vss<br />

N/C<br />

N/C<br />

P72<br />

P73<br />

P74<br />

P75<br />

P76<br />

P77<br />

P78<br />

P79<br />

P82<br />

N/C<br />

95<br />

96<br />

97<br />

98<br />

99<br />

100<br />

101<br />

102<br />

103<br />

104<br />

105<br />

106<br />

107<br />

108<br />

TtlTXE<br />

TtlRXE<br />

AVref<br />

Vss<br />

P48<br />

P49<br />

P50<br />

P51 / PWM9<br />

P52 / PWM10<br />

P53 / PWM11<br />

P54<br />

P55<br />

P63<br />

P62<br />

P61<br />

P60<br />

P59<br />

P58<br />

P57 / TX3<br />

P56 / RX3<br />

TPC93A 의 경우 총 16 채널의 A/D 변환기가 내장되어 있습니다. P16 ~ P23 까지 채널 0 부터<br />

7 이고, P32 ~ 39 는 채널 8 부터 15 입니다.<br />

PLC SETUP 에서 체크한 A/D 채널은 I/O 로 사용할 수 없습니다. (TinyPLC 의 OS 에서 I/O<br />

스캔을 하지 않기 때문입니다.)<br />

- 163 -


TinyPLC TPC9X User’s Manual<br />

DEMO PROGRAM<br />

TPC91A 를 가지고 A/D 변환 실험을 해보도록 하겠습니다.<br />

P24<br />

이 회로와 같이 P24 에 포텐션메터 (3 단자<br />

볼륨; 가운데 핀을 포트로 연결하고,<br />

양쪽에 남은핀중 하나는 5V 에 하나는<br />

GND 에 연결)를 접속하십시오.<br />

PLC SETUP 에서 A/D convertor 부분을<br />

오른쪽 과 같이 선택하세요.<br />

TPC91A 에서 P24 는 채널 0 입니다.<br />

다음과 같이 레더를 입력하고 실행해 보세요. Y10 영역을 “와치포인트”로 볼 수 있습니다.<br />

맨위에 있는 F16 레더는 본 예제와는 상관없는 부분입니다.<br />

- 164 -


다음은 A/D 입력결과를 레더로직에 사용한 샘플 프로그램입니다.<br />

TinyPLC TPC9X User’s Manual<br />

P24<br />

P2<br />

24 번 포트에 연결된 볼륨을 돌리면, P2 에<br />

연결된 LED 의 깜박이는 주기가 변경되는<br />

것을 볼 수 있습니다.<br />

모니터링 상태에서 관찰하면,<br />

A/D 변환결과가 얼마인지 알 수 있습니다.<br />

값을 500 이내로 조정하면, LED 의<br />

움직임을 잘 관찰할 수 있습니다. 너무 큰<br />

값으로 하면, LED 의 주기가 너무<br />

길어지기 때문입니다.<br />

- 165 -


TinyPLC TPC9X User’s Manual<br />

초보자 페이지<br />

Q. A/D는 왜 필요한가요?<br />

최초의 PLC 에는 A/D 컨버터가 없었습니다. 본래 PLC 는 릴레이 제어반 (시퀀스 회로)를<br />

대체할 목적으로 만들어 졌으며, 릴레이 제어는 곧 로직 제어를 의미합니다.<br />

외부에서 논리신호 (1 또는 0, HIGH 또는 LOW, ON 또는 OFF)를 받아들여, 적절한 논리연산<br />

(AND, OR, XOR 등)을 거친뒤 출력합니다.출력도 역시 논리신호로 되어 있습니다.<br />

이러한 PLC 에서 A/D 변환이 필요하게 된 것은 외부로부터 “온도”, “습도”와 같은 아날로그<br />

량을 읽어들이기 위해서 입니다.<br />

우리들이 일상적으로 사용하는 각종 숫자는 모두 연속된 숫자로 된 “아날로그 수치’입니다.<br />

몸무게, 온도, 시간, 음량등이죠! 이것을 PLC 로 가져오려면, 디지털 값으로 바꾸어야 합니다.<br />

PLC 는 디지털정보만 다룰수 있기 때문입니다.<br />

그래서 A/D 변환이 필요한 것입니다. A/D 변환은 말그대로 “아날로그 에서 디지털”로<br />

변환을 의미합니다.<br />

온도센서에서 읽어들은 아날로그 량 (전압 또는 전류값)을 적당한 디지털 수치로 바꾼뒤,<br />

PLC 내부에서 여러가지 연산을 합니다. 이 연산결과를 가지고 출력을 만들게 되는데,<br />

출력에는 디지털출력과 아날로그 출력이 있을 수 있습니다.<br />

디지털 출력은 단순히 ON 또는 OFF 의 형태로 출력되는 형태를 말합니다. 온도센서에서<br />

읽어들인 값으로 히터의 동작을 ON /OFF 제어하는 경우를 생각해 볼 수 있습니다.<br />

아날로그 출력은 보다 정밀한 제어에 사용됩니다. 온도센서에서 읽어들인 값으로 모터의<br />

속도를 제어하는 경우가 있습니다. 모터의 속도를 ON 이나 OFF 로 제어하기는 어렵기<br />

때문에, 이때에는 D/A 변환이 필요합니다.<br />

D/A 변환은 말그대로 “디지털을 아날로그”로 바꾸는 작업으로, A/D 의 반대 개념입니다.<br />

- 166 -


TinyPLC TPC9X User’s Manual<br />

PWM<br />

PWM 은 일정한 주파수를 가진 펄스를 출력할 수 있는 기능입니다. 듀티비를 조정할 수<br />

있어서 다양한 기능을 수행할 수 있습니다.(예를 들면 모터의 스피드 제어, 히터의 강약 조절<br />

등)<br />

50% Duty<br />

10% Duty<br />

90% Duty<br />

TPC91A 의 경우 6 개의 PWM 채널이 있습니다. P5,6,7 은 PWM0,1,2 로 쓸 수 있습니다. P19,<br />

20, 21 은 PWM3, 4, 5 로 사용할 수 있습니다.<br />

SOUT<br />

SIN<br />

ATN<br />

VSS<br />

SS_P0<br />

(Input_only)SCK_P1<br />

MOSI_P2<br />

MISO_P3<br />

P4<br />

PWM0_P5<br />

PWM1_P6<br />

PWM2_P7<br />

(CUNET)SCL_P8<br />

(CUNET)SDA_P9<br />

P10<br />

P11<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

13<br />

14<br />

15<br />

16<br />

17<br />

18<br />

19<br />

20<br />

21<br />

22<br />

23<br />

24<br />

25<br />

26<br />

27<br />

28<br />

29<br />

30<br />

31<br />

32<br />

VDD<br />

VSS<br />

RES<br />

N/C<br />

P16<br />

P17<br />

P18<br />

P19_PWM3<br />

P20_PWM4_INT0<br />

P21_PWM5_INT1<br />

P22_INT2<br />

P23_INT3<br />

P15_HCNT1<br />

P14_HCNT0<br />

P13<br />

P12<br />

TX1<br />

RX1<br />

AVDD<br />

N/C<br />

ADC0_P24<br />

ADC1_P25<br />

ADC2_P26<br />

ADC3_P27<br />

P47<br />

P46<br />

P45<br />

P44<br />

P43<br />

P42<br />

P41<br />

P40<br />

33<br />

34<br />

35<br />

36<br />

37<br />

38<br />

39<br />

40<br />

41<br />

42<br />

43<br />

44<br />

45<br />

46<br />

47<br />

48<br />

49<br />

50<br />

51<br />

52<br />

53<br />

54<br />

55<br />

56<br />

57<br />

58<br />

59<br />

60<br />

61<br />

62<br />

63<br />

64<br />

TTLTX1<br />

TTLRX1<br />

AVREF<br />

P48<br />

P31_ADC7<br />

P30_ADC6<br />

P29_ADC5<br />

P28_ADC4<br />

P32<br />

P33<br />

P34<br />

P35<br />

P36<br />

P37<br />

P38<br />

P39<br />

TPC91A<br />

PWM 출력을 사용하는 핀은 I/O 포트로 사용할 수 없습니다. TPC 93A 는 총 12 개의<br />

PWM 채널을 지원합니다.<br />

- 167 -


TinyPLC TPC9X User’s Manual<br />

PWM 을 사용하려면 PLC SETUP 메뉴에서 다음과 같이 셋팅해주시기 바랍니다.<br />

PWM 사용을 허가하는 체크박스입니다.<br />

사용하고자 하는<br />

PWM 채널에<br />

체크하세요<br />

PWM0, 1, 2<br />

의 주기를<br />

결정하는<br />

숫자입니다.<br />

최대 65535<br />

까지 입력<br />

할 수 있습니다.<br />

3 개의 PWM 당<br />

하나의<br />

주기를<br />

선택할 수<br />

있습니다.<br />

PLC SETUP 에서 이렇게 셋업하고 난뒤, 레더로직을 다운로드 실행하게 되면, PWM 채널에<br />

해당하는 핀에서는 PWM 출력이 발생됩니다.<br />

기능 채널 Y 영역 READ/WRITE 설명<br />

PWM0 Y26 WRITE only<br />

PWM1 Y27 WRITE only 해당 D 영역에 있는<br />

PWM2 Y28 WRITE only 값으로 PWM 채널에<br />

PWM3 Y29 WRITE only 출력됩니다.<br />

PWM4 Y30 WRITE only<br />

PWM 출력 PWM5 Y31 WRITE only<br />

PWM6 Y32 WRITE only<br />

PWM7 Y33 WRITE only<br />

PWM8 Y34 WRITE only<br />

PWM9 Y35 WRITE only<br />

PWM10 Y36 WRITE only<br />

PWM11 Y37 WRITE only<br />

- 168 -<br />

PWM6 ~ 11 은<br />

TPC93A 에서만 사용할<br />

수 있습니다.<br />

Y26 에 어떤값을 넣으면, PWM 채널 0 에 그 값에 해당하는 듀티비를 가진 PWM 파형이<br />

출력됩니다. 이떄 앞의 PLC SETUP 설정한 최대치 (Max Value)를 넘지 않도록 해야합니다.


TinyPLC TPC9X User’s Manual<br />

PWM0, 1, 2 사용 시 주의사항.<br />

PWM 채널 0,1,2 는 HIGH COUNT 채널 0 과 동시에 사용할 수 없습니다. 코어모듈<br />

내부적으로 HIGH COUNT 0 과 PWM 0,1,2 는 같은 자원을 사용하기 때문입니다.<br />

따라서 사용자는 PWM 0,1,2 를 쓸 것인지, HIGH COUNT 0 을 쓸 것인지, 둘중의 하나를<br />

선택해야 합니다.<br />

PLC SETUP 에서 이것을 선택하는 메뉴가 따로 있습니다.<br />

이 곳을 선택하면, PWM 0, 1, 2 를 사용하고, HIGH COUNT0 를 포기합니다.<br />

이 곳을 선택하면, HIGH COUNT 0 을 사용하고, PWM0,1,2 를 포기합니다.<br />

PWM 을 D/A 변환기로 사용하려면<br />

A/D 변환기와 반대로 동작하는 것이 D/A 변환기 입니다. 어떤 수치를 일정한 전압으로<br />

바꿔줍니다. PWM 출력에 간단한회로를 추가하면 D/A 변환기로 사용할 수 있습니다.<br />

0~5V<br />

OUTPUT<br />

10Kohm<br />

47uF<br />

PWM Port<br />

만약 0~5V 가 아닌 다른전압범위 (예를들어 –10V 에서 +10V 또는 0~40mA ) 를 출력하고<br />

싶다면, OP AMP 칩을 사용한 회로가 필요합니다. (별도 서적 참고요망)<br />

- 169 -


TinyPLC TPC9X User’s Manual<br />

MAX VALUE 에 대하여<br />

PLC SETUP 에서 입력하는 PWM 최대 값 (MAX VALUE)은 각 PWM 3 채널당 하나씩 설정할<br />

수 있으며, 최소값은 100, 최대값은 65535 이여야 합니다. PWM 값은 반드시 MAX<br />

VALUE 보다 작은 값이 되도록 레더프로그램에서 결정해주어야 합니다. MAX VALUE 가<br />

작을수록 더 빠른 주파수를 가진 PWM 파형이 출력됩니다. 다음 표는 MAX VALUE 와<br />

주파수와의 관계표입니다.<br />

MAX VALUE Frequency<br />

200 11.52 KHz<br />

1000 2.3 KHz<br />

2000 1.15 KHz<br />

3000 768 Hz<br />

4000 576 Hz<br />

10000 230 Hz<br />

20000 115.2 Hz<br />

30000 76.8 Hz<br />

65535 35.16 Hz<br />

주파수는 다음과 같은 공식에 의해서 계산할 수 있습니다.<br />

Frequency =<br />

230400<br />

MAX VALUE<br />

레더실행중 PWM 최대치 바꾸기<br />

다음과 같이 MAX value 란에 숫자대신 “언더바 D”로 시작하고, 괄호안에 D 영역중 하나를<br />

적어준다면, 레더실행중 최대치를 바꿀수 있습니다.<br />

주파수를 변경하여, PWM 파형을 출력하고자 하는 경우에 사용할 수 있습니다. 이 경우 D8<br />

영역에 어떤값을 써넣고, Y26 에 D8 을 반으로 나눈값을 써넣는다면, PWM0 번 채널에서<br />

50%듀티의 일정한 주파수를 가진 파형을 출력할 수 있습니다.<br />

- 170 -


TinyPLC TPC9X User’s Manual<br />

이 것을 활용한다면, 다음과 같은 가청 주파수내의 음을 출력할 수 있습니다.<br />

Note Octave 2 Octave 3 Octave 4 Octave 5<br />

A 20945 10473 5236 2618<br />

Bb 19770 9885 4942 2471<br />

B 18660 9330 4665 2333<br />

C 17613 8806 4403 2202<br />

Db 16624 8312 4156 2078<br />

D 15691 7846 3923 1961<br />

Eb 14811 7405 3703 1851<br />

E 13979 6990 3495 1747<br />

F 13195 6597 3299 1649<br />

Gb 12454 6227 3114 1557<br />

G 11755 5878 2939 1469<br />

Ab 11095 5548 2774 1387<br />

F2<br />

WMOV 4403, D8<br />

F2<br />

WMOV 2200, Y26<br />

PWM0 번 포트로 C 음에 해당하는 주파수를 출력합니다. (듀티 50%)<br />

- 171 -


TinyPLC TPC9X User’s Manual<br />

DEMO PROGRAM<br />

PWM 을 구동하는 간단한 예제프로그램입니다. PLC SETUP 에서 PLC 부분을 다음과 같이<br />

셋업해주세요<br />

5 번 포트는 PWM0 번 채널입니다. 5 번포트에 LED 를 연결해두면, PWM 값에 따라서 LED 의<br />

밝기가 변화하는 것을 볼 수 있습니다.<br />

Y26 영역에 60000 정도의 값을 넣어두면 LED 가 밝게 됩니다. 10000 미만의 값을 넣으면<br />

LED 밝기가 어두워집니다.<br />

F2<br />

WMOV 60000, Y26<br />

- 172 -


TinyPLC TPC9X User’s Manual<br />

고속 카운터<br />

TinyPLC TPC9X 시리즈에는 2 개의 고속카운터 입력핀이 있습니다. 레더로직에서<br />

고속카운터를 사용하기 위해서 특별히 써주어야하는 명령어는 없습니다. 단지 PLC SETUP<br />

에서 다음과 같이 설정만 해주면, Y 영역에 고속카운터 값이 저장됩니다.<br />

고속카운터 결과는 32 비트이므로 채널하나당 Y 영역 2 워드를 차지합니다.<br />

기능 채널 Y 영역 READ/WRITE 설명<br />

HIGH<br />

COUNT0 Y38, Y39 READ only Y38 에 LOW 워드, Y39 에 HIGH 워드<br />

COUNTER COUNT1 Y40, Y41 READ only Y40 에 LOW 워드, Y41 에 HIGH 워드<br />

TPC9X 에서는 고속카운터 채널 0 과 PWM 0, 1,2 채널중 하나만 선택할 수 있습니다.<br />

내부적으로 같은 자원을 쓰고 있기 때문입니다. PLC SETUP 에서 둘중 하나를 선택해주시기<br />

바랍니다.<br />

M6<br />

DWMOV Y38, D0<br />

M6 이 ON 되면 HIGH COUNT 0 번채널을 읽어서 D0, D1 에 저장합니다. D0 에 하위워드가<br />

저장되고, D1 에 상위워드가 저장됩니다.<br />

- 173 -


TinyPLC TPC9X User’s Manual<br />

초보자 페이지<br />

Q. 고속카운터는 왜 필요한가요?<br />

TinyPLC 명령중에는 CTU, CTD 와 같은 카운터 명령이 있습니다. 카운터 명령을 사용하면<br />

TinyPLC 의 I/O 포트중 아무 핀에서나 카운터 입력을 받을 수 있습니다.<br />

카운터 명령을 사용하는 방법으로는 입력주파수의 한계가 있습니다. TPC9X 의 최대<br />

스캔타임이 1mS 이므로 100Hz 정도의 펄스만 카운트 할 수 있습니다.<br />

펄스의 폭이 1mS 보다 작다면 CTU / CTD 명령으로는 측정할 수 없게 됩니다.<br />

그래서 고속카운터 입력포트가 필요한 것입니다.<br />

TinyPLC 에 있는 고속 카운터 입력포트는 하드웨어 독립회로로 구성되어 있으며, 최대<br />

100KHz 정도의 신호를 받아들일 수 있습니다. 이것은 TinyPLC 내부의 스캔타임이나<br />

명령처리속도와는 무관하게 움직이는 독립된 회로가 있기 때문에 가능한 것입니다.<br />

Q. 엔코더의 A, B상 입력을 고속카운터로 받을 수 있나요?<br />

TinyPLC 의 고속카운터로는 로터리 엔코더에서 생성되는 A/B 상의 펄스신호를 받을 수<br />

없습니다. 단순히 A 나 B 상을 입력받아서 회전속도를 측정하는 용도로 사용하는 것은<br />

가능합니다. 하지만 A/B 상을 모두 입력받아, CCW, CW 회전을 검출하여 자동적으로<br />

현재수치에 가/감산할 수 없습니다.<br />

이 기능은 TinyPLC 의 메인칩에서 처리할 수 없으므로, 외부에서 별도의 회로를 추가하여<br />

처리하는 방법을 사용해야 합니다.<br />

- 174 -


TinyPLC TPC9X User’s Manual<br />

제 12 장<br />

기타기능<br />

- 175 -


TinyPLC TPC9X User’s Manual<br />

온도센싱<br />

NTC 서미스터를 통해 온도를 측정하는 방법을 소개합니다.<br />

시중에서 다이오드 타입 10K NTC 서미스터를 구할 수 있습니다 .서미스터를 아래<br />

회로도대로 TPC9X 의 A/D 포트중 하나에 연결하십시오.<br />

TPC9X<br />

1Kohm.<br />

1%<br />

5.1V<br />

ZENER<br />

DIODE<br />

0.47uF<br />

A/D CHANNEL<br />

NTC TH.<br />

10K<br />

GETNTC 라는 명령은 측정된 A/D 결과 값을 온도값으로 바꾸어주는 명령입니다. 다음은 AD<br />

CHANNEL 0 에서 읽어들인 값을 온도값으로 바꾸어 D1 영역에 저장해주는 샘플<br />

프로그램입니다.<br />

- 176 -


TinyPLC TPC9X User’s Manual<br />

이 프로그램을 동작시키기 위해서는 PLC SETUP 에서 위와같이 A/D 채널 0 번을 활성화<br />

해주어야 합니다.<br />

NTC 서미스터 (10K)는 –30 도에서 250 도까지 측정할 수 있습니다. GETNTC 명령어는<br />

A/D 변환값을 온도값으로 바꾸어주는 변환테이블을 가지고 온도값으로 변환해줍니다.<br />

이때,음수는 2 의 보수로 저장됩니다.<br />

즉, -1 도는 65535 로..-2 도는 65534 로 저장됩니다. 측정범위를 넘어서는 값이 입력되었을<br />

경우에는 900 또는 901 을 저장합니다. 마이너스쪽으로 넘어섰다면 901 을 저장하고, 플러스<br />

쪽으로 넘어섰다면 900 을 저장합니다.<br />

온도값 저장되는 값 설명<br />

-50 도 901 측정할수 없는 범위의 값<br />

-30 도 65506 -30 의 2 의 보수<br />

-20 도 65516 -20 의 2 의 보수<br />

-3 도 65533 -3 의 2 의 보수<br />

-1 도 65535 -1 의 2 의 보수<br />

0도 0<br />

1도 1<br />

3도 3<br />

100 도 100<br />

200 도 200<br />

300 도 900 측정할 수 없는 범위 값<br />

TPC93A 의 경우 16 채널의 A/D 변환기가 있으므로, 최대 16 개의 NTC 서미스터를 연결할 수<br />

있습니다.<br />

* TPC9X 시리즈의 코어모듈에 PT100 이나 써모커플 온도센서를 직접 연결할 수 없습니다.<br />

별도의 추가회로 (또는 모듈)를 통하여 A/D 변환하는 방식을 사용해야합니다.<br />

*NTC 서미스터는 가격이 저렴하고, 구하기 쉬운 서미스터이므로, 저렴한 가격에 온도제어<br />

어플리케이션을 제작할 수 있습니다.<br />

- 177 -


TinyPLC TPC9X User’s Manual<br />

키패드 입력<br />

방법 1: 직접 키패드를 연결하는 방법<br />

TPC9X 시리즈 코어모듈에 직접 키패드를 연결한뒤, 명령어로 읽어오는 방법입니다.<br />

P2<br />

P8<br />

P9<br />

P10<br />

P11<br />

P12<br />

P13<br />

P14<br />

P15<br />

다음과 같이 회로를 구성한뒤 아래의 레더로직을 입력합니다.<br />

P8 부터 P15 까지는 포트블록 1 에 해당합니다. KEYPAD(포트블록) 명령어는 해당<br />

포트블록에서 키스캔을 한뒤 결과값을 반환해주는 명령어입니다. 위의 경우에는 D0 영역에<br />

결과값을 저장하도록 한 것입니다.<br />

F28 은 160mS 마다 On/ Off 를 반복하는 특수릴레이입니다. 따라서 이 프로그램은 160mS (약<br />

0.16 초) 마다 키스캔을 수행합니다.<br />

- 178 -


방법 2: 키패트 콘트롤러를 사용하는 방법<br />

TinyPLC TPC9X User’s Manual<br />

앞의 방법을 사용하면, 키를 누른 시점을 정확히 알 수 없습니다. 그리고 키하나를 오랫동안<br />

누르고 있을 때, 반복입력을 받을 수 없습니다. 키패드와 관련된 처리를 모두 알아서 해주는<br />

“키패드 콘트롤러”를 사용하면, 이런 문제들을 한번에 해결할 수 있습니다.<br />

키패드 콘트롤러는 다음 회로와 같이 연결합니다. TPC9X 코어모듈의 포트 0,1,2,3 을<br />

사용합니다.<br />

SS<br />

SCK<br />

MOSI<br />

MISO<br />

KEYPAD<br />

CONTROLLER<br />

P0<br />

P1<br />

P2<br />

P3<br />

TPC9X<br />

본 기능을 사용하기 위해서 특별한 명령어가 필요한 것은 아닙니다 .단지 PLC SETUP 에서<br />

KEYPAD controller 선택 부분을 체크해주시면 됩니다.<br />

KEYPAD 콘트롤러를 사용하면 포트 0,1,2,3 을 다른 용도로 사용할 수 없으므로 주의하시기<br />

바랍니다. 만약 KEYPAD 콘트롤러를 사용하지 않는데도, 이 메뉴를 ON 으로 설정한다면<br />

포트 0,1,2,3 을 사용할 수 없는 상태가 됩니다.<br />

이후, 레더실행중에 키패드입력이 있다면 결과값은 Y32 에 저장됩니다. 키가 누른시점에<br />

F42 가 ON 됩니다.<br />

F42 가 ON 되면 키 스캔코드를 읽어서 D0 에 저장하는 레더도입니다. 키 스캔코드는 키의<br />

위치를 알려주는 일종의 위치코드입니다. (키 노브위에 인쇄된 숫자를 리턴해주는 것이<br />

- 179 -


TinyPLC TPC9X User’s Manual<br />

아닙니다.) 키패드 콘트롤러에 대한 자세한 설명은 “해당 제품 사용설명서”를 참고하시기<br />

바랍니다.<br />

F42 릴레이는 저절로 클리어되지 않으므로 유저가 레더 로직상에서 클리어해주어야 합니다.<br />

F42 가 ON 되면 P22 를 HIGH 로 만들고, RSTOUT F42 명령에 의해 OFF 가 됩니다. 이렇게<br />

클리어를 해두어야 , 이후 다시 F42 가 ON 되는 것을 확인할 수 있습니다.<br />

다음은 4 x 5 키패드에 “키패드콘트롤러”를 연결한 모습입니다.<br />

본 키패드콘트롤러는 최대 8x 8 키입력을 받을 수 있습니다. 사진에서 처럼 매트릭스형태의<br />

키패드를 연결할 수도 있고, 여러분이 디자인한 맴브레인 방식의 키패드도 연결할 수<br />

있습니다.<br />

- 180 -


TinyPLC TPC9X User’s Manual<br />

DEMO PROGRAM<br />

키패드 콘트롤러와 TPC9X 를 아래 회로처럼 연결한뒤, 4 X 4 키패드를 연결합니다.<br />

KEY PAD<br />

CONTROLLER<br />

P0<br />

P1<br />

P2<br />

P3<br />

P0<br />

P1<br />

P2<br />

P3<br />

1<br />

4<br />

7<br />

2 3<br />

5 6<br />

8 9<br />

TPC9X<br />

0<br />

SCAN CODE<br />

2<br />

3<br />

4<br />

5<br />

10 18<br />

11 19<br />

12 20<br />

13 21<br />

26<br />

27<br />

28<br />

29<br />

다음 레더를 입력한 뒤 실행시키면, 키를 누를 때마다 스캔코드가 D0 영역에 저장됩니다.<br />

- 181 -


TinyPLC TPC9X User’s Manual<br />

펄스 출력<br />

일정한 주파수로 정해진갯수의 펄스를 출력하는 방법을 소개합니다. 스탭모터구동을 위한<br />

펄스로 사용될 수 있습니다.<br />

STEPPULSE<br />

USAGE : STEPPULSE 채널, 포트, 주파수, 갯수<br />

레더도<br />

F2 FUNC 3, StepPulse 0, 24, 1000, 300<br />

0 번채널 사용, 24 번 포트에서 1KHz 의 속도로 300 개의 펄스를 내보냅니다.<br />

TPC91A 의 경우 채널 0 만 사용할 수 있고, TPC93A 의 경우 채널 0 과 1 을 모두 사용할 수<br />

있습니다. 채널의 의미하는 것은 TinyPLC 코어모듈 내부의 타이머를 의미하며, 이 타이머가<br />

PWM 의 일부채널에도 사용되고 있습니다. 따라서 PWM 과 STEPPULSE 출력중 하나를<br />

선택해야만하고, 두개를 동시에 사용할 수는 없습니다.<br />

STEPPULSE 의 채널 PWM 채널 기타사항<br />

0 3,4,5<br />

1 6,7,8 TPC91A 에서 사용할 수 없음<br />

즉, 채널 0 을 사용할 때에는 PWM 3, 4, 5 를 사용할 수 없고, 채널 1 을 사용할 때에는 PWM 5,<br />

6, 7 을 사용할 수 없습니다.<br />

포트는 출력으로 설정가능한 포트중 하나를 사용해야 합니다. 입력전용 포트는 사용할 수<br />

없습니다. 여기서 사용한 포트는 더 이상 레더로직상에서 제어할 수 없습니다.<br />

주파수는 최대 15000 까지 사용가능합니다. 15000 은 15Khz 를 의미합니다. 이 이상되는 값을<br />

입력하면 15000 으로 조정됩니다.<br />

펄스의 개수는 최대 2147483647 개까지 출력할 수 있습니다.<br />

- 182 -


TinyPLC TPC9X User’s Manual<br />

펄스 출력상태를 특수릴레이 F56 과 F57 을 통하여 알 수 있습니다. 출력중에는 1 이 되고,<br />

출력이 모두 끝나면 0 이 됩니다.<br />

특수릴레이 기능설명<br />

F56 STEP PULSE CH0 BUSY (펄스 출력중 1 이됨)<br />

F57 STEP PULSE CH1 BUSY (펄스 출력중 1 이 됨)<br />

STEPPULSE CH0<br />

F56<br />

STEPPULSE CH1<br />

STEPSTOP<br />

USAGE : STEPPULSE 채널<br />

레더도<br />

F2 FUNC 3, StepStop 0<br />

F57<br />

0 번채널의 펄스출력을 중단합니다.<br />

출력중인 펄스를 강제로 종료시킵니다.<br />

- 183 -


TinyPLC TPC9X User’s Manual<br />

DEMO PROGRAM<br />

포트 32 로 5KHz 의 펄스 10 개를 출력하는 샘플 프로그램입니다. F30 을 사용해서 0.6 초마다<br />

주기적으로 출력하도록 하였습니다.<br />

스코프등으로 확인하면 다음과 같은 펄스가 출력되는 것을 볼 수 있습니다.<br />

5KHz, 10 Pulses<br />

- 184 -


TinyPLC TPC9X User’s Manual<br />

아래 그림과 같은 STEP 모터와 “모터 드라이버”를 연결하여 모터를 구동시킬 수 있습니다.<br />

큐블록과 드라이버는 3 개의 I/O 로 연결됩니다. 이중 DISABLE 은 모터회전을 금지시키는<br />

단순한 기능입니다. DIRECTION 은 모터의 회전방향을 결정합니다. (예를 들면 HIGH 이면<br />

시계방향, LOW 이면 시계반대방향)<br />

STEP 에 펄스를 공급해주면 펄스의 개수만큼 모터가 회전합니다. 1 펄스에 1.8 도가<br />

움직이는 모터라면 10 개의 펄스에 18 도가 움직입니다.<br />

Low Speed<br />

High Speed<br />

* 시중에서 판매하는 위치제어전용<br />

모듈등에서 제공하는 가감속 펄스출력은<br />

명령어 단계에서 제공하지 않습니다.<br />

Accel Time<br />

Decel Time<br />

- 185 -


- 186 -<br />

TinyPLC TPC9X User’s Manual


TinyPLC TPC9X User’s Manual<br />

제 13 장<br />

MODBUS<br />

데이터 통신<br />

- 187 -


TinyPLC TPC9X User’s Manual<br />

MODBUS 데이터 통신<br />

대부분의 PLC 는 통신기능을 가지고 있습니다. PLC 동작상태를 외부로 보내거나,<br />

외부기기로부터 동작명령을 전달받기 위해, 필수적으로 필요한 기능이 통신기능 입니다.<br />

TinyPLC TPC9X 시리즈에서는 MODBUS 슬레이브모드 (RTU 또는 ASCII 방식)를<br />

지원합니다. 특별한 명령어 구성없이, PLC SETUP 에서 설정상태만 조정하는 것으로<br />

MODBUS SLAVE 모드를 사용할 수 있습니다.<br />

MODBUS 는 RS232 또는 RS485 를 기반으로 하여, 그 위에 논리적인 데이터구성을 정의한<br />

일종의 규정집정도로 생각하시면 됩니다.<br />

RS232 포트를 가지고 있는 두개의 장비가, 어떤순서로 데이터를 주고받을 것인지 서로<br />

약속해놓지 않으면, 첫번째 도착한 데이터가 어떤 데이터이고, 두번째 도착한 데이터가 어떤<br />

데이터인지 알 수 없기 때문입니다.<br />

MODBUS 의 규정집에는 여러가지 펑션코드가 많이 있지만 TPC9X 시리즈에서는 이중<br />

1,2,3,4,5,6,15,16 만 지원합니다.<br />

펑션코드<br />

동작<br />

(10 진)<br />

1 Read Coil Status<br />

2 Read Input Status<br />

3 Read Holding Registers<br />

4 Read Input Registers<br />

5 Force Single Coil<br />

6 Preset Single Register<br />

15 Force Multiple Coils<br />

16 Preset Multiple Registers<br />

이 펑션코드를 자세히 보면 레지스터나 코일(Coil) 이라는 용어가 등장하고, 이 레지스터<br />

또는 코일에 값을 쓰거나 읽는 명령들이 대부분입니다. 모드버스에서는 기억장소를 “코일,<br />

Input Status, Holding 레지스터, Input 레지스터”의 4 가지로 구분하고 있습니다.<br />

기억장소명 대상 비트수 읽기/ 쓰기 가능여부 관련 펑션코드<br />

Coil 1 bit R/W 1, 5, 15<br />

Input Status 1 bit Read only 2<br />

Holding Register 16 bit R/W 3, 6, 16<br />

Input Register 16 bit Read only 4<br />

*기억장소명 뒷부분에 Register 가 있으면 16 비트영역이고, 없으면 1 비트 영역입니다.<br />

- 188 -


TinyPLC TPC9X User’s Manual<br />

TinyPLC 에서는 편의상 Coil 과 Input Status 를 비트영역으로 통합관리하고, Holding<br />

Register 와 Input Register 는 워드영역으로 통합관리합니다.<br />

그리고 레더 릴레이 영역은 P, M, F, C 등의 알파벳으로 구분하는데, MODBUS 에서는 숫자로<br />

된 어드레스를 사용합니다. 1~9999 까지는 비트를 취급하는 어드레스이고, 40001 ~<br />

49999 까지는 워드를 취급하는 어드레스입니다.<br />

비트영역 (Coil, Input Status)<br />

관련 펑션코드 : 1,2,4,15<br />

Device 어드레스 (10 진) 데이터 영역<br />

1 to 128 P 영역<br />

385 to 512 F 영역<br />

4097 to 8192 M 영역<br />

8193 to 9999 K 영역<br />

워드영역 (Holding/Input Registers)<br />

관련평션코드 : 3,4,6,16<br />

Device 어드레스 (10 진) 데이터 영역<br />

40001 to 41000 D 영역<br />

41001 to 42000 T 영역<br />

42001 to 43000 C 영역<br />

43001 to 44000 WM 영역<br />

44001 to 45000 Y 영역<br />

45001 to 46000 A 영역<br />

46001 to 47000 B 영역<br />

각 모델 별 유효구간에 유의하셔서 어드레스를 결정하시기 바랍니다. 유효구간이란 실제로<br />

존재하는 구간을 말합니다. TPC93A 에서 D 영역의 경우 최대 D0 부터 D255 까지 있으므로,<br />

1 번지부터 256 번지까지만 유효구간입니다. 그 나머지 구간에 대해서는 사용을 금지해야<br />

합니다.<br />

Device 어드레스는 Host 장비에서 취급하는 어드레스를 뜻합니다. 일반적으로 Host 장비<br />

에서는 펑션코드를 신경쓰지 않고, 어드레스 하나만으로 Bit 영역과 Word 영역을 구분합니다.<br />

즉, 어드레스가 40000 번지 이후이면 워드관련 펑션코드를 가지고 MODBUS 통신을 하게<br />

됩니다. Device 어드레스와 MODBUS 통신상의 어드레스 (실제로 송신되는 어드레스값) 는<br />

다음과 같은 차이점이 있습니다.<br />

Device 어드레스 Modbus 어드레스 설명<br />

1…10000 Device 어드레스 – 1 1 을 뺀값이 Modbus 어드레스가 됩니다.<br />

40001 … 50000 Device 어드레스 – 40001 40001 을 뺀값이 Modbus 어드레스입니다.<br />

- 189 -


TinyPLC TPC9X User’s Manual<br />

MODBUS 에 대하여…<br />

MODBUS 란 MODICON 이라는 회사에서 자사의 PLC 를 위하여 개발된 PLC 접속<br />

프로토콜로써, PLC 와 외부기기와의 인터페이스를 위하여 고안된 통신 방식입니다.<br />

주로 터치스크린과 같은 HMI 기기와, PC 상에서 운용되는 SCADA 소프트웨어등과 통신하는<br />

목적으로 사용합니다. 현재 시판중인 대다수의 “터치스크린 판넬”과 PC 용 HMI,<br />

SCADA 소프트웨어에서는 MODBUS 를 지원하고 있을 정도로 널리 사용되고 있는<br />

프로토콜입니다. (초창기에 만들어진 스팩을 여러회사에서 따라하다보니, 지금은<br />

산업표준처럼 사용되고 있는 것입니다.)<br />

MODBUS 는 마스터-슬레이브의 개념을 가지고 운용됩니다. 마스터는 데이터를 송신하는<br />

능동적 디바이스이고, 슬레이브는 데이터를 받아들이고, 응답하는 수동적 디바이스를<br />

의미합니다. 즉, 슬레이브에서는 오로지 마스터가 보낸 데이터에 대한 응답만 가능할 뿐,<br />

자체적으로 데이터를 송신할 수는 없습니다.<br />

MASTER<br />

Query<br />

SLAVE<br />

Response<br />

Slave Address '01'<br />

슬레이브는 자기 자신의 고유 어드레스 (Slave Address)를 가지고 있으며, 마스터에서는 이<br />

Slave Address 를 사용해서, 여러 개의 슬레이브 중 특정 슬레이브를 하나만을 지정해서<br />

통신할 수 있습니다.<br />

마스터가 보내는 하나의 멧세지 집합을 “프레임”이라고 부르며, 하나의 프레임에는<br />

슬레이브의 어드레스, 펑션코드, 데이터, 에러체크 코드 등을 포함하고 있습니다.<br />

슬레이브에서는 마스터가 보낸 “프레임”을 분석하여, 응답할 때에도 역시 하나의<br />

“프레임”을 형성하여 데이터를 보내줍니다.<br />

MODBUS 는 ASCII 코드만을 사용하는 ASCII 방식과 바이너리 데이터를 사용하는<br />

RTU 방식이 있습니다. ASCII 방식보다 RTU 방식이 더 짧게 데이터를 구성할 수 있습니다.<br />

또한 에러체크방법으로 ASCII 방식 LRC 를 사용하고 RTU 에서는 CRC 를 사용합니다.<br />

- 190 -


TinyPLC TPC9X User’s Manual<br />

다음은 ASCII 방식과 RTU 방식의 사용 예입니다.<br />

필드명 예 (Hex) ASCII 방식 RTU 방식<br />

헤더 : (colon) 없음<br />

슬레이브 어드레스 0X03 0 3 0X03<br />

펑션코드 0X01 0 1 0X01<br />

시작어드레스 HI 0X00 0 0 0X00<br />

시작어드레스 LO 0X13 1 3 0X13<br />

길이 HI 0X00 0 0 0X00<br />

길이 LO 0X25 2 5 0X25<br />

에러체크 LRC (2 바이트) CRC(2 바이트)<br />

종료코드 CR LF 없음<br />

총바이트수 17 바이트 8 바이트<br />

ASCII 방식은 콜론(: )으로 시작해서 CR,LF 로 종료하게 됩니다.<br />

START SLAVE ADR FUNCTION DATA LRC END<br />

: (COLON) 2 바이트 2 바이트 n 바이트 2 바이트 CR,LF<br />

RTU 방식은 특별한 헤더와 종료코드 없이 약 4 바이트 정도의 블랭크구간으로 시작과 끝을<br />

판단합니다.<br />

START SLAVE ADR FUNCTION DATA CRC END<br />

T1-T2-T3-T4 1 바이트 1 바이트 n 바이트 2 바이트 T1-T2-T3-T4<br />

- 191 -


펑션코드 01 : Read Coil Status<br />

펑션코드 02 : Read Input Status<br />

- 192 -<br />

TinyPLC TPC9X User’s Manual<br />

PLC 의 비트 (릴레이) 상태를 읽어올 수 있는 펑션코드입니다. 다음은 슬레이브 어드레스<br />

3 번의 P 릴레이 20~56 번을 읽어오는 예제입니다.<br />

Query:<br />

필드명 RTU 방식 RTU 방식 바<br />

이트 수<br />

ASCII 방식<br />

ASCII 방식<br />

바이트 수<br />

헤더 : (colon) 1<br />

슬레이브 어드레스 0X03 1 0 3 2<br />

펑션코드 0X01 1 0 1 2<br />

시작어드레스 HI 0X00 1 0 0 2<br />

시작어드레스 LO 0X13 1 1 3 2<br />

길이 HI 0X00 1 0 0 2<br />

길이 LO 0X25 1 2 5 2<br />

에러체크 CRC 2 LRC 2<br />

종료코드 CR LF 2<br />

LRC 는 맨 앞뒤에 있는 콜론과 CR,LF 제외한 나머지 숫자를 모두 합한 뒤, 8 비트 이상 값을<br />

제외시키고, 나머지 값을 2 의 보수로 만든 값입니다. 위의 경우 3h + 1h + 13h + 25h = 3Ch 가<br />

되고 3Ch 의 2 의 보수인 0C4h 가 LRC 값이 됩니다. 다음은 실제로 마스터에서 송신되는<br />

내용을 ASCII 코드와 HEX 값으로 표현한 것입니다.<br />

ASCII : 0 3 0 1 0 0 1 3 0 0 2 5 C 4 CR LF<br />

hex 3A 30 33 30 31 30 30 31 33 30 30 32 35 43 34 13 10<br />

이에 대한 응답은 아래와 같습니다.<br />

Response:<br />

필드명 RTU 방식 RTU 방식<br />

바이트 수<br />

ASCII 방식<br />

헤더 : (colon) 1<br />

슬레이브 어드레스 0X03 1 0 3 2<br />

펑션코드 0X01 1 0 1 2<br />

바이트 카운트 0X05 1 0 5 2<br />

데이터 1 0X53 1 5 3 2<br />

데이터 2 0X6B 1 6 B 2<br />

데이터 3 0X01 1 0 1 2<br />

데이터 4 0XF4 1 F 4 2<br />

데이터 5 0X1B 1 1 B 2<br />

에러체크 CRC 2 LRC 2<br />

종료코드 CR LF 2<br />

ASCII 방식<br />

바이트 수


TinyPLC TPC9X User’s Manual<br />

응답의 DATA 구성에 대하여 자세히 보면, 비트 20~27 까지 한 바이트를 구성합니다. 20 번<br />

비트가 LSB 에 위치하고, 27 번 비트가 MSB 에 위치하도록 구성하여 응답합니다. 이렇게<br />

해서 5 바이트를 만들어 송신하고, 끝에 남는 비트는 알 수 없는 (Dummy)값으로 송신됩니다.<br />

다음은 MODBUS 로 데이터를 송수신하는 상황을 그림으로 표현해 본것입니다. MODBUS<br />

RTU 모드로 마스터측 (여기에서는 PC)에서 데이터가 송신되면, 슬레이브측 (TinyPLC)에서<br />

응답합니다. 이때 슬레이브측의 어드레스가 일치되어야 합니다.<br />

MODBUS RTU<br />

PC<br />

03 01 00 13 00 25 34 8D<br />

MASTER<br />

TPC9X<br />

MODBUS RTU<br />

03 01 05 53 6B 01 F4 1B 31 AC<br />

SLAVE<br />

Slave Address '01'<br />

- 193 -


TinyPLC TPC9X User’s Manual<br />

펑션코드 03 : Read Holding Registers<br />

펑션코드 04 : Read Input Registers<br />

PLC 의 1 워드 데이터 상태를 읽어올 수 있는 펑션코드입니다. 주로 카운터, 타이머, 데이터<br />

(C, T, D)영역의 데이터를 읽어올 때 사용합니다. 다음은 슬레이브 어드레스 3 번의 D 릴레이<br />

0~2 번을 읽어오는 예제입니다.<br />

Query:<br />

필드명 RTU 방식 RTU 방식<br />

바이트 수<br />

ASCII 방식<br />

헤더 : (colon) 1<br />

슬레이브 어드레스 0X03 1 0 3 2<br />

펑션코드 0X03 1 0 3 2<br />

시작어드레스 HI 0X70 1 7 0 2<br />

시작어드레스 LO 0X00 1 0 0 2<br />

길이 HI 0X00 1 0 0 2<br />

길이 LO 0X03 1 0 3 2<br />

에러체크 CRC 2 LRC 2<br />

종료코드 CR LF 2<br />

ASCII 방식<br />

바이트 수<br />

이에 대한 응답은 아래와 같습니다. 1 워드는 2 바이트이므로, 총 6 바이트의 데이터를<br />

응답합니다.<br />

Response:<br />

필드명 RTU 방식 RTU 방식<br />

바이트 수<br />

ASCII 방식<br />

헤더 : (colon) 1<br />

슬레이브 어드레스 0X03 1 0 3 2<br />

펑션코드 0X03 1 0 3 2<br />

바이트 카운트 0X06 1 0 6 2<br />

데이터 1 LO 0X03 1 0 3 2<br />

데이터 1 HI 0XE8 1 E 8 2<br />

데이터 2 LO 0X01 1 0 1 2<br />

데이터 2 HI 0XF4 1 F 4 2<br />

데이터 3 LO 0X05 1 0 5 2<br />

데이터 3 HI 0X33 1 3 3 2<br />

길이 LO 0X03 1 0 3 2<br />

에러체크 CRC 2 LRC 2<br />

종료코드 CR LF 2<br />

ASCII 방식<br />

바이트 수<br />

- 194 -


펑션코드 05 : Force Single Coil<br />

TinyPLC TPC9X User’s Manual<br />

PLC 의 특정 릴레이 상태를 강제로 변화시킬 수 있는 펑션코드입니다. 다음은 슬레이브<br />

어드레스 3 번의 P1 릴레이를 ON 시키는 예제입니다. 데이터 필드에 ON 할 때에는 FF 00 을<br />

OFF 할 때에는 00 00 을 보냅니다.<br />

Query:<br />

필드명 RTU 방식 RTU 방식<br />

바이트 수<br />

ASCII 방식<br />

헤더 : (colon) 1<br />

슬레이브 어드레스 0X03 1 0 3 2<br />

펑션코드 0X05 1 0 5 2<br />

시작어드레스 HI 0X01 1 0 1 2<br />

시작어드레스 LO 0X00 1 0 0 2<br />

데이터 HI 0XFF 1 F F 2<br />

데이터 LO 0X00 1 0 0 2<br />

에러체크 CRC 2 LRC 2<br />

종료코드 CR LF 2<br />

ASCII 방식<br />

바이트 수<br />

이에 대한 응답은 아래와 같습니다. 데이터 필드에 FF 00 또는 00 00 이외의 값이 들어 있다면<br />

아무런 변화도 일어나지 않습니다. 데이터 필드에는 반드시 FF 00 또는 00 00 만 사용해야<br />

합니다.<br />

Response:<br />

필드명 RTU 방식 RTU 방식<br />

바이트 수<br />

ASCII 방식<br />

헤더 : (colon) 1<br />

슬레이브 어드레스 0X03 1 0 3 2<br />

펑션코드 0X05 1 0 5 2<br />

시작어드레스 HI 0X01 1 0 1 2<br />

시작어드레스 LO 0X00 1 0 0 2<br />

데이터 HI 0XFF 1 F F 2<br />

데이터 LO 0X00 1 0 0 2<br />

에러체크 CRC 2 LRC 2<br />

종료코드 CR LF 2<br />

ASCII 방식<br />

바이트 수<br />

- 195 -


TinyPLC TPC9X User’s Manual<br />

펑션코드 06 : Preset Single Registers<br />

PLC 의 특정 데이터 영역 1 워드의 값을 강제로 변화시킬 수 있는 펑션코드입니다. 다음은<br />

슬레이브 어드레스 3 번의 D1 영역의 값을 변화 시키는 예제입니다.<br />

Query:<br />

필드명 RTU 방식 RTU 방식<br />

바이트 수<br />

ASCII 방식<br />

헤더 : (colon) 1<br />

슬레이브 어드레스 0X03 1 0 3 2<br />

펑션코드 0X06 1 0 6 2<br />

시작어드레스 HI 0X70 1 0 1 2<br />

시작어드레스 LO 0X01 1 7 0 2<br />

데이터 HI 0X12 1 1 2 2<br />

데이터 LO 0X34 1 3 4 2<br />

에러체크 CRC 2 LRC 2<br />

종료코드 CR LF 2<br />

이에 대한 응답은 아래와 같습니다.<br />

Response:<br />

필드명 RTU 방식 RTU 방식<br />

바이트 수<br />

ASCII 방식<br />

헤더 : (colon) 1<br />

슬레이브 어드레스 0X03 1 0 3 2<br />

펑션코드 0X06 1 0 6 2<br />

시작어드레스 HI 0X70 1 0 1 2<br />

시작어드레스 LO 0X01 1 7 0 2<br />

데이터 HI 0X12 1 1 2 2<br />

데이터 LO 0X34 1 3 4 2<br />

에러체크 CRC 2 LRC 2<br />

종료코드 CR LF 2<br />

ASCII 방식<br />

바이트 수<br />

ASCII 방식<br />

바이트 수<br />

- 196 -


TinyPLC TPC9X User’s Manual<br />

펑션코드 15 : Force Multiple Coils<br />

여러 개의 PLC 의 릴레이를 강제로 변화시킬 수 있는 펑션코드입니다. 다음은 슬레이브<br />

어드레스 3 번의 P 릴레이 20~30 번을 변화시키는 예제입니다.<br />

Query:<br />

필드명 RTU 방식 RTU 방식<br />

바이트 수<br />

ASCII 방식<br />

헤더 : (colon) 1<br />

슬레이브 어드레스 0X03 1 0 3 2<br />

펑션코드 0X0F 1 0 F 2<br />

시작어드레스 HI 0X00 1 0 0 2<br />

시작어드레스 LO 0X14 1 1 4 2<br />

길이 HI 0X00 1 0 0 2<br />

길이 LO 0X0B 1 0 B 2<br />

바이트 카운트 0X02 1 0 2 2<br />

데이터 1 0XD1 1 D 1 2<br />

데이터 2 0X05 1 0 5 2<br />

에러체크 CRC 2 LRC 2<br />

종료코드 CR LF 2<br />

ASCII 방식<br />

바이트 수<br />

DATA 구성에 대하여 자세히 보면, 비트 20~27 까지 한 바이트를 구성합니다. 20 번 비트가<br />

LSB 에 위치하고, 27 번 비트가 MSB 에 위치하도록 구성하여 응답합니다. 이렇게 해서<br />

2 바이트를 만들어 송신하고, 끝에 남는 비트는 0 으로 처리합니다.<br />

Bit 1 1 0 1 0 0 0 1 0 0 0 0 0 1 0 1<br />

Relay P27 P26 P25 P24 P23 P22 P21 P20 P30 P29 P28<br />

이에 대한 응답은 다음과 같습니다.<br />

Response:<br />

필드명 RTU 방식 RTU 방식<br />

바이트 수<br />

ASCII 방식<br />

헤더 : (colon) 1<br />

슬레이브 어드레스 0X03 1 0 3 2<br />

펑션코드 0X0F 1 0 F 2<br />

시작어드레스 HI 0X00 1 0 0 2<br />

시작어드레스 LO 0X14 1 1 4 2<br />

길이 HI 0X00 1 0 0 2<br />

길이 LO 0X0B 1 0 B 2<br />

에러체크 CRC 2 LRC 2<br />

종료코드 CR LF 2<br />

ASCII 방식<br />

바이트 수<br />

- 197 -


TinyPLC TPC9X User’s Manual<br />

펑션코드 16 : Preset Multiple Regs<br />

여러 개의 PLC 워드 단위 데이터 영역을 강제로 변화시킬 수 있는 펑션코드입니다. 주로<br />

타이머, 카운터, 데이터 (T, C, D)영역에 새로운 값을 넣을 때 사용합니다. 다음은 슬레이브<br />

어드레스 3 번의 D 영역 0~2 번을 변화시키는 예제입니다.<br />

Query:<br />

필드명 RTU 방식 RTU 방식<br />

바이트 수<br />

ASCII 방식<br />

헤더 : (colon) 1<br />

슬레이브 어드레스 0X03 1 0 3 2<br />

펑션코드 0X10 1 1 0 2<br />

시작어드레스 HI 0X70 1 7 0 2<br />

시작어드레스 LO 0X00 1 0 0 2<br />

길이 HI 0X00 1 0 0 2<br />

길이 LO 0X03 1 0 3 2<br />

바이트 카운트 0X06 1 0 6 2<br />

데이터 1 HI 0XD1 1 D 1 2<br />

데이터 1 LO 0X03 1 0 3 2<br />

데이터 2 HI 0X0A 1 0 A 2<br />

데이터 2 LO 0X12 1 1 2 2<br />

데이터 3 HI 0X04 1 0 4 2<br />

데이터 3 LO 0X05 1 0 5 2<br />

에러체크 CRC 2 LRC 2<br />

종료코드 CR LF 2<br />

이에 대한 응답은 다음과 같습니다.<br />

Response:<br />

필드명 RTU 방식 RTU 방식<br />

바이트 수<br />

ASCII 방식<br />

헤더 : (colon) 1<br />

슬레이브 어드레스 0X03 1 0 3 2<br />

펑션코드 0X10 1 1 0 2<br />

시작어드레스 HI 0X70 1 7 0 2<br />

시작어드레스 LO 0X00 1 0 0 2<br />

길이 HI 0X00 1 0 0 2<br />

길이 LO 0X03 1 0 3 2<br />

에러체크 CRC 2 LRC 2<br />

종료코드 CR LF 2<br />

ASCII 방식<br />

바이트 수<br />

ASCII 방식<br />

바이트 수<br />

- 198 -


TinyPLC TPC9X User’s Manual<br />

에러처리<br />

마스터에서 보내온 데이터에 오류가 있는 경우, 또는 슬레이브의 어떤 상황이 발생하여<br />

제대로 응답할 수가 없는 상황에서 슬레이브는 에러코드를 송신합니다. 이 에러처리는<br />

ASCII 방식에서만 발생하고, RTU 방식에서는 에러가 있을경우 응답하지 않습니다.<br />

필드명 예 (Hex) ASCII 방식 바이트 수<br />

헤더 : (colon) 1<br />

슬레이브 어드레스 0X03 0 3 2<br />

펑션코드 0X81 8 1 2<br />

에러 코드 0X09 0 9 2<br />

에러체크 LRC 2<br />

종료코드 CR LF 2<br />

에러코드는 다음과 같은 종류가 있습니다.<br />

코드 에러 명 설명<br />

01 ILLEGAL FUNCTION 지원하지 않는 펑션코드를 수신하였을 때 발생됩니<br />

다.<br />

02 ILLEGAL DATA ADDRESS 맞지 않는 어드레스를 수신하였을 때 발생됩니다.<br />

03 ILLEGAL DATA VALUE 잘못된 데이터를 수신하였을 때 발생됩니다.<br />

09 LRC UNMATCH 잘못된 체크섬(LRC)를 수신하였을 때 발생됩니다.<br />

- 199 -


TinyPLC TPC9X User’s Manual<br />

MODBUS 셋업하기<br />

모드버스 슬레이브 기능을 사용하기 위해 특별한 명령어를 사용할 필요는 없습니다. 단지<br />

PLC SETUP 에서 아래 그림과 같이 설정해주시면 됩니다.<br />

모드버스는 RS232 채널 1 에서만<br />

사용가능합니다.<br />

우선, USE RS232 채널 1 을 체크해서,<br />

RS232 CH1 을 활성화 시킵니다.<br />

그다음, 보레이트와 프로토콜을<br />

선택합니다. 여기에서는 115200<br />

보레이트와 None 패리티, 8 비트, 1 스톱<br />

비트로 선택한 것입니다.<br />

MODBUS 사용시에는 반드시 USE<br />

UNTIL 을 체크하지 않아야 합니다.<br />

USE UNTIL 은 범용 RS232 통신에서 사용하는 기능입니다.<br />

USE MODBUS 를 체크하십시오. 그리고 RTU 또는 ASCII 모드중 하나를 선택하고, 끝으로<br />

Salve Address 를 결정합니다.<br />

Slave Address 는 1 부터 255 이내의 값으로 선택해야합니다.<br />

- 200 -


TinyPLC TPC9X User’s Manual<br />

슬레이브 어드레스는 왜 필요한가?<br />

동일 선상에서 여려개의 디바이스와 통신하고자 할 때 필요합니다. 보통 이런경우 RS485<br />

방식을 사용합니다.<br />

PC<br />

TinyPLC<br />

TinyPLC<br />

TinyPLC<br />

Slave Adr "01" Slave Adr "02" Slave Adr "03"<br />

슬레이브 어드레스는 일종의 집주소와 같습니다. 우편배달부가 집 주소가 있어야 우편물을<br />

배달할 수 있는 것 처럼, 각각의 디바이스마다 주소가 필요합니다.<br />

위의 그림에서 처럼 PC 와 여러 개의 TinyPLC 가 동일 통신선으로 연결되어 있는 상황에서,<br />

PC 가 어떤 데이터를 송신하고자 할 때, 3 개의 TinyPLC 중 하나를 지목해서 데이터를 송신할<br />

필요가 있습니다.<br />

이때 “슬레이브 어드레스”를 사용합니다. PC 가 보낸 데이터는 3 개의 TinyPLC 에 모두<br />

도착하지만, TinyPLC 측에서는 자신의 슬레이브 어드레스와 일치하지 않는다면, 일체의<br />

반응을 하지 않고, 받은 데이터를 무시해 버립니다.<br />

자신의 슬레이브 어드레스와 일치하는 명령셋이 도착했다면, 그에 대한 응답을 하게 되는<br />

것입니다.<br />

따라서, 모든 명령셋(프레임)에는 슬레이브 어드레스가 포함되어 있습니다.<br />

그리고, PLC SETUP 에서 MODBUS 상태를 설정하는 메뉴에서는 “슬레이브 어드레스”를<br />

결정할 수 있도록 되어 있습니다.<br />

- 201 -


- 202 -<br />

TinyPLC TPC9X User’s Manual


TinyPLC TPC9X User’s Manual<br />

제 14 장<br />

RS232<br />

범용통신<br />

- 203 -


TinyPLC TPC9X User’s Manual<br />

RS232 통신<br />

MODBUS SLAVE 모드에서는 상위기기에서 데이터를 보내왔을 때, 그에 대한 응답만<br />

가능한 모드입니다. TinyPLC 에서 다른기기로 데이터를 송신할 수 없는 상태입니다. 주로<br />

주장치(Main)에 종속적으로 접속되어 있는 경우에 사용하는 방식입니다.<br />

MODBUS Master<br />

PC<br />

TinyPLC<br />

TinyPLC<br />

MODBUS slave<br />

MODBUS slave<br />

이에반해 범용통신 모드는 어떤 데이터를 송신할 수도 있고 수신할 수도 있습니다.<br />

어떤순서로 데이터를 보내고, 몇바이트를 보낼것인지 여러분께서 결정하실 수 있는 상태를<br />

말합니다.<br />

TinyPLC 에 바코드 리더 또는 지폐인식기와 같이 RS232 로 통신하는 다른 기기를<br />

연결하고자할 경우에는 MODBUS SLAVE 를 사용할 수 없습니다. 다른기기에 데이터를<br />

보내고, 응답을 수신할 수 있는 범용통신모드를 사용해야 합니다.<br />

TinyPLC<br />

BarCode<br />

Reader<br />

Cash<br />

Reader<br />

이 상태에서 TinyPLC 가 주장치(Main)이 됩니다. 다른 장치의 상태를 읽어오거나, 정보를<br />

전달할 수 있습니다.<br />

TPC9X 시리즈는 1 개이상의 RS232 채널을 가지고 있으며, 최대 230400 보레이트 까지<br />

지원합니다.<br />

- 204 -


TinyPLC TPC9X User’s Manual<br />

RS232 통신 설정<br />

RS232 범용통신을 사용하기 위해서는 PLC SETUP 메뉴에서 다음과 같이 설정하여야 합니다.<br />

Use Until 을 체크하지 않<br />

으면<br />

송신만 가능합니다.<br />

채널 1 을 활성화시킵니<br />

다.<br />

보레이트와<br />

선택합니다.<br />

프로토콜을<br />

채널 1 에서만<br />

MODBUS SLAVE<br />

사용이 가능합니다.<br />

TPC93A 모델에서는 채널<br />

2와 채널3을 사용할 수<br />

있습니다.<br />

PLC 모델에서 TPC93A 를<br />

선택했을때에만 이곳이 활<br />

성화 됩니다.<br />

RS232 수신기능을<br />

사용하기 위해서는<br />

반드시 use Until 을<br />

체크해야 합니다.<br />

바로뒤에 있는 10 이<br />

의미하는 것은<br />

Until Chractor 입니다.<br />

수신도중 Until Chractor 가<br />

수신되면, D 영역 버퍼에<br />

데이터를 저장합니다.<br />

TPC91A 모델은 채널 1 만 사용가능하며, TPC93A 모델은 채널 2,3 까지 사용할 수 있습니다.<br />

- 205 -


TinyPLC TPC9X User’s Manual<br />

데이터 송신<br />

RS232 범용통신은 송신과 수신동작으로 나눌 수 있습니다.<br />

송신명령을 사용해서 D 영역에 있는 데이터중 원하는 수 만큼을 해당 포트로 송신할 수<br />

있습니다. 송신을 하기 위해서는 일반적으로 다음과 같은 순서대로 작업을 진행합니다.<br />

1. D 영역중 일부분에 송신할 데이터를 저장합니다.<br />

2. TX 명령을 사용해서, 데이터를 송신합니다.<br />

다음 예제 프로그램을 보시면, 송신 과정에 대해서 이해하실 수 있을 것입니다.<br />

이 프로그램을 동작시키기 위해서 P0 을<br />

스위치에 연결하고, TX 단자를<br />

MAX232 를 통해 PC 로 접속합니다.<br />

PC 에서 통신프로그램등으로<br />

TinyPLC 로부터 전송되어 오는 데이터를<br />

확인할 수 있습니다.<br />

PC<br />

RX1<br />

TX1<br />

P0<br />

5V<br />

- 206 -


TinyPLC TPC9X User’s Manual<br />

TX<br />

USAGE : TX 채널, D 영역 시작위치, 송신 바이트수<br />

레더도<br />

결과<br />

FUNC 3, TX 1, 0, 3<br />

D0,D1,D2 의 내용이 송신됩니다.<br />

채널 1 으로 D0 영역부터 3 바이트를 송신합니다.<br />

D 영역은 1 워드 (16 비트)값을 저장할 수 있는 공간이지만, RS232 통신에서는 바이트를<br />

저장하는 공간으로 사용됩니다.<br />

PUTSTR<br />

USAGE : PUTSTR 채널, 문자열<br />

레더도<br />

FUNC 3, PUTSTR 1, “ABC”<br />

채널 1 으로 문자 A, B,C 를 송신합니다.<br />

결과<br />

“A”, “B”,”C”가 송신됩니다.<br />

ASCII 코드로 0X41, 0X42,<br />

0X43 이 송신됩니다.<br />

FUNC 3, PUTSTR 1, “ABC”,13,10<br />

채널 1 으로 문자 A, B,C 과 숫자 13,10 을<br />

송신합니다.<br />

“A”, “B”,”C”에 이어서 숫자<br />

13 과 10 이 송신됩니다. ASCII<br />

코드로 0X41, 0X42, 0X43, 0X0D,<br />

0X0A 가 송신됩니다.<br />

버퍼에 넣지않고, 문자열 또는 수(Number)를 송신할 수 있는 명령입니다.<br />

- 207 -


TinyPLC TPC9X User’s Manual<br />

TBF 의 활용<br />

TBF 는 LADDER 의 데이터영역과는 별도의 공간이며, RS232 데이터를 취급하기 위한<br />

장소입니다. 표기 방법은 TBF(인덱스)와 같은 식으로 표기합니다.<br />

TBF(index)<br />

index 는 0 부터 55 까지 사용 가능합니다. 이 공간에 RS232 수신 데이터나, 송신데이터를<br />

잠시 보관할 수 있습니다. 다음은 TBF 를 이용한 데이터 송신명령어입니다.<br />

PUTA<br />

USAGE : PUTA 채널, TBF, 송신 바이트수<br />

레더도<br />

FUNC 3, PUTA 1, TBF, 3<br />

TBF 에 있는 데이터를 3 바이트 송신합니다.<br />

결과<br />

TBF(0)<br />

TBF(1)<br />

TBF(2)에 있는 값이 차례대로<br />

송신됩니다..<br />

TBF(0)에서부터 차례대로 송신됩니다. 송신 시작지점은 선택할 수 없습니다.<br />

- 208 -


TinyPLC TPC9X User’s Manual<br />

PUTA2<br />

USAGE : PUTA 채널, TBF, 송신 바이트수, Until 캐릭터<br />

레더도<br />

FUNC 3, PUTA 1, TBF, 30,10<br />

TBF 에 있는 데이터중 ASCII 코드 10 이 있는<br />

곳까지만 송신합니다. 최대 30 바이트까지만<br />

송신합니다.<br />

결과<br />

TBF(0)<br />

TBF(1)<br />

TBF(2)에 있는 값이 차례대로<br />

송신되다가, ASCII 코드 10 이<br />

발견되면 송신을 중단합니다.<br />

ASCII 코드 10 은 송신됩니다.<br />

TBF(0)에서부터 차례대로 송신됩니다. 송신 시작지점은 선택할 수 없습니다. 앞에서 설명한<br />

PUTA 명령과의 차이점이 있다면, UNTIL 캐릭터를 지정할 수 있다는 것입니다. TBF 에 있는<br />

데이터중 UNTIL 캐릭터가 있는 곳까지만 송신하므로, UNTIL 캐릭터가 있는 곳을<br />

체크하기위해서, 고민할 필요가 없습니다.<br />

최대송신바이트수 까지 모두 전송하였는데, UNTIL 캐릭터를 발견하지 못했다면 더 이상<br />

송신하지 않습니다.<br />

UNTIL 캐릭터는 반드시 ASCII 코드로 써주어야 합니다.<br />

- 209 -


TinyPLC TPC9X User’s Manual<br />

데이터 송신상태 확인방법<br />

PUTSTR 또는 PUTA 명령을 실행시키면 TPC9X 는 송신을 시작합니다. 실제로는 이<br />

명령들은 송신버퍼에 데이터를 저장하는 역할 만 수행합니다. 이후 송신 작업은 TPC9X<br />

내부의 OS 가 알아서 수행합니다.<br />

송신하는 동안 아래의 특수릴레이를 ON 상태로 만들어 줍니다.<br />

특수릴레이 설명 별명<br />

F51 RS232 CH1 송신중 ON F_TX1<br />

F52 RS232 CH2 송신중 ON F_TX2<br />

F53 RS232 CH3 송신중 ON F_TX3<br />

따라서 이 특수릴레이가 OFF 될 때까지 기다렸다가, 다음 데이터를 송신하시기 바랍니다.<br />

RS232 CH1 TX<br />

101001010101010101001<br />

F51<br />

- 210 -


TinyPLC TPC9X User’s Manual<br />

포맷화된 송신<br />

일반적으로 RS232 통신은 하나의 패킷단위로 데이터를 송/수신하게 됩니다.<br />

PACKET<br />

high<br />

low<br />

05 01 30 31 32 33 10<br />

Start Cmd<br />

Stop<br />

Address<br />

=<br />

0X0123<br />

위와 같은 데이터를 송신하려고 한다면, 다음과 같이 레더를 작성하실 수 있습니다. (D0 에<br />

0x0123 이 들어있다고 가정한 상태입니다.)<br />

FUNC 3, PUTSTR 1, 5,1,Hp(D0, 4,1),10<br />

여기에서 Hp 라는 새로운 명령어가 나옵니다. 이 명령은 어떤 기억장소에 있는 값을<br />

ASCII 코드로 포맷시켜주는 명령입니다. 위의 경우 D0 에 있는 값을 4 자릿수의<br />

ASCII 코드로 바꿔었습니다. 이때 4 자릿수를 모두 채우기 위해 앞의 빈자리를 0 으로<br />

채웁니다.<br />

HP<br />

USAGE : HP( 기억장소, 자릿수, 0 채움)<br />

레더도<br />

FUNC 3, PUTSTR 1,HP(D0,4,1)<br />

D0 영역의 값을 4 자릿수의 16 진수로 바꿉니다. 이<br />

때 앞의 빈자릿수는 0 으로 채웁니다.<br />

결과<br />

(16 진)<br />

D0 의 값, 변환결과<br />

12 0012<br />

ABC 0ABC<br />

1234 1234<br />

기억장소가 바이트형이라면, 2 자릿수까지만 변환이 가능하고, 워드형이면 4 자릿수까지<br />

변환가능합니다. TBF 의 경우 바이트형이므로 HP(TBF(0), 2,1)과 같은 식으로 작성해주어야<br />

합니다. 이 명령에서 실수는 사용할 수 없습니다.<br />

- 211 -


TinyPLC TPC9X User’s Manual<br />

데이터 수신<br />

TinyPLC 의 수신동작은 송신동작에 비해서 조금은 복잡합니다. 하지만 기본적인 원리를<br />

알고 나면 쉽게 사용할 수 있습니다. 기본적으로 TinyPLC 는 수신버퍼가 있습니다. 외부에서<br />

전송되어 오는 데이터는 TinyPLC 가 알아서 수신버퍼에 저장해줍니다. 이 수신버퍼는<br />

특별한 영역에 있으므로 유저가 신경쓸 필요는 없습니다.<br />

RS232 DATA<br />

AB 01 34 0A 3B<br />

Data Area<br />

AB 01 34<br />

0A 3B<br />

RX Buffer<br />

Found UNTIL<br />

charactor<br />

수신된 버퍼에 있는 내용을 언제 LADDER 가 억세스할 수 있는 메모리(D 영역)로<br />

꺼내오는가? 에 대해서 고민해야 합니다.<br />

한바이트가 수신될 때 마다 데이터 영역으로 꺼내온다면, 너무 번거로울 것입니다.<br />

정해진 바이트수마다 꺼내온다면 데이터가 밀리거나, 짤리는등의 오류가 발생할 수<br />

있습니다. 그래서 TinyPLC 에서는 UNTIL 캐릭터에 의해서 데이터를 관리하고 있습니다.<br />

UNTIL 캐릭터란 버퍼에 수신된 데이터중에서 특별한 코드를 찾아내는 방법입니다. 이<br />

코드가 수신될때까지는 아무런 일이 일어나지 않습니다. UNTIL 캐릭터가 수신되면, 그때<br />

지금까지 수신된 데이터를 모두 데이터영역으로 옮기는 방식입니다.<br />

PACKET<br />

PACKET continue<br />

A B 0 3 2 C<br />

B 3 K J<br />

UNTIL charactor<br />

캐릭터 “C”가 일종의 경계선 역할을 담당하는 것입니다.<br />

- 212 -


TinyPLC TPC9X User’s Manual<br />

실제로 RS232 통신은 바이트 단위로, 0 부터 255 까지 숫자중 아무 숫자나 주고 받을 수<br />

있습니다. 이중 한 숫자를 UNTIL 캐릭터로 정하면 됩니다.<br />

만약 255 를 UNTIL 캐릭터로 정했는데, 데이터중 255 를 송신해야될 일이 있을때는 어떻게<br />

하면 될까요? 뾰족한 방법이 없게 됩니다.<br />

그래서 나오게 된 방법이 ASCII 코드를 사용하는 방법입니다.<br />

ASCII 코드는 숫자를 0X30 부터 0X46 까지로 표현할 수 있습니다. (16 진수 표기방식)<br />

숫자 ASCII 코드 (16 진수) ASCII 코드 (10 진수)<br />

0 0X30 48<br />

1 0X31 49<br />

2 0X32 50<br />

3 0X33 51<br />

4 0X34 52<br />

5 0X35 53<br />

6 0X36 54<br />

7 0X37 55<br />

8 0X38 56<br />

9 0X39 57<br />

A 0X41 65<br />

B 0X42 66<br />

C 0X43 67<br />

D 0X44 68<br />

E 0X45 69<br />

F 0X46 70<br />

UNTIL 캐릭터로 0X0A 을 사용한다고 가정하고, 여러분이 0X02,0XFF, 0X31 라는 데이터를<br />

송신하고자 했을 때, 숫자그대로를 (바이너리모드)를 전송한다면 단 4 바이트가 필요하지만,<br />

데이터 중간에 UNTIL 캐릭터를 포함할 가능성이 있게 됩니다.<br />

BINARY mode<br />

02 FF 31 0A<br />

ASCII mode<br />

0 2 F F 3 1 LF<br />

ASCII code = 0X30 0X32 0X46 0X46 0X33 0X31 0X0A<br />

이것을 ASCII 코드로 바꾸어 전송한다면 총 7 바이트가 소요되지만, UNTIL 캐릭터 (0X0A)를<br />

포함할 가능성은 없습니다. 수신된 데이터를 다시 숫자(바이너리)로 바꾸어 사용하면 되는<br />

것입니다.<br />

- 213 -


TinyPLC TPC9X User’s Manual<br />

TinyPLC 에선 ASCII 코드와 UNTIL 캐릭터를 이용한 수신 방법을 권장하고 있습니다.<br />

Use UNTIL 바로 뒤에있는 “텍스트 박스”에는 수신종료할 UNTIL 캐릭터의 ASCII 코드를<br />

적어줍니다. 16 진수로 적어줄 때에는 앞에 0X 를 붙여야 합니다.<br />

UNTIL 케릭터<br />

최대 수신 개수<br />

Length 는 최대 수신 개수를 의미합니다. 한번에 수신할 수 있는 버퍼의 크기를 의미합니다.<br />

여기 있는 수만큼 데이터를 수신했는데도 UNTIL 캐릭터를 발견할 수 없었다면, 수신을<br />

종료하고 지금까지 수신된 데이터를 D 영역으로 이동시켜줍니다.<br />

TPC9X 시리즈에서는 최대 80 바이트까지 수신개수로 사용할 수 있습니다.<br />

Until 캐릭터 조건보다 Length 조건이 우선적으로 체크됩니다. 즉 Length 에 1 이라고<br />

써있으면, 1 바이트가 수신될때마다 수신종료된 것으로 판단합니다. (0 을 써넣어도<br />

마찬가지로 1 바이트가 수신될때마다 수신종료로 판단합니다.)<br />

두 기기간에 RS232 데이터를 수신하는데 있어서, 한바이트씩 데이터를 주고받는 경우는<br />

거의 없습니다. 어떤 의미를 지닌 하나의 패킷단위로 데이터를 주고 받게 됩니다. 패킷<br />

단위는 정하기 나름이지만, 2 바이트일수도 있고 50 바이트일수도 있습니다.<br />

PACKET<br />

05 01 00 10 0A 0B 10<br />

Start Cmd Addr Addr Data Data Stop<br />

High Low High Low<br />

이 그림은 하나의 패킷의 구성요소를 예로 든 것입니다. 스타트 코드(5)를 선두로 코멘드 (1)<br />

과 어드레스 (0x10), 데이터 (0xa0b), 스톱 (10)이 포함되어 있습니다.<br />

- 214 -


TinyPLC TPC9X User’s Manual<br />

패킷안에 어떤 위치 어떤 값을 넣을것인지는 여러분이 정하기 나름입니다. 다만 맨끝에는<br />

종료코드 (UNTIL 캐릭터)를 위치시키면 됩니다. 그러면 TinyPLC 에서 Until 캐릭터가<br />

수신될때까지 “별도의 수신버퍼”에 데이터를 저장하고 있다가, Until 캐릭터가 수신되면,<br />

정해진 D 영역에 데이터를 옮겨놓는 것입니다.<br />

D 영역의 어느 지점부터 데이터를 저장할지는 RS232 채널 1 의 경우 Y1 레지스터에<br />

기록해둡니다. (파워온시에는 0 이므로, 특별히 Y1 영역을 건드리지 않았다면 D0 영역부터<br />

수신된 데이터가 기록됨)<br />

Y 영역 READ/WRITE 기능<br />

Y0<br />

사용안함<br />

Y1 Read/ Write RS232 채널 1 수신 START 번지 (D 영역 또는 RBF)<br />

Y2 Read/ Write RS232 채널 2 수신 START 번지 (D 영역 또는 RBF)<br />

Y3 Read/ Write RS232 채널 3 수신 START 번지 (D 영역 또는 RBF)<br />

Y4<br />

사용안함<br />

수신완료시 F 릴레이에도 변화가 있습니다. 즉 채널 1 에서 수신이 완료되었다면<br />

“수신완료플레그”인 F44 릴레이가 ON 됩니다.<br />

특수레지스터 설명 별명 (Alias)<br />

F44 RS232 CH1 에서 데이터 수신완료시 ON F_RX1<br />

F45 RS232 CH2 에서 데이터 수신완료시 ON F_RX2<br />

F46 RS232 CH3 에서 데이터 수신완료시 ON F_RX3<br />

수신완료 플레그 (F44, F45, F46 릴레이)는 수신후 데이터영역으로 모든 데이터를 전송을<br />

끝낸후에 ON 이 되며, 이 플레그가 ON 인 동안에는 수신이 금지됩니다. 이 플레그는 저절로<br />

클리어되지 않으므로 유저가 레더 로직상에서 클리어해주어야 합니다.<br />

F44 가 ON 되면 P22 를 HIGH 로 만들고, RSTOUT F44 명령에 의해 OFF 가 됩니다. 이렇게<br />

클리어를 해두어야 , 이후 다시 F44 가 ON 되는 것을 확인할 수 있습니다.<br />

“수신완료 플레그”가 ON 일때 수신되는 데이터는 소실되므로, 이 플레그가 ON 되었을떄,<br />

D 영역의 데이터를 다른곳으로 이동시키거나, 처리를 끝낸뒤, 수신완료플레그를 OFF 하여<br />

다음데이터를 받을 수 있도록 해야합니다.<br />

- 215 -


TinyPLC TPC9X User’s Manual<br />

DEMO PROGRAM<br />

RX1<br />

TX1<br />

P0<br />

5V<br />

D0, D1,D2 에 송신데이터를 저장하고<br />

P0 에 연결된 스위치를 누르면,<br />

채널 1 으로 데이터를 송신합니다.<br />

TX 와 RX 를 서로 연결하여, 송신된<br />

데이터가 다시 수신되도록 합니다.<br />

PLC SETUP 은 왼쪽과 같이 한 것입니다.<br />

최대 12 바이트까지 수신할 수 있으며,<br />

UNTIL 캐릭터는 10 입니다.<br />

수신된 데이터중 UNTIL 캐릭터 10 이<br />

있으면 D6 영역부터 저장됩니다. 앞에서<br />

Y1 레지스터에 6 을 저장해 두었습니다.<br />

- 216 -


TinyPLC TPC9X User’s Manual<br />

RBF 로 수신<br />

RBF 는 RS232 를 위한 별도의 데이터 공간입니다. 바이트 단위로 억세스하며, RBF( 0 )~<br />

RBF (99)까지 사용가능합니다.<br />

이 공간에 RS232 수신데이터를 저장하도록 할 수 있습니다. 다음 특수릴레이를 조정하면<br />

수신되는 데이터를 D 영역이 아닌 RBF 로 수신하도록 해줍니다.<br />

특수레지스터<br />

F48<br />

F49<br />

F50<br />

설명<br />

RS232 CH1 의 수신장소를 RBF 로 사용<br />

RS232 CH2 의 수신장소를 RBF 로 사용<br />

RS232 CH3 의 수신장소를 RBF 로 사용<br />

이 특수릴레이를 1 로 하면, 해당 채널의 수신데이터는 RBF 로 조정됩니다.<br />

RS232 Data<br />

13 AB 3B 78<br />

1<br />

F48<br />

RBF<br />

D area<br />

RBF 는 하나밖에 없으므로, 채널 3 개를 모두 RBF 에 저장하도록 한다면, 충돌이 일어납니다.<br />

Y1 은 채널 1 의 수신시작 인덱스를 결정하는 레지스터입니다. 채널 2 와 채널 3 도 각각 , Y2,<br />

Y3 로 수신지점을 지정할 수 있습니다. 여러 개의 채널을 동시에 사용하려면 시작인덱스를<br />

다르게 하여 사용할 수 있습니다.<br />

RBF 를 사용하면 D 영역의 혼잡을 피할 수 있어서 편리합니다. 그리고 RBF 는 LADDER<br />

LOGIC 에서 다루는 데이터영역과는 별개의 영역이므로, 단지 RS232 데이터의 임시<br />

저장장소로만 사용하셔야 합니다. RBF 의 내용을 MODBUS 를 통해서 읽어오거나,<br />

모니터링으로 화면에 표시할 수 없습니다.<br />

D 영역으로의 수신과 마찬가지로, 수신이 완료되면 “수신완료 플레그”가 ON 되고, 이<br />

플레그가 ON 되어 있는동안 데이터 수신은 금지되며, 만약 수신되는 데이터가 있다면,<br />

소실되므로 주의하시기 바랍니다.<br />

만약, RS232 송수신 기능을 사용하지 않는다면, RBF 를 다른용도로 사용하는 것도<br />

가능합니다. (바이트형의 데이터를 임시로 보관하는 용도)<br />

D 영역은 워드단위로 되어 있는데, 여기에 바이트단위로 된 RS232 수신 데이터를 저장하면<br />

메모리 낭비가 됩니다. (예를 들어 , 8 바이트 저장하는 8 워드가 소요됩니다.) RBF 를<br />

사용하면, 메모리 낭비가 발생되지 않게 됩니다.<br />

- 217 -


TinyPLC TPC9X User’s Manual<br />

DEMO PROGRAM<br />

RBF 를 이용해서 데이터를 수신하고, 수신된 내용을 CLCD 에 표시하는<br />

레더프로그램입니다.<br />

이 레더를 입력하고 실행하면 LCD 화면에 ABCDEF 가 표시됩니다.<br />

TPC91A 코어모듈의 CH1 RX 와 TX 를 서로 연결해놓아야, 송신된 데이터를 다시 수신할 수<br />

있습니다.<br />

5V<br />

P0<br />

RX1 TX1<br />

- 218 -


TinyPLC TPC9X User’s Manual<br />

ASCII 코드 변환<br />

어떤 바이너리값을 ASCII 코드로 변환하고, ASCII 코드로 숫자를 다시 바이너리값으로<br />

변환하는 방법에 대해서 알아보겠습니다. (ASCII 코드 변환표는 본 매뉴얼 맨 뒤에 있는<br />

부록을 참조)<br />

Binary<br />

, , ,<br />

5 1 AB C1<br />

Send Data<br />

Convertor<br />

ASCII<br />

30 35 30 31 41 42 43 31<br />

Binary<br />

, , ,<br />

5 1 AB C1<br />

Receive Data<br />

Convertor<br />

위의 그림을 참조하시면, 왜 ASCII 변환이 필요한지 아실 것입니다. 송신측에서는 원래<br />

데이터를 ASCII 포맷으로 바꾸어 전송하고, 수신측에서는 이 데이터를 다시 원래 값으로<br />

변환하는 과정이 필요하기 때문입니다.<br />

바이너리값을 ASCII 코드로 바꾸는 방법은 “포맷화된 송신”에서 설명한 HP 명령을 사용해서<br />

구현할 수 있습니다.<br />

FUNC 3, PUTSTR 1, Hp(D0, 4,1)<br />

이렇게 하면 D0 영역에 들어있는 숫자(바이너리값)을 ASCII 코드 4 자리로 변경해서 송신 할<br />

수 있습니다.<br />

반대로, ASCII 코드를 숫자(바이너리값)으로 바꾸는 것은 Gehexval 라는 명령을 사용합니다.<br />

이 명령에 2 개의 ASCII 코드를 인수로 넘겨주면, 1 바이트의 바이너리 값을 반환하여 줍니다.<br />

이 명령은 바이트단위로만 변환할 수 있습니다. 워드를 변환하려면 연속해서 2 번<br />

사용해주어야 합니다. 또한 이 명령에서 실수는 사용할 수 없습니다.<br />

- 219 -


GETHEXVAL<br />

USAGE : 저장영역 = GETHEXVAL( 상위 ASCII 코드, 하위 ASCII 코드)<br />

TinyPLC TPC9X User’s Manual<br />

레더도<br />

FUNC 3, D0 = GETHEXVAL(D1,D2)<br />

D1, D2 영역에 있는 ASCII 코드를 가지고<br />

바이너리값을 만들어, D0 에 저장합니다.<br />

결과<br />

D1 에 ASCII 코드 0X38 (8 을<br />

의미함), D2 에 0X39 (9 를<br />

의미)가 있다고 가정하면,<br />

D0 에는 0X89 가 저장됩니다.<br />

이 프로그램을 실행시키면 0X37, 0X31 이 71 로 바뀌어 D10 영역에 저장됩니다.<br />

- 220 -


TinyPLC TPC9X User’s Manual<br />

RS232 송수신 회로<br />

RS232 송수신회로에 대해서 살펴보도록 하겠습니다. RS232 는 +12V 에서 –12V 로 데이터를<br />

송신 또는 수신합니다. TinyPLC 코어 모듈에 있는 TX/RX 단자들은 0V 에서 5V 로 데이터를<br />

송신 또는 수신합니다. (5V 만 사용하는 전기 레벨을 TTL 레벨이라고 부릅니다. 5V 레벨로<br />

RS232 포멧을 사용하는 경우 편의상 TTL232 라고 부르겠습니다.)<br />

SOUT<br />

SIN<br />

ATN<br />

VSS<br />

SS_P0<br />

(Input_only)SCK_P1<br />

MOSI_P2<br />

MISO_P3<br />

P4<br />

PWM0_P5<br />

PWM1_P6<br />

PWM2_P7<br />

(CUNET)SCL_P8<br />

(CUNET)SDA_P9<br />

P10<br />

P11<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

13<br />

14<br />

15<br />

16<br />

17<br />

18<br />

19<br />

20<br />

21<br />

22<br />

23<br />

24<br />

25<br />

26<br />

27<br />

28<br />

29<br />

30<br />

31<br />

32<br />

VDD<br />

VSS<br />

RES<br />

N/C<br />

P16<br />

P17<br />

P18<br />

P19_PWM3<br />

P20_PWM4_INT0<br />

P21_PWM5_INT1<br />

P22_INT2<br />

P23_INT3<br />

P15_HCNT1<br />

P14_HCNT0<br />

P13<br />

P12<br />

TX1<br />

RX1<br />

AVDD<br />

N/C<br />

ADC0_P24<br />

ADC1_P25<br />

ADC2_P26<br />

ADC3_P27<br />

P47<br />

P46<br />

P45<br />

P44<br />

P43<br />

P42<br />

P41<br />

P40<br />

33<br />

34<br />

35<br />

36<br />

37<br />

38<br />

39<br />

40<br />

41<br />

42<br />

43<br />

44<br />

45<br />

46<br />

47<br />

48<br />

49<br />

50<br />

51<br />

52<br />

53<br />

54<br />

55<br />

56<br />

57<br />

58<br />

59<br />

60<br />

61<br />

62<br />

63<br />

64<br />

TTLTX1<br />

TTLRX1<br />

AVREF<br />

P48<br />

P31_ADC7<br />

P30_ADC6<br />

P29_ADC5<br />

P28_ADC4<br />

P32<br />

P33<br />

P34<br />

P35<br />

P36<br />

P37<br />

P38<br />

P39<br />

TPC91A<br />

Input<br />

Only<br />

Sout<br />

Sin<br />

Atn<br />

Vss<br />

P0<br />

SCK / P1<br />

MOSI / P2<br />

MISO / P3<br />

P4<br />

PWM0 / P5<br />

PWM1 / P6<br />

PWM2 / P7<br />

RX2 / P8<br />

TX2 / P9<br />

P10<br />

PWM6 / P11<br />

PWM7 / P12<br />

PWM8 / P13<br />

P14<br />

P15<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

13<br />

14<br />

15<br />

16<br />

17<br />

18<br />

19<br />

20<br />

21<br />

22<br />

23<br />

24<br />

25<br />

26<br />

27<br />

28<br />

29<br />

30<br />

31<br />

32<br />

33<br />

34<br />

35<br />

36<br />

37<br />

38<br />

39<br />

40<br />

Vdd<br />

Vss<br />

RES<br />

VBB<br />

P16 / AD0<br />

P17 / AD1<br />

P18 / AD2<br />

P19 / AD3<br />

P20 / AD4<br />

P21 / AD5<br />

P22 / AD6<br />

P23 / AD7<br />

P24<br />

P25<br />

P26<br />

P27 / PWM3<br />

P28 / PWM4/<br />

INT0<br />

P29 / PWM5/ INT 1<br />

P30 / INT2<br />

P31 / INT3<br />

TPC93A<br />

Vdd<br />

Vdd<br />

N/C<br />

N/C<br />

P64<br />

P65<br />

P66<br />

P67<br />

P68<br />

P69<br />

P70<br />

P71<br />

P80<br />

P81<br />

81<br />

82<br />

83<br />

84<br />

85<br />

86<br />

87<br />

88<br />

89<br />

90<br />

91<br />

92<br />

93<br />

94<br />

TXE<br />

RXE<br />

AVdd<br />

Vdd<br />

AD8 / P32<br />

AD9 / P33<br />

AD10 / P34<br />

AD11 / P35<br />

AD12 / P36<br />

AD13 / P37<br />

AD14 / P38<br />

AD15 / P39<br />

HCNT1 / P47<br />

HCNT0 / P46<br />

P45<br />

P44<br />

TX1 / P43<br />

RX1 / P42<br />

SDA / P41<br />

SCL / P40<br />

41<br />

42<br />

43<br />

44<br />

45<br />

46<br />

47<br />

48<br />

49<br />

50<br />

51<br />

52<br />

53<br />

54<br />

55<br />

56<br />

57<br />

58<br />

59<br />

60<br />

Vss<br />

Vss<br />

N/C<br />

N/C<br />

P72<br />

P73<br />

P74<br />

P75<br />

P76<br />

P77<br />

P78<br />

P79<br />

P82<br />

N/C<br />

95<br />

96<br />

97<br />

98<br />

99<br />

100<br />

101<br />

102<br />

103<br />

104<br />

105<br />

106<br />

107<br />

108<br />

61<br />

62<br />

63<br />

64<br />

65<br />

66<br />

67<br />

68<br />

69<br />

70<br />

71<br />

72<br />

73<br />

74<br />

75<br />

76<br />

77<br />

78<br />

79<br />

80<br />

TtlTXE<br />

TtlRXE<br />

AVref<br />

Vss<br />

P48<br />

P49<br />

P50<br />

P51 / PWM9<br />

P52 / PWM10<br />

P53 / PWM11<br />

P54<br />

P55<br />

P63<br />

P62<br />

P61<br />

P60<br />

P59<br />

P58<br />

P57 / TX3<br />

P56 / RX3<br />

표시한 부분의 핀은 모두 5V 레벨의 신호(TTL232) 로 송수신을 합니다. TTL232 신호를 +12V<br />

/ -12V 의 RS232 레벨로 변경하기 위해서는 “레벨 변환회로”가 필요합니다.<br />

- 221 -


다음은 MAX232 칩을 사용하는 TTL232 to RS232 변환회로입니다.<br />

TinyPLC TPC9X User’s Manual<br />

+12V<br />

-12V<br />

+5V<br />

GND<br />

MAX232<br />

PC<br />

RS232C<br />

Port<br />

2<br />

3<br />

5<br />

RD<br />

TD<br />

0.1uF<br />

0.1uF<br />

0.1uF<br />

0.1uF<br />

5V<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

16<br />

15<br />

14<br />

13<br />

12<br />

11<br />

10<br />

9<br />

5V<br />

0.1uF<br />

TinyPLC RX<br />

TinyPLC TX<br />

- 222 -


TPC91A 에서 RS232 사용<br />

TinyPLC TPC9X User’s Manual<br />

TPC91A 에는 RS232 레벨 (+12V / -12V)을 통신포트가 내장되어 있습니다.<br />

이 포트를 사용하면, 별도의 회로없이<br />

RS232신호선과 직접 연결할 수 있습니다.<br />

SOUT<br />

SIN<br />

ATN<br />

VSS<br />

SS_P0<br />

(Input_only)SCK_P1<br />

MOSI_P2<br />

MISO_P3<br />

P4<br />

PWM0_P5<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

PWM1_P6 11<br />

PWM2_P7 12<br />

(CUNET)SCL_P8 13<br />

(CUNET)SDA_P9 14<br />

P10 15<br />

P11 16<br />

17 VDD<br />

18 VSS<br />

19 RES<br />

20 N/C<br />

21 P16<br />

22 P17<br />

23 P18<br />

24 P19_PWM3<br />

25<br />

26<br />

P20_PWM4_INT0<br />

P21_PWM5_INT1<br />

27 P22_INT2<br />

28 P23_INT3<br />

29 P15_HCNT1<br />

30 P14_HCNT0<br />

31 P13<br />

32 P12<br />

TX1<br />

RX1<br />

AVDD<br />

N/C<br />

ADC0_P24<br />

ADC1_P25<br />

ADC2_P26<br />

ADC3_P27<br />

P47<br />

P46<br />

P45<br />

P44<br />

P43<br />

P42<br />

P41<br />

P40<br />

33<br />

34<br />

35<br />

36<br />

37<br />

38<br />

39<br />

40<br />

41<br />

42<br />

43<br />

44<br />

45<br />

46<br />

47<br />

48<br />

49<br />

50<br />

51<br />

52<br />

53<br />

54<br />

55<br />

56<br />

57<br />

58<br />

59<br />

60<br />

61<br />

62<br />

63<br />

64<br />

TTLTX1<br />

TTLRX1<br />

AVREF<br />

P48<br />

P31_ADC7<br />

P30_ADC6<br />

P29_ADC5<br />

P28_ADC4<br />

P32<br />

P33<br />

P34<br />

P35<br />

P36<br />

P37<br />

P38<br />

P39<br />

TPC91A<br />

TPC91A 코어모듈 내부에 MAX232 변환회로가 내장되어 있으며, RS232 채널 1 에 할당되어<br />

있습니다. 만약 외부에서 +12V/ -12V 의 RS232 신호선을 TPC91A 의 채널 1 과 연결하려면,<br />

별도의 변환회로없이 곧바로 연결하여 사용할 수 있습니다.<br />

- 223 -


TPC93A 에서 RS232 사용<br />

TinyPLC TPC9X User’s Manual<br />

TPC93A 에도 RS232 레벨 (+12V / -12V)변환 회로가 내장되어 있습니다만, 채널 1 에<br />

연결되어 있지 않습니다. TPC93A 에는 TTL232 채널 1,2,3 이 있기 때문에, 이 중 하나를<br />

RS232 변환회로에 연결하여 사용할 수 있도록 해 놓았습니다.<br />

+12V/ -12V 의 RS232 통신 포트<br />

TTL232 연결포트<br />

Input<br />

Only<br />

Sout<br />

Sin<br />

Atn<br />

Vss<br />

P0<br />

SCK / P1<br />

MOSI / P2<br />

MISO / P3<br />

P4<br />

PWM0 / P5<br />

PWM1 / P6<br />

PWM2 / P7<br />

RX2 / P8<br />

TX2 / P9<br />

P10<br />

PWM6 / P11<br />

PWM7 / P12<br />

PWM8 / P13<br />

P14<br />

P15<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

13<br />

14<br />

15<br />

16<br />

17<br />

18<br />

19<br />

20<br />

21<br />

22<br />

23<br />

24<br />

25<br />

26<br />

27<br />

28<br />

29<br />

30<br />

31<br />

32<br />

33<br />

34<br />

35<br />

36<br />

37<br />

38<br />

39<br />

40<br />

Vdd<br />

Vss<br />

RES<br />

VBB<br />

P16 / AD0<br />

P17 / AD1<br />

P18 / AD2<br />

P19 / AD3<br />

P20 / AD4<br />

P21 / AD5<br />

P22 / AD6<br />

P23 / AD7<br />

P24<br />

P25<br />

P26<br />

P27 / PWM3<br />

P28 / PWM4/<br />

INT0<br />

P29 / PWM5/ INT 1<br />

P30 / INT2<br />

P31 / INT3<br />

TPC93A<br />

Vdd<br />

Vdd<br />

N/C<br />

N/C<br />

P64<br />

P65<br />

P66<br />

P67<br />

P68<br />

P69<br />

P70<br />

P71<br />

P80<br />

P81<br />

Vss<br />

Vss<br />

N/C<br />

N/C<br />

P72<br />

P73<br />

P74<br />

P75<br />

P76<br />

P77<br />

P78<br />

P79<br />

P82<br />

N/C<br />

95<br />

96<br />

97<br />

98<br />

99<br />

100<br />

101<br />

102<br />

103<br />

104<br />

105<br />

106<br />

107<br />

108<br />

81<br />

82<br />

83<br />

84<br />

85<br />

86<br />

87<br />

88<br />

89<br />

90<br />

91<br />

92<br />

93<br />

94<br />

TXE<br />

RXE<br />

AVdd<br />

Vdd<br />

AD8 / P32<br />

AD9 / P33<br />

AD10 / P34<br />

AD11 / P35<br />

AD12 / P36<br />

AD13 / P37<br />

AD14 / P38<br />

AD15 / P39<br />

HCNT1 / P47<br />

HCNT0 / P46<br />

P45<br />

P44<br />

TX1 / P43<br />

RX1 / P42<br />

SDA / P41<br />

SCL / P40<br />

41<br />

42<br />

43<br />

44<br />

45<br />

46<br />

47<br />

48<br />

49<br />

50<br />

51<br />

52<br />

53<br />

54<br />

55<br />

56<br />

57<br />

58<br />

59<br />

60<br />

61<br />

62<br />

63<br />

64<br />

65<br />

66<br />

67<br />

68<br />

69<br />

70<br />

71<br />

72<br />

73<br />

74<br />

75<br />

76<br />

77<br />

78<br />

79<br />

80<br />

TtlTXE<br />

TtlRXE<br />

AVref<br />

Vss<br />

P48<br />

P49<br />

P50<br />

P51 / PWM9<br />

P52 / PWM10<br />

P53 / PWM11<br />

P54<br />

P55<br />

P63<br />

P62<br />

P61<br />

P60<br />

P59<br />

P58<br />

P57 / TX3<br />

P56 / RX3<br />

3 개 채널중 하나의 TX 선을 TTLTXE 에 연결하고, RX 선을 TTLRXE 에 연결하면, TXE /<br />

RXE 에서 +12/ -12V 의 RS232 신호를 연결 사용할 수 있습니다.<br />

다음은 채널 3 을 연결한 경우입니다.<br />

Input<br />

Only<br />

Sout 1<br />

Sin 2<br />

Atn 3<br />

Vss 4<br />

P0 5<br />

SCK / P1 6<br />

MOSI / P2 7<br />

MISO / P3 8<br />

P4 9<br />

PWM0 / P5 10<br />

PWM1 / P6 11<br />

PWM2 / P7 12<br />

RX2 / P8 13<br />

TX2 / P9 14<br />

P10 15<br />

PWM6 / P11 16<br />

PWM7 / P12 17<br />

PWM8 / P13 18<br />

P14 19<br />

P15 20<br />

21<br />

22<br />

23<br />

24<br />

25<br />

26<br />

27<br />

28<br />

29<br />

30<br />

31<br />

32<br />

33<br />

34<br />

35<br />

36<br />

37<br />

38<br />

39<br />

40<br />

Vdd<br />

Vss<br />

RES<br />

VBB<br />

P16 / AD0<br />

P17 / AD1<br />

P18 / AD2<br />

P19 / AD3<br />

P20 / AD4<br />

P21 / AD5<br />

P22 / AD6<br />

P23 / AD7<br />

P24<br />

P25<br />

P26<br />

P27 / PWM3<br />

P28 / PWM4/<br />

INT0<br />

P29 / PWM5/ INT 1<br />

P30 / INT2<br />

P31 / INT3<br />

TPC93A<br />

Vdd<br />

Vdd<br />

N/C<br />

N/C<br />

P64<br />

P65<br />

P66<br />

P67<br />

P68<br />

P69<br />

P70<br />

P71<br />

P80<br />

P81<br />

Vss<br />

Vss<br />

N/C<br />

N/C<br />

P72<br />

P73<br />

P74<br />

P75<br />

P76<br />

P77<br />

P78<br />

P79<br />

P82<br />

N/C<br />

81<br />

82<br />

83<br />

84<br />

85<br />

86<br />

87<br />

88<br />

89<br />

90<br />

91<br />

92<br />

93<br />

94<br />

95<br />

96<br />

97<br />

98<br />

99<br />

100<br />

101<br />

102<br />

103<br />

104<br />

105<br />

106<br />

107<br />

108<br />

TXE<br />

RXE<br />

AVdd<br />

Vdd<br />

AD8 / P32<br />

AD9 / P33<br />

AD10 / P34<br />

AD11 / P35<br />

AD12 / P36<br />

AD13 / P37<br />

AD14 / P38<br />

AD15 / P39<br />

HCNT1 / P47<br />

HCNT0 / P46<br />

P45<br />

P44<br />

TX1 / P43<br />

RX1 / P42<br />

SDA / P41<br />

SCL / P40<br />

41<br />

42<br />

43<br />

44<br />

45<br />

46<br />

47<br />

48<br />

49<br />

50<br />

51<br />

52<br />

53<br />

54<br />

55<br />

56<br />

57<br />

58<br />

59<br />

60<br />

61 TtlTXE<br />

62 TtlRXE<br />

63 AVref<br />

64 Vss<br />

65 P48<br />

66 P49<br />

67 P50<br />

68 P51 / PWM9<br />

69 P52 / PWM10<br />

70 P53 / PWM11<br />

71 P54<br />

72 P55<br />

73 P63<br />

74 P62<br />

75 P61<br />

76 P60<br />

77 P59<br />

78 P58<br />

79 P57 / TX3<br />

80 P56 / RX3<br />

- 224 -


TinyPLC TPC9X User’s Manual<br />

RS485 사용<br />

RS485 는 RS232 에 비교해서 송신거리가 길고, 1:N 통신이 가능한 방식입니다. 하나의<br />

마스터에 여러 개의 TinyPLC 를 연결해서, 통신하고자할 때에는 RS485 변환칩으로 회로를<br />

구성해주야 합니다.<br />

RS485 는 단 2 가닥의 통신선을 사용하기 때문에 어느 한순간, 송신 또는 수신만 할 수<br />

있습니다. 즉 “반이중”통신방식입니다.<br />

또한, RS485 통신선에는 GND 선이 없기 때문에, 외부로부터의 노이즈가 메인기판의<br />

GND 선으로 직접 유입되는 것을 막을 수 있습니다.<br />

TTL232 신호를 RS485 신호변환로 변환하기 위해서 다음과 같은 회로를 사용합니다.<br />

TPC91A<br />

SN75176B<br />

560<br />

TTLRX<br />

TTLTX<br />

P48<br />

R<br />

RE<br />

DE<br />

D<br />

B<br />

A<br />

485-<br />

485+<br />

120<br />

560<br />

RS485 회로에는 “송신허가”제어선이 필요합니다. RS485 신호선은 여러 개의 디바이스가<br />

공유하고 있습니다. 이중 하나의 디바이스만 송신상태이고 나머지는 수신상태입니다.<br />

예를들어 PC 에서 SlaveAdr “01” 디바이스에게 Read 명령을 내렸을 경우, Slave Adr “01”<br />

디바이스에서는 읽어온 값을 PC 로 보내야 합니다. 이를 위해서는 TinyPLC 측에서<br />

송신허가를 해서 “RS485 신호선”을 점유한뒤, 데이터를 송신합니다.<br />

PC<br />

TinyPLC<br />

TinyPLC<br />

TinyPLC<br />

Slave Adr "01" Slave Adr "02" Slave Adr "03"<br />

TPC91A 의 P48 핀은 채널 1 을 위한 송신허가 신호출력 단자입니다. P48 을 485 변환칩의<br />

송신허가 (위에서는 RE/DE 를 쇼트해놓은 부분)에 연결해 줍니다.<br />

- 225 -


TinyPLC TPC9X User’s Manual<br />

TinyPLC 의 송신허가핀은 송신할때에만 자동적으로 HIGH 가 되기 때문에 유저가 이 부분에<br />

대해서는 특별히 신경쓸일이 없습니다.<br />

TPC93A 의 경우 3 개의 송신허가 핀이 있습니다.<br />

핀번호 이름 기능<br />

P80 485TE1 TTL232 채널 1 의 송신허가<br />

P81 485TE2 TTL232 채널 2 의 송신허가<br />

P82 485TE3 TTL232 채널 3 의 송신허가<br />

이 송신 허가 핀들은 평상시 I/O 포트로 사용할 수 없습니다.<br />

SN75176B<br />

R<br />

RE<br />

DE<br />

D<br />

120<br />

B<br />

A<br />

SN75176B<br />

560<br />

560<br />

1: N 으로 RS485 를 사용하는 경우에는<br />

왼쪽 회로를 참고하여 종단저항<br />

(120 오옴)을 연결하시기 바랍니다.<br />

다음은 485TE 단자들의 출력파형을<br />

그림으로 표현한 것입니다. (TTLTX 핀이<br />

STOP 비트를 포함한 모든 출력을<br />

끝낼때까지 HIGH 를 유지합니다.)<br />

R<br />

RE<br />

DE<br />

D<br />

B<br />

A<br />

TTLTX<br />

SN75176B<br />

R<br />

RE<br />

DE<br />

D<br />

B<br />

A<br />

120<br />

485TE<br />

- 226 -


TinyPLC TPC9X User’s Manual<br />

제 15 장<br />

기타기능<br />

- 227 -


TinyPLC TPC9X User’s Manual<br />

기타 FUNC 형 명령어<br />

FUNC 형 명령어로 실수연산, LCD 표시, RS232 통신이외에도 “반복실행, 테이블변환등”을<br />

할 수 있습니다.<br />

FOR<br />

USAGE : FOR 레지스터 = 초기치 TO 종료치 : 실행문 : NEXT<br />

레더도<br />

F2<br />

FUNC 3, FOR BREG1 = 0 TO 10 : _D(BREG1) = 0 : NEXT<br />

D0 부터 D10 까지를 클리어합니다.<br />

FOR 와 NEXT 사이에 있는 명령어를 정해진 숫자만큼 반복수행합니다. 위의 예처럼<br />

데이터영역의 일정부분을 클리어할 때 편리하게 사용할 수 있습니다.<br />

이 명령어를 사용할 때 주의할 점은 반복횟수를 너무 크게하거나, FOR 명령어가<br />

자주실행된다면 FUNC 처리 스캔타임이 필요이상 길어질 수 있습니다.<br />

따라서 본 명령어는 F2 릴레이를 사용한 초기화 작업이나, 작은 수의 반복실행에만<br />

사용하시기 바랍니다.<br />

FUNC 처리기의 실행주기가 느려지면, 레더의 다른 부분에 있는 FUNC 형 명령어의<br />

처리주기도 늦어집니다. 따라서 시스템의 퍼포먼스에 영향을 주게됩니다.<br />

- 228 -


TinyPLC TPC9X User’s Manual<br />

레지스터<br />

“레지스터”란 데이터를 저장할 수 있는 기억장소를 말합니다. TPC9X 시리즈는 다음과 같은<br />

레지스터를 가지고 있습니다.<br />

레지스터명 크기 설명<br />

BREG1 1 BYTE 0~255 까지 저장가능<br />

BREG2 1 BYTE 0~255 까지 저장가능<br />

BREG3 1 BYTE 0~255 까지 저장가능<br />

BREG4 1 BYTE 0~255 까지 저장가능<br />

WREG1 2 BYTE 0~65535 까지 저장가능<br />

WREG2 2 BYTE 0~65535 까지 저장가능<br />

WREG3 2 BYTE 0~65535 까지 저장가능<br />

WREG4 2 BYTE 0~65535 까지 저장가능<br />

LREG1 4 BYTE -2147483648 ~ +2147483647 까지 저장가능<br />

LREG2 4 BYTE -2147483648 ~ +2147483647 까지 저장가능<br />

LREG3 4 BYTE -2147483648 ~ +2147483647 까지 저장가능<br />

LREG4 4 BYTE -2147483648 ~ +2147483647 까지 저장가능<br />

SREG1 4 BYTE 실수저장가능<br />

SREG2 4 BYTE 실수저장가능<br />

SREG3 4 BYTE 실수저장가능<br />

SREG4 4 BYTE 실수저장가능<br />

RS232 수신 및 송신 임시버퍼로 사용할 수 있는 기억공간이 있습니다. “레지스터<br />

배열”이라고 부릅니다.”RS232 에서 사용하지 않을 때, 데이터 저장용도로 사용할 수<br />

있습니다.<br />

레지스터 배열명 각 요소의 크기 설명<br />

TBF<br />

BYTE<br />

TBF(0) to TBF(49) 까지 사용가능<br />

(0~255 까지 저장가능)<br />

RBF<br />

BYTE<br />

(0~255 까지 저장가능)<br />

TBF(0) to TBF(99) 까지 사용가능<br />

- 229 -


TinyPLC TPC9X User’s Manual<br />

테이블 변환<br />

테이블 변환이란 어떤 수를 다른 수로 바꾸는 것을 말합니다. 다음 그림처럼 왼쪽의 숫자를<br />

오른쪽의 숫자로 변경하는 상황입니다.<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

31<br />

32<br />

35<br />

37<br />

39<br />

40<br />

44<br />

45<br />

0 을 31 로 바꾸고, 2 는 35 로 바꾸는 테이블입니다. 일정한 규칙이 없는 이러한 변환은 “온도<br />

변환 테이블” 혹은 “키패드 변환 테이블” 등에서 사용됩니다.<br />

만약, 테이블 변환이 없다면 일일이 IF 문등으로 변환해야합니다. 만약 100 개의 테이블이<br />

있다면 어떻게 될까요? 매우 긴 레더를 입력해야만 합니다.<br />

이런 방식으로는 원활한 테이블 변환을 할 수 없을 뿐더러 필요없는 레더를 실행해야만<br />

합니다.<br />

- 230 -


TinyPLC TPC9X User’s Manual<br />

TPCworks 의 PLC SETUP 에서 “CONFIG SCRIPT” 화면에서, 다음과 같은 테이블을<br />

입력하세요.<br />

CONST INTEGER TABLE1 = (31, 32, 35, 37, 39, 40, 44, 45)<br />

텍스트 박스안에 위와 같이 SCRIPT 명령형태로 테이블을 입력합니다. 그리고 다음과 같이<br />

레더를 작성한다면, 간편하게 테이블 변환을 할 수 있습니다.<br />

- 231 -


TinyPLC TPC9X User’s Manual<br />

맨앞에 작성해준 “CONST INTEGER”는 테이블 정의 명령입니다. 뒤에 있는 TABLE1 이<br />

테이블의 이름입니다. 이 테이블의 이름은 유저가 임의대로 작성할 수 있습니다. 단,<br />

영문자로 시작하는 16 자 이내의 문자로 해주십시오. 중간에 공백이 없어야 합니다.<br />

Define Table Command<br />

TABLE Name<br />

0 1 2 3 4 5 6 7<br />

CONST INTEGER TABLE1 = (31, 32, 35, 37, 39, 40, 44, 45)<br />

뒤에 테이블 숫자를 괄호안에 코머로 구분해서 차례대로 써주면 됩니다. 앞에서부터 0, 1, 2<br />

…순서대로 INDEX 가 할당됩니다.<br />

D = 테이블명 (인덱스)<br />

USAGE : 결과를 저장할 곳 = 테이블명 (인덱스)<br />

레더도<br />

F2<br />

FUNC 3, D0 = TABLE1(D1)<br />

D1 값 (인덱스)에 해당하는 테이블변환 수치를 찾아 D0 에 저장합니다.<br />

인덱스에는 숫자를 바로 사용할 수도 있습니다.<br />

F2<br />

FUNC 3, D0 = TABLE1(3)<br />

- 232 -


TinyPLC TPC9X User’s Manual<br />

테이블 정의 명령<br />

앞에서 CONST INTEGER 라는 테이블 정의 명령을 사용하였습니다. 이 명령은 테이블의<br />

구성요소가 0 부터 65535 사이의 값일 경우에 사용하는 명령어입니다. 이 명령을 사용하면<br />

각각의 구성요소가 16 비트 (2 바이트) 크기를 갖게 됩니다.<br />

Define Table Command<br />

TABLE Name<br />

0 1 2 3 4 5 6 7<br />

CONST INTEGER TABLE1 = (31, 32, 35, 37, 39, 40, 44, 45)<br />

이외에도 다른 형태로 테이블을 정의하는 명령어가 있습니다.<br />

명령어 구성요소 바이트수 예<br />

CONST BYTE 1 바이트 (0~255) CONST BYTE ABC = (0, 3, 5, 200, 34, 88)<br />

CONST INTEGER 2 바이트 (0~65535) CONST INTEGER KDT = (0, 600, 8000, 340, 129)<br />

CONST LONG 4 바이트 (-2147483648 ~ CONST LONG TT1 = (0, -123, 930293, 384834, 394)<br />

+2147483647 )<br />

CONST SINGLE 실수 CONST SINGLE AT1 = (3.14, 234.123, -9.34)<br />

음수를 저장할 수 있는 테이블 정의 명령어는 CONST LONG 과 CONST SINGLE 입니다.<br />

나머지는 양수만 저장할 수 있습니다.<br />

- 233 -


TinyPLC TPC9X User’s Manual<br />

DEMO PROGRAM<br />

앞에서 4 X 4 키패드 와 키패드<br />

콘트롤러를 사용해서 키스캔코드를<br />

읽어오는 예제를 소개했습니다.<br />

키스캔코드값을 실제 의미있는 숫자로<br />

바꾸는 테이블 변환을 해보도록<br />

하겠습니다.<br />

오른쪽에 있는 사진은 본 DEMO<br />

PROGRAM 에서 사용할 키패드<br />

사진입니다.<br />

이 키패드를 다음 회로를 보고 TinyPLC TPC4X 와 연결하십시오.<br />

KEY PAD<br />

CONTROLLER<br />

P0<br />

P1<br />

P2<br />

P3<br />

TPC9X<br />

P0<br />

P1<br />

P2<br />

P3<br />

1 2 3<br />

4 5 6<br />

7 8 9<br />

0<br />

다음 레더프로그램을 입력한 뒤 실행시켜 보세요. 키입력시 D0 영역에 키 스캔코드가<br />

저장됩니다.<br />

- 234 -


TinyPLC TPC9X User’s Manual<br />

키 스캔코드는 아래 그림(왼쪽)과 같습니다. 그리고 테이블 변환을 통해 바뀌게 될 코드는<br />

오른쪽 그림과 같습니다.<br />

SCAN CODE<br />

2<br />

1<br />

KEY TABLE<br />

10 18 26<br />

3 11 19 27<br />

4 5 6<br />

4<br />

5<br />

12 20<br />

13 21<br />

28<br />

29<br />

7<br />

2<br />

3<br />

8 9<br />

10 11<br />

이전 2 3 4 5 10 11 12 13 18 19 20 21 26 27 28 29<br />

이후 1 4 7 10 2 5 8 0 3 6 9 11 12 13 14 15<br />

테이블은 아래와 같이 입력하세요. (안쓰는 영역은 99 로 입력하였습니다.)<br />

0<br />

12<br />

13<br />

14<br />

15<br />

레더도는 아래와 같이 입력합니다. 키를 입력하면 D0 에 테이블변환에 의한 코드가<br />

저장됩니다.<br />

- 235 -


TinyPLC TPC9X User’s Manual<br />

기타 명령어<br />

기타 FUNC 형 명령어입니다.<br />

COUNTRESET<br />

USAGE : COUNTRESET 채널<br />

레더도<br />

F2 FUNC 3, COUNTRESET 0<br />

고속카운터 0 번 채널을 0 으로 만듭니다..<br />

- 236 -


고속카운터 자동 비교(COMPARE)<br />

TinyPLC TPC9X User’s Manual<br />

고속카운터로 들어오는 펄스수를 자동적으로 체크해서, 정해진 숫자가 되면, 특정포트의<br />

상태를 바꿔주는 명령어입니다.<br />

고속 카운터는 프로그램에서 일일이 간섭하지 않아도, 자동적으로 외부펄스를<br />

카운트업해주는 기능입니다. 만약 펄스수가 100 이 되었을 때, P0 포트를 LOW 로 만들고<br />

싶다면 어떻게 하시겠습니까? 이를 위해서는 수시로 고속카운터 펄스수를 체크해주어야<br />

합니다.<br />

만약, 체크하는 부분에서 정확한 지점을 검출해내지 못한다면, 원하는 펄스수를 지나친<br />

지점에서 실제동작이 일어나는 오류가 발생하게 됩니다.<br />

이를 위해서 COMPARE 명령을 지원합니다.COMPARE 명령을 사용하면,자동적으로<br />

고속카운터입력 값을 체크하고 있다가, 정해진 값이 되면, 어떤 포트를 HIGH 나 LOW 로<br />

만들 수 있습니다.<br />

COMPARE<br />

USAGE : COMPARE channel, target#, port, targetstate<br />

Channel : 카운터 채널<br />

Target# : 목표치 펄스갯수<br />

Port : 출력포트 (입력전용포트 사용금지)<br />

Targetstate : (목표상태), 바꾸고자 하는 출력포트의 상태<br />

이 명령은 사전상태<br />

정의용이므로, 반드시 PLC<br />

SETUP 의 CONFIG<br />

SCRIPT 상에 작성해<br />

주어야합니다. 래더<br />

로직안의 FUNC 형 명령어로<br />

사용할 수 없습니다.<br />

FREEPIN 은 0 번포트를<br />

COMPARE 에서 제어할 수<br />

있도록 선언해주는<br />

명령어입니다.<br />

- 237 -


TinyPLC TPC9X User’s Manual<br />

이 기능을 사용하기 위해서는 반드시 HIGH COUNT 가 사용가능상태가 되어 있어야합니다.<br />

그리고, 채널에 따라 비교 할 수 있는 범위에 제한이 있습니다.<br />

채널<br />

비교범위<br />

COUNT 채널 0 0~255<br />

COUNT 채널 1 0 ~65535<br />

고속카운터 채널 0 을 사용하기 위해서는 2 Hi COUNT 모드로 되어 있어야 합니다.<br />

이 동작을 그림으로 표현하면 다음과 같습니다. 고속카운터로 펄스가 들어오고, TinyPLC<br />

내부에서 자동적으로 정해진 숫자와 COMPARE(항상비교)를 합니다. 정해진숫자가 되면,<br />

특정포트로 HIGH 를 출력합니다.<br />

COUNT<br />

COMPARE<br />

- 238 -


TinyPLC TPC9X User’s Manual<br />

제 16 장<br />

TPCworks<br />

사용법<br />

*본 메뉴얼에 표시된 화면의 일부구성이 실제 배포된 버전과 차이가 있을 수 있습니다.<br />

- 239 -


TinyPLC TPC9X User’s Manual<br />

TPCworks 의 개요<br />

TPC9X 를 위한 통합개발환경 소프트웨어 입니다. WINDOW 98SE, XP, 2000 운영체계와<br />

RS232 통신포트를 갖춘 PC 에서 사용가능합니다. (RS232 포트가 없는 노트북의 경우에는<br />

USB-RS232 변환기를 사용) 다음은 TPCworks 의 동작화면입니다.<br />

- 240 -


TinyPLC TPC9X User’s Manual<br />

TPCworks 설치<br />

인터넷 홈페이지 www.comfile.co.kr에서 다운로드 받아서 설치할 수 있습니다.<br />

TPCWORKS는 사용상에 제한이 없는 프리웨어입니다.<br />

1. www.comfile.co.kr에서 다운로드 메뉴에서 TinyPLC을 선택하신 뒤, TPCworks<br />

다운로드를 클릭.<br />

- 241 -


TinyPLC TPC9X User’s Manual<br />

4. 다운로드가 진행중임을 알리는 바가<br />

표시됩니다.<br />

5. 다운로드가 다 끝나면 설치가<br />

시작됩니다. Next 를 누르면 다음단계로<br />

진행합니다.<br />

6. 설치할 폴더를 물어보는 다이얼로그<br />

박스가 표시됩니다. 기본 상태는 Program<br />

Files 밑에 ComfileTools 라는 폴더 안에<br />

저장되도록 되어 있습니다. 유저가 원하는<br />

다른 폴더로 변경하는 것도 가능합니다.<br />

7. 시작(Start)메뉴에서 어떤 이름의 폴더를<br />

사용할 것인지를 선택하는 다이얼로그<br />

박스입니다. 이 상태에서는 그냥 Next 를<br />

누르십시오.<br />

- 242 -


TinyPLC TPC9X User’s Manual<br />

8. 바탕화면에 아이콘을 만들 것인지<br />

물어봅니다. 바탕화면에 TPCWORKS<br />

아이콘을 만드는 것이 여러모로<br />

편리하므로, 체크를 하도록 합니다.<br />

9. 끝으로 지금까지의 선택사항을 한눈에<br />

볼 수 있는 화면이 표시됩니다. 이상이<br />

없으면 Install 을 누르면, 설치가<br />

진행됩니다.<br />

10. 설치가 진행됩니다.<br />

화면의 초록색 바가 끝까지 도달하면 설치가 완료되고 바탕화면에 TPCWORKS 아이콘이<br />

표시됩니다. 이 아이콘을 더블클릭하면 TPCWORKS 가 실행됩니다.<br />

- 243 -


TinyPLC TPC9X User’s Manual<br />

TPCWORKS 사용법 기초<br />

TPCWORKS 를 실행시키면 아래와 같은 화면이 표시됩니다.<br />

가운데에 하얀공간에 레더로직을 그려 넣게 됩니다. 상단에는 타이틀바, 메뉴바, 툴바,<br />

모드탭, 심볼아이콘 바가 위치하고 있습니다.<br />

- 244 -


TinyPLC TPC9X User’s Manual<br />

“모드(MODE)탭”에서는 화면 모드를 변경하는 3 가지 기본적인 탭이 있습니다.<br />

니모닉 VIEW 는 레더컴파일의 결과를 볼 수 있는 기능입니다. 니모닉을 수정하여<br />

컴파일하는 것은 불가능하며, 오로지 볼 수만 있습니다. (Read Only)<br />

- 245 -


TinyPLC TPC9X User’s Manual<br />

툴바는 자주사용하는 기능들이 모여있어, 클릭하면 곧바로 실행되도록 되어 있습니다.<br />

- 246 -


TinyPLC TPC9X User’s Manual<br />

PLC SETUP<br />

PLC SETUP 탭을 누르면 다음과 같은 화면이 표시됩니다. 화면 왼쪽을 보시면 3개의 탭이<br />

추가로 있는 것을 볼 수 있습니다. PLC SETUP 안에서도 3 개의 탭중 하나를 선택하는<br />

것입니다. 지금 보이고 있는 화면은 기본셋업 (General Setup)화면입니다.<br />

코어모듈의 종류를 선택할 수 있는<br />

메뉴입니다.<br />

- 247 -


TinyPLC TPC9X User’s Manual<br />

I/O 의 입출력 상태를 결정할 수 있는<br />

메뉴입니다.<br />

이 부분을 클릭하면, IN 또는 OUT 으로<br />

변경됩니다. 해당 포트를 원하는 상태로<br />

조정하십시오. 바로 뒤에 위치한 빈칸에<br />

별명 (Alias)를 입력할 수 있습니다.<br />

이 부분을 클릭하면 그룹별로 IN 또는<br />

OUT 으로 선택할 수 있습니다.<br />

별명을 설정할 수 있는 “텍스트<br />

박스”입니다. 텍스트 박스안에 왼쪽의<br />

예에서 처럼 “릴레이명 = 별명”과 같은<br />

형태로 별명을 입력할 수 있습니다.<br />

P 영역은 I/O Setting 에서 별명입력을 할 수 있으므로, 이곳에서 다시 P영역에 대한 별명을<br />

입력하실 필요는 없습니다.<br />

- 248 -


TinyPLC TPC9X User’s Manual<br />

별명(Alias)이란?<br />

P0, M0 과 같은 릴레이명으로 복잡한 레더를 작성하다면, 어디에 연결된 입력인지, 또는<br />

어떤출력인지 혼동되기 쉽습니다. 그래서 사용중인 릴레이명에 적당한 이름을 붙여두어,<br />

좀더 쉽게 레더도를 파악할 수 있도록 하는 기능입니다.<br />

다음은 별명을 전혀 사용하지 않은 상태의 레더입니다. F2, F42, M3 가 어떤용도로<br />

사용되었는지 한눈에 파악되질 않습니다.<br />

다음은 별명을 사용한 경우입니다. 실제 릴레이명과 함께 아랫쪽에 별명이 표시됩니다.<br />

레더 작성시 F2, M3 와 같은 릴레이명 대신 별명을 입력할 수 도 있습니다. 이 경우 아랫쪽에<br />

릴레이명이 표시됩니다.<br />

- 249 -


TinyPLC TPC9X User’s Manual<br />

이름짓기<br />

별명을 만들 때 지켜야하는 몇가지 규칙이 있습니다. 반드시 영문자로 시작해야 하며, 16 자<br />

이내로 만들어야 합니다. 그리고 중간에 공백문자를 포함하지 않아야 합니다.<br />

올바른예<br />

ABC<br />

MOTOR<br />

RELAY<br />

잘못된예<br />

12SENSRO<br />

RELAY 2<br />

STEPOUT<br />

‘ 숫자로 시작된 경우<br />

‘ 중간에 공백문자가 들어간 경우<br />

‘ 명령어로 사용중인 예약어를 쓴 경우<br />

이미 명령어로 사용중이거나, TPCworks 에서 사용하는 “예약어”를 사용할 수 없습니다.<br />

TPCWORKS 에서는 대소문자를 구분하지 않습니다. 모든 소문자는 대문자로 번역됩니다.<br />

- 250 -


TinyPLC TPC9X User’s Manual<br />

추가셋업 (Advenced Setup)을 누르면 다음과 같은 화면이 표시됩니다. 여기에서는 A/D, PWM,<br />

LCD 와 관련된 여러가지 사항을 셋업할 수 있습니다.<br />

각각의 부분에 대한 설명은 앞서 해당 부분에 대한 설명을 참조하시기 바랍니다.<br />

주의<br />

KEYPAD 콘트롤러를 사용하면 포트 0,1,2,3 을 다른 용도로 사용할 수 없으므로 주의하시기<br />

바랍니다. 만약 KEYPAD 콘트롤러를 사용하지 않는데도, 이 메뉴를 ON 으로 설정한다면<br />

포트 0,1,2,3 을 사용할 수 없는 상태가 됩니다.<br />

- 251 -


TinyPLC TPC9X User’s Manual<br />

다음은 설정 스크립트 (Config Script)화면 입니다.<br />

이곳은 테이블 변환을 위한 리스트를 작성하거나 추가셋업 정보를 입력하는 곳입니다.<br />

엉뚱한 TEXT 가 있을 경우, 컴파일시 에러가 발생될 수 있으므로, 사용하지 않을 경우 항상<br />

비워두시기 바랍니다.<br />

- 252 -


TinyPLC TPC9X User’s Manual<br />

파일의 오픈 및 저장<br />

파일 오픈 메뉴를 누르면 다음과 같은 창이 표시됩니다. 현재 선택된 폴더에 들어있는<br />

TinyPLC 용 소스파일 (확장자 .TPL)이 표시되며, 이중 하나를 선택한뒤 OPEN 버튼을 누르면,<br />

해당파일이 열립니다.<br />

실제로 소스는 3 개의 파일로 되어 있습니다.<br />

확장자<br />

.TPL<br />

.TPB<br />

.CUC<br />

설명<br />

레더정보<br />

SCRIPT 정보<br />

PLC SETUP 정보<br />

따라서, 소스를 다른곳으로 COPY 할 때에는 3 개 파일을 모두 COPY 해야합니다.<br />

파일 오픈 시에는 위의 그림처럼 .TPL 파일만 표시됩니다만, 실제로는 같은<br />

폴더에 .TPB 와 .CUC 파일이 모두 저장되어 있습니다. 다만 같이 표시되었을 경우 너무 많은<br />

내용이 표시되어 혼동을 초래할 우려가 있어, .TPL 파일만 표시한 것입니다.<br />

소스파일을 컴파일하는 과정에서 OBJ 파일이 생성됩니다. OBJ 파일은 실행화일을 오브젝트<br />

코드로 기록한 파일입니다. FILE 메뉴의 “OBJ 파일 다운로드”를 선택한뒤 OBJ 파일을<br />

선택하면, 소스파일없이도 다운로드할 수 있습니다.<br />

* TPB 파일을 유저가 다른 에디터로 고칠 수 없습니다. 이 파일은 다운로드시 새롭게<br />

작성되는 파일입니다.<br />

- 253 -


TinyPLC TPC9X User’s Manual<br />

유저가 작성한 소스를 “TinyPLC 코어모듈”에 저장했다가 나중에 다시 불러오는 “소스<br />

업로드”기능은 지원하지 않으므로, 주의하시기 바랍니다. 소스를 잃어버렸을 경우, 코어모듈<br />

에서 소스를 다시 불러올 수 있는 방법은 없으므로 소스프로그램의 보관 및 백업에 항상<br />

신경 써 주시기 바랍니다.<br />

TPC9X 모듈은 기본적으로 “코드 프로텍션”을 지원합니다. 다운로드 된 유저 프로그램을<br />

읽어낼 수 없도록 설계되어 있습니다. 가령, 특수한 장비를 사용하여 반도체 칩 내부의<br />

데이터를 읽어낸다 하더라도, 암호화되어 알 수 없는 숫자들만 읽혀질 뿐입니다.<br />

오브젝트 파일에 대해서..<br />

만약, 소스파일을 줄 수 없는 거래처나 현장에 다운로드 가능한 실행파일만 전달하고 자<br />

할때에는 이 오브젝트 파일만 카피해서 주면 됩니다. 오브젝트파일에는 소스에 대한 정보가<br />

들어있지 않으므로, 소스를 읽거나 수정할수 없습니다.<br />

파일명과 폴더관리에 대해서..<br />

최초로 저장할 때 파일명을 물어봅니다. 지금 작성하는 프로그램의 내용을 잘 알수 있도록<br />

파일명을 작명하는 습관을 붙이도록 하는 것이 좋습니다.<br />

1234, TEST, ABC 와 같은 무의미한 파일명보다는 MOTORDRV 라든가, LAMPMAKE 등의<br />

프로젝트와 관련된 단어를 선택하도록 하십시오.<br />

그리고 파일을 저장할 폴더관리에도 신경쓰는 것이 좋습니다. 프로젝트별로 폴더를 만들어<br />

놓고, 적절하게 분리해서 관리하는 습관을 들이도록 하십시오. 하나의 폴더나 루트폴더에<br />

모두 섞어서 저장할 경우, 나중에 필요한 파일을 찾는데 불필요한 시간을 낭비하기<br />

때문입니다.<br />

- 254 -


TinyPLC TPC9X User’s Manual<br />

다운로드와 실행<br />

RUN 을 누르면 (또는 단축키 CTRL-R) 저장-컴파일-다운로드-실행이 됩니다. 번역도중<br />

에러가 발생되면 에러멧세지가 표시되고, 에러가 발생한 곳으로 커서가 이동합니다.<br />

여러분이 작성한 소스내용 (레더입력상태와 PLC SETUP 상태)는 RUN 을 누를 때<br />

SAVE 됩니다.<br />

만약 “환경설정”메뉴에서 “Auto save when download” 를 선택하지 않았다면, Run 하는<br />

과정에서 SAVE 되지 않으므로 주의하시기 바랍니다.<br />

File 메뉴의 New 를 누르면 현재 레더로직이 모두 지워지게 됩니다. 새로운 레더도를 입력할<br />

때 사용하십시오. 단 PLC SETUP 상태는 최종상태를 그대로 유지하게 됩니다.<br />

- 255 -


TinyPLC TPC9X User’s Manual<br />

레더작성용 아이콘 툴바<br />

레더를 작성을 위한 아이콘 툴바의 구성입니다.<br />

화면상에 보이는 빨간색 박스가 “커서”입니다. 커서키를 및 마우스 포인트를 사용하면<br />

커서를 이동시킬 수 있습니다. 먼저 커서를 원하는 위치로 이동시킨 후, F3~F12 키를 누르면<br />

해당위치에 원하는 심볼을 표시할 수 있습니다.<br />

위에 그림에서처럼 레더도는 입력접점과 접속선 그리고 출력접점등으로 구성됩니다.<br />

TinyPLC 에서는 오른쪽의 모선 (전원선)은 생략되어 있습니다.<br />

- 256 -


TinyPLC TPC9X User’s Manual<br />

LADDER 작성법<br />

파일메뉴의 New 를 누<br />

르면 다음과 같은 화면<br />

이 됩니다.<br />

F3 키를 누르면 커서<br />

위치에 A 접점 심볼이<br />

표시됩니다.<br />

ENTER 키를 누르고<br />

P0 를 입력한뒤<br />

ENTER 를 누르면<br />

다음과 같은 화면이 됩<br />

니다.<br />

- 257 -


TinyPLC TPC9X User’s Manual<br />

F5 를 계속 누르면 횡접<br />

속선이 표시됩니다.<br />

F7 을 누르면 출력심볼이<br />

표시됩니다.<br />

출력심볼은 반드시 가장<br />

오른쪽에 위치해야 하므<br />

로, 자동적으로 중간지점<br />

의 횡접속선을 그려줍니<br />

다.<br />

ENTER 키를 누르고 P2<br />

를 입력한뒤, 다시<br />

ENTER 키를 누르세요.<br />

- 258 -


TinyPLC TPC9X User’s Manual<br />

커서를 한칸 아래로 내립<br />

니다.<br />

화살표키의 아랫쪽 방향<br />

버튼을 누르거나, 마우스<br />

커서를 원하는 지점으로<br />

이동한후 클릭하는 방법<br />

을 씁니다.<br />

심볼 TOOL 바에 있는<br />

END 심볼을 클릭해서 화<br />

면에 END 레더를 표시합<br />

니다.<br />

TEXT 입력 시 맨 끝에 ENTER 키를 눌러야 입력이 완료됩니다. 그리고, LADDER 의 가장<br />

끝에는 반드시 END 명령이 있어야 합니다. TPCWORKS 는 END 명령이 위치한 곳까지<br />

번역하고, 저장합니다. END 명령 이후에 작성된 부분은 저장되지 않으므로 주의하시기<br />

바랍니다.<br />

레더도에서 TEXT 대소문자 구분을 하지 않습니다. P0 와 p0 는 동일한 것을 간주됩니다.<br />

명령어도 마찬가지입니다. WMOV 와 wmov 도 동일한 명령입니다.<br />

- 259 -


TinyPLC TPC9X User’s Manual<br />

LADDER 편집<br />

텍스트 수정<br />

이미 작성되어 있는 TEXT 부분을 수정하려면 해당위치에 커서를 놓은 뒤, ENTER 키를<br />

누르면, 해당부분의 TEXT 를 수정할 수 있습니다.<br />

종 접속선의 추가 삭제<br />

종 접속 선이 필요한 곳에 커서를 위치시킨 후 F6 를 누르면 횡 접속 선이 표시됩니다.<br />

커서의 오른쪽 아랫 부분에서 종 접속선이 표시됩니다.<br />

이미 표시되어 있는 종 접속 선을 지우려면 해당위치에서 한번 더 F6 키를 누르면<br />

지워집니다.<br />

횡 접속선의 추가 삭제<br />

F5 키 또는 “-“키를 누르면 횡 접속 선이 표시됩니다. 이미 표시되어 있는 곳에서 다시 한번<br />

F5 키를 누르면 지워집니다. 횡 접속선 및 종접속선은 토글동작으로 표시하거나 지울 수<br />

있습니다.<br />

- 260 -


TinyPLC TPC9X User’s Manual<br />

셀 단위 삭제<br />

현재 커서가 위치한 곳에 있는 선과 텍스트내용을 모두 삭제하고 싶다면 “SPACE 키”를<br />

누릅니다.<br />

렁의 삭제<br />

Ladder 에서 한 행을 렁(Rung)이라고 부릅니다. 지우고 싶은 렁에 커서를 위치시킨 뒤 CTRL-<br />

D 를 누르면 해당 렁이 삭제됩니다. 실제로는 버퍼로 이동합니다.<br />

렁의 복구<br />

지웠던 렁을 복구하려면, CTRL-U 를 누릅니다. 버퍼에 저장되었던 렁이 복구됩니다.<br />

- 261 -


TinyPLC TPC9X User’s Manual<br />

셀 단위 삽입과 삭제<br />

현재 커서의 위치에서 DEL 키를 누르면 셀이 삭제되고, 뒤에 있던 부분이 당겨지게 됩니다.<br />

INS 키를 누르면 빈칸이 삽입되고, 뒷부분은 밀려납니다.<br />

렁 복사<br />

같은 형태의 레더가 계속 반복될 경우 CTRL-A 를 누르면, 바로 윗줄의 렁과 똑 같은 모양의<br />

렁이 생성됩니다. 단, 텍스트 내용은 복사되지 않습니다.<br />

코멘트 표시<br />

LADDER 프로그램 중 빈 공간에 “주석문 (COMMENT)”를 입력할 수 있습니다. 코멘트는<br />

“어포스토로피” (‘) 로 시작해야 하며, 반드시 빈 공간이나, 빈 줄에 표시해야 합니다.<br />

- 262 -


TinyPLC TPC9X User’s Manual<br />

레더의 블록이동 복사<br />

레더의 일부분을 선택하여 따로 보관하거나, 이동 복사 등을 할 수 있습니다.<br />

마우스를 이용하여 드레그-드롭한다면 원하는 영역을 선택할 수 있습니다. (드레그-<br />

드롭이란?: 시작점에서 마우스의 왼쪽보턴을 클릭한 뒤, 클릭한 상태로 대각선방향의 끝<br />

지점까지 이동한 뒤, 마우스의 보턴을 놓습니다.) 선택된 영역은 반전되어 표시됩니다.<br />

이 상황에서 CTRL-C 를 누르면 선택된 영역이 버퍼로 복사됩니다. 화면에는 아무 변화도<br />

일어나지 않지만, 선택된 영역이 버퍼에 저장된 것입니다. CTRL-X 를 누르면 복사한 뒤,<br />

해당영역을 모두 클리어 합니다.<br />

복사하고자 하는 지점으로 커서를 이동시킨 뒤 CTRL-V 를 누르면 버퍼에 있던 내용이<br />

표시됩니다. CTRL-V 는 넣을 공간을 확보한 뒤, 표시하고, CTRL-T 는 원래 있던 내용에<br />

겹쳐서 표시됩니다.<br />

*주의사항 : LADDER 편집화면에서 UNDO (실행 전 상황으로 복귀)는 지원되지 않으므로 주의<br />

하시기 바랍니다.<br />

- 263 -


TinyPLC TPC9X User’s Manual<br />

모니터링<br />

TPCWORKS 에서는 LADDER LOGIC 의 동작상황을 실시간으로 보여주는<br />

“모니터링”기능을 지원합니다. TinyPLC 에서는 다운로드직후 바로 모니터링 상태로가<br />

됩니다. 화면상단에 있는 툴 바에서 모니터링 ON/OFF 스위치를 누르면 모니터링 상태로<br />

들어가거나, 빠져 나올 수 있습니다.<br />

LADDER 모니터링 ON / OFF 스위치<br />

다음은 모니터링중인 화면입니다. ON 상태인 접점은 “녹색블록”이 표시되며, 타이머,<br />

카운터 등은 현재 값을 표시합니다.<br />

LADDER 모니터링 상태에서는 편집 및 저장이 불가능합니다. 반드시 LADDER 모니터링<br />

상태를 끈 후에 다른 작업을 하기 바랍니다.<br />

- 264 -


TinyPLC TPC9X User’s Manual<br />

WATCH POINT<br />

특정 릴레이나 메모리의 내용을 보고 싶을 때에는 WATCH POINT 를 이용합니다.<br />

LADDER 중 빈 부분에 “어포스트로피”를 두 개 연달아 작성한 뒤 보고 싶은 릴레이번호를<br />

적어줍니다. (쌍따옴표가 아닌, 어포스트로피 두 개입니다.) 다운로드 한 뒤, 모니터링<br />

상태에서 와치포인트에 릴레이의 상태가 표시됩니다.<br />

‘’P0 ‘’D0<br />

‘’T1<br />

C, T, D 는 16 비트 값으로 표시 되며, 나머지 P, M, F 는 접점형태로 표시됩니다. S 릴레이는<br />

와치포인트로 볼 수 없습니다. 그리고, END 문 밑에 있는 레더나 문장은 번역되지 않기<br />

때문에 와치포인트는 END 문 안에 있어야만 볼 수 있습니다.<br />

주의사항<br />

모니터링 화면의 갱신속도는 PC 환경 (실행속도 등)에 따라 실제의 릴레이상태와 약간의 시간차이가 발생할 수 있습니다.<br />

너무 빠른 릴레이의 ON/OFF 상황이 화면상에 모두 표시될 수 는 없다는 것을 염두에 두고, 모니터링 화면을 참고하시기<br />

바랍니다. Setup 메뉴의 Ladder Setup 에서 Monitoring Speed 로 모니터링 속도를 변화시킬 수 있습니다.<br />

- 265 -


TinyPLC TPC9X User’s Manual<br />

타임 차트 모니터<br />

TPCWORKS 에서는 특정 릴레이의 상태를 타임차트형태로 볼 수 있는 “타임차트<br />

모니터링”기능을 지원합니다. 화면상단에 있는 툴 바에서 타임차트 모니터 스위치를 누르면<br />

타임차트 모니터 윈도우가 나옵니다.<br />

타임 차트 모니터<br />

- 266 -


TinyPLC TPC9X User’s Manual<br />

상단에 있는 Start 보턴을 누르면 캡쳐를 시작합니다. 한눈금의 간격을 최소 40mS 단위부터<br />

측정할 수 있습니다. Stop 보턴을 누르면 캡쳐를 중지합니다. [A], [B] 커서를 조정하여<br />

커서간의 시간간격을 측정해 볼 수 있으며, 표시할 릴레이의 종류를 다시 선택할 수도<br />

있습니다.<br />

A 지점을 클릭하면, 다음과 같은 팝업창이 표시됩니다. 여기에서 표시하고자 하는 릴레이를<br />

바꿀 수 있습니다.<br />

알아두세요!<br />

타임차트의 최소 측정단위는 40mS 입니다. PC 의 윈도우환경에서는 매우 빠른시간으로<br />

외부신호를 측정할 수 없기 때문에, 40mS 정도의 샘플링 시간보다 더 빠른 시간으로<br />

샘플링할 수 없습니다.<br />

아시다 시피 TinyPLC 의 스캔타임은 최소 1mS 입니다. 이 말은 1mS 간격으로 신호가 변할 수<br />

있다는 뜻입니다.<br />

타임차트는 40mS 간격으로 데이터를 읽어오는데, TinyPLC 는 1mS 간격으로 동작하므로,<br />

파형의 변화를 전부 읽어오는 것은 불가능합니다.<br />

따라서 본 소프트웨어에서 제공하는 타임차트 기능은 40mS 보다 큰 시간단위로 변하는<br />

파형의 변화만 측정 및 관찰할 수 있습니다.<br />

- 267 -


TinyPLC TPC9X User’s Manual<br />

메뉴 설명<br />

파일 (File) 메뉴<br />

메뉴<br />

새로만들기<br />

열기<br />

레더 IMPORT<br />

저장하기<br />

다른 이름으로 저장<br />

LADDER 인쇄<br />

프린터 설정<br />

오브젝트 다운로드<br />

최근 편집파일<br />

끝내기<br />

설명<br />

새로운 파일을 작성하기 위해 BASIC 과 LADDER 영역을 모두 클리어<br />

합니다.<br />

저장해 놓은 TPC9X 파일을 불러옵니다.<br />

저장해 놓은 TPC9X 파일 중 LADDER 만 읽어서, 현재 LADDER 편집영<br />

역의 커서가 있는 부분에 삽입시킵니다. 다른 파일에서 레더만 가져올<br />

때 사용하는 메뉴입니다.<br />

편집중인 내용을 파일로 저장합니다.<br />

다른 이름으로 저장합니다.<br />

LADDER 영역에 있는 레더소스를 프린터로 출력합니다. 아래의 프린<br />

터 설정을 먼저 하신 후 사용하시기 바랍니다.<br />

LADDER 영역 프린트를 위한 프린터 설정 창을 띄웁니다.<br />

오브젝트 파일을 TPC9X 모듈로 다운로드 합니다.<br />

최근에 편집한 파일 4 개를 보여줍니다. 이중 하나를 선택하면, 오픈됩<br />

니다.<br />

TPCWORKS 를 종료합니다.<br />

실행 (Run) 메뉴<br />

메뉴<br />

실행<br />

리셋<br />

LADDER 모니터링 시작<br />

플레쉬 메모리 지움<br />

릴레이 사용현황 보기<br />

문법체크<br />

설명<br />

컴파일하고, 에러가 없으면 TPC9X 모듈로 다운로드 후 실행합<br />

니다.<br />

다운로드 후 자동으로 실행하는 것을 원치 않을 경우, 설정<br />

(Setup)의 Studio Option 에서 변경할 수 있습니다.<br />

TPC9X 모듈을 리셋 시킵니다.<br />

LADDER 모니터링을 시작합니다.<br />

플레쉬 메모리의 내용을 모두 클리어 합니다.<br />

(컴파일 후) 레더에서 사용한 릴레이를 보여줍니다.<br />

문법의 이상유무만 체크해 줍니다.<br />

편집(Edit)메뉴는 메뉴의 제목만 읽어봐도 알 수 있는 일반적인 내용이므로 별도로 설명하지<br />

않겠습니다.<br />

- 268 -


TinyPLC TPC9X User’s Manual<br />

설정(Setup)메뉴<br />

메뉴<br />

PLC 셋업 마법사<br />

PC 인터페이스 설정<br />

환경설정<br />

영문메뉴로 전환<br />

펌웨어 다운로드<br />

설명<br />

레더를 위한 베이직 소스 자동 생성 마법사<br />

PC 와의 인터페이스를 위한 RS232 COM PORT 를 선택하는 메뉴입<br />

니다. COM 1 ~ 4 중 하나를 선택합니다.<br />

TPCworks 의 세부상황을 선택할 수 있는 메뉴입니다.<br />

영문메뉴로 전환해줍니다. 영문메뉴 상태에서 이 자리에는 Use<br />

Korean menu 로 바뀝니다. Use Korean menu 를 선택하면 다시 한<br />

글 메뉴상태로 복귀됩니다.<br />

한글 메뉴상태에서 모든 에러멧세지는 한글로 표시되고, 영문 메뉴<br />

상태에서 모든 에러멧세지는 영문으로 표시됩니다.<br />

TPC9X CORE 의 펌웨어를 다운로드 합니다. 이 메뉴를 사용하지 않<br />

아도, RUN 시에 STUDIO 에서 펌웨어 업그레이드 여부를 판단하여,<br />

질문 창을 띄워줍니다.<br />

도움말 메뉴에는 TPC9X 의 사용설명서와 오늘의 팁, 업그레이드 정보, TPCworks 의 현재<br />

버전 등을 볼 수 있는 메뉴가 있습니다.<br />

- 269 -


TinyPLC TPC9X User’s Manual<br />

환경설정<br />

셋업메뉴에 있는 환경 설정 (Envirionment Option) 창에 대한 자세한 설명입니다.<br />

레더의 크기를 결정합니다.<br />

렁 사이의 간격을 조정합니다.<br />

레더작성창의 바탕화면 색을 결정합니다.<br />

모니터링 속도를 결정합니다.<br />

다운로드후 자동으로 실행할것인지의 여부를 결정합<br />

니다.<br />

다운로드시 소스를 자동세이브 할 것인지 결정합니<br />

다.<br />

기계와 연결이 되어 있는 상황에서는 다운로드 후 자동으로 실행하도록 하면 기계동작에<br />

무리가 발생할 가능성이 있습니다. 다운로드 후 자동실행 옵션을 OFF 하게 되면, TPC9X 은<br />

다운로드 후 정지상태로 머물러 있습니다. 이때 RESET 보턴을 누르거나, TPC9X 의 전원을<br />

OFF – ON 하게 되면 실행됩니다.<br />

- 270 -


TinyPLC TPC9X User’s Manual<br />

릴레이 사용현황 보기<br />

레더로직을 작성하다 보면, 특정릴레이를 사용했는지 궁금한 경우가 발생합니다. 이 메뉴를<br />

사용하면 지금 현재 여러분이 작성한 레더로직에서 사용된 릴레이를 모두 볼 수 있습니다.<br />

다운로드 한 뒤, 실행메뉴-> 릴레이 사용현황 보기를 클릭하면 다음과 같은 윈도우가<br />

표시됩니다.<br />

이 목록을 참조하면 사용하지 않은 릴레이를 쉽게 알 수 있으므로, 소스 추가 및 수정에<br />

도움이 됩니다.<br />

- 271 -


TinyPLC TPC9X User’s Manual<br />

레더입력 테크닉<br />

별명 (Alias)를 사용하면, 훨씬 알기 쉬운 레더로직을 작성하실 수 있습니다. 하지만 긴<br />

이름을 사용하다 보면 아래처럼 겹쳐서 표시되는 경우가 있습니다.<br />

이런경우 레더심볼의 간격을 띄워서 작성하시면, 별명을 모두 볼 수 있습니다.<br />

- 272 -


TinyPLC TPC9X User’s Manual<br />

입력심볼이 많아서, 한칸에 다 입력할 수 없는 경우에는 M 릴레이를 써서 중계하도록 합니다.<br />

주석문에 쓸내용이 많을 경우에는 주석문 사이에 세미콜론을 끼워넣으면, 행바꿈이 되어<br />

표시됩니다. (실제로 세미콜론이 화면상에 보이지는 않지만, 세미콜론이 있는 곳에서<br />

행바꿈이 일어난 것입니다.)<br />

- 273 -


- 274 -<br />

TinyPLC TPC9X User’s Manual


TinyPLC TPC9X User’s Manual<br />

제 17 장<br />

입출력 회로<br />

- 275 -


TinyPLC TPC9X User’s Manual<br />

다운로드 케이블 연결<br />

TPC9X 을 사용하기 위해서 우선적으로 PC 와의 RS232 다운로드 케이블을 연결해야 합니다.<br />

다운로드 케이블은 1:1 연결을 사용하며 총 9 가닥 중 4 가닥의 신호 선만을 사용합니다.<br />

CuBLOC side<br />

PC side<br />

6<br />

7<br />

8<br />

9<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

1<br />

2<br />

3<br />

4<br />

5<br />

MALE Type<br />

FEMALE Type<br />

PC<br />

6<br />

7<br />

8<br />

9<br />

1<br />

2<br />

3<br />

4<br />

5<br />

Rx<br />

Tx<br />

DTR<br />

GND<br />

SOUT<br />

SIN<br />

ATN<br />

VSS<br />

SS_P0<br />

(Input_only)SCK_P1<br />

MOSI_P2<br />

MISO_P3<br />

P4<br />

PWM0_P5<br />

PWM1_P6<br />

PWM2_P7<br />

(CUNET)SCL_P8<br />

(CUNET)SDA_P9<br />

P10<br />

P11<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

13<br />

14<br />

15<br />

16<br />

17<br />

18<br />

19<br />

20<br />

21<br />

22<br />

23<br />

24<br />

25<br />

26<br />

27<br />

28<br />

29<br />

30<br />

31<br />

32<br />

VDD<br />

VSS<br />

RES<br />

N/C<br />

P16<br />

P17<br />

P18<br />

P19_PWM3<br />

P20_PWM4_INT0<br />

P21_PWM5_INT1<br />

P22_INT2<br />

P23_INT3<br />

P15_HCNT1<br />

P14_HCNT0<br />

P13<br />

P12<br />

TX1<br />

RX1<br />

AVDD<br />

N/C<br />

ADC0_P24<br />

ADC1_P25<br />

ADC2_P26<br />

ADC3_P27<br />

P47<br />

P46<br />

P45<br />

P44<br />

P43<br />

P42<br />

P41<br />

P40<br />

33<br />

34<br />

35<br />

36<br />

37<br />

38<br />

39<br />

40<br />

41<br />

42<br />

43<br />

44<br />

45<br />

46<br />

47<br />

48<br />

49<br />

50<br />

51<br />

52<br />

53<br />

54<br />

55<br />

56<br />

57<br />

58<br />

59<br />

60<br />

61<br />

62<br />

63<br />

64<br />

TTLTX1<br />

TTLRX1<br />

AVREF<br />

P48<br />

P31_ADC7<br />

P30_ADC6<br />

P29_ADC5<br />

P28_ADC4<br />

P32<br />

P33<br />

P34<br />

P35<br />

P36<br />

P37<br />

P38<br />

P39<br />

TPC91A<br />

- 276 -


TinyPLC TPC9X User’s Manual<br />

PC 통신포트의 점검<br />

간혹 PC 상의 통신포트 설정이 잘못되어 있어, TPC9X 다운로드가 안 되는 경우가 있습니다.<br />

PC 에는 보통 1~2 개의 RS232 통신포트가 내장되어 있지만, 이 통신포트를 사용 가능한<br />

상태로 만들어 주는 것은 유저의 몫입니다. PC 의 RS232 통신포트를 제대로 동작시키기<br />

위해서는 BIOS 셋업과 윈도우 드라이버 설치까지 제대로 구성되어 있어야 하기 때문입니다.<br />

우선 BIOS 상에서 RS232 통신포트 설정방법에 대하여 설명하겠습니다. 컴퓨터 부팅 시에<br />

DEL 키를 누르면 (PC 에 따라서 다른 키를 사용하는 경우도 있음) BIOS SETUP 화면이<br />

표시됩니다. BIOS 의 종류에 따라서 다른 화면이 표시됩니다.<br />

다음 화면그림을 참조하여, 마더보드상에 있는 RS232 통신포트가 Disable 상태로 되어 있지<br />

않도록 설정하시기 바랍니다.<br />

ROM PCI /ISA BIOS<br />

CMOS SETUP UTILITY<br />

AWARD SOFTWARE, INC<br />

주변장치 셋업을 선택<br />

STANDARD CMOS SETUP<br />

BIOS FEATURE SETUP<br />

CHIPSET FEATURE SETUP<br />

POWER MANAGEMENT SETUP<br />

PCI CONFIGURATION<br />

LOAD SETUP DEFATULTS<br />

ESC : QUIT<br />

F10 : SAVE & EXIT SETUP<br />

INTERGRATED PERIPHERALS<br />

SUPERVISOR PASSWORD<br />

USER PASSWORD<br />

IDE HDD AUTO DETECTION<br />

SAVE & EXIT SETUP<br />

EXIT WITHOUT SAVIING<br />

< > : SELECT ITEM<br />

(SHIFT)F2 : CHANGE COLOR<br />

ROM PCI /ISA BIOS<br />

CMOS SETUP UTILITY<br />

AWARD SOFTWARE, INC<br />

OnBoard FDD Controller : Enable<br />

OnBoard Serial Port 1 : 3F8 / IRQ4<br />

보드상의 시리얼포트 1 을<br />

COM1 에 할당합니다.<br />

OnBoard Serial Port 2 : Disable<br />

OnBoard Parallel Port : 378 / IRQ7<br />

OnBoard Parallel Mode : ECP / EPP<br />

- 277 -


TinyPLC TPC9X User’s Manual<br />

다음은 윈도우가 COM 포트 드라이버를 제대로 인식하고 있는지 체크해보아야 합니다. 까지 선택하여 들어가 보면, 아래 화면이<br />

표시됩니다. (윈도우 XP 의 경우)<br />

이 다이얼 로그 박스에서 “통신포트 (COM1)”이 표시되어 있는지 확인하시기 바랍니다. 만약<br />

통신포트가 나와있지 않다면 메뉴에서 을 눌러,<br />

COM1 포트를 추가하시기 바랍니다.<br />

끝으로 TPC9X STUDIO 의<br />

“SETUP”메뉴에서 “PC 인터페이스<br />

설정”에서 COM1 포트로 셋팅해주면<br />

TPC9X 통신포트 설정이 완료된 것입니다.<br />

*대부분의 PC 에서는 이처럼 복잡한<br />

과정을 거치지 않아도 COM1 이<br />

사용가능한 상태로 되어 있는 경우가<br />

많습니다.<br />

- 278 -


TinyPLC TPC9X User’s Manual<br />

모든 설정이 다 끝났다면, RS232 다운로드 케이블의 3 번 단자에서 –10V ~ -12V 정도가<br />

나오고 있는지를 확인해 보시기 바랍니다. 간혹 케이블이 잘못되었거나, PC 내부 마더보드의<br />

컨넥터가 연결되어 있지 않는 경우도 발생하기 때문입니다.<br />

6<br />

7<br />

8<br />

9<br />

1<br />

2<br />

Rx<br />

3<br />

Tx<br />

4<br />

DTR<br />

5<br />

GND<br />

-12V<br />

RS232 포트 셋팅은 최초 한번만 제대로 설치한다면, 이후부터는 신경 쓸 필요가 없게 됩니다.<br />

펌웨어 다운로드<br />

모든 설정이 제대로 되었는데, 다운로드가 안된다면 “펌웨어 다운로드”를 해보시기<br />

바랍니다. TinyPLC 의 “펌웨어”가 제대로 라이팅되어 있지 않다면, PC 에서 오는 통신요구에<br />

제대로 응답하지 않게 됩니다. 펌웨어 다운로드를 누르면, 새로운 펌웨어를 TinyPLC 의<br />

코어부분에 라이팅하게 되므로, 최초상태로 되돌릴 수 있습니다.<br />

이때, 기존 프로그램과 EEPROM 의 데이터는 모두 지워지게 되므로 주의바랍니다.<br />

- 279 -


TinyPLC TPC9X User’s Manual<br />

USB-RS232 케이블 사용<br />

만약 PC 에 RS232 포트가 없다면 USB-RS232C 변환<br />

케이블을 사용하여 연결하시기 바랍니다. 아래<br />

사진은 컴파일 테크놀로지에서 판매하고 있는 USB-<br />

RS232C 변환케이블입니다. 이 케이블을 PC 의<br />

USB 포트에 연결하신 뒤 디바이스 드라이버를<br />

설치해주어야 합니다.<br />

www.comfile.co.kr 에서<br />

USB-RS232 케이블<br />

드라이버를 다운로드<br />

받으실 수 있습니다.<br />

다운로드 된 파일은<br />

ZIP 으로 압축되어<br />

있습니다. 압축을 풀면<br />

USB DRIVER 폴더가<br />

생성됩니다.<br />

사용하는 제품에 따라 USB<br />

1.1 드라이버를 설치해<br />

주어야 하는 제품이 있고,<br />

USB 2.0 드라이버를<br />

설치해 주어야 하는 제품도<br />

있습니다. (제품 버전에<br />

따라 다름)<br />

드라이버 설치가 끝나면,<br />

“내 컴퓨터”의 “시스템<br />

상태”에서 “디바이스<br />

관리자”의 “Ports(COM &<br />

LPT)”를 보면 몇 번<br />

COM 포트에 할당되었는지<br />

알 수 있습니다.<br />

- 280 -


TinyPLC TPC9X User’s Manual<br />

이 그림의 경우에는 COM3 으로 할당되었습니다. TPCWORKS 에서 PC 인터페이스 셋업을<br />

선택하신 후, 사용 포트를 COM3 으로 조정하시면 됩니다.<br />

여기까지 하시면 USB-RS232 케이블 사용을 위한 모<br />

든 준비가 끝난 것입니다. 이제 TPC9X STUDIO 에서<br />

프로그램을 작성한 뒤 실행버튼을 눌러보세요. 다운<br />

로드가 잘 될 것입니다. 만약 다운로드가 잘 되지 않는<br />

다면, USB 드라이버의 재설치 및 전원 통신케이블 접<br />

속상태 등을 체크해 보시기 바랍니다. (참고적으로<br />

USB-RS232 케이블 사용시, 대용량 USB 저장장치를<br />

동시 접속하면, 다운로드 시 문제가 발생될 수 있으므<br />

로 주의하시기 바랍니다.)<br />

*RS232-USB 케이블은 반드시 컴파일 테크놀로지㈜<br />

에서 판매 및 권장하는 제품을 사용하시기 바랍니다.<br />

시중에는 검증되지 않은 방식을 사용한 컨버터 케이블<br />

이 많이 있으며, 이러한 제품들이 TinyPLC 과 호환성<br />

이 있는지 모두 검토되지 않았기 때문입니다.<br />

- 281 -


다운로드 시 발생되는 에러멧세지<br />

TinyPLC TPC9X User’s Manual<br />

1. RS232 통신에러입니다. 케이블상태나 전원상태, PC 의 통신 설정상태를 점검해보십시오.<br />

케이블을 연결하지 않았거나, TPC9X 코어모듈에 전원이 공급되지 않았을 경우, 또는<br />

PC 상의 통신포트 설정에 이상이 있는 경우 발생하는 에러 멧세지입니다.<br />

2. Ladder 에서 END 를 찾을 수 없습니다.<br />

소스파일 자체를 오픈하지 않았거나, LADDER 부에서 END 명령을 작성하지 않은<br />

경우입니다. 이 경우는 통신문제와는 관계없는 경우입니다.<br />

3. Ladder 컴파일 에러<br />

LADDER 부에서 문법상의 오류 및 회로 결선상의 오류가 있는 경우입니다. 이 경우는<br />

통신문제와는 관계없는 경우입니다.<br />

4. 존재하지 않는 RS232 포트입니다.<br />

PC 상의 COM 포트 셋업에 문제가 있는 경우이거나, 존재하지 않는 COM 포트를 선택한<br />

경우입니다. 앞에서 설명한 BIOS 셋업상태와 윈도우 시스템에서의 COM 포트 설정상태를<br />

점검해 보아야 합니다. 앞에서 설명한대로 설정했는데도 불구하고 똑 같은 에러가<br />

발생한다면 PC 전문가의 도움을 받아야 합니다. 이 에러는 TPC9X STUDIO 에서<br />

COM 포트를 찾지 못하는 문제이므로, TPC9X 하드웨어 상태와는 무관한 문제입니다.<br />

5. 체크섬 불일치 발생: 플레쉬 메모리의 일부가 손상되었습니다.<br />

TinyPLC 코어모듈 내부에 있는 플레쉬 메모리의 일부가 손상되거나, 다운로드 중 전원의<br />

불안이나 기타요인 등으로 인해, 제대로 플레쉬에 기입되지 못한 경우입니다. 이 경우 다시<br />

다운로드 하면 제대로 다운로드 될 수도 있습니다. 반복해서 같은 에러멧세지가 발생한다면<br />

메뉴상의 “펌웨어 다운로드”를 실행한 뒤 다시 해보시고, 그래도 안 된다면, TinyPLC<br />

코어모듈을 다른 것으로 교체하여 사용하시기 바랍니다. TinyPLC 내부에 있는 플레쉬<br />

메모리는 최대 10 만번까지 다운로드 가능하며, 그 이상 사용하였을 경우, 특정 메모리<br />

블록이 손상될 수 있습니다.<br />

6. 억세스 코드가 잘못되었습니다.<br />

TinyPLC 내부에 있는 “슈퍼바이저”칩이 손상된 경우입니다. 이 경우에도 펌웨어 다운로드를<br />

다시 해보시고, 그래도 안 된다면 TinyPLC 코어모듈을 다른 것으로 교체해야 합니다.<br />

- 282 -


TinyPLC TPC9X User’s Manual<br />

TinyPLC 기본회로<br />

TinyPLC 코어모듈이 동작하기 위해서 기본적으로 구성해주어야 하는 회로입니다.<br />

DC5V<br />

6<br />

7<br />

8<br />

9<br />

1<br />

2<br />

3<br />

4<br />

5<br />

Rx<br />

Tx<br />

DTR<br />

GND<br />

SOUT<br />

SIN<br />

ATN<br />

VSS<br />

SS_P0<br />

(Input_only)SCK_P1<br />

MOSI_P2<br />

MISO_P3<br />

P4<br />

PWM0_P5<br />

PWM1_P6<br />

PWM2_P7<br />

(CUNET)SCL_P8<br />

(CUNET)SDA_P9<br />

P10<br />

P11<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

13<br />

14<br />

15<br />

16<br />

17<br />

18<br />

19<br />

20<br />

21<br />

22<br />

23<br />

24<br />

25<br />

26<br />

27<br />

28<br />

29<br />

30<br />

31<br />

32<br />

VDD<br />

VSS<br />

RES<br />

N/C<br />

P16<br />

P17<br />

P18<br />

P19_PWM3<br />

P20_PWM4_INT0<br />

P21_PWM5_INT1<br />

P22_INT2<br />

P23_INT3<br />

P15_HCNT1<br />

P14_HCNT0<br />

P13<br />

P12<br />

TX1<br />

RX1<br />

AVDD<br />

N/C<br />

ADC0_P24<br />

ADC1_P25<br />

ADC2_P26<br />

ADC3_P27<br />

P47<br />

P46<br />

P45<br />

P44<br />

P43<br />

P42<br />

P41<br />

P40<br />

33<br />

34<br />

35<br />

36<br />

37<br />

38<br />

39<br />

40<br />

41<br />

42<br />

43<br />

44<br />

45<br />

46<br />

47<br />

48<br />

49<br />

50<br />

51<br />

52<br />

53<br />

54<br />

55<br />

56<br />

57<br />

58<br />

59<br />

60<br />

61<br />

62<br />

63<br />

64<br />

TTLTX1<br />

TTLRX1<br />

AVREF<br />

P48<br />

P31_ADC7<br />

P30_ADC6<br />

P29_ADC5<br />

P28_ADC4<br />

P32<br />

P33<br />

P34<br />

P35<br />

P36<br />

P37<br />

P38<br />

P39<br />

TPC91A<br />

VDD 단자에는 5V 를 VSS 단자에는 GND (0V)를 연결하십시오. 그리고 다운로드가<br />

가능하도록 PC 의 COM 포트와 SOUT, SIN, ATN 단자를 연결하십시오.<br />

코어모듈의 종류마다 VDD, VSS 의 위치가 다르므로, 핀아웃을 정확히 확인한 뒤 연결하시기<br />

바랍니다. 코어모듈에 따라서 여러 개의 VDD 와 VSS 가 있는 경우도 있습니다. 이 경우에는<br />

모든 VDD 를 5V 에 연결하고, 모든 VSS 를 GND 에 연결해야 합니다.<br />

- 283 -


TinyPLC TPC9X User’s Manual<br />

입출력 회로 구성법<br />

TinyPLC 코어모듈의 I/O 포트는 5V 신호를 입력받거나 출력할 수 있습니다. I/O 포트를<br />

INPUT 모드로 할것인지, OUTPUT 모드로 할것인지는 TPCworks 의 PLC SETUP 메뉴 에서<br />

지정해줍니다.<br />

다음은 I/O 포트에 출력소자인 LED 와 , 입력소자인 스위치, 볼륨 등을 연결하는 방법에 대한<br />

설명입니다.<br />

LED 연결회로<br />

TinyPLC 의 I/O 포트에 다음회로와 같이 LED 를 연결한 뒤, 해당 포트로 HIGH 를 출력하면<br />

LED 가 켜집니다.<br />

330 ohm<br />

I/O Port<br />

스위치 연결회로<br />

TinyPLC 의 I/O 포트에 다음회로와 같이 스위치를 연결한 뒤, 해당 포트로 INPUT 상태로<br />

만들고, 스위치를 누르면 HIGH 가 입력되고, 스위치를 누르지 않으면 LOW 가 입력됩니다.<br />

10Kohm<br />

I/O Port<br />

볼륨 연결회로<br />

TinyPLC 의 A/D 입력 가능한 I/O 포트에 다음회로와 같이 볼륨을 연결한 뒤, AD 변환을 거쳐<br />

볼륨의 상태를 읽어올 수 있습니다.<br />

10K ohm<br />

I/O Port<br />

- 284 -


TinyPLC TPC9X User’s Manual<br />

TinyPLC 코어모듈은 기본적으로 5V 로 구동됩니다. 5V 를 초과하는 전원전압을 I/O 로<br />

사용하고자 할 때에는 별도의 변환회로를 추가해주어야 합니다.<br />

RELAY 출력 회로<br />

TinyPLC I/O 포트에 릴레이를 연결하는 기본회로입니다. 포토커플러를 사용하여 24V 측과<br />

전원을 완전히 분리하였으므로, 24V 측의 노이즈 등이 5V 측으로 전달되지 않도록 구성된<br />

회로입니다. (LOAD 란 부하를 의미합니다.) RELAY 출력회로는 단지 접점회로에<br />

불과하므로, 외부에 별도의 전원을 구성해주어야 합니다.<br />

24V +<br />

+<br />

24V<br />

I/O Port<br />

1N4148<br />

RELAY<br />

+<br />

24V<br />

ZNR<br />

GND<br />

10K<br />

PC-18T1<br />

222<br />

24V -<br />

LOAD<br />

NPN TR 출력 회로<br />

NPN TR 을 포토커플러를 사용해서 5V 측 전원과 분리시켜 연결한 회로입니다.<br />

24V +<br />

I/O Port<br />

10K<br />

1N4148<br />

LOAD<br />

PC-18T1<br />

4.7K<br />

24V -<br />

DC24V 입력회로<br />

양극성 포트커플러를 사용해서 DC24V 의 입력신호가 들어오면 TPC9X 에 HIGH 가<br />

입력되는 회로입니다.<br />

I/O Port<br />

0.1uF 47K<br />

680<br />

22K<br />

KPC714<br />

2.2K (1W)<br />

100<br />

270<br />

+<br />

24V<br />

24V<br />

+<br />

5V<br />

- 285 -


AC220V 입력 회로<br />

AC220V 를 입력하면, TPC9X 에 HIGH 가 입력되는 회로입니다.<br />

TinyPLC TPC9X User’s Manual<br />

I/O Port<br />

0.1uF<br />

330<br />

50K<br />

47uF<br />

+<br />

82K<br />

AC220V<br />

2.2K<br />

22K<br />

PC-17T1<br />

GND<br />

5V<br />

베이스보드와 일체형보드<br />

대부분의 산업현장에서 사용하는 전기신호는 24V 나 110V / 220V 정도의 고전압신호입니다.<br />

이 신호를 TinyPLC 의 코어모듈에 연결하려면 최소한의 입출력 회로가 부가적으로<br />

요구됩니다.<br />

I/O확장회로 이외에도TinyPLC코어모듈이 동작하기 위해서는 5V를 생성하는 전원회로와<br />

PC와 통신을 위한 통신콘넥터등이 기본적으로 필요합니다. 이런 요소들을 모두 갖추고 있는<br />

제품군을 컴파일 테크놀로지 (www.comfile.co.kr)에서 구입하실 수 있습니다.<br />

BASE 보드 : NPN TR OUTPUT + DC24<br />

INPUT + DC24V POWER<br />

일체형 보드 : RELAY 출력 + DC24V<br />

INPUT + SMPS<br />

양산하기전 시제품 제작, 또는 소량 다품종 제품 제작에는 “베이스 보드’와 “일체형<br />

보드”등을 사용하시고, 대량생산시에는 위에서 설명한 입출력 회로를 갖춘 PCB 를 직접<br />

제작한뒤, TinyPLC 코어모듈만 구입해서 장착하는 방법으로 생산하시면 원가를 절감하실 수<br />

있습니다.<br />

- 286 -


TinyPLC TPC9X User’s Manual<br />

제 18 장<br />

응용 노트<br />

- 287 -


노트 1. 자기유지 (래치)회로<br />

TinyPLC TPC9X User’s Manual<br />

레더로직 (또는 시퀀스 회로)를 배울 때, 가장 먼저 배우는 회로입니다. 이 실험을 위해<br />

CUBLOC STUDY BOARD-1 을 사용했습니다. 다음과 같이 회로 (결선)을 구성하세요!<br />

CB280 모듈과 TinyPLC TPC91A 는 핀아웃이 일치하므로, CUBLOC STUDY BOARD-1 에서<br />

실험할 수 있습니다.<br />

TPC91A<br />

START 스위치를 누르면, 모터가 돌아가고, STOP 스위치를 누르면 모터가 정지하는 상황을<br />

가정해 본 것입니다. 모터의 동작은 P2 에 연결된 LED 로 확인할 수 있습니다.<br />

- 288 -


TinyPLC TPC9X User’s Manual<br />

PLC SETUP 에서 TPC91A 로 선택하시고, P0, P1 을 입력상태로 선택하세요. P2 는<br />

출력상태로 선택하세요.<br />

레더로직을 입력하신 뒤, RUN 보턴을 누르면 실행됩니다.<br />

- 289 -


TinyPLC TPC9X User’s Manual<br />

P0 스위치를 누르면 P2 LED 에 불이 들어오고, P1 스위치를 누르면, P2 스위치에 불이<br />

꺼집니다. 이것이 바로 자기유지 입니다. P2 의 상태를 붙잡아 놓을 수 있다고 해서 “자기<br />

유지”라고 합니다. 타이밍 차트로 보면 더욱 쉽게 알 수 있습니다.<br />

레더를 보면 출력으로 사용한 P2 릴레이를 입력에서 사용한 것을 볼 수 있습니다. 이처럼<br />

레더로직에서는 출력 릴레이를 입력으로 사용하는 것이 가능합니다. 출력 릴레이를<br />

입력으로 사용할 경우, 출력을 상태를 가지고 있게 됩니다. 출력 상태를 변화시키지는<br />

못하지만, 출력상태가 무엇인지는 알 수 있는 것입니다.<br />

- 290 -


TinyPLC TPC9X User’s Manual<br />

노트 2. 인터록 회로<br />

한 회로가 동작 중일 때 다른 회로의 동작을 막아주는 회로를 “인터록”회로 라고 합니다. 이<br />

것을 설명하기 위해 2 개의 자기유지 회로가 있는 레더로직을 만들어 보겠습니다.<br />

TPC91A<br />

PLC SETUP 에서 P0, P1, P3, P4 를 INPUT 으로 P2, P5 를 OUTPUT 으로 셋팅합니다. 그리고<br />

다음 레더로직을 입력후 실행시켜 보세요.<br />

두개의 자기유지회로가 동작되는 것을 확인해 보세요.<br />

- 291 -


이 회로에 약간의 수정만 더 하면, “인터록”회로를 구성할 수 있습니다.<br />

TinyPLC TPC9X User’s Manual<br />

이렇게 한다면, 어느 한쪽이 동작 중일 때 다른 한쪽은 동작할 수 없는 상태가 됩니다. 이처럼,<br />

여러 개의 회로간에 서로 조건을 추가하여 동작을 금지시키거나, 동작이 되도록 만드는<br />

회로를 “인터록”회로라고 부릅니다.<br />

- 292 -


TinyPLC TPC9X User’s Manual<br />

노트 3. 스위칭 회로<br />

한 개의 보턴으로 한번 누르면 출력이 ON 되고, 한번 더 누르면 출력이 OFF 되는 회로입니다.<br />

일종의 TOGGLE 동작이라고 할 수 있습니다. 다음과 같이 회로를 구성하세요.<br />

TPC91A<br />

CUBLOC STUDY BOARD-1 이 있으신 분은 다음과 같이 결선하십시오.<br />

한번 누르면 모터가 돌아가고, 한번<br />

더 누르면 모터가 멈추는 상황을<br />

생각하시면 됩니다.<br />

- 293 -


PLC SETUP 에서 P0 을 INPUT 으로 P2 를 OUTPUT 으로 설정하세요.<br />

TinyPLC TPC9X User’s Manual<br />

아래와 같은 레더로직을 작성하고, 실행시켜 보세요. P0 스위치를 누르면 LED 에 불이<br />

들어오고, 다시 한 번 누르면 LED 에 불이 꺼집니다.<br />

이 동작을 타이밍 차트로 표현하면 다음과 같습니다.<br />

<br />

- 294 -


TinyPLC TPC9X User’s Manual<br />

부록<br />

ASCII 코드표<br />

ASCII 코드로 영문자 A 는 &H41 이고, 숫자 0 은 &H30 입니다.<br />

코드 문자 코드 문자 코드 문자 코드 문자<br />

00H NUL 20H SPACE 40H @ 60H `<br />

01H SOH 21H ! 41H A 61H a<br />

02H STX 22H “ 42H B 62H b<br />

03H ETX 23H # 43H C 63H c<br />

04H EOT 24H $ 44H D 64H d<br />

05H ENQ 25H % 45H E 65H e<br />

06H ACK 26H & 46H F 66H f<br />

07H BEL 27H ‘ 47H G 67H g<br />

08H BS 28H ( 48H H 68H h<br />

09H HT 29H ) 49H I 69H I<br />

0AH LF 2AH * 4AH J 6AH j<br />

0BH VT 2BH + 4BH K 6BH k<br />

0CH FF 2CH , 4CH L 6CH l<br />

0DH CR 2DH - 4DH M 6DH m<br />

0EH SO 2EH . 4EH N 6EH n<br />

0FH SI 2FH / 4FH O 6FH o<br />

10H DLE 30H 0 50H P 70H p<br />

11H DC1 31H 1 51H Q 71H q<br />

12H DC2 32H 2 52H R 72H r<br />

13H DC3 33H 3 53H S 73H s<br />

14H DC4 34H 4 54H T 74H t<br />

15H NAK 35H 5 55H U 75H u<br />

16H SYN 36H 6 56H V 76H v<br />

17H ETB 37H 7 57H W 77H w<br />

18H CAN 38H 8 58H X 78H x<br />

19H EM 39H 9 59H Y 79H y<br />

1AH SUB 3AH : 5AH Z 7AH z<br />

1BH ESC 3BH ; 5BH [ 7BH {<br />

1CH FS 3CH < 5CH ₩ 7CH |<br />

1DH GS 3DH = 5DH ] 7DH }<br />

1EH RS 3EH > 5EH ^ 7EH ~<br />

1FH US 3FH ? 5FH _ 7FH DEL<br />

- 295 -


CUBLOC STUDY BOARD 회로도<br />

TinyPLC TPC9X User’s Manual<br />

TPC91A 와 CB280 은 PIN-TO-PIN 호환성이 있으므로, 실험하는 목적으로 큐블록<br />

스터디보드를 사용할 수 있습니다. 큐블록 스터디 보드는 큐블록을 보다 쉽게 공부할 수<br />

있도록 만든 제품입니다. 큐블록 실험 실습에 필요한 전원회로, 통신회로, LED, 스위치, 볼륨<br />

등을 내장하고 있으며, 브레드보드를 사용해서 납땜작업 없이 와이어 선만으로도<br />

회로구성이 가능합니다. 그 외 ALCD, CuNET 포트 등도 내장하고 있습니다. 스터디보드는<br />

각각의 모듈 별로 독립된 회로로 구성되어 있어, 유저가 와이어 선으로 배선을 해주어야<br />

제대로 된 동작을 할 수 있습니다. 다음은 큐블록 스터디보드의 구성입니다.<br />

PIEZO<br />

(1) RS232 CH1<br />

Contact<br />

(2) CB280 TX/RX<br />

Contact<br />

Reset Switch<br />

Download Port<br />

Contact<br />

(LED, S/Ws)<br />

(3)ALCD<br />

Connector<br />

I/O Ports<br />

Contact<br />

CuNET<br />

(4)CuNET<br />

Jumper<br />

Bread Board<br />

DC 9V INPUT<br />

RS232 CHANNEL 1<br />

POWER S/W<br />

DC 9V 입력에 DC 아답터를 연결하면, STUDY BOARD 안에 있는 5V 레귤레이터 회로에<br />

의해서 5V 가 공급됩니다. DC 아답터 잭은 극성에 상관없이 사용할 수 있습니다. 안정된<br />

회로동작을 위해서 반드시 9VDC 아답터 (200mA 이상) 를 사용하시기 바랍니다.<br />

- 296 -


TinyPLC TPC9X User’s Manual<br />

(1) RS232 채널 1 콘텍포인트: 뒷번에 있는 RS232 연결 잭을 사용하기 위해서는 이곳에 선을<br />

연결해 주어야 합니다. 큐블록 코어 모델에 따라 RS232 채널 1 핀의 위치가 다릅니다.<br />

(2) CB280 코어모듈에서 RS232 채널 1 의 RX,TX 단자입니다. 이 곳을 다음 그림처럼<br />

연결해주는 것 만으로 CB280 에서 RS232 채널 1 을 사용할 수 있습니다.<br />

TX<br />

RX<br />

TX<br />

RX<br />

(3) ALCD 는 RS232 를 입력 받는 LCD 모듈입니다. ALCD 를 사용하기 위해서는 RS232<br />

CH1 의 출력을 이곳에 연결한 뒤 사용해야 합니다.<br />

TX<br />

RX<br />

ALCD<br />

(4) CuNET 을 사용하기 위해서는 이 점퍼를 모두 SHORT 상태로 두어야 합니다. 만약<br />

CuNET 을 사용하지 않고, 8,9 번 포트를 일반 I/O 로 사용하려면 이 점퍼를 모두 OPEN 상태로<br />

두어야 합니다.<br />

- 297 -


다음은 CUBLOC STUDY BOARD 1 의 회로도입니다.<br />

TinyPLC TPC9X User’s Manual<br />

- 298 -

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!