Ganchos de indicación de servicio con implementación de acción predeterminada
Aquí hay una lista de ganchos que ya tienen implementada alguna acción predeterminada y normalmente no necesitan ninguna implementación en la aplicación del usuario:
Gancho de servicio: AcknowledgeAlarm
Después de verificar la validez de la solicitud, la API intenta localizar el objeto especificado. Si el objeto existe y si el Time Stamp
el parámetro coincide con la hora más reciente para el evento que se reconoce, entonces ocurrirá lo siguiente: el bit en el Acked_Transitions
propiedad del objeto que corresponde al valor de la Event State Acknowledged
el parámetro se establece en 1
, a result(+)
se emite una primitiva, y una notificación de evento con un Notify Type
parámetro igual a ACK_NOTIFICATION
se emite. Si no se encuentra un objeto, un result(-)
se emite la primitiva. Una notificación de acuse de recibo utiliza el mismo tipo de servicio (con o sin acuse de recibo) dirigido a los mismos destinatarios a los que se envió la notificación de evento original con acuse de recibo o sin acuse de recibo. El Time Stamp
transmitido en la notificación de acuse de recibo se deriva del momento en que se genera la notificación de acuse de recibo, no de la Time Stamp
de la notificación de evento original.
Gancho de servicio: GetAlarmSummary
Después de verificar la validez de la solicitud, la API busca todos los objetos desencadenantes de eventos que tienen un Event_State propiedad no igual a NORMAL
y un Notify_Type
propiedad con un valor de ALARM
. Se construye una respuesta positiva que contiene la Alarm Summaries
para los objetos encontrados en esta búsqueda. Si no se encuentran objetos que cumplan estos criterios, se devuelve una lista de longitud 0.
Gancho de servicio: GetEnrollmentSummary
Después de verificar la validez de la solicitud, la API busca todos los objetos desencadenantes de eventos que cumplan con los criterios de búsqueda especificados en la primitiva de solicitud. Los criterios de búsqueda son los enlaces lógicos de todos los filtros establecidos explícitamente que se omitieron en la primitiva de solicitud. Una respuesta positiva que contenga el Enrollment Summaries
para los objetos encontrados en esta búsqueda se construye. Si no se encuentran objetos que cumplan estos criterios, se devuelve una lista de longitud 0.
Gancho de servicio: SubscribeCOV
si ninguno Lifetime
ni Issue Confirmed Notifications
existe, entonces la solicitud se considera como una cancelación. Cualquier contexto COV, que ya existe para la misma dirección BACnet y está contenido en la PDU que tiene la SubscribeCOV
solicitud y tiene la misma Subscriber Process Identifier
y Monitored Object Identifier
, están deshabilitados y un SimpleAck
es regresado. Las cancelaciones creadas, para las que no se puede encontrar un contexto COV coincidente, se realizan correctamente como si hubiera existido un contexto y devuelven un SimpleAck
. Si el Lifetime
el parámetro no existe, pero el Issue Confirmed Notifications
existe parámetro, entonces se aplica un valor de cero (vida útil indefinida) para lifetime
. Si el Issue Confirmed Notifications
existe un parámetro, pero el objeto a monitorear no admite informes de COV, entonces se emite un error. Si el objeto a monitorear admite informes de COV, entonces se realiza una verificación para ubicar un contexto COV existente para la misma dirección BACnet que está contenida en la PDU que contiene el SubscribeCOV
solicitud y tiene la misma Subscriber Process Identifier
y Monitored Object Identifier
. Si se encuentra un contexto COV existente, la solicitud se maneja como si la suscripción se creara nuevamente. si un COV
no se puede encontrar el contexto que corresponde a la solicitud, entonces se crea un nuevo contexto COV que contiene la dirección BACnet de la PDU que transporta la SubscribeCOV
pedido y lo mismo Subscriber Process Identifier
y Monitored Object Identifier
. Si no se puede crear un contexto, se devuelve un error. Si se crea un nuevo contexto o se recibe una nueva suscripción, entonces el contexto COV se inicializa y se le otorga una duración de acuerdo con el Lifetime
parámetro si existe, o 0 si el parámetro Lifetime no existe. La suscripción se cancela automáticamente después de que hayan transcurrido muchos segundos sin recibir una nueva suscripción. Un tiempo de vida de 0 indica que la suscripción es indefinida y no se producirá una cancelación automática. En cualquier caso, un SimpleAck
es regresado. A ConfirmedCOVNotification
o UnconfirmedCOVNotification
se crea tan pronto como sea posible después de la finalización exitosa de una solicitud de suscripción o nueva suscripción, como se especifica en el Issue Confirmed Notifications
parámetro.
Gancho de servicio: AddListElement
Después de verificar la validez de la solicitud, la API intenta modificar el objeto que se identifica en el Object Identifier
parámetro. Si el objeto identificado existe y tiene la propiedad especificada en el Property Identifier
parámetro, entonces se hace un intento de agregar todos los elementos especificados en el List of Elements
parámetro a la propiedad especificada. Si este intento tiene éxito, entonces un SimpleAck
se emite la primitiva. Si uno o más de los elementos ya existen en la lista, se ignoran y no se agregan a la lista. Ignorar un elemento que ya existe no hace que el servicio falle. Si el objeto especificado no existe, o la propiedad especificada no existe, o la propiedad especificada no es una lista, el servicio falla y se emite una primitiva de respuesta de error. Si uno o más elementos no se pueden agregar a la lista y no están ya en la lista, se emite una primitiva de respuesta de error y no se agrega ningún elemento a la lista. El efecto de este servicio es agregar a la lista todos los elementos especificados que aún no existen o no agregar ningún elemento a la lista.
Gancho de servicio: RemoveListElement
Después de verificar la validez de la solicitud, la API intenta modificar el objeto que se identifica en el Object Identifier
parámetro. Si el objeto identificado existe y tiene la propiedad especificada en el Property Identifier
parámetro, entonces se hace un intento de eliminar todos los elementos especificados en el List of Elements
parámetro de la propiedad especificada. Si uno o más de los elementos no existen o no se pueden eliminar debido a permisos insuficientes u otros problemas, ninguno de los elementos se eliminará y se emitirá una primitiva de respuesta de error.
Gancho de servicio: ReadProperty
Después de verificar la validez de la solicitud, la API intenta acceder a la propiedad especificada del objeto especificado. Si el acceso es exitoso, entonces un ComplexAck
se genera una primitiva que devuelve el valor accedido. Si falla el acceso, se genera una primitiva de error, que proporciona el motivo de la falla. Cuando el object-type
en el Object Identifier
el parámetro contiene el valor Device Object
y la instancia en el Object Identifier
el parámetro contiene el valor 4194303
, entonces la API maneja el Object Identifier
como si coincidiera correctamente con el objeto del dispositivo local. Esto permite que la instancia del dispositivo de un dispositivo que no genera I-Am
mensajes por determinar.
Gancho de servicio: ReadPropertyMultiple
Después de verificar la validez de la solicitud, la API intenta acceder a la propiedad especificada del objeto especificado. Construye un List of Read Access Results
en el orden especificado en la solicitud. Si el List of Property References
parte de List of Read Access Specifications
el parámetro contiene los identificadores de propiedad ALL
, REQUIRED
, o OPTIONAL
, entonces la List of Read Access Results
se construye como si se hiciera referencia explícita a cada propiedad que se devuelve. No hay ningún requisito de que la solicitud se realice "automáticamente". No obstante, la API se asegura de que todas las operaciones de lectura se completen en el menor tiempo posible, sujetas solo a procesos de mayor prioridad. La solicitud se procesa hasta que se intenta acceder a todas las propiedades especificadas. Si no se encuentra ninguno de los objetos especificados o si no se puede acceder a ninguna de las propiedades especificadas de los objetos especificados, entonces una primitiva de error o una ComplexAck
se emite una primitiva que devuelve códigos de error para todas las propiedades. Si se puede acceder a cualquiera de las propiedades especificadas de los objetos especificados, entonces ComplexAck
se emite la primitiva, que devuelve todos los valores accedidos y códigos de error para todas las propiedades a las que no se pudo acceder. Cuando el object-type
en el Object Identifier
parte de Read Access Specification
el parámetro contiene el valor Device Object
y la instancia en el Object Identifier
el parámetro contiene el valor 4194303
, entonces la API maneja el Object Identifier
como si coincidiera correctamente con el objeto del dispositivo local. Esto permite que la instancia del dispositivo de un dispositivo que no genera I-Am
mensajes por determinar.
Para las aplicaciones de usuario del servidor BACnet, que no pueden usar la base de datos interna y, por lo tanto, tienen que implementar soporte para el ReadPropertyMultiple
servicio, solo tienen que implementar el ReadProperty
gancho de servicio porque ReadPropertyMultiple
las solicitudes se dividen en una sola ReadProperty
las solicitudes internamente y las finalizaciones se recopilan para crear la respuesta.
Gancho de servicio: WriteProperty
Después de verificar la validez de la solicitud, la API intenta modificar la propiedad especificada del objeto especificado utilizando el valor proporcionado en el Property Value
parámetro. Si este intento de modificación tiene éxito, entonces un SimpleAck
se emite la primitiva. Si falla el intento de modificación, se genera una primitiva de error, que proporciona el motivo del fallo.
Gancho de servicio: WritePropertyMultiple
Para cada Write Access Specification
contenido en el List of Write Access Specifications
, el valor de cada propiedad especificada se reemplaza por el valor de propiedad proporcionado en el Write Access Specification
, y un SimpleAck
se emite la primitiva, indicando que la solicitud de servicio se ha realizado en su totalidad. Las propiedades proporcionadas se procesan en el orden que se especifica en el List of Write Access Specifications
. Si durante el procesamiento se encuentra una propiedad que no se puede modificar, el PI emite una primitiva de respuesta de error que indica el motivo de la falla. El resultado de este servicio es que todas las propiedades especificadas o solo las propiedades hasta, pero sin incluir, la propiedad especificada en el First Failed Write Attempt
el parámetro se modificó con éxito. A BACnet-Reject-PDU
se emite solo si no se han ejecutado con éxito operaciones de escritura. Indica que la solicitud de servicio fue rechazada en su totalidad. Si una de las operaciones de escritura contenidas en el List of Write Access Specifications
no se pudo ejecutar con éxito, entonces se emite una respuesta de error que indica el motivo de la falla como se describe anteriormente.
Gancho de servicio: ReadRange
Primero, la API verifica la validez de la Object Identifier
, Property Identifier
, y Property Array Index
y devuelve una respuesta de error con la clase de error y el código de error apropiados si el objeto o la propiedad son desconocidos, si los datos a los que se hace referencia no son una lista o una matriz, o si actualmente no se puede acceder a ellos por otro motivo. Si el Range
el parámetro no existe, entonces la API lee todos los elementos disponibles en la lista o matriz e intenta devolverlos. Si el Range
El parámetro existe y especifica el By Position
parámetros, luego la API lee todos los elementos especificados e intenta devolverlos. Los elementos especificados incluyen el elemento en la posición de índice definida por Reference Index
más los hasta Count
- 1 artículos siguientes si Count
es positivo, o hasta -1 - Count
elementos que preceden a si Count
es negativo El primer elemento de una lista está asociado con el índice 1. Si el Range
El parámetro existe y especifica el By Time
parámetro o el By Sequence Number
parámetros, entonces la API rechaza la solicitud devolviendo una respuesta de error con la clase de error y el código de error apropiados. La respuesta devuelta transmite el número de elementos leídos y devueltos por medio del Item Count
parámetro. Los elementos actuales se devuelven en el Item Data
parámetro. Si la respuesta devuelta incluye el índice de la primera posición, entonces el FIRST_ITEM
la bandera se establece en TRUE
en el Result Flags
parámetro; de lo contrario, se establece en FALSE
. Si la respuesta devuelta incluye el índice de la última posición, entonces el LAST_ITEM
la bandera se establece en TRUE
en Result Flags
; de lo contrario, se establece en FALSE
. Si ningún elemento de la lista coincide con el Range
criterio de parámetro, entonces un ComplexAck
se devuelve con un Item Count
de 0
y no First Sequence Number
parámetro.
La implementación predeterminada de este servicio NO admite el acceso a la log-buffer
propiedad de los objetos de registro de tendencias y eventos. Si una aplicación de usuario tiene que admitir objetos de registro, la aplicación de usuario debe implementar el almacenamiento y el acceso a esos datos.
Gancho de servicio: SubscribeCOVProperty
si ninguno Lifetime
ni Issue Confirmed Notifications
existe, entonces la solicitud se considera como una cancelación. Cualquier contexto COV que ya exista para la misma dirección BACnet y esté contenido en la PDU que tenga la SubscribeCOVProperty
solicitud y tiene la misma Subscriber Process Identifier
, Monitored Object Identifier
y Monitored Property Identifier
, está deshabilitado, y un SimpleAck
es regresado. Las cancelaciones, que se emiten para las que no se puede encontrar un contexto COV coincidente, se gestionan correctamente como si hubiera existido un contexto. Ellos regresan SimpleAck
. Si se encuentra un contexto COV, se elimina de la Active_COV_Subscriptions
objeto de dispositivo. Si el Issue Confirmed Notifications
existe un parámetro, pero la propiedad que se va a supervisar no es compatible con los informes de COV, se emite un error. Si la propiedad que se va a supervisar es compatible con los informes COV, se realiza una verificación para ubicar un contexto COV existente para la misma dirección BACnet que está contenida en la PDU que contiene el SubscribeCOVProperty
solicitud y tiene la misma Subscriber Process Identifier
, Monitored Object Identifier
, y Monitored Property Identifier
. Si se encuentra un contexto COV existente, la solicitud se interpreta como una nueva suscripción y se gestiona correctamente como si se hubiera creado una nueva suscripción. Si no se encuentra un contexto COV que coincida con la solicitud, se crea un nuevo contexto COV. Contiene la dirección BACnet de la PDU que envía el SubscribeCOVProperty
solicitud y tiene la misma Subscriber Process Identifier
, Monitored Object Identifier
, y Monitored Property Identifier
. El nuevo contexto se incluye en el Active_COV_Subscriptions
propiedad del objeto dispositivo. Si no se puede crear un contexto, se devuelve un error. Si se crea un nuevo contexto o se recibe una nueva suscripción, el contexto COV se inicializa y se define con una vigencia como se especifica en el Lifetime
parámetro. La suscripción se cancela automáticamente si no se ha recibido una nueva suscripción después de muchos segundos. A SimpleAck
se devuelve y un ConfirmedCOVNotification
o UnconfirmedCOVNotification
se crea tan pronto como sea posible después de la finalización exitosa de una solicitud de suscripción o renovación de suscripción, como se especifica en el Issue Confirmed Notifications
parámetro.
Gancho de servicio: GetEventInformation
Después de verificar la validez de la solicitud, la API busca todos los objetos desencadenantes de eventos que cumplen las siguientes condiciones, comenzando con el objeto (en orden interno ascendente de instancias de objetos) después del objeto especificado por el Last Received Object Identifier
parámetro, si está presente tiene un Event_State
propiedad cuyo valor no es igual a NORMAL
, o tener un Acked_Transitions
propiedad que tiene al menos uno de los siguientes bits (TO-OFFNORMAL
, TO-FAULT
, TO-NORMAL
) ajustado a FALSE
. Se construye una respuesta positiva, que contiene los resúmenes de eventos de los objetos encontrados en esta búsqueda. Si no se encuentran objetos que cumplan estos criterios, se devuelve una lista de longitud 0. Se devuelven tantos como se pueden devolver dentro del APDU
. Si existen más objetos que cumplen los criterios pero no se pueden devolver en el APDU
, entonces la More Events
el parámetro se establece en TRUE
; de lo contrario, se establece en FALSE
.
Gancho de servicio: I-Am
Después de verificar la validez de la solicitud, la API agrega la información recibida a la Address_Binding
propiedad del objeto del dispositivo. Esto se usa para convertir los números de instancia del dispositivo en direcciones BACnet MAC que se necesitan para la comunicación con ese dispositivo.
Gancho de servicio: I-Have
Después de verificar la validez de la solicitud, la API agrega la información recibida a una lista ordenada interna. Esta lista se utiliza para convertir nombres de objetos en identificadores de objetos necesarios para acceder a esos objetos.
Gancho de servicio: Who-Has
La API transmitirá el no reconocido Who-Has
solicitud, normalmente utilizando una dirección de difusión. Si el Device Instance Range Low Limit
y Device Instance Range High Limit
existen parámetros, entonces la API, cuyo dispositivo Object_Identifier
el número de instancia cae en el rango Device Instance Range Low Limit
>= Object_Identifier Instance Number
<= Device Instance Range High Limit
, está capacitado para responder. Si el Object Name
existe el parámetro, entonces la API, que contiene un objeto con un Object_Name
valor de la propiedad que coincide con el Object Name
parámetro, responde con un I-Have
petición de servicio. Si el Object Identifier
existe el parámetro, entonces la API, que contiene un objeto con un Object_Identifier
valor de la propiedad que coincide con el Object Identifier
parámetro, responde con un I-Have
petición de servicio.
Gancho de servicio: Who-Is
La API transmite el no reconocido Who-Is
solicitud, normalmente utilizando una dirección de difusión. Si el Device Instance Range Low Limit
y Device Instance Range High Limit
faltan parámetros, entonces la API devuelve su dispositivo Object_Identifier
s en las respuestas individuales por medio del I-Am
Servicio. Si el Device Instance Range Low Limit
y Device Instance Range High Limit
existen parámetros, entonces la API, cuyo dispositivo Object_Identifier
el número de instancia cae dentro del rango Device Instance Range Low Limit
>= Device Object_Identifier Instance Number
<= Device Instance Range High Limit
, devolverá su dispositivo Object_Identifier
por medio del I-Am
Servicio.
Gancho de servicio: AtomicReadFile
Primero, la API verifica la validez de la Object Identifier
. devuelve un result(-)
error con la clase de error correspondiente y el código de error si el objeto es desconocido. Este gancho de servicio solo admite archivos a los que se accede a través de STREAM
. Después de eso, se verifica la validez del acceso al archivo local en el disco duro local y se result(-)
se devuelve una respuesta con la clase de error adecuada y el código de error si la posición de inicio del archivo no es válida o si no se puede acceder al archivo por algún motivo. Si la verificación de validez tiene éxito, entonces el número especificado Request Record Count
de octetos se lee del archivo local. Si el número real de octetos leídos es menor que el especificado, entonces el Returned Record Count
de los devueltos result(+)
indica el número de octetos leídos. Si se llega al final del archivo, entonces el End Of File
parámetro de lo devuelto result(+)
se establece en TRUE
.
Este enlace de servicio se implementa utilizando la interfaz SysFile de CODESYS y apoya STREAM
solo acceso. Como resultado, la aplicación de usuario puede querer cambiar particularmente este enlace de servicio para el acceso al archivo.
Gancho de servicio: AtomicWriteFile
Primero, la API verifica la validez de la Object Identifier
. devuelve un result(-)
error con la clase de error correspondiente y el código de error si el objeto es desconocido. Este gancho de servicio solo admite archivos a los que se accede a través de STREAM
. Después de eso, se verifica la validez del acceso al archivo local en el disco duro local y se result(-)
se devuelve una respuesta con la clase de error adecuada y el código de error si la posición de inicio del archivo no es válida o si no se puede acceder al archivo por algún motivo. Si el File Start Position
El parámetro de la solicitud de servicio supera el tamaño del archivo local, entonces el archivo se amplía para escribir los octetos entrantes. Si el File Start Position
parámetro tiene el valor -1
, luego el archivo local se agrega con los octetos entrantes. Si falla la escritura en el archivo local, entonces result(-)
se emite respuesta. Si escribir en el archivo local es exitoso, entonces result(+)
se emite, que contiene el correspondiente File Start Position
.
Este enlace de servicio se implementa utilizando la interfaz SysFile de CODESYS y apoya STREAM
solo acceso. Como resultado, la aplicación de usuario puede querer cambiar particularmente este enlace de servicio para el acceso al archivo.
Gancho de servicio: CreateObject
Primero, la API verificará la validez de la solicitud comprobando si la Object Specifier
de la solicitud especifica un tipo de objeto creable (según la regla interna BACnet.IsBACnetObjectAMEVCreatable
). Devuelve un error correspondiente. result(-)
si este no es el caso. Si lo especifica el Object Specifier
, se comprueba la validez del número de instancia del objeto y se muestra el error correspondiente. result(-)
se devuelve en caso de que el número de instancia ya no exista. si un List of Initial Values
no se especifica, entonces las propiedades del objeto creado se crean utilizando valores predeterminados como es habitual para las propiedades que no se especifican en un determinado List of Initial Values
. Si la creación del objeto falla, entonces un error correspondiente result(-)
se emite, mientras que el First Failed Element Number
de la respuesta se establece en 0
. Si la creación fue exitosa, un result(+)
se emite una respuesta, que contiene el identificador de objeto del objeto creado.
Esta implementación actual de este enlace de servicio debe verse como una sugerencia más completa para su implementación. Debido a que es un asunto puramente local de la aplicación de usuario cómo se maneja esta solicitud de servicio, es muy probable que la aplicación de usuario proporcione su propio gancho de servicio para otro manejo de la solicitud.
Gancho de servicio: DeleteObject
Primero, la API verifica la validez de la Object Identifier
y devuelve un result(-)
respuesta de error con la clase de error correspondiente y el código de error si el objeto es desconocido. Si el objeto especificado se puede eliminar, entonces un result(+)
se emite respuesta. Si falla la eliminación de los objetos (ejemplo: el objeto no se puede eliminar dinámicamente según la regla interna BACnet.IsBACnetObjectAMEVCreatable
), o por cualquier otra razón, entonces un result(-)
se emite.
Esta implementación actual de este enlace de servicio debe verse como una sugerencia más completa para su implementación. Debido a que es un asunto puramente local de la aplicación de usuario cómo se maneja esta solicitud de servicio, es muy probable que la aplicación de usuario proporcione su propio gancho de servicio para otro manejo de la solicitud. Para más información, ver: Requisitos de implementación cuando se usa la API/pila BACnet actual