-
[MFC] 조명 컨트롤러 연결 (Modbus 형식) + RS485 케이블을 이용한 컨트롤정보공유/공부 2023. 12. 13. 14:37
기존 사용하는 조명이 아닌 새로운 조명을 써야하는 일이 생겼다. 기존에는 RS-232케이블을 통해 조명컨트롤러에 연결해서 조명값을 조절했는데 이번 조명 컨트롤러는 RS-232 RS-485 통신해야했다. 이번 프로젝트를 하면서 전기선도 만들어서 연결해보고 조립하는 과정이 있었는데 처음 해보는 건데 흥미로웠고 전기에 대해 많이 배울 수 있어 좋았던 프로젝트 이다.
테스트 하드웨어
- 작업용 노트북
- iPulse controller
- CCS White Dome (HPD-100sw)
하드웨어 구성
- 컨트롤러 <-> PC : RS-485 to USB를 통해 연결
출처 : iPulse controller 메뉴얼 위 그림과 같이 생긴 컨트롤러 인데 iPulse strobe controllers라고 한다. 컨트롤러 옆면에 LAN선을 연결하고 랜선의 내부 전선에서 필요한 전선(여기에서는 3번, 6번, 7번, 8번)의 피복을 벗겨 RS-485 to USB 케이블에 연결한다.
출처 : iPulse controller 메뉴얼 조명, 파워, 피시와의 연결을 마치고 이제 프로그램 내부에서 조명 컨트롤을 하려면 modbus 프로토콜에 대한 이해가 필요하다. RS-485 to USB의 포트 넘버를 원하는 곳에 지정해주고(초기에 20번에 잡아놨다가 컨트롤이 안되는 상황이 발생했다.>> 5번으로 변경하니 잘되었음) 통신사양을 맞춰준다. 이제 포트를 열고 값을 넣어주면 프로그램 내부에서 컨트롤이 가능한데...! Modbus에는 지정되어 있는 데이터 형식있다.
출처 : iPulse controller 메뉴얼 Slave Add + Function + Start Register + #of REgister + CRC Checksum으로 이루어져 있다.
- Slave Add : 슬레이브 주소 값
- Function : 어떤 동작을 할 지 정해진 값
- Start Register : 해당 작없 주소 값
- #of REgister : 주소 값에 넣어줄 값(ex : 조명값, 키고 끄는 값 등)
- CRC Checksum : 데이터를 보내거나 받을 때 에러 체크를 위한 값
만약 내가 조명값을 조절할 수 있는곳(0x340)에 1이라는 조명값을 셋팅하고 싶다면 000603400001+CRC를 보내면 된다.
Slave Add Function Start Register #of REgister CRC 00 06 0340 0001 ? 이제 체크섬을 구해야하는데 modbus의 체크섬은 기존 방식(모든값을 다 더한 값 붙이기)과 다르게 crc16방식으로 진행합니다.
https://www.lammertbies.nl/comm/info/crc-calculation?crc=8005&method=hex
On-line CRC calculation and free library - Lammert Bies
On-line CRC calculation sheet. Free CRC routines downloadable. Covers CRC-16, CRC-32, CRC-CCITT, DNP, Sick and other routines.
www.lammertbies.nl
내가 원하는 데이터를 입력하면 CRC값이 리턴됩니다. 하지만 해번 검색하고 프로그램에 입력할 수는 없으니 CRC16 계산하는 코드를 짜서 보내야합니다.
코드는 업체에서 구하는 함수를 받아 구현을 했습니다. 후에 프로그램에 연결하여 구현 완료!
'정보공유 > 공부' 카테고리의 다른 글
[MFC] PC <-> PC 소켓 통신 TCP/IP / 이더넷 연결 / 무선 연결 / IP 통신 / JSON / rapid JSON (0) 2024.01.02 [MFC] C++에서 JSON 다루기 / rapid JSON / JSON / 예외처리 (1) 2023.12.27 [MFC] 상단바 없애기 (0) 2023.12.18 [MFC] Visual Studio 2022 새 솔루션 만들기 SDI, 메뉴바 제거, 도구바 제거, 창 속성 변경 (0) 2023.12.05 mfc - web 통신 (0) 2023.05.16