문서의 이전 판입니다!
목차
MPINO STUDIO 2 Phase 2 · 메모리 이해하기
P·M·D·C·T·R 메모리의 차이, 주소 표기, 메모리 영역 설정, 사용 위치 확인, 시간 특수 접점을 설명합니다.
| 기준 보드 | 완료 목표 |
|---|---|
| MPINO-8A4R(T)-S | 메모리 주소를 구분하고 프로젝트에서 사용 위치를 찾을 수 있음 |
1. 메모리란?
메모리는 프로그램이 실행되는 동안 입력 상태, 내부 조건, 계산 결과, 타이머 값과 같은 데이터를 보관하는 공간입니다. 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의 기본 메모리
MPINO-8A4R(T)-S를 선택했을 때의 기본 메모리 개수는 다음과 같습니다.
설정 → 메모리 영역 설정에서 메모리의 사용 개수를 수정할 수 있습니다.
| 영역 | 기본 개수 | 기본 주소 범위 |
|---|---|---|
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이 연결되어 있습니다.
| C 주소 | 보드 기능 | MCU 핀 |
|---|---|---|
C0 ~ C5 | 아날로그 입력 | A0 ~ A5 |
C6 ~ C7 | NTC 온도 입력 | A6 ~ A7 |
C8 ~ C10 | PWM 출력 | D21 ~ D23 |
C11 ~ C99 | 위 기능에 직접 배정되지 않은 C 영역 | 사용 목적을 확인한 뒤 선택 |
중요: 이 보드에서C0~C10을 일반 카운터 주소로 정하면, 같은 주소를 사용하는 보드 기능과 데이터가 겹칠 수 있습니다. 카운터 주소를 정하기 전에 보드·메모리 정보의 핀맵과 사용 메모리 맵을 함께 확인하십시오.
다른 MPINO 제품은 메모리 개수와 핀 매핑이 다를 수 있습니다. 다른 보드 프로젝트에 위 주소표를 그대로 적용하지 마십시오.
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. 메모리 주소 읽는 방법
긴 주소는 왼쪽부터 데이터 폭 접두어, 메모리 영역, 주소 번호, 비트 번호로 나누어 읽습니다.
예를 들어 WM1.3은 다음 뜻입니다.
W: WORD 폭으로 묶어 봅니다.M: 내부 비트 메모리 영역입니다.1: 주소 묶음 번호입니다..3: 그 WORD 안의 4번째 비트입니다. 비트 번호도 0부터 시작합니다.
메모리가 묶이는 구조
아래 그림은 MP STUDIO 사용설명서의 메모리 구조 표현 방식을 참고하되, 현재 MPINO Studio 2에서 지원하는 주소 규칙에 맞춰 다시 구성한 것입니다.
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처럼 같은 규칙을 사용합니다.
폭 접두어와 비트 접근
| 표기 | 사용할 수 있는 영역 | 예 |
|---|---|---|
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 메모리 영역입니다. 두 문자가 같은 모양이므로 한 글자씩 역할을 나누어 읽으십시오.
다음 표기는 사용할 수 없습니다.
BD0처럼 D·C·T 영역 앞에B또는W를 붙이는 표기- R 영역에 폭 접두어를 붙이는 표기
- R 영역에
.n비트 번호를 붙이는 표기
주소 입력창에서 오류가 표시되면 철자만 고치기 전에 선택한 영역에서 그 폭과 비트 접근을 지원하는지 확인하십시오.
5. 메모리 영역 크기 확인하기
메뉴에서 설정 → 메모리 영역 설정을 선택하거나 Ctrl+Shift+M을 누릅니다.
다음 순서로 확인합니다.
- 창 위쪽에서 현재 프로젝트의 보드가 MPINO-8A4R(T)-S인지 확인합니다.
- P, M, D, C, T, R 입력칸의 개수를 확인합니다.
- 값을 바꾸지 않은 빈 입력칸은 선택한 보드의 기본값을 사용합니다.
- 아래쪽의 예상 SRAM 사용량과 전체 SRAM을 확인합니다.
- 전체 용량을 넘으면 표시가 빨간색으로 바뀌고 저장할 수 없습니다.
- 변경이 필요하면 값을 입력하고 저장을 누릅니다.
- 창을 닫은 뒤
Ctrl+S를 눌러.mp2프로젝트 파일에 변경 내용을 저장합니다.
특별한 이유가 없다면 보드 기본값을 유지하는 것이 좋습니다. 메모리 개수를 늘리면 사용할 수 있는 주소가 늘지만 SRAM도 더 사용합니다. 개수를 줄이면 기존 래더나 Arduino C 코드가 범위를 벗어난 주소를 참조할 수 있으므로, 변경 전후에 사용 메모리 맵을 확인하십시오.
6. 프로젝트에서 사용한 메모리 찾기
메뉴에서 보기 → 사용 메모리 맵을 선택하거나 Ctrl+Shift+L을 누릅니다.
사용 메모리 맵은 다음과 같이 사용합니다.
- 위쪽의
P,M,D,C,T,R탭에서 영역을 선택합니다. - 래더와 코드 필터로 확인할 소스를 좁힙니다.
- 주소 검색란에 주소를 입력하고
Enter를 눌러 바로 찾습니다. - 색이 표시된 주소 셀은 현재 프로젝트에서 사용 중인 메모리입니다.
- 사용 중인 셀을 클릭하면 아래쪽에 참조 위치가 표시됩니다.
- 참조 항목을 선택하면 해당 래더 셀 또는 코드 위치로 이동할 수 있습니다.
- 창을 닫았다 다시 열어도 탭과 스크롤 위치는 유지됩니다. 앱을 다시 시작하면 초기화됩니다.
Phase 1 프로젝트로 확인하기
- Phase 1에서 저장한 프로젝트를 엽니다.
Ctrl+Shift+L을 누릅니다.P탭을 선택합니다.P0과P32가 사용 중으로 표시되는지 확인합니다.P0을 선택해ladderLoop의 NO 접점 위치가 나오는지 확인합니다.P32를 선택해 출력 코일 위치가 나오는지 확인합니다.
주소를 바꾸기 전과 메모리 영역 크기를 줄이기 전에 이 화면을 확인하면 중복 사용과 범위 오류를 줄일 수 있습니다.
7. 시간에 따라 동작하는 특수 접점
@로 시작하는 특수 접점은 일반 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같은 이름은 사용할 수 없습니다.
8. 실습 · 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으로 되돌리고 다시 빌드·업로드하십시오.
9. 상황별 메모리 선택 기준
| 저장하려는 값 | 먼저 검토할 영역 | 확인할 내용 |
|---|---|---|
| 실제 디지털 입력·출력 | P | 선택한 보드의 핀맵과 입출력 방향 |
| 래더 내부 ON/OFF 조건 | M | 다른 회로에서 같은 주소를 이미 사용하는지 |
| 일반 정수와 계산 결과 | D | WORD 범위를 넘는지 |
| 카운터 현재값 | C | 보드 핀에 매핑된 C 주소와 겹치는지 |
| 타이머 경과값 | T | 같은 타이머 주소를 중복 사용하지 않는지 |
| 소수점이 있는 값 | R | 실수 오차를 고려한 비교 조건 |
| 일정 주기의 접점 조건 | @<ms>, @F<ms> | 한 스캔 펄스인지 반복 ON/OFF인지 |
10. 완료 확인
다음 항목을 모두 설명하거나 직접 확인할 수 있으면 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의 동작 차이를 설명할 수 있습니다.- 실습 프로젝트를 별도 이름으로 저장하고 빌드 결과를 확인했습니다.
문제해결방법
| 증상 | 확인할 항목 |
|---|---|
| 입력한 주소가 허용되지 않습니다. | 영역 문자, 주소 범위, B/W/D 접두어 지원 여부, .n 비트 접근 지원 여부를 차례로 확인합니다. |
| 메모리 영역 설정을 저장할 수 없습니다. | 예상 SRAM 사용량이 전체 SRAM을 넘어서 빨간색으로 표시되었는지 확인합니다. |
| 사용 메모리 맵에서 주소가 보이지 않습니다. | 올바른 영역 탭과 래더·코드 필터를 선택했는지 확인하고 주소를 입력한 뒤 Enter를 누릅니다. |
| C 카운터 값이 예상과 다릅니다. | MPINO-8A4R(T)-S의 C0 ~ C10 보드 핀 매핑과 주소 중복을 먼저 확인합니다. |
@F1000을 입력할 수 없습니다. | 출력 코일이 아닌 접점 또는 엣지 셀인지, 괄호 없이 입력했는지 확인합니다. |
| P32가 점멸하지 않습니다. | @F1000 접점과 P32 코일이 같은 회로에 있는지, 빌드·포트 선택·업로드가 정상 완료됐는지 확인합니다. |



