본문 바로가기
IT, 개발/JAVA

Modbus - JAVA 모드버스 통신 예제 (modbusServer, modbusClient 자바 예제)

by 개발자스터디 2022. 11. 2.
반응형

 

 

 

 

 

모드 버스는 디바이스 간 통신을 하기 위해 오래전 개발된 산업용 프로토콜로 시리얼이나 TCP/IP, UDP에서도 구현 가능합니다.

자바에서 간단한 예제를 통해 테스트해보도록 하겠습니다.

모드 버스를 자바에서 테스트해보기 위해서는 우선 라이브러리가 필요합니다.

 


1. EasyModbus 라이브러리

 

1-1. 라이브러리 다운로드 링크


https://sourceforge.net/projects/easymodbustcp-udp-java/

 

EasyModbusTCP/UDP/RTU .java

Download EasyModbusTCP/UDP/RTU .java for free. Modbus TCP, Modbus UDP and Modbus RTU client/server Java library. Modbus TCP, Modbus UDP and Modbus RTU client/server library and Simulators for JAVA Suitable for data exchange between JAVA-Applications and PL

sourceforge.net

 

위 링크에서 EasyModbusJava.jar 파일을 다운로드합니다. 

 

1-2. EasyModbus Source code 

 

아래 링크는 소스코드 gitbub 링크입니다. 
https://github.com/rossmann-engineering/EasyModbusTCP.Java

 

GitHub - rossmann-engineering/EasyModbusTCP.Java: EasyModbusTCP library for Java implementation

EasyModbusTCP library for Java implementation. Contribute to rossmann-engineering/EasyModbusTCP.Java development by creating an account on GitHub.

github.com

 

개발 시 참고하면 좋을 것 같습니다.

 

 

반응형

 

2. Modbus Server 예제

 

Modbus Server 예제 소스 링크
https://sourceforge.net/p/easymodbustcp-udp-java/wiki/Code%20Example%20Modbus%20Server/

 

EasyModbusTCP/UDP/RTU .java / Wiki / Code Example Modbus Server

 

sourceforge.net

 

예제 소스를 기반으로 테스트해보도록 하겠습니다. 

Modbus TCP 통신을 위한 표준 포트는 502입니다. 

setPort설정을 하지 않고 테스트해보겠습니다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static void main(String[] args)
{
    ModbusServer modbusServer = new ModbusServer();
    
    // Note that Standard Port for Modbus TCP communication is 502
    //modbusServer.setPort(1522);
    modbusServer.coils[1= true;
    modbusServer.holdingRegisters[1= 1234;
    
    try
    {
        modbusServer.Listen();
    }
    catch (Exception e)
    {
        System.out.println(e.toString());
    }
}
cs

 

 

 

 

3. Modbus Client 예제

 

Modbus Client 예제 소스
https://sourceforge.net/p/easymodbustcp-udp-java/wiki/Code%20Sample%20ModbusClient%2032Bit%20Values/

 

EasyModbusTCP/UDP/RTU .java / Wiki / Code Sample ModbusClient 32Bit Values

 

sourceforge.net

 

Connect를 하고 Write 한 뒤에 Read를 해서 통신이 제대로 되고 있는지 확인하는 예제입니다

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static void main(String[] args) 
{
    ModbusClient modbusClient = new ModbusClient("localhost"502);
    
    try
    {
        modbusClient.Connect();
        
        // Write Float value to Register 10 and 11
        modbusClient.WriteMultipleRegisters(9, ModbusClient.ConvertFloatToTwoRegisters((float)(1323.55)));
        // Write 32 bit value to Register 12 and 13
        modbusClient.WriteMultipleRegisters(11, ModbusClient.ConvertDoubleToTwoRegisters((1323554)));
       
        // Read Float Value from Register 10 and 11
        System.out.println(ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(92)));
        // Read 32 Bit Value from Register 12 and 13
        System.out.println(ModbusClient.ConvertRegistersToDouble(modbusClient.ReadHoldingRegisters(112)));
    }
    catch (Exception e)
    {
        System.out.println(e.toString());
    }   
}
cs

 

상황에 맞게 테스트해보시기 바랍니다.

 

 

 

 

 

728x90
반응형