or
With the Project Check function, several project checks can be performed with the help of a wizard. The Project Check wizard will guide you through the process of checking your project against common KNX planning and design rules.
This is an offline test. ETS will not connect to the bus.
The Project Check can be invoked via the 3 dots in the toolbar.
There are 5 different levels which are checked in a project.
- Device check
- Group address check
- Topology check
- Product Information check
- Checks for projects imported from earlier versions of ETS
Device Check
What does the Device Check verify?
- If at least one group object of the devices is associated with a group address
| Prerequisite | Check | Report entry if check fails |
|---|---|---|
| device.ActiveComObjectInstances.Count > 0 | Is any active group object associated with a group address? | Warning: The device "{device.DisplayName}" has no group object associated with a group address. |
- If all device identifiers are compatible with ETS3 plug-ins
| Prerequisite | Check | Report entry if check fails |
|---|---|---|
| device.Description.length > 80? | Error: The length of the description is greater than 80 characters. This could cause problems with ETS3 plug-ins | |
| device.Name.length > 50? | Error: The length of the name is greater than 50 characters. This could cause problems with ETS3 plug-ins. | |
| foreach comObject.Description.length > 80? | Error: The length of the description is greater than 80 characters. This could cause problems with ETS3 plug-ins. |
Group address check
What does the Group Address Check verify?
- If all group addresses are used (linked with at least one group object)
| Prerequisite | Check | Report entry if check fails |
|---|---|---|
| Group address is associated to a PL segment | for each connector of the group address with the connector.Acknowledge flag set, the group caller count is calculated. For this purpose the domain address of the parent segment (connector.ParentDevice.Segment) is saved and the value is incremented if there is another connector with the acknowledge flag set. If the value is larger than 1, a report entry is created. | For groupaddress "{groupAddress.DisplayName}" there are too many devices associated which send the LL-Ack telegram. |
| groupAddress.ObjectSize != null | groupAddress.Connectors.Count < 2 | Only one group object is linked to group address "{groupAddress.DisplayName}" |
| groupAddress.ObjectSize != null | groupAddress.Connectors.Count < 1 | No group objects are linked to group address "{groupAddress.DisplayName}" |
| groupAddress.ObjectSize == null | No group objects are linked to group address "{groupAddress.DisplayName}" |
- Whether extended group addresses are linked to plug-in devices
| Prerequisite | Check | Report entry if check fails |
|---|---|---|
| GroupAddress.Address > 0x7FFF and groupAddress.Connectors.Count > 0 and groupAddress.Connector.ParentDevice.HasDownloadPlugin |
Warning: The device object {connector.ParentComObjectInstance.Number} is associated with the 16 bit group address {groupAddress.AddressString} {groupAddress.Name}. |
- Whether all group address identifiers are compatible with ETS3 plug-ins
| Prerequisite | Check | Report entry if check fails |
|---|---|---|
|
groupAddress.Description.length > 80? groupRange.Description.length > 80? |
Error: The length of the description is greater than 80 characters. This could cause problems with ETS3 plug-ins | |
|
groupAddress.Name.length > 50? groupRange.Name.length > 50? |
Error: The length of the name is greater than 50 characters. This could cause problems with ETS3 plug-ins. |
Topology Check
What does the Topology Check verify?
- Compares the device current requirements and current provided by the TP power supplies
- If the power consumption device property is available on the devices, it is used; otherwise, an average of 10mA is used
- If the current device property is available on the power supplies, it is used; otherwise, an average of 320mA is used
- Power supply and choke counts in TP segments
| Prerequisite | Check | Report entry if check fails |
|---|---|---|
| line.MainSegment.IsTpSegment and line.Devices.Any() |
for each line, the number of power supplies is calculated. If the powerSupplyCount == 0, an info message is created. |
Info: No power supply projected for line "{line.DisplayName}" |
| line.MainSegment.IsTpSegment and line.Devices.Any() | for each line, the number of power supplies is calculated. If the powerSupplyCount > 2, an error message is created. | Error: More than 2 power supplies projected for line "{line.DisplayName}" |
| line.MainSegment.IsTpSegment and line.Devices.Any() | or each line, the number of power supplies and Chokes are calculated. If the powerSupplyCount != chokeCount, a warning message is created. | Warning: The number of chokes on line "{line.DisplayName}" does not match the number of power supplies. |
- Whether there are missing couplers in main segments
| Prerequisite | Check | Report entry if check fails |
|---|---|---|
| More than one line with TP main segment and devices |
if no coupler is present in line.MainSegment, an error message is displayed |
Error: Line "{line.DisplayName}" has no line coupler |
| More than one !area.MainLine.MainSegment.IsIpSegment and area.MainLine.Devices.Any() | if no coupler is present area.MainLine.MainSegment, an error message is displayed | Error: Area "{area.DisplayName}" has no area coupler. |
| line.MainSegment.IsPlSegment || line.MainSegment.IsRfSegment |
line.MainSegment.IsPlSegment: Check if device exist with mask version 0x1900, If not an error message is displayed. line.MainSegment.IsRfSegment: Check if device exist with mask version 0x2920. If not an error message is displayed. |
Error: If line.IsMainLine Area "{area.DisplayName}" has no media coupler in the main line {line.DisplayName}. otherwise: Line "{line.DisplayName}" has no media coupler. |
- Whether there are missing segment couplers in sub-segments
| Prerequisite | Check | Report entry if check fails |
|---|---|---|
| if TP repeater (without segment coupler feature) exists | Warning: Line "{segment.DisplayName}" is coupled via a repeater without filtering capabilities. Consider replacing it by a segment coupler to reduce bus traffic. | |
| if legacy media coupler (without segment coupler feature) exists | Warning: Line "{segment.DisplayName}" is coupled via a media coupler that could expect to be implemented as coupler on main line or backbone and could not be prepared to segment coupling. Check device documentation. |
|
| no coupler detected | Error: Line "{segment.DisplayName}" has no segment coupler. |
- If the backbone line should be IP
| Prerequisite | Check | Report entry if check fails |
|---|---|---|
|
It is checked, if a line with line.Address == 0 && Line.ParentArea.Address == 0 exist, otherwise an error message is created |
Warning: No backbone line is present. It is recommended to create a backbone line and set it to 'IP' |
|
|
If a backbone line exist, it also checked if a device with address == 0 and maskVersion == 0x091a exist. one such coupler with ApplicationProgramIpConfig == ApplicationProgramIpConfig.Custom and another coupler with ApplicationProgramIpConfig != ApplicationProgramIpConfig.Custom exist. If yes, an error message is created. |
Warning: The backbone line is not of type 'IP', though only IP routers with custom management exist in the project. It is recommended to set the backbone line to 'IP' |
- If the requirements for topologies with KNX/IP routers are met : This check is only for existing KNX/IP routers.
| Prerequisite | Check | Report entry if check fails |
|---|---|---|
| There is a device with address == 0 and device.IsCoupler and device.MaskVersion == 0x091a in line.Devices. |
line is not a mainline: for x.y.0 IP router, no x.0.0 router must exist |
Error: An area coupler exists while also a line coupler of type 'IP' (KNX/IP router) exists below that area coupler. This is not allowed |
| There is a device with address == 0 and device.IsCoupler and device.MaskVersion == 0x091a in line.Devices. | line is not a mainline: for x.y.0 IP router, the main line's medium type shall be IP if it exists | Error: An line coupler of type 'IP' (KNX/IP router) exists below a main line which has not the medium type 'IP'. The medium type of the main line must be set to 'IP' if a KNX/IP router is configured below |
| There is a device with address == 0 and device.IsCoupler and device.MaskVersion == 0x091a in line.Devices. | line.Address != 0: for x.y.0 IP router with y != 0, no other non-IP router x.y.0 must exist | Error: Within the same area, line couplers of type 'IP' (KNX/IP routers) and non-IP couplers are mixed. This is not allowed |
| There is a device with address == 0 and device.IsCoupler and device.MaskVersion == 0x091a in line.Devices. | For x.y.0 IP router or x.0.0 IP router, the backbone line's medium type shall be IP if it exists | Error: An coupler of type 'IP' (KNX/IP router) exists and the backbone line (0.0) has not the medium type 'IP'. The medium type of the backbone line must be set to 'IP' if a KNX/IP router is configured |
| There is a device with address == 0 and device.IsCoupler and device.MaskVersion == 0x091a in line.Devices. | if installation.BackboneLine.MainSegment.IsTpSegment and there is line.MainSegment.IsIpSegment, an error message is created | Error: The medium type of line {line.DisplayName} must not be IP, because the backbone line is of medium type TP |
| There is a device with address == 0 and device.IsCoupler and device.MaskVersion == 0x091a in line.Devices. | Check, if there are IP lines under TP main line | Error: The medium type of line {0} must not be IP, because the main line is of medium type TP. |
- If all topology identifiers are compatible with ETS3 plug-ins
| Prerequisite | Check | Report entry if check fails |
|---|---|---|
| line.Name.length > 50? | Error: The length of the name is greater than 50 characters. This could cause problems with ETS3 plug-ins. | |
| area.Name.length > 50? | Error: The length of the name is greater than 50 characters. This could cause problems with ETS3 plug-ins. | |
| buildingPart.Name.length > 50? | Error: The length of the name is greater than 50 characters. This could cause problems with ETS3 plug-ins. | |
| trade.Name.length > 50? | Error: The length of the name is greater than 50 characters. This could cause problems with ETS3 plug-ins. | |
| line.Description.length > 80? | Error: The length of the description is greater than 80 characters. This could cause problems with ETS3 plug-ins. | |
| area.Description.length > 80? | Error: The length of the description is greater than 80 characters. This could cause problems with ETS3 plug-ins. | |
| buildingPart.Description.length > 80? | Error: The length of the description is greater than 80 characters. This could cause problems with ETS3 plug-ins. | |
| trade.Description.length > 80? | Error: The length of the description is greater than 80 characters. This could cause problems with ETS3 plug-ins. | |
| buildingPart.Number.Length > 20? | Error: The length of the number is greater than 20 characters. This could cause problems with ETS3 plug-ins | |
| trade.Number.Length > 20? | Error: The length of the number is greater than 20 characters. This could cause problems with ETS3 plug-ins |
Product Information Check
In some cases, an update of a KNX product entry is available, containing improvements or bug corrections for the same product version. With the help of this check, a list which shows all such devices can be printed out. The list also contains the 'fingerprints' of the devices (these can be used by the manufacturers to distinguish between several variations of a device, even when the version is the same).
Checks for projects imported from earlier versions of ETS
What does the Checks for projects imported from earlier versions of ETS verify?
- If all device addresses are valid
| Prerequisite | Check | Report entry if check fails |
|---|---|---|
| device.Address != null and device.line != null | device.Address < 0 || device.Address > 255 | Error: The address "{device.Address}" of "{device.DisplayName}" is out of range. |
| device.Address != null and device.line != null | device.Address is unique in the line | Error: The address "{device.Address}" is not unique. |
| device.Address != null and device.line != null | !device.Hardware.HasIndividualAddress | Error: The device "{device.DisplayName}" must not have an address, but has address "{device.Address}" |
| device.Address != null and device.line != null | device.Address == 0 && !device.IsCoupler | Error: The device address 0 is reserved for couplers |
| device.Address == null || device.Line == null | device.Hardware.HasIndividualAddress | Error: "{device.DisplayName}" has no address |
- If the addresses of areas and lines are valid
| Prerequisite | Check | Report entry if check fails |
|---|---|---|
| area.Address > 15 | Error: The address "{area.Address}" of "{area.Name}" is out of range. | |
| Has the project an area with the same address? | Error: The address "{area.Address}" is not unique |
- If the group ranges are valid
| Prerequisite | Check | Report entry if check fails |
|---|---|---|
|
Group address (group range address) is valid?
|
Error: The address "{groupAddress.Address}" of "{groupAddress.DisplayName}" is out of range. or The address "{groupRange.Address}" of "{groupRange.DisplayName}" is out of range. |
|
| Has the project a groupAddress / group Range with the same address? |
Error: The address "{groupAddress.Address}" is not unique. or The address "{groupRange.Address}" is not unique. |
|
| Three-level group style: Has the group Address the adress 0/0/0? | Error: The group address 0/0/0 is not valid. |
- Legacy repeater count
The result is shown in the same window and can be saved, copied to the clipboard and printed out.
All checks can be disabled globally, and the individual steps of the checks can be disabled in the respective tab.