====== 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에서 읽기만 수행 ==== 주의 ==== * 이러한 메모리 충돌은 시스템에서 자동으로 보호되지 않습니다. * 사용자가 설계 단계에서 영역을 구분하여 사용해야 합니다. [[..:index|← CUBLOC2 목차로 돌아가기]]