사용자 도구

사이트 도구

English

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

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
tcpport:funtion_code별_data_구조_및_디바이스_제어:index [2016/10/25 15:12]
Comfile Technology [Write Multiple Registers]
tcpport:funtion_code별_data_구조_및_디바이스_제어:index [2019/04/02 14:33] (현재)
Comfile Technology [- Input Port 0~15번 읽기]
줄 1: 줄 1:
 +====== 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
 +
 +
 +
 +{{ :​tcpport:​funtion_code별_data_구조_및_디바이스_제어:​2-8-1.png?​direct |}}
 +
 +*각 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
 +
 +
 +
 +{{ :​tcpport:​funtion_code별_data_구조_및_디바이스_제어:​2-9.png?​direct |}}
 +
 +\\
 +\\
 +
 +====== ​ 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
 +
 +
 +{{ :​tcpport:​funtion_code별_data_구조_및_디바이스_제어:​2-10.png?​direct |}}
 +\\
 +\\
 +\\
 +
 +====== 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
 +
 +
 +
 +{{ :​tcpport:​funtion_code별_data_구조_및_디바이스_제어:​2-11.png?​direct |}}
 +
 +\\
 +\\
 +
 +====== 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
 +
 +
 +
 +{{ :​tcpport:​funtion_code별_data_구조_및_디바이스_제어:​2-12.png?​direct |}}
 +
 +\\
 +\\
 +
 +====== 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_구조_및_디바이스_제어:​2-13.png?​direct |}}
 +
 +
 +