지난 상편에 이어 MODBUS 통신에서 나오는 PDU와 ADU에 대해서 더 알아보겠습니다.
안녕하세요? 데이터위자드입니다.
이번 포스팅은 지난 MODBUS 통신의 PDU와 ADU에 대한 내용(상편)에 이어서 PDU와 ADU에 대해서 조금 더 알아보는 시간을 가져보도록 하겠습니다.
(*이전 모드버스 PDU와 ADU에 대한 내용은 아래 내용 참고하시기 바랍니다.)
MODBUS 통신 알아보자 (4) - MODBUS의 PDU & ADU - 상편
Modbus 통신의 PDU(protocol data unit)의 3가지 타입에 대해서
이전 포스팅에서,
모드버스 통신을 포함한 거의 대부분의 통신에 해당되는 기본적인 개념이라고 말씀드렸던, Client & Server에 대해서 다시 되짚어 보겠습니다.
- 고객(Client)은 정보를 요청(Request)하고
- 제공자(Server)는 요청에 응답(Response)한다
그리고 이때, PDU가 등장한다고 말씀드렸죠.
PDU = Function code + data
그리고, Client와 Server 상호 간의 트랜잭션은 다음의 과정을 거치게 된다고 했고요.
- Client는 PDU(Function code + data)를 담아 Server에 요청(Request)한다.
- Server는 Client의 요청을 수신한다. PDU의 Function code를 파싱 하고, PDU의 Data의 address를 참조하여 server 내 데이터를 취급(Handling)한다.
- Server는 Client의 PDU의 Function code를 바탕으로 요청을 수행하고, Client 측에 PDU(Function code + Data)를 응답(Response)한다. 이때 요청이 정상적으로 에러 없이 취급(Handling)되면 정상적인 데이터를 응답하고, 만약 오류가 있다면, 예외처리 PDU(Exception Function code + Exception code)를 응답한다.
- Client는 Server로부터 응답을 수신하고 트랜잭션은 종료된다.
위에 열거한 일련의 과정 중에서 PDU는 각기 다른 3가지 타입으로 진행하게 됩니다. 그 3가지 타입은 다음과 같습니다.
- MODBUS Request PDU, mb_req_pdu
- MODBUS Response PDU, mb_rsp_pdu
- MODBUS Exception Response PDU, mb_excep_rsp_pdu
위에 열거한 절차의 순서에 대입해 본다면,
- MODBUS Request PDU, mb_req_pdu -> 1번 절차. Client가 Server에게 정보를 요청(Request) 할 때
- MODBUS Response PDU, mb_rsp_pdu -> 3번 절차. Server가 Client에게 정상적인 데이터를 응답(Reponse) 할 때
- MODBUS Exception Response PDU, mb_excep_rsp_pdu -> 3번 절차. Server가 정상적으로 Client의 요청을 처리하지 못할 경우 Client에게 예외 상황(Exception)을 응답(Reponse) 할 때
으로 쉽게 유추하실 수 있겠습니다.
참고로, 여기서 예외 처리(Exception)란, 비단 통신 분야뿐 아니라 컴퓨터 공학, 소프트웨어 공학에서도 두루 사용하는 비정상적인 상황에서의 대처방안을 말하는 것인데요. 통신에서는 비정상적인 상황을 Client에게 Server가 알려주는 용도라고 보시면 되겠습니다.
그럼, 각각의 PDU 타입에 대해서 살펴보도록 하겠습니다.
MODBUS Request PDU, mb_req_pdu = Function code (1 byte) + request data (n bytes)
Client가 Server 측에 Data를 요청할 때 사용하는 PDU 포맷입니다.
Function code 1 byte와 Requset data n(미정) bytes로 구성되는데요. 여기서 Request data의 크기는 Function code에 따라 달라지게 됩니다. (아래 표 참조)
MODBUS Response PDU, mb_rsp_pdu = Function code (1 byte) + response data (n bytes)
이번에는 반대로 Server가 Client 측에 Data를 응답할 때 사용하는 PDU 포맷입니다.
mb_req_pdu와 동일하게 Function code 1 byte와 Response data n(미정) bytes로 구성됩니다. Response data 크기 또한 Function code에 따라 달라지게 됩니다.
트랜잭션 흐름이 반대라는 점만 제외하면 mb_req_pdu와 동일하다고 볼 수 있겠습니다.
MODBUS Exception Response PDU, mb_excep_rsp_pdu = Exception Function code (1 byte) + exception code (1 byte)
이번에는 조금 다른 이야기인데요. 예외 처리에 대한 PDU입니다.
Function code가 Exception Function code로 바뀌고, Request or Response data 대신에 Exception code로 바뀌게 됩니다.
그렇다고 완전히 다른 방식이 되는 건 아니고요.
- 현재 Server로부터 이상 상황이 발생되었다는 것을 표시하는 Exception Function Code와
- 그 이상 상황에 대한 현상에 대한 내용을 알리는 Exception code
두 가지를 회신하는 것입니다. Exception code에 대해서는 다음의 표를 참조해 주세요.
code | 표시 | 설명 |
1 | Illegal Function | 쿼리에서 수신한 기능 코드가 Server에서 인식되거나 허용되지 않음 |
2 | Illegal Data Address | 일부 또는 전체의 데이터 주소가 Server에 허용되지 않거나 서버에 존재하지 않음 |
3 | Illegal Data Value | 데이터 값이 Server에 허용되지 않음. |
4 | Server Device Failure | 서버가 요청된 작업을 수행하는 동안 복구할 수 없는 오류가 발생 |
5 | Acknowledge | 서버가 요청을 처리 중이지만 시간이 지연되어, 클라이언트에서 시간 초과 오류가 발생하는 것을 방지하기 위해 반환되는 응답 |
6 | Server Device Busy | 서버가 처리 시간인 긴 다른 명령을 처리 중 |
7 | Negative Acknowledge | 서버가 프로그래밍 기능을 수행할 수 없음. 클라이언트는 진단 또는 오류 정보를 요청 |
8 | Memory Parity Error | 서버가 메모리에서 Parity error를 감지 |
10 | Gateway Path Unavailable | 잘못 구성된 모드버스 Gateway 경로 |
11 | Gateway Target Device Failed to Respond | 경로 설정 등의 이유로 서버가 응답하지 않을 때 전송됨 |
위와 같은 Exception code를 Client 측에 회신하게 되며, Client는 이 응답을 가지고 내부 설정된 로직에 준하여 재시도를 하거나 알람을 띄우거나 하는 일련의 행동을 하게 되죠.
물론, 이와 같은 예외 상황 응답 과정은 실제 현장에서 관련된 업무를 수행하시는 분들은 크게 고려해야 할 만한 사항은 아닐 것입니다. 거의 대부분은 각 모듈 간의 설정된 규칙에 의해 알아서 처리될 테니까요.
(Exception code 10번 11번과 같이 Modbus path에 대한 부분이라면, 아마도 통신이 아예 안되었기 때문에 사용자가 금방 인지할 수 있을 것입니다.)
PDU & ADU 중편 마무리하며,
오늘 포스팅에서는 지난 포스팅에서 이어서 모드버스 통신의 PDU의 3가지 타입과 그 동작에 대해서 세부적으로 알아보았습니다. 이전 포스팅에 언급한 Client & Server 그리고 그 상호 간에 Transaction에 대한 내용에 부가적으로 PDU의 타입을 설명했는데요.
정리해 보자면,
- MODBUS Request PDU, mb_req_pdu -> Client가 Server에게 정보를 요청(Request) 할 때
- MODBUS Response PDU, mb_rsp_pdu -> Server가 Client에게 정상적인 데이터를 응답(Reponse) 할 때
- MODBUS Exception Response PDU, mb_excep_rsp_pdu -> Server가 정상적으로 Client의 요청을 처리하지 못할 경우 Client에게 예외 상황(Exception)을 응답(Reponse) 할 때
이라 하겠습니다.
이번 포스팅 또한, 모드버스 통신에 대한 원론적인 내용이 주가 되었습니다. 현업에서 유지보수를 수행하시는 분들이라면 깊게 이해할만한 내용은 아닐 수도 있겠습니다. 하지만, 한 번쯤 관련 내용을 들어보신다면, 추후 정비 업무나 개선 업무를 수행하실 때 분명히 도움이 될 것이라 생각하는 바입니다.
앞서 정리한 내용을 포함하여, 아래 카테고리에서 모드버스와 필드버스에 대한 내용을 기록해 나가고 있습니다. 확인해 보시기 바랍니다.
'공장 자동화/통신' 카테고리의 글 목록 (datawizard.co.kr)
PDU 얘기만 하다 보니 벌써 중편으로 와버렸습니다. 나머지 이야기 그리고 ADU에 대한 내용은 다음 포스팅에서 마저 하도록 하겠습니다.😅
지금까지 데이터위자드였습니다. 오늘도 즐거운 데이터 생활 하시길 바랍니다.
감사합니다.
* 본 포스팅에서 언급된 모듈이나 제조사, 단체는 필자와 무관함을 알립니다.
'💗' 도움이 되셨다면 공감 클릭 부탁드립니다. 감사합니다.
'공장 자동화 > 통신' 카테고리의 다른 글
MODBUS 통신 알아보자 (7) - RS 232, RS 422/485 통신 비교 (0) | 2024.04.18 |
---|---|
MODBUS 통신 알아보자 (6) - MODBUS의 PDU & ADU - 하편 (1) | 2024.04.14 |
MODBUS 통신 알아보자 (4) - MODBUS의 PDU & ADU - 상편 (0) | 2024.04.09 |
MODBUS 통신 알아보자 (3) - MODBUS의 Function Code (0) | 2024.04.08 |
MODBUS 통신 알아보자 (2) - MODBUS 방식, 데이터 모델 (1) | 2024.04.07 |