{"id":285,"date":"2021-03-21T10:32:00","date_gmt":"2021-03-21T10:32:00","guid":{"rendered":"https:\/\/imperix.com\/doc\/?p=285"},"modified":"2025-12-19T10:50:44","modified_gmt":"2025-12-19T10:50:44","slug":"simulation-essentials-plecs","status":"publish","type":"post","link":"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs","title":{"rendered":"Simulation essentials with PLECS"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 ez-toc-wrap-right-text counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs\/#Fundamental-concepts\" >Fundamental concepts<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs\/#Working-principle-of-the-main-blocks\" >Working principle of the main blocks<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs\/#1-Configuration-block-CONFIG\" >1) Configuration block (CONFIG)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs\/#2-Control-Task-Trigger\" >2) Control Task Trigger<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs\/#3-Analog-to-digital-converter-input-ADC\" >3) Analog-to-digital converter input (ADC)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs\/#4-Pulse-width-modulators-xx-PWM\" >4) Pulse-width modulators (xx-PWM)<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs\/#Further-readings\" >Further readings<\/a><\/li><\/ul><\/nav><\/div>\n\n<p>This note provides in-depth content for an accurate and efficient offline simulation of an imperix controller and the corresponding plant model using <a href=\"http:\/\/imperix.ch\/software\/acg-sdk\">ACG SDK<\/a> on PLECS.<\/p>\n\n\n\n<p>Recommended articles related to the ACG workflow are shown below. A series of video tutorials is also available with similar content.<\/p>\n\n\n\n<style>\n  .tech-table {\n    border-collapse: collapse;\n    width: 100%;\n    max-width: 800px;\n    color: #000;\n  }\n\n  .tech-table th {\n    text-align: left;\n    font-weight: bold;\n    padding: 6px;\n    font-size: 18px;\n  }\n\n  \/* The first column header is empty in the image *\/\n  .tech-table th:f<style>\n  .tech-table {\n    border-collapse: collapse;\n    width: 100%;\n    max-width: 800px;\n    color: #000;\n  }\n\n  .tech-table th {\n    text-align: left;\n    font-weight: bold;\n    font-style: italic;\n    padding: 6px;\n    font-size: 18px;\n  }\n\n  .tech-table th:first-child {\n    width: 20%;\n  }\n\n  .tech-table td {\n    background-color: #f2f2f2;\n    padding: 8px;\n    vertical-align: top;\n    border: 4px solid white;\n  }\n\n  \/* UPDATED PN styling *\/\n  .pn-code {\n    color: #d32f2f;\n    display: inline;\n    margin-left: 6px;\n    font-weight: normal;\n    white-space: nowrap;\n  }\n\n  \/* UPDATED Video styling *\/\n  .video-code {\n    color: #d32f2f;\n    display: inline;\n    margin-left: 6px;\n    font-weight: normal;\n    white-space: nowrap;\n  }\n  .video-code::before {\n  content: \"\ud83c\udfac \";\n  }\n\n.cell-highlight {\n  outline: 3px solid #d32f2f;\n  outline-offset: -4px;\n}\n<\/style>\n\n<table class=\"tech-table\">\n  <thead>\n    <tr>\n      <th>Step<\/th>\n      <th>Documentation<\/th>\n      <th><\/th>\n      <th>Videos<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>1. Software installation<\/td>\n      <td colspan=\"2\">\n        Installation guide for the ACG SDK\n        <a href=\"https:\/\/imperix.com\/doc\/help\/installation-guide-acg-sdk\" class=\"pn-code\">PN133<\/a>      <\/td>\n      <td>\n        N\/A\n      <\/td>\n    <\/tr>\n\n    <tr>\n      <td>2. Getting started<\/td>\n      <td colspan=\"2\">\n        Getting started with the ACG SDK\n        <a href=\"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk\" class=\"pn-code\">PN134<\/a> \n      <td>\n        Create the model\n        <a href=\"https:\/\/www.youtube.com\/watch?v=8TBpIigcN2w\" class=\"video-code\">Video 1<\/a>\n      <\/td>\n    <\/tr>\n\n    <tr>\n      <td>3. Running simulations<\/td>\n      <td>\n        Simulation essentials with Simulink\n        <a href=\"https:\/\/imperix.com\/doc\/help\/simulation-essentials-simulink\" class=\"pn-code\">PN135<\/a> \n      <\/td>\n      <td class=\"cell-highlight\">\n        Simulation essentials with PLECS\n        <a href=\"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs\" class=\"pn-code\">PN137<\/a>       \n      <td>\n        Simulate it\n        <a href=\"https:\/\/www.youtube.com\/watch?v=HklMDtAADUU\" class=\"video-code\">Video 2<\/a>\n      <\/td>\n    <\/tr>\n\n    <tr>\n      <td>4. Device programming<\/td>\n      <td colspan=\"2\">\n        Programming and operating imperix controllers\n        <a href=\"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers\" class=\"pn-code\">PN138<\/a> \n      <\/td>\n      <td rowspan=\"2\">\n        Generate code\n        <a href=\"https:\/\/www.youtube.com\/watch?v=6dGeExgX-rE\" class=\"video-code\">Video 3<\/a>\n      <\/td>\n    <\/tr>\n\n    <tr>\n      <td>5. Monitoring<\/td>\n      <td colspan=\"2\">\n        Cockpit user guide\n        <a href=\"https:\/\/imperix.com\/doc\/help\/cockpit-user-guide\" class=\"pn-code\">PN300<\/a>\n      <\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-fundamental-concepts\"><span class=\"ez-toc-section\" id=\"Fundamental-concepts\"><\/span>Fundamental concepts<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>The offline simulation is meant to reproduce as faithfully as possible the behavior of the overall system (controller and plant). To that end, the PLECS blockset (part of the ACG SDK) was designed with the following guidelines in mind:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The <strong>plant <\/strong>quantities are to be modeled with <strong>continuous <\/strong>signals\n<ul class=\"wp-block-list\">\n<li>This requires a <strong>variable-step solver<\/strong><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>The <strong>control <\/strong>algorithm is modeled with <strong>discrete <\/strong>signals, sampled at a rate equal to the interrupt frequency, and with a phase corresponding to the sampling phase.\n<ul class=\"wp-block-list\">\n<li>The \u201cControl Task Trigger\u201d block used within an atomic control subsystem forces the discretization of the control algorithm to the interrupt frequency<\/li>\n\n\n\n<li>This is modeled accurately with the variable-step solver, as it is forced to take a major step at least at each interrupt execution<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>The behavior of the real PWM generators is modeled, in particular:\n<ul class=\"wp-block-list\">\n<li>The frequency and phase of the carrier<\/li>\n\n\n\n<li>The instants when the duty-cycle and phase parameters are updated (at zero and\/or max of the carrier)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>The duration of the algorithm execution is modeled\n<ul class=\"wp-block-list\">\n<li>This induces a delay between the start of the interruption and the availability of the new data<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>With all the phases and delays modeled accurately, the simulated controller has the same dynamics as the real controller, which allows tuning the control parameters during the offline simulation.<\/p>\n\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-info\" role=\"alert\">The imperix blockset is already implemented in a way that automatically follows these guidelines.<br>As such, no particular action is required from the user.<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-working-principle-of-the-main-blocks\"><span class=\"ez-toc-section\" id=\"Working-principle-of-the-main-blocks\"><\/span>Working principle of the main blocks<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>The four fundamental blocks are the 1) Config, 2) Control Task Trigger, 3) ADC, and 4) PWM blocks. Most applications can work with those four blocks only, as in the standard configuration shown below.<br><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"325\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-1024x325.jpeg\" alt=\"Typical content of the controller model\" class=\"wp-image-289\" style=\"width:800px\" title=\"Product notes &gt; PN137: Simulation essentials with PLECS &gt; PN137_sworking_principle_of_the_main_blocks.jpg\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-1024x325.jpeg 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-300x95.jpeg 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-768x244.jpeg 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image.jpeg 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Typical content of the controller model<\/figcaption><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"h-1-configuration-block-config\"><span class=\"ez-toc-section\" id=\"1-Configuration-block-CONFIG\"><\/span>1) Configuration block (CONFIG)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>The CONFIG block configures <code>CLOCK_0<\/code> frequency and oversees the configuration of the main interrupt frequency. <code>CLOCK_0<\/code> serves as a time reference for different peripherals such as ADC or PWM.<\/p>\n\n\n\n<p>Four parameters are available to configure <code>CLOCK_0<\/code> and the execution of the main interrupt:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>The frequency of <code>CLOCK_0<\/code><\/li>\n\n\n\n<li>The phase of the main interrupt<\/li>\n\n\n\n<li>The postscaler of the main interrupt<\/li>\n\n\n\n<li>The \u201ctotal cycle delay\u201d (explained below)<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1017\" height=\"379\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-1.jpeg\" alt=\"Configuration block content\" class=\"wp-image-290\" style=\"width:600px\" title=\"Product notes &gt; PN137: Simulation essentials with PLECS &gt; config_new_final.jpg\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-1.jpeg 1017w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-1-300x112.jpeg 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-1-768x286.jpeg 768w\" sizes=\"auto, (max-width: 1017px) 100vw, 1017px\" \/><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1002\" height=\"1024\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-2-1002x1024.jpeg\" alt=\"Configuration block signals\" class=\"wp-image-291\" style=\"width:340px\" title=\"Product notes &gt; PN137: Simulation essentials with PLECS &gt; Simulation_schemes.jpg\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-2-1002x1024.jpeg 1002w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-2-293x300.jpeg 293w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-2-768x785.jpeg 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-2.jpeg 1252w\" sizes=\"auto, (max-width: 1002px) 100vw, 1002px\" \/><\/figure>\n<\/div>\n\n\n<p>The CONFIG block outputs three different configuration signals (brown dashed wires):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A main clock signal (<code>CLOCK_0<\/code>) with a period \\(T_{clk0}=1\/f_{clk0}\\) and a phase of zero. This output can be connected to a PWM modulator block to define its switching frequency.<\/li>\n\n\n\n<li>A sampling clock, generated from <code>CLOCK_0<\/code> with the addition of the sampling phase and the postscaler parameters. This output can be connected to an ADC block to define its sampling instants. The sampling period is defined by:<\/li>\n<\/ul>\n\n\n\n<p>$$T_s = \\left\\{\\begin{array}{ll} T_{\\text{clk0}} &amp; \\text{if postscaler = 0}\\\\ 2\\cdot \\text{postscaler}\\cdot T_{\\text{clk0}} &amp; \\text{otherwise} \\end{array}\\right.$$<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A control task signal, generated from the sampling clock, with the addition of the \u201ctotal cycle delay\u201d parameter. This corresponds to an \u201cend of interrupt\u201d signal and must be connected to the \u201cControl Task Trigger\u201d block. The addition of a cycle delay allows the simulation to correctly model the effect of the interrupt execution time and the different read\/write delays, as explained below.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-total-cycle-delay\">Total cycle delay<\/h4>\n\n\n\n<p>The <em>total cycle delay<\/em> is a parameter used in simulation only. It is introduced to simulate the delay from the moment the ADCs are sampled to the moment the calculated duty-cycle is propagated to the FPGA PWM management. It takes into account the ADC sampling time (e.g. 2 \u00b5s on a B-Box RCP), the control algorithm execution time, and the FPGA read and write transfer time.<\/p>\n\n\n\n<p>The total cycle delay is displayed in the \u201cTarget info\u201d pane of <a href=\"\/software\/cockpit\">Cockpit<\/a> (formerly <a href=\"https:\/\/imperix.com\/doc\/help\/timing-info-tab\">Timing Info tab<\/a> in BB Control) when a code is running (requires software above ACG SDK v3.6). In previous versions, an estimation of the total cycle delay can be derived from the CPU load displayed by BB Control, by multiplying it by the interrupt period.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"465\" height=\"66\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/04\/CPU_load_cockpit-4.png\" alt=\"\" class=\"wp-image-12166\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/04\/CPU_load_cockpit-4.png 465w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/04\/CPU_load_cockpit-4-300x43.png 300w\" sizes=\"auto, (max-width: 465px) 100vw, 465px\" \/><figcaption class=\"wp-element-caption\">Display of the CPU load in imperix Cockpit<\/figcaption><\/figure>\n<\/div>\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-info\" role=\"alert\">The\u00a0<a href=\"https:\/\/imperix.com\/doc\/help\/discrete-control-delay\">PN142<\/a> provides more details on the various delays and their effect on the control dynamics.<\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-2-control-task-trigger\"><span class=\"ez-toc-section\" id=\"2-Control-Task-Trigger\"><\/span>2) Control Task Trigger<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>The Control task trigger block is used to model the execution of the control algorithm within an interrupt routine. Therefore, the discretization of this subsystem and all block contained within are forced at the main interrupt frequency. The Forward Euler method is used to discretize continuous states within the subsystem (it forces the subsystem to be \u201catomic\u201d).<\/p>\n\n\n\n<p>As an example, the following two systems have strictly identical behaviors when the sample time of the discrete integrator and the Control Task trigger are set to <code>1\/f_clk0<\/code>:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"397\" height=\"177\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-36.png\" alt=\"Continuous control blocks\" class=\"wp-image-293\" title=\"Product notes &gt; PN137: Simulation essentials with PLECS &gt; PLECS_continuous.png\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-36.png 397w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-36-300x134.png 300w\" sizes=\"auto, (max-width: 397px) 100vw, 397px\" \/><figcaption class=\"wp-element-caption\">When continuous functions are used within an atomic subsystem containing a Control Task Trigger, its execution is discretized.<\/figcaption><\/figure>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"177\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-37.png\" alt=\"Discrete control blocks\" class=\"wp-image-294\" title=\"Product notes &gt; PN137: Simulation essentials with PLECS &gt; PLECS_discrete.png\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-37.png 400w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-37-300x133.png 300w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><figcaption class=\"wp-element-caption\">When continuous functions are used within an atomic subsystem containing a Control Task Trigger, its execution is discretized.<\/figcaption><\/figure>\n<\/div><\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-3-analog-to-digital-converter-input-adc\"><span class=\"ez-toc-section\" id=\"3-Analog-to-digital-converter-input-ADC\"><\/span>3) Analog-to-digital converter input (ADC)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>The ADC block enables us to retrieve the sampled value of a given ADC channel and to convert it to its value in physical unit. The input signal is typically a continuous signal coming from the plant model and representing a measurement value.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"474\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-38-1024x474.png\" alt=\"ADC block content\" class=\"wp-image-295\" style=\"width:476px;height:220px\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-38-1024x474.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-38-300x139.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-38-768x355.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-38.png 1265w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p>The simulation model of the ADC block simply sample-and-holds the input signal on the rising edges of the ADC trigger input. The sampled signal is then scaled according to the sensor sensitivity parameter to be converted to its value in physical unit.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-4-pulse-width-modulators-xx-pwm\"><span class=\"ez-toc-section\" id=\"4-Pulse-width-modulators-xx-PWM\"><\/span>4) Pulse-width modulators (xx-PWM)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Various types of pulse-width modulators exist within the imperix control library. Among them, the carrier-based PWM modulator (CB PWM block) is certainly the most commonly used.<\/p>\n\n\n\n<p>The CB-PWM block configures the corresponding FPGA peripheral and generates the PWM signals according to the duty-cycle and carrier phase parameters.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"431\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-39-1024x431.png\" alt=\"PWM modulator block content\" class=\"wp-image-296\" style=\"width:600px\" title=\"Product notes &gt; PN137: Simulation essentials with PLECS &gt; pwm_new.png\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-39-1024x431.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-39-300x126.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-39-768x324.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-39-1536x647.png 1536w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-39-2048x863.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"869\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-40-1024x869.png\" alt=\"PWM modulator signals\" class=\"wp-image-297\" style=\"width:369px;height:313px\" title=\"Product notes &gt; PN137: Simulation essentials with PLECS &gt; image-20200710-121303.png\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-40-1024x869.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-40-300x255.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-40-768x652.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-40.png 1267w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p>In the simulation model, the clock signal (1) connected to the clock input is used as a time reference to generate the carrier signal (2). In parallel, the duty-cycle value (3) is sampled once or twice per switching period (depending on the update-rate parameter) and compared with the carrier to produce the output PWM signal. A dead-time is then applied to the complementary PWM signals (5). (A more complex model is used to generate a carrier with a variable phase, which is beyond the scope of this document.)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-further-readings\"><span class=\"ez-toc-section\" id=\"Further-readings\"><\/span>Further readings<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers\" target=\"_blank\" rel=\"noreferrer noopener\">Programming and operating imperix controllers (PN138)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/imperix.com\/doc\/help\/cockpit-user-guide\" target=\"_blank\" rel=\"noreferrer noopener\">Cockpit \u2013 User guide (PN300)<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>This note provides in-depth content for an accurate and efficient offline simulation of an imperix controller and the corresponding plant model using ACG SDK on&#8230;<\/p>\n","protected":false},"author":7,"featured_media":3008,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[12,3],"tags":[],"software-environments":[104],"provided-results":[],"related-products":[50,31,32,92,166],"guidedreadings":[],"tutorials":[],"user-manuals":[177],"coauthors":[71],"class_list":["post-285","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-getting-started-acg-sdk","category-help","software-environments-plecs","related-products-acg-sdk","related-products-b-board-pro","related-products-b-box-rcp","related-products-b-box-micro","related-products-b-box-rcp-3-0","user-manuals-getting-started-with-acg-sdk"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Simulation essentials with PLECS - imperix<\/title>\n<meta name=\"description\" content=\"This notes describes the main principles of the simulation models included inside the ACG SDK library for PLECS.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Simulation essentials with PLECS - imperix\" \/>\n<meta property=\"og:description\" content=\"This notes describes the main principles of the simulation models included inside the ACG SDK library for PLECS.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs\" \/>\n<meta property=\"og:site_name\" content=\"imperix\" \/>\n<meta property=\"article:published_time\" content=\"2021-03-21T10:32:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-19T10:50:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/3_2_ratio_PN137.png\" \/>\n\t<meta property=\"og:image:width\" content=\"450\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"St\u00e9phane Lovejoy\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"St\u00e9phane Lovejoy\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/simulation-essentials-plecs#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/simulation-essentials-plecs\"},\"author\":{\"name\":\"St\u00e9phane Lovejoy\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/person\\\/97bde5cc1c65c92e731d67c17b8c50ae\"},\"headline\":\"Simulation essentials with PLECS\",\"datePublished\":\"2021-03-21T10:32:00+00:00\",\"dateModified\":\"2025-12-19T10:50:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/simulation-essentials-plecs\"},\"wordCount\":1135,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/simulation-essentials-plecs#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/3_2_ratio_PN137.png\",\"articleSection\":[\"Getting started with ACG SDK\",\"Product notes\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/simulation-essentials-plecs#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/simulation-essentials-plecs\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/simulation-essentials-plecs\",\"name\":\"Simulation essentials with PLECS - imperix\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/simulation-essentials-plecs#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/simulation-essentials-plecs#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/3_2_ratio_PN137.png\",\"datePublished\":\"2021-03-21T10:32:00+00:00\",\"dateModified\":\"2025-12-19T10:50:44+00:00\",\"description\":\"This notes describes the main principles of the simulation models included inside the ACG SDK library for PLECS.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/simulation-essentials-plecs#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/simulation-essentials-plecs\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/simulation-essentials-plecs#primaryimage\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/3_2_ratio_PN137.png\",\"contentUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/3_2_ratio_PN137.png\",\"width\":450,\"height\":300,\"caption\":\"PWM modulator block content\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/simulation-essentials-plecs#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Knowledge base\",\"item\":\"https:\\\/\\\/imperix.com\\\/doc\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Product notes\",\"item\":\"https:\\\/\\\/imperix.com\\\/doc\\\/category\\\/help\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Simulation essentials with PLECS\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#website\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/\",\"name\":\"imperix\",\"description\":\"power electronics\",\"publisher\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/imperix.com\\\/doc\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#organization\",\"name\":\"imperix\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/imperix_logo.png\",\"contentUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/imperix_logo.png\",\"width\":350,\"height\":120,\"caption\":\"imperix\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/person\\\/97bde5cc1c65c92e731d67c17b8c50ae\",\"name\":\"St\u00e9phane Lovejoy\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4f3db3acdae30f99346e7c5cb547260bcc5e9ff874422520d317e376c001a000?s=96&d=mm&r=gb2ee28b23ed78deae9c8f90757fee6d3\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4f3db3acdae30f99346e7c5cb547260bcc5e9ff874422520d317e376c001a000?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4f3db3acdae30f99346e7c5cb547260bcc5e9ff874422520d317e376c001a000?s=96&d=mm&r=g\",\"caption\":\"St\u00e9phane Lovejoy\"},\"description\":\"St\u00e9phane is a senior software development engineer at imperix. He authored and co-authored numerous software reference articles and documentation, notably related to Cockpit.\",\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/st\u00e9phane-lovejoy-40721794\\\/\"],\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/author\\\/lovejoy\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Simulation essentials with PLECS - imperix","description":"This notes describes the main principles of the simulation models included inside the ACG SDK library for PLECS.","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:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs","og_locale":"en_US","og_type":"article","og_title":"Simulation essentials with PLECS - imperix","og_description":"This notes describes the main principles of the simulation models included inside the ACG SDK library for PLECS.","og_url":"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs","og_site_name":"imperix","article_published_time":"2021-03-21T10:32:00+00:00","article_modified_time":"2025-12-19T10:50:44+00:00","og_image":[{"width":450,"height":300,"url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/3_2_ratio_PN137.png","type":"image\/png"}],"author":"St\u00e9phane Lovejoy","twitter_card":"summary_large_image","twitter_misc":{"Written by":"St\u00e9phane Lovejoy","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs#article","isPartOf":{"@id":"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs"},"author":{"name":"St\u00e9phane Lovejoy","@id":"https:\/\/imperix.com\/doc\/#\/schema\/person\/97bde5cc1c65c92e731d67c17b8c50ae"},"headline":"Simulation essentials with PLECS","datePublished":"2021-03-21T10:32:00+00:00","dateModified":"2025-12-19T10:50:44+00:00","mainEntityOfPage":{"@id":"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs"},"wordCount":1135,"commentCount":0,"publisher":{"@id":"https:\/\/imperix.com\/doc\/#organization"},"image":{"@id":"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs#primaryimage"},"thumbnailUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/3_2_ratio_PN137.png","articleSection":["Getting started with ACG SDK","Product notes"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs#respond"]}]},{"@type":"WebPage","@id":"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs","url":"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs","name":"Simulation essentials with PLECS - imperix","isPartOf":{"@id":"https:\/\/imperix.com\/doc\/#website"},"primaryImageOfPage":{"@id":"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs#primaryimage"},"image":{"@id":"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs#primaryimage"},"thumbnailUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/3_2_ratio_PN137.png","datePublished":"2021-03-21T10:32:00+00:00","dateModified":"2025-12-19T10:50:44+00:00","description":"This notes describes the main principles of the simulation models included inside the ACG SDK library for PLECS.","breadcrumb":{"@id":"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs#primaryimage","url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/3_2_ratio_PN137.png","contentUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/3_2_ratio_PN137.png","width":450,"height":300,"caption":"PWM modulator block content"},{"@type":"BreadcrumbList","@id":"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Knowledge base","item":"https:\/\/imperix.com\/doc\/"},{"@type":"ListItem","position":2,"name":"Product notes","item":"https:\/\/imperix.com\/doc\/category\/help"},{"@type":"ListItem","position":3,"name":"Simulation essentials with PLECS"}]},{"@type":"WebSite","@id":"https:\/\/imperix.com\/doc\/#website","url":"https:\/\/imperix.com\/doc\/","name":"imperix","description":"power electronics","publisher":{"@id":"https:\/\/imperix.com\/doc\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/imperix.com\/doc\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/imperix.com\/doc\/#organization","name":"imperix","url":"https:\/\/imperix.com\/doc\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/imperix.com\/doc\/#\/schema\/logo\/image\/","url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/imperix_logo.png","contentUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/imperix_logo.png","width":350,"height":120,"caption":"imperix"},"image":{"@id":"https:\/\/imperix.com\/doc\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/imperix.com\/doc\/#\/schema\/person\/97bde5cc1c65c92e731d67c17b8c50ae","name":"St\u00e9phane Lovejoy","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/4f3db3acdae30f99346e7c5cb547260bcc5e9ff874422520d317e376c001a000?s=96&d=mm&r=gb2ee28b23ed78deae9c8f90757fee6d3","url":"https:\/\/secure.gravatar.com\/avatar\/4f3db3acdae30f99346e7c5cb547260bcc5e9ff874422520d317e376c001a000?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4f3db3acdae30f99346e7c5cb547260bcc5e9ff874422520d317e376c001a000?s=96&d=mm&r=g","caption":"St\u00e9phane Lovejoy"},"description":"St\u00e9phane is a senior software development engineer at imperix. He authored and co-authored numerous software reference articles and documentation, notably related to Cockpit.","sameAs":["https:\/\/www.linkedin.com\/in\/st\u00e9phane-lovejoy-40721794\/"],"url":"https:\/\/imperix.com\/doc\/author\/lovejoy"}]}},"_links":{"self":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/285","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/comments?post=285"}],"version-history":[{"count":42,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/285\/revisions"}],"predecessor-version":[{"id":39350,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/285\/revisions\/39350"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/media\/3008"}],"wp:attachment":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/media?parent=285"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/categories?post=285"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/tags?post=285"},{"taxonomy":"software-environments","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/software-environments?post=285"},{"taxonomy":"provided-results","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/provided-results?post=285"},{"taxonomy":"related-products","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/related-products?post=285"},{"taxonomy":"guidedreadings","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/guidedreadings?post=285"},{"taxonomy":"tutorials","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/tutorials?post=285"},{"taxonomy":"user-manuals","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/user-manuals?post=285"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/coauthors?post=285"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}