Ha tenido problemas de latencia con su proyecto de electrónica, especialmente si usa un microcontrolador. ¿Se detuvo a preguntarle si el problema se debe a un programa mal elaborado, un circuito que no funciona, desacoplamiento o todavía la latencia? En este artículo analizaremos una de las principales causas de problemas en el funcionamiento de los circuitos que involucran procesamiento: la latencia.

La latencia existe en todos los circuitos electrónicos y puede ocurrir por hardware (en todos los circuitos), y por hardware y software en el caso de microcontroladores.

Lo que sucede es que hay un intervalo entre el instante en que un circuito recibe un comando y el instante en que proporciona una salida. Incluso en un control de relé simple, hay un tiempo entre el momento en que el sensor apaga la luz y el relé cierra sus contactos, como se muestra en el circuito de la figura 1.

 

Figura 1 - Latencia del hardware
Figura 1 - Latencia del hardware | Clique na imagem para ampliar |

 

Son solo microsegundos, pero puede significar mucho en una aplicación donde el tiempo es importante. Todos los circuitos tienen latencias, que pueden variar entre nanosegundos y microsegundos, según los componentes utilizados y el número de etapas.

Pero, el mayor problema ocurre con los microcontroladores, porque la latencia del hardware para estos componentes es pequeña, pero la latencia del software puede influir, y mucho, en su funcionamiento en un proyecto.

 

 

Latencia del Software

 

Lo que sucede es que los microcontroladores realizan sus funciones procesando un programa de forma secuencial. Es una instrucción tras otra y lleva tiempo. En algunos casos, incluso introducimos un “retraso” entre la ejecución y otro intencionalmente. Por ejemplo, si enviamos un microcontrolador a leer dos entradas donde están conectados dos sensores para comprobar si se activaron simultáneamente, lo hace de forma secuencial, primero uno y luego el otro como se muestra en la figura 2.

 

Figura 2 - Lectura secuencial
Figura 2 - Lectura secuencial

 

Bueno, vamos supongamos que, en la aplicación deseada, los dos sensores se cierran por intervalos de tiempo muy cortos, como se muestra en la figura 3. Si cuando terminamos de leer el uno al otro ya no está activado, la lectura no será al mismo tiempo, como se muestra en la figura. 3.

 

Figura 3 - Lectura de Tiempos
Figura 3 - Lectura de Tiempos

 

 

Vea para que cuando se lea desde a, el sensor esté en el nivel 1, pero cuando se tome la lectura en el sensor B, haya vuelto al nivel 0 y la comparación de los resultados el microcontrolador los tome como no simultáneo. Esto se agrava si se introduce un retraso entre una instrucción y otra. En este caso, como vimos, el retardo “delay 500” se introdujo solo al final de la ejecución del bloque (subrutina). Sin embargo, si este delay es entre una lectura y otra, el problema será mayor.

El delay 500 significa medio segundo entre una operación y otra y esto puede significar que se toma una lectura de un sensor y el otro solo medio segundo más tarde, lo que para un circuito electrónico es mucho tiempo. Si el programa que creó para su proyecto incluye demasiados “delay”, tenga cuidado, ya que pueden influir en el resultado que obtendrá.

Quizás ese funcionamiento extraño que obtuvo para su proyecto que realmente no hace lo que quiere cuando se activan los sensores, o hay un funcionamiento errático de los dispositivos controlados como motores cuando enciende su proyecto puede estar en latencias producidas en la ejecución del programa. Tenga en cuenta que tal vez un cambio en el software pueda resolver el problema. También verifique la posibilidad de solucionar el problema utilizando lógica externa o shields lógicos de entrada.

 

 

Usando hardware

 

Se puede tener la lectura simultánea de dos sensores sin depender de la ejecución secuencial del programa con circuitos externos (hardware) y algunos de ellos son simples.

Por ejemplo, un puerto NAND o AND le permite saber si dos sensores se activan simultáneamente incluso si su duración de contacto es del orden de microsegundos, como se muestra en la figura 4.

 

Figura 4 - Usando lógica externa
Figura 4 - Usando lógica externa | Clique na imagem para ampliar |

 

Vea que en este caso usamos solo una entrada del microcontrolador y por lo tanto conocemos los estados de los sensores con una lectura. Y las funciones lógicas también se pueden obtener con diodos y transistores como se describe en otro artículo sobre shields en este sitio.

 

 

Importancia de Conocer la Lógica Digital

 

Muchos desprecian el conocimiento de la electrónica digital, pensando que es suficiente saber utilizar un microcontrolador y sus programas, por lo que no se necesita ninguna función lógica externa. Sin embargo, la lógica digital es importante precisamente para los casos en los que el microcontrolador no hace todo, o tiene problemas cuando queremos que haga todo. Aquí es donde un buen conocimiento de la electrónica digital (y también analógica) puede ayudar a resolver problemas de latencia y muchos otros.

Nota: en la introducción hablamos de desacoplamiento. Este es otro problema que puede ocurrir con proyectos que involucran circuitos lógicos, analógicos y de microcontroladores que explicaremos en otro artículo.

 

 

 

 

18.9MBMemory Usage42.5msRequest Duration
Joomla! Version5.2.3
PHP Version8.3.16
Identityguest
Response200
Templatecassiopeia
Database
Server
mysql
Version
10.5.22-MariaDB
Collation
latin1_swedish_ci
Conn Collation
utf8mb4_general_ci
$_GET
[]
$_POST
[]
$_SESSION
array:1 [ "joomla" => "***redacted***" ]
$_COOKIE
[]
$_SERVER
array:51 [ "USER" => "apache" "HOME" => "/usr/share/httpd" "SCRIPT_NAME" => "/index.php" "RE...
session
array:3 [ "counter" => 1 "timer" => array:3 [ "start" => 1741911968 "last" => 1741911968...
registry
array:3 [ "data" => [] "initialized" => false "separator" => "." ]
user
array:21 [ "id" => 0 "name" => null "username" => null "email" => null "password" => "***r...
  • afterLoad (85.67KB) (201μs)
  • afterInitialise (1.14MB) (3.38ms)
  • afterRoute (179.16KB) (867μs)
  • beforeRenderComponent com_content (100.65KB) (480μs)
  • Before Access::preloadComponents (all components) (33.5KB) (192μs)
  • After Access::preloadComponents (all components) (107.06KB) (670μs)
  • Before Access::preloadPermissions (com_content) (1.57KB) (6μs)
  • After Access::preloadPermissions (com_content) (16.19MB) (20.2ms)
  • Before Access::getAssetRules (id:26940 name:com_content.article.30582) (514.65KB) (800μs)
  • After Access::getAssetRules (id:26940 name:com_content.article.30582) (7.38KB) (57μs)
  • afterRenderComponent com_content (393.84KB) (7.43ms)
  • afterDispatch (2.25KB) (75μs)
  • beforeRenderRawModule mod_articles_category (Banco de Circuitos) (359.33KB) (1.82ms)
  • afterRenderRawModule mod_articles_category (Banco de Circuitos) (79.43KB) (413μs)
  • beforeRenderRawModule mod_finder (Busca_inteligente) (5.9KB) (111μs)
  • afterRenderRawModule mod_finder (Busca_inteligente) (64.98KB) (1.3ms)
  • beforeRenderModule mod_articles_category (Banco de Circuitos) (9.98KB) (596μs)
  • afterRenderModule mod_articles_category (Banco de Circuitos) (5.39KB) (77μs)
  • beforeRenderModule mod_finder (Busca_inteligente) (6.39KB) (191μs)
  • afterRenderModule mod_finder (Busca_inteligente) (4.75KB) (47μs)
  • afterRender (253.73KB) (3.48ms)
  • 1 x After Access::preloadPermissions (com_content) (16.19MB) (47.53%)
    20.20ms
    1 x afterRenderComponent com_content (393.84KB) (17.48%)
    7.43ms
    1 x afterRender (253.73KB) (8.18%)
    3.48ms
    1 x afterInitialise (1.14MB) (7.95%)
    3.38ms
    1 x beforeRenderRawModule mod_articles_category (Banco de Circuitos) (359.33KB) (4.27%)
    1.82ms
    1 x afterRenderRawModule mod_finder (Busca_inteligente) (64.98KB) (3.06%)
    1.30ms
    1 x afterRoute (179.16KB) (2.04%)
    867μs
    1 x Before Access::getAssetRules (id:26940 name:com_content.article.30582) (514.65KB) (1.88%)
    800μs
    1 x After Access::preloadComponents (all components) (107.06KB) (1.58%)
    670μs
    1 x beforeRenderModule mod_articles_category (Banco de Circuitos) (9.98KB) (1.4%)
    596μs
    1 x beforeRenderComponent com_content (100.65KB) (1.13%)
    480μs
    1 x afterRenderRawModule mod_articles_category (Banco de Circuitos) (79.43KB) (0.97%)
    413μs
    1 x afterLoad (85.67KB) (0.47%)
    201μs
    1 x Before Access::preloadComponents (all components) (33.5KB) (0.45%)
    192μs
    1 x beforeRenderModule mod_finder (Busca_inteligente) (6.39KB) (0.45%)
    191μs
    1 x beforeRenderRawModule mod_finder (Busca_inteligente) (5.9KB) (0.26%)
    111μs
    1 x afterRenderModule mod_articles_category (Banco de Circuitos) (5.39KB) (0.18%)
    77μs
    1 x afterDispatch (2.25KB) (0.18%)
    75μs
    1 x After Access::getAssetRules (id:26940 name:com_content.article.30582) (7.38KB) (0.13%)
    57μs
    1 x afterRenderModule mod_finder (Busca_inteligente) (4.75KB) (0.11%)
    47μs
    1 x Before Access::preloadPermissions (com_content) (1.57KB) (0.01%)
    6μs
21 statements were executed, 5 of which were duplicates, 16 unique11.86ms1.57MB
  • SELECT @@SESSION.sql_mode;36μs968B/libraries/src/Session/MetadataManager.php:184Copy
  • SELECT `session_id` FROM `incbmx_session` WHERE `session_id` = :session_id LIMIT 178μs1.3KBParams/libraries/src/Session/MetadataManager.php:187Copy
  • INSERT INTO `incbmx_session` (`session_id`,`guest`,`time`,`userid`,`username`,`client_id`) VALUES (:session_id, :guest, :time, :user_id, :username, :client_id)143μs944BParams/libraries/src/Session/MetadataManager.php:260Copy
  • SELECT `id`,`rules` FROM `incbmx_viewlevels`49μs656B/libraries/src/Access/Access.php:955Copy
  • SELECT `b`.`id` FROM `incbmx_usergroups` AS `a` LEFT JOIN `incbmx_usergroups` AS `b` ON `b`.`lft` <= `a`.`lft` AND `b`.`rgt` >= `a`.`rgt` WHERE `a`.`id` = :guest87μs1.64KBParams/libraries/src/Access/Access.php:868Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`214μs20.2KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT `id`,`name`,`rules`,`parent_id` FROM `incbmx_assets` WHERE `name` IN (:preparedArray1,:preparedArray2,:preparedArray3,:preparedArray4,:preparedArray5,:preparedArray6,:preparedArray7,:preparedArray8,:preparedArray9,:preparedArray10,:preparedArray11,:preparedArray12,:preparedArray13,:preparedArray14,:preparedArray15,:preparedArray16,:preparedArray17,:preparedArray18,:preparedArray19,:preparedArray20,:preparedArray21,:preparedArray22,:preparedArray23,:preparedArray24,:preparedArray25,:preparedArray26,:preparedArray27,:preparedArray28,:preparedArray29,:preparedArray30,:preparedArray31,:preparedArray32,:preparedArray33,:preparedArray34,:preparedArray35,:preparedArray36,:preparedArray37,:preparedArray38,:preparedArray39)518μs7.44KBParams/libraries/src/Access/Access.php:357Copy
  • SELECT `id`,`name`,`rules`,`parent_id` FROM `incbmx_assets` WHERE `name` LIKE :asset OR `name` = :extension OR `parent_id` = 07.95ms1.46MBParams/libraries/src/Access/Access.php:301Copy
  • SHOW FULL COLUMNS FROM `incbmx_content`392μs2.39KB/libraries/vendor/joomla/database/src/Mysqli/MysqliDriver.php:587Copy
  • UPDATE `incbmx_content` SET `hits` = (`hits` + 1) WHERE `id` = '30582'218μs48B/libraries/src/Table/Table.php:1348Copy
  • SELECT `a`.`id`,`a`.`asset_id`,`a`.`title`,`a`.`alias`,`a`.`introtext`,`a`.`fulltext`,`a`.`state`,`a`.`catid`,`a`.`created`,`a`.`created_by`,`a`.`created_by_alias`,`a`.`modified`,`a`.`modified_by`,`a`.`checked_out`,`a`.`checked_out_time`,`a`.`publish_up`,`a`.`publish_down`,`a`.`images`,`a`.`urls`,`a`.`attribs`,`a`.`version`,`a`.`ordering`,`a`.`metakey`,`a`.`metadesc`,`a`.`access`,`a`.`hits`,`a`.`metadata`,`a`.`featured`,`a`.`language`,`fp`.`featured_up`,`fp`.`featured_down`,`c`.`title` AS `category_title`,`c`.`alias` AS `category_alias`,`c`.`access` AS `category_access`,`c`.`language` AS `category_language`,`fp`.`ordering`,`u`.`name` AS `author`,`parent`.`title` AS `parent_title`,`parent`.`id` AS `parent_id`,`parent`.`path` AS `parent_route`,`parent`.`alias` AS `parent_alias`,`parent`.`language` AS `parent_language`,ROUND(`v`.`rating_sum` / `v`.`rating_count`, 1) AS `rating`,`v`.`rating_count` AS `rating_count` FROM `incbmx_content` AS `a` INNER JOIN `incbmx_categories` AS `c` ON `c`.`id` = `a`.`catid` LEFT JOIN `incbmx_content_frontpage` AS `fp` ON `fp`.`content_id` = `a`.`id` LEFT JOIN `incbmx_users` AS `u` ON `u`.`id` = `a`.`created_by` LEFT JOIN `incbmx_categories` AS `parent` ON `parent`.`id` = `c`.`parent_id` LEFT JOIN `incbmx_content_rating` AS `v` ON `a`.`id` = `v`.`content_id` WHERE ( (`a`.`id` = :pk AND `c`.`published` > 0) AND (`a`.`publish_up` IS NULL OR `a`.`publish_up` <= :publishUp)) AND (`a`.`publish_down` IS NULL OR `a`.`publish_down` >= :publishDown) AND `a`.`state` IN (:preparedArray1,:preparedArray2)205μs22.13KBParams/components/com_content/src/Model/ArticleModel.php:215Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`access` IN (:preparedArray1,:preparedArray2) AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`252μs3.92KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT `m`.`tag_id`,`t`.* FROM `incbmx_contentitem_tag_map` AS `m` INNER JOIN `incbmx_tags` AS `t` ON `m`.`tag_id` = `t`.`id` WHERE `m`.`type_alias` = :contentType AND `m`.`content_item_id` = :id AND `t`.`published` = 1 AND `t`.`access` IN (:preparedArray1,:preparedArray2)242μs3.98KBParams/libraries/src/Helper/TagsHelper.php:388Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`access` IN (:preparedArray1,:preparedArray2) AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`175μs3.92KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT DISTINCT a.id, a.title, a.name, a.checked_out, a.checked_out_time, a.note, a.state, a.access, a.created_time, a.created_user_id, a.ordering, a.language, a.fieldparams, a.params, a.type, a.default_value, a.context, a.group_id, a.label, a.description, a.required, a.only_use_in_subform,l.title AS language_title, l.image AS language_image,uc.name AS editor,ag.title AS access_level,ua.name AS author_name,g.title AS group_title, g.access as group_access, g.state AS group_state, g.note as group_note FROM incbmx_fields AS a LEFT JOIN `incbmx_languages` AS l ON l.lang_code = a.language LEFT JOIN incbmx_users AS uc ON uc.id=a.checked_out LEFT JOIN incbmx_viewlevels AS ag ON ag.id = a.access LEFT JOIN incbmx_users AS ua ON ua.id = a.created_user_id LEFT JOIN incbmx_fields_groups AS g ON g.id = a.group_id LEFT JOIN `incbmx_fields_categories` AS fc ON fc.field_id = a.id WHERE ( (`a`.`context` = :context AND (`fc`.`category_id` IS NULL OR `fc`.`category_id` IN (:preparedArray1,:preparedArray2,:preparedArray3)) AND `a`.`access` IN (:preparedArray4,:preparedArray5)) AND (`a`.`group_id` = 0 OR `g`.`access` IN (:preparedArray6,:preparedArray7)) AND `a`.`state` = :state) AND (`a`.`group_id` = 0 OR `g`.`state` = :gstate) AND `a`.`only_use_in_subform` = :only_use_in_subform ORDER BY a.ordering ASC411μs4.81KBParams/libraries/src/MVC/Model/BaseDatabaseModel.php:164Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`access` IN (:preparedArray1,:preparedArray2) AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`212μs3.92KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT `name`,`element` FROM `incbmx_extensions` WHERE `type` = 'plugin' AND `folder` = 'finder' AND `enabled` = 1182μs1.89KB/administrator/components/com_finder/src/Helper/LanguageHelper.php:135Copy
  • SELECT `title` FROM `incbmx_finder_taxonomy` WHERE `parent_id` = 1 AND `state` = 1 AND `access` IN (1,5)130μs648B/administrator/components/com_finder/src/Indexer/Taxonomy.php:325Copy
  • SELECT * FROM `incbmx_schemaorg` WHERE `itemId` = :itemId AND `context` = :context80μs1.55KBParams/plugins/system/schemaorg/src/Extension/Schemaorg.php:403Copy
  • SELECT `a`.`id`,`a`.`asset_id`,`a`.`title`,`a`.`alias`,`a`.`introtext`,`a`.`fulltext`,`a`.`state`,`a`.`catid`,`a`.`created`,`a`.`created_by`,`a`.`created_by_alias`,`a`.`modified`,`a`.`modified_by`,`a`.`checked_out`,`a`.`checked_out_time`,`a`.`publish_up`,`a`.`publish_down`,`a`.`images`,`a`.`urls`,`a`.`attribs`,`a`.`version`,`a`.`ordering`,`a`.`metakey`,`a`.`metadesc`,`a`.`access`,`a`.`hits`,`a`.`metadata`,`a`.`featured`,`a`.`language`,`fp`.`featured_up`,`fp`.`featured_down`,`c`.`title` AS `category_title`,`c`.`alias` AS `category_alias`,`c`.`access` AS `category_access`,`c`.`language` AS `category_language`,`fp`.`ordering`,`u`.`name` AS `author`,`parent`.`title` AS `parent_title`,`parent`.`id` AS `parent_id`,`parent`.`path` AS `parent_route`,`parent`.`alias` AS `parent_alias`,`parent`.`language` AS `parent_language`,ROUND(`v`.`rating_sum` / `v`.`rating_count`, 1) AS `rating`,`v`.`rating_count` AS `rating_count` FROM `incbmx_content` AS `a` INNER JOIN `incbmx_categories` AS `c` ON `c`.`id` = `a`.`catid` LEFT JOIN `incbmx_content_frontpage` AS `fp` ON `fp`.`content_id` = `a`.`id` LEFT JOIN `incbmx_users` AS `u` ON `u`.`id` = `a`.`created_by` LEFT JOIN `incbmx_categories` AS `parent` ON `parent`.`id` = `c`.`parent_id` LEFT JOIN `incbmx_content_rating` AS `v` ON `a`.`id` = `v`.`content_id` WHERE ( (`a`.`id` = :pk AND `c`.`published` > 0) AND (`a`.`publish_up` IS NULL OR `a`.`publish_up` <= :publishUp)) AND (`a`.`publish_down` IS NULL OR `a`.`publish_down` >= :publishDown) AND `a`.`state` IN (:preparedArray1,:preparedArray2)197μs22.17KBParams/components/com_content/src/Model/ArticleModel.php:215Copy
  • SELECT SUM(CASE WHEN `a`.`next_execution` <= :now THEN 1 ELSE 0 END) AS due_count,SUM(CASE WHEN `a`.`locked` IS NULL THEN 0 ELSE 1 END) AS locked_count FROM `incbmx_scheduler_tasks` AS `a` WHERE `a`.`state` = 190μs1.37KBParams/administrator/components/com_scheduler/src/Model/TasksModel.php:465Copy