En otro artículo mostramos que es posible controlar de forma remota diferentes tipos de aplicaciones utilizando el puerto paralelo de una computadora. En él, fue posible obtener 8 líneas de control que podrían usarse para activar los más diversos dispositivos desde un programa. La activación por parte del programa permitiría el uso de un joystick, teclado o incluso un mouse para controlar dispositivos externos. Sin embargo, todavía tenemos otra característica importante para el control de dispositivos de PC que es el puerto serial. De ella precisamente hablaremos en nuestro artículo que cierra la serie.

 

Nota: Artículo de los años 90.

 

El puerto paralelo de una computadora, como se vio en el artículo anterior, proporciona 8 líneas de control a las que se puede acceder a través de un conector que se DB-25 encuentra en la parte posterior de cualquier computadora.

 

Sin embargo, el uso del puerto paralelo en algunas aplicaciones tiene algunas desventajas. Uno de ellos es la necesidad de tener que emplear tantas líneas de señal como dispositivos hay que controlar. Así, si vamos a controlar una interfaz con 8 relés, necesitamos al menos 9 hilos, como se muestra en la figura 1: 8 para las señales y uno para el retorno.

 


 

 

 

El puerto paralelo también tiene la desventaja de que las señales no se pueden enviar muy lejos, un máximo de 3 metros, ya que la línea paralela que las transporta está sujeta a interferencias, atenuación y ruido. La interfaz del objeto controlado no puede estar lejos de la computadora, como se muestra en la figura 2.

 

 


 

 

 

Otra desventaja es el alto costo de un cable largo multiconductor (cable de impresora) y el hecho de que no es muy flexible ni liviano, lo que permite tan pronto como el objeto controlado, si es móvil, tenga una buena libertad de movimiento.

 

Una solución mucho mejor para controlar dispositivos externos de forma remota utilizando la PC es la que hace uso del puerto serie.

 

 

 

El Puerto Serial

 

 

En lugar de enviar los comandos por separado cada uno por un hilo, lo que podemos hacer es poner en cola estos comandos y enviarlos secuencialmente a través de un solo par de conductores, como se muestra en la figura 3.

 

Hasta 100 m
Hasta 100 m

 

 

En estas condiciones decimos que los datos o las señales se envían en serio, lo que requiere tanto un circuito especial para la transmisión como un circuito especial para la recepción.

 

Las computadoras ya tienen estos circuitos y, por lo tanto, tienen un puerto serie que puede enviar datos de esta manera o recibirlos. El puerto serial de una computadora puede usar un conector DB-9 de 9 pinos o un conector DB-25 de 25 pinos con las disposiciones que se muestran en la figura 4.

 


 

 

 

Los puertos serial de una computadora se denominan comúnmente COM1 y COM2.

 

A pesar de la ventaja de utilizar solo dos hilos y también de permitir el uso de cables muy largos, lo que da más movilidad a los dispositivos controlados, especialmente si son móviles, el sistema de envío de señales de control a través del puerto serial tiene algunas desventajas:

 

• La velocidad de transmisión de las señales no es tan alta como la que podemos lograr con el puerto paralelo.

• El circuito para recibir las señales es más complejo de lo que necesitamos para recibir señales del puerto paralelo.

 

Pero aún hay otros puntos positivos a considerar: las señales de un puerto serial se pueden transmitir fácilmente de forma inalámbrica utilizando transmisores de RF o enlaces de infrarrojos, lo que las señales del puerto paralelo no pueden.

 

Veamos cómo se puede utilizar todo esto para utilizar el puerto serial en el desarrollo de proyectos de control remoto.

 

 

 

Las Señales

 

En el puerto paralelo tenemos señales que corresponden a cero volts para el nivel 0 y 5V para el nivel 1.

 

El puerto serial funciona con señales que siguen un estándar internacional llamado RS-232, de ahí que también llamemos al puerto serie RS-232 puerto. De acuerdo con este patrón, las señales deben variar entre dos valores bien definidos de tensiones positivas y negativas, como se muestra en la figura 5.

 

 

 


 

 

 

 

Así, teniendo en cuenta que en el transcurso de una línea larga, la señal puede atenuarse (disminuir en intensidad) se espera que el circuito receptor esté proyectado para operar dentro de una cierta banda de valores que le permita reconocer niveles lógicos.

 

La configuración normal de una interfaz RS-232, o un sistema de comunicaciones por el puerto serie usa 9 señales, pero un solo control remoto, puede usar solo tres líneas de información, como se muestra en la figura 6.

 

 


| Clique na imagem para ampliar |

 

 

 

 

 

 

Por lo tanto, en la práctica, hay circuitos que convierten las señales recibidas de modo que puedan ser lo suficientemente fuertes como para impulsar un circuito decodificador.

 

El circuito decodificador es el UART o Universal Asynchronous Receiver/Transmiter que tiene los bloques que se muestran en la figura 7.

 

 


| Clique na imagem para ampliar |

 

 

 

El propósito del UART es devolver las señales que llegan en serie a su forma paralela para que puedan ser procesadas por los circuitos que conducirán las cargas en un sistema de control remoto.

 

Hay varios UARTs y controladores que son muy comunes en proyectos que involucran comunicación en serie y que se pueden usar en un sistema de control remoto.

 

Tenga en cuenta que estos circuitos se pueden conectar directamente a transceptores que, en lugar de una línea física entre las estaciones de comando y el objeto comandado, pueden emplear señales de radio o infrarrojos (IR), lo que da como resultado un sistema con la estructura que se muestra en la figura 8.

 

 


| Clique na imagem para ampliar |

 

 

Muchos microprocesadores y microcontroladores como los PICs, 80C51, MSP430, COP8 que se pueden utilizar para procesar funciones complejas en un sistema mediante control remoto, tiene entradas compatibles con la interfaz RS-232.

 

Un ejemplo de esto lo da el Basic Stamp, el cual puede ser programado por una entrada Serial desde una PC para poder controlar un robot, como se muestra en la figura 9.

 

 


 

 

 

 

Como podemos ver, este módulo que puede ser programado por RS-232, tiene un módem interno capaz de interpretar sus señales. De esta manera, podemos utilizar dicho dispositivo para controlar de forma remota un robot u otro vehículo.

 

Para trabajar con circuitos digitales a partir de las señales de un puerto serie, primero es necesario convertir las señales que varían entre -7.5 V/-15 V a + 7.5/+ 15V en señales TTL o CMOS. Un circuito muy utilizado para este propósito es el MAX232 que tiene el pinaje que se muestra en la figura 10.

 


| Clique na imagem para ampliar |

 

 

Este dispositivo también realiza la operación inversa gracias a una “charge pump”, bomba de carga que logra aumentar la tensión de 5 V de un circuito TTL a +/-10 V.

 

Para que podamos recuperar las señales de serie a paralelo y viceversa, es necesario utilizar un UART. Uno de los más comunes es el 16550 que tiene el pinaje que se muestra en la figura 11.

 


 

 

 

Note que este UART tiene un bus de datos en el que podemos aplicar tanto los datos en paralelo que deben transmitirse en forma serial como eliminar los datos en paralelo, recibidos en la forma de serial.

 

 

 

Conclusión

 

Trabajar con señales en forma serial es un poco más complejo en forma paralela, aunque hay circuitos integrados que pueden hacer la conversión. Sin embargo, este es el formulario que utilizan normalmente los módems.

 

Cuando hablamos de módems, no es solo del tipo que se usa para acceder a Internet. Se debe utilizar un módem siempre que desee enviar datos digitales en serie, a través de fibras ópticas, líneas telefónicas, líneas eléctricas, rayos infrarrojos o incluso señales de radio.

 

Los lectores interesados ​​en profundizar en el uso de la tecnología digital en el control remoto o el envío de datos a distancia pueden encontrar mucha información avanzada en los libros, ya que este artículo es un paso por encima de lo que pretendemos mostrar en nuestra sección de control remoto.

 

 

 

18.925MBMemory Usage38.81msRequest Duration
Joomla! Version5.2.3
PHP Version8.3.20
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" => 1749104271 "last" => 1749104271...
registry
array:3 [ "data" => [] "initialized" => false "separator" => "." ]
user
array:21 [ "id" => 0 "name" => null "username" => null "email" => null "password" => "***r...
  • afterLoad (85.36KB) (201μs)
  • afterInitialise (1.14MB) (3.14ms)
  • afterRoute (179.21KB) (830μs)
  • beforeRenderComponent com_content (100.98KB) (379μs)
  • Before Access::preloadComponents (all components) (33.45KB) (157μs)
  • After Access::preloadComponents (all components) (107.06KB) (349μs)
  • Before Access::preloadPermissions (com_content) (1.57KB) (7μs)
  • After Access::preloadPermissions (com_content) (16.22MB) (19.8ms)
  • Before Access::getAssetRules (id:26947 name:com_content.article.30589) (514.65KB) (784μs)
  • After Access::getAssetRules (id:26947 name:com_content.article.30589) (7.38KB) (37μs)
  • afterRenderComponent com_content (406.43KB) (5.81ms)
  • afterDispatch (2.25KB) (43μs)
  • beforeRenderRawModule mod_articles_category (Banco de Circuitos) (358.53KB) (1.48ms)
  • afterRenderRawModule mod_articles_category (Banco de Circuitos) (79.43KB) (308μs)
  • beforeRenderRawModule mod_finder (Busca_inteligente) (5.9KB) (87μs)
  • afterRenderRawModule mod_finder (Busca_inteligente) (64.9KB) (1.14ms)
  • beforeRenderModule mod_articles_category (Banco de Circuitos) (9.27KB) (565μs)
  • afterRenderModule mod_articles_category (Banco de Circuitos) (5.47KB) (70μs)
  • beforeRenderModule mod_finder (Busca_inteligente) (6.64KB) (197μs)
  • afterRenderModule mod_finder (Busca_inteligente) (4.75KB) (48μs)
  • afterRender (265.75KB) (3.28ms)
  • 1 x After Access::preloadPermissions (com_content) (16.22MB) (51.02%)
    19.80ms
    1 x afterRenderComponent com_content (406.43KB) (14.98%)
    5.81ms
    1 x afterRender (265.75KB) (8.45%)
    3.28ms
    1 x afterInitialise (1.14MB) (8.08%)
    3.14ms
    1 x beforeRenderRawModule mod_articles_category (Banco de Circuitos) (358.53KB) (3.81%)
    1.48ms
    1 x afterRenderRawModule mod_finder (Busca_inteligente) (64.9KB) (2.93%)
    1.14ms
    1 x afterRoute (179.21KB) (2.14%)
    830μs
    1 x Before Access::getAssetRules (id:26947 name:com_content.article.30589) (514.65KB) (2.02%)
    784μs
    1 x beforeRenderModule mod_articles_category (Banco de Circuitos) (9.27KB) (1.46%)
    565μs
    1 x beforeRenderComponent com_content (100.98KB) (0.98%)
    379μs
    1 x After Access::preloadComponents (all components) (107.06KB) (0.9%)
    349μs
    1 x afterRenderRawModule mod_articles_category (Banco de Circuitos) (79.43KB) (0.79%)
    308μs
    1 x afterLoad (85.36KB) (0.52%)
    201μs
    1 x beforeRenderModule mod_finder (Busca_inteligente) (6.64KB) (0.51%)
    197μs
    1 x Before Access::preloadComponents (all components) (33.45KB) (0.4%)
    157μs
    1 x beforeRenderRawModule mod_finder (Busca_inteligente) (5.9KB) (0.22%)
    87μs
    1 x afterRenderModule mod_articles_category (Banco de Circuitos) (5.47KB) (0.18%)
    70μs
    1 x afterRenderModule mod_finder (Busca_inteligente) (4.75KB) (0.12%)
    48μs
    1 x afterDispatch (2.25KB) (0.11%)
    43μs
    1 x After Access::getAssetRules (id:26947 name:com_content.article.30589) (7.38KB) (0.1%)
    37μs
    1 x Before Access::preloadPermissions (com_content) (1.57KB) (0.02%)
    7μs
21 statements were executed, 5 of which were duplicates, 16 unique10.87ms1.58MB
  • SELECT @@SESSION.sql_mode;29μs968B/libraries/src/Session/MetadataManager.php:184Copy
  • SELECT `session_id` FROM `incbmx_session` WHERE `session_id` = :session_id LIMIT 169μ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)140μs944BParams/libraries/src/Session/MetadataManager.php:260Copy
  • SELECT `id`,`rules` FROM `incbmx_viewlevels`42μ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` = :guest63μ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`219μ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)203μ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.75ms1.48MBParams/libraries/src/Access/Access.php:301Copy
  • SHOW FULL COLUMNS FROM `incbmx_content`321μs2.39KB/libraries/vendor/joomla/database/src/Mysqli/MysqliDriver.php:587Copy
  • UPDATE `incbmx_content` SET `hits` = (`hits` + 1) WHERE `id` = '30589'123μ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)156μ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`173μ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)289μ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 ASC383μ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`180μs3.92KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT `name`,`element` FROM `incbmx_extensions` WHERE `type` = 'plugin' AND `folder` = 'finder' AND `enabled` = 1160μ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)94μs648B/administrator/components/com_finder/src/Indexer/Taxonomy.php:325Copy
  • SELECT * FROM `incbmx_schemaorg` WHERE `itemId` = :itemId AND `context` = :context62μ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)166μ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` = 175μs1.37KBParams/administrator/components/com_scheduler/src/Model/TasksModel.php:465Copy