문서의 이전 판입니다!
목차
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 주소 주의:P0이 모든 보드에서 항상 입력이라는 뜻은 아닙니다. P 주소의 입출력 방향과 실제 단자는 프로젝트에서 선택한 보드 정의를 따릅니다.
R 값 비교 주의: 실수는 계산 과정에서 아주 작은 반올림 차이가 생길 수 있습니다. 제어 조건에서는 필요한 허용 범위를 정해 비교하는 방법을 사용하십시오.
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 |
개수와 마지막 주소를 혼동하지 마십시오. 번호가 0부터 시작하므로 D 메모리 200개는 D0부터 D199까지입니다.
C 영역과 보드 핀 매핑
MPINO-8A4R(T)-S에서는 C 영역의 앞부분이 보드 기능에 연결되어 있습니다.
| 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부터 시작합니다.
폭 접두어와 비트 접근
| 표기 | 사용할 수 있는 영역 | 예 |
|---|---|---|
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 코일이 같은 회로에 있는지, 빌드·포트 선택·업로드가 정상 완료됐는지 확인합니다. |



