문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
tcpport:funtion_code별_data_구조_및_디바이스_제어:index [2016/10/28 16:55] 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 |}} | ||
+ | |||
+ | |||
+ | |||