MODBUS 통신의 Function Code에 대해서 알아보겠습니다.
안녕하세요? 데이터위자드입니다. 즐거운 데이터 생활 되고 있으신지요?
앞서 모드버스 통신에 대해서 여러 개의 포스팅을 하면서 모드버스 통신에 대해서 이어오고 있습니다. 아직 모드버스 통신에 대해서 할 이야기가 많은데요. 오늘은 그중에서도 MODBUS 통신의 Function Code에 대해서 알아보겠습니다.
(* 모드버스에 대한 이전 포스팅은 아래 링크를 참조하여 주시기 바랍니다.)
Function Code라는 개념을 이야기하려고 하면, 먼저 드는 생각이 있을 것입니다.
통신 이야기하다 갑자기 Function Code가 뭐지?
Function Code에 대한 개념을 정의해 보자면,
모드버스 통신의 Function code는 모드버스 통신간에 어떠한 데이터를 서로 주고받을지에 대한 기능을 분류한 코드입니다.
어디 정의가 나와있지 않은 상태에서 제가 아는 지식선에서 설명하다 보니, 정의 자체가 조금 이상한 느낌이고 한 번에 와닿지 않는 느낌이실 것이라 생각됩니다.
이는, 모드버스 통신의 Function Code에 대한 타입을 설명하면 아마 자연스럽게 이해가 되실 것이라 생각되는데요.
모드버스에는 크게 3가지 타입의 Function code가 있습니다.
- Public
- User-defined
- Reserved
각각의 Type에 대해서 알아보도록 하겠습니다.
먼저 Public입니다.
말 그대로 대중적 혹은 공개되어 서로 상호 간에 약속된 상태의 기능 코드로 모드버스 통신의 제어 기능에 대한 것을 대중적으로 서로 약속한 상태로 사용하는 것을 말합니다.
위 분류표에서 보는 바와 같이,
Public은 또한 Data Access 용 Code와 Diagnostics(진단) 기능 코드로 분류되어 있는 것을 확인하실 수 있습니다.
Data Access 분류에서 보시면, 앞서 모드버스 통신의 데이터 모델에서 설명하여 이미 익숙한 Boolean에 대한 입출력 코드 그리고 16bit Word 데이터에 대한 입출력 코드를 보실 수 있습니다.
그리고, 그 각각의 discrete 신호와 Word 신호는 Function Code 1,2,3,4라는 규칙으로 구성되어 있다는 점도 확인하실 수 있겠습니다.
제 설명이 부족해서 그렇겠지만, 여기까지 읽으신 독자분이라면 아마,
뭔 소리를 하는 거야?
라고 생각하실 것입니다.
압니다. 저도 어떻게 설명하면 좋을지 머릿속에서 복잡한데, 읽으시는 분이라면 오죽 답답하시겠습니까?
옛날에, 백문이 불여 일견이라 했습니다.
원론적인 얘기는 집어치우고, 예제를 보도록 하겠습니다.
과거 가스트론 감지기 Python 연결에서 예시로 들은 모드버스 맵입니다.
우선 각 채널의 농도값입니다.
30XXX로 시작하는 읽기 전용의 'Read Input Register' 주소 값이며, 각 채널별 농도값을 16bit로 받아오는 형식이라 하겠습니다.
또한, 각 채널의 상태 Bit data를 살펴보면,
10XXX 로 표시되는 읽기/쓰기가 가능한 'Input Coils' 주소 값입니다. 이때 하나의 주소는 1 bit를 가지게 됩니다.
하지만, 꼭 위와 같은 예시의 제품만 있는 것이 아니고 각 모듈 제조사마다 각각 고유의 모드버스 통신 Address Map을 가지고 있기 때문에 이를 반드시 확인하고 PLC나 PC에서 통신을 설정해야 할 것입니다.
예를 들어 LS Electric의 GIMAC 1000은 모드버스 맵을 살펴보면,
각 제조사마다 고유한 양식의 모드버스 맵을 작성 하여 공유하는 것을 보실 수 있습니다. (Input Coil로 Reset 쓰기 지령을 줄 수 있고, 30XXX를 이용해 각각의 데이터 값을 읽어오는 기능을 수행하네요.)
회사마다 그리고 사람마다 각기 다른 양식을 사용하다 보니, 처음에는 난해한 것이 사실이나 위 내용을 곱씹어 보며 하나하나 차근히 풀어나가 보다 보면 큰 틀에서는 대동소이하다는 사실 또한 경험하실 수 있으실 것입니다.
다음은 User-Defined입니다.
이 역시 단어 그래도 사용자가 임의로 설정하여 사용할 수 있는 기능입니다. 65에서 72까지 그리고 100에서 110 까지를 사용자가 직접 기능을 지정할 수 있다는 것인데요. 솔직히 현장에서 그렇게 적용되어 있는 애플리케이션을 보지 못해서 그 활용에 대해서는 말씀드리기 어려운 점이 있습니다.
마지막으로 Reserved입니다.
이 역시 단어 뜻 그대로, Reserved(예약된, 선점된?) Function Code입니다. 이 또한 현장에서 실제 적용 사례를 본 적이 없어 자세히 말씀드릴 수 없으나, 과거 Legacy 제품들이 전용으로 사용했던 Function code라고 합니다.
한마디로, User defined 나 Reserved는 현장 실사용자들은 크게 고려하지 않는 Function Code 방식이니 Public에 대해서만 이해하시면 되시겠습니다.
정리해 보자면,
오늘 포스팅에서는 모드버스 통신의 Function Code에 정의와 더불어 관련된 내용을 몇 가지 제품의 Address Mapping 예시를 들어 설명해 보았습니다. 종합하여 정리해 보자면 아래와 같습니다.
모드버스 통신의 데이터 모델
MODBUS 통신의 4가지 데이터 모델,
- Coil (Discrete output) : PLC의 출력 접점의 기능 (읽기 / 쓰기)
- Discrete Input : PLC의 입력 기능 (읽기 Only)
- Input Register : PLC에서 정수형(Interger)을 읽는 기능 (읽기 Only)
- Holding Register : PLC에서 정수형을 읽거나 쓰는 기능 (읽기 / 쓰기)
모드버스 통신의 Function Code
MODBUS 통신의 3가지 Function code 분류,
- Public : 일반적으로 통용되는 코드들
- User Defined : 사용자가 정의하여 사용할 수 있는 코드들
- Reserved : 과거 Legacy에서 전용으로 사용하는 Function Code들
라도 하겠습니다.
본문에도 언급하였지만, 저 역시 이에 대해 글로 설명하는 것이 난해하다는 느낌이 들 정도로 설명하기가 쉽지 않은 그리고 독자분들도 이해하기 어려운 내용이라 생각됩니다.
앞서 설명한 바와 같이, 전반적인 개념을 먼저 이해하시고 각 제조사에서 제공하는 Modbus Mapping List를 참조하는 것이 오히려 전체적으로 감을 잡는데 더 도움이 되실 것이라 생각하는 바입니다.
또한, 아래 카테고리에서 모드버스와 필드버스에 대해서 계속 내용을 업데이트해 나아가고 있사오니, 참고해 보시는 것도 좋으실 것이라 생각됩니다.
지금까지 데이터위자드였습니다. 오늘도 즐거운 하루 보내시길 바랍니다.
감사합니다.
* 본 포스팅에서 언급된 모듈이나 제조사, 단체는 필자와 무관함을 알립니다.
'💗' 도움이 되셨다면 공감 클릭 부탁드립니다. 감사합니다.
'공장 자동화 > 통신' 카테고리의 다른 글
MODBUS 통신 알아보자 (5) - MODBUS의 PDU & ADU - 중편 (2) | 2024.04.11 |
---|---|
MODBUS 통신 알아보자 (4) - MODBUS의 PDU & ADU - 상편 (0) | 2024.04.09 |
MODBUS 통신 알아보자 (2) - MODBUS 방식, 데이터 모델 (1) | 2024.04.07 |
MODBUS 통신 알아보자 (1) - MODBUS 구조,역사, 특징 (2) | 2024.04.03 |
MODBUS 통신에서 Stop bit, Parity bit에 대해서 알아보자 (0) | 2024.04.03 |