Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
cubloc:laddernumber:index [2026/03/04 20:48] admincubloc:laddernumber:index [2026/03/25 03:38] (current) – [잘못된 사용 예시] admin
Line 1: Line 1:
 ====== 수 시스템 (Number System) ====== ====== 수 시스템 (Number System) ======
  
-더로직에서 사용하는 기본 데이터 처리 단위는 **워드(16비트)**와 **더블워드(32비트)**입니다. \\ 큐블록 레더 환경은 시스템 예약 주소와의 간섭을 방지하기 위해 엄격한 수치 범위를 준수해야 합니다.+더로직에서 사용하는 기본 데이터 처리 단위는 **워드(16비트)**와 **더블워드(32비트)**입니다. \\ 큐블록 레더 환경은 시스템 예약 주소와의 간섭을 방지하기 위해 엄격한 수치 범위를 준수해야 합니다.
  
 ===== 1. 메모리 구조 (D영역) ===== ===== 1. 메모리 구조 (D영역) =====
Line 10: Line 10:
 ===== 2. 데이터 타입 및 범위 제한 ===== ===== 2. 데이터 타입 및 범위 제한 =====
  
-본 시스템은 하드웨어 제어 포트(P, WP, PI, PO 등)와의 데이터 충돌을 방지하기 위해 **부호 없는 양수(Unsigned Integer)** 사용을 원칙으로 합니다.+본 시스템은 하드웨어 제어 포트(P, WP 등)와의 데이터 충돌을 방지하기 위해 **부호 없는 양수(Unsigned Integer)** 사용을 원칙으로 합니다.
  
 ^ 단위 ^ 비트 수 ^ 10진수 사용 범위 ^ 16진수 사용 범위 ^ ^ 단위 ^ 비트 수 ^ 10진수 사용 범위 ^ 16진수 사용 범위 ^
Line 16: Line 16:
 | 더블워드 (D-Word) | 32-bit | 0 ~ 2,147,418,111 | 00000000H ~ 7FFEFFFFH | | 더블워드 (D-Word) | 32-bit | 0 ~ 2,147,418,111 | 00000000H ~ 7FFEFFFFH |
  
-> **중요 알림:** 워드(Word)와 더블워드(D-Word) 모두 **양수(Unsigned)** 처리를 권장합니다. 특히 더블워드는 시스템 예약 주소 영역(0x7FFF1000 이상)을 침범하지 않도록 상한치 **0x7FFEFFFF** 이내에서만 사용해야 합니다. +===== 3. 상한치 제한 =====
- +
-===== 3. 상한치 제한 사유 및 음수 사용 금지 ===== +
- +
-[Image of Memory-mapped I/O address space allocation]+
  
 ==== 시스템 예약 주소와의 충돌 ==== ==== 시스템 예약 주소와의 충돌 ====
-* **0x7FFF1000 ~ 0x7FFFFFFF** 영역은 하드웨어 입출력 포트(P0, WP0 등)를 제어하기 위한 **Memory-Mapped I/O** 주소로 예약되어 있습니다. +  * **0x7FFF1000 ~ 0x7FFFFFFF** 영역은 하드웨어 입출력 포트(P0, WP0 등)를 제어하기 위한 **Memory-Mapped I/O** 주소로 예약되어 있습니다. 
-* **음수(2의 보수사용 금지:** 를 표현하기 위해 최상위 비트(MSB)를 1로 설정할 경우(예: 0x80000000 이상), 시스템은 이를 숫자가 아닌 시스템 예약 주소로 오인여 연산 오류나 하드웨어 오작동을 일으킵니다.  +  * ** 워드(Word)와 더블워드(D-Word) 모두 **수(Unsigned)** 처리를 권장합니다. 특히 더블워드는 시스템 예약 주소 영역(0x7FFF1000 이상)을 침범지 않도록 상한치 **0x7FFEFFFF** 이서만 사해야 합니다.
-따라서, 음수 연산이 필요한 경우 수치 자체에 부호를 붙이지 말고, 별도의 D영역을 활하여 부호 플래그(0:양수, 1:음수)를 관리하는 로직을 권장합니다.+
  
-==== 연산 주의 ==== 
-* 연산 결과값이 **2,147,418,111 (0x7FFEFFFF)**를 초과하게 되면 시스템 내부 주소와 겹치게 되어 데이터 왜곡이 발생합니다. 
-* 입력 및 연산 과정에서 이 상한치를 초과하지 않도록 사전에 로직 상에서 필터링이 필요합니다. 
  
 ==== 잘못된 사용 예시 ==== ==== 잘못된 사용 예시 ====
Line 41: Line 33:
 {{ :cubloc:laddernumber:dwval.png?nolink |}} {{ :cubloc:laddernumber:dwval.png?nolink |}}
  
-> **작업 팁:** VB6 기반 도구 사용 시 `CLng` 함수는 0x80000000 이상의 값을 음수로 처리하여 상한 검사를 우회할 수 있으므로, 반드시 `Val()` 함수 등을 이용해 수치 범위를 정확히 체크해야 합니다. 
  
-[[cubloc:index#더_로직:|CUBLOC 더로직 목록으로 가기]]+아래와 같이 음수를 DWMOV로 넣을 수는 있지만, 이는 예기치 못한 시스템 에러가 발생할 수 있으므로, 피해야 합니다. 
 + 
 +{{ :cubloc:laddernumber:dwval2.png?nolink |}} 
 + 
 +[[cubloc:index#더_로직:|CUBLOC 더로직 목록으로 가기]]