사용자 도구

사이트 도구


products:mpino_studio2:memory

차이

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

차이 보기로 링크

다음 판
이전 판
products:mpino_studio2:memory [2026/09/08 15:05] – 만듦 - 바깥 편집 127.0.0.1products:mpino_studio2:memory [2026/09/14 12:24] (현재) – 바깥 편집 127.0.0.1
줄 1: 줄 1:
 ====== MPINO STUDIO 2 Phase 2 · 메모리 이해하기 ====== ====== MPINO STUDIO 2 Phase 2 · 메모리 이해하기 ======
  
-MPINO Studio 2를 처음 사용하는 분을 위한 메모리 기초 문서입니다. Phase 1에서 만든 프로젝트를 열어 **P·M·D·C·T·R 메모리의 차이**, 주소 표기, 메모리 영역 설정, 사용 위치 확인, 시간 특수 접점을 차례대로 익힙니다.+**P·M·D·C·T·R 메모리의 차이**, 주소 표기, 메모리 영역 설정, 사용 위치 확인, 특수 비트 메모리를 설명합니다.
  
-^ 프로그램 ^ 기준 보드 ^ 완료 목표 ^ +{{ :products:mpino_studio2:memory-learning-path.svg?1000 |메모리 이해 순서 }}
-| MPINO Studio 2 | MPINO-8A4R(T)-| 메모리 주소를 구분하고 프로젝트에서 사용 위치를 찾을 수 있음 |+
  
-{{ :products:mpino_studio2:memory-learning-path.svg?1000 |Phase 2에서 메모리를 익히는 순서 }}+===== 1PLC 기본 메모리 =====
  
-===== 1시작기 전에 =====+Arduino와 다르게 PLC에서는 P,M,D,C,T,R 메모리를 사용합니다Arduino code에서 PLC에 할당된 메모리를 제외고 남은 메모리서 변수를 할당할 수 있습니다.
  
-음 항목을 준비합니다.+메모리는 프로그램이 실행되는 동안 입력 상태, 내부 조건, 계산 결과, 타이머 값과 같은 데이터를 보관하는 공간입니. MPINO Studio 2의 래더 로직과 Arduino C 코드는 이 메모리를 공유하여 사용할 수 있습니다.
  
-  MPINO Studio 2가 설치된 PC +기본 주소는 **영역을 나타내는 문자 + 0부터 시작하는 번호**로 씁니다. 예를 들어 ''M10''은 M 영역의 11번째 주소고, ''D0''은 D 영역의 첫 번째 주소입니다.
-  Phase 1에서 저장한 ''.mp2'' 프로젝트 +
-  * 실습 보드: MPINO-8A4R(T)-S +
-  * 마지막의 점멸 실습을 보드에서 확인할 경우 MP 다운로드 케+
  
-이 문서의 대부분은 보드를 연결하지 않아도 확인할 수 있습니다업로드 실습을 할 때는 처음에 출력 부하를 분하고, Phase 1에서 사용한 보드와 포트를 다시 확인하십시오.+{{ :products:mpino_studio2:memory-overview.svg?1000 |P M D C T R 메모리 영역 비교 }}
  
-이 Phase를 마치면 다음 작업을 할 수 습니다.+^ 영역 ^ 단위 ^ 저장 형태 ^ 값의 범위 ^ 
 +| ''P'' | BIT | 보드의 디지털 입력·출력 상태 | 0 또는 1 | 
 +| ''M'' | BIT | 내부 BIT 메모리 | 0 또는 1 | 
 +| ''D'' | WORD | 부호 있는 내부 WORD 메모리 | -32,768 ~ 32,767 | 
 +| ''C'' | WORD | 카운터 값 (부호 있는 내부 WORD 메모리) | -32,768 ~ 32,767 | 
 +| ''T'' | WORD | 타머 현재값 (부호 는 내부 WORD 메모리) | -32,768 ~ 32,767 | 
 +| ''R'' | Floating Point (32비트) | 내부 Floating Point 메모리 (실수 메모리) | 약 -3.4028235E38 ~ +3.4028235E38 |
  
-  * 주소의 첫 글자를 보고 저장되는 값의 종류를 구분합니다. +==== Arduino 코드와 래더 로직의 메모리 공유 ====
-  * 값의 범위에 맞는 BIT·BYTE·WORD·DWORD를 선택합니다. +
-  * ''WM1.3''처럼 긴 주소를 폭, 영역, 번호, 비트로 나누어 읽습니다. +
-  * 메모리 영역 크기와 예상 SRAM 사용량을 확인합니다. +
-  * 프로젝트에서 특정 주소를 사용한 위치를 찾습니다. +
-  * ''@100''과 ''@F1000''의 시간 동작 차이를 설명합니다.+
  
-===== 2. 메모리란? =====+래더 로직과 Arduino 코드는 P·M·D·C·T·R 메모리의 같은 저장 공간을 사용합니다. 한쪽에서 값을 쓰면 다른 쪽에서 같은 주소로 읽을 수 있습니다.
  
-메모리는 프로그램이 실행되는 동안 입력 상태, 내부 조건, 계산 결과, 타이머 값과 같은 데이터를 보관하는 공간입니다MPINO Studio 2의 래더 로직과 Arduino C 코드는 이 메모리를 함께 사용할 수 있습니다.+{{ :products:mpino_studio2:memory-sharing.svg?1000 |Arduino 코드와 래더 로직이 같은 PLC 메모리를 공유하는 구조 }}
  
-기본 주소는 **영역을 나타내는 문자 + 0부터 시작하는 번호**로 니다. 를 들어 ''M10''은 M 영역의 11번째 주소이고, ''D0''은 D 영역의 첫 번째 주소입니다.+Arduino 코드에서는 래더 주소와 같은 이름을 그대로 사용하거나 배열 형식으로 쓸 수 있습니다. 두 표기는 같은 메모리를 가리킵니다.
  
-{{ :products:mpino_studio2:memory-overview.svg?1000 |P M D C T 메모리 영역 비교 }}+  * 래더의 ''M0'' ↔ Arduino 코드의 ''M0'' 또는 ''M[0]'' 
 +  * 래더의 ''D0'' ↔ Arduino 코드의 ''D0'' 또는 ''D[0]'' 
 +  * 래더의 ''R0'' ↔ Arduino 코드의 ''R0'' 또는 ''R[0]''
  
-^ 영역 ^ 기본 단위 ^ 저장하는 값 ^ 처음 사용할 때의 기준 ^ +<code cpp> 
-| ''P'' | BIT | 보드의 디지털 입력·출력 상태 | 실제 입출력 방향과 주소는 선택한 보드의 핀맵에서 확인합니다. | +void loop() { 
-| ''M'' | BIT | 외부 단자와 직접 연결되지 않은 내부 ON/OFF 상태 | 운전 허가, 단계 상태, 인터록 결과와 같은 보조 조건에 사용합니다. | +  M0 = true;    // 래더의 M0 비트 접점을 ON 상태로 만듭니다. 
-| ''D'' | WORD | 부호가 있는 일반 정수와 계산 결과 | 수량, 설정값, 변환된 센서값처럼 정수로 다루는 데이터에 사용합니다. | +  D0 = 120;     // 래더와 Arduino 코드가 D0의 을 공유합니다. 
-| ''C'' | WORD | 카운터 값 | 선택한 보드가 C 주소를 아날로그 입력·PWM 출력 등에 연결했는지 먼저 확인합니다+  R0 = 23.5f;   // 래더와 Arduino 코드가 R0의 을 공유합니다.
-| ''T'' | WORD | 타이머 경과값 | 래더 타이머가 사용하는 시간 데이터를 보관합니다. | +
-| ''R'' | 32비트 수 | 소수점이 있는 값 | 온도, 비율, 환산값처럼 실수 계산이 필요한 데이터에 사용합니다. |+
  
-> **P 주소 주의:** ''P0''이 모든 보드에서 항상 입력이라는 뜻은 아닙니다. P 주소의 입출력 방향과 제 단자는 프로젝트에서 선택한 보드 정의를 따릅니다.+  ladderLoop(); // 위에서 저장한 값으로 래더 로직을 행합니다. 
 +
 +</code>
  
-> **R 값 비교 주의:** 실수는 계산 과정에서 아주 작은 반올림 차가 생길 수 있습니다. 제어 조건에서는 필요한 허용 범위를 정해 비교하는 방법을 사용하십시오.+래더 로직에서 변경한 값은 ''ladderLoop()'' 실행이 끝난 뒤 Arduino 코드에서 읽을 수 있습니다. 같은 스캔 안에서 값을 읽고 쓰는 순서는 ''loop()''에서 ''ladderLoop()''를 호출한 위를 따릅니다.
  
-===== 3MPINO-8A4R(T)-S의 기본 메모리 =====+> **입출력 매핑 주의:** P 영역과 보드 기능에 매핑된 C 영역은 래더 스캔 중 실제 입출력과 동기화됩니다. 이 영역을 Arduino 코드와 공유할 때는 **설정 → 래더 핀맵 설정**에서 주소와 입출력 방향을 먼저 확인하십시오. 
 + 
 +> **P 주소 주의:** P 주소는 **보드의 핀 편집**에서 확인하고 수정할 수 있습니다. P 주소의 입출력 방향과 실제 단자는 프로젝트에서 선택한 보드의 정의를 따릅니다. 
 + 
 +> **R 값 오차 주의:** 32비트 실수는 부동 소수점 연산의 한계로 ''0.1 + 0.2''의 결과가 정확한 ''0.3''이 아니라 약 ''0.30000001''로 저장될 수 있습니다. 이는 IEEE 754 32비트 부동 소수점을 사용하는 제어기에서 공통적으로 고려해야 하는 특성입니다. 
 + 
 +===== 2. 메모리 영역 =====
  
 MPINO-8A4R(T)-S를 선택했을 때의 기본 메모리 개수는 다음과 같습니다. MPINO-8A4R(T)-S를 선택했을 때의 기본 메모리 개수는 다음과 같습니다.
 +
 +**설정 → 메모리 영역 설정**에서 메모리의 사용 개수를 수정할 수 있습니다. (단축키: ''Ctrl + Shift + M'')
 +
 +{{ :products:mpino_studio2:memory-settings-modal.png?430 |그림 1. 메모리 영역별 사용 개수와 예상 SRAM 사용량을 확인하는 메모리 영역 설정 창 }}
  
 ^ 영역 ^ 기본 개수 ^ 기본 주소 범위 ^ ^ 영역 ^ 기본 개수 ^ 기본 주소 범위 ^
줄 59: 줄 68:
 | ''T'' | 128 | ''T0'' ~ ''T127'' | | ''T'' | 128 | ''T0'' ~ ''T127'' |
 | ''R'' | 50 | ''R0'' ~ ''R49'' | | ''R'' | 50 | ''R0'' ~ ''R49'' |
 +
 +**메모리 영역 설정 창:** P·M·D·C·T·R 입력칸을 비워 두면 보드 기본값을 사용합니다. 값을 입력하면 해당 프로젝트의 사용 개수를 변경하며, 창 아래에서 예상 SRAM 사용량과 전체 SRAM을 함께 확인할 수 있습니다.
  
 개수와 마지막 주소를 혼동하지 마십시오. 번호가 0부터 시작하므로 D 메모리 200개는 ''D0''부터 ''D199''까지입니다. 개수와 마지막 주소를 혼동하지 마십시오. 번호가 0부터 시작하므로 D 메모리 200개는 ''D0''부터 ''D199''까지입니다.
줄 64: 줄 75:
 ==== C 영역과 보드 핀 매핑 ==== ==== C 영역과 보드 핀 매핑 ====
  
-MPINO-8A4R(T)-S에서는 C 영역의 앞부분이 보드 기능에 연결되어 있습니다.+MPINO-8A4R(T)-S에서는 ''C0'' ~ ''C10'' 메모리에 아날로그 입력, NTC 온도 입력, PWM이 연결되어 있습니다
 + 
 +매핑 메모리는 **설정 → 래더 핀맵 설정**에서 변경할 수 있습니다. 
 + 
 +> **아날로그·PWM 출력 주의:** 아날로그 출력 또는 PWM 출력에 메모리를 매핑하면 매핑한 주소의 값으로 출력되므로 Arduino 코드에서 ''analogWrite'' 관련 함수를 사용할 수 없습니다. ''analogWrite'' 관련 함수를 사용하려면 **설정 → 래더 핀맵 설정**에서 해당 출력의 **사용**을 체크 해제하십시오.
  
 {{ :products:mpino_studio2:memory-c-map-8a4r-s.svg?1000 |MPINO-8A4R(T)-S의 C 메모리와 보드 핀 매핑 }} {{ :products:mpino_studio2:memory-c-map-8a4r-s.svg?1000 |MPINO-8A4R(T)-S의 C 메모리와 보드 핀 매핑 }}
줄 74: 줄 89:
 | ''C11'' ~ ''C99'' | 위 기능에 직접 배정되지 않은 C 영역 | 사용 목적을 확인한 뒤 선택 | | ''C11'' ~ ''C99'' | 위 기능에 직접 배정되지 않은 C 영역 | 사용 목적을 확인한 뒤 선택 |
  
-> **중요:** 이 보드에서 ''C0'' ~ ''C10''을 일반 카운터 주소로 정하면, 같은 주소를 사용하는 보드 기능과 데이터가 겹칠 수 있습니다. 카운터 주소를 정하기 전에 **보드·메모리 보의 핀맵**과 **사용 메모리 **을 함께 확인하십시오.+> **중요:** 이 보드에서 ''C0'' ~ ''C10''을 일반 카운터 주소로 정하면, 같은 주소를 사용하는 보드 기능과 데이터가 겹칠 수 있습니다. 카운터 주소를 정하기 전에 **정 → 래더 핀맵 설정**과 **설정 → 사용한 메모리**를 확인하십시오.
  
-다른 MPINO 제품은 메모리 개수와 핀 매핑이 를 수 있습니다. 다른 보드 프젝트에 위 주소표를 그대로 적용지 마십시오.+매핑된 주소는 보드별로 니다. 또한 사용자가 변경할 수 있으므로 **설정 → 래더 핀맵 설정**서 확인하십시오.
  
-===== 4. 데이터 폭 이해하기 =====+===== 3. 데이터 형식 =====
  
 데이터 폭은 한 번에 읽거나 저장할 비트 수입니다. 값이 가질 수 있는 범위와 사용하는 메모리 양이 달라집니다. 데이터 폭은 한 번에 읽거나 저장할 비트 수입니다. 값이 가질 수 있는 범위와 사용하는 메모리 양이 달라집니다.
줄 94: 줄 109:
 값을 정할 때는 현재 값만 보지 말고 계산 후의 최댓값도 확인하십시오. 예를 들어 1일 동안 1ms마다 증가하는 누적값은 86,400,000이므로 WORD 범위를 넘습니다. 값을 정할 때는 현재 값만 보지 말고 계산 후의 최댓값도 확인하십시오. 예를 들어 1일 동안 1ms마다 증가하는 누적값은 86,400,000이므로 WORD 범위를 넘습니다.
  
-===== 5. 메모리 주소 읽는 방법 =====+===== 4. 메모리 주소 읽는 방법 =====
  
-긴 주소는 왼쪽부터 **데이터 폭 접두어**, **메모리 영역**, **주소 번호**, **비트 번호**로 누어 읽습니다.+메모리 주소는 단순한 형식부터 필요한 요를 하씩 더해 읽습니다.
  
-{{ :products:mpino_studio2:memory-addressing.svg?1000 |WM1.메모리 주소를 구성 요소별로 읽는 방법 }}+{{ :products:mpino_studio2:memory-addressing.svg?1000 |M0, D0, D0.1, WM1.메모리 주소 형식 }}
  
-예를 들어 ''WM1.3''은 다음 뜻입니다.+  - ''M0'': M 영역의 0번 BIT 주소입니다. 
 +  - ''D0'': D 영역의 0번 WORD 주소입니다. 
 +  - ''D0.1'': D0 WORD 안의 두 번째 비트입니다. 비트 번호는 0부터 시작합니다. 
 +  - ''WM1.2'': M 영역을 WORD로 묶은 ''WM1'' 안의 세 번째 비트니다. ''M18''과 같은 비트를 가리킵니다.
  
-  - ''W'': WORD 폭으로 묶어 봅니다. +==== 메모리 구조 ====
-  - ''M'': 내부 비트 메모리 영역입니다. +
-  - ''1'': 주소 묶음 번호입니다. +
-  - ''.3'': 그 WORD 안의 4번째 비트입니다. 비트 번호도 0부터 시작합니다.+
  
-==== 폭 접두어와 비트 접근 ====+비트, 바이트, 워드, 더블워드, 실수의 메모리 구조입니다.
  
-^ 표기 ^ 사용할 수 있는 영역 ^ 예 ^ +{{ :products:mpino_studio2:memory-structure.svg?1000 |P M 비트 메모리와 D C T WORD 메모리가 BYTE WORD DWORD로 묶이는 구조 }}
-''B'' 접두어 | ''P'', ''M'' | ''BP0'', ''BM1''+
-| ''W'' 접두어 | ''P'', ''M'' | ''WP0'', ''WM1''+
-| ''D'' 접두어 | ''P'', ''M'', ''D'', ''C'', ''T'' | ''DM0'', ''DD2'', ''DC31''+
-| ''.n'' 비트 번호 | P·M의 폭 접근, ''D'', ''C'' | ''WM1.3'', ''D0.15'' |+
  
-여기서 ''DD2''의 첫 번째 ''D''는 **DWORD 폭 접두어**이고두 번째 ''D''는 **D 메모리 영역**입니다. 두 문자가 같은 모양이므로 한 글자씩 역할을 나누어 읽으십시오.+P·M 영역은 각각의 BIT 주소를 8개, 16개, 32개씩 묶어 BYTE·WORD·DWORD로 읽습니다. 낮은 주소가 최하위 비트가 되므로 ''WM0.0''은 ''M0'', ''WM1.3''은 ''M19''와 같은 비트를 가니다.
  
-음 표기는 사용할 수 없습니다.+D·C·T 영역은 주소 하나가 WORD입니. 연속된 WORD 두 개를 묶으면 DWORD가 되며, ''DD0''은 ''D0''과 ''D1'', ''DD1''은 ''D2''와 ''D3''을 결합합니다. C와 T도 ''DC0'', ''DT0''처럼 같은 규칙을 사용니다.
  
-  * ''BD0''처럼 D·C·T 영역 앞에 ''B'' 또는 ''W''를 붙이는 표기 +===== 5프로젝에서 사용한 메모리 찾기 =====
-  * R 영역에 폭 접두어를 붙이는 표기 +
-  * R 영역에 ''.n''트 번호를 붙이는 표+
  
-주소 입력창에서 오류가 표시되면 철자만 고치기 전에 **선택한 영역에서 그 폭과 비트 접근을 지원하는지** 확인십시오.+메뉴에서 **설정 → 사용한 메모리**를 선택거나 ''Ctrl+Shift+L''을 누릅니다.
  
-===== 6. 메모리 영역 크기 확인하기 ===== +{{ :products:mpino_studio2:memory-map-modal.png?800 |그림 2. 사용한 메모리에서 주소와 사용 위치를 확인하는 화면 }}
- +
-메뉴에서 **설정 → 메모리 영역 설정**을 선택하거나 ''Ctrl+Shift+M''을 누릅니다. +
- +
-{{ :products:mpino_studio2:memory-settings-modal.png?650 |그림 1. 메모리 영역 설정 창 }} +
- +
-다음 순서로 확인합니다. +
- +
-  - 창 위쪽에서 현재 프로젝트의 보드가 **MPINO-8A4R(T)-S**인지 확인합니다. +
-  - P, M, D, C, T, R 입력칸의 개수를 확인합니다. +
-  - 값을 바꾸지 않은 빈 입력칸은 선택한 보드의 기본값을 사용합니다. +
-  - 아래쪽의 예상 SRAM 사용량과 전체 SRAM을 확인합니다. +
-  - 전체 용량을 넘으면 표시가 빨간색으로 바뀌고 저장할 수 없습니다. +
-  - 변경이 필요하면 값을 입력하고 **저장**을 누릅니다. +
-  - 창을 닫은 뒤 ''Ctrl+S''를 눌러 ''.mp2'' 프로젝트 파일에 변경 내용을 저장합니다. +
- +
-처음 사용하는 경우에는 특별한 이유가 없다면 보드 기본값을 유지하는 것이 좋습니다. 메모리 개수를 늘리면 사용할 수 있는 주소가 늘지만 SRAM도 더 사용합니다. 개수를 줄이면 기존 래더나 Arduino C 코드가 범위를 벗어난 주소를 참조할 수 있으므로, 변경 전후에 사용 메모리 맵을 확인하십시오. +
- +
-===== 7. 프로젝트에서 사용한 메모리 찾기 ===== +
- +
-메뉴에서 **보기 → 사용 메모리 맵**을 선택하거나 ''Ctrl+Shift+L''을 누릅니다. +
- +
-{{ :products:mpino_studio2:memory-map-modal.png?800 |그림 2. 사용 메모리 에서 주소와 사용 위치를 확인하는 화면 }} +
- +
-사용 메모리 맵은 다음과 같이 사용합니다. +
- +
-  - 위쪽의 ''P'', ''M'', ''D'', ''C'', ''T'', ''R'' 탭에서 영역을 선택합니다. +
-  - 래더와 코드 필터로 확인할 소스를 좁힙니다. +
-  - 주소 검색란에 주소를 입력하고 ''Enter''를 눌러 바로 찾습니다. +
-  - 색이 표시된 주소 셀은 현재 프로젝트에서 사용 중인 메모리입니다. +
-  - 사용 중인 셀을 클릭하면 아래쪽에 참조 위치가 표시됩니다. +
-  - 참조 항목을 선택하면 해당 래더 셀 또는 코드 위치로 이동할 수 있습니다. +
-  - 창을 닫았다 다시 열어도 탭과 스크롤 위치는 유지됩니다. 앱을 다시 시작하면 초기화됩니다. +
- +
-==== Phase 1 프로젝트로 확인하기 ==== +
- +
-  - Phase 1에서 저장한 프로젝트를 엽니다. +
-  - ''Ctrl+Shift+L''을 누릅니다. +
-  - ''P'' 탭을 선택합니다. +
-  - ''P0''과 ''P32''가 사용 중으로 표시되는지 확인합니다. +
-  - ''P0''을 선택해 ''ladderLoop''의 NO 접점 위치가 나오는지 확인합니다. +
-  - ''P32''를 선택해 출력 코일 위치가 나오는지 확인합니다.+
  
 주소를 바꾸기 전과 메모리 영역 크기를 줄이기 전에 이 화면을 확인하면 중복 사용과 범위 오류를 줄일 수 있습니다. 주소를 바꾸기 전과 메모리 영역 크기를 줄이기 전에 이 화면을 확인하면 중복 사용과 범위 오류를 줄일 수 있습니다.
  
-===== 8시간에 따라 동작하는 특수 접점 =====+===== 6. 특수 비트 메모리 =====
  
-''@''로 시작하는 특수 접점은 일반 P·M 메모리 주소와 달리 시간이 흐르면 MPINO Studio 2가 상태를 자동으로 갱신합니다. +''@''로 시작하는 특수 비트 메모리는 MPINO Studio 2가 상태를 자동으로 갱신합니다. 래더의 비트 접점에서 사용할 수 있습니다.
- +
-{{ :products:mpino_studio2:special-memory-timing.svg?1000 |@100과 @F1000 특수 접점의 시간 동작 비교 }}+
  
 ^ 형식 ^ 동작 ^ 예 ^ ^ 형식 ^ 동작 ^ 예 ^
 +| ''@ON'' | 항상 ON | 비트 접점을 항상 참으로 유지 |
 +| ''@OFF'' | 항상 OFF | 비트 접점을 항상 거짓으로 유지 |
 | ''@<ms>'' | 지정한 시간 경계를 지날 때 한 번, 한 스캔 동안만 ON | ''@100''은 100ms마다 한 스캔 ON | | ''@<ms>'' | 지정한 시간 경계를 지날 때 한 번, 한 스캔 동안만 ON | ''@100''은 100ms마다 한 스캔 ON |
 | ''@F<ms>'' | 지정한 시간만큼 ON, 같은 시간만큼 OFF를 반복 | ''@F1000''은 1초 ON, 1초 OFF 반복 | | ''@F<ms>'' | 지정한 시간만큼 ON, 같은 시간만큼 OFF를 반복 | ''@F1000''은 1초 ON, 1초 OFF 반복 |
 +
 +''@ON''과 ''@OFF''는 대소문자를 구분하지 않으므로 ''@on''과 ''@off''도 사용할 수 있습니다.
 +
 +{{ :products:mpino_studio2:special-memory-timing.svg?1000 |@100과 @F1000 특수 비트 메모리의 시간 동작 비교 }}
  
 ''@100''은 프로그램 스캔이 정확히 100ms 시각과 일치하지 않아도 경계를 지나갔다면 한 번 ON됩니다. 주기적으로 값 하나를 증가시키거나 일정 간격으로 작업을 시작할 때 사용할 수 있습니다. ''@100''은 프로그램 스캔이 정확히 100ms 시각과 일치하지 않아도 경계를 지나갔다면 한 번 ON됩니다. 주기적으로 값 하나를 증가시키거나 일정 간격으로 작업을 시작할 때 사용할 수 있습니다.
줄 184: 줄 156:
 ''@F1000''은 점멸 상태를 직접 뒤집는 코드를 작성하지 않아도 1초 간격의 ON/OFF 조건을 만듭니다. ''@F1000''은 점멸 상태를 직접 뒤집는 코드를 작성하지 않아도 1초 간격의 ON/OFF 조건을 만듭니다.
  
-{{ :products:mpino_studio2:special-relay-example.png?500 |그림 3. 래더 셀에 특수 접점을 입력한 예 }}+{{ :products:mpino_studio2:special-relay-example.png?420 |그림 3. 래더 셀에 특수 비트 메모리를 입력한 예 }}
  
-특수 접점 입력 규칙은 다음과 같습니다.+특수 비트 메모리 입력 규칙은 다음과 같습니다.
  
-  * 시간 단위는 밀리초(ms)입니다.+  * ''@<ms>''와 ''@F<ms>''의 시간 단위는 밀리초(ms)입니다.
   * 괄호를 쓰지 않습니다. ''@F(1000)''이 아니라 ''@F1000''으로 입력합니다.   * 괄호를 쓰지 않습니다. ''@F(1000)''이 아니라 ''@F1000''으로 입력합니다.
-  * 접점 셀 또는 상승·하강 엣지 셀에서만 사용합니다.+  * 비트 접점에서만 사용합니다.
   * 출력 코일 주소에는 사용하지 않습니다.   * 출력 코일 주소에는 사용하지 않습니다.
-  * 임의의 ''@ON'' 같은 이름은 사용할 수 없습니다. 
- 
-===== 9. 실습 · P32를 1초 간격으로 점멸시키기 ===== 
- 
-Phase 1 회로의 ''P0'' 접점을 ''@F1000'' 특수 접점으로 바꾸어 동작을 확인합니다. 
- 
-  - Phase 1 프로젝트를 연 뒤 **파일 → 다른 이름으로 저장**을 사용해 ''phase2-memory.mp2''로 저장합니다. 
-  - 출력 부하가 분리되어 있는지 확인합니다. 
-  - ''ladderLoop''에서 ''P0'' 접점 셀을 선택합니다. 
-  - ''Enter''를 누르거나 더블클릭해 셀 편집 창을 엽니다. 
-  - 주소를 ''@F1000''으로 바꾸고 확인합니다. 
-  - 출력 코일 주소는 ''P32''로 유지합니다. 
-  - ''Ctrl+R''로 빌드하고, 빌드 출력이 정상 종료되는지 확인합니다. 
-  - MP 다운로드 케이블을 연결하고 오른쪽 아래에서 포트를 선택합니다. 
-  - ''Ctrl+U''로 업로드합니다. 
-  - Phase 1에서 모니터링 포트를 설정했다면 ''Ctrl+M''으로 실시간 래더 모니터링을 켭니다. 
-  - ''@F1000'' 접점과 ''P32'' 코일이 약 1초 ON, 1초 OFF로 반복되는지 확인합니다. 
- 
-실습이 끝난 뒤 실제 입력으로 다시 시험하려면 접점 주소를 ''P0''으로 되돌리고 다시 빌드·업로드하십시오. 
- 
-===== 10. 상황별 메모리 선택 기준 ===== 
- 
-^ 저장하려는 값 ^ 먼저 검토할 영역 ^ 확인할 내용 ^ 
-| 실제 디지털 입력·출력 | ''P'' | 선택한 보드의 핀맵과 입출력 방향 | 
-| 래더 내부 ON/OFF 조건 | ''M'' | 다른 회로에서 같은 주소를 이미 사용하는지 | 
-| 일반 정수와 계산 결과 | ''D'' | WORD 범위를 넘는지 | 
-| 카운터 현재값 | ''C'' | 보드 핀에 매핑된 C 주소와 겹치는지 | 
-| 타이머 경과값 | ''T'' | 같은 타이머 주소를 중복 사용하지 않는지 | 
-| 소수점이 있는 값 | ''R'' | 실수 오차를 고려한 비교 조건 | 
-| 일정 주기의 접점 조건 | ''@<ms>'', ''@F<ms>'' | 한 스캔 펄스인지 반복 ON/OFF인지 | 
- 
-===== 11. 완료 확인 ===== 
- 
-다음 항목을 모두 설명하거나 직접 확인할 수 있으면 Phase 2를 완료한 것입니다. 
- 
-  * ''P'', ''M'', ''D'', ''C'', ''T'', ''R''의 용도를 구분할 수 있습니다. 
-  * MPINO-8A4R(T)-S의 ''C0'' ~ ''C10''이 보드 기능에 연결된다는 점을 알고 있습니다. 
-  * BIT, BYTE, WORD, DWORD의 크기와 부호 있는 값의 범위를 확인했습니다. 
-  * ''WM1.3''과 ''DD2''를 글자별 역할로 나누어 읽을 수 있습니다. 
-  * ''Ctrl+Shift+M''으로 메모리 영역 설정을 열 수 있습니다. 
-  * ''Ctrl+Shift+L''로 ''P0''과 ''P32''의 사용 위치를 찾았습니다. 
-  * ''@100''과 ''@F1000''의 동작 차이를 설명할 수 있습니다. 
-  * 실습 프로젝트를 별도 이름으로 저장하고 빌드 결과를 확인했습니다. 
  
 ===== 문제해결방법 ===== ===== 문제해결방법 =====
줄 241: 줄 170:
 | 입력한 주소가 허용되지 않습니다. | 영역 문자, 주소 범위, B/W/D 접두어 지원 여부, ''.n'' 비트 접근 지원 여부를 차례로 확인합니다. | | 입력한 주소가 허용되지 않습니다. | 영역 문자, 주소 범위, B/W/D 접두어 지원 여부, ''.n'' 비트 접근 지원 여부를 차례로 확인합니다. |
 | 메모리 영역 설정을 저장할 수 없습니다. | 예상 SRAM 사용량이 전체 SRAM을 넘어서 빨간색으로 표시되었는지 확인합니다. | | 메모리 영역 설정을 저장할 수 없습니다. | 예상 SRAM 사용량이 전체 SRAM을 넘어서 빨간색으로 표시되었는지 확인합니다. |
-| 사용 메모리 에서 주소가 보이지 않습니다. | 올바른 영역 탭과 래더·코드 필터를 선택했는지 확인하고 주소를 입력한 뒤 ''Enter''를 누릅니다. |+| 사용한 메모리에서 주소가 보이지 않습니다. | 올바른 영역 탭과 래더·코드 필터를 선택했는지 확인하고 주소를 입력한 뒤 ''Enter''를 누릅니다. |
 | C 카운터 값이 예상과 다릅니다. | MPINO-8A4R(T)-S의 ''C0'' ~ ''C10'' 보드 핀 매핑과 주소 중복을 먼저 확인합니다. | | C 카운터 값이 예상과 다릅니다. | MPINO-8A4R(T)-S의 ''C0'' ~ ''C10'' 보드 핀 매핑과 주소 중복을 먼저 확인합니다. |
-| ''@F1000''을 입력할 수 없습니다. | 출력 코일이 아닌 접점 또는 엣지 셀인지, 괄호 없이 입력했는지 확인합니다. | +| ''@F1000''을 입력할 수 없습니다. | 비트 접점인지, 괄호 없이 입력했는지 확인합니다. |
-| P32가 점멸하지 않습니다. | ''@F1000'' 접점과 ''P32'' 코일이 같은 회로에 있는지, 빌드·포트 선택·업로드가 정상 완료됐는지 확인합니다. |+
  
 ===== 관련 문서 ===== ===== 관련 문서 =====
 +
 +  * [[products:mpino_studio2:activity_bar|Phase 8 · 활동바와 사이드 패널]]
 +
 +  * [[products:mpino_studio2:menus_settings|Phase 7 · 메뉴와 환경설정]]
 +
 +  * [[products:mpino_studio2:monitoring|Phase 6 · 시리얼ㆍ래더 모니터링]]
  
   * [[products:mpino_studio2:first_project|Phase 1 · 첫 프로젝트 만들기]]   * [[products:mpino_studio2:first_project|Phase 1 · 첫 프로젝트 만들기]]
products/mpino_studio2/memory.1788847532.txt.gz · 마지막으로 수정됨: 저자 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki