데이터/Modbus

modbus 자주쓰는 function code 정리

쿠와와 2021. 3. 8. 18:49

1, 2, 3, 4, 5, 6, 15(0F), 16(10)

1. 01 (0x01) Read Coils

이 기능 코드는 원격 장치에서 코일의 연속 상태를 1 ~ 2000까지 판독하는 데 사용됩니다. 요청 PDU는 시작 주소, 즉 지정된 첫 번째 코일의 주소 및 코일 수를 지정합니다. PDU 코일은 0부터 처리됩니다. 따라서 번호가 1-16인 코일은 0-15로 지정됩니다.
응답 메시지의 코일은 데이터 필드의 비트당 하나의 코일로 포장됩니다. 상태는 1= ON 및 0= OFF로 표시됩니다. 첫 번째 데이터 바이트의 LSB는 쿼리에서 어드레스된 출력을 포함합니다. 다른 코일은 이 바이트의 고차 종단을 향해, 저차 바이트에서 고차 바이트로 이어진다.
반환된 출력 양이 8의 배수가 아닌 경우 최종 데이터 바이트의 나머지 비트는 0으로 패딩됩니다(바이트의 고차 끝을 향함). 바이트 수 필드는 전체 데이터 바이트 수를 지정합니다.

 

출력의 상태는 바이트 값 CD 16진수 또는 이진수 1100 1101로 표시됩니다. 출력 27은 이 바이트의 MSB이고 출력 20은 LSB입니다. (즉 비트가 거꾸로 들어온다는 것!) -> 20~27, 35~28, 38~36 이런식으로 
일반적으로 바이트 내의 비트는 왼쪽에 MSB가 표시되고 LSB는 오른쪽에 표시됩니다.
따라서 첫 번째 바이트의 출력은 왼쪽에서 오른쪽으로 '27 ~ 20'입니다. 다음 바이트는 '35 ~ 28' 출력으로, 왼쪽에서 오른쪽으로 출력됩니다. 비트가 직렬로 전송되면 LSB에서 MSB로 흐릅니다. 20. . 27, 28. . . 35 등.
마지막 데이터 바이트에서 출력 38-36의 상태는 바이트 값 05 16진수 또는 이진 0000101로 표시됩니다. 출력 38은 왼쪽에서 여섯 번째 비트 위치에 있고 출력 36은 이 바이트의 LSB입니다. 나머지 5개의 고차 비트가 0으로 채워집니다.

 

2. 02 (0x02) Read Discrete Inputs

이 기능 코드는 원격 장치에 있는 불연속적인 입력(discrete inputs)의 연속된 상태를 1에서 2000까지 읽는 데 사용된다. 요청 PDU는 시작 주소, 즉 지정된 첫 번째 입력의 주소 및 입력 수를 지정합니다. PDU에서 이산 입력은 0부터 처리된다. 따라서 번호가 1-16인 이산형 입력은 0-15로 처리된다.
응답 메시지의 이산형 입력은 데이터 필드의 비트당 하나의 입력으로 포장됩니다. 상태는 1= ON, 0= OFF로 표시됩니다. 첫 번째 데이터 바이트의 LSB는 쿼리에서 어드레스된 입력을 포함한다. 다른 입력은 이 바이트의 고차 종단을 향해, 저차 바이트에서 고차 바이트로 이어진다.
반환된 입력 양이 8의 배수가 아닌 경우, 최종 데이터 바이트의 나머지 비트는 0으로 패딩됩니다(바이트의 고차 끝을 향함). 바이트 수 필드는 전체 데이터 바이트 수를 지정합니다.

불연속 입력 204–197의 상태는 바이트 값 AC 16진수 또는 이진 10101100으로 표시됩니다. 입력 204는 이 바이트의 MSB이고 입력 197은 LSB입니다.
불연속 입력 218–213의 상태는 바이트 값 35 16진수 또는 이진 0011 0101로 표시됩니다. 입력 218은 왼쪽에서 세 번째 비트 위치에 있고, 입력 213은 LSB입니다.

 

3. 03 (0x03) Read Holding Registers

기능 코드는 원격 장치에 있는 레지스터의 연속 블록의 내용을 읽는 데 사용됩니다. 요청 PDU는 시작 레지스터 주소와 레지스터 수를 지정합니다. PDU 레지스터는 0부터 어드레스 된다. 따라서 번호가 1-16인 레지스터는 0-15로 지정됩니다. 응답 메시지의 레지스터 데이터는 레지스터당 2바이트로 패킹되며, 각 바이트 내에서 이진 컨텐츠가 정당화됩니다. 각 레지스터에 대해 첫 번째 바이트에는 고차 비트가, 두 번째 바이트에는 저차 비트가 포함됩니다.

레지스터 108의 내용은 02B 16진수 또는 십진수 555의 두 바이트 값으로 표시됩니다.
레지스터의 109–110의 내용은 각각 0000과 0064 16진수, 또는 십진수 0과 100 이다.

 

4. 04 (0x04) Read Input Registers

이 함수 코드는 원격 디바이스의 연속 입력 레지스터를 1에서 125까지 읽는 데 사용됩니다. 요청 PDU는 시작 레지스터 주소와 레지스터 수를 지정합니다. PDU 레지스터는 0부터 어드레스 된다. 따라서 1-16번 입력 레지스터는 0-15번으로 지정됩니다. 응답 메시지의 레지스터 데이터는 레지스터당 2바이트로 패킹되며, 각 바이트 내에서 이진 컨텐츠가 정당화됩니다. 각 레지스터에 대해 첫 번째 바이트에는 고차 비트가, 두 번째 바이트에는 저차(낮은 차수) 비트가 포함됩니다.

입력 레지스터 9의 내용은 0000A 16진수 또는 10진수로 2바이트 값으로 표시됩니다.

 

5. 05 (0x05) Write Single Coil

이 기능 코드는 원격 장치의 ON 또는 OFF에 단일 출력을 쓰는 데 사용됩니다. 요청된 ON/OFF 상태는 요청 데이터 필드의 상수로 지정됩니다. FF00 16진수 값은 출력을 ON으로 요청합니다. 0000 값은 OFF를 요청합니다. 다른 모든 값은 잘못되었으므로 출력에 영향을 미치지 않습니다.

Request PDU는 강제할 코일의 주소를 지정합니다. 코일은 0에서 시작하여 처리됩니다. 따라서 1번 코일은 0으로 처리됩니다. 요청된 ON/OFF 상태는 Coil Value(코일 값) 필드에서 상수로 지정됩니다. 0XFF00 값은 코일의 ON을 요청합니다. 값이 0X0000이면 코일이 꺼질 것을 요청합니다. 다른 모든 값은 불법이며 코일에 영향을 미치지 않습니다.

 

6. 06 (0x06) Write Single Register

이 기능 코드는 원격 장치에 단일 홀딩 레지스터를 쓰는 데 사용됩니다. 요청 PDU는 작성할 레지스터의 주소를 지정합니다. 레지스터는 0에서 시작하는 주소로 지정됩니다. 따라서 1번 레지스터는 0으로 지정됩니다. 정상적인 응답은 요청의 에코이며, 레지스터 내용이 작성된 후 반환됩니다.

 

7. 15 (0x0F) Write Multiple Coils

이 기능 코드는 원격 장치에서 코일 시퀀스의 각 코일을 ON 또는 OFF로 강제 적용하는 데 사용됩니다. Request PDU는 강제할 코일 참조를 지정합니다. 코일은 0에서 시작하여 처리됩니다. 따라서 1번 코일은 0으로 처리됩니다. 요청된 ON/OFF 상태는 요청 데이터 필드의 내용에 따라 지정됩니다. 필드의 비트 위치에 있는 논리 '1'은 해당 출력을 ON으로 요청합니다. 논리 '0'은 OFF를 요청합니다. 정상 응답은 기능 코드, 시작 주소 및 강제 코일의 양을 반환합니다.

다음은 코일 20에서 시작하는 10개의 코일 시리즈 쓰기 요청의 예입니다. 요청 데이터 콘텐츠는 CD 01 16진수(110011000000001 이진수)의 2바이트입니다. 이진 비트는 다음과 같은 방법으로 출력에 해당합니다.

Bit 1 1 0 0 1 1 0 1 0 0 0 0 0 0 0 1
Output 27 26 25 24 23 22 21 20 - - - - - - 29 28

전송된 첫 번째 바이트(CD 16진수)는 출력 27-20을 다루며, 가장 중요하지 않은 비트는 이 세트에서 가장 낮은 출력(20)을 처리합니다. 전송된 다음 바이트 주소(01 16진수)는 출력 29-28이며, 가장 중요하지 않은 비트는 이 세트에서 가장 낮은 출력(28)을 처리합니다. 마지막 데이터 바이트에서 사용되지 않는 비트는 0으로 채워야 한다.

example

 

8. 16 (0x10) Write Multiple registers

이 기능 코드는 원격 장치의 연속 레지스터 블록(1 ~ 123 레지스터)을 쓰는 데 사용됩니다. 요청된 서면 값은 요청 데이터 필드에 지정됩니다. 데이터는 레지스터당 2바이트로 패킹됩니다. 정상 응답은 함수 코드, 시작 주소 및 작성된 레지스터의 수량을 반환합니다

'데이터 > Modbus' 카테고리의 다른 글

pymodbus  (2) 2021.03.18
Modbus Protocol  (0) 2021.03.05
산전, 미쓰비시 plc IP,Port 설정 후 python 연결 (pymodbus)  (1) 2021.02.28
Modbus란  (0) 2021.02.02