본문 바로가기

네트워크

modbus의 이해

반응형

[알아야할 네트워크 기본]

-프로토콜

프로토콜(Protocol)은 통신 시스템이 데이터를 교환하기 위해 사용하는 통신 규칙.

-통신프로토콜

통신 프로토콜 또는 통신 규약 은 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계


-통신 프로토콜 종류 10가지 


참고 블로그 :

https://m.blog.naver.com/PostView.nhn?blogId=dbman&logNo=50017670910&proxyReferer=https%3A%2F%2Fwww.google.com%2F 


 ① TCP : Transmission Control Protocol   
OSI 4계층에 해당되는 역할을 수행하면서 응용프로그램사이에서 데이터를 움직이는 transport Layer Protocol이다. 신뢰성을 지니고 바이트스트림의 커넥션에서 커넥션된 데이터를 배달하는서비스이며 네트워크의 대역을 최적화하려하고 신뢰성이 보존된다

 

 ②IP : Internet Protocol   
 실질적으로 TCP/IP suit라 불리면서 거의 인터넷의 가장 중요한 Protocol로 사용되고 있다. network Layer에 해당되며 경로배정 등의 역할을 수 행한다.

 

③UDP : User Datagram Protocol   
 신뢰성이 없는점은 IP와 비슷하다. 비록 믿지 못하고 연결성이 없는 프로토콜이지만 단 일의 호스트에서 다수의 목적지로 데이터를 루트 할 수 있다. UDP는 데이터 배달을 위 해서 datagram을 사용한다.  
 
④SMTP : Simple Mail Transfer Protool 
FTP 의 작은 역할을 수행하는데 말그대로 메 일을 전송하는 프로토콜이다. 메시지 전송 에이전트라고 한다

 

⑤ FTP : File Transfer Protocol

 파일을 전송하거나 받도록 해주는 것이다. 인터넷상에서 파일을 전송하는 표준 프로토콜이다. File의 access도 포함하고 있고 Sun사가 개발한 NFS(Network File System)을 포함하는 기능을 가지고 있다

 

⑥ ICMP : Internet Control Message Protocol   
IP Layer 계층에서 사용되는 것으로 IP계층과 TCP나 UDP의 tranport Layer을 관리하 거나 조절하는message역할을 수행하며 error message을 사용자Protocol에 돌려 준다. icmptime 192.9,200.1이라고 명령을 type해서 조사를 할 수도있다


⑦IGMP : Internet Group Management Protocol

Muticasting 을 위한 host와 router을 위해서 사용된다. 인터넷은 세가지 방식을 수용하고 있다. 일대일 통신과 1대 다통신 1대 전체 통신이다 그중에서 특정 그룹에게만 전송함 멀티캐스팅을 확인하는 명령은 sunchon% netstat -ni 이다( -n은 interface정보에 관해서 보여준다. 그리고 I는 IP address에 관한 정보이다.) 이 프로토콜은 RIP와 같이router에 사용된다. 

 
⑧SNMP : Simple Network Magement Protocol   
Network Manegement station과 agent로 구성되어 있다. 이것은 Application 프로그램 과 network level 서비스를 제공하는 것이다. 

 대충 설명하자면 TCP/IP을 사용하는 인터넷에서 IP router를 실험을 하거나 제어가 필 요한 작동중인 스 위치이다. 이기종간의 네트워크를 연결하는 것이기 때문이다. 응용프로 그램 과 TCP/IP 전송 Layer 프로토콜간에 통신을 하는데 사용데는 인터넷 관리 운영하 는 프로토콜이다. 


⑨RARP : Reverse Address Resolution Protocol   
 하드디스크가 없는 시스템에서 대신 주소를 답해주도록 disk file에 기록해두록해서 작동해 주는 프로토콜  
 
⑩PPP : Point -to -Point Protocol   



-TCP/IP(transmission control protocol/internetprotocol) 

 서로 다른 시스템을 가진 컴퓨터들을 연결하고, 데이터를 전송하는데 사용하는 통신 프로토콜의 집합으로 인터넷프로토콜 수트(internet Potocol Suite)라고도 불린다.


-TCP/IP 프로토콜 구조 

   구조 정리 잘된 블로그 : http://popbox.tistory.com/68 들어가기 

                         :http://copycode.tistory.com/32?category=740132


    호스트: 최종사용자, 노트북, 휴대전화 등등

    라우터: 서로 다른 네트워크에 속한 호스트간에 데이터를 교환할 수 있게 하는 장비


  =>호스트와 라우터, 라우터와 라우터, 호스트와 호스트가 통신하려면 정해진 절차와 방법을 따라야하는데 이를  통신 프로토콜 이라고 부른다.

 인터넷에서 사용하는 핵심프로토콜은 TCP/IP이다. 이를 비롯한 각종 프로토콜을 총칭하여 TCP/IP 프로토콜이라고 한다. 



  출처 :참고블로그 위에 주소있음



-TCP/IP socket 통신


*Socket통신

 소켓은 소프트웨어로 작성된 추상적인 개념의 통신 접속점이라고 할 수 있는데 네트웍 응용 프로그램은 소켓을 통하여 통신망으로 데이터를 송수신하게 된다. 소켓은 응용 프로그램에서 TCP/IP를 이용하는 창구 역할을 하며 응용 프로그램과 소켓 사이의 인터페이스 역할을 하고 있습니다.


*통신구조



  *시리얼 통신과 이더넷 통신


시리얼 통신 : 한마디로 단 2대의 컴퓨터로 통신하는것..
                 대표적인 것이 SLIP(Serial Line Internet Protocol)과 PPP(Point-to-Point Protocol)입니다.
         -장점:  단순, 초간단하다. 그냥 선으로 내보내기만 하면 됨. 

                  SLIP의 경우 그냥 데이터의 처음과 끝만 구분해주는 것 밖에는 데이터 링크계층에서 할일이 없다.

         -단점: 네트워크 계층에서의 프로토콜 다중화가 어렵다. 

                 그래서 만든게 PPP인데 제어능력과 프로토콜 다중화 기능을 높인것.


이런 시리얼 통신에서의 가장 큰 단점이라 하면 충돌 메카니즘이 필요없어 트래픽을 줄일수있다는 것입니다.

이더넷 통신 : 단 2대만의 컴퓨터만 통신하는것이 아니라 여러대의 컴퓨터간 통신을 하기위해 만들어진것

                공유매체를 사용하는 덕에 충돌메카니즘이 필요하다. 

                시스템 구별을 위한 주소도 필요하고 다양한 컴퓨터에서 필요로 하는 프로토콜의 다중화 기능과, 애러 제어능                  력, 기타 등등의 상당히 많은 부분이 필요하게 됩니다.


시리얼 통신이든 이더넷이든 둘다 데이터 링크 계층에서 행해지는 것이지만 분명한 차이텀이라면 충돌 메카니즘이라고 하는게 좋겠습니다.


-----------------------------------------------------------------------------------------------------------

참고블로그 : http://ymkimit.blogspot.com/2013/11/modbus_25.html



1.modbus의 개요

1) 목적: 제조공장이나 놀이공원의 기계들을 자동화하고 제어하려는 목적으로 사용되는

Programmable Logic Controller(PLC)들과의 통신에 사용할 목적으로 만들어짐.


2) 프로토콜이 단순하지만, 장비제어와 모니터링에 필요한 기능들을 수행할 수 있다.


3) 쓰이는 곳: 산업용 전자 장치들을 서로 연결할려는 목적으로 널리 사용된다.

4) 특징:  산업용 통신 프로토콜로 개발됨

            프로토콜이 공개되어 있고 공짜

            설치와 유지보수가 용이하다

            비트단위 또는 워드(16bit)단위로 정보조작이 용이하다.


     장점:

  •            산업용 어플리케이션에 적합하게 개발됨
  •            오픈 프로토콜로 무료임
  •            개발 및 관리가 쉬움
  •            비트 또는 워드 단위로 정보 전달


5) 예 : 모드버스는 약 240개의 장비들을 서로 연결 할 수 있다.

         예를 들면 , 온도와 습도를 측정하는 여러 장비들이 모니터링 서버로 현재상태를 보고하도록 할 수 있다.

         일반적으로 서버에서 센서 장비들에게 질의를 보내고 장비들은 이에 대해 응답하는 형태로 동작한다.

            SCADA시스템에서도 모니터링 서버와 remote terminal unit(RTU)를 연결하기위해 모드버스를 자주 사용한다.

 

         *remote terminal unit (RTU) :원격 단말 장치

원격지에서 데이터를 수집해 전송 가능한 형식으로 데이터를 변환한 뒤 중앙기지국으로 송신하는 장치

6) 통신과 장비 : master/slave 기반 프로토콜

-시리얼 통신: Master로 설정된 장비만이 slave로 정보를 요청할 수 있다

-이더넷 통신: 네트워크상의 어떤 노드도 정보를 요청할 수 있다.

요청정보는 읽기와 쓰기 모두 가능하다. 하지만, 대부분의 경우 master는 하나만 존재한다.


7) 제한:데이터는 연속적으로 전송해야 한다.

버퍼링을 위해 하나의 메세지를 중간에 끊어서 전송할 수 없다.

통신 보안을 제공하지 않는다.


8)라이브러리 :  모드버스를 구현한 라이브러리로는 대표적으로 libmodbus,대부분의 OS에서 사용가능



참고할 블로그 :https://m.blog.naver.com/hyungjungkim/220096598822



2.modbus의 통신 프레임 포맷 3가지


    =통신 네트워크의 종류와 요청 정보의 형식에 따라 여러가지 프레임 포맷이 존재한다.

      

       [시리얼 포트로 통신 ]

       modbus RTU(length bits)는 시리얼 통신망을 이용, 프레임에서는 이진정보를 사용

       modbus Ascii(length char)도 시리얼 통신망을 이용, 프레임에 ascii문자를 넣어 통신 

      

         참고 블로그 https://blog.naver.com/kim1417/221019472708


       [이더넷 포트로 통신]

      modbus Tcp(bytes) 


unit identifier는 modbus 게이트웨이 내부의 RTU 장비들을 지칭할 목적으로 사용되며, 이런 경우가 아니라면 IP 주 소를 사용해 목적지를 인식할 수 있으므로 사용되지 않는다.




바이트 순서는 빅 엔디언을 사용하여 읽는다..



******프레임구조 파악 하기





참고할 블로그 : 

http://comfilewiki.co.kr/ko/doku.php?id=tcpport:modbus-tcp_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C%EC%9D%B4%EB%9E%80:index#modbus-tcp%EB%9E%80


3.function코드별 의미




                                           참고블로그 : http://ymkimit.blogspot.com/2013/11/modbus_25.html



*modbus데이터 타입2가지
 1)불리언,bit
 2)부호없는16비트 정수,워드(16bit)

*modbus 메모리타입2가지
 1)coil
 2)register










*master=클라이언트 *slave=서버


*조사해야할 목록 

=>   function code: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x0f, 0x10



FC1 "Read Coil Status"=코일 상태 읽기

     

 예시> 17번 주소의 슬레이브장치로부터 이산 코일#20~56의 on/off 상태를 요청

      

11 01 0013 0025 0E84


11:슬레이브주소 (11 hex =address 17)

01:기능코드 1 (코일 상태 읽기)

0013: 읽을 첫번째 코일 데이터 주소 (0013 hex=19,+1 offset=코일 #20)

0025:요청된 총 코일 수 (25 hex=37, input 20 to 56)

OE84:오류검사를 위한 CRC(cyclic redundancy check)


응답>


11 01 05 CD6B20E1B 45E6


11 : 슬레이브 주소 ( 11 hex = address17) 
01 : 기능 코드 1 (코일 상태 읽기) 
05 : 따라야 할 데이터 바이트 수 (37 코일 / 바이트 당 8 비트 = 5 바이트) 

//(cd,6B,B2,0E,1B) =>5가지 
CD : 코일 27-20 1,100 1,101 ) 

//빅엔디언 방식으로 데이터를 뒤에서 부터 읽는다. 

//20번 true, 21번 false .... 8bit씩 끊어어서 
6B : 코일 35-28 ( 0110 1011 ) 
B2 : 코일 43-36 ( 1011 0010 ) 
0E : 코일 51-44 ( 0000 1110 ) 

//뒤에서부터 bit 쓰고 나머지는 0000으로 채웟 8bit 만들어줌 
1B : 3 개 공간 홀더 및 코일 56-52 ( 0001 1011 ) 
45E6 다음 CRC (Cyclic Redundancy Check).


더 중요한 비트는 높은 코일 변수를 포함합니다. 이것은 코일 (36)이 오프 ( 0)이고, 43이 온 ( 1 ) 인 것을 나타낸다. 요청 된 코일의 수로 인해, 마지막 데이터 필드 (1B) 는 단지 5 코일의 상태를 포함한다. 이 데이터 필드의 3 개의 최상위 비트는 0으로 채워집니다.


나머지 해당 함수코드설명 http://www.simplymodbus.ca/FC01.htm 클릭


FC2 "Read Input Status" =입력 상태 읽기 

FC3 "Read Holding Registers" =

FC4 "Read Input Registers"

FC5 "Force Single Coil"


FC6 "Preset Single Register"


시뮬 확인>

tcp프레임구조는 mbap라는 앞에 헤더프로토콜 이 존재하기때문에 rx,tx에서 정보가 포함되서 나온다.. 오류코드가 포함되서 나오는 경우는 rtu,ascll modbus 에서 포함되어 나옴





FC15 "Force Multiple Coil"

FC16 "Preset Multiple Registers"




4.Modbus TCP 패킷 분석

    

 참고 블로그 :http://comfilewiki.co.kr/ko/doku.php?id=tcpport:modbus-                       tcp_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C%EC%9D%B4%EB%9E%80:index#modbus-tcp%EB%9E%80







모드버스 시뮬레이터 서버, 클라이언트를 설치하고 







슬레이브는 마스터(클라이언트)응답 기다리는중.. 





connect를 눌러 연결후에, 함수코드 로 전송을 해본다. 

마스터 쪽에서 슬레이브의 메모리값을 바꿀수도 있다. 





TX는 query, Rx는 응답 코드  헥사코드로 주고받을수 있다..





와이어샤크는 Loopback패킷 캡쳐가 되지 않기 때문에 (127.0.0 또는 localhost) 


이를 해결하기위해 rawcpa사용_rawccap 으로 패킷캡쳐하고 와이어샤크로 열람해야 한다. 

 


그래서 Raw cap 설치 





설치하면 5번 적고 





파일이름 및 확장자를 pcap.으로 loop.pcap 으로 만들고 


ctrl +c 를 눌러 확인 및 종료 




그리고 와이어샤크에ㅓ 파일을 열어 패킷을 분석하면된다 . 






5.Modbus RTU 캡쳐해서 분석 (com0com 이용)


-시리얼 통신 방식이기때문에 가상포트를 만들어야한다 .

또한 tCP와 통신방식이 다르기때문에 와이어샤크로 분석을 할수가없다. Rx,Tx로 코드들을 분석해야한다. 일단 RTU 통신하려면. 


com0com 에 들어가서 가상 포트를 설치하자. 





가운데 체크 해제하고 .. 





장치관리자에 들어가서 com 0com에 느낌표 뜬 부분 클릭해서 장치관리자

드라이버 업데이트 진행 






그리고 그 밑에 가상으로 생성된 포트 pair 확인 한다. com3과 com4포트로 진행한다. 



서버쪽 시뮬레이터를 키고 공구모양의 아이콘을 클릭한후 comport는 com3올 바꾸고, 모드버스 타입도 RTU로 바꾼다. 




마찬가지로 클라이언트(마스터) 쪽에서도 빨간줄로 동그라미 친곳들을 설정을 한후 연결하면 통신이 가능하다. 



반응형