<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'> <html class="client-nojs" dir="ltr" lang="en"> <head> <meta charset="UTF-8" /> <title>Документы/Как/ОÑущеÑтвÑÑ‚ÑŒ цикличеÑкое программирование - OpenSCADAWiki</title> <meta content="MediaWiki 1.26.4" name="generator" /> <link href="https://www.gnu.org/copyleft/fdl.html" rel="copyright" /> <link href="../en/files/doc.css" rel="stylesheet" /></head> <body><div class="floatright"><a href="index.html"><img alt="OpenSCADA" src="../en/files/index.png" /></a></div><div id="mw_header"> <div class="mw-indicators"> </div> <h1 id="firstHeading" lang="ru">Документы/Как/ОÑущеÑтвÑÑ‚ÑŒ цикличеÑкое программирование</h1> </div><div class="mw-content-ltr" dir="ltr" id="mw-content-text" lang="ru"><div class="mw-pt-translate-header noprint" dir="ltr" lang="en">This page is a <span class="plainlinks"><a class="external text" href="http://oscada.org/wiki/index.php?title=Special:Translate&group=page-Documents%2FHow+to%2FCyclic+programming&action=page&filter=&language=ru" rel="nofollow noreferrer noopener" target="_blank">translated version</a></span> of the page <a class="external" href="http://oscada.org/wiki/Documents/How_to/Cyclic_programming" title="Documents/How to/Cyclic programming">Documents/How to/Cyclic programming</a> and the translation is 100% complete.</div><hr /><div class="mw-pt-languages" dir="ltr" lang="en"><div class="mw-pt-languages-list autonym"><a class="mw-pt-languages-ui mw-pt-progress mw-pt-progress--complete" href="../en/How_to_Cyclic_programming.html" title="Documents/How to/Cyclic programming (100% translated)">English</a> • ‎<span class="mw-pt-languages-selected mw-pt-progress mw-pt-progress--complete">mRussian</span> • ‎<a class="mw-pt-progress mw-pt-progress--complete" href="../uk/How_to_Cyclic_programming.html" title="Документи/Як/ЗдійÑнювати циклічне Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼ÑƒÐ²Ð°Ð½Ð½Ñ (100% translated)">УкраїнÑька</a></div></div> <div style="float:right; border:1px solid gray; width:300px; padding:2px; margin-left: 10pt; margin-bottom: 10pt;"> <ul><li> <b>Ðвтор:</b> <a class="external" href="http://oscada.org/wiki/User:RomanSavochenko" title="User:RomanSavochenko">Роман Савоченко</a></li></ul> </div> <p>У начинающих пользователей чаÑто возникает Ð²Ð¾Ð¿Ñ€Ð¾Ñ Ð¾Ð±ÐµÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð´ÐµÑ€Ð¶ÐºÐ¸ временных интервалов при программировании вычиÑлительных процедур в окружении OpenSCADA. Ðтот Ð²Ð¾Ð¿Ñ€Ð¾Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ð¾ ÑвÑзан Ñ Ð½Ð°Ð»Ð¸Ñ‡Ð¸ÐµÐ¼ предыдущего опыта Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð»Ð¸Ð½ÐµÐ¹Ð½Ñ‹Ñ… вычиÑлений и отÑутÑтвием опыта Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ†Ð¸ÐºÐ»Ð¸Ñ‡ÐµÑких ÑиÑтем реального времени. </p><p>Ð’ ÑиÑтемах реального времени иÑпользуетÑÑ Ñ‚Ð°Ðº называемый такт или цикл периодичеÑких вычиÑлений — ритм "жизни". Ð’ каждом такте выполнÑетÑÑ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð°, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð½Ðµ должна занимать времени больше такта — периода цикла. Как ÑледÑтвие, еÑли процедура такта оÑтанавливаетÑÑ Ð² ожидании, то оÑтанавливаетÑÑ Ð¸ жизнь ÑиÑтемы реального времени. Следовательно, недопуÑтимо иÑпользование в Ñтих процедурах традиционных функций уÑÑ‹Ð¿Ð»ÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ñ‡Ð¸ на большие интервалы времени! </p><p>Решение задачи выдержки большого интервала времени, более периодичноÑти цикла, в ÑиÑтемах реального времени оÑущеÑтвлÑетÑÑ Ð² два ÑпоÑоба. </p><p>Первый ÑпоÑоб заключаетÑÑ Ð² декременте Ñчётчика, уÑтановленного в значение временного интервала, в каждом цикле и на значение периодичноÑти такта до Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ <=0, например, в OpenSCADA Ñто реализуетÑÑ Ñ‚Ð°ÐºÐ¸Ð¼ образом: </p> <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="k">if</span><span class="p">((</span><span class="nx">tm_cnt</span><span class="o">-=</span><span class="mi">1</span><span class="o">/</span><span class="nx">f_frq</span><span class="p">)</span> <span class="o"><=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> <span class="c1">//Декремент</span> <span class="nx">tm_cnt</span> <span class="o">=</span> <span class="mi">10</span><span class="p">;</span> <span class="c1">//УÑтановка Ñчётчика в значение 10 Ñекунд</span> <span class="c1">//Выполнение других дейÑтвий Ñ Ð¿ÐµÑ€Ð¸Ð¾Ð´Ð¸Ñ‡Ð½Ð¾Ñтью 10 Ñекунд</span> <span class="p">}</span> </pre></div> <p>Второй ÑпоÑоб оÑнован на абÑолютном времени, Ñ‚.е. в цикле оÑущеÑтвлÑетÑÑ Ñравнение Ñ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ð¼ временем, например, в OpenSCADA Ñто реализуетÑÑ Ñ‚Ð°ÐºÐ¸Ð¼ образом: </p> <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="k">if</span><span class="p">(</span><span class="nx">SYS</span><span class="p">.</span><span class="nx">time</span><span class="p">()</span> <span class="o">></span> <span class="nx">tm_to</span><span class="p">)</span> <span class="p">{</span> <span class="nx">tm_to</span> <span class="o">=</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">time</span><span class="p">()</span><span class="o">+</span><span class="mi">10</span><span class="p">;</span> <span class="c1">//УÑтановка порога Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð½Ð° 10 Ñекунд более текущего времени</span> <span class="c1">//Выполнение других дейÑтвий Ñ Ð¿ÐµÑ€Ð¸Ð¾Ð´Ð¸Ñ‡Ð½Ð¾Ñтью 10 Ñекунд</span> <span class="p">}</span> </pre></div> <p>Второй ÑпоÑоб ÑвлÑетÑÑ Ð±Ð¾Ð»ÐµÐµ надёжным поÑкольку в нём иÑключаетÑÑ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð° Ð·Ð°Ð¿Ð°Ð·Ð´Ñ‹Ð²Ð°Ð½Ð¸Ñ ÑÑ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ причине возможного Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹ цикла более времени такта — Ð¿Ð¾Ñ‚ÐµÑ€Ñ Ñ‚Ð°ÐºÑ‚Ð¾Ð²-циклов. Ð¥Ð¾Ñ‚Ñ Ð² правильно наÑтроенных конфигурациÑÑ… и задачах данный Ñффект не должен иметь меÑто, а также, поÑледние верÑии OpenSCADA в оÑновном учитывают такие потери циклов в раÑчёте Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ <i>f_frq</i>. </p> </div><table style="border-top: dotted 2px #999999; margin-top: 20pt; color: gray;" width="100%"><tr><td style="text-align: left;" width="40%"><a href="http://oscada.org/wiki/Documents/How_to/Cyclic_programming/ru">Documents/How_to/Cyclic_programming/ru</a> - <a href="http://oscada.org/en/main/about-the-project/licenses/">GFDL</a></td><td style="text-align: center;">April 2025</td><td style="text-align: right;" width="40%">OpenSCADA 1+r3018</td></tr></table></body> </html>