我使用在本地主机上运行的 Scada Bacnet 设备模拟器创建了两个设备。命名为设备 0 和设备 1。我有 bacnet4j 测试代码,也在 localhost 中运行。我正在尝试获取这些设备对象的属性。但我收到以下错误。
线程“主”com.serotonin.bacnet4j.exception.BACnetTimeoutException 中的异常:在 com.serotonin.bacnet4j.transport.Transport.sendSegments(Transport.java:273) 等待 com.serotonin.bacnet4j.transport.Transport.sendSegments(Transport.java:273) 的 id 0 响应时超时。 transport.Transport.send(Transport.java:188) 在 com.serotonin.bacnet4j.LocalDevice.send(LocalDevice.java:376) 在 Test2.getObjectList(Test2.java:63) 在 Test2.main(Test2.java:52 )
`
import java.net.InetAddress;
import java.net.InetSocketAddress;
import com.serotonin.bacnet4j.LocalDevice;
import com.serotonin.bacnet4j.RemoteDevice;
import com.serotonin.bacnet4j.RemoteObject;
//import com.serotonin.bacnet4j.event.DefaultDeviceEventListener;
import com.serotonin.bacnet4j.enums.MaxApduLength;
import com.serotonin.bacnet4j.event.DeviceEventListener;
import com.serotonin.bacnet4j.npdu.ip.IpNetwork;
import com.serotonin.bacnet4j.obj.BACnetObject;
import com.serotonin.bacnet4j.service.acknowledgement.ReadPropertyAck;
import com.serotonin.bacnet4j.service.confirmed.ReadPropertyRequest;
import com.serotonin.bacnet4j.service.confirmed.ReinitializeDeviceRequest.ReinitializedStateOfDevice;
import com.serotonin.bacnet4j.transport.Transport;
import com.serotonin.bacnet4j.type.Encodable;
import com.serotonin.bacnet4j.type.constructed.Address;
import com.serotonin.bacnet4j.type.constructed.Choice;
import com.serotonin.bacnet4j.type.constructed.DateTime;
import com.serotonin.bacnet4j.type.constructed.PropertyValue;
import com.serotonin.bacnet4j.type.constructed.SequenceOf;
import com.serotonin.bacnet4j.type.constructed.TimeStamp;
import com.serotonin.bacnet4j.type.enumerated.EventState;
import com.serotonin.bacnet4j.type.enumerated.EventType;
import com.serotonin.bacnet4j.type.enumerated.MessagePriority;
import com.serotonin.bacnet4j.type.enumerated.NotifyType;
import com.serotonin.bacnet4j.type.enumerated.ObjectType;
import com.serotonin.bacnet4j.type.enumerated.PropertyIdentifier;
import com.serotonin.bacnet4j.type.enumerated.Segmentation;
import com.serotonin.bacnet4j.type.notificationParameters.NotificationParameters;
import com.serotonin.bacnet4j.type.primitive.Boolean;
import com.serotonin.bacnet4j.type.primitive.CharacterString;
import com.serotonin.bacnet4j.type.primitive.ObjectIdentifier;
import com.serotonin.bacnet4j.type.primitive.UnsignedInteger;
public class Test2 {
public static void main(String[] args) throws Exception {
IpNetwork network = new IpNetwork("192.168.1.255", 47808, "0.0.0.0");
/*System.out.println(network.DEFAULT_BIND_IP);
System.out.println(network.DEFAULT_BROADCAST_IP);
System.out.println(network.DEFAULT_PORT);*/
Transport transport = new Transport(network);
LocalDevice localDevice = new LocalDevice(101, transport);
localDevice.getEventHandler().addListener((DeviceEventListener) new Listener());
//localDevice.setPort(47808);
localDevice.initialize();
// Read
ReadPropertyRequest read = new ReadPropertyRequest(new ObjectIdentifier(ObjectType.analogInput, 243), PropertyIdentifier.presentValue);
getObjectList(localDevice, "192.168.1.210", 47808, 101);
localDevice.terminate();
}
private static void getObjectList(LocalDevice localDevice, String ip, int port, int deviceId) throws Exception {
InetSocketAddress addr = new InetSocketAddress(InetAddress.getByName(ip), port);
Address address = new Address(ip, port);
ReadPropertyRequest read = new ReadPropertyRequest(new ObjectIdentifier(ObjectType.device, deviceId), PropertyIdentifier.objectList);
//ReadPropertyAck ack = (ReadPropertyAck) localDevice.send(null, read);
ReadPropertyAck ack = (ReadPropertyAck) localDevice.send(address,MaxApduLength.UP_TO_1024, Segmentation.segmentedBoth, read);
//ReadPropertyAck ack = (ReadPropertyAck) localDevice.send(address, MaxApduLength.UP_TO_1024, segmentationSupported, serviceRequest)
System.out.println("IP: " + ip);
SequenceOf<ObjectIdentifier> oids = (SequenceOf<ObjectIdentifier>) ack.getValue();
for (ObjectIdentifier oid : oids)
System.out.println(" " + oid);
}
static class Listener implements DeviceEventListener {
@Override
public void iAmReceived(RemoteDevice d) {
System.out.println("IAm received" + d);
}
@Override
public boolean allowPropertyWrite(BACnetObject arg0, PropertyValue arg1) {
// TODO Auto-generated method stub
return false;
}
@Override
public void covNotificationReceived(UnsignedInteger arg0,
RemoteDevice arg1, ObjectIdentifier arg2, UnsignedInteger arg3,
SequenceOf<PropertyValue> arg4) {
// TODO Auto-generated method stub
}
@Override
public void eventNotificationReceived(UnsignedInteger arg0,
RemoteDevice arg1, ObjectIdentifier arg2, TimeStamp arg3,
UnsignedInteger arg4, UnsignedInteger arg5, EventType arg6,
CharacterString arg7, NotifyType arg8, Boolean arg9,
EventState arg10, EventState arg11, NotificationParameters arg12) {
// TODO Auto-generated method stub
}
@Override
public void iHaveReceived(RemoteDevice arg0, RemoteObject arg1) {
// TODO Auto-generated method stub
}
@Override
public void listenerException(Throwable arg0) {
// TODO Auto-generated method stub
}
@Override
public void privateTransferReceived(UnsignedInteger arg0,
UnsignedInteger arg1, Encodable arg2) {
// TODO Auto-generated method stub
}
@Override
public void propertyWritten(BACnetObject arg0, PropertyValue arg1) {
// TODO Auto-generated method stub
}
@Override
public void reinitializeDevice(ReinitializedStateOfDevice arg0) {
// TODO Auto-generated method stub
}
@Override
public void synchronizeTime(DateTime arg0, boolean arg1) {
// TODO Auto-generated method stub
}
@Override
public void textMessageReceived(RemoteDevice arg0, Choice arg1,
MessagePriority arg2, CharacterString arg3) {
// TODO Auto-generated method stub
}
}
}