{"id":117844,"date":"2023-08-18T13:13:33","date_gmt":"2023-08-18T11:13:33","guid":{"rendered":"https:\/\/www.velasolaris.com\/handbuch\/pvprog-function\/"},"modified":"2025-10-21T14:07:43","modified_gmt":"2025-10-21T12:07:43","slug":"pvprog-function","status":"publish","type":"handbuch","link":"https:\/\/www.velasolaris.com\/en\/handbuch\/polysun-designer\/controllers\/programmable-controller\/pvprog-function\/","title":{"rendered":"PVPROG Function"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The increasing share of power produced through PV in the grid leads to higher gradients, and especially around noon, to higher peaks of the grid feed\u2011in. This in turn results in a higher strain on the distribution grids. Batteries can make a positive contribution to this problem. The common practice of systems that are laid out for high degrees of self-consumption, in which all surpluses are stored immediately, however, hardly reduces any feed-in peaks. For this reason, PV battery systems are increasingly only subsidised if the feed\u2011in power is limited to a certain percentage of the installed nominal PV capacity. Using PV- and load forecasts, the period in which the battery is charged can be shifted towards noon so that the grid feed\u2011in is limited through the battery system. With this method, curtailment losses can be significantly reduced.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In the following figure (left), the battery is charged as soon as the PV power exceeds the load. When the battery is full, the feed\u2011in power increases abruptly. All PV surpluses that exceed the feed\u2011in limit are curtailed. By including locally generated, measurement based PV- and load forecasts the PVprog algorithm determines a dynamic feed\u2011in limit above which the battery is charged (following figure, right). By temporally shifting the battery charge to noon, a reduction of the curtailment losses as well as a high degree of self\u2011consumption can be achieved. The algorithm is freely available and can moreover be used commercially, too.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Source: <a href=\"https:\/\/pvspeicher.htw-berlin.de\/pvprog\">https:\/\/pvspeicher.htw-berlin.de\/pvprog<\/a><\/p>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-7387b849 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.velasolaris.com\/wp-content\/uploads\/2023\/10\/image229-1-1024x468.png\" alt=\"\" class=\"wp-image-71918\"\/><figcaption class=\"wp-element-caption\">Figure: Power flows in a household with early battery charging (left) and with forecast-based battery charging (right) with a feed-in limit of 50 % of the nominal PV capacity.<\/figcaption><\/figure>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Functionality\" style=\"font-size:30px\"><strong>Functionality<\/strong><strong><\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To achieve PV production and consumption forecasts with sufficient accuracy and without having to rely on an external communication infrastructure, the PVprog algorithm implements a so\u2011called adaptive day persistence forecast. For the PV forecasts, the historical generation and an estimation of the theoretical historical power with a clear sky are used. The quotient of the respective energies within the selected persistence time frame is computed and used as a scaling factor for the theoretical clear\u2011sky power within the forecast horizon. At every optimisation interval (normally every 15 min), the PV forecast is updated (see the following figure).<\/p>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-7387b849 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.velasolaris.com\/wp-content\/uploads\/2023\/10\/image231-1-1024x312.png\" alt=\"\" class=\"wp-image-71923\"\/><figcaption class=\"wp-element-caption\">Figure: Dynamic adjustments of the PV persistence forecasts in the course of the day.<\/figcaption><\/figure>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">A day persistence is also created for the load forecasts and variably weighted with the mean of the last min over the forecast horizon. Thus, the short\u2011term forecast is adjusted dynamically according to temporary load peaks, while the forecast over the whole forecast horizon contains has approximately the same energy amount as the load of the previous day. The dynamic adjustment of the load is depicted in the next figure for a selected time frame.<\/p>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-7387b849 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.velasolaris.com\/wp-content\/uploads\/2023\/10\/image233-1-1024x312.png\" alt=\"\" class=\"wp-image-71927\"\/><figcaption class=\"wp-element-caption\">Figure: Dynamic adjustment of the load forecasts in the course of the day.<\/figcaption><\/figure>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">The battery charge optimisation is performed in an iterative manner. A virtual feed\u2011in limit is set depending on the battery\u2019s state of charge and is gradually reduced until the energy above the limit is enough to charge the battery as much as possible. This limit is adjusted for the updated forecast at every point in time of optimisation (see the next figure). Using the same method, the PVprog algorithm can control discharging of the battery to cut off as many load peaks as possible.<\/p>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-7387b849 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.velasolaris.com\/wp-content\/uploads\/2023\/10\/image235-1024x327.png\" alt=\"\" class=\"wp-image-71931\"\/><figcaption class=\"wp-element-caption\">Figure: Dynamic adjustment of the battery charge and discharge roadmap in the course of the day.<\/figcaption><\/figure>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">To achieve the set feed\u2011in limit, the set battery power is continuously adjusted by the difference between the forecasts and the actual measurements. By continually adjusting the battery charge and discharge plan, updated PV and load forecasts can be incorporated and differences of the state of charge between the corrected roadmap and the original roadmap can be balanced.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Usage-in-Polysun\" style=\"font-size:30px\"><strong>Usage in Polysun<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To perform forecast based battery control in Polysun, the PV power (AC before curtailment) and the load must be passed to the sensors of the programmable controller. The feed\u2011in limit can be passed via a sensor or per manual input. A manual input of 0 disables the feed\u2011in and load limitation, respectively. So that no problems arise when generating the forecasts, the variable \u201cTS\u201d (current time step in seconds since the beginning of the simulation) should be passed as a parameter. More than one call of the function in the same simulation time step have no influence on the result; the result of the first call is always returned. For this reason, it is not possible to call two instances of the function in the same time step with different input arguments \u2013 except for the frequency of forecast updates and the temporal resolution of the forecasts. Each of these arguments has two possibilities: 1 min and 15 min. A forecast update frequency of 1 min is recommended. The simulation work load can be reduced by setting it to 15 min (resulting in faster simulations). However, this results in a less accurate control and leads to a slightly decreased system performance. Therefore, setting the forecast update frequency to 15 min should only be done for rough system dimensioning in which multiple variants need to be simulated. The fine tuning and final evaluation should always be done with the forecast frequency set to 15 min.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On the contrary, a value of min is recommended for the forecast resolution, to reach a high degree of self\u2011sufficiency. Should for some reason the feed\u2011in or load limitation not be achieved as desired (to be expected only in the rarest cases), the forecast resolution can be set to 1 min. It must be kept in mind that the forecast resolution cannot be set to a lower time value than the update frequency. If an unexpected value is input for one of the two arguments, the respective recommended value is used (for technical reasons, no warning is issued).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For the persistence time frame that is looked back into for the PV forecast generation, 3 hours are recommended to achieve stable results. A low time frame leads to a faster adjustment of the virtual feed\u2011in limits. It can, however, also lead to too intense fluctuations of the battery\u2019s set charging power. With a larger frame, the fluctuations of the feed\u2011in and load limitations are decreased. But a too large time frame leads to sluggishness of the control algorithm. From experience, a forecast horizon of 15 h can be recommended for the PV feed\u2011in limitation and 24 h is a good value for load limitation. Persistence time frames and forecast horizons outside of the interval [ 0 h, 24 h] are corrected to the upper or lower boundaries without further warning, respectively.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Two instances of the PVPROG function can be called to limit the grid feed\u2011in and load supply simultaneously (see standard template 50q). This is possible because charging and discharging of the battery never occur at the same time. This can, however, lead to a decrease in system performance compared to a system with only one of the two limitations, because forecast errors can have a negative influence on the available battery capacity. In individual use cases, a combination may be desirable. To achieve optimal results, the use of weather and load data with a temporal resolution of 1 min (maximum: 15 min) should be used. So that the PV forecasts are completely initialised at the beginning of the simulation, a pre\u2011simulation of 10 days should be performed.<\/p>\n","protected":false},"author":19748,"featured_media":0,"parent":117832,"menu_order":46,"comment_status":"closed","ping_status":"closed","template":"","class_list":["post-117844","handbuch","type-handbuch","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.0 (Yoast SEO v28.0) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>PVPROG Function - POLYSUN<\/title>\n<meta name=\"robots\" content=\"noindex, follow\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PVPROG Function\" \/>\n<meta property=\"og:description\" content=\"The increasing share of power produced through PV in the grid leads to higher...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.velasolaris.com\/en\/handbuch\/polysun-designer\/controllers\/programmable-controller\/pvprog-function\/\" \/>\n<meta property=\"og:site_name\" content=\"POLYSUN\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/polysun.switzerland\/\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-21T12:07:43+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.velasolaris.com\\\/en\\\/handbuch\\\/polysun-designer\\\/controllers\\\/programmable-controller\\\/pvprog-function\\\/\",\"url\":\"https:\\\/\\\/www.velasolaris.com\\\/en\\\/handbuch\\\/polysun-designer\\\/controllers\\\/programmable-controller\\\/pvprog-function\\\/\",\"name\":\"PVPROG Function - POLYSUN\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.velasolaris.com\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.velasolaris.com\\\/en\\\/handbuch\\\/polysun-designer\\\/controllers\\\/programmable-controller\\\/pvprog-function\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.velasolaris.com\\\/en\\\/handbuch\\\/polysun-designer\\\/controllers\\\/programmable-controller\\\/pvprog-function\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.velasolaris.com\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/image229-1-1024x468.png\",\"datePublished\":\"2023-08-18T11:13:33+00:00\",\"dateModified\":\"2025-10-21T12:07:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.velasolaris.com\\\/en\\\/handbuch\\\/polysun-designer\\\/controllers\\\/programmable-controller\\\/pvprog-function\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.velasolaris.com\\\/en\\\/handbuch\\\/polysun-designer\\\/controllers\\\/programmable-controller\\\/pvprog-function\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.velasolaris.com\\\/en\\\/handbuch\\\/polysun-designer\\\/controllers\\\/programmable-controller\\\/pvprog-function\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.velasolaris.com\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/image229-1-1024x468.png\",\"contentUrl\":\"https:\\\/\\\/www.velasolaris.com\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/image229-1-1024x468.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.velasolaris.com\\\/en\\\/handbuch\\\/polysun-designer\\\/controllers\\\/programmable-controller\\\/pvprog-function\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.velasolaris.com\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Polysun Designer\",\"item\":\"https:\\\/\\\/www.velasolaris.com\\\/en\\\/handbuch\\\/polysun-designer\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Controllers\",\"item\":\"https:\\\/\\\/www.velasolaris.com\\\/en\\\/handbuch\\\/polysun-designer\\\/controllers\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Programmable Controller\",\"item\":\"https:\\\/\\\/www.velasolaris.com\\\/en\\\/handbuch\\\/polysun-designer\\\/controllers\\\/programmable-controller\\\/\"},{\"@type\":\"ListItem\",\"position\":5,\"name\":\"PVPROG Function\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.velasolaris.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/www.velasolaris.com\\\/en\\\/\",\"name\":\"POLYSUN\",\"description\":\"by Vela Solaris\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.velasolaris.com\\\/en\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.velasolaris.com\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.velasolaris.com\\\/en\\\/#organization\",\"name\":\"POLYSUN\",\"url\":\"https:\\\/\\\/www.velasolaris.com\\\/en\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.velasolaris.com\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.velasolaris.com\\\/wp-content\\\/uploads\\\/2020\\\/07\\\/Polysun-Logo.svg\",\"contentUrl\":\"https:\\\/\\\/www.velasolaris.com\\\/wp-content\\\/uploads\\\/2020\\\/07\\\/Polysun-Logo.svg\",\"width\":1,\"height\":1,\"caption\":\"POLYSUN\"},\"image\":{\"@id\":\"https:\\\/\\\/www.velasolaris.com\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/polysun.switzerland\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/vela-solaris\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"PVPROG Function - POLYSUN","robots":{"index":"noindex","follow":"follow"},"og_locale":"en_US","og_type":"article","og_title":"PVPROG Function","og_description":"The increasing share of power produced through PV in the grid leads to higher...","og_url":"https:\/\/www.velasolaris.com\/en\/handbuch\/polysun-designer\/controllers\/programmable-controller\/pvprog-function\/","og_site_name":"POLYSUN","article_publisher":"https:\/\/www.facebook.com\/polysun.switzerland\/","article_modified_time":"2025-10-21T12:07:43+00:00","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.velasolaris.com\/en\/handbuch\/polysun-designer\/controllers\/programmable-controller\/pvprog-function\/","url":"https:\/\/www.velasolaris.com\/en\/handbuch\/polysun-designer\/controllers\/programmable-controller\/pvprog-function\/","name":"PVPROG Function - POLYSUN","isPartOf":{"@id":"https:\/\/www.velasolaris.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.velasolaris.com\/en\/handbuch\/polysun-designer\/controllers\/programmable-controller\/pvprog-function\/#primaryimage"},"image":{"@id":"https:\/\/www.velasolaris.com\/en\/handbuch\/polysun-designer\/controllers\/programmable-controller\/pvprog-function\/#primaryimage"},"thumbnailUrl":"https:\/\/www.velasolaris.com\/wp-content\/uploads\/2023\/10\/image229-1-1024x468.png","datePublished":"2023-08-18T11:13:33+00:00","dateModified":"2025-10-21T12:07:43+00:00","breadcrumb":{"@id":"https:\/\/www.velasolaris.com\/en\/handbuch\/polysun-designer\/controllers\/programmable-controller\/pvprog-function\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.velasolaris.com\/en\/handbuch\/polysun-designer\/controllers\/programmable-controller\/pvprog-function\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.velasolaris.com\/en\/handbuch\/polysun-designer\/controllers\/programmable-controller\/pvprog-function\/#primaryimage","url":"https:\/\/www.velasolaris.com\/wp-content\/uploads\/2023\/10\/image229-1-1024x468.png","contentUrl":"https:\/\/www.velasolaris.com\/wp-content\/uploads\/2023\/10\/image229-1-1024x468.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.velasolaris.com\/en\/handbuch\/polysun-designer\/controllers\/programmable-controller\/pvprog-function\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.velasolaris.com\/en\/"},{"@type":"ListItem","position":2,"name":"Polysun Designer","item":"https:\/\/www.velasolaris.com\/en\/handbuch\/polysun-designer\/"},{"@type":"ListItem","position":3,"name":"Controllers","item":"https:\/\/www.velasolaris.com\/en\/handbuch\/polysun-designer\/controllers\/"},{"@type":"ListItem","position":4,"name":"Programmable Controller","item":"https:\/\/www.velasolaris.com\/en\/handbuch\/polysun-designer\/controllers\/programmable-controller\/"},{"@type":"ListItem","position":5,"name":"PVPROG Function"}]},{"@type":"WebSite","@id":"https:\/\/www.velasolaris.com\/en\/#website","url":"https:\/\/www.velasolaris.com\/en\/","name":"POLYSUN","description":"by Vela Solaris","publisher":{"@id":"https:\/\/www.velasolaris.com\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.velasolaris.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.velasolaris.com\/en\/#organization","name":"POLYSUN","url":"https:\/\/www.velasolaris.com\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.velasolaris.com\/en\/#\/schema\/logo\/image\/","url":"https:\/\/www.velasolaris.com\/wp-content\/uploads\/2020\/07\/Polysun-Logo.svg","contentUrl":"https:\/\/www.velasolaris.com\/wp-content\/uploads\/2020\/07\/Polysun-Logo.svg","width":1,"height":1,"caption":"POLYSUN"},"image":{"@id":"https:\/\/www.velasolaris.com\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/polysun.switzerland\/","https:\/\/www.linkedin.com\/company\/vela-solaris\/"]}]}},"publishpress_future_workflow_manual_trigger":{"enabledWorkflows":[]},"_links":{"self":[{"href":"https:\/\/www.velasolaris.com\/en\/wp-json\/wp\/v2\/handbuch\/117844","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.velasolaris.com\/en\/wp-json\/wp\/v2\/handbuch"}],"about":[{"href":"https:\/\/www.velasolaris.com\/en\/wp-json\/wp\/v2\/types\/handbuch"}],"author":[{"embeddable":true,"href":"https:\/\/www.velasolaris.com\/en\/wp-json\/wp\/v2\/users\/19748"}],"replies":[{"embeddable":true,"href":"https:\/\/www.velasolaris.com\/en\/wp-json\/wp\/v2\/comments?post=117844"}],"version-history":[{"count":1,"href":"https:\/\/www.velasolaris.com\/en\/wp-json\/wp\/v2\/handbuch\/117844\/revisions"}],"predecessor-version":[{"id":141145,"href":"https:\/\/www.velasolaris.com\/en\/wp-json\/wp\/v2\/handbuch\/117844\/revisions\/141145"}],"up":[{"embeddable":true,"href":"https:\/\/www.velasolaris.com\/en\/wp-json\/wp\/v2\/handbuch\/117832"}],"wp:attachment":[{"href":"https:\/\/www.velasolaris.com\/en\/wp-json\/wp\/v2\/media?parent=117844"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}