사용자 도구

사이트 도구


products:mp_studio:indexed_address

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

다음 판
이전 판
products:mp_studio:indexed_address [2026/11/11 02:36] – 만듦 - 바깥 편집 127.0.0.1products:mp_studio:indexed_address [2026/11/12 20:37] (현재) – 바깥 편집 127.0.0.1
줄 45: 줄 45:
 | ''R5[D0]'' | ''D0'' = 2 | ''R7'' | | ''R5[D0]'' | ''D0'' = 2 | ''R7'' |
  
-인덱스에 숫자를 적으면 고정 주소로 바뀝니다. ''D100[3]''은 ''D103''으로, ''DD100[3]''은 ''DD106''으로, ''R5[2]''는 ''R7''로 적히고 «D100[3] 을(를) D103(으)로 적었습니다.»처럼 알림이 표시됩니다.+인덱스에 숫자를 적으면 고정 주소로 바뀝니다. ''D100[3]''은 ''D103''으로, ''DD100[3]''은 ''DD106''으로, ''R5[2]''는 ''R7''로 적히고 «D100[3]을(를) D103(으)로 적었습니다.»처럼 알림이 표시됩니다.
  
 {{ :products:mp_studio:ix-fold.png?900 |그림 1. MOVE의 IN에 D100[3]을 적어 D103으로 바뀐 칸과 알림 }} {{ :products:mp_studio:ix-fold.png?900 |그림 1. MOVE의 IN에 D100[3]을 적어 D103으로 바뀐 칸과 알림 }}
줄 66: 줄 66:
  
 ^ 분류 ^ 인덱스 주소를 쓸 수 있는 칸 ^ ^ 분류 ^ 인덱스 주소를 쓸 수 있는 칸 ^
-| Comparison | 비교 펑션의 IN1ㆍIN2, 접점 칸에 적은 비교(예: ''D100[D0]>D9'') | +| 비교 | 비교 펑션의 IN1ㆍIN2, 접점 칸에 적은 비교(예: ''D100[D0]>D9'') | 
-| Conversion | ''H2D''ㆍ''D2H''ㆍ''INV''ㆍ''NEG''의 INㆍOUT | +| 변환 | ''H2D''ㆍ''D2H''ㆍ''INV''ㆍ''NEG''의 INㆍOUT | 
-| Math | ''ADD''ㆍ''SUB''ㆍ''MUL''ㆍ''DIV''의 모든 칸, ''INC''ㆍ''DEC'', ''SCALE''의 여섯 칸, ''FLOOR''ㆍ''SQRT'' | +| 수학 | ''ADD''ㆍ''SUB''ㆍ''MUL''ㆍ''DIV''의 모든 칸, ''INC''ㆍ''DEC'', ''SCALE''의 여섯 칸, ''FLOOR''ㆍ''SQRT'' | 
-| Counter | ''CTU''ㆍ''CTD''ㆍ''CTUD''의 SET VALUE, ''HCNT''ㆍ''ENCODER''ㆍ''ENMOV''ㆍ''HRST'' | +| 카운터 | ''CTU''ㆍ''CTD''ㆍ''CTUD''의 SET VALUE, ''HCNT''ㆍ''ENCODER''ㆍ''ENMOV''ㆍ''HRST'' | 
-| Timer | ''TON''ㆍ''TOFF''ㆍ''TPL''ㆍ''TMON''ㆍ''TMR''의 SET VALUE | +| 타이머 | ''TON''ㆍ''TOFF''ㆍ''TPL''ㆍ''TMON''ㆍ''TMR''의 SET VALUE | 
-| Word Logic | ''WAND''ㆍ''WOR''ㆍ''WXOR''ㆍ''SHL''ㆍ''SHR''ㆍ''SWAP''의 모든 칸 | +| 워드 논리 | ''WAND''ㆍ''WOR''ㆍ''WXOR''ㆍ''SHL''ㆍ''SHR''ㆍ''SWAP''의 모든 칸 | 
-| Analog | ''ADC''ㆍ''ADC2''ㆍ''DAC''의 모든 칸, ''AFILTER'', ''NTEMP''ㆍ''PTEMP'', ''PWM''ㆍ''FPWM''ㆍ''FDPWM''ㆍ''NPWM''ㆍ''POFF''ㆍ''PSR'', ''PID''의 모든 칸, ''PID_PWM''(PORT 제외) |+| 아날로그 | ''ADC''ㆍ''ADC2''ㆍ''DAC''의 모든 칸, ''AFILTER'', ''NTEMP''ㆍ''PTEMP'', ''PWM''ㆍ''FPWM''ㆍ''FDPWM''ㆍ''NPWM''ㆍ''POFF''ㆍ''PSR'', ''PID''의 모든 칸, ''PID_PWM''(PORT 제외) |
 | MOVE | ''MOVE''ㆍ''GMOVE''ㆍ''FMOVE''의 모든 칸 | | MOVE | ''MOVE''ㆍ''GMOVE''ㆍ''FMOVE''의 모든 칸 |
-| Data Processing | ''MAX''ㆍ''MIN''ㆍ''SUM''ㆍ''AVE''ㆍ''MUX''ㆍ''ENCO''ㆍ''DECO''의 모든 칸 | +| 데이터 처리 | ''MAX''ㆍ''MIN''ㆍ''SUM''ㆍ''AVE''ㆍ''MUX''ㆍ''ENCO''ㆍ''DECO''의 모든 칸 | 
-| Serialport | ''PUT''의 CHANNELㆍDATAㆍLENGTH, ''GET''의 CHANNELㆍLENGTHㆍOUT, ''PUT_LEN''ㆍ''GET_LEN'', ''SERID''ㆍ''SERRATE'', ''MNET''ㆍ''MNET_READ'' |+| 시리얼 포트 | ''PUT''의 CHANNELㆍDATAㆍLENGTH, ''GET''의 CHANNELㆍLENGTHㆍOUT, ''PUT_LEN''ㆍ''GET_LEN'', ''SERID''ㆍ''SERRATE'', ''MNET''ㆍ''MNET_READ'' |
 | I2C | ''ISTA''의 ADDRESS, ''IWR'', ''IRD''의 OUT, ''ISR'', ''IBR'' | | I2C | ''ISTA''의 ADDRESS, ''IWR'', ''IRD''의 OUT, ''ISR'', ''IBR'' |
-| CLCD (Character LCD) | ''CINI''ㆍ''CLOC''ㆍ''CSTR''ㆍ''CINT''ㆍ''CREAL''ㆍ''CHEX''ㆍ''CCLS''ㆍ''CCON''ㆍ''CCOF''ㆍ''CPUT''ㆍ''CGET''의 ADRㆍ값 칸(아래 쓸 수 없는 칸 제외), ''CSCR''의 PAGE | +| CLCD (문자 LCD) | ''CINI''ㆍ''CLOC''ㆍ''CSTR''ㆍ''CINT''ㆍ''CREAL''ㆍ''CHEX''ㆍ''CCLS''ㆍ''CCON''ㆍ''CCOF''ㆍ''CPUT''ㆍ''CGET''의 ADRㆍ값 칸(아래 쓸 수 없는 칸 제외), ''CSCR''의 PAGE | 
-| 7Segment | ''FINT''의 INㆍPOSITIONㆍLENGTHㆍDOT, ''FDATA'', ''FSCR''의 PAGE |+| 7세그 | ''FINT''의 INㆍPOSITIONㆍLENGTHㆍDOT, ''FDATA'', ''FSCR''의 PAGE |
 | DS3231 (RTC) | ''DS3231_WR''ㆍ''DS3231_RD''의 모든 칸 | | DS3231 (RTC) | ''DS3231_WR''ㆍ''DS3231_RD''의 모든 칸 |
  
줄 91: 줄 91:
  
 ^ 구분 ^ 칸 ^ 표시되는 이유 ^ ^ 구분 ^ 칸 ^ 표시되는 이유 ^
-| 고정 주소만 받는 칸 | 접점ㆍ코일ㆍ엣지 칸, 타이머의 TIMER(''T0'')ㆍ카운터의 COUNT(''C0''), ''CTU''의 RESETㆍ''CTD''의 SETㆍ''CTUD''의 CUㆍCDㆍRESET, ''JMP''ㆍ''JMPN''ㆍ''LABEL'', ''ISTA''의 READ, ''IRD''의 ACK, ''CINI''의 TYPE, ''CPUT''의 DEFINE, ''CSTR''의 STRING, ''CINT''ㆍ''CREAL''ㆍ''FINT''의 ZEROㆍSIGN, ''CHEX''의 ZERO, ''PID_PWM''의 PORT | «D100[D0] 은(는) 인덱스 주소라 이 칸에 쓸 수 없어 컴파일되지 않습니다. 인덱스 주소는 명령의 값 칸(예: MOV 의 IN·OUT)과 비교 접점에만 씁니다 — 이 칸에는 D100 같은 고정 주소를 적어 주세요.» | +| 고정 주소만 받는 칸 | 접점ㆍ코일ㆍ엣지 칸, 타이머의 TIMER(''T0'')ㆍ카운터의 COUNT(''C0''), ''CTU''의 RESETㆍ''CTD''의 SETㆍ''CTUD''의 CUㆍCDㆍRESET, ''JMP''ㆍ''JMPN''ㆍ''LABEL'', ''ISTA''의 READ, ''IRD''의 ACK, ''CINI''의 TYPE, ''CPUT''의 DEFINE, ''CSTR''의 STRING, ''CINT''ㆍ''CREAL''ㆍ''FINT''의 ZEROㆍSIGN, ''CHEX''의 ZERO, ''PID_PWM''의 PORT | «D100[D0]은(는) 인덱스 주소라 이 칸에 쓸 수 없어 컴파일되지 않습니다. 인덱스 주소는 명령의 값 칸(예: MOV의 IN·OUT)과 비교 접점에만 씁니다 — 이 칸에는 D100 같은 고정 주소를 입력하세요.» | 
-| 상수만 받는 칸 | ''CSCR''의 ADR, ''FSCR''의 DSP, ''MCS''ㆍ''MCSCLR''의 NUM, ''FINI''의 CLKㆍDIO, ''MBTRIG''ㆍ''UPTRIG''의 NO, ''CREAL''의 DIGIT | «CSCR 의 ADR 칸은 상수만 받아 인덱스 주소(D100[D0])를 쓸 수 없어 컴파일되지 않습니다. 이 칸에는 상수(숫자)를 적어 주세요.» |+| 상수만 받는 칸 | ''CSCR''의 ADR, ''FSCR''의 DSP, ''MCS''ㆍ''MCSCLR''의 NUM, ''FINI''의 CLKㆍDIO, ''MBTRIG''ㆍ''UPTRIG''의 NO, ''CREAL''의 DIGIT | «CSCR의 ADR 칸은 상수만 받아 인덱스 주소(D100[D0])를 쓸 수 없어 컴파일되지 않습니다. 이 칸에는 상수(숫자)를 입력하세요.» |
  
 {{ :products:mp_studio:ix-red-reason.png?1000 |그림 2. 타이머의 TIMER 칸에 적어 붉게 표시된 인덱스 주소와 인스펙터에 표시된 이유 }} {{ :products:mp_studio:ix-red-reason.png?1000 |그림 2. 타이머의 TIMER 칸에 적어 붉게 표시된 인덱스 주소와 인스펙터에 표시된 이유 }}
줄 110: 줄 110:
   * **① 범위 밖 칸:** ''D0''이 -200이라 ''D100''보다 앞쪽 영역 밖을 가리켜 붉은 «범위 밖 (D0 = -200)»으로 표시됩니다. ''MOVE''를 건너뛰어 ''D200''은 앞의 값 그대로입니다.   * **① 범위 밖 칸:** ''D0''이 -200이라 ''D100''보다 앞쪽 영역 밖을 가리켜 붉은 «범위 밖 (D0 = -200)»으로 표시됩니다. ''MOVE''를 건너뛰어 ''D200''은 앞의 값 그대로입니다.
   * **② ''@IXERR'' 렁:** ''@IXERR''가 켜져 뒤의 코일이 켜졌습니다.   * **② ''@IXERR'' 렁:** ''@IXERR''가 켜져 뒤의 코일이 켜졌습니다.
-  * **③ 알림:** «인덱스 범위 밖이 생겼습니다 — @IXERR 가 켜졌고 그 명령은 건너뛰었습니다. (마지막: 0 행)»+  * **③ 알림:** «인덱스가 범위를 벗어났습니다 — @IXERR가 켜졌고 그 명령은 건너뛰었습니다. (마지막: 0행)»
  
 > **@IXERR는 저절로 꺼지지 않음** > **@IXERR는 저절로 꺼지지 않음**
 > ''@IXERR''는 인덱스가 범위 안으로 돌아와도 켜진 채로 남습니다. 래더의 RESET 코일(''@IXERR'')로 끄거나, 모니터링ㆍ시뮬레이션 중 데이터 테이블에서 0을 써서 꺼주시기 바랍니다. 다른 ''@'' 시스템 비트와 달리 ''@IXERR''에는 0을 쓸 수 있습니다. 다운로드하면 꺼진 상태로 시작합니다. > ''@IXERR''는 인덱스가 범위 안으로 돌아와도 켜진 채로 남습니다. 래더의 RESET 코일(''@IXERR'')로 끄거나, 모니터링ㆍ시뮬레이션 중 데이터 테이블에서 0을 써서 꺼주시기 바랍니다. 다른 ''@'' 시스템 비트와 달리 ''@IXERR''에는 0을 쓸 수 있습니다. 다운로드하면 꺼진 상태로 시작합니다.
 +
 +''@IXERR''는 [[products:mp_studio:bit_control|비트 제어 펑션]]의 ''BSFT''ㆍ''BRST''ㆍ''BSETN''이 실행 중 영역을 벗어나거나 ''TFLK''의 한 주기가 타이머에 담기지 않을 때도 켜집니다(V1.4.0부터). 인덱스 주소를 쓰지 않은 프로그램에서는 ''@IXERR''가 래더 화면이나 데이터 테이블에 있을 때만 알림이 표시되므로, 래더의 ''@IXERR'' 접점으로 확인해주시기 바랍니다.
  
 ===== 입력 도움 ===== ===== 입력 도움 =====
줄 119: 줄 121:
 ==== 인덱스 후보 목록 ==== ==== 인덱스 후보 목록 ====
  
-칸 입력 상자(접점 편집ㆍ펑션 인자 칸ㆍ펑션 삽입ㆍ펑션 고치기 창)에 ''D100[''까지 입력하면 인덱스로 쓸 수 있는 것만 목록으로 표시됩니다. **인덱스 후보 — 문서에서 쓴 주소**에는 지금 탭에서 쓴 주소 중 인덱스로 쓸 수 있는 ''D''ㆍ''C'' 워드 주소와 ''##이름'' 사용자 워드가, **등록된 심볼**에는 그런 주소의 심볼이 묶음마다 8개까지 표시됩니다.+칸 입력 상자(접점 편집ㆍ펑션 인자 칸ㆍ펑션 삽입ㆍ펑션 편집 창)에 ''D100[''까지 입력하면 인덱스로 쓸 수 있는 것만 목록으로 표시됩니다. **인덱스 후보 — 프로젝트에서 쓴 주소**에는 지금 탭에서 쓴 주소 중 인덱스로 쓸 수 있는 ''D''ㆍ''C'' 워드 주소와 ''##이름'' 사용자 워드가, **등록된 심볼**에는 그런 주소의 심볼이 묶음마다 8개까지 표시됩니다.
  
 {{ :products:mp_studio:ix-complete.png?470 |그림 4. 펑션 삽입 창에 MOV D100[까지 입력했을 때 표시되는 인덱스 후보 }} {{ :products:mp_studio:ix-complete.png?470 |그림 4. 펑션 삽입 창에 MOV D100[까지 입력했을 때 표시되는 인덱스 후보 }}
줄 127: 줄 129:
 ==== 심볼로 쓰기 ==== ==== 심볼로 쓰기 ====
  
-앞 주소와 인덱스에 심볼을 쓸 수 있습니다. ''RECIPE''가 ''D100'', ''IDX''가 ''D0''의 심볼이면 칸에 ''RECIPE[IDX]''를 입력해도 ''D100[D0]''으로 저장됩니다. **보기 → 심볼 표시**를 켜면 칸에 «RECIPE[IDX]»가 표시되고, 코멘트는 앞 주소의 것이 표시됩니다. 심볼 테이블에 인덱스 주소 꼴을 심볼로 등록할 수는 없습니다.+앞 주소와 인덱스에 심볼을 쓸 수 있습니다. ''RECIPE''가 ''D100'', ''IDX''가 ''D0''의 심볼이면 칸에 ''RECIPE[IDX]''를 입력해도 ''D100[D0]''으로 저장됩니다. **보기 → 심볼 표시**를 켜면 칸에 «RECIPE[IDX]»가 표시되고, 설명문은 앞 주소의 것이 표시됩니다. 심볼 테이블에 인덱스 주소 꼴을 심볼로 등록할 수는 없습니다.
  
 {{ :products:mp_studio:ix-symbol.png?1000 |그림 5. 심볼 표시를 켠 래더의 RECIPE[IDX] 칸 }} {{ :products:mp_studio:ix-symbol.png?1000 |그림 5. 심볼 표시를 켠 래더의 RECIPE[IDX] 칸 }}
줄 154: 줄 156:
 ==== 값 쓰기 ==== ==== 값 쓰기 ====
  
-인덱스 칸을 선택하고 **메모리에 값 쓰기**(''Alt+Enter'')를 열면 **주소**에 «D100[D0] → D103 에 씁니다»처럼 지금 가리킨 칸이 표시되며, 값은 그 칸에 씁니다. 아직 한 번도 실행되지 않은 칸에는 쓸 수 없습니다.+인덱스 칸을 선택하고 **메모리에 값 쓰기**(''Alt+Enter'')를 열면 **주소**에 «D100[D0] → D103에 씁니다»처럼 지금 가리킨 칸이 표시되며, 값은 그 칸에 씁니다. 아직 한 번도 실행되지 않은 칸에는 쓸 수 없습니다.
  
 {{ :products:mp_studio:ix-write.png?440 |그림 7. 인덱스 칸에서 연 메모리에 값 쓰기 창 }} {{ :products:mp_studio:ix-write.png?440 |그림 7. 인덱스 칸에서 연 메모리에 값 쓰기 창 }}
줄 166: 줄 168:
 ==== 사용한 데이터 ==== ==== 사용한 데이터 ====
  
-**실행 → 사용한 데이터**에서는 앞 원소와 인덱스 레지스터가 쓰인 칸으로 칠해지고, 앞 원소부터 그 영역의 끝까지는 인덱스가 닿을 수 있는 칸으로 빗금이 표시됩니다. 인덱스가 ''##이름'' 사용자 워드이면 그 인덱스는 이 창에 표시되지 않습니다.+**실행 → 사용한 데이터**에서는 앞 원소와 인덱스 레지스터가 쓰인 칸으로 칠해지고, 앞 원소부터 그 영역의 끝까지는 인덱스로 접근할 수 있는 칸으로 빗금이 표시됩니다. 인덱스가 ''##이름'' 사용자 워드이면 그 인덱스는 이 창에 표시되지 않습니다.
  
-{{ :products:mp_studio:ix-usedata-marked.svg?425 |그림 9. 사용한 데이터 창에서 D100 뒤로 인덱스가 닿을 수 있는 칸(D메모리) }}+{{ :products:mp_studio:ix-usedata-marked.svg?425 |그림 9. 사용한 데이터 창에서 D100 뒤로 인덱스로 접근할 수 있는 칸(D 메모리) }}
  
   * **① 쓰인 칸:** 앞 원소(그림에서는 ''D100'')와 인덱스 레지스터가 칠해집니다.   * **① 쓰인 칸:** 앞 원소(그림에서는 ''D100'')와 인덱스 레지스터가 칠해집니다.
-  * **② 빗금:** 인덱스가 닿을 수 있는 칸입니다. 마우스를 올리면 «D100[D0] 이(가) 여기까지 닿을 수 있습니다 · 음수 인덱스면 앞쪽 칸에도 닿습니다»가 표시됩니다. +  * **② 빗금:** 인덱스로 접근할 수 있는 칸입니다. 마우스를 올리면 «D100[D0]이(가) 여기까지 도달할 수 있습니다 · 음수 인덱스면 앞쪽 주소에도 도달합니다»가 표시됩니다. 
-  * **③ 범례:** **인덱스가 닿을 수 있음**+  * **③ 범례:** **인덱스로 접근할 수 있음**
  
 ===== 예제 ===== ===== 예제 =====
줄 205: 줄 207:
 | 6 | ''D1>=20''(비교 접점) | ''MOVE 0 D1'' | 20칸을 다 쓰면 처음 칸으로 돌아갑니다. | | 6 | ''D1>=20''(비교 접점) | ''MOVE 0 D1'' | 20칸을 다 쓰면 처음 칸으로 돌아갑니다. |
  
-시뮬레이션 중 데이터 테이블에서 ''D10''에 25를 쓰고 몇 초 기다리면 렁 4의 OUT 칸에 «25 (→D157)»처럼 지금 기록하는 칸이 표시됩니다. **사용한 데이터**의 **D메모리**에서는 ''D150''이 쓰인 칸으로, 그 뒤 영역 끝까지가 인덱스가 닿을 수 있는 칸으로 표시됩니다. ''@100''은 타이머 기준이 10 ms일 때 1초입니다. [[products:mp_studio:menus_settings#타이머_기준|타이머 기준]]을 1 ms로 바꾼 프로젝트에서는 ''@1000''을 써주시기 바랍니다.+시뮬레이션 중 데이터 테이블에서 ''D10''에 25를 쓰고 몇 초 기다리면 렁 4의 OUT 칸에 «25 (→D157)»처럼 지금 기록하는 칸이 표시됩니다. **사용한 데이터**의 **D 메모리**에서는 ''D150''이 쓰인 칸으로, 그 뒤 영역 끝까지가 인덱스로 접근할 수 있는 칸으로 표시됩니다. ''@100''은 타이머 기준이 10 ms일 때 1초입니다. [[products:mp_studio:menus_settings#타이머_기준|타이머 기준]]을 1 ms로 바꾼 프로젝트에서는 ''@1000''을 써주시기 바랍니다.
  
 ===== 확인할 점 ===== ===== 확인할 점 =====
  
-  * 인덱스 주소는 사용자 메모리(USER)를 씁니다. 서로 다른 인덱스 주소 하나마다 6바이트(같은 주소를 여러 칸에 쓰면 한 번만)와 프로그램 전체에 2바이트가 듭니다. 모자라면 컴파일 오류 문장 끝에 «(그중 인덱스 주소 N개가 숨은 칸 M바이트를 씁니다)»가 붙으므로 **설정 → 데이터 메모리**의 **USER**를 늘려주시기 바랍니다.+  * 인덱스 주소는 사용자 메모리(USER MEMORY)를 씁니다. 서로 다른 인덱스 주소 하나마다 6바이트(같은 주소를 여러 칸에 쓰면 한 번만)와 프로그램 전체에 2바이트가 듭니다. 모자라면 컴파일 오류 문장 끝에 «(그중 인덱스 주소 N개가 숨은 영역 M바이트를 씁니다)»가 붙으므로 **설정 → 데이터 메모리**의 **USER MEMORY**를 늘려주시기 바랍니다.
   * 인덱스 칸마다 실행 시간이 조금 늘어납니다.   * 인덱스 칸마다 실행 시간이 조금 늘어납니다.
   * 인덱스 주소는 래더의 칸과 데이터 테이블에서 씁니다. Modbus 장비 표의 바인딩과 CLCD 화면 편집기의 값 칸에는 쓸 수 없습니다.   * 인덱스 주소는 래더의 칸과 데이터 테이블에서 씁니다. Modbus 장비 표의 바인딩과 CLCD 화면 편집기의 값 칸에는 쓸 수 없습니다.
products/mp_studio/indexed_address.1794332162.txt.gz · 마지막으로 수정됨: 저자 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki