본문 바로가기
자바

자바 TCP 모드버스 통신 소스 예제

by 처리2 2021. 5. 6.
반응형

와... 님들 혹시 저처럼 자바 소스로 TCP 모드버스 통신을 하고 있는 분 계신가요?

 

진짜... 이거는 한.. 3일 걸렸네요 

 

뭐 긴말할거 있습니까? 바로 참깨빵 위에 순쇠고기 패티 두 장 특별한 소스 보여드릴께요

 

앗앗 그전에 라이브러리를 추가 해줘야 합니다.

 

참고로 저는 lib 폴더에 그냥 넣었어여 ㅎㅎ

EasyModbusJava.jar
0.09MB

 

 

package com.tx.code;

import java.util.Arrays;

import de.re.easymodbus.modbusclient.*;

public class TcpCode {
	public static void main(String[] args)
	{
		ModbusClient modbusClient = new ModbusClient("ip",port);
		try
		{
			modbusClient.Connect();
			//address(해당 주소값) , 그 뒤 데이터 몇개를 뽑을지  
			int[] soc = modbusClient.ReadHoldingRegisters(1010,1);
			System.out.println(soc[0]);
			System.out.println(Arrays.toString(soc));
            
			int[] sum_power = modbusClient.ReadHoldingRegisters(1016,2);
			System.out.println(Arrays.toString(sum_power));
			String hex_pw = "";
			for(int i : sum_power) {
				hex_pw += Integer.toHexString( i );
				System.out.println(hex_pw);
			}
			System.out.println(Integer.parseInt(hex_pw,16)*0.001);
		}
		catch (Exception e)
		{	
			e.printStackTrace();
		}
	}

}

 

 

자 보시면 SOC 부분을 먼저 보시면 주소 1010의 데이터 첫번째것을 가지고 온다는 의미 입니다.

 

출력되는 값은 int입니다. 근데 님들 byte가 4개 짜리도 있잖아요? 

 

자 sum_power값을 봅시다 주소 1016의 데이터는 4byte짜리이기 때문에 일단 리스트 1개당 2byte씩 계산이 되기 때문

 

에 두개의 데이터를 뽑아주시고 int값이기에 hex 값으로 변경을 해주고 

 

hex값을 붙여준 뒤에  int형으로 바꿔준 모습입니다.

 

꼭 성공하시길 바라며.. 저는 20000

반응형

댓글