우리는 귀하의 프라이버시를 소중히 여깁니다
"모든 쿠키 허용"을 클릭하면 사이트 탐색을 개선하고, 사이트 사용을 분석하며, 마케팅 및 성능 노력에 도움을 주기 위해 쿠키를 귀하의 장치에 저장하는 데 동의한 것으로 간주됩니다. 이 주제에 대한 추가 정보는 당사의 정책에서 확인할 수 있습니다. 개인정보 보호정책
개발자가 WINSTAR Smart Display를 보다 쉽게 시작하고 동작 방식을 이해할 수 있도록, 다양한 애플리케이션 환경을 기반으로 한 실습형 데모 프로젝트를 지속적으로 소개하고 있습니다. 이번 글에서는 Modbus의 기본 동작을 빠르게 이해할 수 있도록 또 하나의 Modbus 데모를 소개합니다. 처음 접하는 개발자는 물론 관련 경험이 있는 개발자도 참고할 수 있는 예제입니다.
Modbus는 산업 자동화 분야에서 다양한 장치 및 센서와 통신하고 이를 제어하기 위해 널리 사용되는 프로토콜입니다. 본 애플리케이션에서는 Arduino 보드를 시스템 통합을 위한 호스트 컨트롤러로 사용합니다. Arduino는 Modbus를 통해 다양한 센서 및 토글 버튼과 연동하여 Smart Display의 Gauge와 Indicator, 그리고 외부 LED를 제어할 수 있습니다. 본 데모에서는 Arduino Mega 2560과 RS485 Shield를 사용하여 Modbus 방식으로 Smart Display와 통신합니다.
이 프로그램에서는 Modbus 레지스터를 이용하여 센서 값을 읽고, 디스플레이 페이지를 전환하며, 센서 입력값에 따라 LED를 제어하는 방법을 보여줍니다.

시스템 블록 다이어그램
먼저 최신 버전의 GUI Builder를 실행하여 새 프로젝트를 생성합니다. 프로젝트 이름을 입력하고 기본으로 자동 지정된 프로젝트 폴더를 확인합니다. Device Type에서 7인치 디바이스를 선택하고, 통신 프로토콜을 설정한 후 디스플레이 방향은 기본값인 가로 모드(Landscape)로 설정합니다. UI Template에서 Blank를 선택한 다음, 마지막으로 Create 버튼을 클릭하여 아래 그림과 같이 새 프로젝트를 생성합니다.

프로젝트를 생성하면 아래와 같은 화면이 표시됩니다.

본 데모 시나리오에서는 페이지를 하나 더 추가해야 합니다. Page 버튼을 클릭한 다음 + 버튼을 클릭하여 새 페이지를 추가합니다.

Resource 패널에서 사용자 지정 배경을 선택하여 배경 스타일을 설정할 수 있습니다.

Page 영역에서도 배경 스타일을 선택할 수 있습니다.

이제 첫 번째 페이지의 Controls 영역으로 돌아갑니다. 데모 시나리오에 따라 Toggle Button을 선택하여 페이지 레이아웃 영역으로 드래그 앤 드롭합니다. Gauge와 Indicator도 동일한 방법으로 배치합니다.

앞의 단계를 완료하여 두 개의 페이지를 생성하고 첫 번째 페이지에 Toggle Button, Gauge 및 Indicator 위젯을 배치했다면 프로젝트를 빌드할 수 있습니다. Page Info 영역으로 이동한 후 Device 버튼을 클릭하고 Device Properties를 선택합니다. Protocol 설정을 확인한 다음 COM 포트를 선택하고 통신에 사용할 보드레이트를 설정합니다. 이어서 "Connect to device" 버튼을 클릭하여 디바이스에 연결합니다. 마지막으로 아래 그림과 같이 Upload 버튼을 클릭하여 프로젝트를 업로드하고, 업로드가 완료될 때까지 기다립니다.

프로젝트 업로드가 완료되면 아래 그림과 같이 OK 버튼을 클릭합니다.

업로드가 완료되면 아래 그림과 같이 시작 화면이 표시됩니다.

시작 화면이 표시된 후 첫 번째 페이지로 전환됩니다. 이로써 GUI Builder를 이용한 프로젝트 빌드 및 업로드 과정이 완료됩니다.

본 예제에서 필요한 모든 레지스터 주소는 아래 그림과 같이 Arduino IDE 프로그램에 정의되어 있습니다. 먼저 물리 버튼 센서, 가변저항 센서 및 LED에 사용할 핀을 정의합니다. 그런 다음 ModbusMaster 라이브러리를 사용하여 Modbus 통신을 초기화합니다. 프로그램에서는 디스플레이 페이지, Indicator, Gauge 및 Toggle Button을 제어하기 위한 Modbus 레지스터 주소를 설정합니다.

호스트 디바이스와 Smart Display가 Modbus RS485를 통해 통신하는 과정을 자세히 확인하려면 GUI Builder 통신 로그의 Test Device 또는 Simulator 영역을 참조하십시오.
아래 그림은 Toggle Button의 로그 메시지 데이터를 보여줍니다. 이 데이터를 통해 Smart Display의 Toggle Button 데이터에 접근하는 방법을 확인할 수 있습니다. Data Byte의 두 번째 바이트는 16진수 00 06이며, Toggle Button의 주소를 나타냅니다. 이를 10진수로 변환하면 6이 됩니다. 이 주소는 Toggle Button에 데이터를 쓰거나 입력할 때 사용할 수 있습니다. 그러나 본 데모에서는 Toggle Button을 Smart Display에서 데이터를 읽어오는 용도로 사용하며, Toggle Button의 데이터를 읽기 위해 레지스터 주소 "7"을 사용합니다.

그렇다면 Toggle Button에서 데이터를 읽을 때 왜 레지스터 주소 "7"을 사용하는 것일까요? 자세한 통신 방식은 Modbus Smart Display 데이터시트를 참조하는 것이 좋습니다. 아래 그림은 데이터시트의 일부로, 첫 번째 Object(Widget)인 Toggle Button에서 사용하는 주소를 보여줍니다.

아래 그림은 Gauge의 로그 메시지 데이터를 보여줍니다. 이 데이터를 통해 Gauge의 주소에 접근하는 방법을 확인할 수 있습니다. Data Byte의 두 번째 바이트는 16진수 00 6A이며, Gauge의 주소를 나타냅니다. 이를 10진수로 변환하면 106이 됩니다. 이 주소를 사용하여 Gauge 위젯에 데이터를 쓸 수 있습니다.

아래 그림은 Indicator의 로그 메시지 데이터를 보여줍니다. 이 데이터를 통해 Indicator의 주소에 접근하는 방법을 확인할 수 있습니다. Data Byte의 두 번째 바이트는 16진수 00 CE이며, Indicator의 주소를 나타냅니다. 이를 10진수로 변환하면 206이 됩니다. 이 주소를 사용하여 Indicator 위젯에 데이터를 쓸 수 있습니다.

ADC_REF 상수는 5V로 설정되며 ADC(Analog-to-Digital Converter)의 기준 전압을 나타냅니다. 이 값은 물리 버튼 유닛의 감도를 조정하는 데 사용됩니다. GROVE_VCC 상수는 5로 설정되며 회로에서 사용하는 Grove 인터페이스의 VCC 전압을 나타냅니다. FULL_ANGLE 상수는 300으로 설정되며 회로에서 사용하는 Rotary Angle의 전체 회전 각도를 나타냅니다. 코드의 주석에 따르면 이 값의 단위는 도(degree)입니다.

여기에서는 프로그램에 필요한 여러 변수를 선언하고 데이터 타입을 지정한 후 0으로 초기화합니다.

물리 버튼 및 LED와 같은 외부 부품에 사용할 핀 모드와 관련 설정을 정의합니다. 또한 아래 그림과 같이 시리얼 통신에 사용할 보드레이트를 설정합니다.

아래 그림은 "ChangePageFunction"이 정의된 부분을 보여줍니다. 데이터 쓰기에는 "writeSingleRegister" 함수를 사용합니다.

아래 그림은 Arduino 호스트가 가변저항(Rotary Angle) 센서의 값 변화를 읽은 후, Modbus 통신을 통해 해당 값을 Smart Display로 전송하여 Gauge 값을 변경하는 과정을 보여줍니다. Gauge 값이 120 미만이면 13번 핀에 연결된 LED는 OFF 상태가 되고 Indicator는 녹색으로 표시됩니다. Gauge 값이 120 이상이면 LED가 켜지고 Indicator는 빨간색으로 변경됩니다.

아래 그림은 Arduino 호스트가 물리 버튼 센서의 값 변화를 읽은 후, Modbus 통신을 통해 해당 값을 Smart Display로 전송하여 페이지를 전환하는 과정을 보여줍니다.

아래 그림은 Arduino 호스트가 Modbus 통신을 통해 Smart Display로부터 Toggle Button의 값 변화를 읽고, 이를 이용하여 12번 핀에 연결된 LED를 켜는 과정을 보여줍니다.

이 부분은 통신 처리에서 매우 중요합니다. Smart Display와 통신할 때 데이터를 쓰기 위해 "writeSingleRegister" 함수를 사용하고, Smart Display에서 데이터를 읽기 위해 "readHoldingRegisters" 함수를 사용합니다. 또한 Gauge와 같이 지속적으로 값이 변경되는 위젯과 통신할 때는 delay 처리에 주의해야 합니다. Modbus 통신에서는 데이터를 전송한 후 응답을 확인하고 다음 데이터를 전송해야 하므로, 데이터 송수신 과정에서 적절한 delay 처리가 필요합니다.

Arduino IDE에서 프로그램 검증과 업로드를 완료하면 데모 시나리오를 실행할 수 있습니다. Toggle Button이 OFF 상태이면 12번 핀에 연결된 외부 LED도 꺼진 상태를 유지합니다. Toggle Button을 ON으로 전환하면 아래 그림과 같이 외부 LED가 즉시 켜집니다.

본 데모 시나리오에서 Gauge는 가변저항 센서에 의해 제어됩니다. Gauge 값이 0에서 120 사이이면 Indicator는 녹색으로 표시되고 13번 핀에 연결된 LED는 꺼집니다. Gauge 값이 120을 초과하면 아래 그림과 같이 Indicator가 빨간색으로 변경되고 13번 핀의 LED가 켜집니다.

본 데모에서는 물리 버튼을 눌러 페이지를 전환할 수 있습니다. 물리 버튼 센서를 누르면 디스플레이가 두 번째 페이지로 전환되고, 다시 누르면 아래 그림과 같이 첫 번째 페이지로 돌아갑니다.

이상으로 7인치 Smart Display를 이용한 데모 프로젝트가 완료되었습니다. 본 데모에서는 다양한 센서와 LED를 사용하여 물리 버튼으로 디스플레이 페이지를 전환하고 Gauge, Indicator 및 외부 LED를 제어합니다. 프로그램 다운로드 및 본 데모 프로젝트에 대한 자세한 내용은 GitHub 데모 프로그램을 참조하십시오.
참고: 본 데모 프로젝트에서 사용한 Modbus RS485 Shield에 대한 자세한 내용은 Modbus RS485 Shield 기술 자료를 참조하십시오. 실제 하드웨어 구성은 아래 그림과 같습니다.

본 프로그램은 Arduino 보드와 Modbus 프로토콜을 이용하여 센서와 Indicator를 제어하는 방법을 보여주는 예제입니다. Modbus 레지스터를 통해 센서 값을 읽고, 디스플레이 페이지를 전환하며, 센서 입력값에 따라 LED를 제어하는 방법을 확인할 수 있습니다. Smart Display 제어에 Modbus를 적용하는 방법을 이해하고자 하는 개발자에게 실용적인 참고 자료로 활용할 수 있습니다.
"모든 쿠키 허용"을 클릭하면 사이트 탐색을 개선하고, 사이트 사용을 분석하며, 마케팅 및 성능 노력에 도움을 주기 위해 쿠키를 귀하의 장치에 저장하는 데 동의한 것으로 간주됩니다. 이 주제에 대한 추가 정보는 당사의 정책에서 확인할 수 있습니다. 개인정보 보호정책