Skip to main content

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_Identifiers 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