2016-05-23 2 views
1

В соответствии с этим howToModbusSlave Я пытаюсь создать собственное ведомое устройство Modbus с регистрами выбранного значения (позже я хочу заполнить эти значения данными из контролируемого устройства с помощью python/jython) и отправить с помощью Predix (облачная платформа). Поскольку я являюсь modbus greenhorn, я все еще не могу найти способ добавления моих выбранных значений в мои владельцы регистраций.Modbus TCP Slave Thread - установить и получить значения регистров

Вот мой подчиненный я использую, чтобы предоставить данные для Master на локальном хосте: 502:

public class SimpleApp { 

public static void main(String args[]) { 
try { 

//1. The important instances and variables 
ModbusTCPListener listener = null; 
SimpleProcessImage spi = null; 
int port = 502; 


//2. Prepare a process image 
spi = new SimpleProcessImage(); 

//I dont understand this part, why do i need it? 
spi.addDigitalOut(new SimpleDigitalOut(true)); 
spi.addDigitalOut(new SimpleDigitalOut(false)); 
spi.addDigitalIn(new SimpleDigitalIn(false)); 
spi.addDigitalIn(new SimpleDigitalIn(true)); 
spi.addDigitalIn(new SimpleDigitalIn(false)); 
spi.addDigitalIn(new SimpleDigitalIn(true)); 

//setting up register holders, gonna ask no 10,11,20 and 21 as set in the data node config 
for (int i = 0; i < 25; i++) { 
    int value = 15; 
    SimpleInputRegister sr = new SimpleInputRegister(value); 
     spi.addRegister(sr); 
    } 

    //3. Set the image on the coupler 
    ModbusCoupler.getReference().setProcessImage(spi); 
    ModbusCoupler.getReference().setMaster(false); 
    ModbusCoupler.getReference().setUnitID(15); //15 

    //4. Create a listener with 3 threads in pool 
    listener = new ModbusTCPListener(1); //no of threads 
    listener.setPort(port); 
    listener.start(); 

} catch (Exception ex) { 
    ex.printStackTrace(); 
    } 
} 
} 

данных узлов конфигурации:

<channel protocol="TCP_IP" tcpIpAddress="127.0.0.1" tcpIpPort="502"> 
     <unit id="1"> 
      <register name="Node-1-1" dataType="INTEGER" address="10" registerType="HOLDING" description="temperature"/> 
      <register name="Node-1-2" dataType="DECIMAL" address="11" registerType="HOLDING" description="pressure"/> 
     </unit> 
     <unit id="2"> 
      <register name="Node-2-1" dataType="INTEGER" address="20" registerType="HOLDING" description="temperature"/> 
      <register name="Node-2-2" dataType="INTEGER" address="21" registerType="HOLDING" description="pressure"/> 
     </unit> 
    </channel> 

я получаю тезисы передает ("выход"):

[{"address":"com.ge.dspmicro.machineadapter.modbus://127.0.0.1:502/2/20","datatype":"INTEGER","name":"Node-2-1","category":"REAL","value":655370,"timestamp":1464006550991,"quality":"NOT_SUPPORTED (20000000) "}, 
{"address":"com.ge.dspmicro.machineadapter.modbus://127.0.0.1:502/1/10","datatype":"INTEGER","name":"Node-1-1","category":"REAL","value":655370,"timestamp":1464006550992,"quality":"NOT_SUPPORTED (20000000) "}] 

Основные вопросы:

1) где находятся данные из Узла 1-2 и 2-2 (отсутствует на выходе)?

2) как я могу изменить значения, отправленные из регистров? (Почему я получаю "значение": 655370)

Факультативные Qustions: (вещи я не понял в documentation)

3), что делает класс simpleDigitalOut/В стенде?

4) что означает значение параметра ModbusCoupler.getReference(). SetUnitID (значение)? (он явно не должен делать ничего общего с unitID узлов данных

5) В чем разница между SimpleInputRegister и классом SimpleRegister?

+0

Этот вопрос был здесь некоторое время, вы в конечном итоге нашли решение уже или попробовали спросить на форумах разработчиков библиотеки Java Modbus? – j12y

ответ

-1

Это частичный ответ:

1) Вы должны добавить узлы в dataSubscriptionConfig теге ниже в config.xml файле

2) Здесь вы устанавливаете значение: int value = 15; - Вам нужно чтобы реализовать способ отправки динамических значений

Смежные вопросы