private static BacNetObject createLoop() {
        return b("Loop",
            p("Object_Identifier", "BACnetObjectIdentifier", c(R)),
            p("Object_Name", "CharacterString", c(R)),
            p("Object_Type", "BACnetObjectType", c(R)),
            p("Present_Value", "REAL", c(R, 7)),
            p("Description", "CharacterString", c(O)),
            p("Status_Flags", "BACnetStatusFlags", c(R)),
            p("Event_State", "BACnetEventState", c(R)),
            p("Reliability", "BACnetReliability", c(O, 7)),
            p("Out_Of_Service", "BOOLEAN", c(R)),
            p("Update_Interval", "Unsigned", c(O)),
            p("Output_Units", "BACnetEngineeringUnits", c(R)),
            p("Manipulated_Variable_Reference", "BACnetObjectPropertyReference", c(R)),
            p("Controlled_Variable_Reference", "BACnetObjectPropertyReference", c(R)),
            p("Controlled_Variable_Value", "REAL", c(R)),
            p("Controlled_Variable_Units", "BACnetEngineeringUnits", c(R)),
            p("Setpoint_Reference", "BACnetSetpointReference", c(R)),
            p("Setpoint", "REAL", c(R)),
            p("Action", "BACnetAction", c(R)),
            p("Proportional_Constant", "REAL", c(O, 1)),
            p("Proportional_Constant_Units", "BACnetEngineeringUnits", c(O, 1)),
            p("Integral_Constant", "REAL", c(O, 2)),
            p("Integral_Constant_Units", "BACnetEngineeringUnits", c(O, 2)),
            p("Derivative_Constant", "REAL", c(O, 3)),
            p("Derivative_Constant_Units", "BACnetEngineeringUnits", c(O, 3)),
            p("Bias", "REAL", c(O)),
            p("Maximum_Output", "REAL", c(O)),
            p("Minimum_Output", "REAL", c(O)),
            p("Priority_For_Writing", "Unsigned(1..16)", c(R)),
            p("COV_Increment", "REAL", c(O, 4)),
            p("Time_Delay", "Unsigned", c(O, 5, 8)),
            p("Notification_Class", "Unsigned", c(O, 5, 8)),
            p("Error_Limit", "REAL", c(O, 5, 8)),
            p("Deadband", "REAL", c(O, 5, 8)),
            p("Event_Enable", "BACnetEventTransitionBits", c(O, 5, 8)),
            p("Acked_Transitions", "BACnetEventTransitionBits", c(O, 5, 8)),
            p("Notify_Type", "BACnetNotifyType", c(O, 5, 8)),
            p("Event_Time_Stamps", "BACnetARRAY[3] of BACnetTimeStamp", c(O, 5, 8)),
            p("Event_Message_Texts", "BACnetARRAY[3] of CharacterString", c(O, 8)),
            p("Event_Message_Texts_Config", "BACnetARRAY[3] of CharacterString", c(O, 8)),
            p("Event_Detection_Enable", "BOOLEAN", c(O, 5, 8)),
            p("Event_Algorithm_Inhibit_Ref", "BACnetObjectPropertyReference", c(O, 8)),
            p("Event_Algorithm_Inhibit", "BOOLEAN", c(O, 8, 9)),
            p("Time_Delay_Normal", "Unsigned", c(O, 8)),
            p("Reliability_Evaluation_Inhibit", "BOOLEAN", c(O, 10)),
            p("Property_List", "BACnetARRAY[N] of BACnetPropertyIdentifier", c(R)),
            p("Low_Diff_Limit", "BACnetOptionalREAL", c(O)),
            p("Tags", "BACnetARRAY[N] of BACnetNameValue", c(O)),
            p("Profile_Location", "CharacterString", c(O)),
            p("Profile_Name", "CharacterString", c(O))
        );
    }
a map which maps property to type variants
protocols/bacnetip/src/test/java/org/apache/plc4x/protocol/bacnetip/BACnetObjectsDefinitions.java