Este capítulo ofrece una descripción general de los conceptos de Code Analysis integrados en EcoStruxure Machine Expert.
El diagrama ofrece una descripción general de los componentes de software de alto nivel de Code Analysis:
Los componentes se pueden clasificar en tres tipos distintos:
Componentes de UI que muestran datos:
Editores para escribir el código fuente.
Editores para visualizar los resultados como métricas o convenciones, o una representación gráfica de la estructura del código fuente.
Modelos de datos como entrada o salida de otros componentes:
Modelo de lenguaje
Modelo de dependencia
Modelo Resource Description Framework (RDF)
Resultados de la consulta
Componentes que transforman datos:
El compilador de código fuente (con modelo de lenguaje como salida) procesa el código fuente para comprobar la sintaxis y crear el modelo de lenguaje para generar el código ejecutable de los controladores.
El analizador de código fuente (con modelo de dependencia como salida) analiza el modelo de lenguaje y lo transforma en un modelo de dependencia (y lo mantiene actualizado).
El generador de modelo RDF (con modelo RDF como salida) transforma el modelo de dependencia en un modelo RDF para generar la conexión con las tecnologías web semánticas.
El motor de ejecución de consultas (con los resultados de la consulta como salida) ejecuta consultas SPARQL en el modelo RDF para obtener resultados de la consulta.
Se analiza la aplicación y se crea un modelo de dependencia.
El modelo de dependencia es una lista de nodos conectados mediante flancos.
Ejemplos de tipos de nodos:
Tipo de nodo |
Descripción |
---|---|
Bloque de funciones |
Bloque de funciones (FB) dentro del modelo de dependencia. Se crea para cada bloque de funciones añadido al proyecto de EcoStruxure Machine Expert. |
Programa |
Programa (PRG) dentro del modelo de dependencia. Se crea para cada programa añadido al proyecto de EcoStruxure Machine Expert. |
Función |
Función (FC) dentro del modelo de dependencia. Se crea para cada función añadida al proyecto de EcoStruxure Machine Expert. |
... |
... |
Ejemplos de tipos de flancos:
Tipo de flanco |
Descripción |
---|---|
Lectura |
Operación de lectura del código como origen a un nodo de variable como destino. |
Escritura |
Operación de escritura del código como origen a un nodo de variable como destino. |
Llamada |
Llamada de un bloque de funciones, método, acción, programa, etc., del código como origen a un nodo de destino. |
Extensión |
Extensión de un tipo base. Por ejemplo, extensión de FB realizada por otro bloque de funciones. |
... |
... |
La función de análisis de código abierto y flexible se basa en tecnologías web semánticas. Algunas de estas tecnologías son:
Resource Description Framework (RDF): modelo RDF
Consulte https://en.wikipedia.org/wiki/Resource_Description_Framework.
Base de datos RDF (base de datos web semántica): un Triple Storage RDF
Protocolo SPARQL y lenguaje de consultas RDF: SPARQL
Consulte https://en.wikipedia.org/wiki/SPARQL.
El modelo de dependencia es el resultado de una ejecución de análisis de código.
Para vincularse a una función de análisis de código abierto y flexible con compatibilidad con lenguajes de consultas, el modelo de dependencia se sincroniza con un modelo RDF.
Para poder analizar proyectos grandes, el modelo RDF se mantiene en un proceso independiente llamado
.De forma predeterminada, se utiliza
. Si es necesario, puede configurar este comportamiento en el .Resource Description Framework (RDF) es un modelo de datos para describir recursos y las relaciones que se establecen entre ellos.
Ejemplo:
:(Sujeto) |
:(Predicado) |
:(Objeto) |
---|---|---|
|
|
|
|
|
|
|
|
|
SPARQL es el acrónimo de Sparql Protocol and RDF Query Language (Protocolo Sparql y lenguaje de consultas RDF). La especificación SPARQL (https://www.w3.org/TR/sparql11-overview/) ofrece lenguajes y protocolos para realizar consultas y manipulaciones en grafos RDF, de forma similar a las consultas SQL.
Ejemplo de una consulta SPARQL simple para obtener los ID de nodos y los nombres de los bloques de funciones de un modelo RDF:
SELECT ?NodeId ?Name
WHERE {
# Select all FunctionBlocks and their names
?NodeId a :FunctionBlock ;
:Name ?Name .
}