BACnet доступ к удаленным устройствам

Я использую bacnet4j, чтобы получить доступ к удаленным устройствам.

Прямо сейчас я могу получить доступ к 1 из 3 устройств нормально, но не могу для другого 2. Используя инструмент обнаружения BACnet, я установил правильный порт и адрес BBMD и нашел следующий список:

  1. Устройство 92068: BACnetDemo по IP:bac1 в сети 50 с локальной сетью MAC:45:186:192
  2. Устройство 2100: маршрут BACnet по IP:bac1 в сети 50 с локальной сетью MAC:59:186:192
  3. Устройство 1001: 001 - 001 - CBM24 на IP:bac1 в сети 1201 с MAC 1

Вот код Java:

    import com.serotonin.bacnet4j.LocalDevice;
    import com.serotonin.bacnet4j.RemoteDevice;
    import com.serotonin.bacnet4j.npdu.ip.IpNetwork;
    import com.serotonin.bacnet4j.npdu.ip.IpNetworkUtils;
    import com.serotonin.bacnet4j.transport.DefaultTransport;
    import com.serotonin.bacnet4j.transport.Transport;
    import com.serotonin.bacnet4j.type.constructed.Address;

    public class Application {

    static LocalDevice localDevice1;

    public static void main(String[] args) {

       IpNetwork network1 = new IpNetwork("255.255.255.255", 12345);
       Transport transport1 = new DefaultTransport(network1);
       transport1.addNetworkRouter(1001, IpNetworkUtils.toOctetString("IP:Port"));

      localDevice1 = new LocalDevice(92068, transport1);

      try {
        localDevice1.initialize();
        System.out.println("initialized");
        Address address1 = new Address(IpNetworkUtils.toOctetString("IP:port"));
        RemoteDevice d1 = localDevice1.findRemoteDevice(address1, 92068);
        System.out.println(d1);

        Address address2 = new Address(1001, IpNetworkUtils.toOctetString("IP:port"));
        RemoteDevice d2 = localDevice1.findRemoteDevice(address2, 1001);
        System.out.println(d2);

      } catch (Exception e) {
        System.out.println(e.toString());
      } finally {
        localDevice1.terminate();
      }
     }
    }

Я получаю тайм-аут в:

   RemoteDevice d2 = localDevice1.findRemoteDevice(address2, 1001);

Каждый раз, когда я запускаю это, я не могу получить доступ к Устройству / Маршрутизаторам 2100 и 1001. Я пытался получить прямой доступ к ним, подход маршрутизатора выше, используя различные локальные устройства. У кого-нибудь есть идеи?

2 устройства 2100 и 1001 имеют объекты, связанные с ними, но другой элемент не имеет.

У кого-нибудь есть идеи, что я делаю не так?

1 ответ

Оливер

Мне кажется, что вы пытаетесь смешать режимы клиента и сервера в вашем приложении. (Не знаком с серотонином, просто BACnet). Описание вашей физической настройки поможет: кажется, что у вас есть:

  • реальный IP-адрес к маршрутизатору MSTP, устройство 2100, номер локальной сети 50, номер удаленной сети 1201
  • реальное устройство MSTP Экземпляр устройства 1001, MAC 1, в удаленной сети 1201
  • виртуальное устройство 92068, в вашем приложении Java, где ваше приложение выступает в качестве сервера BACnet

Теперь, когда ваше приложение выступает в качестве клиента, вы обнаруживаете 92068 (по крайней мере, я так полагаю, поскольку вы никогда не упоминали о проблемах здесь).

Затем, снова используя ваше приложение в качестве клиента BACnet, вы пытаетесь обнаружить, что Экземпляр устройства 1001, который является внешним по отношению к вашему устройству, потребует глобальной (или удаленной), но не локальной, широковещательной передачи для достижения через реальный маршрутизатор.

Я думаю, что ваша проблема в том, что библиотека Серотонина может нормально работать как сервер BACnet, но не как клиент.

Другие вопросы по тегам