목차
BASIC에서 LD 영역 접근
BASIC 프로그램에서는 LD(래더)에서 사용하는 모든 메모리 영역에 직접 접근할 수 있습니다. 각 영역은 언더바(_) 접두어를 사용하여 변수 형태로 읽기/쓰기가 가능합니다.
즉, LD에서 사용하는 메모리를 BASIC에서도 동일하게 공유하며 사용할 수 있습니다.
기본 사용 방법
LD 영역은 다음과 같이 사용합니다.
_D(0) = 123 ' LD의 D0에 값 쓰기 Debug Dec _D(0),Cr ' LD의 D0 값 읽기
- 읽기(Read)와 쓰기(Write) 모두 가능
- LD와 BASIC이 동일한 메모리를 공유
사용 예
Dim value As Integer value = 100 _D(0) = value ' LD 데이터 메모리에 기록 value = _D(0) ' LD에서 사용 중인 값 읽기 Debug Dec value,Cr
LD 메모리 영역
BASIC에서는 아래 모든 LD 메모리에 접근할 수 있습니다.
| 레지스터 이름 | BASIC 접근 방식 | 범위 | 단위 | 설명 |
|---|---|---|---|---|
| I 입력 이미지 | _I(n) | I0 ~ I15 | 1 bit | 입력 상태 |
| Q 출력 이미지 | _Q(n) | Q16 ~ Q31 | 1 bit | 출력 상태 |
| X 확장 입력 | _X(n) | X0 ~ X127 | 1 bit | 확장 입력 |
| Y 확장 출력 | _Y(n) | Y0 ~ Y127 | 1 bit | 확장 출력 |
| M 내부 릴레이 | _M(n) | M0 ~ M2047 | 1 bit | 내부 메모리 |
| S 시스템 릴레이 | _S(n) | S0 ~ S127 | 1 bit | 시스템 상태 |
| D 데이터 메모리 | _D(n) | D0 ~ D7999 | 16 bit | 일반 데이터 |
| DD 더블워드 | _DD(n) | DD0 ~ DD7999 | 32 bit | 32비트 데이터 |
| DF 실수 데이터 | _DF(n) | DF0 ~ DF7999 | Float | 실수 데이터 |
| T 타이머 값 | _T(n) | T0 ~ T999 | 32 bit | 타이머 현재값 |
| C 카운터 값 | _C(n) | C0 ~ C999 | 32 bit | 카운터 현재값 |
| SD 시스템 데이터 | _SD(n) | SD0 ~ SD99 | 16 bit | 시스템 데이터 |
Retain 메모리 (정전 유지)
다음 영역은 전원이 꺼져도 값이 유지됩니다.
| 레지스터 이름 | BASIC 접근 방식 | 범위 | 단위 | 설명 |
|---|---|---|---|---|
| R 유지 비트 | _R(n) | R0 ~ R2047 | 1 bit | 유지 비트 |
| RD 유지 워드 | _RD(n) | RD0 ~ RD99 | 16 bit | 유지 데이터 |
| RDD 유지 더블워드 | _RDD(n) | RDD0 ~ RDD99 | 32 bit | 유지 데이터 |
| RDF 유지 실수 | _RDF(n) | RDF0 ~ RDF99 | Float | 유지 실수 |
중요 주의 사항
BASIC과 LD는 동일한 메모리를 공유하므로, 읽기와 쓰기 사용 방식에 주의해야 합니다.
읽기(Read)는 자유롭게 가능
- BASIC과 LD에서 동일한 주소를 동시에 읽는 것은 문제가 없습니다.
value = _D(0) ' BASIC에서 읽기
쓰기(Write)는 충돌 가능
- BASIC과 LD에서 동일한 주소에 값을 쓰는 경우,
- 나중에 실행된 값이 최종적으로 남습니다.
' LD에서 D0 = 100 ' BASIC에서 _D(0) = 200
즉, 실행 순서에 따라 결과가 달라집니다.
동시 쓰기 문제
- BASIC과 LD가 같은 주소에 거의 동시에 값을 쓰면,
- 예상하지 못한 값이 기록될 수 있습니다.
권장 사용 방법 (중요)
코딩 시 메모리 영역을 역할별로 분리하는 것이 좋습니다.
- BASIC 전용 쓰기 영역 지정
- 예:
D1000 ~ D1999 - BASIC: 쓰기 가능
- LD: 읽기만 사용
- LD 전용 쓰기 영역 지정
- 예:
D0 ~ D999 - LD: 쓰기 가능
- BASIC: 읽기만 사용
' BASIC → LD 전달 _D(1000) = value ' LD에서 읽기만 수행
주의
- 이러한 메모리 충돌은 시스템에서 자동으로 보호되지 않습니다.
- 사용자가 설계 단계에서 영역을 구분하여 사용해야 합니다.
