/* * ============================================================================ * GNU General Public License * ============================================================================ * * Copyright (C) 2006-2011 Serotonin Software Technologies Inc. http://serotoninsoftware.com * @author Matthew Lohbihler * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * When signing a commercial license with Serotonin Software Technologies Inc., * the following extension to GPL is made. A special exception to the GPL is * included to allow you to distribute a combined work that includes BAcnet4J * without being obliged to provide the source code for any proprietary components. */ package com.serotonin.bacnet4j.obj; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.serotonin.bacnet4j.exception.BACnetServiceException; import com.serotonin.bacnet4j.type.AmbiguousValue; import com.serotonin.bacnet4j.type.Encodable; import com.serotonin.bacnet4j.type.constructed.AccumulatorRecord; import com.serotonin.bacnet4j.type.constructed.ActionList; import com.serotonin.bacnet4j.type.constructed.AddressBinding; import com.serotonin.bacnet4j.type.constructed.CalendarEntry; import com.serotonin.bacnet4j.type.constructed.ClientCov; import com.serotonin.bacnet4j.type.constructed.CovSubscription; import com.serotonin.bacnet4j.type.constructed.DailySchedule; import com.serotonin.bacnet4j.type.constructed.DateRange; import com.serotonin.bacnet4j.type.constructed.DateTime; import com.serotonin.bacnet4j.type.constructed.Destination; import com.serotonin.bacnet4j.type.constructed.DeviceObjectPropertyReference; import com.serotonin.bacnet4j.type.constructed.DeviceObjectReference; import com.serotonin.bacnet4j.type.constructed.EventLogRecord; import com.serotonin.bacnet4j.type.constructed.EventTransitionBits; import com.serotonin.bacnet4j.type.constructed.LimitEnable; import com.serotonin.bacnet4j.type.constructed.LogMultipleRecord; import com.serotonin.bacnet4j.type.constructed.LogRecord; import com.serotonin.bacnet4j.type.constructed.ObjectPropertyReference; import com.serotonin.bacnet4j.type.constructed.ObjectTypesSupported; import com.serotonin.bacnet4j.type.constructed.Prescale; import com.serotonin.bacnet4j.type.constructed.PriorityArray; import com.serotonin.bacnet4j.type.constructed.ReadAccessResult; import com.serotonin.bacnet4j.type.constructed.ReadAccessSpecification; import com.serotonin.bacnet4j.type.constructed.Recipient; import com.serotonin.bacnet4j.type.constructed.Scale; import com.serotonin.bacnet4j.type.constructed.SequenceOf; import com.serotonin.bacnet4j.type.constructed.ServicesSupported; import com.serotonin.bacnet4j.type.constructed.SessionKey; import com.serotonin.bacnet4j.type.constructed.SetpointReference; import com.serotonin.bacnet4j.type.constructed.ShedLevel; import com.serotonin.bacnet4j.type.constructed.SpecialEvent; import com.serotonin.bacnet4j.type.constructed.StatusFlags; import com.serotonin.bacnet4j.type.constructed.TimeStamp; import com.serotonin.bacnet4j.type.constructed.VtSession; import com.serotonin.bacnet4j.type.enumerated.Action; import com.serotonin.bacnet4j.type.enumerated.BackupState; import com.serotonin.bacnet4j.type.enumerated.BinaryPV; import com.serotonin.bacnet4j.type.enumerated.DeviceStatus; import com.serotonin.bacnet4j.type.enumerated.DoorAlarmState; import com.serotonin.bacnet4j.type.enumerated.DoorSecuredStatus; import com.serotonin.bacnet4j.type.enumerated.DoorStatus; import com.serotonin.bacnet4j.type.enumerated.DoorValue; import com.serotonin.bacnet4j.type.enumerated.EngineeringUnits; import com.serotonin.bacnet4j.type.enumerated.ErrorClass; import com.serotonin.bacnet4j.type.enumerated.ErrorCode; import com.serotonin.bacnet4j.type.enumerated.EventState; import com.serotonin.bacnet4j.type.enumerated.EventType; import com.serotonin.bacnet4j.type.enumerated.FileAccessMethod; import com.serotonin.bacnet4j.type.enumerated.LifeSafetyMode; import com.serotonin.bacnet4j.type.enumerated.LifeSafetyOperation; import com.serotonin.bacnet4j.type.enumerated.LifeSafetyState; import com.serotonin.bacnet4j.type.enumerated.LockStatus; import com.serotonin.bacnet4j.type.enumerated.LoggingType; import com.serotonin.bacnet4j.type.enumerated.Maintenance; import com.serotonin.bacnet4j.type.enumerated.NodeType; import com.serotonin.bacnet4j.type.enumerated.NotifyType; import com.serotonin.bacnet4j.type.enumerated.ObjectType; import com.serotonin.bacnet4j.type.enumerated.Polarity; import com.serotonin.bacnet4j.type.enumerated.ProgramError; import com.serotonin.bacnet4j.type.enumerated.ProgramRequest; import com.serotonin.bacnet4j.type.enumerated.ProgramState; import com.serotonin.bacnet4j.type.enumerated.PropertyIdentifier; import com.serotonin.bacnet4j.type.enumerated.Reliability; import com.serotonin.bacnet4j.type.enumerated.RestartReason; import com.serotonin.bacnet4j.type.enumerated.Segmentation; import com.serotonin.bacnet4j.type.enumerated.ShedState; import com.serotonin.bacnet4j.type.enumerated.SilencedState; import com.serotonin.bacnet4j.type.enumerated.VtClass; import com.serotonin.bacnet4j.type.eventParameter.EventParameter; import com.serotonin.bacnet4j.type.primitive.Boolean; import com.serotonin.bacnet4j.type.primitive.CharacterString; import com.serotonin.bacnet4j.type.primitive.Date; import com.serotonin.bacnet4j.type.primitive.ObjectIdentifier; import com.serotonin.bacnet4j.type.primitive.Real; import com.serotonin.bacnet4j.type.primitive.SignedInteger; import com.serotonin.bacnet4j.type.primitive.Time; import com.serotonin.bacnet4j.type.primitive.Unsigned16; import com.serotonin.bacnet4j.type.primitive.UnsignedInteger; public class ObjectProperties { private static final Map<ObjectType, List<PropertyTypeDefinition>> propertyTypes = new HashMap<ObjectType, List<PropertyTypeDefinition>>(); public static PropertyTypeDefinition getPropertyTypeDefinition(ObjectType objectType, PropertyIdentifier propertyIdentifier) { List<PropertyTypeDefinition> list = propertyTypes.get(objectType); if (list == null) return null; for (PropertyTypeDefinition def : list) { if (def.getPropertyIdentifier().equals(propertyIdentifier)) return def; } return null; } public static PropertyTypeDefinition getPropertyTypeDefinitionRequired(ObjectType objectType, PropertyIdentifier propertyIdentifier) throws BACnetServiceException { PropertyTypeDefinition def = getPropertyTypeDefinition(objectType, propertyIdentifier); if (def == null) throw new BACnetServiceException(ErrorClass.property, ErrorCode.unknownProperty, objectType + "/" + propertyIdentifier); return def; } @SuppressWarnings("unchecked") public static void validateValue(ObjectType objectType, PropertyIdentifier propertyIdentifier, Encodable value) throws BACnetServiceException { PropertyTypeDefinition def = getPropertyTypeDefinitionRequired(objectType, propertyIdentifier); if (def.isSequence()) { SequenceOf<Encodable> seq = (SequenceOf<Encodable>) value; for (Encodable e : seq) { if (!def.getClazz().isAssignableFrom(e.getClass())) throw new BACnetServiceException(ErrorClass.property, ErrorCode.invalidDataType, "expected " + def.getClazz() + ", received=" + value.getClass()); } } else if (!def.getClazz().isAssignableFrom(value.getClass())) throw new BACnetServiceException(ErrorClass.property, ErrorCode.invalidDataType, "expected " + def.getClazz() + ", received=" + value.getClass()); } public static void validateSequenceValue(ObjectType objectType, PropertyIdentifier propertyIdentifier, Encodable value) throws BACnetServiceException { PropertyTypeDefinition def = getPropertyTypeDefinitionRequired(objectType, propertyIdentifier); if (!def.isSequence()) throw new BACnetServiceException(ErrorClass.property, ErrorCode.propertyIsNotAnArray); if (!def.getClazz().isAssignableFrom(value.getClass())) throw new BACnetServiceException(ErrorClass.property, ErrorCode.invalidDataType); } public static List<PropertyTypeDefinition> getPropertyTypeDefinitions(ObjectType objectType) { return getPropertyTypeDefinitions(objectType, 0); } public static List<PropertyTypeDefinition> getRequiredPropertyTypeDefinitions(ObjectType objectType) { return getPropertyTypeDefinitions(objectType, 1); } public static List<PropertyTypeDefinition> getOptionalPropertyTypeDefinitions(ObjectType objectType) { return getPropertyTypeDefinitions(objectType, 2); } public static boolean isCommandable(ObjectType type, PropertyIdentifier pid) { if (!pid.equals(PropertyIdentifier.presentValue)) return false; return type.equals(ObjectType.analogOutput) || type.equals(ObjectType.analogValue) || type.equals(ObjectType.binaryOutput) || type.equals(ObjectType.binaryValue) || type.equals(ObjectType.multiStateOutput) || type.equals(ObjectType.multiStateValue) || type.equals(ObjectType.accessDoor); } /** * @param objectType * @param include * 0 = all, 1 = required, 2 = optional * @return */ private static List<PropertyTypeDefinition> getPropertyTypeDefinitions(ObjectType objectType, int include) { List<PropertyTypeDefinition> result = new ArrayList<PropertyTypeDefinition>(); List<PropertyTypeDefinition> list = propertyTypes.get(objectType); if (list != null) { for (PropertyTypeDefinition def : list) { if (include == 0 || (include == 1 && def.isRequired()) || (include == 2 && def.isOptional())) result.add(def); } } return result; } private static void add(ObjectType type, PropertyIdentifier pid, Class<? extends Encodable> clazz, boolean sequence, boolean required, Encodable defaultValue) { List<PropertyTypeDefinition> list = propertyTypes.get(type); if (list == null) { list = new ArrayList<PropertyTypeDefinition>(); propertyTypes.put(type, list); } // Check for existing entries. for (PropertyTypeDefinition def : list) { if (def.getPropertyIdentifier().equals(pid)) { list.remove(def); break; } } list.add(new PropertyTypeDefinition(type, pid, clazz, sequence, required, defaultValue)); } public static void addPropertyTypeDefinition(ObjectType type, PropertyIdentifier pid, Class<? extends Encodable> clazz, boolean sequence, boolean required, Encodable defaultValue) { List<PropertyTypeDefinition> list = propertyTypes.get(type); if (list == null) throw new RuntimeException("ObjectType not found: " + type); // Check for existing entries. for (PropertyTypeDefinition def : list) { if (def.getPropertyIdentifier().equals(pid)) throw new RuntimeException("ObjectType already contains the given PropertyIdentifier"); } list.add(new PropertyTypeDefinition(type, pid, clazz, sequence, required, defaultValue)); } static { // Access door add(ObjectType.accessDoor, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.accessDoor, 0x3fffff)); add(ObjectType.accessDoor, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.accessDoor, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.accessDoor); add(ObjectType.accessDoor, PropertyIdentifier.presentValue, DoorValue.class, false, true, null); add(ObjectType.accessDoor, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.accessDoor, PropertyIdentifier.statusFlags, StatusFlags.class, false, true, new StatusFlags( false, false, false, true)); add(ObjectType.accessDoor, PropertyIdentifier.eventState, EventState.class, false, true, EventState.normal); add(ObjectType.accessDoor, PropertyIdentifier.reliability, Reliability.class, false, true, null); add(ObjectType.accessDoor, PropertyIdentifier.outOfService, Boolean.class, false, true, new Boolean(true)); add(ObjectType.accessDoor, PropertyIdentifier.priorityArray, PriorityArray.class, false, true, new PriorityArray()); add(ObjectType.accessDoor, PropertyIdentifier.relinquishDefault, DoorValue.class, false, true, DoorValue.lock); add(ObjectType.accessDoor, PropertyIdentifier.doorStatus, DoorStatus.class, false, false, null); add(ObjectType.accessDoor, PropertyIdentifier.lockStatus, LockStatus.class, false, false, null); add(ObjectType.accessDoor, PropertyIdentifier.securedStatus, DoorSecuredStatus.class, false, false, null); add(ObjectType.accessDoor, PropertyIdentifier.doorMembers, DeviceObjectReference.class, true, false, null); add(ObjectType.accessDoor, PropertyIdentifier.doorPulseTime, UnsignedInteger.class, false, true, null); add(ObjectType.accessDoor, PropertyIdentifier.doorExtendedPulseTime, UnsignedInteger.class, false, true, null); add(ObjectType.accessDoor, PropertyIdentifier.doorUnlockDelayTime, UnsignedInteger.class, false, false, null); add(ObjectType.accessDoor, PropertyIdentifier.doorOpenTooLongTime, UnsignedInteger.class, false, true, null); add(ObjectType.accessDoor, PropertyIdentifier.doorAlarmState, DoorAlarmState.class, false, false, null); add(ObjectType.accessDoor, PropertyIdentifier.maskedAlarmValues, DoorAlarmState.class, true, false, null); add(ObjectType.accessDoor, PropertyIdentifier.maintenanceRequired, Maintenance.class, false, false, null); add(ObjectType.accessDoor, PropertyIdentifier.timeDelay, UnsignedInteger.class, false, false, null); add(ObjectType.accessDoor, PropertyIdentifier.notificationClass, UnsignedInteger.class, false, false, null); add(ObjectType.accessDoor, PropertyIdentifier.alarmValues, DoorAlarmState.class, true, false, null); add(ObjectType.accessDoor, PropertyIdentifier.faultValues, DoorAlarmState.class, true, false, null); add(ObjectType.accessDoor, PropertyIdentifier.eventEnable, EventTransitionBits.class, false, false, null); add(ObjectType.accessDoor, PropertyIdentifier.ackedTransitions, EventTransitionBits.class, false, false, null); add(ObjectType.accessDoor, PropertyIdentifier.notifyType, NotifyType.class, false, false, null); add(ObjectType.accessDoor, PropertyIdentifier.eventTimeStamps, TimeStamp.class, true, false, null); add(ObjectType.accessDoor, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Accumulator add(ObjectType.accumulator, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.accumulator, 0x3fffff)); add(ObjectType.accumulator, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.accumulator, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.accumulator); add(ObjectType.accumulator, PropertyIdentifier.presentValue, UnsignedInteger.class, false, true, new UnsignedInteger(0)); add(ObjectType.accumulator, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.accumulator, PropertyIdentifier.deviceType, CharacterString.class, false, false, null); add(ObjectType.accumulator, PropertyIdentifier.statusFlags, StatusFlags.class, false, true, new StatusFlags( false, false, false, true)); add(ObjectType.accumulator, PropertyIdentifier.eventState, EventState.class, false, true, EventState.normal); add(ObjectType.accumulator, PropertyIdentifier.reliability, Reliability.class, false, false, null); add(ObjectType.accumulator, PropertyIdentifier.outOfService, Boolean.class, false, true, new Boolean(true)); add(ObjectType.accumulator, PropertyIdentifier.scale, Scale.class, false, true, null); add(ObjectType.accumulator, PropertyIdentifier.units, EngineeringUnits.class, false, true, EngineeringUnits.noUnits); add(ObjectType.accumulator, PropertyIdentifier.prescale, Prescale.class, false, false, null); add(ObjectType.accumulator, PropertyIdentifier.maxPresValue, UnsignedInteger.class, false, true, null); add(ObjectType.accumulator, PropertyIdentifier.valueChangeTime, DateTime.class, false, false, null); add(ObjectType.accumulator, PropertyIdentifier.valueBeforeChange, UnsignedInteger.class, false, false, null); add(ObjectType.accumulator, PropertyIdentifier.valueSet, UnsignedInteger.class, false, false, null); add(ObjectType.accumulator, PropertyIdentifier.loggingRecord, AccumulatorRecord.class, false, false, null); add(ObjectType.accumulator, PropertyIdentifier.loggingObject, ObjectIdentifier.class, false, false, null); add(ObjectType.accumulator, PropertyIdentifier.pulseRate, UnsignedInteger.class, false, false, null); add(ObjectType.accumulator, PropertyIdentifier.highLimit, UnsignedInteger.class, false, false, null); add(ObjectType.accumulator, PropertyIdentifier.lowLimit, UnsignedInteger.class, false, false, null); add(ObjectType.accumulator, PropertyIdentifier.limitMonitoringInterval, UnsignedInteger.class, false, false, null); add(ObjectType.accumulator, PropertyIdentifier.notificationClass, UnsignedInteger.class, false, false, null); add(ObjectType.accumulator, PropertyIdentifier.timeDelay, UnsignedInteger.class, false, false, null); add(ObjectType.accumulator, PropertyIdentifier.limitEnable, LimitEnable.class, false, false, null); add(ObjectType.accumulator, PropertyIdentifier.eventEnable, EventTransitionBits.class, false, false, null); add(ObjectType.accumulator, PropertyIdentifier.ackedTransitions, EventTransitionBits.class, false, false, null); add(ObjectType.accumulator, PropertyIdentifier.notifyType, NotifyType.class, false, false, null); add(ObjectType.accumulator, PropertyIdentifier.eventTimeStamps, TimeStamp.class, true, false, null); add(ObjectType.accumulator, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Analog input add(ObjectType.analogInput, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.analogInput, 0x3fffff)); add(ObjectType.analogInput, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.analogInput, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.analogInput); add(ObjectType.analogInput, PropertyIdentifier.presentValue, Real.class, false, true, new Real(0)); add(ObjectType.analogInput, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.analogInput, PropertyIdentifier.deviceType, CharacterString.class, false, false, null); add(ObjectType.analogInput, PropertyIdentifier.statusFlags, StatusFlags.class, false, true, new StatusFlags( false, false, false, true)); add(ObjectType.analogInput, PropertyIdentifier.eventState, EventState.class, false, true, EventState.normal); add(ObjectType.analogInput, PropertyIdentifier.reliability, Reliability.class, false, false, null); add(ObjectType.analogInput, PropertyIdentifier.outOfService, Boolean.class, false, true, new Boolean(true)); add(ObjectType.analogInput, PropertyIdentifier.updateInterval, UnsignedInteger.class, false, false, null); add(ObjectType.analogInput, PropertyIdentifier.units, EngineeringUnits.class, false, true, EngineeringUnits.noUnits); add(ObjectType.analogInput, PropertyIdentifier.minPresValue, Real.class, false, false, null); add(ObjectType.analogInput, PropertyIdentifier.maxPresValue, Real.class, false, false, null); add(ObjectType.analogInput, PropertyIdentifier.resolution, Real.class, false, false, null); add(ObjectType.analogInput, PropertyIdentifier.covIncrement, Real.class, false, false, null); add(ObjectType.analogInput, PropertyIdentifier.timeDelay, UnsignedInteger.class, false, false, null); add(ObjectType.analogInput, PropertyIdentifier.notificationClass, UnsignedInteger.class, false, false, null); add(ObjectType.analogInput, PropertyIdentifier.highLimit, Real.class, false, false, null); add(ObjectType.analogInput, PropertyIdentifier.lowLimit, Real.class, false, false, null); add(ObjectType.analogInput, PropertyIdentifier.deadband, Real.class, false, false, null); add(ObjectType.analogInput, PropertyIdentifier.limitEnable, LimitEnable.class, false, false, null); add(ObjectType.analogInput, PropertyIdentifier.eventEnable, EventTransitionBits.class, false, false, null); add(ObjectType.analogInput, PropertyIdentifier.ackedTransitions, EventTransitionBits.class, false, false, null); add(ObjectType.analogInput, PropertyIdentifier.notifyType, NotifyType.class, false, false, null); add(ObjectType.analogInput, PropertyIdentifier.eventTimeStamps, TimeStamp.class, true, false, null); add(ObjectType.analogInput, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Analog output add(ObjectType.analogOutput, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.analogOutput, 0x3fffff)); add(ObjectType.analogOutput, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.analogOutput, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.analogOutput); add(ObjectType.analogOutput, PropertyIdentifier.presentValue, Real.class, false, true, new Real(0)); add(ObjectType.analogOutput, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.analogOutput, PropertyIdentifier.deviceType, CharacterString.class, false, false, null); add(ObjectType.analogOutput, PropertyIdentifier.statusFlags, StatusFlags.class, false, true, new StatusFlags( false, false, false, true)); add(ObjectType.analogOutput, PropertyIdentifier.eventState, EventState.class, false, true, EventState.normal); add(ObjectType.analogOutput, PropertyIdentifier.reliability, Reliability.class, false, false, null); add(ObjectType.analogOutput, PropertyIdentifier.outOfService, Boolean.class, false, true, new Boolean(true)); add(ObjectType.analogOutput, PropertyIdentifier.units, EngineeringUnits.class, false, true, EngineeringUnits.noUnits); add(ObjectType.analogOutput, PropertyIdentifier.minPresValue, Real.class, false, false, null); add(ObjectType.analogOutput, PropertyIdentifier.maxPresValue, Real.class, false, false, null); add(ObjectType.analogOutput, PropertyIdentifier.resolution, Real.class, false, false, null); add(ObjectType.analogOutput, PropertyIdentifier.priorityArray, PriorityArray.class, false, true, new PriorityArray()); add(ObjectType.analogOutput, PropertyIdentifier.relinquishDefault, Real.class, false, true, new Real(0)); add(ObjectType.analogOutput, PropertyIdentifier.covIncrement, Real.class, false, false, null); add(ObjectType.analogOutput, PropertyIdentifier.timeDelay, UnsignedInteger.class, false, false, null); add(ObjectType.analogOutput, PropertyIdentifier.notificationClass, UnsignedInteger.class, false, false, null); add(ObjectType.analogOutput, PropertyIdentifier.highLimit, Real.class, false, false, null); add(ObjectType.analogOutput, PropertyIdentifier.lowLimit, Real.class, false, false, null); add(ObjectType.analogOutput, PropertyIdentifier.deadband, Real.class, false, false, null); add(ObjectType.analogOutput, PropertyIdentifier.limitEnable, LimitEnable.class, false, false, null); add(ObjectType.analogOutput, PropertyIdentifier.eventEnable, EventTransitionBits.class, false, false, null); add(ObjectType.analogOutput, PropertyIdentifier.ackedTransitions, EventTransitionBits.class, false, false, null); add(ObjectType.analogOutput, PropertyIdentifier.notifyType, NotifyType.class, false, false, null); add(ObjectType.analogOutput, PropertyIdentifier.eventTimeStamps, TimeStamp.class, true, false, null); add(ObjectType.analogOutput, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Analog value add(ObjectType.analogValue, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.analogValue, 0x3fffff)); add(ObjectType.analogValue, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.analogValue, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.analogValue); add(ObjectType.analogValue, PropertyIdentifier.presentValue, Real.class, false, true, new Real(0)); add(ObjectType.analogValue, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.analogValue, PropertyIdentifier.statusFlags, StatusFlags.class, false, true, new StatusFlags( false, false, false, true)); add(ObjectType.analogValue, PropertyIdentifier.eventState, EventState.class, false, true, EventState.normal); add(ObjectType.analogValue, PropertyIdentifier.reliability, Reliability.class, false, false, null); add(ObjectType.analogValue, PropertyIdentifier.outOfService, Boolean.class, false, true, new Boolean(true)); add(ObjectType.analogValue, PropertyIdentifier.units, EngineeringUnits.class, false, true, EngineeringUnits.noUnits); add(ObjectType.analogValue, PropertyIdentifier.priorityArray, PriorityArray.class, false, false, new PriorityArray()); add(ObjectType.analogValue, PropertyIdentifier.relinquishDefault, Real.class, false, false, new Real(0)); add(ObjectType.analogValue, PropertyIdentifier.covIncrement, Real.class, false, false, null); add(ObjectType.analogValue, PropertyIdentifier.timeDelay, UnsignedInteger.class, false, false, null); add(ObjectType.analogValue, PropertyIdentifier.notificationClass, UnsignedInteger.class, false, false, null); add(ObjectType.analogValue, PropertyIdentifier.highLimit, Real.class, false, false, null); add(ObjectType.analogValue, PropertyIdentifier.lowLimit, Real.class, false, false, null); add(ObjectType.analogValue, PropertyIdentifier.deadband, Real.class, false, false, null); add(ObjectType.analogValue, PropertyIdentifier.limitEnable, LimitEnable.class, false, false, null); add(ObjectType.analogValue, PropertyIdentifier.eventEnable, EventTransitionBits.class, false, false, null); add(ObjectType.analogValue, PropertyIdentifier.ackedTransitions, EventTransitionBits.class, false, false, null); add(ObjectType.analogValue, PropertyIdentifier.notifyType, NotifyType.class, false, false, null); add(ObjectType.analogValue, PropertyIdentifier.eventTimeStamps, TimeStamp.class, true, false, null); add(ObjectType.analogValue, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Averaging add(ObjectType.averaging, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.averaging, 0x3fffff)); add(ObjectType.averaging, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.averaging, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.averaging); add(ObjectType.averaging, PropertyIdentifier.minimumValue, Real.class, false, true, new Real(0)); add(ObjectType.averaging, PropertyIdentifier.minimumValueTimestamp, DateTime.class, false, false, null); add(ObjectType.averaging, PropertyIdentifier.averageValue, Real.class, false, true, new Real(0)); add(ObjectType.averaging, PropertyIdentifier.varianceValue, Real.class, false, false, null); add(ObjectType.averaging, PropertyIdentifier.maximumValue, Real.class, false, true, new Real(0)); add(ObjectType.averaging, PropertyIdentifier.maximumValueTimestamp, DateTime.class, false, false, null); add(ObjectType.averaging, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.averaging, PropertyIdentifier.attemptedSamples, UnsignedInteger.class, false, true, new UnsignedInteger(0)); add(ObjectType.averaging, PropertyIdentifier.validSamples, UnsignedInteger.class, false, true, new UnsignedInteger(0)); add(ObjectType.averaging, PropertyIdentifier.objectPropertyReference, DeviceObjectPropertyReference.class, false, true, null); add(ObjectType.averaging, PropertyIdentifier.windowInterval, UnsignedInteger.class, false, true, null); add(ObjectType.averaging, PropertyIdentifier.windowSamples, UnsignedInteger.class, false, true, new UnsignedInteger(0)); add(ObjectType.averaging, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Binary input add(ObjectType.binaryInput, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.binaryInput, 0x3fffff)); add(ObjectType.binaryInput, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.binaryInput, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.binaryInput); add(ObjectType.binaryInput, PropertyIdentifier.presentValue, BinaryPV.class, false, true, BinaryPV.inactive); add(ObjectType.binaryInput, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.binaryInput, PropertyIdentifier.deviceType, CharacterString.class, false, false, null); add(ObjectType.binaryInput, PropertyIdentifier.statusFlags, StatusFlags.class, false, true, new StatusFlags( false, false, false, true)); add(ObjectType.binaryInput, PropertyIdentifier.eventState, EventState.class, false, true, EventState.normal); add(ObjectType.binaryInput, PropertyIdentifier.reliability, Reliability.class, false, false, null); add(ObjectType.binaryInput, PropertyIdentifier.outOfService, Boolean.class, false, true, new Boolean(true)); add(ObjectType.binaryInput, PropertyIdentifier.polarity, Polarity.class, false, true, Polarity.normal); add(ObjectType.binaryInput, PropertyIdentifier.inactiveText, CharacterString.class, false, false, null); add(ObjectType.binaryInput, PropertyIdentifier.activeText, CharacterString.class, false, false, null); add(ObjectType.binaryInput, PropertyIdentifier.changeOfStateTime, DateTime.class, false, false, null); add(ObjectType.binaryInput, PropertyIdentifier.changeOfStateCount, UnsignedInteger.class, false, false, null); add(ObjectType.binaryInput, PropertyIdentifier.timeOfStateCountReset, DateTime.class, false, false, null); add(ObjectType.binaryInput, PropertyIdentifier.elapsedActiveTime, UnsignedInteger.class, false, false, null); add(ObjectType.binaryInput, PropertyIdentifier.timeOfActiveTimeReset, DateTime.class, false, false, null); add(ObjectType.binaryInput, PropertyIdentifier.notificationClass, UnsignedInteger.class, false, false, null); add(ObjectType.binaryInput, PropertyIdentifier.alarmValue, BinaryPV.class, false, false, null); add(ObjectType.binaryInput, PropertyIdentifier.eventEnable, EventTransitionBits.class, false, false, null); add(ObjectType.binaryInput, PropertyIdentifier.ackedTransitions, EventTransitionBits.class, false, false, null); add(ObjectType.binaryInput, PropertyIdentifier.notifyType, NotifyType.class, false, false, null); add(ObjectType.binaryInput, PropertyIdentifier.eventTimeStamps, TimeStamp.class, true, false, null); add(ObjectType.binaryInput, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Binary output add(ObjectType.binaryOutput, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.binaryOutput, 0x3fffff)); add(ObjectType.binaryOutput, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.binaryOutput, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.binaryOutput); add(ObjectType.binaryOutput, PropertyIdentifier.presentValue, BinaryPV.class, false, true, BinaryPV.inactive); add(ObjectType.binaryOutput, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.binaryOutput, PropertyIdentifier.deviceType, CharacterString.class, false, false, null); add(ObjectType.binaryOutput, PropertyIdentifier.statusFlags, StatusFlags.class, false, true, new StatusFlags( false, false, false, true)); add(ObjectType.binaryOutput, PropertyIdentifier.eventState, EventState.class, false, true, EventState.normal); add(ObjectType.binaryOutput, PropertyIdentifier.reliability, Reliability.class, false, false, null); add(ObjectType.binaryOutput, PropertyIdentifier.outOfService, Boolean.class, false, true, new Boolean(true)); add(ObjectType.binaryOutput, PropertyIdentifier.polarity, Polarity.class, false, true, Polarity.normal); add(ObjectType.binaryOutput, PropertyIdentifier.inactiveText, CharacterString.class, false, false, null); add(ObjectType.binaryOutput, PropertyIdentifier.activeText, CharacterString.class, false, false, null); add(ObjectType.binaryOutput, PropertyIdentifier.changeOfStateTime, DateTime.class, false, false, null); add(ObjectType.binaryOutput, PropertyIdentifier.changeOfStateCount, UnsignedInteger.class, false, false, null); add(ObjectType.binaryOutput, PropertyIdentifier.timeOfStateCountReset, DateTime.class, false, false, null); add(ObjectType.binaryOutput, PropertyIdentifier.elapsedActiveTime, UnsignedInteger.class, false, false, null); add(ObjectType.binaryOutput, PropertyIdentifier.timeOfActiveTimeReset, DateTime.class, false, false, null); add(ObjectType.binaryOutput, PropertyIdentifier.minimumOffTime, UnsignedInteger.class, false, false, null); add(ObjectType.binaryOutput, PropertyIdentifier.minimumOnTime, UnsignedInteger.class, false, false, null); add(ObjectType.binaryOutput, PropertyIdentifier.priorityArray, PriorityArray.class, false, true, new PriorityArray()); add(ObjectType.binaryOutput, PropertyIdentifier.relinquishDefault, BinaryPV.class, false, true, BinaryPV.inactive); add(ObjectType.binaryOutput, PropertyIdentifier.timeDelay, UnsignedInteger.class, false, false, null); add(ObjectType.binaryOutput, PropertyIdentifier.notificationClass, UnsignedInteger.class, false, false, null); add(ObjectType.binaryOutput, PropertyIdentifier.feedbackValue, BinaryPV.class, false, false, null); add(ObjectType.binaryOutput, PropertyIdentifier.eventEnable, EventTransitionBits.class, false, false, null); add(ObjectType.binaryOutput, PropertyIdentifier.ackedTransitions, EventTransitionBits.class, false, false, null); add(ObjectType.binaryOutput, PropertyIdentifier.notifyType, NotifyType.class, false, false, null); add(ObjectType.binaryOutput, PropertyIdentifier.eventTimeStamps, TimeStamp.class, true, false, null); add(ObjectType.binaryOutput, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Binary value add(ObjectType.binaryValue, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.binaryValue, 0x3fffff)); add(ObjectType.binaryValue, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.binaryValue, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.binaryValue); add(ObjectType.binaryValue, PropertyIdentifier.presentValue, BinaryPV.class, false, true, BinaryPV.inactive); add(ObjectType.binaryValue, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.binaryValue, PropertyIdentifier.statusFlags, StatusFlags.class, false, true, new StatusFlags( false, false, false, true)); add(ObjectType.binaryValue, PropertyIdentifier.eventState, EventState.class, false, true, EventState.normal); add(ObjectType.binaryValue, PropertyIdentifier.reliability, Reliability.class, false, false, null); add(ObjectType.binaryValue, PropertyIdentifier.outOfService, Boolean.class, false, true, new Boolean(true)); add(ObjectType.binaryValue, PropertyIdentifier.inactiveText, CharacterString.class, false, false, null); add(ObjectType.binaryValue, PropertyIdentifier.activeText, CharacterString.class, false, false, null); add(ObjectType.binaryValue, PropertyIdentifier.changeOfStateTime, DateTime.class, false, false, null); add(ObjectType.binaryValue, PropertyIdentifier.changeOfStateCount, UnsignedInteger.class, false, false, null); add(ObjectType.binaryValue, PropertyIdentifier.timeOfStateCountReset, DateTime.class, false, false, null); add(ObjectType.binaryValue, PropertyIdentifier.elapsedActiveTime, UnsignedInteger.class, false, false, null); add(ObjectType.binaryValue, PropertyIdentifier.timeOfActiveTimeReset, DateTime.class, false, false, null); add(ObjectType.binaryValue, PropertyIdentifier.minimumOffTime, UnsignedInteger.class, false, false, null); add(ObjectType.binaryValue, PropertyIdentifier.minimumOnTime, UnsignedInteger.class, false, false, null); add(ObjectType.binaryValue, PropertyIdentifier.priorityArray, PriorityArray.class, false, false, new PriorityArray()); add(ObjectType.binaryValue, PropertyIdentifier.relinquishDefault, BinaryPV.class, false, false, BinaryPV.inactive); add(ObjectType.binaryValue, PropertyIdentifier.timeDelay, UnsignedInteger.class, false, false, null); add(ObjectType.binaryValue, PropertyIdentifier.notificationClass, UnsignedInteger.class, false, false, null); add(ObjectType.binaryValue, PropertyIdentifier.alarmValue, BinaryPV.class, false, false, null); add(ObjectType.binaryValue, PropertyIdentifier.eventEnable, EventTransitionBits.class, false, false, null); add(ObjectType.binaryValue, PropertyIdentifier.ackedTransitions, EventTransitionBits.class, false, false, null); add(ObjectType.binaryValue, PropertyIdentifier.notifyType, NotifyType.class, false, false, null); add(ObjectType.binaryValue, PropertyIdentifier.eventTimeStamps, TimeStamp.class, true, false, null); add(ObjectType.binaryValue, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Calendar add(ObjectType.calendar, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.calendar, 0x3fffff)); add(ObjectType.calendar, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.calendar, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.calendar); add(ObjectType.calendar, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.calendar, PropertyIdentifier.presentValue, Boolean.class, false, true, null); add(ObjectType.calendar, PropertyIdentifier.dateList, CalendarEntry.class, true, true, null); add(ObjectType.calendar, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Command add(ObjectType.command, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.command, 0x3fffff)); add(ObjectType.command, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.command, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.command); add(ObjectType.command, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.command, PropertyIdentifier.presentValue, UnsignedInteger.class, false, true, null); add(ObjectType.command, PropertyIdentifier.inProcess, Boolean.class, false, true, null); add(ObjectType.command, PropertyIdentifier.allWritesSuccessful, Boolean.class, false, true, null); add(ObjectType.command, PropertyIdentifier.action, ActionList.class, true, true, null); add(ObjectType.command, PropertyIdentifier.actionText, CharacterString.class, true, false, null); add(ObjectType.command, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Device add(ObjectType.device, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.device, 0x3fffff)); add(ObjectType.device, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.device, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.device); add(ObjectType.device, PropertyIdentifier.systemStatus, DeviceStatus.class, false, true, null); add(ObjectType.device, PropertyIdentifier.vendorName, CharacterString.class, false, true, null); add(ObjectType.device, PropertyIdentifier.vendorIdentifier, Unsigned16.class, false, true, null); add(ObjectType.device, PropertyIdentifier.modelName, CharacterString.class, false, true, null); add(ObjectType.device, PropertyIdentifier.firmwareRevision, CharacterString.class, false, true, null); add(ObjectType.device, PropertyIdentifier.applicationSoftwareVersion, CharacterString.class, false, true, null); add(ObjectType.device, PropertyIdentifier.location, CharacterString.class, false, false, null); add(ObjectType.device, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.device, PropertyIdentifier.protocolVersion, UnsignedInteger.class, false, true, null); add(ObjectType.device, PropertyIdentifier.protocolRevision, UnsignedInteger.class, false, true, null); add(ObjectType.device, PropertyIdentifier.protocolServicesSupported, ServicesSupported.class, false, true, null); add(ObjectType.device, PropertyIdentifier.protocolObjectTypesSupported, ObjectTypesSupported.class, false, true, null); add(ObjectType.device, PropertyIdentifier.objectList, ObjectIdentifier.class, true, true, null); add(ObjectType.device, PropertyIdentifier.structuredObjectList, ObjectIdentifier.class, true, false, null); add(ObjectType.device, PropertyIdentifier.maxApduLengthAccepted, UnsignedInteger.class, false, true, null); add(ObjectType.device, PropertyIdentifier.segmentationSupported, Segmentation.class, false, true, null); add(ObjectType.device, PropertyIdentifier.vtClassesSupported, VtClass.class, true, false, null); add(ObjectType.device, PropertyIdentifier.activeVtSessions, VtSession.class, true, false, null); add(ObjectType.device, PropertyIdentifier.localTime, Time.class, false, false, null); add(ObjectType.device, PropertyIdentifier.localDate, Date.class, false, false, null); add(ObjectType.device, PropertyIdentifier.utcOffset, SignedInteger.class, false, false, null); add(ObjectType.device, PropertyIdentifier.daylightSavingsStatus, Boolean.class, false, false, null); add(ObjectType.device, PropertyIdentifier.apduSegmentTimeout, UnsignedInteger.class, false, true, new UnsignedInteger(1000)); add(ObjectType.device, PropertyIdentifier.apduTimeout, UnsignedInteger.class, false, true, new UnsignedInteger( 5000)); add(ObjectType.device, PropertyIdentifier.numberOfApduRetries, UnsignedInteger.class, false, true, new UnsignedInteger(2)); add(ObjectType.device, PropertyIdentifier.listOfSessionKeys, SessionKey.class, true, false, null); add(ObjectType.device, PropertyIdentifier.timeSynchronizationRecipients, Recipient.class, true, false, null); add(ObjectType.device, PropertyIdentifier.maxMaster, UnsignedInteger.class, false, false, null); add(ObjectType.device, PropertyIdentifier.maxInfoFrames, UnsignedInteger.class, false, false, null); add(ObjectType.device, PropertyIdentifier.deviceAddressBinding, AddressBinding.class, true, true, new SequenceOf<AddressBinding>()); add(ObjectType.device, PropertyIdentifier.databaseRevision, UnsignedInteger.class, false, true, null); add(ObjectType.device, PropertyIdentifier.configurationFiles, ObjectIdentifier.class, true, false, null); add(ObjectType.device, PropertyIdentifier.lastRestoreTime, TimeStamp.class, false, false, null); add(ObjectType.device, PropertyIdentifier.backupFailureTimeout, Unsigned16.class, false, false, null); add(ObjectType.device, PropertyIdentifier.backupPreparationTime, Unsigned16.class, false, false, null); add(ObjectType.device, PropertyIdentifier.restorePreparationTime, Unsigned16.class, false, false, null); add(ObjectType.device, PropertyIdentifier.restoreCompletionTime, Unsigned16.class, false, false, null); add(ObjectType.device, PropertyIdentifier.backupAndRestoreState, BackupState.class, false, true, null); add(ObjectType.device, PropertyIdentifier.activeCovSubscriptions, CovSubscription.class, true, true, new SequenceOf<CovSubscription>()); add(ObjectType.device, PropertyIdentifier.maxSegmentsAccepted, UnsignedInteger.class, false, true, null); add(ObjectType.device, PropertyIdentifier.utcTimeSynchronizationRecipients, Recipient.class, true, false, null); add(ObjectType.device, PropertyIdentifier.timeSynchronizationInterval, UnsignedInteger.class, false, false, null); add(ObjectType.device, PropertyIdentifier.alignIntervals, Boolean.class, false, false, null); add(ObjectType.device, PropertyIdentifier.intervalOffset, UnsignedInteger.class, false, false, null); add(ObjectType.device, PropertyIdentifier.slaveProxyEnable, Boolean.class, true, false, null); add(ObjectType.device, PropertyIdentifier.autoSlaveDiscovery, Boolean.class, true, false, null); add(ObjectType.device, PropertyIdentifier.slaveAddressBinding, AddressBinding.class, true, false, null); add(ObjectType.device, PropertyIdentifier.manualSlaveAddressBinding, AddressBinding.class, true, false, null); add(ObjectType.device, PropertyIdentifier.lastRestartReason, RestartReason.class, false, false, null); add(ObjectType.device, PropertyIdentifier.restartNotificationRecipients, Recipient.class, true, false, null); add(ObjectType.device, PropertyIdentifier.timeOfDeviceRestart, TimeStamp.class, false, false, null); add(ObjectType.device, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Event enrollment add(ObjectType.eventEnrollment, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.eventEnrollment, 0x3fffff)); add(ObjectType.eventEnrollment, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.eventEnrollment, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.eventEnrollment); add(ObjectType.eventEnrollment, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.eventEnrollment, PropertyIdentifier.eventType, EventType.class, false, true, null); add(ObjectType.eventEnrollment, PropertyIdentifier.notifyType, NotifyType.class, false, true, null); add(ObjectType.eventEnrollment, PropertyIdentifier.eventParameters, EventParameter.class, false, true, null); add(ObjectType.eventEnrollment, PropertyIdentifier.objectPropertyReference, DeviceObjectPropertyReference.class, false, true, null); add(ObjectType.eventEnrollment, PropertyIdentifier.eventState, EventState.class, false, true, EventState.normal); add(ObjectType.eventEnrollment, PropertyIdentifier.eventEnable, EventTransitionBits.class, false, true, null); add(ObjectType.eventEnrollment, PropertyIdentifier.ackedTransitions, EventTransitionBits.class, false, true, null); add(ObjectType.eventEnrollment, PropertyIdentifier.notificationClass, UnsignedInteger.class, false, false, null); add(ObjectType.eventEnrollment, PropertyIdentifier.eventTimeStamps, TimeStamp.class, true, true, null); add(ObjectType.eventEnrollment, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Event log add(ObjectType.eventLog, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.eventLog, 0x3fffff)); add(ObjectType.eventLog, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.eventLog, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.eventLog); add(ObjectType.eventLog, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.eventLog, PropertyIdentifier.statusFlags, StatusFlags.class, false, true, new StatusFlags(false, false, false, true)); add(ObjectType.eventLog, PropertyIdentifier.eventState, EventState.class, false, true, EventState.normal); add(ObjectType.eventLog, PropertyIdentifier.reliability, Reliability.class, false, false, null); add(ObjectType.eventLog, PropertyIdentifier.enable, Boolean.class, false, true, null); add(ObjectType.eventLog, PropertyIdentifier.startTime, DateTime.class, false, false, null); add(ObjectType.eventLog, PropertyIdentifier.stopTime, DateTime.class, false, false, null); add(ObjectType.eventLog, PropertyIdentifier.stopWhenFull, Boolean.class, false, true, null); add(ObjectType.eventLog, PropertyIdentifier.bufferSize, UnsignedInteger.class, false, true, null); add(ObjectType.eventLog, PropertyIdentifier.logBuffer, EventLogRecord.class, true, true, new SequenceOf<EventLogRecord>()); add(ObjectType.eventLog, PropertyIdentifier.recordCount, UnsignedInteger.class, false, true, null); add(ObjectType.eventLog, PropertyIdentifier.totalRecordCount, UnsignedInteger.class, false, true, null); add(ObjectType.eventLog, PropertyIdentifier.notificationThreshold, UnsignedInteger.class, false, false, null); add(ObjectType.eventLog, PropertyIdentifier.recordsSinceNotification, UnsignedInteger.class, false, false, null); add(ObjectType.eventLog, PropertyIdentifier.lastNotifyRecord, UnsignedInteger.class, false, false, null); add(ObjectType.eventLog, PropertyIdentifier.notificationClass, UnsignedInteger.class, false, false, null); add(ObjectType.eventLog, PropertyIdentifier.eventEnable, EventTransitionBits.class, false, false, null); add(ObjectType.eventLog, PropertyIdentifier.ackedTransitions, EventTransitionBits.class, false, false, null); add(ObjectType.eventLog, PropertyIdentifier.notifyType, NotifyType.class, false, false, null); add(ObjectType.eventLog, PropertyIdentifier.eventTimeStamps, TimeStamp.class, true, false, null); add(ObjectType.eventLog, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // File add(ObjectType.file, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.file, 0x3fffff)); add(ObjectType.file, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.file, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.file); add(ObjectType.file, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.file, PropertyIdentifier.fileType, CharacterString.class, false, true, null); add(ObjectType.file, PropertyIdentifier.fileSize, UnsignedInteger.class, false, true, null); add(ObjectType.file, PropertyIdentifier.modificationDate, DateTime.class, false, true, null); add(ObjectType.file, PropertyIdentifier.archive, Boolean.class, false, true, null); add(ObjectType.file, PropertyIdentifier.readOnly, Boolean.class, false, true, null); add(ObjectType.file, PropertyIdentifier.fileAccessMethod, FileAccessMethod.class, false, true, null); add(ObjectType.file, PropertyIdentifier.recordCount, UnsignedInteger.class, false, false, null); add(ObjectType.file, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Group add(ObjectType.group, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.group, 0x3fffff)); add(ObjectType.group, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.group, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.group); add(ObjectType.group, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.group, PropertyIdentifier.listOfGroupMembers, ReadAccessSpecification.class, true, true, null); add(ObjectType.group, PropertyIdentifier.presentValue, ReadAccessResult.class, true, true, null); add(ObjectType.group, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Life safety point add(ObjectType.lifeSafetyPoint, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.lifeSafetyPoint, 0x3fffff)); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.lifeSafetyPoint); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.presentValue, LifeSafetyState.class, false, true, LifeSafetyState.quiet); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.trackingValue, LifeSafetyState.class, false, true, null); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.deviceType, CharacterString.class, false, false, null); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.statusFlags, StatusFlags.class, false, true, new StatusFlags(false, false, false, true)); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.eventState, EventState.class, false, true, EventState.normal); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.reliability, Reliability.class, false, true, null); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.outOfService, Boolean.class, false, true, new Boolean(true)); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.mode, LifeSafetyMode.class, false, true, null); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.acceptedModes, LifeSafetyMode.class, true, true, null); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.timeDelay, UnsignedInteger.class, false, false, null); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.notificationClass, UnsignedInteger.class, false, false, null); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.lifeSafetyAlarmValues, LifeSafetyState.class, true, false, null); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.alarmValues, LifeSafetyState.class, true, false, null); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.faultValues, LifeSafetyState.class, true, false, null); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.eventEnable, EventTransitionBits.class, false, false, null); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.ackedTransitions, EventTransitionBits.class, false, false, null); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.notifyType, NotifyType.class, false, false, null); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.eventTimeStamps, TimeStamp.class, true, false, null); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.silenced, SilencedState.class, false, true, null); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.operationExpected, LifeSafetyOperation.class, false, true, null); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.maintenanceRequired, Maintenance.class, false, false, null); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.setting, UnsignedInteger.class, false, false, null); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.directReading, Real.class, false, false, null); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.units, EngineeringUnits.class, false, true, EngineeringUnits.noUnits); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.memberOf, DeviceObjectReference.class, true, false, null); add(ObjectType.lifeSafetyPoint, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Life safety zone add(ObjectType.lifeSafetyZone, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.lifeSafetyZone, 0x3fffff)); add(ObjectType.lifeSafetyZone, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.lifeSafetyZone, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.lifeSafetyZone); add(ObjectType.lifeSafetyZone, PropertyIdentifier.presentValue, LifeSafetyState.class, false, true, LifeSafetyState.quiet); add(ObjectType.lifeSafetyZone, PropertyIdentifier.trackingValue, LifeSafetyState.class, false, true, null); add(ObjectType.lifeSafetyZone, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.lifeSafetyZone, PropertyIdentifier.deviceType, CharacterString.class, false, false, null); add(ObjectType.lifeSafetyZone, PropertyIdentifier.statusFlags, StatusFlags.class, false, true, new StatusFlags( false, false, false, true)); add(ObjectType.lifeSafetyZone, PropertyIdentifier.eventState, EventState.class, false, true, EventState.normal); add(ObjectType.lifeSafetyZone, PropertyIdentifier.reliability, Reliability.class, false, true, null); add(ObjectType.lifeSafetyZone, PropertyIdentifier.outOfService, Boolean.class, false, true, new Boolean(true)); add(ObjectType.lifeSafetyZone, PropertyIdentifier.mode, LifeSafetyMode.class, false, true, null); add(ObjectType.lifeSafetyZone, PropertyIdentifier.acceptedModes, LifeSafetyMode.class, true, true, null); add(ObjectType.lifeSafetyZone, PropertyIdentifier.timeDelay, UnsignedInteger.class, false, false, null); add(ObjectType.lifeSafetyZone, PropertyIdentifier.notificationClass, UnsignedInteger.class, false, false, null); add(ObjectType.lifeSafetyZone, PropertyIdentifier.lifeSafetyAlarmValues, LifeSafetyState.class, true, false, null); add(ObjectType.lifeSafetyZone, PropertyIdentifier.alarmValues, LifeSafetyState.class, true, false, null); add(ObjectType.lifeSafetyZone, PropertyIdentifier.faultValues, LifeSafetyState.class, true, false, null); add(ObjectType.lifeSafetyZone, PropertyIdentifier.eventEnable, EventTransitionBits.class, false, false, null); add(ObjectType.lifeSafetyZone, PropertyIdentifier.ackedTransitions, EventTransitionBits.class, false, false, null); add(ObjectType.lifeSafetyZone, PropertyIdentifier.notifyType, NotifyType.class, false, false, null); add(ObjectType.lifeSafetyZone, PropertyIdentifier.eventTimeStamps, TimeStamp.class, true, false, null); add(ObjectType.lifeSafetyZone, PropertyIdentifier.silenced, SilencedState.class, false, true, null); add(ObjectType.lifeSafetyZone, PropertyIdentifier.operationExpected, LifeSafetyOperation.class, false, true, null); add(ObjectType.lifeSafetyZone, PropertyIdentifier.maintenanceRequired, Maintenance.class, false, false, null); add(ObjectType.lifeSafetyZone, PropertyIdentifier.zoneMembers, DeviceObjectReference.class, true, true, null); add(ObjectType.lifeSafetyZone, PropertyIdentifier.memberOf, DeviceObjectReference.class, true, false, null); add(ObjectType.lifeSafetyZone, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Load control add(ObjectType.loadControl, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.loadControl, 0x3fffff)); add(ObjectType.loadControl, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.loadControl, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.loadControl); add(ObjectType.loadControl, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.loadControl, PropertyIdentifier.presentValue, ShedState.class, false, true, ShedState.shedInactive); add(ObjectType.loadControl, PropertyIdentifier.stateDescription, CharacterString.class, false, false, null); add(ObjectType.loadControl, PropertyIdentifier.statusFlags, StatusFlags.class, false, true, new StatusFlags( false, false, false, true)); add(ObjectType.loadControl, PropertyIdentifier.eventState, EventState.class, false, true, EventState.normal); add(ObjectType.loadControl, PropertyIdentifier.reliability, Reliability.class, false, true, null); add(ObjectType.loadControl, PropertyIdentifier.requestedShedLevel, ShedLevel.class, false, true, null); add(ObjectType.loadControl, PropertyIdentifier.startTime, DateTime.class, false, true, null); add(ObjectType.loadControl, PropertyIdentifier.shedDuration, UnsignedInteger.class, false, true, null); add(ObjectType.loadControl, PropertyIdentifier.dutyWindow, UnsignedInteger.class, false, true, null); add(ObjectType.loadControl, PropertyIdentifier.enable, Boolean.class, false, true, null); add(ObjectType.loadControl, PropertyIdentifier.fullDutyBaseline, Real.class, false, false, null); add(ObjectType.loadControl, PropertyIdentifier.expectedShedLevel, ShedLevel.class, false, true, null); add(ObjectType.loadControl, PropertyIdentifier.actualShedLevel, ShedLevel.class, false, true, null); add(ObjectType.loadControl, PropertyIdentifier.shedLevels, UnsignedInteger.class, true, true, null); add(ObjectType.loadControl, PropertyIdentifier.shedLevelDescriptions, CharacterString.class, true, true, null); add(ObjectType.loadControl, PropertyIdentifier.notificationClass, UnsignedInteger.class, false, false, null); add(ObjectType.loadControl, PropertyIdentifier.timeDelay, UnsignedInteger.class, false, false, null); add(ObjectType.loadControl, PropertyIdentifier.eventEnable, EventTransitionBits.class, false, false, null); add(ObjectType.loadControl, PropertyIdentifier.ackedTransitions, EventTransitionBits.class, false, false, null); add(ObjectType.loadControl, PropertyIdentifier.notifyType, NotifyType.class, false, false, null); add(ObjectType.loadControl, PropertyIdentifier.eventTimeStamps, TimeStamp.class, true, false, null); add(ObjectType.loadControl, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Loop add(ObjectType.loop, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.loop, 0x3fffff)); add(ObjectType.loop, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.loop, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.loop); add(ObjectType.loop, PropertyIdentifier.presentValue, Real.class, false, true, new Real(0)); add(ObjectType.loop, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.loop, PropertyIdentifier.statusFlags, StatusFlags.class, false, true, new StatusFlags(false, false, false, true)); add(ObjectType.loop, PropertyIdentifier.eventState, EventState.class, false, true, EventState.normal); add(ObjectType.loop, PropertyIdentifier.reliability, Reliability.class, false, false, null); add(ObjectType.loop, PropertyIdentifier.outOfService, Boolean.class, false, true, new Boolean(true)); add(ObjectType.loop, PropertyIdentifier.updateInterval, UnsignedInteger.class, false, false, null); add(ObjectType.loop, PropertyIdentifier.outputUnits, EngineeringUnits.class, false, true, null); add(ObjectType.loop, PropertyIdentifier.manipulatedVariableReference, ObjectPropertyReference.class, false, true, null); add(ObjectType.loop, PropertyIdentifier.controlledVariableReference, ObjectPropertyReference.class, false, true, null); add(ObjectType.loop, PropertyIdentifier.controlledVariableValue, Real.class, false, true, null); add(ObjectType.loop, PropertyIdentifier.controlledVariableUnits, EngineeringUnits.class, false, true, null); add(ObjectType.loop, PropertyIdentifier.setpointReference, SetpointReference.class, false, true, null); add(ObjectType.loop, PropertyIdentifier.setpoint, Real.class, false, true, null); add(ObjectType.loop, PropertyIdentifier.action, Action.class, false, true, null); add(ObjectType.loop, PropertyIdentifier.proportionalConstant, Real.class, false, false, null); add(ObjectType.loop, PropertyIdentifier.proportionalConstantUnits, EngineeringUnits.class, false, false, null); add(ObjectType.loop, PropertyIdentifier.integralConstant, Real.class, false, false, null); add(ObjectType.loop, PropertyIdentifier.integralConstantUnits, EngineeringUnits.class, false, false, null); add(ObjectType.loop, PropertyIdentifier.derivativeConstant, Real.class, false, false, null); add(ObjectType.loop, PropertyIdentifier.derivativeConstantUnits, EngineeringUnits.class, false, false, null); add(ObjectType.loop, PropertyIdentifier.bias, Real.class, false, false, null); add(ObjectType.loop, PropertyIdentifier.maximumOutput, Real.class, false, false, null); add(ObjectType.loop, PropertyIdentifier.minimumOutput, Real.class, false, false, null); add(ObjectType.loop, PropertyIdentifier.priorityForWriting, UnsignedInteger.class, false, true, null); add(ObjectType.loop, PropertyIdentifier.covIncrement, Real.class, false, false, null); add(ObjectType.loop, PropertyIdentifier.timeDelay, UnsignedInteger.class, false, false, null); add(ObjectType.loop, PropertyIdentifier.notificationClass, UnsignedInteger.class, false, false, null); add(ObjectType.loop, PropertyIdentifier.errorLimit, Real.class, false, false, null); add(ObjectType.loop, PropertyIdentifier.deadband, Real.class, false, false, null); add(ObjectType.loop, PropertyIdentifier.eventEnable, EventTransitionBits.class, false, false, null); add(ObjectType.loop, PropertyIdentifier.ackedTransitions, EventTransitionBits.class, false, false, null); add(ObjectType.loop, PropertyIdentifier.notifyType, NotifyType.class, false, false, null); add(ObjectType.loop, PropertyIdentifier.eventTimeStamps, TimeStamp.class, true, false, null); add(ObjectType.loop, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Multi state input add(ObjectType.multiStateInput, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.multiStateInput, 0x3fffff)); add(ObjectType.multiStateInput, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.multiStateInput, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.multiStateInput); add(ObjectType.multiStateInput, PropertyIdentifier.presentValue, UnsignedInteger.class, false, true, null); add(ObjectType.multiStateInput, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.multiStateInput, PropertyIdentifier.deviceType, CharacterString.class, false, false, null); add(ObjectType.multiStateInput, PropertyIdentifier.statusFlags, StatusFlags.class, false, true, new StatusFlags(false, false, false, true)); add(ObjectType.multiStateInput, PropertyIdentifier.eventState, EventState.class, false, true, EventState.normal); add(ObjectType.multiStateInput, PropertyIdentifier.reliability, Reliability.class, false, false, null); add(ObjectType.multiStateInput, PropertyIdentifier.outOfService, Boolean.class, false, true, new Boolean(true)); add(ObjectType.multiStateInput, PropertyIdentifier.numberOfStates, UnsignedInteger.class, false, true, null); add(ObjectType.multiStateInput, PropertyIdentifier.stateText, CharacterString.class, true, false, null); add(ObjectType.multiStateInput, PropertyIdentifier.timeDelay, UnsignedInteger.class, false, false, null); add(ObjectType.multiStateInput, PropertyIdentifier.notificationClass, UnsignedInteger.class, false, false, null); add(ObjectType.multiStateInput, PropertyIdentifier.alarmValues, UnsignedInteger.class, true, false, null); add(ObjectType.multiStateInput, PropertyIdentifier.faultValues, UnsignedInteger.class, true, false, null); add(ObjectType.multiStateInput, PropertyIdentifier.eventEnable, EventTransitionBits.class, false, false, null); add(ObjectType.multiStateInput, PropertyIdentifier.ackedTransitions, EventTransitionBits.class, false, false, null); add(ObjectType.multiStateInput, PropertyIdentifier.notifyType, NotifyType.class, false, false, null); add(ObjectType.multiStateInput, PropertyIdentifier.eventTimeStamps, TimeStamp.class, true, false, null); add(ObjectType.multiStateInput, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Multi state output add(ObjectType.multiStateOutput, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.multiStateOutput, 0x3fffff)); add(ObjectType.multiStateOutput, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.multiStateOutput, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.multiStateOutput); add(ObjectType.multiStateOutput, PropertyIdentifier.presentValue, UnsignedInteger.class, false, true, new UnsignedInteger(0)); add(ObjectType.multiStateOutput, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.multiStateOutput, PropertyIdentifier.deviceType, CharacterString.class, false, false, null); add(ObjectType.multiStateOutput, PropertyIdentifier.statusFlags, StatusFlags.class, false, true, new StatusFlags(false, false, false, true)); add(ObjectType.multiStateOutput, PropertyIdentifier.eventState, EventState.class, false, true, EventState.normal); add(ObjectType.multiStateOutput, PropertyIdentifier.reliability, Reliability.class, false, false, null); add(ObjectType.multiStateOutput, PropertyIdentifier.outOfService, Boolean.class, false, true, new Boolean(true)); add(ObjectType.multiStateOutput, PropertyIdentifier.numberOfStates, UnsignedInteger.class, false, true, null); add(ObjectType.multiStateOutput, PropertyIdentifier.stateText, CharacterString.class, true, false, null); add(ObjectType.multiStateOutput, PropertyIdentifier.priorityArray, PriorityArray.class, false, true, new PriorityArray()); add(ObjectType.multiStateOutput, PropertyIdentifier.relinquishDefault, UnsignedInteger.class, false, true, new UnsignedInteger(0)); add(ObjectType.multiStateOutput, PropertyIdentifier.timeDelay, UnsignedInteger.class, false, false, null); add(ObjectType.multiStateOutput, PropertyIdentifier.notificationClass, UnsignedInteger.class, false, false, null); add(ObjectType.multiStateOutput, PropertyIdentifier.feedbackValue, UnsignedInteger.class, false, false, null); add(ObjectType.multiStateOutput, PropertyIdentifier.eventEnable, EventTransitionBits.class, false, false, null); add(ObjectType.multiStateOutput, PropertyIdentifier.ackedTransitions, EventTransitionBits.class, false, false, null); add(ObjectType.multiStateOutput, PropertyIdentifier.notifyType, NotifyType.class, false, false, null); add(ObjectType.multiStateOutput, PropertyIdentifier.eventTimeStamps, TimeStamp.class, true, false, null); add(ObjectType.multiStateOutput, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Multi state value add(ObjectType.multiStateValue, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.multiStateValue, 0x3fffff)); add(ObjectType.multiStateValue, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.multiStateValue, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.multiStateValue); add(ObjectType.multiStateValue, PropertyIdentifier.presentValue, UnsignedInteger.class, false, true, new UnsignedInteger(0)); add(ObjectType.multiStateValue, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.multiStateValue, PropertyIdentifier.statusFlags, StatusFlags.class, false, true, new StatusFlags(false, false, false, true)); add(ObjectType.multiStateValue, PropertyIdentifier.eventState, EventState.class, false, true, EventState.normal); add(ObjectType.multiStateValue, PropertyIdentifier.reliability, Reliability.class, false, false, null); add(ObjectType.multiStateValue, PropertyIdentifier.outOfService, Boolean.class, false, true, new Boolean(true)); add(ObjectType.multiStateValue, PropertyIdentifier.numberOfStates, UnsignedInteger.class, false, true, null); add(ObjectType.multiStateValue, PropertyIdentifier.stateText, CharacterString.class, true, false, null); add(ObjectType.multiStateValue, PropertyIdentifier.priorityArray, PriorityArray.class, false, false, new PriorityArray()); add(ObjectType.multiStateValue, PropertyIdentifier.relinquishDefault, UnsignedInteger.class, false, false, new UnsignedInteger(0)); add(ObjectType.multiStateValue, PropertyIdentifier.timeDelay, UnsignedInteger.class, false, false, null); add(ObjectType.multiStateValue, PropertyIdentifier.notificationClass, UnsignedInteger.class, false, false, null); add(ObjectType.multiStateValue, PropertyIdentifier.alarmValues, UnsignedInteger.class, true, false, null); add(ObjectType.multiStateValue, PropertyIdentifier.faultValues, UnsignedInteger.class, true, false, null); add(ObjectType.multiStateValue, PropertyIdentifier.eventEnable, EventTransitionBits.class, false, false, null); add(ObjectType.multiStateValue, PropertyIdentifier.ackedTransitions, EventTransitionBits.class, false, false, null); add(ObjectType.multiStateValue, PropertyIdentifier.notifyType, NotifyType.class, false, false, null); add(ObjectType.multiStateValue, PropertyIdentifier.eventTimeStamps, TimeStamp.class, true, false, null); add(ObjectType.multiStateValue, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Notification class add(ObjectType.notificationClass, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.notificationClass, 0x3fffff)); add(ObjectType.notificationClass, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.notificationClass, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.notificationClass); add(ObjectType.notificationClass, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.notificationClass, PropertyIdentifier.notificationClass, UnsignedInteger.class, false, true, null); add(ObjectType.notificationClass, PropertyIdentifier.priority, UnsignedInteger.class, true, true, null); add(ObjectType.notificationClass, PropertyIdentifier.ackRequired, EventTransitionBits.class, false, true, null); add(ObjectType.notificationClass, PropertyIdentifier.recipientList, Destination.class, true, true, null); add(ObjectType.notificationClass, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Program add(ObjectType.program, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.program, 0x3fffff)); add(ObjectType.program, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.program, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.program); add(ObjectType.program, PropertyIdentifier.programState, ProgramState.class, false, true, null); add(ObjectType.program, PropertyIdentifier.programChange, ProgramRequest.class, false, true, null); add(ObjectType.program, PropertyIdentifier.reasonForHalt, ProgramError.class, false, false, null); add(ObjectType.program, PropertyIdentifier.descriptionOfHalt, CharacterString.class, false, true, null); add(ObjectType.program, PropertyIdentifier.programLocation, CharacterString.class, false, false, null); add(ObjectType.program, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.program, PropertyIdentifier.instanceOf, CharacterString.class, false, false, null); add(ObjectType.program, PropertyIdentifier.statusFlags, StatusFlags.class, false, true, new StatusFlags(false, false, false, true)); add(ObjectType.program, PropertyIdentifier.reliability, Reliability.class, false, false, null); add(ObjectType.program, PropertyIdentifier.outOfService, Boolean.class, false, true, new Boolean(true)); add(ObjectType.program, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Pulse converter add(ObjectType.pulseConverter, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.pulseConverter, 0x3fffff)); add(ObjectType.pulseConverter, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.pulseConverter, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.pulseConverter); add(ObjectType.pulseConverter, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.pulseConverter, PropertyIdentifier.presentValue, Real.class, false, true, null); add(ObjectType.pulseConverter, PropertyIdentifier.inputReference, ObjectPropertyReference.class, false, false, null); add(ObjectType.pulseConverter, PropertyIdentifier.statusFlags, StatusFlags.class, false, true, new StatusFlags( false, false, false, true)); add(ObjectType.pulseConverter, PropertyIdentifier.eventState, EventState.class, false, true, EventState.normal); add(ObjectType.pulseConverter, PropertyIdentifier.reliability, Reliability.class, false, false, null); add(ObjectType.pulseConverter, PropertyIdentifier.outOfService, Boolean.class, false, true, new Boolean(true)); add(ObjectType.pulseConverter, PropertyIdentifier.units, EngineeringUnits.class, false, true, EngineeringUnits.noUnits); add(ObjectType.pulseConverter, PropertyIdentifier.scaleFactor, Real.class, false, true, null); add(ObjectType.pulseConverter, PropertyIdentifier.adjustValue, Real.class, false, true, null); add(ObjectType.pulseConverter, PropertyIdentifier.count, UnsignedInteger.class, false, true, null); add(ObjectType.pulseConverter, PropertyIdentifier.updateTime, DateTime.class, false, true, null); add(ObjectType.pulseConverter, PropertyIdentifier.countChangeTime, DateTime.class, false, true, null); add(ObjectType.pulseConverter, PropertyIdentifier.countBeforeChange, UnsignedInteger.class, false, true, null); add(ObjectType.pulseConverter, PropertyIdentifier.covIncrement, Real.class, false, false, null); add(ObjectType.pulseConverter, PropertyIdentifier.covPeriod, UnsignedInteger.class, false, false, null); add(ObjectType.pulseConverter, PropertyIdentifier.notificationClass, UnsignedInteger.class, false, false, null); add(ObjectType.pulseConverter, PropertyIdentifier.timeDelay, UnsignedInteger.class, false, false, null); add(ObjectType.pulseConverter, PropertyIdentifier.highLimit, Real.class, false, false, null); add(ObjectType.pulseConverter, PropertyIdentifier.lowLimit, Real.class, false, false, null); add(ObjectType.pulseConverter, PropertyIdentifier.deadband, Real.class, false, false, null); add(ObjectType.pulseConverter, PropertyIdentifier.limitEnable, LimitEnable.class, false, false, null); add(ObjectType.pulseConverter, PropertyIdentifier.eventEnable, EventTransitionBits.class, false, false, null); add(ObjectType.pulseConverter, PropertyIdentifier.ackedTransitions, EventTransitionBits.class, false, false, null); add(ObjectType.pulseConverter, PropertyIdentifier.notifyType, NotifyType.class, false, false, null); add(ObjectType.pulseConverter, PropertyIdentifier.eventTimeStamps, TimeStamp.class, true, false, null); add(ObjectType.pulseConverter, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Schedule add(ObjectType.schedule, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.schedule, 0x3fffff)); add(ObjectType.schedule, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.schedule, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.schedule); add(ObjectType.schedule, PropertyIdentifier.presentValue, AmbiguousValue.class, false, true, null); add(ObjectType.schedule, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.schedule, PropertyIdentifier.effectivePeriod, DateRange.class, false, true, null); add(ObjectType.schedule, PropertyIdentifier.weeklySchedule, DailySchedule.class, true, false, null); add(ObjectType.schedule, PropertyIdentifier.scheduleDefault, AmbiguousValue.class, false, true, null); add(ObjectType.schedule, PropertyIdentifier.exceptionSchedule, SpecialEvent.class, true, false, null); add(ObjectType.schedule, PropertyIdentifier.listOfObjectPropertyReferences, DeviceObjectPropertyReference.class, true, true, null); add(ObjectType.schedule, PropertyIdentifier.priorityForWriting, UnsignedInteger.class, false, true, null); add(ObjectType.schedule, PropertyIdentifier.statusFlags, StatusFlags.class, false, true, new StatusFlags(false, false, false, true)); add(ObjectType.schedule, PropertyIdentifier.reliability, Reliability.class, false, true, null); add(ObjectType.schedule, PropertyIdentifier.outOfService, Boolean.class, false, true, new Boolean(true)); add(ObjectType.schedule, PropertyIdentifier.profileName, CharacterString.class, false, true, null); // Structured View add(ObjectType.structuredView, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.structuredView, 0x3fffff)); add(ObjectType.structuredView, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.structuredView, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.structuredView); add(ObjectType.structuredView, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.structuredView, PropertyIdentifier.nodeType, NodeType.class, false, false, null); add(ObjectType.structuredView, PropertyIdentifier.nodeSubtype, CharacterString.class, false, false, null); add(ObjectType.structuredView, PropertyIdentifier.subordinateList, DeviceObjectReference.class, true, true, null); add(ObjectType.structuredView, PropertyIdentifier.subordinateAnnotations, CharacterString.class, true, false, null); add(ObjectType.structuredView, PropertyIdentifier.profileName, CharacterString.class, false, false, null); // Trend log add(ObjectType.trendLog, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.trendLog, 0x3fffff)); add(ObjectType.trendLog, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.trendLog, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.trendLog); add(ObjectType.trendLog, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.trendLog, PropertyIdentifier.enable, Boolean.class, false, true, null); add(ObjectType.trendLog, PropertyIdentifier.startTime, DateTime.class, false, false, null); add(ObjectType.trendLog, PropertyIdentifier.stopTime, DateTime.class, false, false, null); add(ObjectType.trendLog, PropertyIdentifier.logDeviceObjectProperty, DeviceObjectPropertyReference.class, false, false, null); add(ObjectType.trendLog, PropertyIdentifier.logInterval, UnsignedInteger.class, false, false, null); add(ObjectType.trendLog, PropertyIdentifier.covResubscriptionInterval, UnsignedInteger.class, false, false, null); add(ObjectType.trendLog, PropertyIdentifier.clientCovIncrement, ClientCov.class, false, false, null); add(ObjectType.trendLog, PropertyIdentifier.stopWhenFull, Boolean.class, false, true, null); add(ObjectType.trendLog, PropertyIdentifier.bufferSize, UnsignedInteger.class, false, true, null); add(ObjectType.trendLog, PropertyIdentifier.logBuffer, LogRecord.class, true, true, new SequenceOf<LogRecord>()); add(ObjectType.trendLog, PropertyIdentifier.recordCount, UnsignedInteger.class, false, true, null); add(ObjectType.trendLog, PropertyIdentifier.totalRecordCount, UnsignedInteger.class, false, true, null); add(ObjectType.trendLog, PropertyIdentifier.notificationThreshold, UnsignedInteger.class, false, false, null); add(ObjectType.trendLog, PropertyIdentifier.recordsSinceNotification, UnsignedInteger.class, false, false, null); add(ObjectType.trendLog, PropertyIdentifier.lastNotifyRecord, UnsignedInteger.class, false, false, null); add(ObjectType.trendLog, PropertyIdentifier.eventState, EventState.class, false, true, EventState.normal); add(ObjectType.trendLog, PropertyIdentifier.notificationClass, UnsignedInteger.class, false, false, null); add(ObjectType.trendLog, PropertyIdentifier.eventEnable, EventTransitionBits.class, false, false, null); add(ObjectType.trendLog, PropertyIdentifier.ackedTransitions, EventTransitionBits.class, false, false, null); add(ObjectType.trendLog, PropertyIdentifier.notifyType, NotifyType.class, false, false, null); add(ObjectType.trendLog, PropertyIdentifier.eventTimeStamps, TimeStamp.class, true, false, null); add(ObjectType.trendLog, PropertyIdentifier.profileName, CharacterString.class, false, false, null); add(ObjectType.trendLog, PropertyIdentifier.loggingType, LoggingType.class, false, true, null); add(ObjectType.trendLog, PropertyIdentifier.alignIntervals, Boolean.class, false, false, null); add(ObjectType.trendLog, PropertyIdentifier.intervalOffset, UnsignedInteger.class, false, false, null); add(ObjectType.trendLog, PropertyIdentifier.trigger, Boolean.class, false, false, null); add(ObjectType.trendLog, PropertyIdentifier.statusFlags, StatusFlags.class, false, true, new StatusFlags(false, false, false, true)); add(ObjectType.trendLog, PropertyIdentifier.reliability, Reliability.class, false, false, null); // Trend log multiple add(ObjectType.trendLogMultiple, PropertyIdentifier.objectIdentifier, ObjectIdentifier.class, false, true, new ObjectIdentifier(ObjectType.trendLogMultiple, 0x3fffff)); add(ObjectType.trendLogMultiple, PropertyIdentifier.objectName, CharacterString.class, false, true, null); add(ObjectType.trendLogMultiple, PropertyIdentifier.objectType, ObjectType.class, false, true, ObjectType.trendLogMultiple); add(ObjectType.trendLogMultiple, PropertyIdentifier.description, CharacterString.class, false, false, null); add(ObjectType.trendLogMultiple, PropertyIdentifier.statusFlags, StatusFlags.class, false, true, new StatusFlags(false, false, false, true)); add(ObjectType.trendLogMultiple, PropertyIdentifier.eventState, EventState.class, false, true, EventState.normal); add(ObjectType.trendLogMultiple, PropertyIdentifier.reliability, Reliability.class, false, false, null); add(ObjectType.trendLogMultiple, PropertyIdentifier.enable, Boolean.class, false, true, null); add(ObjectType.trendLogMultiple, PropertyIdentifier.startTime, DateTime.class, false, false, null); add(ObjectType.trendLogMultiple, PropertyIdentifier.stopTime, DateTime.class, false, false, null); add(ObjectType.trendLogMultiple, PropertyIdentifier.logDeviceObjectProperty, DeviceObjectPropertyReference.class, true, true, new SequenceOf<DeviceObjectPropertyReference>()); add(ObjectType.trendLogMultiple, PropertyIdentifier.loggingType, LoggingType.class, false, true, null); add(ObjectType.trendLogMultiple, PropertyIdentifier.logInterval, UnsignedInteger.class, false, true, null); add(ObjectType.trendLogMultiple, PropertyIdentifier.alignIntervals, Boolean.class, false, false, null); add(ObjectType.trendLogMultiple, PropertyIdentifier.intervalOffset, UnsignedInteger.class, false, false, null); add(ObjectType.trendLogMultiple, PropertyIdentifier.trigger, Boolean.class, false, false, null); add(ObjectType.trendLogMultiple, PropertyIdentifier.stopWhenFull, Boolean.class, false, true, null); add(ObjectType.trendLogMultiple, PropertyIdentifier.bufferSize, UnsignedInteger.class, false, true, null); add(ObjectType.trendLogMultiple, PropertyIdentifier.logBuffer, LogMultipleRecord.class, true, true, new SequenceOf<LogMultipleRecord>()); add(ObjectType.trendLogMultiple, PropertyIdentifier.recordCount, UnsignedInteger.class, false, true, null); add(ObjectType.trendLogMultiple, PropertyIdentifier.totalRecordCount, UnsignedInteger.class, false, true, null); add(ObjectType.trendLogMultiple, PropertyIdentifier.notificationThreshold, UnsignedInteger.class, false, false, null); add(ObjectType.trendLogMultiple, PropertyIdentifier.recordsSinceNotification, UnsignedInteger.class, false, false, null); add(ObjectType.trendLogMultiple, PropertyIdentifier.lastNotifyRecord, UnsignedInteger.class, false, false, null); add(ObjectType.trendLogMultiple, PropertyIdentifier.notificationClass, UnsignedInteger.class, false, false, null); add(ObjectType.trendLogMultiple, PropertyIdentifier.eventEnable, EventTransitionBits.class, false, false, null); add(ObjectType.trendLogMultiple, PropertyIdentifier.ackedTransitions, EventTransitionBits.class, false, false, null); add(ObjectType.trendLogMultiple, PropertyIdentifier.notifyType, NotifyType.class, false, false, null); add(ObjectType.trendLogMultiple, PropertyIdentifier.eventTimeStamps, TimeStamp.class, true, false, null); add(ObjectType.trendLogMultiple, PropertyIdentifier.profileName, CharacterString.class, false, false, null); } }