{"id":3518,"date":"2024-03-20T21:49:59","date_gmt":"2024-03-20T21:49:59","guid":{"rendered":"https:\/\/brandon-engineer.com\/?p=3518"},"modified":"2024-03-20T22:02:39","modified_gmt":"2024-03-20T22:02:39","slug":"como-optimizar-tu-codigo-en-scl","status":"publish","type":"post","link":"https:\/\/brandon-engineer.com\/en\/como-optimizar-tu-codigo-en-scl\/","title":{"rendered":"Como optimizar tu c\u00f3digo en SCL"},"content":{"rendered":"<h2 class=\"wp-block-heading\" id=\"h-introduccion\">Introduction<\/h2>\n\n\n\n<p>Esta tarde estaba aburrido en casa y puse a prueba una idea que lleva tiempo rond\u00e1ndome la cabeza: &#8220;\u00bfEs m\u00e1s optimo usar una m\u00e1quina de estados que un sistema tradicional?&#8221; Mi suposici\u00f3n es que al usar una m\u00e1quina de estados esta saltar\u00e1 el c\u00f3digo que no se usa y permitir\u00e1 ignorar el c\u00f3digo que no se utilizar\u00e1 por lo que podr\u00edas optimizarlo para no tener a tu maquina ahog\u00e1ndose.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-como-se-ha-realizado\">\u00bfC\u00f3mo se ha realizado?<\/h2>\n\n\n\n<p>Para esta prueba decid\u00ed ejecutarla en el entorno de Twincat de\u00a0<a href=\"http:\/\/beckhoff.com\">Beckhoff Automation<\/a>, que me da control del conocimiento de cada n\u00facleo y compararlo en el mismo instante de tiempo. Prepar\u00e9 los FB, al final llam\u00e9 a 300 FB por cada una de las tareas con un tiempo de ejecuci\u00f3n de 0.5ms y compar\u00e9 los rendimientos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-llamada-de-las-tareas\">Llamada de las tareas<\/h2>\n\n\n\n<p>Para hacer una carga grande de recursos se ha llamado a 300 FB para que sea apreciable los consumos<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bSwitching(bStart=>bStart);\r\n\r\nFOR counter:=1 TO 299 BY 1 DO\r\n\r\n    fb&#91;counter](bInputDown:=bStart);\r\n\r\nEND_FOR;\r<\/code><\/pre>\n\n\n\n<p>&#8220;bStart&#8221; es un booleano que cambia de true a false cada segundo<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-con-estados\">Con estados<\/h2>\n\n\n\n<p>El c\u00f3digo para la function block <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>FUNCTION_BLOCK FB_WaitandWriteState\r\nVAR_INPUT\r\n\tbInputUp : BOOL; \/\/ Entrada para subir\r\n    bInputDown : BOOL; \/\/ Entrada para bajar\r\nEND_VAR\r\nVAR_OUTPUT\r\n\tbOutputUp : BOOL := FALSE; \/\/ Salida para subir\r\n    bOutputDown : BOOL := FALSE; \/\/ Salida para bajar\r\nEND_VAR\r\nVAR\r\n    Temporizador : TON := (PT:= T#60S); \/\/ Temporizador de 60 segundos\r\n    TemporizadorEspera : TON := (PT:= T#1S); \/\/ Temporizador de espera de 1 segundo\r\n    EstadoMaquinaActual : INT:=0;\r\nEND_VAR\r\n\t<\/code><\/pre>\n\n\n\n<p>El c\u00f3digo usado para el programa ha sido:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CASE EstadoMaquinaActual OF\r\n    \/\/ Estado inicial, esperando la entrada\r\n    0:\r\n        IF bInputUp THEN\r\n            EstadoMaquinaActual := 10; \/\/ Cambiar al estado de subir\r\n        ELSIF bInputDown THEN\r\n            EstadoMaquinaActual := 20; \/\/ Cambiar al estado de bajar\r\n        END_IF\r\n    \/\/ Estado de subir\r\n    10:\r\n        bOutputUp := TRUE; \/\/ Activar la salida de subir\r\n        Temporizador(IN:= TRUE); \/\/ Iniciar temporizador de 60 segundos\r\n        IF Temporizador.Q THEN\r\n            EstadoMaquinaActual := 30; \/\/ Cambiar al estado de espera\r\n        END_IF\r\n    \/\/ Estado de bajar\r\n    20:\r\n        bOutputDown := TRUE; \/\/ Activar la salida de bajar\r\n        Temporizador(IN:= TRUE); \/\/ Iniciar temporizador de 60 segundos\r\n        IF Temporizador.Q THEN\r\n            EstadoMaquinaActual := 30; \/\/ Cambiar al estado de espera\r\n        END_IF\r\n    \/\/ Estado de espera\r\n    30:\r\n\tTemporizadorEspera(IN:= TRUE);\r\n        IF TemporizadorEspera.Q THEN\r\n            \/\/ Reiniciar salidas y temporizadores\r\n            bOutputUp := FALSE;\r\n            bOutputDown := FALSE;\r\n            Temporizador(IN:= FALSE);\r\n            TemporizadorEspera(IN:= FALSE);\r\n            \/\/ Volver al estado inicial\r\n            EstadoMaquinaActual := 0;\r\n        END_IF\r\nEND_CASE<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-sin-estados\">Sin estados<\/h2>\n\n\n\n<p>Este es el c\u00f3digo de la tarea:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>FUNCTION_BLOCK FB_Wait_andWrite_NON_State\r\nVAR_INPUT\r\n\tbInputUp : BOOL; \/\/ Entrada para subir\r\n    bInputDown : BOOL; \/\/ Entrada para bajar\r\nEND_VAR\r\nVAR_OUTPUT\r\n\tbOutputUp : BOOL := FALSE; \/\/ Salida para subir\r\n    bOutputDown : BOOL := FALSE; \/\/ Salida para bajar\r\nEND_VAR\r\nVAR\r\n    Temporizador : TOF := (PT:= T#60S); \/\/ Temporizador de 60 segundos\r\n    TemporizadorEspera : TON := (PT:= T#1s); \/\/ Temporizador de espera de 1 segundo\r\n\t\r\n\tbBajando: BOOL;\r\n\tbSubiendo: BOOL;\r\nEND_VAR\r<\/code><\/pre>\n\n\n\n<p>El c\u00f3digo para la function block<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Temporizador(IN:= bSubiendo OR bBajando); \/\/ Iniciar temporizador si se est\u00e1 subiendo o bajando\r\n\r\nbSubiendo := bInputUp AND NOT bSubiendo; \/\/ Marcar subida si no estaba subiendo antes\r\nbBajando := bInputDown AND NOT bBajando; \/\/ Marcar bajada si no estaba bajando antes\r\n\r\nbOutputUp := bSubiendo AND NOT Temporizador.Q; \/\/ Activar salida de subir mientras no se exceda el temporizador\r\nbOutputDown := bBajando AND NOT Temporizador.Q; \/\/ Activar salida de bajar mientras no se exceda el temporizador\r\n\r\nIF Temporizador.Q THEN\r\n    bSubiendo := FALSE; \/\/ Reiniciar flag de subir\r\n    bBajando := FALSE; \/\/ Reiniciar flag de bajar\r\n    TemporizadorEspera(IN:= TRUE); \/\/ Iniciar temporizador de espera de 1 segundo\r\nEND_IF\r\n\r\nTemporizadorEspera(IN:= TemporizadorEspera.Q); \/\/ Reiniciar temporizador de espera si se complet\u00f3<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conclusion\">Conclusi\u00f3n<\/h2>\n\n\n\n<p>Como supuse es un aumento de rendimiento considerable (el software sin m\u00e1quina de estados consume 3 veces m\u00e1s). Adjunto las fotos de los FB, el programa y las gr\u00e1ficas de los rendimientos.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1\">\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"800\" height=\"500\" data-id=\"3523\" src=\"https:\/\/brandon-engineer.com\/wp-content\/uploads\/2024\/03\/RENDIMIENTO-min-edited.jpg\" alt=\"\" class=\"wp-image-3523\" srcset=\"https:\/\/brandon-engineer.com\/wp-content\/uploads\/2024\/03\/RENDIMIENTO-min-edited.jpg 800w, https:\/\/brandon-engineer.com\/wp-content\/uploads\/2024\/03\/RENDIMIENTO-min-edited-300x188.jpg 300w, https:\/\/brandon-engineer.com\/wp-content\/uploads\/2024\/03\/RENDIMIENTO-min-edited-768x480.jpg 768w, https:\/\/brandon-engineer.com\/wp-content\/uploads\/2024\/03\/RENDIMIENTO-min-edited-600x375.jpg 600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/figure>\n<\/figure>\n\n\n\n<p>\u00bfY ustedes? \u00bfLo sab\u00edan ya? \u00bfSe imaginaban el resultado como yo? \u00bfCre\u00e9is que algo ha fallado en mi evaluaci\u00f3n?<\/p>\n\n\n\n<p>Yo la verdad es que me ha sorprendido los resultados, no me esperaba tanto y menos para una aplicaci\u00f3n tan sencilla, son unos temporizadores y unos IF<\/p>\n\n\n\n<p>Espero sus comentarios, chicos.<\/p>","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n Esta tarde estaba aburrido en casa y puse a prueba una idea que lleva tiempo rond\u00e1ndome la cabeza: &#8220;\u00bfEs m\u00e1s optimo usar una m\u00e1quina de estados que un sistema tradicional?&#8221; Mi suposici\u00f3n es que al usar una m\u00e1quina de estados esta saltar\u00e1 el c\u00f3digo que no se usa y permitir\u00e1 ignorar el c\u00f3digo que&#8230;<\/p>","protected":false},"author":1,"featured_media":3524,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[56,1],"tags":[],"class_list":["post-3518","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programacion","category-uncategorized","th-blog blog-single"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v22.0 (Yoast SEO v22.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Como optimizar tu c\u00f3digo en SCL - Brandon Engineer<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/brandon-engineer.com\/en\/como-optimizar-tu-codigo-en-scl\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Como optimizar tu c\u00f3digo en SCL\" \/>\n<meta property=\"og:description\" content=\"Introducci\u00f3n Esta tarde estaba aburrido en casa y puse a prueba una idea que lleva tiempo rond\u00e1ndome la cabeza: &#8220;\u00bfEs m\u00e1s optimo usar una m\u00e1quina de estados que un sistema tradicional?&#8221; Mi suposici\u00f3n es que al usar una m\u00e1quina de estados esta saltar\u00e1 el c\u00f3digo que no se usa y permitir\u00e1 ignorar el c\u00f3digo que...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/brandon-engineer.com\/en\/como-optimizar-tu-codigo-en-scl\/\" \/>\n<meta property=\"og:site_name\" content=\"Brandon Engineer\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-20T21:49:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-20T22:02:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/brandon-engineer.com\/wp-content\/uploads\/2024\/03\/estados-vs-sin-estados.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"789\" \/>\n\t<meta property=\"og:image:height\" content=\"400\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Brandon\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Brandon\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/brandon-engineer.com\/como-optimizar-tu-codigo-en-scl\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/brandon-engineer.com\/como-optimizar-tu-codigo-en-scl\/\"},\"author\":{\"name\":\"Brandon\",\"@id\":\"https:\/\/brandon-engineer.com\/#\/schema\/person\/46ee48a398d58bbbf72a86521b95229b\"},\"headline\":\"Como optimizar tu c\u00f3digo en SCL\",\"datePublished\":\"2024-03-20T21:49:59+00:00\",\"dateModified\":\"2024-03-20T22:02:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/brandon-engineer.com\/como-optimizar-tu-codigo-en-scl\/\"},\"wordCount\":308,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/brandon-engineer.com\/#\/schema\/person\/46ee48a398d58bbbf72a86521b95229b\"},\"articleSection\":[\"Programacion\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/brandon-engineer.com\/como-optimizar-tu-codigo-en-scl\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/brandon-engineer.com\/como-optimizar-tu-codigo-en-scl\/\",\"url\":\"https:\/\/brandon-engineer.com\/como-optimizar-tu-codigo-en-scl\/\",\"name\":\"Como optimizar tu c\u00f3digo en SCL - Brandon Engineer\",\"isPartOf\":{\"@id\":\"https:\/\/brandon-engineer.com\/#website\"},\"datePublished\":\"2024-03-20T21:49:59+00:00\",\"dateModified\":\"2024-03-20T22:02:39+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/brandon-engineer.com\/como-optimizar-tu-codigo-en-scl\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/brandon-engineer.com\/como-optimizar-tu-codigo-en-scl\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/brandon-engineer.com\/como-optimizar-tu-codigo-en-scl\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\/\/brandon-engineer.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Como optimizar tu c\u00f3digo en SCL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/brandon-engineer.com\/#website\",\"url\":\"https:\/\/brandon-engineer.com\/\",\"name\":\"Brandon Engineer\",\"description\":\"Blog para compartir sobre programaci\u00f3n y tecnolog\u00eda industrial\",\"publisher\":{\"@id\":\"https:\/\/brandon-engineer.com\/#\/schema\/person\/46ee48a398d58bbbf72a86521b95229b\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/brandon-engineer.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/brandon-engineer.com\/#\/schema\/person\/46ee48a398d58bbbf72a86521b95229b\",\"name\":\"Brandon\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/brandon-engineer.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/brandon-engineer.com\/wp-content\/uploads\/2024\/03\/cropped-favicon-2.ico\",\"contentUrl\":\"https:\/\/brandon-engineer.com\/wp-content\/uploads\/2024\/03\/cropped-favicon-2.ico\",\"width\":48,\"height\":48,\"caption\":\"Brandon\"},\"logo\":{\"@id\":\"https:\/\/brandon-engineer.com\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/brandon-engineer.com\",\"https:\/\/www.linkedin.com\/in\/brandon-ramon-navarro\/\"],\"gender\":\"Hombre\",\"knowsLanguage\":[\"espa\u00f1ol\",\"ingl\u00e9s\"],\"jobTitle\":\"Ingeniero de automatizaci\u00f3n\",\"url\":\"https:\/\/brandon-engineer.com\/en\/author\/brandon\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Como optimizar tu c\u00f3digo en SCL - Brandon Engineer","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/brandon-engineer.com\/en\/como-optimizar-tu-codigo-en-scl\/","og_locale":"en_US","og_type":"article","og_title":"Como optimizar tu c\u00f3digo en SCL","og_description":"Introducci\u00f3n Esta tarde estaba aburrido en casa y puse a prueba una idea que lleva tiempo rond\u00e1ndome la cabeza: &#8220;\u00bfEs m\u00e1s optimo usar una m\u00e1quina de estados que un sistema tradicional?&#8221; Mi suposici\u00f3n es que al usar una m\u00e1quina de estados esta saltar\u00e1 el c\u00f3digo que no se usa y permitir\u00e1 ignorar el c\u00f3digo que...","og_url":"https:\/\/brandon-engineer.com\/en\/como-optimizar-tu-codigo-en-scl\/","og_site_name":"Brandon Engineer","article_published_time":"2024-03-20T21:49:59+00:00","article_modified_time":"2024-03-20T22:02:39+00:00","og_image":[{"width":789,"height":400,"url":"https:\/\/brandon-engineer.com\/wp-content\/uploads\/2024\/03\/estados-vs-sin-estados.jpg","type":"image\/jpeg"}],"author":"Brandon","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Brandon","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/brandon-engineer.com\/como-optimizar-tu-codigo-en-scl\/#article","isPartOf":{"@id":"https:\/\/brandon-engineer.com\/como-optimizar-tu-codigo-en-scl\/"},"author":{"name":"Brandon","@id":"https:\/\/brandon-engineer.com\/#\/schema\/person\/46ee48a398d58bbbf72a86521b95229b"},"headline":"Como optimizar tu c\u00f3digo en SCL","datePublished":"2024-03-20T21:49:59+00:00","dateModified":"2024-03-20T22:02:39+00:00","mainEntityOfPage":{"@id":"https:\/\/brandon-engineer.com\/como-optimizar-tu-codigo-en-scl\/"},"wordCount":308,"commentCount":0,"publisher":{"@id":"https:\/\/brandon-engineer.com\/#\/schema\/person\/46ee48a398d58bbbf72a86521b95229b"},"articleSection":["Programacion"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/brandon-engineer.com\/como-optimizar-tu-codigo-en-scl\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/brandon-engineer.com\/como-optimizar-tu-codigo-en-scl\/","url":"https:\/\/brandon-engineer.com\/como-optimizar-tu-codigo-en-scl\/","name":"Como optimizar tu c\u00f3digo en SCL - Brandon Engineer","isPartOf":{"@id":"https:\/\/brandon-engineer.com\/#website"},"datePublished":"2024-03-20T21:49:59+00:00","dateModified":"2024-03-20T22:02:39+00:00","breadcrumb":{"@id":"https:\/\/brandon-engineer.com\/como-optimizar-tu-codigo-en-scl\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/brandon-engineer.com\/como-optimizar-tu-codigo-en-scl\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/brandon-engineer.com\/como-optimizar-tu-codigo-en-scl\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/brandon-engineer.com\/"},{"@type":"ListItem","position":2,"name":"Como optimizar tu c\u00f3digo en SCL"}]},{"@type":"WebSite","@id":"https:\/\/brandon-engineer.com\/#website","url":"https:\/\/brandon-engineer.com\/","name":"Brandon Engineer","description":"Blog para compartir sobre programaci\u00f3n y tecnolog\u00eda industrial","publisher":{"@id":"https:\/\/brandon-engineer.com\/#\/schema\/person\/46ee48a398d58bbbf72a86521b95229b"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/brandon-engineer.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/brandon-engineer.com\/#\/schema\/person\/46ee48a398d58bbbf72a86521b95229b","name":"Brandon","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/brandon-engineer.com\/#\/schema\/person\/image\/","url":"https:\/\/brandon-engineer.com\/wp-content\/uploads\/2024\/03\/cropped-favicon-2.ico","contentUrl":"https:\/\/brandon-engineer.com\/wp-content\/uploads\/2024\/03\/cropped-favicon-2.ico","width":48,"height":48,"caption":"Brandon"},"logo":{"@id":"https:\/\/brandon-engineer.com\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/brandon-engineer.com","https:\/\/www.linkedin.com\/in\/brandon-ramon-navarro\/"],"gender":"Hombre","knowsLanguage":["espa\u00f1ol","ingl\u00e9s"],"jobTitle":"Ingeniero de automatizaci\u00f3n","url":"https:\/\/brandon-engineer.com\/en\/author\/brandon\/"}]}},"_links":{"self":[{"href":"https:\/\/brandon-engineer.com\/en\/wp-json\/wp\/v2\/posts\/3518","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/brandon-engineer.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/brandon-engineer.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/brandon-engineer.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/brandon-engineer.com\/en\/wp-json\/wp\/v2\/comments?post=3518"}],"version-history":[{"count":2,"href":"https:\/\/brandon-engineer.com\/en\/wp-json\/wp\/v2\/posts\/3518\/revisions"}],"predecessor-version":[{"id":3525,"href":"https:\/\/brandon-engineer.com\/en\/wp-json\/wp\/v2\/posts\/3518\/revisions\/3525"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/brandon-engineer.com\/en\/wp-json\/wp\/v2\/media\/3524"}],"wp:attachment":[{"href":"https:\/\/brandon-engineer.com\/en\/wp-json\/wp\/v2\/media?parent=3518"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/brandon-engineer.com\/en\/wp-json\/wp\/v2\/categories?post=3518"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/brandon-engineer.com\/en\/wp-json\/wp\/v2\/tags?post=3518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}