2015-09-07 4 views
1

В настоящее время я работаю с электрическим устройством Schneider Power Logic. Я хочу прочитать данные с устройства и показать значение в моей системе. До сих пор я открываю библиотеку J2mod, Jamod и Modbus4Java. Я использовал все modbus4java для подключения и получения данных устройства.Modbus4J Modbus RTU master

На самом деле я все еще путаю, полагаю ли я, чтобы создать сторону «Ведущий» или «Невольник». Основываясь на моем понимании, устройство будет Slave, и моя система будет Master (1-й вопрос).

Ниже приведена настройка НА МОЕМ УСТРОЙСТВЕ. Он указывает, что устройство в подчиненном режиме и его протокол - Modbus RTU. Итак, мне нужно создать мастер-приложения, чтобы общаться с ним правильно, используя протокол ModbusRTU? (Второй вопрос)

  • Режим: Подчиненный
  • Протокол Modbus RTU
  • Адрес: 1
  • Скорость передачи данных: 38400
  • Четность: Нет

Ниже приведен код мои приложения действуют как Master и используют протокол ModbusRTU

public static void main(String[] args) throws ModbusTransportException, ErrorResponseException { 
    ModbusFactory factory = new ModbusFactory(); 

    SerialParameters params = new SerialParameters(); 
    params.setCommPortId("COM6"); 
    params.setBaudRate(9600); 
    params.setDataBits(8); 
    params.setStopBits(1); 
    params.setParity(0); 

    ModbusMaster master = factory.createRtuMaster(params); 

    master.setTimeout(1000); 
    master.setRetries(0); 
    long start = System.currentTimeMillis(); 

    try { 
     master.init(); 
    } catch (Exception e) { 
     System.out.println("Modbus Master Init Error: " + e.getMessage()); 
      return; 
    } 

    try { 
     System.out.println("Reg. 1001 Value:" + master.getValue(1, RegisterRange.HOLDING_REGISTER, 3110, DataType.FOUR_BYTE_FLOAT_SWAPPED)); 
    } 
    finally { 
     master.destroy(); 
    } 

    System.out.println("Time elapsed: " + (System.currentTimeMillis() - start) + "ms"); 
} 

Это код, который я получаю из примера кода, предоставленного на странице Modbus4Java. Другая вещь, которая меня интересует, - это значение params.setCommPortId("COM6");. Какую другую ценность, чем «COM6», я могу там положить. Потому что в основном он получает значение String. Могу ли я поместить в него какое-либо значение String? И какова функция этого конкретного setCommPortID. (3-й вопрос)

Рассматривая пример кода, предоставляемого на странице Modbus4Java, он не помещает IP-адрес устройства. Но в моем случае мое устройство получило IP-адрес. И IP-адрес используется только в приложениях Slave. Как моя система должна распознавать IP-адрес устройства? (4-й вопрос).

И после того, как я запускаю этот код, я получил сообщение об ошибке:

Стабильная библиотека

Native Lib Version = RXTX-2.1-7

Java Lib Version = RXTX-2.1-7

Modbus Master Init Ошибка: com.serotonin.io.serial.SerialPortException: gnu.io.NoSuchPortException

Пожалуйста, пожалуйста, и, пожалуйста, помогите мне. Я застрял с этим почти месяц. Надеюсь, кто-то там сможет мне помочь. Заранее благодарю вас за любую помощь и предложение.

ответ

3

Я поддерживаю j2mod, поэтому мой ответ будет предлагать вам посмотреть тестовые программы, которые включены в j2mod. Вы можете найти j2mod на SourceForge по этому адресу -

https://sourceforge.net/projects/j2mod/

Я довольно хорошо об ответе на вопросы, но я также следовать StackOverflow, так что я могу объяснить подробнее здесь. Здесь есть много вопросов, поэтому я заранее извиняюсь, если ничего не пропустил.

Устройство Schneider является подчиненным устройством или «сервером», и ваше приложение является главным или «клиентом».Modbus является протоколом ведущий/ведомый, при этом ведущий инициирует все запросы. Ваше приложение будет основным и ответственным за выполнение всех запросов вашего устройства.

Точные сообщения будут предоставлены документацией устройства. В этом случае вы указываете, что устройство использует 38400 бод и т. Д. Таковы параметры, которые вы будете использовать для обновления SerialParameters с помощью библиотеки RXTX (которая, как раз так, также используется j2mod).

Значение, переданное setCommPortId(), является идентификатором COM-порта Windows - вы должны иметь возможность передать любое значение, которое связано с фактическим COM-портом - «COM1», «COM2» и т. Д. Обратите внимание, что некоторые USB-устройства конвертеры меняют свой COM-порт каждый раз, когда они используются, поэтому вы можете преследовать имена портов.

Вы упомянули, что ваше устройство также имеет IP-адрес. Вы не можете использовать классы и методы RTU для доступа к устройству Modbus/TCP. То же самое верно для jamod и j2mod - большинство библиотек Modbus имеют разные классы для RTU и TCP-транспортов (а также ASCII и UDP для библиотек, которые поддерживают эти другие транспорты).

+0

Благодарим вас за ответ. Но я уже выяснил, в чем моя ошибка. –

+0

Не беспокойтесь - я периодически ищу ответы на непогашенные вопросы и отвечаю на них;) –

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