package com.freedomotic.plugin.devices.modbus.test; import com.freedomotic.app.FreedomoticInjector; import com.freedomotic.model.ds.Config; import com.freedomotic.plugins.devices.modbus.gateways.ModbusMasterGateway; import com.serotonin.modbus4j.ModbusMaster; import com.serotonin.modbus4j.code.DataType; import com.serotonin.modbus4j.code.RegisterRange; import com.serotonin.modbus4j.exception.ErrorResponseException; import com.serotonin.modbus4j.exception.ModbusInitException; import com.serotonin.modbus4j.exception.ModbusTransportException; import com.serotonin.modbus4j.locator.BinaryLocator; import com.serotonin.modbus4j.locator.NumericLocator; import java.util.logging.Level; import java.util.logging.Logger; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ /** * * @author matteo */ @RunWith(GuiceJUnitRunner.class) @GuiceJUnitRunner.GuiceInjectors({FreedomoticInjector.class}) public class ModbusTest { Config config = new Config(); ModbusMaster master; //@Before public void prepare() { config.setProperty("ModbusProtocol", "TCP"); //TCP Test config.setProperty("host", "192.168.2.57"); config.setProperty("tcp-port", "4001"); config.setProperty("encapsulated", "true"); config.setProperty("timeout", "1000"); master = ModbusMasterGateway.getInstance(config); try { master.init(); master.setMultipleWritesOnly(true); } catch (ModbusInitException ex) { Logger.getLogger(ModbusTest.class.getName()).log(Level.SEVERE, null, ex); } } @Test public void joking(){} // @Test public void manageoutput() throws InterruptedException { try { boolean[] valori = {true, false, true, false, true, false, true, false}; short[] vals = {1, 0, 1, 0, 1, 0, 1, 0}; for (int i = 0; i < 8; i++) { BinaryLocator bl = new BinaryLocator(2, RegisterRange.HOLDING_REGISTER, 13 + i, 0); boolean t = master.getValue(bl); Logger.getLogger(ModbusTest.class.getName()).log(Level.INFO, "READING OUTPUT " + i + " VALUE: " + t); } for (int i = 0; i < 8; i++) { Logger.getLogger(ModbusTest.class.getName()).log(Level.INFO, "CONFIG I/O " + i); NumericLocator nl = new NumericLocator(2, RegisterRange.HOLDING_REGISTER, 5 + i, DataType.TWO_BYTE_INT_UNSIGNED); master.setValue(nl, 0); } for (int i = 0; i < 8; i++) { Logger.getLogger(ModbusTest.class.getName()).log(Level.INFO, "WRITING OUTPUT " + i); NumericLocator nl = new NumericLocator(2, RegisterRange.HOLDING_REGISTER, 13 + i, DataType.TWO_BYTE_INT_UNSIGNED); master.setValue(nl, vals[i]); } for (int i = 0; i < 8; i++) { BinaryLocator bl = new BinaryLocator(2, RegisterRange.HOLDING_REGISTER, 13 + i, 0); boolean t = master.getValue(bl); Logger.getLogger(ModbusTest.class.getName()).log(Level.INFO, "READING OUTPUT " + i + " VALUE: " + t); Assert.assertEquals(valori[i], t); } for (int i = 0; i < 8; i++) { Logger.getLogger(ModbusTest.class.getName()).log(Level.INFO, "WRITING OUTPUT " + i); NumericLocator nl = new NumericLocator(2, RegisterRange.HOLDING_REGISTER, 13 + i, DataType.TWO_BYTE_INT_UNSIGNED); master.setValue(nl, 1 - vals[i]); } for (int i = 0; i < 8; i++) { BinaryLocator bl = new BinaryLocator(2, RegisterRange.HOLDING_REGISTER, 13 + i, 0); boolean t = master.getValue(bl); Logger.getLogger(ModbusTest.class.getName()).log(Level.INFO, "READING OUTPUT " + i + " VALUE: " + t); Assert.assertEquals(!valori[i], t); } for (int i = 0; i < 8; i++) { Logger.getLogger(ModbusTest.class.getName()).log(Level.INFO, "WRITING OUTPUT " + i); NumericLocator nl = new NumericLocator(2, RegisterRange.HOLDING_REGISTER, 13 + i, DataType.TWO_BYTE_INT_UNSIGNED); master.setValue(nl, 0); } // init output for (int i = 0; i < 8; i++) { Logger.getLogger(ModbusTest.class.getName()).log(Level.INFO, "CONFIG I/O " + i); NumericLocator nl = new NumericLocator(2, RegisterRange.HOLDING_REGISTER, 5 + i, DataType.TWO_BYTE_INT_UNSIGNED); master.setValue(nl, 300); } for (int i = 0; i < 8; i++) { Logger.getLogger(ModbusTest.class.getName()).log(Level.INFO, "WRITING OUTPUT " + i); NumericLocator nl = new NumericLocator(2, RegisterRange.HOLDING_REGISTER, 13 + i, DataType.TWO_BYTE_INT_UNSIGNED); master.setValue(nl, 1); } } catch (ModbusTransportException ex) { System.out.println("error1: " + ex.toString()); } catch (ErrorResponseException ex) { System.out.println("error2: " + ex.toString()); } } // @Test public void readinput() { System.out.println("\nTesting read method from modbus"); try { boolean[] valori = {true, false, false, false, false, false, false, true}; for (int i = 0; i < 8; i++) { BinaryLocator bl = new BinaryLocator(2, RegisterRange.HOLDING_REGISTER, 36 + i, 0); boolean t = master.getValue(bl); Logger.getLogger(ModbusTest.class.getName()).log(Level.INFO, "READING INPUT: " + i); Assert.assertEquals(valori[i], t); } //NumericLocator nl = new NumericLocator(2, RegisterRange.HOLDING_REGISTER, 13, DataType.TWO_BYTE_INT_UNSIGNED); //master.setValue(nl, 1); } catch (ModbusTransportException ex) { System.out.println("error1: " + ex.toString()); } catch (ErrorResponseException ex) { System.out.println("error2: " + ex.toString()); } } // @After public void dismiss() { master.destroy(); } }