YOGYUI

현대통신 월패드 RS-485 통신 프로토콜 - 엘리베이터 호출 본문

홈네트워크(IoT)/힐스테이트 광교산

현대통신 월패드 RS-485 통신 프로토콜 - 엘리베이터 호출

요겨 2024. 11. 26. 11:11
반응형

 

※ 티스토리 오블완(오늘 블로그 완료) 챌린지용 포스팅

※ 프로토콜 공통 명세 참고 링크: 현대통신 월패드 RS-485 통신 프로토콜 명세 - 공통 사양

Notice: 엘리베이터의 경우 조명이나 난방 등 다른 기기들과는 제어 메커니즘이 상이하다
엘리베이터를 호출하는 주체는 단지 내 네트워크 망에 연결된 월패드이며 이는 RS-485 통신으로는 접근이 불가능하다
하지만 엘리베이터 호출 기능이 탑재된 복도(현관 근처) 제어 패드가 설치되어 있는 경우, 복도 패드와 월패드는 RS-485 패킷을 주고받으며 복도 패드의 '엘리베이터 호출 버튼 눌림' 시 월패드는 이 정보를 받아 엘리베이터를 호출하게 된다 (즉, 월패드가 복도 패드로 상태 변경 명령 패킷을 전송하는 것이 아님!)

월패드 엘리베이터 제어 예시
엘리베이터 호출 기능이 탑재된 복도 패드

1. 현재 상태 조회 패킷 (query)

Index 0 1 2 3 4 5 6 7 8 9 10 11 12
Content Prefix Length - Dev
Type
Packet
Type
Category Room/Dev - Status Floor EV# Checksum Suffix
Value F7h 0Dh 01h 34h 01h 41h 10h 00h ??h ??h ??h ??h EEh
  • 통신 방향: [월패드] → [개별 장치]
    • 복도의 엘리베이터 호출 제어 패드로 현재 '엘리베이터'의 상태 정보를 보냄
    • 제어 패드는 이 값을 이용해 엘리베이터 호출 여부 LED를 점멸 (호출중이지 않은 경우 LED 점등)
    • Tip: 개발 시 쿼리 패킷을 현재 엘리베이터 상태 확인 용도로 사용하면 됨
  • 패킷 길이: 13 (= 0x0D)
  • 데이터 길이: 6
  • Device Type (Index 3): 0x34
  • Packet Type (Index 4): 0x01
  • Data
    • Data[0] (Index 5): 카테고리 (0x41로 고정)
    • Data[1] (Index 6): 상위 4비트 = 공간(방) 인덱스, 하위 4비트 = 장치 인덱스
      • 엘리베이터 호출 패드가 여러 개가 아닌 경우 0x10으로 고정
    • Data[2] (Index 7): 0x00 (이 외의 값은 발견하지 못함)
    • Data[3] (Index 8): 현재 엘리베이터의 이동 상태 및 세대 내에서의 호출 상태
      • 상위 4비트 (MSB 4bit): 엘리베이터 이동 상태 (상행/하행)
        • 0xA: 엘리베이터가 상행 이동 중
        • 0xB: 엘리베이터가 하행 이동 중
        • 0x0: 엘리베이터는 움직이지 않는 상태
      • 하위 4비트 (LSB 4bit): 월패드의 엘리베이터 호출 상태
        • 0x0: 엘리베이터는 호출되지 않은 상태 (IDLE)
        • 0x1: 엘리베이터가 세내 층수에 도착
        • 0x5: 엘리베이터가 상행으로 호출된 상태
        • 0x6: 엘리베이터가 하행으로 호출된 상태
    • Data[4] (Index 9): 현재 엘리베이터 층 수 (지하의 경우 0xB 16진수 값이 사용되며, 16진수 표현값을 정수로 변환해줘야 함)
      • 0x04: 지상 4층
      • 0xB5: 지하 5층
      • 0x10: 지상 10층
    • Data[5] (Index 10): 엘리베이터 호기
      • 조회 패킷 하나당 엘리베이터 호기 하나의 상태를 가리킴
      • 월패드가 엘리베이터를 호출하지 않은 경우 값은 0x00
  • 예시
    • F7 0D 01 34 01 41 10 00 00 00 00 9F EE: 월패드가 엘리베이터를 호출하지 않은 상태 (IDLE)
    • F7 0D 01 34 01 41 10 00 B5 B6 06 9A EE: 6호기 엘리베이터는 현재 지하6층(B6)에 있으며, 하행 이동 중이며 세내 내에서는 상행 호출 상태
    • F7 0D 01 34 01 41 10 00 A5 B3 07 8E EE: 7호기 엘리베이터는 현재 지하3층(B3)에 있으며, 상행 이동 중이며 세대 내에서는 상행 호출 상태 
    • F7 0D 01 34 01 41 10 00 A6 02 07 3C EE: 7호기 엘리베이터는 현재 지상2층(02)에 있으며, 상행 이동 중이며 세대 내에서는 하행 호출 상태

2. 상태 변경 명령 패킷 (command)

Index 0 1 2 3 4 5 6 7 8 9 10
Content Prefix Length - Dev
Type
Packet
Type
Category Dev / 
Room
Command - Checksum Suffix
Value F7h 0Bh 01h 34h 02h 41h 10h ??h 00h ??h EEh
  • 통신 방향: [임의의 장치] → [개별 장치]
    • 월패드가 RS-485 패킷으로 엘리베이터를 호출하는 제어 매커니즘이 아님
    • 임의로 만들어낸 패킷으로도 호출이 되는 것이 핵심
  • 패킷 길이: 11 (= 0x0B)
  • 데이터 길이: 4
  • Device Type (Index 3): 0x34
  • Packet Type (Index 4): 0x02
  • Data
    • Data[0] (Index 5): 카테고리 (0x41로 고정)
    • Data[1] (Index 6): 상위 4비트 = 공간(방) 인덱스, 하위 4비트 = 장치 인덱스
      • 엘리베이터 호출 패드가 여러 개가 아닌 경우 0x10으로 고정
    • Data[2] (Index 7): 상/하행 호출 명령값
      • 0x06: 하행 호출 명령
      • 0x05: 상행 호출 명령
        • 주의: 복도 제어패드에 엘리베이터 호출 버튼이 하나 뿐이며, 이 버튼이 '하행' 호출을 담당한다면 '상행 호출' 명령값은 무시됨 
    • Data[3] (Index 8): 0x00

3. 응답 패킷

3.1. 조회 응답

Index 0 1 2 3 4 5 6 7 8 9 10
Content Prefix Length - Dev
Type
Packet
Type
Category Dev / 
Room
- Status Checksum Suffix
Value F7h 0Bh 01h 34h 04h 41h 10h 00h ??h ??h EEh
  • 통신 방향: [개별 장치] → [월패드]
    • 복도 제어 패드의 엘리베이터 호출 버튼이 눌렸는지 여부를 반환한다
    • 월패드는 호출 버튼 눌림 상태에 따라 엘리베이터를 호출하게 다
  • 패킷 길이: 11 (= 0x0B)
  • 데이터 길이: 4
  • Device Type (Index 3): 0x34
  • Packet Type (Index 4): 0x04
  • Data
    • Data[0] (Index 5): 카테고리 (0x41로 고정)
    • Data[1] (Index 6): 상위 4비트 = 공간(방) 인덱스, 하위 4비트 = 장치 인덱스 D
      • 엘리베이터 호출 패드가 여러 개가 아닌 경우 0x10으로 고정
    • Data[2] (Index 7): 0x00 (이 외의 값은 발견하지 못함)
    • Data[3] (Index 8): 복도 제어 패드의 엘리베이터 호출 버튼 눌림 상태
      • 0x06: 하행 호출 버튼이 눌린 상태
        • 만약 상행 호출 버튼도 있는 패드라면 0x05가 상행 호출 버튼이 눌린 상태인 것을 가리킬 것으로 추측
      • 0x00: IDLE 상태

 

반응형