본문 바로가기

네트워크 & 통신

Modbus 실습

참고: https://system-monitoring.readthedocs.io/en/latest/modbus.html

 

modbus — System monitoring 0.1 documentation

본 절은 wikipedia의 modbus 를 번역하면서 약간 살을 붙인 것이다. modbus는 1997년, 지금은 Schneider Electric인 Modicon 이라는 회사에서 만든 시리얼 통신 프로토콜이다. 제조공장이나 놀이공원의 기계들을

system-monitoring.readthedocs.io

 

1. 아마존 웹서비스에서 우분투를 생성했다.

혹시 몰라서 인바운드 아웃바운드 규칙에서 모든 tcp 포트를 허용했다.

보안상 원래는 이렇게 하면 안된다.

인바운드 규칙. 아웃바운드 규칙도 똑같이 설정했다.

 

2. 깃허브 페이지에서 libmodbus 를 다운받는다.

나는 참고 링크에 있는대로 3.0.5 버전을 다운 받았다. 

https://github.com/stephane/libmodbus

태그 누르고 원하는 버전 압축 파일 다운 받으면 된다. 

 

* 압축파일 우분투 컴퓨터에 올리는 방법

modaxterm으로 ssl 접속한 다음, 좌측 지구모양 아이콘을 클릭하면 폴더 트리가 나온다. 여기에 압축파일을 끌어다 놓으면 된다.  

 

3. socat으로 케이블을 연결한 것 같은 환경을 만든다. 

실제로 케이블을 꽂으면 우분투에 /dev/usb0 이런식으로 연결된 케이블이 뜬다고 한다. 

sudo apt-get install socat
socat -d -d pty pty

 

 

 

 

4. /libmodbus-3.0.5/tests 폴더의 샘플 server, client 소스코드에서 케이블 경로를 3에서 얻은 가짜 경로로 바꿔주고 컴파일한다.

컴파일 하는게 안 나와서 좀 헤멨는데 그냥 tests 폴더 경로에서 make만 치면 자동으로 되는 거 였다. 

~/download/libmodbus-3.0.5/tests $ make

 

5. 컴파일한 코드를 실행한다. 가상케이블 환경 만들어주는 접속환경과는 별개로, 서버, 클라이언트 각각 새로 우분투에 접속을 해서 실행시켜야한다. 

./unit-test-server rtu #서버 실행 
./unit-test-client rtu #클라이언트 실행

여기서 또 삽질을 했다.

 ./unit-test-client rtu 이렇게만 하면 되는데, 

./unit-test-client.c rtu로 해서 에러가 났다. 

만약 실행할 때 권한 없음 에러 뜨면 명령어 앞에 sudo를 붙여주면 된다. 

그리고 클라이언트보다 서버를 먼저 실행시켜야한다. 클라이언트부터 실행시켜서 또 한참 헤멨다. 

클라이언트는 실행 후 조금 있다가 멈춘다.

 

 

client 요청 / 응답 화면
서버에서 받은 요청내역/응답 화면

 

그림으로 그려보면 이런 구조 인 것 같다. 

이해가 잘 안되는데..서버, 클라이언트 코드 뜯어봐야겠다. 

'네트워크 & 통신' 카테고리의 다른 글

라즈베리파이 <-> 안드로이드 블루투스 통신 예제  (1) 2023.09.03
c 소켓 프로그래밍 예제  (0) 2023.07.23
스위치 vs 브릿지  (0) 2023.03.25
Modbus 공부  (2) 2023.02.14