File: PRO1_11E.1 차례 교육목표... 2 데이터저장영역... 3... 4 STEP 7 에서의데이터타입... 5 기본데이터타입.... 6 복합데이터타입... 7 ARRAY 예... 8 STRUCTURE 예... 9 어드레스우선권정의... 10 생성... 11 초기값, 실제값, 초기화, 유지... 12 입력, 저장, 다운로드, 모니터링... 13 데이터어드레싱.... 14 데이터엑세스... 15 연습문제 1: HMI 인터페이스로서의 (DB99)... 16 연습문제 1: 태그관리 + 구동블록...... 17 페이지 1
교육목표... 글로발을이해합니다.... 기본데이터타입과복합데이터타입을이해합니다... 을모니터링합니다.... 변수사용을이해합니다. File: PRO1_11E.2 페이지 2
데이터저장영역 File: PRO1_11E.3 개요 사용자프로그램은프로그램로직과더불어프로세스상태와신호등의정보를포함하는데이터들로구성되어있습니다. 이데이터는사용자프로그램의명령문에의해처리됩니다. 데이터는사용자프로그램의변수에저장이되며그종류는다음과같습니다. - 저장장소 ( 어드레스 : PII, PIQ, 비트메모리, L 스택, DB 등 ) - 데이터타입 ( 기본혹은복합데이터타입, 파라미터타입 ) 엑세스타입에따라다음데이터들이구분됩니다. - 글로발변수 - 글로발심벌테이블이나글로발에서선언됩니다. - 지역변수 - OB, FB, FC 의선언테이블에서선언됩니다. 변수는프로세스이미지, 비트메모리영역혹은에영구적으로저장됩니다. 또한블록이실행이되면변수는 L 스택에생성됩니다. 로컬데이터스택로컬데이터스택 (L 스택 ) 은다음을위한저장공간영역으로사용됩니다. -OB 블록의시작정보를포함하는 Temporary 변수 -FC 호출시파라미터에정의되는실제어드레스 -LAD 프로그램에서의중간로직결과데이터이에대한자세한내용은 "Function 과 Function Blocks" 장을참조하십시오. 사용자프로그램은데이터값을저장할때을이용합니다. Temporary 데이터와는다르게의데이터는로직이블록이실행을마치거나 DB 가닫히게되었을때 Overwrite 되지않습니다. 페이지 3
OB1 Function FC10 Function FC20 모든블록에서엑세스가능 글로발 ( 공유 ) 데이터 DB20 Function Block FB1 FB1 의인스턴스 DB 인스턴스데이터 DB5 File: PRO1_11E.4 개요 사용 은사용자데이터를저장하는데사용됩니다. 로직블록처럼사용자메모리의영역을차지합니다. 은사용자프로그램에서사용되는변수데이터 ( 숫자값등 ) 를저장합니다. 사용자프로그램은에서비트, 바이트, 워드혹은더블워드형식으로데이터를엑세스할수있습니다. 심벌어드레스혹은절대어드레스가사용됩니다. 은그안에담긴데이터의용도에따라두가지로사용됩니다. 아래와같은이있습니다. - Shared ( 공유 ) : OB1 을포함하는모든로직블록에서엑세스할수있습니다. - 인스턴스 : 이은항상특정 FB 에할당됩니다. 인스턴스데이타블록은 "Function 과 Function Blocks" 단원에서좀더자세히다루어집니다. DB 생성 레지스터 DB 는프로그램편집기나 UDT(User-Defined data type) 를만들어서생성할수있습니다. 인스턴스은 FB 를호출할때생성됩니다. CPU 는 DB, DI 두개의데이터레지스터블록이있습니다. 사용자는동시에두개의을오픈할수있습니다. 이주제는고급과정에서다루어집니다. 페이지 4
STEP 7 에서의데이터타입 기본데이터타입 (32 비트까지 ) 비트데이터타입 (BOOL, BYTE, WORD, DWORD, CHAR) 수학적연산데이터타입 (INT, DINT, REAL) 시간타입 (S5TIME, TIME, DATE, TIME_OF_DAY) 복합데이터타입 (32 비트이상 ) 시간타입 (DATE_AND_TIME) 어레이 (ARRAY) 구조체 (STRUCT) 문자열 (STRING) 사용자정의데이터타입 (32 비트이상 ) 데이터타입 (UDT) (User DefinedData-Type) File: PRO1_11E.5 개요 기본데이터타입 데이터타입은데이터의속성을결정합니다. 즉하나의데이터나혹은관련데이터들이어떻게표현이되는지그리고데이타값의표현허용범위가어떻게되는지를결정합니다. 데이터타입은어떤명령어를사용할수있는지도결정합니다. 기본데이터타입은 IEC 1131-3 에따라사전에정의됩니다. 데이터타입은필요한메모리크기를결정합니다. 예를들어워드데이터는사용자메모리에서 16 비트를차지합니다. 기본데이터타입은 32 비트를결코넘지않고 S7 프로세서의어큐뮬레이터에로드되며 STEP 7 기본명령어로처리될수있습니다. 복합데이터타입복합데이터타입은글로발에서선언된변수에서만사용될수있습니다. 복합데이터타입은 Load 명령어로어큐뮬레이터에완벽하게로드될수없습니다. 복합데이터타입을처리하려면라이브러리 ("IEC" S7 Program) 에있는표준블록을사용해야합니다. 사용자정의데이터타입 (UDT) 사용자정의데이터타입은에서데이터를정의하거나변수선언테이블에서데이터타입을정의할때템플레이트로사용될수있습니다. UDT 를생성하려면편집기를사용해야합니다. UDT 의구조에는기본데이터타입혹은복합데이터타입을포함됩니다. 페이지 5
기본데이터타입 타입길이 ( 비트 ) 예변수 BOOL 1 True 혹은 false I 1.0 BYTE 8 B#16#A9 MB70 WORD 16 W#16#12AF MW72 DWORD 32 DW#16#ADAC1EF5 QD40 CHAR 8 ' w ' DBB4 S5TIME 16 S5T#5s_200ms MW30 INT 16 123 #Value DINT 32 L#65539 MD80 REAL 32 1.2 or 3.45E-11 DBD60 TIME 32 T#2D_1H_3M_45S_12MS QD44 DATE 16 D#1993-01-20 MW32 TIME_OF_DAY 32 TOD#12:23:45.12 #Time File: PRO1_11E.6 Bool, Byte, Word, DWORD, CHAR S5TIME 데이터타입의변수는하나의비트로이루어집니다. Byte, Word, Dword 데이터타입은 8, 16, 32 비트열로이루어져있습니다. 이러한데이터타입에서각각의비트를취급하는것은의미가없습니다. 이러한데이터타입의특별한형태는 BCD 값과카운터명령어에서의카운터값입니다. CHAR 데이터타입은 ASCII 코드의문자를나타냅니다. S5TIME 데이터타입의변수는타이머에서타임값을지정할때사용합니다. 형식은 S5T# 을앞에쓰고뒤에타임설정값을쓰면됩니다. 시간값은시, 분, 초, 밀리초로지정합니다. 타입값은언더스코어 (1h_4m) 를쓰거나혹은언더스코어 (1h4m) 없이사용할수있습니다. 라이브러리에서의 FC 33 과 FC 40 은 S5TIME 을 TIME 으로변환을시키거나 TIME 을 S5TIME 으로변환시킬때사용됩니다. INT, DINT, REAL 이러한데이터타입의변수들은수학적연산에서사용되는숫자들입니다. TIME DATE TIME_OF_DAY 데이터타입 TIME 의변수는더블워드를차지합니다. 이변수는 IEC 타이머의타임값으로사용됩니다. 변수의내용은 DINT 로밀리초까지양수혹은음수로표현이됩니다. ( 예를들면 T#1S=L#1000, T#24d20h31m23s647ms = L#2147486470) DATE 데이터타입의변수는부호없는정수로저장됩니다. 변수의내용은 01.01.1990 이후의숫자로된날짜를표현합니다. ( 예를들면 D#2168-12-31) TIME_OF_DAY 데이터타입의변수는더블워드입니다. 이변수는부호없는정수의형태이며밀리초단위로날의시작 (0:00 oclock) 에서부터표현됩니다. ( 예를들면 TOD#23:59:59:999 = DW#16#0526 5B77) 페이지 6
복합데이터타입 타입길이 ( 비트 ) 예 DATE_AND_TIME 64 DT#01-08-24-12:14:55:234-1 STRING 8 * ( 문자수 + 2) This is a string ( 최대 254 문자열 ) SIEMENS ARRAY 사용자가정의 Measured value : ARRAY[1..20] ( 동일한데이터타입의 INT 그룹 ) STRUCT 사용자가정의 Motor: STRUCT ( 다른데이터타입의 Speed : INT 그룹 ) Current : REAL END_STRUCT UDT 블록 UDT 어레이 UDT (User Defined Data Type = 사용자가정의 STRUCT 기본데이터타입이나복합 Speed : INT Drive: ARRAY[1..4] 데이터타입으로이루어진 Current : REAL UDT1 템플레이트 ) END_STRUCT File: PRO1_11E.7 복합데이터타입 복합데이터타입 (Array 와 Structure) 은기본데이터혹은복합데이터들의그룹으로이루어집니다. 이러한데이터타입으로많은양의데이터를구조화하거나그것들을하나의심벌로처리할수있습니다. 복합데이터타입 (32 비트이상 ) 은 STEP 7 명령어로한번에모든것을처리할수는없습니다. 한번에하나의명령어만이처리될수있습니다. 복합데이터타입은사전에정의됩니다. DATE_AND_TIME 데이터타입은 64 비트의길이를갖습니다. ARRAY, STRUCT, STRING 데이터타입의데이터길이는사용자에의해정의됩니다. 복합데이터타입의변수는글로발에서혹은로직블록에서의지역변수로만정의될수있습니다. 사용자정의데이터타입사용자정의데이터타입은사용자스스로가정의하는데이터구조를말합니다. 구조는 UDT 블록에정의되며 (UDT 1 에서 UDT 65535) 다른변수데이터타입에서의템플레이트로사용될수있습니다. 동일한구조를여러번사용하고자할때이데이터타입을에입력하면키보드로입력하는시간을줄일수있습니다. 예 : 에서 10 번동일한구조가필요합니다. 먼저, UDT 를생성하고데이터구조를정의한후저장합니다 ( 예를들면 UDT 1 으로저장합니다 ). 그런후글로발 DB 를생성하고 ARRAY[1..10] 타입의변수를정의합니다. 다음줄에서사용자가사전에정의한 UDT 를입력합니다. 이렇게정의하면하나의에서 10 개의데이터구조를생성할수있습니다. 각데이터구조는 UDT 1 에서정의한구조를갖습니다. 페이지 7
ARRAY 예 Measuring_point 1. Measuring_point, data type Real 2. Measuring_point, data type Real 3. Measuring_point, data type Real 10. Measuring_point, data type Real "Measuring_point" 라는이름의어레이 ( 동일한데이터타입의데이터그룹 ) 프로그램편집기에서의 Array 예 (DB 2): File: PRO1_11E.8 Array DB에서의 array 정의 Initial Value ( 초기값 ) Data View Array 는위슬라이드에서처럼동일한타입의데이터로이루어져있습니다. REAL 데이터타입으로정의된 "Measuring_point" array 를볼수있습니다. 이후로여러측정값들이이 Array 에저장될것입니다. Array 에서키보드로입력하는문자는 "Array [n..m]" 입니다. 처음숫자 (n) 와마지막숫자 (m) 은대괄호로지정됩니다. 위예에서 [1..10] 는 10 개의데이터를의미하며첫번째데이터는 [1] 로또마지막데이터는 [10] 으로정의됩니다. [1..10] 대신에 [0..9] 로정의할수있습니다. 이경우첫번데이터는 [0] 로, 마지막데이터는 [9] 로정의됩니다. 입력된값은첫번데이터값을의미합니다. 콤마로구분된값들은차례로정렬된값들을의미합니다. 각항목에저장된실제값을보려면 View -> Data View 메뉴로화면을전환하면됩니다. "Data View" 에서 "Actual Value" 컬럼에저장된현재값을볼수있습니다. 페이지 8
Motor_data Speed, data type Integer Rated_current, data type Real Starting_current, data type Real Direction, data type Bool STRUCTURE 예 "Motor_data" 라는이름의구조체 ( 여러데이터타입으로이루어진데이터그룹 ) 프로그램편집기에서의 Structure 예 (DB 1): File: PRO1_11E.9 구조체 이슬라이드는 "Motor_data" 라는이름의구조체예를보여줍니다. 구조는여러데이터타입으로이루어진데이터그룹을의미합니다. 구조체에서의개별데이터는기본데이터타입이나복합데이터타입이될수있습니다. 구조체에서의개별데이터에대해엑세스할때는구조체이름을포함하게됩니다. 이는프로그램을읽기쉽게만들어줍니다. 데이터를심벌로엑세스할수있게하려면에심벌이름을주어야합니다. 예를들면 "Drive_1" 등으로심벌이름을주어야합니다. 예 : 명령어 "L" 을사용하여구조체의데이터를엑세스하려면다음과같이하면됩니다. L "Drive_1".Motor_data.rated_current L "Drive_1".Motor_data.speed 포맷은블록의심벌이름, 도트, 구조체이름, 도트, 데이터이름순입니다. 심벌블록이름 ("Drive_1") 에는인용부호가있어서이름이글로발심벌편집기에서나온것임을가르쳐줍니다. 구조체이름과데이터이름은인용부호를사용하지않습니다. 이는그것들이에서정의된것이지글로발심벌편집기에서비롯된것이아니기때문입니다. DB 에서의구조체정의 구조체를정의할때는 "STRUCT" 를사용합니다. 구조체의마지막에는 "END_STRUCT" 라고해야합니다. ( 예 : "Motor_data") 페이지 9
어드레스우선권정의 File: PRO1_11E.10 어드레스우선권정의 ( 심벌 / 절대어드레스 ) 어드레스우선권은심벌테이블을변경할때와의파라미터이름이나 Function Block 의파라미터이름을변경할때또는 UDT 나멀티인스턴스와관련된콤포턴트이름을변경하고자할때프로그램을한번만바꾸면될수있게해줍니다. 절차 참조 SIMATIC Manager 에서블록폴더를선택한다음어드레스우선권을정의하기위해 Edit -> Object Properties 메뉴를선택합니다. "Address Priority" 탭에서설정합니다. Symbol has priority, Recommended for symbolic programming 블록을오픈하거나 Generating souces 기능을수행하고자할때모든어드레스는심벌어드레스와함께디스플레이됩니다. "block consistency" 가체크가되면블록은컴파일이되고어드레스의심벌은최종적으로저장된형태로남아있게됩니다. 페이지 10
생성 File: PRO1_11E.11 DB 생성 Share DB ( 공유 DB) 새로운은 SIMATIC Manager 에서 S7 Program 블록폴더를선택한다음위슬라이드와같은메뉴를선택합니다. LAD/STL/FBD 편집기에서는다음과같은메뉴를사용하여새로운을생성할수있습니다. File -> New -> Project 와 Project Name 선택 -> S7 program 폴더선택 -> Object Name : DB 99 Shared DB 는글로발데이터를저장하기위해사용됩니다. 즉모든로직블록 (OB, FB, FC) 에서엑세스될수있는일반데이터를저장하는데사용됩니다. 사용자는글로발을정의해서사용해야하며필요한데이터를정의하면됩니다. Instance DB ( 인스턴스 DB) Instance DB 는 FB 을위한메모리영역을의미합니다. FB 의파라미터와 Static 변수는인스턴스 DB 에의해관리됩니다. 인스턴스의내용은사용자에의해정의되는것이아니라편집기에의해생성이됩니다. (Function 과 Function Blocks 단원을참조하십시오 ) DB 타입 은 User Defined Data Type(UDT) 로도생성될수있습니다. UDT 에서과같이정의를하고이것을템플레이트처럼사용하면됩니다. UDT 는추가적인혹은변수파라미터와블록파라미터를생성하는템플레이트처럼사용될수있습니다. 페이지 11
초기값, 실제값, 초기화, 유지 로드메모리 워크메모리 DB DB 초기값 + 실제값 DB 실제값 CPU 와 STEP 7 프로그램 초기값 PG 로업로드 + 실제값 초기화 메모리리셋이있기전까지 DB 데이터는유지됨 CPU 구동시 (STOP 에서 RUN 으로전환시 ), DB 데이터는초기로딩상태로리셋됩니다. File: PRO1_11E.12 Initial Value ( 초기값 ) 에처음으로데이터를정의하고 DB 를처음저장할때초기값을지정할수있습니다. Initial Value 를지정하지않으면해당데이터타입에맞는 0 값이자동적으로입력됩니다. Intial Value 를정의하려면 Declaration View 모드로들어가야합니다. Actual Value ( 실제값 ) 이것은의현재값입니다. 실제값은 Data View 모드에서오프라인상에서혹은프로그램으로변경될수있습니다. 이 CPU 에서프로그램로더 (PG) 로업로드가되면은실제값 (Actual Value) 을가지고업로드됩니다. Initialization 이기능을사용하면실제값 (Actual Value) 을 Initial Value 로오버라이트 (overwrite) 할수있습니다. 이를위해서는 Data View 모드로간후 Edit -> Intialize Data Block 메뉴를사용해야합니다. 메모리유지유지 : 에저장된값들은메모리가리셋이되기전까지유지됩니다. 비유지 : 이기능을만들려면 CPU 가 DB 의유지속성을지원해야합니다. 비유지속성의이 CPU ( 예 : CPU 317 V2.1) 의유지메모리에저장이되지않으면전원이 OFF 되었다가 ON 이되거나 CPU 가 STOP 이되었다가 RUN 이되었을때초기값으로리셋이됩니다. 비유지속성으로할당된 DB 는워크메모리를차지하나유지메모리부분은그렇지않습니다. Cold Restart (CPU 318 이나 S7-400) 기능으로모든은 Initial Value 로리셋됩니다. 참조 사용자는모든의속성에서유지설정부분을발견할수있습니다 (General Part 2 탭 ) S7 CPU 의메모리개념에대한자세한내용은 "Documenting, Saving and Archiving) 을참조하십시오. 페이지 12
입력, 저장, 다운로드, 모니터링 선언부보기 (Declaration View) 데이터보기 (Data View) File: PRO1_11E.13 Declaration View ( 데이터정의 ) 은 "declaration view" 에서정의될수있습니다. 즉사용자는데이터를저장하는데필요한변수를선언합니다. 변수는테이블에서컬럼과행의형태로정의됩니다. 컬럼각컬럼은다음과같은의미를갖고있습니다. -Address-프로그램편집기에서입력이되는부분. 변수가차지하는첫번째바이트어드레스를의미합니다. - Name - 변수의심벌이름 -Type-데이터타입 (INT, REAL...) 오른쪽마우스버튼으로선택 - Inital Value - 변수의초기값을의미하며이처음생성될때정의됩니다. 값이입력되지않으면편집기는자동적으로 0 이입력됩니다. - Comment - 변수의주석을기록하는데사용됩니다 ( 옵션사항 ) Save Diskette 아이콘을사용하여프로그래밍로더 (PG) 의하드디스크에저장합니다. Dowload 로직블록들처럼을 CPU 에다운로드합니다. Data View Initialize DB 온라인으로에있는변수들의현재값들을모니터합니다 (CPU 의변수값 ) 이를위해서는일단 "View" 메뉴로돌어가서 "Data View" 로전환을하고안경표시가있는아이콘을누르면됩니다. 을초기화하면현재값을 Initial Value 로 overwrite 할수있습니다. 이는나중에변경된 inital value 가실제값으로입력될때필요합니다. 메뉴로들어가려면 View -> Data View -> Edit -> Initalize Data Block 으로들어갑니다. 페이지 13
데이터어드레싱 8 Bits 7 0 Data Byte 0 DBB 0 Data Byte 1 DBW 0 Data Byte 2 DBD 0 Data Byte 3 DBX 4.1 DBD 2000 DBW 2002 DBB 2003 File: PRO1_11E.14 개요사용자는의데이터들을바이트별로어드레싱할수있습니다. Load 와 Transfer 기능으로바이트데이터, 워드데이터, 더블워드데이터를전송할수있습니다. 워드데이터를전송하려면첫번째바이트어드레스 ( 예 : L DBW 2) 를지정하면이바이트와그다음바이트가워드포맷으로전송됩니다. 더블워드에서첫번째바이트에서시작하여 4 개바이트가전송됩니다. 데이타블록번호와길이사용할수있는의번호는 CPU 에따라다릅니다. 자세한내용은 CA01 카다로그를참조하십시오. 참조 존재하지않는데이터나을엑세스하면 "Area Length" 시스템오류가발생하고해당 OB 가없으면 CPU 는 STOP 상태로전환됩니다. 페이지 14
DB 18 "Parts" Addr. 이름타입 데이터엑세스 기존엑세스방식 절대어드레싱 안전한방식 심벌어드레싱 0.0 Act_Quantity INT 2.0 FL_Aux BOOL OPN "Parts" L DBW0 or L DB18.DBW0 or L "Parts". ACT_Quantity 4.0 Number INT 6.0 Weight[1] REAL OPN DB 18 A DBX2.0 OPN "Parts" T DBW 4 or A DB18.DBX2.0 or A "PARTS".FL_Aux or T DB18.DBW4 or T "Parts".Number 10.0 Weight[2] REAL OPN DB 18 L DBD 10 or L DB18.DBD10 or L "Parts".Weight[2] File: PRO1_11E.15 기존의엑세스 기존의엑세스 ( 예 : S5 에서의엑세스 ) 에서은엑세스되기전에오픈이되어야합니다. 이는 OPN DB 18 혹은 OPN "Part" 처럼절대 DB 번호혹은심벌 DB 번호를써서오픈을시킵니다. 다른이열려있으면그은자동적으로닫히게됩니다. 그후각데이터들은매번을지정해주지않고비트 (DBX) 바이트 (DBB) 워드 (DBW) 더블워드 (DBD) 별로엑세스될수있습니다. 단점 - 데이터를엑세스할때정확한이오픈이되어야만합니다. - 엑세스는절대어드레스만지원이됩니다. 프로그래머는의정확한데이터를엑세스해야만합니다. 위예처럼 DBW5 가로딩이되면 Number 변수값이나 Weight[1] 변수의값이로딩이되고결국틀린값이로딩이됩니다. - 절대어드레스엑세스는정확한데이터입력을어렵게만들며프로그램을해독하기힘들게합니다. 정확한엑세스 절대어드레스엑세스 심벌어드레스엑세스 정확한엑세스는이미오픈된 DB 를닫히게만드는 DB 입니다. 이는데이터를절대어드레스와심벌어드레스로엑세스하게해줍니다. 절대어드레스엑세스는명령어로을오픈하고데이터를엑세스하는것입니다. 단점은기존의방식과비슷하다는것입니다. 에서변수를심벌어드레스로엑세스하는것은과그안에있는데이터가심벌로엑세스할수있을때가능합니다. 편집기에서절대어드레싱과심벌어드레싱이혼합된형태를지원해줍니다. 그러나모든입력이확인된후에완벽하게심벌형태로전환됩니다. 페이지 15
연습문제 1 : HMI 인터페이스로서의 (DB99) 전송인터페이스로서의 File: PRO1_11E.16 과제 절차 이연습문제의목적은터치패널의태그에연결된모든비트메모리를 HMI 인터페이스 DB 99 에선언된데이터로교체시키는것입니다. 현재프로그램의기능은동일합니다. 1. DB 99 을전송인터페이스로생성하십시오. 위슬라이드에보이는구조로생성하십시오. 은심벌이름 "HMI_Interface" 으로할당됩니다. LAD/STL/FBD 편집기에서메뉴옵션을선택하십시오. File ->New -> Project 와 Project Name 을선택 -> S7 Porgram 폴더를선택 -> Object Name : DB 99 2. FC 15 와 16 블록에서모든비트메모리를 DB 99 "HMI_Interface" 에서의해당선언데이터로바꾸십시오. 3. FC 18 블록에서 "Set point" 양과실제양을 DB 99 에저장하십시오. 참조 LAD/STL/FBD 에서 Edit -> Find and Replace 메뉴를사용하거나 SIMATIC Manager 에서 Rewiring 메뉴를사용하십시오. 이를위해서는블록폴더를선택하고 Options -> Rewiring 메뉴를동작시키십시오. 그후 "Old Address" 와 "New Address" 를입력하고 OK 를누르십시오. 페이지 16
연습문제 1 : 태그관리 + 구동블록 연습문제전의상태 연습문제이후의상태 File: PRO1_11E.17 힌트 1. 태치패널구성중태그관리에서새로운인터페이스을조정해야 합 니다. TIA 개념하에서프로젝트관련 S7 심벌테이블을사용하십시오. 2. 도움을위해이페이지의태그관리연습문제이후에초기상태와그로인한결과상황이주어질것입니다. 3. OB 100 에서 T_System_Off 신호 (DB99.DBX0.2) 에대한 NC 상태를만드는것을잊지마십시오. 페이지 17