{"id":13383,"date":"2022-09-20T13:06:30","date_gmt":"2022-09-20T13:06:30","guid":{"rendered":"https:\/\/imperix.com\/doc\/?p=13383"},"modified":"2026-01-26T08:35:17","modified_gmt":"2026-01-26T08:35:17","slug":"programming-imperix-controllers","status":"publish","type":"post","link":"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers","title":{"rendered":"Programming and operating imperix controllers"},"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\/programming-imperix-controllers\/#Programming-workflows\" >Programming workflows<\/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\/programming-imperix-controllers\/#Phase-A-Developing-and-generating-a-real-time-control-code\" >Phase A) - Developing and generating a real-time control code<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers\/#Phase-B-Code-flashing-and-monitoring-in-Cockpit\" >Phase B) - Code flashing and monitoring in Cockpit<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers\/#Where-to-go-from-here\" >Where to go from here?<\/a><\/li><\/ul><\/nav><\/div>\n\n<p>This document provides guidance to first-time users regarding the essential procedures for deploying code to imperix controllers, as well as connecting with the equipment. It is applicable to all variants of programmable controllers, including <a href=\"https:\/\/imperix.com\/products\/control\/rcp-controller\/\">B-Box 4<\/a>, <a href=\"https:\/\/imperix.com\/products\/control\/rcp-controller\/\">B-Box RCP 3.0<\/a>, <a href=\"https:\/\/imperix.com\/products\/control\/power-inverter-controller\/\">B-Box Micro<\/a>, <a href=\"https:\/\/imperix.com\/products\/control\/inverter-control-board\/\">B-Board PRO<\/a>, and <a href=\"https:\/\/imperix.com\/products\/power\/programmable-inverter\/\">TPI8032<\/a>. Among other aspects, it notably addresses:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Code generation:<\/strong> how to generate and compile code using Simulink, PLECS, or the imperix IDE.<\/li>\n\n\n\n<li><strong>Connectivity:<\/strong> how to establish the PC \u2194\ufe0e Controller connection via Ethernet.<\/li>\n\n\n\n<li><strong>Monitoring basics:<\/strong> the fundamentals of remote monitoring and debugging using <a href=\"https:\/\/imperix.com\/doc\/help\/cockpit-user-guide\">Cockpit<\/a>.<\/li>\n<\/ul>\n\n\n\n<p>Before following this guide, if readers work with Simulink or PLECS, they are advised to consult the articles related to the ACG workflow shown in the table below. A series of video tutorials is also available with similar content. Readers who develop their code in C\/C++ should consult the documentation on the <a href=\"https:\/\/imperix.com\/doc\/help\/getting-started-cpp-sdk\/installation-and-utilisation-of-cpp-sdk\">installation and use of the CPP SDK<\/a>.<\/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    font-style: italic;\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    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>\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\" class=\"cell-highlight\">\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\"><span class=\"ez-toc-section\" id=\"Programming-workflows\"><\/span>Programming workflows<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Imperix controllers utilize a CPU+FPGA architecture to execute control algorithms. Typically, the control task (user code) runs on the CPU, while low-level, time-critical functions (such as PWM modulation and safety) are handled by the FPGA. Thanks to their similar hardware architecture, all imperix controllers benefit from an identical development workflow, consisting of the following two phases:<\/p>\n\n\n\n<p><strong>A)<\/strong> <strong>Control code development and offline simulation:<\/strong> With Simulink or PLECS, this phase takes place entirely within the simulation software running on the PC. It includes the implementation of the control algorithms themselves, as well as the optional - but highly recommended - modeling of the plant and validation the algorithms using offline simulations. With the imperix IDE, only the implementation of the C\/C++ code is possible. Offline simulation is not supported. This phase is mainly covered by the dedicated user guides.<\/p>\n\n\n\n<p><strong>B)<\/strong> <strong>Code generation and device programming:<\/strong> With Simulink or PLECS, this phase also takes place within the simulation software, thanks to automated code generation. Subsequently, once the run-time executable code is generated, its deployment as well as all interactions with the hardware take place using imperix's dedicated software <a href=\"https:\/\/imperix.com\/doc\/help\/cockpit-user-guide\">Cockpit<\/a>. This phase is the main object of this article.<\/p>\n\n\n\n<p>For the first step <strong>A)<\/strong>, imperix supports three possible development environments, which are summarized below. For the second step <strong>B)<\/strong>, all actions rely on Cockpit, independently of the chosen development environment. <\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Environment<\/strong><\/td><td><strong>Language<\/strong><\/td><td><strong>Offline simulation<\/strong><\/td><td><strong>Required SDK<\/strong><\/td><td><strong>User guide<\/strong><\/td><\/tr><tr><td>Simulink<\/td><td>Graphical <sup>1)<\/sup><\/td><td>Yes <sup>2)<\/sup><\/td><td><a href=\"https:\/\/imperix.com\/software\/acg-sdk\/\">ACG SDK<\/a><sup> 3)<\/sup><\/td><td><a href=\"https:\/\/imperix.com\/doc\/help\/getting-started-acg-sdk\">ACG user guide<\/a><\/td><\/tr><tr><td>PLECS<\/td><td>Graphical <sup>4)<\/sup><\/td><td>Yes<\/td><td><a href=\"https:\/\/imperix.com\/software\/acg-sdk\/\">ACG SDK<\/a><sup> 3)<\/sup><\/td><td><a href=\"https:\/\/imperix.com\/doc\/help\/getting-started-acg-sdk\">ACG user guide<\/a><\/td><\/tr><tr><td>Imperix IDE<\/td><td>C\/C++<\/td><td>No<\/td><td><a href=\"https:\/\/imperix.com\/software\/cpp-sdk\/\">CPP SDK<\/a><sup> 5)<\/sup><\/td><td><a href=\"https:\/\/imperix.com\/doc\/help\/getting-started-cpp-sdk\/installation-and-utilisation-of-cpp-sdk\">CPP user guide<\/a><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><sup>1)<\/sup> <em>requires Matlab Simulink, Matlab Coder, Simulink Coder, and Embedded Coder<\/em><br><sup>2)<\/sup> <em>requires Simscape Electrical or PLECS Blockset for Simulink<\/em> <br><sup>3)<\/sup> <em>requires specific license issued by imperix (more details in <a href=\"https:\/\/imperix.com\/doc\/help\/software-licensing\">Licensing<\/a>)<\/em><br><sup>4)<\/sup> <em>requires PLECS and PLECS Coder<\/em><br><sup>5)<\/sup> <em>requires specific license issued by imperix (more details in <a href=\"https:\/\/imperix.com\/doc\/help\/software-licensing\">Licensing<\/a>)<\/em><\/p>\n\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-info\" role=\"alert\"><strong>FPGA development<\/strong>: For advanced users interested in developing custom logic for the FPGA, specific documentation and examples are available in <a href=\"https:\/\/imperix.com\/doc\/help\/fpga-development-on-imperix-controllers\">FPGA development on imperix controllers<\/a>. This requires the installation of the Vivado Design Suite, which can be used with a free license on all imperix controllers. High-Level Synthesis (HLS) workflows are also supported and relevant documentation can be found in <a href=\"https:\/\/imperix.com\/doc\/implementation\/high-level-synthesis-for-fpga\">High-Level Synthesis for FPGA developments<\/a>.<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Phase-A-Developing-and-generating-a-real-time-control-code\"><\/span>Phase A) - Developing and generating a real-time control code<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Using Simulink or PLECS<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Code development<\/h4>\n\n\n\n<p>As introduced in <a href=\"https:\/\/imperix.com\/doc\/help\/getting-started-acg-sdk-simulink\">PN134<\/a>, when developing control code on Simulink or PLECS with ACG SDK, the model is usually organized with two main subsystems, each serving a distinct purpose in the development workflow:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Plant <\/strong>subsystem: Used only in <strong>Simulation mode<\/strong>, this subsystem enables offline validation and tuning of the control algorithm. It utilizes blocks from the <strong><a href=\"https:\/\/imperix.com\/doc\/help\/getting-started-with-imperix-power-library\">Power library<\/a><\/strong> and Simscape Electrical \/ PLECS blocks to model the hardware dynamics of imperix power products. In <strong>Automated Code Generation<\/strong> mode, it is ignored.<\/li>\n\n\n\n<li><strong>Controller <\/strong>subsystem: Used for both <strong>Simulation <\/strong>and <strong>Automated Code Generation<\/strong>. It contains the core control implementation alongside target-specific peripheral blocks (such as <a href=\"https:\/\/imperix.com\/doc\/software\/analog-data-acquisition\">ADC<\/a> and <a href=\"https:\/\/imperix.com\/doc\/software\/pulse-width-modulator\">PWM<\/a>) from the <strong>Control library<\/strong> for direct deployment to the hardware.<\/li>\n<\/ul>\n\n\n\n<p>Important guidelines and best practices for effective use of Simulation mode are provided in <a href=\"https:\/\/imperix.com\/doc\/help\/simulation-essentials-simulink\">PN135 (Simulink)<\/a> and <a href=\"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs\">PN137 (PLECS)<\/a>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Code generation<\/h4>\n\n\n\n<p>Once implemented and tested, the Simulink or PLECS model must be translated into code and compiled into an executable before it can be deployed onto the target. This process is taken care of automatically by Simulink or PLECS, thanks to the scripts and configuration files installed by the ACG SDK. From the user's perspective, all these tasks are carried out <strong>in one click<\/strong> using the following procedure:<\/p>\n\n\n\n<p><strong>In Simulink<\/strong>:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Select \u201cAutomated Code Generation\u201d in the <a href=\"https:\/\/imperix.com\/doc\/software\/config-control-task-configuration\">CONFIG<\/a> block of the model.<\/li>\n\n\n\n<li>Select the right generation of the controller. This information is required at compile time to account for hardware-specific instructions and architecture.<\/li>\n\n\n\n<li>Build the model by clicking the \u201cBuild\u201d button (or with the shortcut Ctrl+B). <br>If the Build button is not shown, make sure that Simulink Coder and Embedded Coder are installed, and open the Embedded Coder app in the <em>APPS <\/em>tab. The Build button should appear in a new <em>C CODE<\/em> tab.<\/li>\n<\/ol>\n\n\n\n<p><strong>In PLECS<\/strong>:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open the Coder &gt; Coder option window (Ctrl+alt+B).<\/li>\n\n\n\n<li>Select the subsystem containing the control implementation in the left column.<\/li>\n\n\n\n<li>In the Target tab, select the target generation corresponding to your controller. This information is required at compile time to account for hardware-specific instructions and architecture.<\/li>\n\n\n\n<li>Click the \"Build\" button to start the building process.<\/li>\n<\/ol>\n\n\n\n<p>At the end of a successful build, Cockpit automatically launches and creates a new project with a pre-filled project name and path of the executable file. Now, to deploy the code to the target, a connection must be established, as covered in phase B.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Using the imperix IDE for C\/C++<\/h3>\n\n\n\n<p>This workflow utilizes the imperix IDE, which is an Integrated Development Environment (IDE), based on the Eclipse platform. Users are required to write their control algorithm directly in C\/C++ code.<\/p>\n\n\n\n<p>The workflow relies on a provided library of peripheral routines (effectively, hardware drivers) for interfacing with each hardware resource. A simple API is also provided for interfacing the application-level code with the BBOS kernel functions. An easy-to-use framework facilitates code implementation; however, offline simulation is not easily possible or recommended with this workflow.<\/p>\n\n\n\n<p>To build the code and generate the runtime executable, the current project should be selected in the project explorer and the \u201cRun\u201d icon (green play button) should be clicked. <\/p>\n\n\n\n<p>More details are given in <a href=\"https:\/\/imperix.com\/doc\/help\/getting-started-cpp-sdk\/installation-and-utilisation-of-cpp-sdk\">Installation and use of the CPP SDK<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Phase-B-Code-flashing-and-monitoring-in-Cockpit\"><\/span>Phase B) - Code flashing and monitoring in Cockpit<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Once code is generated, uploading it to the controller (hereafter called <span style=\"box-sizing: border-box; margin: 0px; padding: 0px;\"><em>the target<\/em>) is done via Cockpit, which&nbsp;<\/span>opens automatically at the end of the build process.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Connecting the target to the host PC<\/h3>\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\" style=\"flex-basis:66.66%\">\n<p>First, an Ethernet connection must be established between the host computer and the target(s). Two scenarios can be implemented:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The target is connected to a <strong>local Ethernet network<\/strong>. In this case, an IP address is generally automatically attributed to the target  by a server or router (over DHCP).<\/li>\n\n\n\n<li>A <strong>point-to-point link<\/strong> is established between the target and the host computer using a single Ethernet cable. In this case, the IP address is auto-attributed in the 169.254.x.x range.<\/li>\n<\/ul>\n\n\n\n<p>In Cockpit, no specific configuration is required. Connected targets are normally auto-detected and appear in the left bar of the Target perspective, as shown on the right.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"226\" height=\"347\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/06\/image-6.png\" alt=\"\" class=\"wp-image-33554\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/06\/image-6.png 226w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/06\/image-6-195x300.png 195w\" sizes=\"auto, (max-width: 226px) 100vw, 226px\" \/><\/figure>\n<\/div><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-info\" role=\"alert\">When multiple targets are interconnected using SFP fiber(s), only the top master device requires Ethernet connectivity. Ethernet traffic is indeed carried to the slaves without impacting real-time traffic.<\/div>\n\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-success\" role=\"alert\">Imperix controllers always respond to <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows-server\/administration\/windows-commands\/ping\">ping<\/a> requests. When needed, testing TCP\/IP connectivity separately from Cockpit may provide useful debugging information. <\/div>\n\n\n<style>.kt-accordion-id13383_3cad87-33 .kt-accordion-inner-wrap{column-gap:var(--global-kb-gap-md, 2rem);row-gap:8px;}.kt-accordion-id13383_3cad87-33 .kt-accordion-panel-inner{padding-top:var(--global-kb-spacing-sm, 1.5rem);padding-right:var(--global-kb-spacing-sm, 1.5rem);padding-bottom:var(--global-kb-spacing-sm, 1.5rem);padding-left:var(--global-kb-spacing-sm, 1.5rem);}.kt-accordion-id13383_3cad87-33 > .kt-accordion-inner-wrap > .wp-block-kadence-pane > .kt-accordion-header-wrap > .kt-blocks-accordion-header{padding-top:var(--global-kb-spacing-xxs, 0.5rem);padding-right:var(--global-kb-spacing-xs, 1rem);padding-bottom:var(--global-kb-spacing-xxs, 0.5rem);padding-left:var(--global-kb-spacing-xs, 1rem);}@media all and (max-width: 767px){.kt-accordion-id13383_3cad87-33 .kt-accordion-inner-wrap{display:block;}.kt-accordion-id13383_3cad87-33 .kt-accordion-inner-wrap .kt-accordion-pane:not(:first-child){margin-top:8px;}}<\/style>\n<div class=\"wp-block-kadence-accordion alignnone\"><div class=\"kt-accordion-wrap kt-accordion-id13383_3cad87-33 kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right\" style=\"max-width:none\"><div class=\"kt-accordion-inner-wrap\" data-allow-multiple-open=\"false\" data-start-open=\"none\">\n<div class=\"wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane13383_e90400-f6\"><div class=\"kt-accordion-header-wrap\"><button class=\"kt-blocks-accordion-header kt-acccordion-button-label-show\" type=\"button\"><span class=\"kt-blocks-accordion-title-wrap\"><span class=\"kt-blocks-accordion-title\">Connection within a local Ethernet network<\/span><\/span><span class=\"kt-blocks-accordion-icon-trigger\"><\/span><\/button><\/div><div class=\"kt-accordion-panel kt-accordion-panel-hidden\"><div class=\"kt-accordion-panel-inner\">\n<div class=\"wp-block-columns are-vertically-aligned-top is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-vertically-aligned-top is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<p>In order for the computer to communicate with the target, IP communication must be possible, which essentially means that both devices must belong to the same network.<\/p>\n\n\n\n<p>If the target is connected to a local network, which the computer is already connected to, it will usually automatically receive a compatible IP address. In this case, Cockpit should automatically find the target on the network and display it in the target list. If not, its IP address can be manually added by clicking the <em>Can't find your target? <\/em> link.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-top is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"350\" height=\"292\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/06\/A1.png\" alt=\"\" class=\"wp-image-33663\" style=\"width:260px\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/06\/A1.png 350w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/06\/A1-300x250.png 300w\" sizes=\"auto, (max-width: 350px) 100vw, 350px\" \/><\/figure>\n<\/div>\n<\/div>\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\" style=\"flex-basis:66.66%\">\n<p>If this address is unknown, it can be easily found on the B-Box 3 and 4 using the front panel. However, with a TPI, B-Box Micro, or B-Board PRO, such a display does not exist. Manually configuring the computer's IP address in the same range as the target's backup static IP address may then be the only resort (see <a href=\"https:\/\/imperix.com\/doc\/help\/advanced-network-configurations\">PN144<\/a>).<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"506\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-42-1024x506.png\" alt=\"B-Box IP address display\" class=\"wp-image-327\" style=\"width:329px;height:auto\" title=\"Product notes &gt; PN139: Getting started with BB Control &gt; B-Box IP screen.png\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-42-1024x506.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-42-300x148.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-42-768x380.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-42.png 1076w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-info\" role=\"alert\">If the B-Box shows a dynamic IP in the 169.254.x.x range, it means it did not receive any IP address automatically. This is a self-assigned address, allocated whenever no DHCP response is received.<br>In this case, manually configuring the computer's IP address may be required (see <a href=\"https:\/\/imperix.com\/doc\/help\/advanced-network-configurations\">PN144<\/a>).<\/div>\n\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-info\" role=\"alert\">Cockpit uses the following TCP ports: 4840, as well as 59000 through 59010.<br>These ports must <strong>not<\/strong> be blocked by a firewall.<\/div>\n<\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane13383_53b8eb-12\"><div class=\"kt-accordion-header-wrap\"><button class=\"kt-blocks-accordion-header kt-acccordion-button-label-show\" type=\"button\"><span class=\"kt-blocks-accordion-title-wrap\"><span class=\"kt-blocks-accordion-title\">Direct (point-to-point) Ethernet connection<\/span><\/span><span class=\"kt-blocks-accordion-icon-trigger\"><\/span><\/button><\/div><div class=\"kt-accordion-panel kt-accordion-panel-hidden\"><div class=\"kt-accordion-panel-inner\">\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\" style=\"flex-basis:66.66%\">\n<p>In case of direct point-to-point connection (e.g. using an USB-to-Ethernet dongle adapter), both the computer and the target should self-allocate an IP addresse in the 169.254.x.x range. This process is known as  Automatic Private IP Addressing (APIPA).<\/p>\n\n\n\n<p>In this case, Cockpit should automatically find the target on the network and display it in the target list. If not, its IP address can be manually added by clicking the <em>Can't find your target? <\/em> link.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"350\" height=\"268\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/06\/A3.png\" alt=\"\" class=\"wp-image-33664\" style=\"width:260px\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/06\/A3.png 350w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/06\/A3-300x230.png 300w\" sizes=\"auto, (max-width: 350px) 100vw, 350px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-warning\" role=\"alert\">APIPA requires firmware version 2025.2 or later. For older versions or in case of trouble, using a static IP may be required. Detailed instructions are given in <a href=\"https:\/\/imperix.com\/doc\/help\/advanced-network-configurations\">Advanced Network Configurations<\/a>.<\/div>\n<\/div><\/div><\/div>\n<\/div><\/div><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Flashing and launching the code<\/h3>\n\n\n\n<p>At the end of a successful build, Cockpit automatically launches and creates a new project with a pre-filled project name and path. Only a few steps are required to load the code to the target and launch it:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li> Using the Cockpit left bar, click on \"Link target\" and choose the desired target (see images below). <\/li>\n\n\n\n<li>Once the project is linked to a target, the code is automatically downloaded to that target and starts automatically.<\/li>\n\n\n\n<li>If the code is re-generated from the same location (i.e., the model is rebuilt), Cockpit simply loads the new version of the code and restarts it.<\/li>\n<\/ol>\n\n\n\n<p>More information on how to deal with projects in Cockpit is given in the <a href=\"https:\/\/imperix.com\/doc\/help\/cockpit-user-guide#How-to-create-a-new-project\" target=\"_blank\" rel=\"noreferrer noopener\">Cockpit user guide<\/a>.<\/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-full\"><img loading=\"lazy\" decoding=\"async\" width=\"312\" height=\"139\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/09\/new_project_pane.png\" alt=\"\" class=\"wp-image-32662\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/09\/new_project_pane.png 312w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/09\/new_project_pane-300x134.png 300w\" sizes=\"auto, (max-width: 312px) 100vw, 312px\" \/><figcaption class=\"wp-element-caption\">Cockpit creates a new project using the user code built from Simulink, PLECS, or imperix IDE.<\/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-full\"><img loading=\"lazy\" decoding=\"async\" width=\"315\" height=\"76\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/09\/target_pane_linking.png\" alt=\"\" class=\"wp-image-32664\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/09\/target_pane_linking.png 315w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/09\/target_pane_linking-300x72.png 300w\" sizes=\"auto, (max-width: 315px) 100vw, 315px\" \/><figcaption class=\"wp-element-caption\">Upon clicking \"Link target\" Cockpit displays a list of potential targets to upload the user code to<\/figcaption><\/figure>\n<\/div><\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Running the control code and enabling PWM outputs<\/h3>\n\n\n\n<p>Once the code has been deployed to the target, it is automatically launched and runs continuously. However, the PWM outputs (i.e., gating signals) are not physically generated unless they are explicitly enabled by the operator. Enabling or disabling the gating signals is done in Cockpit using the dedicated button at the top of the project. This effectively acts as a start\/stop switch that determines when the converter is actually operating (i.e., converting power).<\/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-full\"><img loading=\"lazy\" decoding=\"async\" width=\"281\" height=\"85\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/09\/pwm.png\" alt=\"\" class=\"wp-image-32665\"\/><\/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-full\"><img loading=\"lazy\" decoding=\"async\" width=\"281\" height=\"85\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/09\/pwm_enable.png\" alt=\"\" class=\"wp-image-32666\"\/><\/figure>\n<\/div><\/div>\n<\/div>\n\n\n\n<p>The enable\/disable mechanism is entirely independent from the execution of the control algorithms and acts as a gating switch on all PWM signals. If anything goes wrong during converter operation, the PWM outputs are immediately and automatically blocked to stop the converter, while the control continues to run.<\/p>\n\n\n<div class=\"wp-block-image is-resized\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"374\" height=\"147\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/01\/Block_diagram_activate_enable_PWM-1.png\" alt=\"\" class=\"wp-image-13976\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/01\/Block_diagram_activate_enable_PWM-1.png 374w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/01\/Block_diagram_activate_enable_PWM-1-300x118.png 300w\" sizes=\"auto, (max-width: 374px) 100vw, 374px\" \/><figcaption class=\"wp-element-caption\">PWM outputs enabling\/disabling mechanism<\/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 enable\/disable mechanism applies globally to all PWM outputs of the controller and its slaves. It should not be confused with the activation of individual PWM modulators, which selects which channels produce PWM signals once enabled. This is controlled in the user code via the modulator block input (see <a href=\"https:\/\/imperix.com\/doc\/software\/pulse-width-modulator\">PWM \u2013 Pulse Width Modulators<\/a>).<\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"operating-states-of-the-controller\">Operating states of the controller<\/h3>\n\n\n\n<p>Imperix controllers have three possible states and conform to the state diagram below:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>BLOCKED<\/strong>: The CPU tasks are running, but PWM outputs are blocked (ready to be enabled).<\/li>\n\n\n\n<li><strong>OPERATING<\/strong>: The PWM outputs are enabled and the system is fully operating without any error.<\/li>\n\n\n\n<li><strong>FAULT<\/strong>: An error occurred and the system waits for its acknowledgment. The PWMs are blocked.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"859\" height=\"724\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/09\/7E91A90F-58A4-43EB-A768-5360C5E380B6.png\" alt=\"\" class=\"wp-image-38996\" style=\"aspect-ratio:1.1865017667844524;width:353px;height:auto\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/09\/7E91A90F-58A4-43EB-A768-5360C5E380B6.png 859w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/09\/7E91A90F-58A4-43EB-A768-5360C5E380B6-300x253.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/09\/7E91A90F-58A4-43EB-A768-5360C5E380B6-768x647.png 768w\" sizes=\"auto, (max-width: 859px) 100vw, 859px\" \/><\/figure>\n<\/div>\n\n\n<p>Controllers can reach the FAULT state for various reasons. The most common ones are listed in the table below. Any fault immediately switches off the PWM outputs to stop the operation of the converter.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Cause<\/th><th>Fault type<\/th><th>Reason(s)<\/th><\/tr><\/thead><tbody><tr><td>Configuration<\/td><td>Software<\/td><td>Misconfiguration, such as:<br>- Physical resource used multiple times (e.g. analog input)<br><\/td><\/tr><tr><td>Overrun<\/td><td>Software<\/td><td>Excessive interrupt frequency considering the code complexity<\/td><\/tr><tr><td>Code crash<\/td><td>Software<\/td><td>Can be CPU or FPGA watchdog expired, C exception, etc...<\/td><\/tr><tr><td>Overvalue detected<\/td><td>Hardware<\/td><td>The configured threshold on one of the analog inputs of the B-Box is exceeded. <em>(See section below)<\/em><\/td><\/tr><tr><td>Interlock<\/td><td>Hardware<\/td><td>A fault is triggered by an external device connected to the interlock connector (electrical or optical). <em>(See <a href=\"https:\/\/cdn.imperix.com\/wp-content\/uploads\/document\/B-Box_Datasheet.pdf\">B-Box datasheet<\/a>)<\/em><\/td><\/tr><tr><td>Fault line<\/td><td>Hardware<\/td><td>One of the fault inputs (FLT) is pulled high. <em>(See <a href=\"https:\/\/cdn.imperix.com\/wp-content\/uploads\/document\/B-Box_Datasheet.pdf\">B-Box datasheet<\/a>)<\/em><\/td><\/tr><tr><td>User code<\/td><td>User<\/td><td><\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Most common types of faults encountered on a B-Box or B-Board<\/figcaption><\/figure>\n\n\n\n<p>The controller goes into OPERATING state when the PWM outputs are enabled, and goes back to <code>BLOCKED<\/code> state when disabled. In case of error (e.g. due to an overcurrent detection in the power setup), the controller immediately goes into <code>FAULT<\/code> state, which immediately disables the PWM outputs. The source of the fault is described in Cockpit, either in the red banner located in the \"Project pane\u201c (see image below) or in the \"Log module\". The return to the <code>OPERATING<\/code> mode is only allowed once the fault is cleared and acknowledged by the user.<\/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\" style=\"flex-basis:25%\"><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"289\" height=\"119\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/09\/fault.png\" alt=\"\" class=\"wp-image-32672\"\/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:25%\"><\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Monitoring the controller in Cockpit<\/h3>\n\n\n\n<p>Each Cockpit project contains a view in which the user can drag and drop modules to monitor and alter user-defined variables. Any signal in the user code connected to a <a href=\"https:\/\/imperix.com\/doc\/software\/probe-variable\">Probe block<\/a> can be monitored in real time using the <em>Scope <\/em>or <em>Rolling plot<\/em> modules. Additionally, the <a href=\"https:\/\/imperix.com\/doc\/software\/tunable-parameter\">Tunable parameters<\/a> defined in the user code can be modified at run time from within the <em>Variables <\/em>module.<\/p>\n\n\n\n<p>Some features that are especially useful include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/imperix.com\/doc\/help\/scope-module\">Scope module<\/a> to display ADC samples at the control rate, or oversampled data (B-Box 4 only)<\/li>\n\n\n\n<li><a href=\"https:\/\/imperix.com\/doc\/help\/scope-module#transient-generator\">Transient generator<\/a> tool to apply test profiles<\/li>\n\n\n\n<li><a href=\"https:\/\/imperix.com\/doc\/help\/cockpit-user-guide#spectral-analyzer\">Spectral Analyzer<\/a> tool to display scoped variables in the frequency domain<\/li>\n\n\n\n<li><a href=\"https:\/\/imperix.com\/doc\/help\/gui-builder-module\">GUI Builder module<\/a> to create custom dashboards for interacting with the controller<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image is-resized\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"761\" height=\"548\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/09\/cockpit_overview_2025.1.png\" alt=\"\" class=\"wp-image-32669\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/09\/cockpit_overview_2025.1.png 761w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/09\/cockpit_overview_2025.1-300x216.png 300w\" sizes=\"auto, (max-width: 761px) 100vw, 761px\" \/><figcaption class=\"wp-element-caption\">Cockpit software - Providing run-time monitoring and parameter tuning<\/figcaption><\/figure>\n<\/div>\n\n\n<p>The <a href=\"https:\/\/imperix.com\/doc\/help\/cockpit-user-guide\">Cockpit user manual<\/a> provides more details on the capabilities of the Cockpit software.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Using the protection mechanisms<\/h3>\n\n\n\n<p>To ensure safe operation of both the imperix hardware and the surrounding equipment, imperix systems provide three layers of fast, threshold-based protection:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>at the power-module level,<\/li>\n\n\n\n<li>at the controller hardware level, and<\/li>\n\n\n\n<li>at the controller software level.<\/li>\n<\/ul>\n\n\n\n<p>The hardware protections of the B-Box family controllers feature configurable thresholds and are implemented within their analog input circuits. For the B-Box 4 and B-Box Micro, these thresholds can be configured in Cockpit, whereas for the B-Box RCP 3.0 they must be set directly on the device via the front-panel screen menu. More information for each controller is available at:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>B-Box 4: <a href=\"https:\/\/imperix.com\/doc\/help\/analog-i-o-configuration-on-b-box-4\">Analog I\/O configuration on B-Box 4<\/a><\/li>\n\n\n\n<li>B-Box RCP 3.0: <a href=\"https:\/\/imperix.com\/doc\/help\/analog-front-end-configuration-on-b-box-rcp\">Analog front-end configuration on B-Box RCP 3.0<\/a><\/li>\n\n\n\n<li>B-Box Micro: <a href=\"https:\/\/imperix.com\/doc\/help\/analog-inputs-configuration-on-b-box-micro\">Analog inputs configuration on B-Box Micro<\/a><\/li>\n\n\n\n<li>B-Board PRO: no hardware-level protections on analog inputs<\/li>\n\n\n\n<li>TPI 8032: automatic hardware-level protections, not user-configurable<\/li>\n<\/ul>\n\n\n\n<p>At this stage, it is also highly recommended to consult <a href=\"https:\/\/imperix.com\/doc\/help\/over-current-and-over-voltage-protection\">Over-current and over-voltage protection<\/a> for details on how these protections work to guarantee safety during operation.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Using the <em>Timings<\/em> information<\/h3>\n\n\n\n<p>When a code is running on a target, Cockpit provides a useful graphical representation of the various computation and data transfer delays that appear in the controller. This helps identify the CPU load, as well as an estimation of the total controller delay, useful for controller tuning. More information is available in the <a href=\"https:\/\/imperix.com\/doc\/help\/cockpit-user-guide\">Cockpit User Guide<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"481\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/04\/timings_2_2025.1-1-1024x481.png\" alt=\"\" class=\"wp-image-37431\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/04\/timings_2_2025.1-1-1024x481.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/04\/timings_2_2025.1-1-300x141.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/04\/timings_2_2025.1-1-768x360.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/04\/timings_2_2025.1-1.png 1108w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Cockpit's Timings information graph<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-where-to-go-from-here\"><span class=\"ez-toc-section\" id=\"Where-to-go-from-here\"><\/span>Where to go from here?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><strong>Get started with specific controllers<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/imperix.com\/doc\/help\/b-box-4-quick-start-guide\">B-Box 4 - Quick start Guide<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/imperix.com\/doc\/help\/getting-started-with-b-box-micro\">B-Box micro  - Quick start Guide<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/imperix.com\/doc\/help\/tpi-quick-start-guide\">TPI 8032 - Quick start Guide<\/a><\/li>\n<\/ul>\n\n\n\n<p><strong>Build power converter setups<\/strong> using imperix <a href=\"https:\/\/imperix.com\/products\/power-inverter-modules\/\">power modules<\/a><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/imperix.com\/doc\/help\/how-to-build-a-buck-converter\">How to build a buck converter<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/imperix.com\/doc\/help\/how-to-build-a-3-phase-inverter\">How to build a 3-phase inverter<\/a><\/li>\n<\/ul>\n\n\n\n<p><strong>Get inspired by numerous code examples<\/strong> to control<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/imperix.com\/doc\/example\/three-phase-pv-inverter\">Grid-tied inverters<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/imperix.com\/doc\/tag\/motor-drives\">Motor drives<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/imperix.com\/doc\/tag\/multilevel-converters\">Multi-level converters<\/a> <\/li>\n<\/ul>\n\n\n\n<p><strong>Learn how to program the FPGA of the controller<\/strong> to develop high-performance control loops<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/imperix.com\/doc\/help\/fpga-development-on-imperix-controllers\">Getting started with FPGA development<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/imperix.com\/doc\/implementation\/high-level-synthesis-for-fpga\">High-Level Synthesis for FPGA developments<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>This document provides guidance to first-time users regarding the essential procedures for deploying code to imperix controllers, as well as connecting with the equipment. It&#8230;<\/p>\n","protected":false},"author":2,"featured_media":39333,"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":[105,103,104],"provided-results":[],"related-products":[50,31,32,92,166,51],"guidedreadings":[],"tutorials":[],"user-manuals":[139,178,137,177],"coauthors":[63],"class_list":["post-13383","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-getting-started-acg-sdk","category-help","software-environments-c-plus-plus","software-environments-matlab","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","related-products-cpp-sdk","user-manuals-b-board-pro","user-manuals-b-box-4","user-manuals-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.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Programming and operating imperix controllers - imperix<\/title>\n<meta name=\"description\" content=\"This page provides an overview and getting started instructions for the Cockpit debugging and monitoring software.\" \/>\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\/programming-imperix-controllers\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Programming and operating imperix controllers - imperix\" \/>\n<meta property=\"og:description\" content=\"This page provides an overview and getting started instructions for the Cockpit debugging and monitoring software.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers\" \/>\n<meta property=\"og:site_name\" content=\"imperix\" \/>\n<meta property=\"article:published_time\" content=\"2022-09-20T13:06:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-26T08:35:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/12\/3_2_ratio_PN138.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=\"Julien Orsinger\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Julien Orsinger\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/programming-imperix-controllers#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/programming-imperix-controllers\"},\"author\":{\"name\":\"Julien Orsinger\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/person\\\/65ef663818eab76f53cc627ab80e0a51\"},\"headline\":\"Programming and operating imperix controllers\",\"datePublished\":\"2022-09-20T13:06:30+00:00\",\"dateModified\":\"2026-01-26T08:35:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/programming-imperix-controllers\"},\"wordCount\":2758,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/programming-imperix-controllers#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/3_2_ratio_PN138.png\",\"articleSection\":[\"Getting started with ACG SDK\",\"Product notes\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/programming-imperix-controllers#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/programming-imperix-controllers\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/programming-imperix-controllers\",\"name\":\"Programming and operating imperix controllers - imperix\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/programming-imperix-controllers#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/programming-imperix-controllers#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/3_2_ratio_PN138.png\",\"datePublished\":\"2022-09-20T13:06:30+00:00\",\"dateModified\":\"2026-01-26T08:35:17+00:00\",\"description\":\"This page provides an overview and getting started instructions for the Cockpit debugging and monitoring software.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/programming-imperix-controllers#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/programming-imperix-controllers\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/programming-imperix-controllers#primaryimage\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/3_2_ratio_PN138.png\",\"contentUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/3_2_ratio_PN138.png\",\"width\":450,\"height\":300},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/programming-imperix-controllers#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\":\"Programming and operating imperix controllers\"}]},{\"@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\\\/65ef663818eab76f53cc627ab80e0a51\",\"name\":\"Julien Orsinger\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0a0328b09c6abe61fa1e263a1066dcb26ea8f3b9e8b1d78056047620947bb388?s=96&d=mm&r=g6545a7220411572e799ad58574cce259\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0a0328b09c6abe61fa1e263a1066dcb26ea8f3b9e8b1d78056047620947bb388?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0a0328b09c6abe61fa1e263a1066dcb26ea8f3b9e8b1d78056047620947bb388?s=96&d=mm&r=g\",\"caption\":\"Julien Orsinger\"},\"description\":\"Julien is a senior power electronics engineer. On the knowledge base, he is acting as the editorial manager and is therefore the co-author of numerous articles on a broad variety of topics.\",\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/julien-orsinger-640ab2129\\\/\"],\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/author\\\/orsinger\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Programming and operating imperix controllers - imperix","description":"This page provides an overview and getting started instructions for the Cockpit debugging and monitoring software.","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\/programming-imperix-controllers","og_locale":"en_US","og_type":"article","og_title":"Programming and operating imperix controllers - imperix","og_description":"This page provides an overview and getting started instructions for the Cockpit debugging and monitoring software.","og_url":"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers","og_site_name":"imperix","article_published_time":"2022-09-20T13:06:30+00:00","article_modified_time":"2026-01-26T08:35:17+00:00","og_image":[{"width":450,"height":300,"url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/12\/3_2_ratio_PN138.png","type":"image\/png"}],"author":"Julien Orsinger","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Julien Orsinger","Est. reading time":"15 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers#article","isPartOf":{"@id":"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers"},"author":{"name":"Julien Orsinger","@id":"https:\/\/imperix.com\/doc\/#\/schema\/person\/65ef663818eab76f53cc627ab80e0a51"},"headline":"Programming and operating imperix controllers","datePublished":"2022-09-20T13:06:30+00:00","dateModified":"2026-01-26T08:35:17+00:00","mainEntityOfPage":{"@id":"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers"},"wordCount":2758,"commentCount":0,"publisher":{"@id":"https:\/\/imperix.com\/doc\/#organization"},"image":{"@id":"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers#primaryimage"},"thumbnailUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/12\/3_2_ratio_PN138.png","articleSection":["Getting started with ACG SDK","Product notes"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers#respond"]}]},{"@type":"WebPage","@id":"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers","url":"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers","name":"Programming and operating imperix controllers - imperix","isPartOf":{"@id":"https:\/\/imperix.com\/doc\/#website"},"primaryImageOfPage":{"@id":"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers#primaryimage"},"image":{"@id":"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers#primaryimage"},"thumbnailUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/12\/3_2_ratio_PN138.png","datePublished":"2022-09-20T13:06:30+00:00","dateModified":"2026-01-26T08:35:17+00:00","description":"This page provides an overview and getting started instructions for the Cockpit debugging and monitoring software.","breadcrumb":{"@id":"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers#primaryimage","url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/12\/3_2_ratio_PN138.png","contentUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/12\/3_2_ratio_PN138.png","width":450,"height":300},{"@type":"BreadcrumbList","@id":"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers#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":"Programming and operating imperix controllers"}]},{"@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\/65ef663818eab76f53cc627ab80e0a51","name":"Julien Orsinger","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/0a0328b09c6abe61fa1e263a1066dcb26ea8f3b9e8b1d78056047620947bb388?s=96&d=mm&r=g6545a7220411572e799ad58574cce259","url":"https:\/\/secure.gravatar.com\/avatar\/0a0328b09c6abe61fa1e263a1066dcb26ea8f3b9e8b1d78056047620947bb388?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0a0328b09c6abe61fa1e263a1066dcb26ea8f3b9e8b1d78056047620947bb388?s=96&d=mm&r=g","caption":"Julien Orsinger"},"description":"Julien is a senior power electronics engineer. On the knowledge base, he is acting as the editorial manager and is therefore the co-author of numerous articles on a broad variety of topics.","sameAs":["https:\/\/www.linkedin.com\/in\/julien-orsinger-640ab2129\/"],"url":"https:\/\/imperix.com\/doc\/author\/orsinger"}]}},"_links":{"self":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/13383","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\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/comments?post=13383"}],"version-history":[{"count":288,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/13383\/revisions"}],"predecessor-version":[{"id":40749,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/13383\/revisions\/40749"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/media\/39333"}],"wp:attachment":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/media?parent=13383"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/categories?post=13383"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/tags?post=13383"},{"taxonomy":"software-environments","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/software-environments?post=13383"},{"taxonomy":"provided-results","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/provided-results?post=13383"},{"taxonomy":"related-products","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/related-products?post=13383"},{"taxonomy":"guidedreadings","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/guidedreadings?post=13383"},{"taxonomy":"tutorials","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/tutorials?post=13383"},{"taxonomy":"user-manuals","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/user-manuals?post=13383"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/coauthors?post=13383"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}