문서의 이전 판입니다!
목차
MPINO STUDIO 2 Phase 2 · 메모리 이해하기
P·M·D·C·T·R 메모리의 차이, 주소 표기, 메모리 영역 설정, 사용 위치 확인, 시간 특수 접점을 설명합니다.
| 기준 보드 | 완료 목표 |
|---|---|
| MPINO-8A4R(T)-S | 메모리 주소를 구분하고 프로젝트에서 사용 위치를 찾을 수 있음 |
1. PLC 기본 메모리
Arduino와 다르게 PLC에서는 P,M,D,C,T,R 메모리를 사용합니다. Arduino code에서 PLC에 할당된 메모리를 제외하고 남은 메모리에서 변수를 할당할 수 있습니다.
메모리는 프로그램이 실행되는 동안 입력 상태, 내부 조건, 계산 결과, 타이머 값과 같은 데이터를 보관하는 공간입니다. MPINO Studio 2의 래더 로직과 Arduino C 코드는 이 메모리를 공유하여 사용할 수 있습니다.
기본 주소는 영역을 나타내는 문자 + 0부터 시작하는 번호로 씁니다. 예를 들어 M10은 M 영역의 11번째 주소이고, D0은 D 영역의 첫 번째 주소입니다.
| 영역 | 단위 | 저장 형태 | 값의 범위 |
|---|---|---|---|
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 |
P 주소 주의: P 주소는 보드의 핀 편집에서 확인하고 수정할 수 있습니다. P 주소의 입출력 방향과 실제 단자는 프로젝트에서 선택한 보드의 정의를 따릅니다.
R 값 오차 주의: 32비트 실수는 부동 소수점 연산의 한계로0.1 + 0.2의 결과가 정확한0.3이 아니라 약0.30000001로 저장될 수 있습니다. 이는 IEEE 754 32비트 부동 소수점을 사용하는 제어기에서 공통적으로 고려해야 하는 특성입니다.
2. 메모리 영역
MPINO-8A4R(T)-S를 선택했을 때의 기본 메모리 개수는 다음과 같습니다.
설정 → 메모리 영역 설정에서 메모리의 사용 개수를 수정할 수 있습니다. (단축키: Ctrl + Shift + M)
| 영역 | 기본 개수 | 기본 주소 범위 |
|---|---|---|
P | 64 | P0 ~ P63 |
M | 1,024 | M0 ~ M1023 |
D | 200 | D0 ~ D199 |
C | 100 | C0 ~ C99 |
T | 128 | T0 ~ T127 |
R | 50 | R0 ~ R49 |
메모리 영역 설정 창: P·M·D·C·T·R 입력칸을 비워 두면 보드 기본값을 사용합니다. 값을 입력하면 해당 프로젝트의 사용 개수를 변경하며, 창 아래에서 예상 SRAM 사용량과 전체 SRAM을 함께 확인할 수 있습니다.
개수와 마지막 주소를 혼동하지 마십시오. 번호가 0부터 시작하므로 D 메모리 200개는 D0부터 D199까지입니다.
C 영역과 보드 핀 매핑
MPINO-8A4R(T)-S에서는 C0 ~ C10 메모리에 아날로그 입력, NTC 온도 입력, PWM이 연결되어 있습니다.
매핑 메모리는 설정 → 래더 핀맵 설정에서 변경할 수 있습니다.
아날로그·PWM 출력 주의: 아날로그 출력 또는 PWM 출력에 메모리를 매핑하면 매핑한 주소의 값으로 출력되므로 Arduino 코드에서analogWrite관련 함수를 사용할 수 없습니다.analogWrite관련 함수를 사용하려면 설정 → 래더 핀맵 설정에서 해당 출력의 사용을 체크 해제하십시오.
| C 주소 | 보드 기능 | MCU 핀 |
|---|---|---|
C0 ~ C5 | 아날로그 입력 | A0 ~ A5 |
C6 ~ C7 | NTC 온도 입력 | A6 ~ A7 |
C8 ~ C10 | PWM 출력 | D21 ~ D23 |
C11 ~ C99 | 위 기능에 직접 배정되지 않은 C 영역 | 사용 목적을 확인한 뒤 선택 |
중요: 이 보드에서C0~C10을 일반 카운터 주소로 정하면, 같은 주소를 사용하는 보드 기능과 데이터가 겹칠 수 있습니다. 카운터 주소를 정하기 전에 보드·메모리 정보의 핀맵과 사용 메모리 맵을 함께 확인하십시오.
매핑된 주소는 보드별로 다릅니다. 또한 사용자가 변경할 수 있으므로 설정 → 래더 핀맵 설정에서 확인하십시오.
3. 데이터 형식
데이터 폭은 한 번에 읽거나 저장할 비트 수입니다. 값이 가질 수 있는 범위와 사용하는 메모리 양이 달라집니다.
| 데이터 폭 | 크기 | 부호 있는 값의 범위 | 대표 용도 |
|---|---|---|---|
| BIT | 1비트 | 0 또는 1 | 접점, 코일, ON/OFF 상태 |
| BYTE | 8비트 | -128 ~ 127 | 작은 정수 |
| WORD | 16비트 | -32,768 ~ 32,767 | 일반 정수, D·C·T의 기본 값 |
| DWORD | 32비트 | -2,147,483,648 ~ 2,147,483,647 | WORD 범위를 넘는 큰 정수 |
R은 32비트를 사용하지만 DWORD 정수가 아니라 실수를 저장하는 별도의 영역입니다. 숫자 크기가 32비트라는 이유만으로 DWORD 접근과 R 메모리를 같은 방식으로 사용하면 안 됩니다.
값을 정할 때는 현재 값만 보지 말고 계산 후의 최댓값도 확인하십시오. 예를 들어 1일 동안 1ms마다 증가하는 누적값은 86,400,000이므로 WORD 범위를 넘습니다.
4. 메모리 주소 읽는 방법
메모리 주소는 단순한 형식부터 필요한 요소를 하나씩 더해 읽습니다.
M0: M 영역의 0번 BIT 주소입니다.D0: D 영역의 0번 WORD 주소입니다.D0.1: D0 WORD 안의 두 번째 비트입니다. 비트 번호는 0부터 시작합니다.WM1.2: M 영역을 WORD로 묶은WM1안의 세 번째 비트입니다.M18과 같은 비트를 가리킵니다.
메모리 구조
비트, 바이트, 워드, 더블워드, 실수의 메모리 구조입니다.
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처럼 같은 규칙을 사용합니다.
5. 프로젝트에서 사용한 메모리 찾기
메뉴에서 보기 → 사용 메모리 맵을 선택하거나 Ctrl+Shift+L을 누릅니다.
주소를 바꾸기 전과 메모리 영역 크기를 줄이기 전에 이 화면을 확인하면 중복 사용과 범위 오류를 줄일 수 있습니다.
6. 시간에 따라 동작하는 특수 접점
@로 시작하는 특수 접점은 일반 P·M 메모리 주소와 달리 시간이 흐르면 MPINO Studio 2가 상태를 자동으로 갱신합니다.
| 형식 | 동작 | 예 |
|---|---|---|
@<ms> | 지정한 시간 경계를 지날 때 한 번, 한 스캔 동안만 ON | @100은 100ms마다 한 스캔 ON |
@F<ms> | 지정한 시간만큼 ON, 같은 시간만큼 OFF를 반복 | @F1000은 1초 ON, 1초 OFF 반복 |
@100은 프로그램 스캔이 정확히 100ms 시각과 일치하지 않아도 경계를 지나갔다면 한 번 ON됩니다. 주기적으로 값 하나를 증가시키거나 일정 간격으로 작업을 시작할 때 사용할 수 있습니다.
@F1000은 점멸 상태를 직접 뒤집는 코드를 작성하지 않아도 1초 간격의 ON/OFF 조건을 만듭니다.
특수 접점 입력 규칙은 다음과 같습니다.
- 시간 단위는 밀리초(ms)입니다.
- 괄호를 쓰지 않습니다.
@F(1000)이 아니라@F1000으로 입력합니다. - 접점 셀 또는 상승·하강 엣지 셀에서만 사용합니다.
- 출력 코일 주소에는 사용하지 않습니다.
- 임의의
@ON같은 이름은 사용할 수 없습니다.
7. 실습 · 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으로 되돌리고 다시 빌드·업로드하십시오.
8. 상황별 메모리 선택 기준
| 저장하려는 값 | 먼저 검토할 영역 | 확인할 내용 |
|---|---|---|
| 실제 디지털 입력·출력 | P | 선택한 보드의 핀맵과 입출력 방향 |
| 래더 내부 ON/OFF 조건 | M | 다른 회로에서 같은 주소를 이미 사용하는지 |
| 일반 정수와 계산 결과 | D | WORD 범위를 넘는지 |
| 카운터 현재값 | C | 보드 핀에 매핑된 C 주소와 겹치는지 |
| 타이머 경과값 | T | 같은 타이머 주소를 중복 사용하지 않는지 |
| 소수점이 있는 값 | R | 실수 오차를 고려한 비교 조건 |
| 일정 주기의 접점 조건 | @<ms>, @F<ms> | 한 스캔 펄스인지 반복 ON/OFF인지 |
9. 완료 확인
다음 항목을 모두 설명하거나 직접 확인할 수 있으면 Phase 2를 완료한 것입니다.
P,M,D,C,T,R의 용도를 구분할 수 있습니다.- MPINO-8A4R(T)-S의
C0~C10이 보드 기능에 연결된다는 점을 알고 있습니다. - BIT, BYTE, WORD, DWORD의 크기와 부호 있는 값의 범위를 확인했습니다.
M0,D0,D0.1,WM1.2의 주소 형식을 구분할 수 있습니다.Ctrl+Shift+M으로 메모리 영역 설정을 열 수 있습니다.Ctrl+Shift+L로 사용 중인 메모리를 확인할 수 있습니다.@100과@F1000의 동작 차이를 설명할 수 있습니다.- 실습 프로젝트를 별도 이름으로 저장하고 빌드 결과를 확인했습니다.
문제해결방법
| 증상 | 확인할 항목 |
|---|---|
| 입력한 주소가 허용되지 않습니다. | 영역 문자, 주소 범위, B/W/D 접두어 지원 여부, .n 비트 접근 지원 여부를 차례로 확인합니다. |
| 메모리 영역 설정을 저장할 수 없습니다. | 예상 SRAM 사용량이 전체 SRAM을 넘어서 빨간색으로 표시되었는지 확인합니다. |
| 사용 메모리 맵에서 주소가 보이지 않습니다. | 올바른 영역 탭과 래더·코드 필터를 선택했는지 확인하고 주소를 입력한 뒤 Enter를 누릅니다. |
| C 카운터 값이 예상과 다릅니다. | MPINO-8A4R(T)-S의 C0 ~ C10 보드 핀 매핑과 주소 중복을 먼저 확인합니다. |
@F1000을 입력할 수 없습니다. | 출력 코일이 아닌 접점 또는 엣지 셀인지, 괄호 없이 입력했는지 확인합니다. |
| P32가 점멸하지 않습니다. | @F1000 접점과 P32 코일이 같은 회로에 있는지, 빌드·포트 선택·업로드가 정상 완료됐는지 확인합니다. |



