사용자 도구

사이트 도구

English

tcpport:funtion_code별_data_구조_및_디바이스_제어:index

Funtion Code별 DATA 구조 및 디바이스 제어

MODBUS-TCP는 Function Code별 프로토콜 Data구조가 조금식 달라집니다.
Function Code별로 요청·응답에 대한 프로토콜의 데이터 구조를 알아보고 TCPPORT의 디바이스를 제어하는 방법을 살펴 보겠습니다.

MODBUS-TCP는 서버로 사용되며 IP는 기본적으로 192.168.201.2xx로 구성되어있습니다. 2xx의 주소는 기본적으로 200으로 설정되어있고 사용자가 딥스위치를 설정하여 200~215까지의 IP주소를 설정하여 사용하실 수 있습니다. PORT번호는 502으로 고정입니다.


Read Coil

Bit Read(읽기), Coil메모리의 비트의 값을 읽어오는 명령입니다.

  • Function Code : 0x01 OR 0x02
  • 디바이스 Input, Output Port의 상태를 읽는데 사용합니다.

- Input Port 0~15번 읽기

TCPPORT의 Input Port(16점)은 Coil 메모리의 0 ~ 15번지의 값으로 매칭되어 있습니다. 아래의 데이터 포멧은 Input Port의 0~15포트의 값을 읽어오는 데이터 포멧입니다.

  • 요청 : 0x00 0x00 0x00 0x00 0x00 0x06 0x01 0x01 0x00 0x00 0x00 0x10
  • 응답 : 0x00 0x00 0x00 0x00 0x00 0x05 0x01 0x01 0x02 0x00 0x00

*각 Function Code의 MBAP의 byte 값은 동일한 값을 가집니다. 단, MBAP의 Length는 Length뒤의 전체 데이터의 Byte 개수로 각 평션 별로 달라 질수 있습니다.


Write Single Coil

Bit Write(쓰기), Coil메모리의 한개의 비트의 값을 쓰는 명령입니다.

  • Function Code : 0x05
  • 디바이스 Output Port의 출력을 ON/OFF 할때 사용합니다.
  • Function Code 0x05의 요청/응답의 데이터 포멧은 동일합니다.

- Output Port 0번 ON 시키기

TCPPORT의 Output Port(8점)은 Coil 메모리의 16 ~ 24번지의 값으로 매칭되어 있습니다. 아래의 데이터 포멧은 Output Port의 0포트를 ON 시키는 포멧입니다. ON의 DATA 값은 0xFF00, OFF는 0x0000 입니다.

  • 요청 : 0x00 0x00 0x00 0x00 0x00 0x06 0x01 0x05 0x00 0x10 0xFF 0x00
  • 응답 : 0x00 0x00 0x00 0x00 0x00 0x06 0x01 0x05 0x00 0x10 0xFF 0x00



Read Registers

Word(16bit) Read(읽기), Registers 메모리의 값을 읽는 명령입니다.

  • Function Code : 0x03 OR 0x04
  • 디바이스 ADC의 아날로그 값을 읽는데 사용합니다.

- ADC PORT의 AIN0~1 체널의 아날로그 데이터값 읽기

TCPPORT의 ADC PORT(4점)은 Registers 메모리의 0~3 번지로 매칭되어 있습니다. 아래의 데이터 포멧은 AIN0~1 PORT의 아날로그 데이터값을 읽어오는 데이터 포멧입니다. ADC PORT는 0~5V의 입력받을 수 있고 0~4095값을 반환 합니다.

  • 요청 : 0x00 0x00 0x00 0x00 0x00 0x06 0x01 0x04 0x00 0x00 0x00 0x02
  • 응답 : 0x00 0x00 0x00 0x00 0x00 0x07 0x01 0x04 0x04 0x0F 0xFF 0x08 0x2F




Write Single Registers

Word(16bit) Write(쓰기), Registers메모리의 한개의 워드(2Byte)의 값을 쓰는 명령입니다.

  • Function Code : 0x06
  • 디바이스 PWM PORT의 듀티비를 조절하는데 사용합니다.
  • Function Code 0x06의 요청/응답의 데이터 포멧은 동일합니다.

- PWM 0체널의 듀티비를 40%로 출력

TCPPORT의 PWM PORT(2점)은 Registers 메모리의 4 ~ 5번지의 값으로 매칭되어 있습니다. 아래의 데이터 포멧은 PWM의 듀티비를 40%로 만드는 데이터 포멧입니다. TCPPORT의 PWM주기(Period)는 100mS 이고 듀디비(Duty Cycle)은 0~100% 까지 1%단위로 조절할 수 있습니다.

  • 요청 : 0x00 0x00 0x00 0x00 0x00 0x06 0x01 0x06 0x00 0x04 0x00 0x28
  • 응답 : 0x00 0x00 0x00 0x00 0x00 0x06 0x01 0x06 0x00 0x04 0x00 0x28



Write Multiple Coils

연속적으로 여러개의 Coils 메모리값(Output 포트)을 ON/OFF 제어를 할수 있습니다.

  • Function Code : 0x0F(15)
  • 연석적으로 다수의 OUTPUT 포트의 ON/OFF 합니다.

- OUTPUT PORT 7,4,3,2,0번 ON 시키기

Function Code 0x0F(15)은 하나의 데이터 프래임으로 여러개의 출력포트를 on/off 시킬 수 있습니다. Start Address 부터 Length의 길이만큼 Data값으로 on/off를 설정합니다. 즉, Output Port 7,4,3,2,0번 ON 시키려면 0번 포트의 Start Address(0x0010), 0~7번 포트까지의 비트길이 Lenght(0x0008), ON시키려는 포트의 값 Data(0x9D: 10011101) ON시키려는 Port 7,4,3,2,0은 1값이고 OFF는 0값으로 설정 합니다.

  • 요청 : 0x00 0x00 0x00 0x00 0x00 0x08 0x01 0x0F 0x00 0x10 0x00 0x08 0x01 0x9D
  • 응답 : 0x00 0x00 0x00 0x00 0x00 0x06 0x01 0x0F 0x00 0x10 0x00 0x08



Write Multiple Registers

연속적으로 여러개의 Registers 메모리에 Data값을 쓸수 있습니다.

  • Function Code : 0x10(16)
  • Pwm 체널의 듀티값을 조절하는데 사용합니다.

- PWM 0, 1에 각각 듀티비를 20%, 60%로 PWM 출력하기

Function Code 0x10(16)은 하나의 데이터 프래임으로 여러개의 Registers 메모리에 Data값을 쓸수 있습니다. Start Address 부터 Length의 길이만큼 Word(2byte)값으로 pwm 체널의 듀티비를 조절 할 수 있습니다. 즉, PWM0의 Start Address(0x0004)에서 PWM1번 포트까지의 비트길이 Lenght(0x0002)에 각각 Data(2Byte)값을 20%, 60%으로 설정합니다.

  • 요청 : 0x00 0x00 0x00 0x00 0x00 0x0B 0x01 0x10 0x00 0x04 0x00 0x02 0x04 0x00 0x14 0x00 0x3c
  • 응답 : 0x00 0x00 0x00 0x00 0x00 0x06 0x01 0x10 0x00 0x04 0x00 0x02

tcpport/funtion_code별_data_구조_및_디바이스_제어/index.txt · 마지막으로 수정됨: 2019/04/02 14:33 저자 Comfile Technology