Skip to content

17Lf Series ModbusRTU Manual

1 개요

MODBUS 프로토콜은 산업용 프로토콜로 PLC통신 등에 주로 사용되는 표준이 되는 프로토콜입니다. 주로 사용하는 방식은 RTU방식과 ASCII방식이 주로 사용되고, 요즘에는 TCP방식도 나와있습니다.

1979년부터 업계의 사실상 직렬 표준인 MODBUS는 수 백만 개의 자동화 장치가 지속적으로 통신할 수 있도록 지원하고 있습니다. MODBUS는 요청/응답 프로토콜이며 기능 코드별로 지정된 서비스를 제공합니다. 프레임의 구성은 Application Data Unit인 ADU와 Protocol Data Unit인 PDU로 구성되어 있습니다.

2 프레임 구조

2.1 Packet Discription

mightyZAP은 MODBUS-RTU 프로토콜 내용을 준수합니다.
본 매뉴얼에 나오지 않은 사항들은 아래의 관련 표준 문서를 참조하여 주시기 바랍니다.

2.1.1 Packet Structure

MODBUS-RTU 프로토콜의 최대 송수신 패킷 길이는 256 Byte 입니다. 따라서 송수신 패킷의 총 길이가 256Byte 를 넘기지 않도록 주의하여 주십시오.
MODBUS-RTU 통신 Mode 는 Packet 을 구분하기 위해서 아래 그림과 같이 시작과 끝 사이에 최소 3.5 Char 이상의 이 필요합니다.

packet Description

  • 송신 패킷 구조
AddressFucntion codeDataError Check
byte012n-1n
내용mightyZAP IDFunctionDataCRC(MSB)CRC(LSB)
  • 수신 패킷 구조 - 정상 응답
AddressFucntion codeDataError Check
byte012n-1n
내용mightyZAP IDFunctionDataCRC(MSB)CRC(LSB)
  • 수신 패킷 구조 - 비 정상 응답
AddressFucntion codeDataError Check
byte01234
내용mightyZAP IDFunction
+ 0x80
Exception codeCRC(MSB)CRC(LSB)

2.1.2 Packet Element 설명

2.1.2.1 Start
  • 서로 다른 Frame 간의 구별을 위한 최소한의 시간을 의미합니다.
  • 통신 속도 57600bps에서 1bit의 전송 시간은 0.017msec이고, Start time이 3.5 character time(1 character = 8bit)임으로 최소 start time은 0.486msec 입니다.
  • Start time 이내의 다른 frame 이 전송되면, 이전 frame 의 연속된 데이터로 인식 합니다.
2.1.2.2 Address
  • mightyZAP의 ID로 다중 연결 방식으로 Daisy Chain 연결 지원을 위한 식별자 입니다.
  • ID가 '0'일 경우 Broadcasting ID로 동작합니다.
2.1.2.3 Function Code
  • mightyZAP에서 지원하는 Modbus-RTU 표준 Function code는 다음과 같습니다.
FunctionCodeDescription
Read Holding Register0x03mightyZAP의 Data를 읽어오기
Write Single Register0x06mightyZAP의 특정 주소에 Data값을 Setting 하기
Write Multiple Register0x10mightyZAP의 연속된 주소에 Data값을 Setting 하기
2.1.2.4 Data

송신

  • Read Register 명령의 경우 Modbus 주소, 레지스터 개수, Byte 개수 등을 지정하게 되며, Write Register 명령의 경우 Modbus 주소, Byte 개수, 설정 할 값 등을 지정하게 됩니다.
    수신
  • Read Register 명령의 경우, 정상 응답은 Node ID 와 Function Code 가 송신 때와 동일한 값으로 수신 되며, Data 는 송신 때 보낸 Register 순서에 따라 각 Register 의 값이 수신 됩니다.
  • Write Single Register 명령의 경우, 송신 때와 동일한 데이터가 수신됩니다. Write Multi Register 의 경우에는 Write Multi Register 명령으로 데이터를 쓰고자 한 Register 의 시작 주소와 Register 개수가 수신됩니다.
  • 이상응답의 경우에는 Node ID, Error Code, Exception Code 로 구성되며, 이상응답의 패킷 구조는 Function Code 와 관계없이 모두 동일합니다.
2.1.2.5 CRC
  • 16 비트 CRC 값을 입력하며 2 byte로 구성됩니다.
  • 전송 순서는 하위 1byte, 상위 1byte순 입니다.
  • CRC Check Method 는 CRC-16(X^16 + X^15+X^2+1) 입니다 인터넷에서 CRC-16 Modbus 계산기를 검색하시어 사용하시면 쉽게 계산 값을 얻을 수 있습니다.
2.1.2.6 Exception Code
  • mightyZAP에서 지원하는 모든 Function Code 의 이상 응답에 대한 Exception Code 는 아래와 같이 정의되어 있습니다.
Exception CodeDescription
0x01Illegal Function지원하지 않는 Function Code
0x02Illegal Data Address잘못된 레지스터 주소
0x03Illegal Data Value잘못된 데이터 값
0x04Slave Device Failure장치 고장, 파라미터 설정값 이상(ready)
0x05Acknowledge데이터가 준비되지 않은 상태(ready)
0x06Slave Device Busy파라미터 잠금 상태

2.2 프로토콜 Function Code 설명

2.2.1 Read Holding Register (0x03)

단일 레지스터(16bit 데이터) 및 연속된 레지스터 블록(16bit 데이터 단위)의 값을 읽습니다.

2.2.1.1 Packet Description
AddressFucntion codeStarting AddressQuantity of RegisterCRC
Size(byte)1 byte1 byte2 byte2 byte2 byte
Data0x030x0000 to 0xffff1 to 125(0x7d)
AddressFucntion codeByte CountRegister ValueCRC
Size(byte)1 byte1 byte1 byteN* x 2 bytes2 byte
Data0x032 x N*

*N = Quantity of Registers

AddressError codeException CodeCRC
Size(byte)1 byte1 byte1 byte2 byte
Data0x830x01 to 0x06
2.2.1.2 frame detail
  • Address
    데이터를 읽고 자 하는 mightyZAP의 ID를 의미 합니다.
  • Function Code Read Holding Register 명령의 의미하는 code 0x03
  • Starting Address 읽고자 하는 데이터의 시작 주소를 의미하며 2 byte로 구성됩니다.
  • Quantity of Register 읽고자 하는 데이터의 크기를 의미하며 2 byte로 구성됩니다.
  • CRC CRC 에러 체크 방법을 이용하며 2 byte로 구성됩니다.
  • Byte Count 응답하는 데이터의 수를 의미 합니다.
  • Register Value 요청 프레임의 Address를 시작 주소로 하여 바이트 단위로 데이터를 송신합니다. 이때 데이터는 워드 타입이므로 바이트 수에 2배를 해준 크기와 동일합니다.
  • Error code Error code는 Function Code 에 80(Hex)값을 더하여 표현되며 Read Holding register의 경우 83(Hex)으로 전송됩니다.
  • Exception code 상세 에러 내역을 의미하며 1바이트로 구성됩니다.
2.2.1.3 Example
#1 - Read Present Position (0xD2)
  • Request
AddressFucntion
code
Starting
Address Hi
Starting
Address Lo
Quantity of Register HiQuantity of Register LoCRC LoCRC hi
0x010x030x000xD20x000x010x240x33
  • Request OK -Present Position Data :1000
AddressFucntion
code
Byte
Count
Register
value Hi
Register
value Lo
CRC
Lo
CRC
hi
0x010x030x020x030xe80xB80xFA
  • Request Not OK
AddressError
code
Exception
Code
CRC
Lo
CRC
hi
0x010x830x04CRC
Lo
CRC
hi
#2 - Read Present Current (0xD3)
  • Request
AddressFucntion
code
Starting
Address Hi
Starting
Address Lo
Quantity of Register HiQuantity of Register LoCRC LoCRC hi
0x010x030x000xD30x000x010x750xf3
  • Request OK -Present Current Data : 426
AddressFucntion
code
Byte
Count
Register
value Hi
Register
value Lo
CRC
Lo
CRC
hi
0x010x030x020x010xAA0x390xAB
  • Request Not OK
AddressError
code
Exception
Code
CRC
Lo
CRC
hi
0x010x830x040x400xF3

2.2.2 Write Single Register

단일레지스터(16bit 데이터)에 값을 씁니다.

2.2.2.1 Packet Description
AddressFucntion codeRegister AddresseRegister ValueCRC
Size(byte)1 byte1 byte2 byte2 byte2 byte
Data0x060x0000 to 0xffff0x0000 to 0xffff
AddressFucntion codeRegister AddresseRegister ValueCRC
Size(byte)1 byte1 byte2 byte2 byte2 byte
Data0x060x0000 to 0xffff0x0000 to 0xffff

*N = Quantity of Registers

AddressError codeException CodeCRC
Size(byte)1 byte1 byte1 byte2 byte
Data0x860x01 to 0x06
2.2.1.2 frame detail
  • Address 데이터를 쓰려고하는 mightyZAP의 ID를 의미 합니다.
  • Function Code Write Single Register 명령의 의미하는 code 0x06
  • Register Addresse 쓰기 원하는 데이터의 주소를 의미하며 2 byte로 구성됩니다.
  • Register Value 쓰기 원하는 데이터의 값으로 2 byte로 구성됩니다.
  • CRC CRC 에러 체크 방법을 이용하며 2 byte로 구성됩니다.
  • Error code Error code는 Function Code 에 80(Hex)값을 더하여 표현되며 Read Holding register의 경우 83(Hex)으로 전송됩니다.
  • Exception code 상세 에러 내역을 의미하며 1바이트로 구성됩니다.
2.2.2.2 Example
#1 - Write Goal Position (0xCD)
  • Request - Goal Position Data : 1000
AddressFucntion
code
Register
Address Hi
Register
Address Lo
Register Value HiRegister Value LoCRC LoCRC hi
0x010x060x000xCD0x030xE80x180x8B
  • Request OK
AddressFucntion
code
Register
Address Hi
Register
Address Lo
Register Value HiRegister Value LoCRC LoCRC hi
0x010x060x000xCD0x030xE80x180x8B
  • Request Not OK
AddressError
code
Exception
Code
CRC
Lo
CRC
hi
0x010x860x04CRC
Lo
CRC
hi
#2 - Write Goal Current (0xD3)
  • Request - Goal Current Data : 800
AddressFucntion
code
Register
Address Hi
Register
Address Lo
Register Value HiRegister Value LoCRC LoCRC hi
0x010x060x000xD10x030x200xD80xDB
  • Request OK
AddressFucntion
code
Starting
Address Hi
Starting
Address Lo
Quantity of Register HiQuantity of Register LoCRC LoCRC hi
0x010x060x000xD10x030x200xD80xDB
  • Request Not OK
AddressError
code
Exception
Code
CRC
Lo
CRC
hi
0x010x860x040x400xF3

2.2.3 Write Multi Register(0x10)

연속된 레지스터 블록(16bit 데이터 단위)에 값을 씁니다.

2.2.3.1 Packet Description
AddressFucntion codeStarting AddressQuantity of RegisterByte CountRegisters ValueCRC
Size(byte)1 byte1 byte2 bytes2 bytes1ByteN* x 2 Bytes2 byte
Data0x100x0000 to 0xffff0x0000 to 1 to 0x007B(123)2 x N*value
AddressFucntion codeStarting AddressQuantity of RegisterCRC
Size(byte)1 byte1 byte2 bytes2 bytes2 byte
Data0x100x0000 to 0xffff0x0000 to 1 to 0x007B(123)

*N = Quantity of Registers

AddressError codeException CodeCRC
Size(byte)1 byte1 byte1 byte2 byte
Data0x900x01 to 0x06
2.2.3.2 frame detail
  • Address 데이터를 쓰려고하는 mightyZAP의 ID를 의미 합니다.
  • Function Code Write Multi Register 명령의 의미하는 code 0x10
  • Start Addresse 연속해서 쓰기 원하는 데이터의 시작 주소를 의미하며 2 byte로 구성됩니다.
  • Quantity of Register 쓰기 원하는 데이터의 크기를 의미하며 2 byte로 구성됩니다.
  • Byte Count 연속해서 쓰기 원하는 데이터의 수를 의미 합니다.
  • Registers Value 쓰기 원하는 데이터의 값으로 2 byte를 한 세트로 구성됩니다. Byte Count에 입력 한 수 만큼의 데이터 세트를 추가해야 합니다
  • CRC CRC 에러 체크 방법을 이용하며 2 byte로 구성됩니다.
  • Error code Error code는 Function Code 에 80(Hex)값을 더하여 표현되며 Read Holding register의 경우 0x90으로 전송됩니다.
  • Exception code 상세 에러 내역을 의미하며 1바이트로 구성됩니다.
2.2.3.3 Example
#1 - Multi Write Goal Speed(0xD0) & Goal Current (0xD1)
  • Request - Goal Speed Data : 1000, Goal Current Data : 800
AddressFucntion
code
Starting
Address Hi
Starting
Address Lo
Quatity of Register HiQuatity of Register LoByte
Count
Register
Value Hi
Register
Value Lo
Register
Value Hi
Register
Value Lo
CRC LoCRC hi
0x010x100x000xD00x000x020x040x030xE80x030x200x7F0xAB
  • Request OK
AddressFucntion
code
Starting
Address Hi
Starting
Address Lo
Quatity of Register HiQuatity of Register LoCRC LoCRC hi
0x010x100x000xD00x000x020x400x31
  • Request Not OK
AddressError
code
Exception
Code
CRC
Lo
CRC
hi
0x010x830x040x400xF3

3. Packet Test