BACnet доступ к удаленным устройствам
Я использую bacnet4j, чтобы получить доступ к удаленным устройствам.
Прямо сейчас я могу получить доступ к 1 из 3 устройств нормально, но не могу для другого 2. Используя инструмент обнаружения BACnet, я установил правильный порт и адрес BBMD и нашел следующий список:
- Устройство 92068: BACnetDemo по IP:bac1 в сети 50 с локальной сетью MAC:45:186:192
- Устройство 2100: маршрут BACnet по IP:bac1 в сети 50 с локальной сетью MAC:59:186:192
- Устройство 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, но не как клиент.