具有默认操作实现的服务指示挂钩
以下是已经实现了一些默认操作并且通常不需要在用户应用程序中实现任何钩子的列表:
服务挂钩:AcknowledgeAlarm
验证请求的有效性后,API 尝试定位指定的对象。如果该对象存在并且如果 Time Stamp 参数与被确认事件的最近时间相匹配,则将发生以下情况: Acked_Transitions 对象的属性对应于值 Event State Acknowledged 参数设置为 1, A result(+) 发出原语,并带有一个事件通知 Notify Type 参数等于 ACK_NOTIFICATION 已发出。如果没有找到对象,则 result(-) 原语已发出。确认通知使用相同的服务类型(已确认或未确认),定向到发送原始已确认或未确认事件通知的相同收件人。这 Time Stamp 确认通知中传达的时间是从确认通知生成的时间得出的,而不是从 Time Stamp 原始事件通知。
服务挂钩:GetAlarmSummary
验证请求的有效性后,API 会搜索所有具有以下属性的事件触发对象: 事件状态 财产不等于 NORMAL 和一个 Notify_Type 财产价值为 ALARM。构建一个积极响应,其中包含 Alarm Summaries 对于在此搜索中找到的对象。如果没有找到满足这些条件的对象,则返回长度为 0 的列表。
服务挂钩:GetEnrollmentSummary
验证请求的有效性后,API 会搜索满足请求原语中指定的搜索条件的所有事件触发对象。搜索条件是请求原语中省略的所有显式设置的过滤器的逻辑链接。积极回应包含 Enrollment Summaries 为在此搜索中找到的对象构建。如果没有找到满足这些条件的对象,则返回长度为 0 的列表。
服务挂钩:SubscribeCOV
如果两者都不是 Lifetime 也不 Issue Confirmed Notifications 存在,则该请求被视为取消。任何 COV 上下文,对于相同的 BACnet 地址已经存在并且包含在具有 SubscribeCOV 请求并具有相同的 Subscriber Process Identifier 和 Monitored Object Identifier,被禁用并且 SimpleAck 被返回。创建的取消(无法找到匹配的 COV 上下文)会成功执行,就像上下文已存在一样,并返回 SimpleAck。如果 Lifetime 参数不存在,但 Issue Confirmed Notifications 确实存在参数,则应用零值(无限期寿命) lifetime。如果 Issue Confirmed Notifications 参数存在,但要监控的对象不支持COV报告,则发出错误。如果要监视的对象支持 COV 报告,则执行检查以定位包含在 PDU 中的相同 BACnet 地址的现有 COV 上下文,该 PDU 包含 SubscribeCOV 请求并具有相同的 Subscriber Process Identifier 和 Monitored Object Identifier。如果找到现有的 COV 上下文,则处理该请求,就像再次创建订阅一样。如果一个 COV 找不到与该请求相对应的上下文,然后创建一个新的 COV 上下文,其中包含来自携带该请求的 PDU 的 BACnet 地址 SubscribeCOV 请求和相同 Subscriber Process Identifier 和 Monitored Object Identifier。如果无法创建上下文,则会返回错误。如果创建了新的上下文,或者收到了新的订阅,则 COV 上下文将被初始化并根据以下内容指定生命周期: Lifetime 如果 Lifetime 参数存在,则为 0;如果 Lifetime 参数不存在,则为 0。数秒后仍未收到重新订阅的情况下,订阅将自动取消。生存期为 0 表示订阅是无限期的,并且不会发生自动取消。在任何一种情况下, SimpleAck 被返回。 A ConfirmedCOVNotification 或者 UnconfirmedCOVNotification 在成功完成订阅或重新订阅请求后尽快创建,如 Issue Confirmed Notifications 范围。
服务挂钩:AddListElement
验证请求的有效性后,API 尝试修改请求中标识的对象 Object Identifier 范围。如果识别的对象存在并且具有在 Property Identifier 参数,然后尝试添加在 List of Elements 指定属性的参数。如果这次尝试成功,那么 SimpleAck 原语已发出。如果列表中已存在一个或多个元素,则该元素将被忽略并且不会添加到列表中。忽略已存在的元素不会导致服务失败。如果指定的对象不存在,或者指定的属性不存在,或者指定的属性不是列表,则服务失败并发出错误响应原语。如果无法将一个或多个元素添加到列表中并且它们尚未在列表中,则发出错误响应原语并且不会将任何元素添加到列表中。该服务的作用是将所有尚不存在的指定元素添加到列表中,或者根本不将任何元素添加到列表中。
服务挂钩:RemoveListElement
验证请求的有效性后,API 尝试修改请求中标识的对象 Object Identifier 范围。如果识别的对象存在并且具有在 Property Identifier 参数,然后尝试删除在 List of Elements 来自指定属性的参数。如果一个或多个元素不存在或由于权限不足或其他问题而无法删除,则不会删除任何元素并发出错误响应原语。
服务挂钩: ReadProperty
验证请求的有效性后,API 尝试访问指定对象的指定属性。如果访问成功,则会出现 ComplexAck 生成返回访问值的原语。如果访问失败,则会生成错误原语,其中提供失败的原因。当。。。的时候 object-type 在里面 Object Identifier 参数包含值 Device Object 以及中的实例 Object Identifier 参数包含值 4194303,然后 API 处理 Object Identifier 就好像它正确匹配本地设备对象一样。这允许不生成设备的设备实例 I-Am 消息待定。
服务挂钩:ReadPropertyMultiple
验证请求的有效性后,API 尝试访问指定对象的指定属性。它构建了一个 List of Read Access Results 按照请求中指定的顺序。如果 List of Property References 的一部分 List of Read Access Specifications 参数包含属性标识符 ALL, REQUIRED, 或者 OPTIONAL,那么 List of Read Access Results 构造时就像显式引用返回的每个属性一样。不要求请求“自动”执行。尽管如此,API 确保所有读取操作都在尽可能短的时间内完成,仅受更高优先级进程的影响。该请求将被处理,直到尝试访问所有指定的属性。如果未找到任何指定对象,或者无法访问指定对象的任何指定属性,则返回错误原语或错误原语 ComplexAck 发出返回所有属性的错误代码的原语。如果可以访问指定对象的任何指定属性,则 ComplexAck 发出原语,它返回所有访问的值以及所有无法访问的属性的错误代码。当。。。的时候 object-type 在里面 Object Identifier 的一部分 Read Access Specification 参数包含值 Device Object 以及中的实例 Object Identifier 参数包含值 4194303,然后 API 处理 Object Identifier 就好像它正确匹配本地设备对象一样。这允许不生成设备的设备实例 I-Am 消息待定。
对于 BACnet 服务器用户应用程序,无法使用内部数据库,因此必须实现对 ReadPropertyMultiple 服务,他们只需实施 ReadProperty 服务挂钩因为 ReadPropertyMultiple 请求被分成单个 ReadProperty 收集内部请求和完成情况以创建响应。
服务挂钩:WriteProperty
验证请求的有效性后,API 会尝试使用 中提供的值来修改指定对象的指定属性。 Property Value 范围。如果此修改尝试成功,则 SimpleAck 原语已发出。如果修改尝试失败,则会生成错误原语,其中提供失败的原因。
服务挂钩:WritePropertyMultiple
对于每个 Write Access Specification 包含在 List of Write Access Specifications,每个指定属性的值被替换为中提供的属性值 Write Access Specification,和一个 SimpleAck 发出原语,表明服务请求已全部执行。提供的属性按照指定的顺序进行处理 List of Write Access Specifications。如果在处理过程中遇到无法修改的属性,则 PI 会发出错误响应原语,指示失败的原因。该服务的结果是所有指定的属性,或者仅是直到(但不包括)中指定的属性的属性。 First Failed Write Attempt 参数修改成功。 A BACnet-Reject-PDU 仅当没有成功执行任何写入操作时才发出。这表明服务请求被完全拒绝。如果写操作之一包含在 List of Write Access Specifications 无法成功执行,则如上所述发出指示失败原因的错误响应。
服务挂钩:ReadRange
首先,API验证有效性 Object Identifier, Property Identifier, 和 Property Array Index 参数,如果对象或属性未知,引用的数据不是列表或数组,或者当前由于其他原因无法访问,则返回带有适当错误类和错误代码的错误响应。如果 Range 参数不存在,则 API 读取列表或数组中的所有可用项目并尝试返回它们。如果 Range 参数存在并指定 By Position 参数,然后 API 读取所有指定的项目并尝试返回它们。指定的项目包括由定义的索引位置处的项目 Reference Index 加上那些直到 Count - 以下 1 项如果 Count 为正数,或高达 -1 - Count if 之前的项目 Count 是负数。列表的第一个元素与索引 1 关联。如果 Range 参数存在并指定 By Time 参数或 By Sequence Number 参数,然后 API 通过返回带有适当错误类和错误代码的错误响应来拒绝请求。返回的响应传输通过以下方式读取和返回的项目数 Item Count 范围。当前项目返回到 Item Data 范围。如果返回的响应包含第一个位置索引,则 FIRST_ITEM 标志设置为 TRUE 在里面 Result Flags 范围;否则,它被设置为 FALSE。如果返回的响应包含最后一个位置索引,则 LAST_ITEM 标志设置为 TRUE 在 Result Flags;否则,它被设置为 FALSE。如果列表中没有项目匹配 Range 参数标准,然后 ComplexAck 返回一个 Item Count 的 0 和不 First Sequence Number 范围。
该服务的默认实现不支持访问 log-buffer 趋势和事件记录对象的属性。如果用户应用程序必须支持日志记录对象,则这些数据的存储和访问必须由用户应用程序实现。
服务挂钩:SubscribeCOVProperty
如果两者都不是 Lifetime 也不 Issue Confirmed Notifications 存在,则该请求被视为取消。同一 BACnet 地址已存在且包含在具有以下内容的 PDU 中的任何 COV 上下文 SubscribeCOVProperty 请求并具有相同的 Subscriber Process Identifier, Monitored Object Identifier 和 Monitored Property Identifier,被禁用,并且 SimpleAck 被返回。如果找不到匹配的 COV 上下文,则会成功处理取消,就像上下文已存在一样。他们回来了 SimpleAck。如果找到 COV 上下文,则会将其从 Active_COV_Subscriptions 设备对象。如果 Issue Confirmed Notifications 参数存在,但要监视的属性不支持 COV 报告,则会发出错误。如果要监视的属性支持 COV 报告,则执行检查以查找包含在 PDU 中的相同 BACnet 地址的现有 COV 上下文。 SubscribeCOVProperty 请求并具有相同的 Subscriber Process Identifier, Monitored Object Identifier, 和 Monitored Property Identifier。如果找到现有 COV 上下文,则该请求将被解释为重新订阅并成功处理,就像已创建重新订阅一样。如果找不到与请求匹配的 COV 上下文,则会创建新的 COV 上下文。它包含来自 PDU 的 BACnet 地址,该 PDU 发送 SubscribeCOVProperty 请求并具有相同的 Subscriber Process Identifier, Monitored Object Identifier, 和 Monitored Property Identifier。新的上下文包含在 Active_COV_Subscriptions 设备对象的属性。如果无法创建上下文,则会返回错误。如果创建了新上下文,或者收到了重新订阅,则 COV 上下文将被初始化并定义生命周期,如 Lifetime 范围。如果几秒钟后仍未收到重新订阅,订阅将自动取消。 A SimpleAck 返回并 ConfirmedCOVNotification 或者 UnconfirmedCOVNotification 在成功完成订阅或重新订阅请求后尽快创建,如 Issue Confirmed Notifications 范围。
服务挂钩:GetEventInformation
API 验证请求的合法性后,从指定对象之后的对象开始(按对象实例内部升序排列),查找所有满足以下条件的事件触发对象: Last Received Object Identifier 参数,如果存在的话有一个 Event_State 其价值不等于的财产 NORMAL,或者有一个 Acked_Transitions 至少具有以下位之一的属性(TO-OFFNORMAL, TO-FAULT, TO-NORMAL) 设置 FALSE。将构建肯定响应,其中包含在此搜索中找到的对象的事件摘要。如果没有找到满足这些条件的对象,则返回长度为 0 的列表。在规定时间内可以退回的数量尽可能多地退回 APDU。如果存在更多满足条件但无法返回的对象 APDU,那么 More Events 参数设置为 TRUE;否则,它被设置为 FALSE。
服务挂钩:我是
API验证请求的有效性后,将收到的信息添加到 Address_Binding 设备对象属性。这用于将设备实例号解析为与该设备通信所需的 BACnet MAC 地址。
服务挂钩:I-Have
验证请求的有效性后,API 将收到的信息添加到内部排序列表中。该列表用于将对象名称解析为访问这些对象所需的对象标识符。
服务挂钩:谁有
API 将传输未确认的数据 Who-Has 请求,通常使用广播地址。如果 Device Instance Range Low Limit 和 Device Instance Range High Limit 参数存在,则该API,其设备 Object_Identifier 实例数落在该范围内 Device Instance Range Low Limit >= Object_Identifier Instance Number <= Device Instance Range High Limit,有资格回应。如果 Object Name 参数存在,则 API 包含一个带有 Object_Name 匹配的属性值 Object Name 参数,响应一个 I-Have 服务请求。如果 Object Identifier 参数存在,则 API 包含一个带有 Object_Identifier 匹配的属性值 Object Identifier 参数,响应一个 I-Have 服务请求。
服务挂钩:谁是谁
API 传输未确认的数据 Who-Is 请求,通常使用广播地址。如果 Device Instance Range Low Limit 和 Device Instance Range High Limit 缺少参数,则 API 返回其设备 Object_Identifiers 在个人反应中通过 I-Am 服务。如果 Device Instance Range Low Limit 和 Device Instance Range High Limit 参数存在,则该API,其设备 Object_Identifier 实例数落在范围内 Device Instance Range Low Limit >= Device Object_Identifier Instance Number <= Device Instance Range High Limit,将归还他们的设备 Object_Identifier 借助于 I-Am 服务。
服务挂钩:AtomicReadFile
首先,API验证有效性 Object Identifier。它返回一个 result(-) 如果对象未知,则错误具有相应的错误类和错误代码。该服务挂钩仅支持通过以下方式访问的文件 STREAM。之后,检查本地硬盘上本地文件访问的有效性,并 result(-) 如果文件起始位置无效或由于任何原因无法访问文件,则返回具有适当错误类和错误代码的响应。如果有效性检查成功,则指定的数量 Request Record Count 从本地文件读取八位字节。如果实际读取的八位字节数小于指定的八位字节数,则 Returned Record Count 归来的 result(+) 表示读取的八位字节数。如果到达文件末尾,则 End Of File 返回的参数 result(+) 被设定为 TRUE。
该服务钩子是使用 SysFile 接口实现的 CODESYS 并支持 STREAM 仅限访问。因此,用户应用程序可能想要特别更改此文件访问的服务挂钩。
服务挂钩:AtomicWriteFile
首先,API验证有效性 Object Identifier。它返回一个 result(-) 如果对象未知,则错误具有相应的错误类和错误代码。该服务挂钩仅支持通过以下方式访问的文件 STREAM。之后,检查本地硬盘上本地文件访问的有效性,并 result(-) 如果文件起始位置无效或由于任何原因无法访问文件,则返回具有适当错误类和错误代码的响应。如果 File Start Position 服务请求的参数超出本地文件大小,则扩展文件以写入传入的八位字节。如果 File Start Position 参数有值 -1,然后本地文件会附加传入的八位字节。如果写入本地文件失败,则相应的 result(-) 发出响应。如果写入本地文件成功,则 result(+) 已发出,其中包含相应的 File Start Position。
该服务钩子是使用 SysFile 接口实现的 CODESYS 并支持 STREAM 仅限访问。因此,用户应用程序可能想要特别更改此文件访问的服务挂钩。
服务挂钩:CreateObject
首先,API 会通过检查请求是否正确来验证请求的有效性。 Object Specifier 请求的指定一个可创建的对象类型(根据内部规则 BACnet.IsBACnetObjectAMEVCreatable)。它返回相应的错误 result(-) 如果不是这种情况。如果指定的 Object Specifier,检查对象实例号的有效性并出现相应的错误 result(-) 如果实例号不再存在,则返回。如果一个 List of Initial Values 未指定,然后使用默认值创建创建对象的属性,因为通常用于给定中未指定的属性 List of Initial Values.如果创建对象失败,则出现相应的错误 result(-) 发行,而 First Failed Element Number 的响应设置为 0.如果创建成功,一个 result(+) 发出响应,其中包含已创建对象的对象标识符。
此服务挂钩的当前实现应该被视为对其实现的更全面的建议。因为如何处理这个服务请求纯粹是用户应用程序的本地事务,所以用户应用程序很可能会提供自己的服务挂钩来处理请求。
服务挂钩:DeleteObject
首先,API 验证的有效性 Object Identifier 并返回一个 result(-) 如果对象未知,则带有相应错误类和错误代码的错误响应。如果可以删除指定的对象,则 result(+) 发出响应。如果删除对象失败(例如:无法根据内部规则动态删除对象 BACnet.IsBACnetObjectAMEVCreatable),或出于任何其他原因,然后 result(-) 发出。
该服务挂钩的当前实现应该被视为对其实现的更全面的建议。因为如何处理该服务请求完全是用户应用程序的本地问题,所以用户应用程序很可能会提供自己的服务挂钩来处理该请求的另一次处理。有关更多信息,请参阅: 使用电流时的实施要求 BACnet API/堆栈