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 -