<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Автоматикус</title><generator>teletype.in</generator><description><![CDATA[Руслан Абдулин о промышленной автоматизации]]></description><link>https://automaticus.ru/?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=automaticus</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/automaticus?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/automaticus?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Tue, 21 Apr 2026 10:02:48 GMT</pubDate><lastBuildDate>Tue, 21 Apr 2026 10:02:48 GMT</lastBuildDate><item><guid isPermaLink="true">https://automaticus.ru/Simatic-PG-720-P</guid><link>https://automaticus.ru/Simatic-PG-720-P?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=automaticus</link><comments>https://automaticus.ru/Simatic-PG-720-P?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=automaticus#comments</comments><dc:creator>automaticus</dc:creator><title>Программатор Siemens Simatic PG 720 P</title><pubDate>Wed, 11 Aug 2021 05:32:16 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/c7/59/c759094e-0588-41da-b984-f942a64a3191.jpeg"></media:content><category>Программатор</category><tt:hashtag>siemens</tt:hashtag><tt:hashtag>simatic</tt:hashtag><tt:hashtag>simaticpg</tt:hashtag><tt:hashtag>программатор</tt:hashtag><tt:hashtag>компьютер</tt:hashtag><description><![CDATA[<img src="https://img4.teletype.in/files/75/11/7511f05d-06c6-410e-9417-47b9e982e5ff.jpeg"></img>Вот такой старичок помогает нам оживлять старые контроллеры Сименс. Удивительная вещь по своему дизайну.]]></description><content:encoded><![CDATA[
  <p>Вот такой старичок помогает нам оживлять старые контроллеры Сименс. Удивительная вещь по своему дизайну.</p>
  <p></p>
  <figure class="m_original">
    <img src="https://img4.teletype.in/files/75/11/7511f05d-06c6-410e-9417-47b9e982e5ff.jpeg" width="1200" />
    <figcaption>Программатор Siemens Simatic PG 720 P</figcaption>
  </figure>
  <p>Поставлялся он в комплекте с производственной линией вот в таком красивом чемоданчике.</p>
  <figure class="m_original">
    <img src="https://img2.teletype.in/files/91/97/9197382e-0643-4998-aec7-11268e97343a.jpeg" width="1200" />
  </figure>
  <p>Системный моноблок.</p>
  <figure class="m_original">
    <img src="https://img4.teletype.in/files/b8/46/b84664aa-da43-483f-a1e4-fba529a10f3a.jpeg" width="1200" />
  </figure>
  <figure class="m_original">
    <img src="https://img3.teletype.in/files/e9/13/e913bf5a-e9da-4ebc-a17a-50ecb40358d5.jpeg" width="1200" />
  </figure>
  <p>Клавиатура с трекболом подключается по PS/2 скрученным кабелем. Также есть возможность подключить мышь ко второму PS/2 разъему.</p>
  <figure class="m_original">
    <img src="https://img2.teletype.in/files/5f/84/5f843059-25bb-4b28-9940-668c599fa90b.jpeg" width="1200" />
  </figure>
  <p>Внутренности.</p>
  <figure class="m_original">
    <img src="https://img4.teletype.in/files/38/09/3809db16-4372-4b2b-babb-793461e4d931.jpeg" width="1200" />
  </figure>
  <figure class="m_original">
    <img src="https://img4.teletype.in/files/31/e6/31e66d09-e15a-4065-ac44-188ba6f7c0c0.jpeg" width="1200" />
  </figure>
  <tt-tags>
    <tt-tag name="siemens">#siemens</tt-tag>
    <tt-tag name="simatic">#simatic</tt-tag>
    <tt-tag name="simaticpg">#simaticpg</tt-tag>
    <tt-tag name="программатор">#программатор</tt-tag>
    <tt-tag name="компьютер">#компьютер</tt-tag>
  </tt-tags>

]]></content:encoded></item><item><guid isPermaLink="true">https://automaticus.ru/DataRate_Desktop_Bug</guid><link>https://automaticus.ru/DataRate_Desktop_Bug?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=automaticus</link><comments>https://automaticus.ru/DataRate_Desktop_Bug?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=automaticus#comments</comments><dc:creator>automaticus</dc:creator><title>Глюк с рабочим столом в DataRate 5.0 (исправлен)</title><pubDate>Tue, 03 Aug 2021 09:18:13 GMT</pubDate><category>SCADA</category><tt:hashtag>datarate</tt:hashtag><tt:hashtag>scada</tt:hashtag><tt:hashtag>scada_datarate</tt:hashtag><description><![CDATA[Нашел глюк с рабочим столом в DataRate: https://www.youtube.com/watch?v=R_HkOJJavSQ]]></description><content:encoded><![CDATA[
  <p>Нашел глюк с рабочим столом в DataRate: <a href="https://www.youtube.com/watch?v=R_HkOJJavSQ" target="_blank">https://www.youtube.com/watch?v=R_HkOJJavSQ</a></p>
  <figure class="m_column">
    <iframe src="https://www.youtube.com/embed/R_HkOJJavSQ?autoplay=0&loop=0&mute=0"></iframe>
  </figure>
  <p>Разработчики <a href="https://forum.energokrug.ru/topic.php?forum=4&topic=127" target="_blank">обещают исправить</a>.</p>
  <p>Обновлено. В версии 5.0 SP1 глюк устранили. Теперь ничего не съезжает. Спасибо разработчикам!</p>
  <tt-tags>
    <tt-tag name="datarate">#datarate</tt-tag>
    <tt-tag name="scada">#scada</tt-tag>
    <tt-tag name="scada_datarate">#scada_datarate</tt-tag>
  </tt-tags>

]]></content:encoded></item><item><guid isPermaLink="true">https://automaticus.ru/datarate-default-value</guid><link>https://automaticus.ru/datarate-default-value?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=automaticus</link><comments>https://automaticus.ru/datarate-default-value?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=automaticus#comments</comments><dc:creator>automaticus</dc:creator><title>Начальные значения тегов в DataRate</title><pubDate>Tue, 03 Aug 2021 08:56:38 GMT</pubDate><category>SCADA</category><tt:hashtag>scada</tt:hashtag><tt:hashtag>datarate</tt:hashtag><tt:hashtag>scada_datarate</tt:hashtag><description><![CDATA[В Датарейте есть баг (или фича?) с начальными значениями тегов. При изменении начального значения тега и последующим запуском в среде разработки новое значение успешно подчитывается. При запуске же в среде исполнения в первый раз начальные значения прочитываются и записываются в файл с расширением «.rtdb». В дальнейшем, если вы захотите изменить начальное значение тега, то в среде исполнения новое значение не будет прочитано, а будет взято из этого файла. Чтобы новое значение переменной отобразилось в среде исполнения нужно удалить файл «.rtdb».]]></description><content:encoded><![CDATA[
  <p>В Датарейте есть баг (или фича?) с начальными значениями тегов. При изменении начального значения тега и последующим запуском в среде разработки новое значение успешно подчитывается. При запуске же в среде исполнения в первый раз начальные значения прочитываются и записываются в файл с расширением «.rtdb». В дальнейшем, если вы захотите изменить начальное значение тега, то в среде исполнения новое значение не будет прочитано, а будет взято из этого файла. Чтобы новое значение переменной отобразилось в среде исполнения нужно удалить файл «.rtdb».</p>
  <p>В начальных значениях тегов могут храниться важные данные, например, номера команд на запуск оборудования. Думаю, разработчикам следует исправить этот недочет в скада-системе.</p>
  <p>Подробности на видео:</p>
  <figure class="m_column">
    <iframe src="https://www.youtube.com/embed/6V1nbiPENbg?autoplay=0&loop=0&mute=0"></iframe>
  </figure>
  <p>Поступил ответ от поддержки на <a href="https://forum.energokrug.ru/topic.php?forum=4&topic=126" target="_blank">официальном форуме</a></p>
  <h3>Support:</h3>
  <blockquote>Вы очень поверхностно смотрите на этот вопрос, не учитываете других ситуаций и заложенные возможности по манипуляции уставками Среды Исполнения в Среде Разработки.</blockquote>
  <blockquote>Значения уставок, сделанных в Среде Исполнения, важнее того что будет сделано в Среде Разработки.</blockquote>
  <blockquote>Проект может делаться типовым и уставки, сделанные в Среде Разработки, могут быть неверными для всех объектов на которых будет проект запущен в Среде Исполнения.</blockquote>
  <blockquote>В Среде Разработки есть возможность импортировать/экспортировать уставки из Среды Исполнения. Можно сделать в Среде Разработки такой набор данных, который будет состоять как из данных реального диспетчера, так из того что было сделано инженером в Среде Разработки.</blockquote>
  <blockquote>При запуске системы на исполнение происходит проверка на наличие измененных данных атрибутов тегов в Среде Исполнения. Если такие данные есть, то изменения игнорируются. Это сделано умышленно, чтобы не перетирать уставки диспетчера при перезапуске системы после модификаций проекта. Если пользователь уверен, что ему ничего сохранять не нужно было, то он удалит файл и получит полную копию уставок из проекта.</blockquote>
  <h3>Я:</h3>
  <blockquote>Согласен, что возможность сохранять настройки, введенные оператором нужна, только обычно она реализуется при помощи сохраняемых переменных в контроллере или рецептов в скаде. Сейчас механизм сохранения значений в rtdb непрозрачен. Пользователь получает разные значения в разработке и в исполнении! Возможно стоит сделать галку напротив переменной — является ли она сохраняемой или нет, как это делается в контроллерах или вообще предусмотреть возможность глобально включать и отключать базу rtdb.</blockquote>
  <h3>Support:</h3>
  <blockquote>В настоящее время продуктом пользуется очень много людей и они знают о том как работает продукт в этой части. Многие системы уже более 10 лет работают на объектах без изменений в части БДРВ. Мы не можем легко и просто менять такие вещи, даже если это будет в каких-то случаях удобно. Дополнительные параметры вводить можно, но только если это будет действительно необходимо. Если у Вас очень большой проект и данная ситуация для вас критическая, то обратитесь в техническую поддержку и мы постараемся выработать приемлемое решение.</blockquote>
  <tt-tags>
    <tt-tag name="scada">#scada</tt-tag>
    <tt-tag name="datarate">#datarate</tt-tag>
    <tt-tag name="scada_datarate">#scada_datarate</tt-tag>
  </tt-tags>

]]></content:encoded></item><item><guid isPermaLink="true">https://automaticus.ru/DataRate50</guid><link>https://automaticus.ru/DataRate50?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=automaticus</link><comments>https://automaticus.ru/DataRate50?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=automaticus#comments</comments><dc:creator>automaticus</dc:creator><title>DataRate 5.0 — Исправление ошибки словаря событий при конвертации проекта из старой версии</title><pubDate>Tue, 03 Aug 2021 08:30:22 GMT</pubDate><category>SCADA</category><tt:hashtag>scada_datarate</tt:hashtag><tt:hashtag>scada</tt:hashtag><tt:hashtag>видео</tt:hashtag><description><![CDATA[Установил версию DataRate 5.0, открыл в ней проект, созданный в версии 4.1. После верификации проекта появились ошибки словаря событий, хотя в предыдущей версии ошибок не было. Проблему решил протыкиванием каждой строки в колонке «Группа событий». Прошу разработчиков обратить внимание на этот баг. Подробности на видео: https://www.youtube.com/watch?v=cV5JrUWflB4]]></description><content:encoded><![CDATA[
  <figure class="m_column">
    <iframe src="https://www.youtube.com/embed/cV5JrUWflB4?autoplay=0&loop=0&mute=0"></iframe>
  </figure>
  <p>Установил версию DataRate 5.0, открыл в ней проект, созданный в версии 4.1. После верификации проекта появились ошибки словаря событий, хотя в предыдущей версии ошибок не было. Проблему решил протыкиванием каждой строки в колонке «Группа событий». Прошу разработчиков обратить внимание на этот баг. Подробности на видео: <a href="https://www.youtube.com/watch?v=cV5JrUWflB4" target="_blank">https://www.youtube.com/watch?v=cV5JrUWflB4</a></p>
  <tt-tags>
    <tt-tag name="scada_datarate">#scada_datarate</tt-tag>
    <tt-tag name="scada">#scada</tt-tag>
    <tt-tag name="видео">#видео</tt-tag>
  </tt-tags>

]]></content:encoded></item><item><guid isPermaLink="true">https://automaticus.ru/4k-SCADA</guid><link>https://automaticus.ru/4k-SCADA?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=automaticus</link><comments>https://automaticus.ru/4k-SCADA?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=automaticus#comments</comments><dc:creator>automaticus</dc:creator><title>4k монитор для SCADA-системы</title><pubDate>Tue, 03 Aug 2021 07:27:30 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/f8/5a/f85a4a14-9f95-4a57-9465-d0dc770f9120.jpeg"></media:content><category>SCADA</category><tt:hashtag>scada</tt:hashtag><tt:hashtag>асутп</tt:hashtag><tt:hashtag>монитор</tt:hashtag><tt:hashtag>4k</tt:hashtag><description><![CDATA[<img src="https://img3.teletype.in/files/6f/b2/6fb2391b-4008-4852-abda-2a5113a1b6db.jpeg"></img>Часто для визуализации технологического процесса одного стандартного монитора недостаточно. Решить эту проблему можно при помощи переключаемых экранов, но это не всегда удобно — гораздо лучше иметь всю информацию сразу перед глазами. В этом случае обычно ставят несколько мониторов. К компьютеру со встроенным видео или обычной видеоплатой можно подключить одновременно два монитора.]]></description><content:encoded><![CDATA[
  <figure class="m_original">
    <img src="https://img3.teletype.in/files/6f/b2/6fb2391b-4008-4852-abda-2a5113a1b6db.jpeg" width="1200" />
  </figure>
  <p>Часто для визуализации технологического процесса одного стандартного монитора недостаточно. Решить эту проблему можно при помощи переключаемых экранов, но это не всегда удобно — гораздо лучше иметь всю информацию сразу перед глазами. В этом случае обычно ставят несколько мониторов. К компьютеру со встроенным видео или обычной видеоплатой можно подключить одновременно два монитора.</p>
  <figure class="m_original">
    <img src="https://img1.teletype.in/files/41/f5/41f54c22-2b79-4c5e-acf0-0d20458a9606.jpeg" width="1200" />
    <figcaption>SCADA-система с двумя мониторами</figcaption>
  </figure>
  <p>Если требуется больше, то придется покупать видеокарту вроде nVidia Quadro. Мониторы, расположенные в ряд на столе занимают очень много места, а оператору придется весь день крутить шеей.</p>
  <figure class="m_original">
    <img src="https://img1.teletype.in/files/0a/1a/0a1a46af-f1dd-4f38-bd0e-90aecfc1d9aa.jpeg" width="1200" />
    <figcaption>Пульт оператора с множеством мониторов</figcaption>
  </figure>
  <p>Если мониторы их располагать друг над другом, то придется озадачиться специальными стойками и креплениями. Несколько мониторов удобны, когда приходится выводить картинку с разных компьютеров.</p>
  <figure class="m_original">
    <img src="https://img1.teletype.in/files/4a/4d/4a4d87e1-485a-4ecd-8a05-8d44b3d14dc3.jpeg" width="1200" />
    <figcaption>Система с четыремя FullHD мониторами</figcaption>
  </figure>
  <p>Для новых объектов решили попробовать нестандартное решение — поставить один большой 43-х дюймовый 4k монитор вместо четырех стандартных мониторов.</p>
  <figure class="m_original">
    <img src="https://img2.teletype.in/files/da/9e/da9ea123-fdfb-4168-98ca-64ae0f67a5ca.jpeg" width="1200" />
    <figcaption>SCADA-система на 4k мониторе 43&quot;</figcaption>
  </figure>
  <p>Решение полностью себя оправдало. Монитор подключен к встроенному видеоадаптеру (Intel UHD Graphics 630 в процессоре i3), никаких дополнительных видеокарт не требуется. Места такой монитор занимает намного меньше, чем четыре, расположенные в ряд. Теперь новые системы с большим количеством информации делаем преимущественно на 4k мониторах.</p>
  <p></p>
  <tt-tags>
    <tt-tag name="scada">#scada</tt-tag>
    <tt-tag name="асутп">#асутп</tt-tag>
    <tt-tag name="монитор">#монитор</tt-tag>
    <tt-tag name="4k">#4k</tt-tag>
  </tt-tags>

]]></content:encoded></item><item><guid isPermaLink="true">https://automaticus.ru/regulirovanie-zadvizhkoy-bez-datchika-polozheniya</guid><link>https://automaticus.ru/regulirovanie-zadvizhkoy-bez-datchika-polozheniya?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=automaticus</link><comments>https://automaticus.ru/regulirovanie-zadvizhkoy-bez-datchika-polozheniya?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=automaticus#comments</comments><dc:creator>automaticus</dc:creator><title>Регулирование задвижкой без датчика положения</title><pubDate>Tue, 03 Aug 2021 06:53:59 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/74/65/74655621-ce1e-4554-b4a0-c41e359fc9c4.png"></media:content><category>ПИД-регулятор</category><description><![CDATA[<img src="https://img3.teletype.in/files/a1/41/a14145c9-8bca-4932-8cdd-78b2954d80a7.png"></img>Стандартные ПИД-регуляторы в средах разработки программ для контроллеров предназначены для управления исполнительными механизмами с аналоговым входом, такими как преобразователь частоты или задвижка с заданием степени открытия. Для подобного исполнительного механизма достаточно просто соединить его вход с выходом регулятора. Рассмотрим более простую версию ПИД-регулятора – ПИ-регулятор, дискретная формула которого имеет следующий вид:]]></description><content:encoded><![CDATA[
  <p>Стандартные ПИД-регуляторы в средах разработки программ для контроллеров предназначены для управления исполнительными механизмами с аналоговым входом, такими как преобразователь частоты или задвижка с заданием степени открытия. Для подобного исполнительного механизма достаточно просто соединить его вход с выходом регулятора. Рассмотрим более простую версию ПИД-регулятора – ПИ-регулятор, дискретная формула которого имеет следующий вид:</p>
  <figure class="m_original">
    <img src="https://img3.teletype.in/files/a1/41/a14145c9-8bca-4932-8cdd-78b2954d80a7.png" width="794" />
  </figure>
  <p>Что же делать если у нашей задвижки нет датчика положения или он недостаточно надежен для регулирования и используется только для индикации? В этом случае следует управлять задвижкой в инкрементном режиме –  сигналы «больше» и «меньше». Для этого воспользуемся формулой инкрементного ПИ-регулятора, которая получается путем дифференцирования предыдущей формулы:</p>
  <figure class="m_original">
    <img src="https://img3.teletype.in/files/2e/81/2e8192ae-ae2d-4404-91dd-32ddd57940c6.png" width="794" />
  </figure>
  <p>Фактически это ПД-регулятор, сигнал с которого будет проинтегрирован самой инкрементной задвижкой и на выходе мы получим пропорционально-интегральный закон регулирования.</p>
  <p>Выход регулятора для удобства выразим в процентах от −100% до +100%. Он является входным значением для широтно-импульсной модуляции (ШИМ). Для ШИМ необходимо задать период. Он должен быть значительно больше цикла программы. Выход регулятора устанавливает долю времени от периода ШИМ, в течение которого задвижка открывается или закрывается. Положительные значения соответствуют открытию задвижки, а отрицательные – закрытию.</p>
  <p>PWM.png</p>
  <p>Далее фрагмент реальной программы регулятора температуры пара на языке CoDeSys в среде программирования Schneider SoMachine.</p>
  <h3><strong>Глобальные переменные</strong></h3>
  <pre>VAR_GLOBAL
END_VAR
VAR_GLOBAL
	// Длительность цикла - секунды
	Cycle: REAL := 0.05;
	// Температура перегретой воды - градусы
	T: REAL;
	// Отказ датчика температуры
	T_err: BOOL;
	// Значение выхода регулятора
	Y: REAL;
	// Автоматический режим регулятора активен
	Reg_auto: BOOL;
	// Применить новые значения параметров
	Set_parameters: BOOL;
	// Активна новая сигнализация
	New_Alarm: BOOL;
	// Флаг первого цикла программы
	First_Cycle: BOOL := true;
END_VAR</pre>
  <h3>Программа регулятора - описательная часть</h3>
  <pre>PROGRAM Regulator
VAR
	// Рассогласование
	E: REAL;
	// Рассогласование - старое значение
	E_old: REAL;
	// Температура - старое значение
	T_old: REAL;
	// Изменение рассогласования
	dE: REAL;
	// Изменение рассогласования - старое значение
	dE_old: REAL;
	// Точное время между соседними измерениями
	dt_izm: REAL;
END_VAR
VAR RETAIN
	// Задание периода между соседними измерениями, секунды
	Period_reg: REAL := 5.0;
END_VAR
VAR
	// Новое задание периода между соседними измерениями, секунды
	Period_reg_new: REAL;
	// Количество циклов, соответствующее времени между соседними измерениями
	Period_reg_cycles: INT;
	// Счетчик циклов
	i: INT;
END_VAR
VAR RETAIN
	// Коэффициент усиления регулятора
	Kp: REAL := 100.0;
	// Постоянная времени регулятора, секунды
	Tn: REAL := 300.0;
END_VAR
VAR
	// Температура перегретой воды - задание, градусы
	T_set: REAL := 140.0;
	// Коэффициент усиления регулятора - новое значение	
	Kp_new: REAL;
	// Температура перегретой воды - задание, градусы - новое значение
	Tn_new: REAL;
END_VAR
VAR RETAIN
	// Зона нечувствительности, градусы
	Zona: REAL := 0.3;
END_VAR
VAR
	// Зона нечувствительности, градусы - новое значение
	Zona_new: REAL;
END_VAR</pre>
  <h3>Программа регулятора - исполнительная часть</h3>
  <pre>// Установка новых коэффициентов регулятора
IF GVL.Set_parameters THEN
	Kp := Kp_new;
	Tn := Tn_new;
	Period_reg := Period_reg_new;
	Zona := Zona_new;
END_IF</pre>
  <pre>// Если регулятор находится в автоматическом режиме
IF GVL.Reg_auto THEN
	// Расчет количества циклов между соседними измерениями
	Period_reg_cycles := REAL_TO_INT(Period_reg / GVL.Cycle);
	// Точное время между соседними измерениями (после округления по количеству циклов) 
	dt_izm := GVL.Cycle * Period_reg_cycles;</pre>
  <pre>	// Начало нового цикла регулятора
	IF i = 0 THEN
		// Рассогласование
		E := T_set - GVL.T;
		
		// Зона нечувствительности		
		IF ABS(E) &lt; Zona THEN
			E := 0;
		ELSE
			IF E &gt; 0 THEN
				E := E - Zona;
			ELSE
				E := E + Zona;
			END_IF 
		END_IF
			
		// Изменение рассогласования
		dE := E - E_old;
		// Выход регулятора, %
		GVL.Y := Kp * (dE / dt_izm + E / Tn);
		
		// Верхнее ограничение регулятора = 100%	
		IF GVL.Y &gt; 100 THEN
			GVL.Y := 100;
		END_IF
	
		// Нижнее ограничение регулятора = -100%
		IF GVL.Y &lt; -100 THEN
			GVL.Y := -100;
		END_IF
		
		// Замена старых значений новыми
		E_old := E;
		dE_old := dE;
		T_old := GVL.T;
	END_IF
	
	// Счетчик циклов контроллера
	i := i + 1;
	// Определение конца цикла регулятора
	IF i &gt;= Period_reg_cycles THEN
		i := 0;
	END_IF
END_IF</pre>
  <h3>Программа позиционера задвижки - описательная часть</h3>
  <pre>PROGRAM Valve
VAR
	// Счетчик циклов
	Count: INT;
END_VAR
VAR RETAIN
	// Период ШИМ, секунды
	Period_PWM: REAL := 5.0;
END_VAR
VAR
	// Период ШИМ - новое значение, секунды
	Period_PWM_new: REAL;
	// Период ШИМ, циклы
	Period_PWM_cycles: INT;
	// Значение ШИМ, циклы
	Value: INT;
END_VAR
VAR RETAIN
	// Минимальное время движения клапана, секунды
	Min_value: REAL := 0.15;
END_VAR
VAR
	// Минимальное время движения клапана - новое значение, секунды
	Min_value_new: REAL;
	// Минимальное время движения клапана, циклы
	Min_value_cycles: INT;
	// Открыть клапан - дискретный выход
	Open: BOOL;
	// Закрыть клапан - дискретный выход
	Close: BOOL;
	// Открыть клапан - команда оператора
	Open_manual: BOOL;
	// Закрыть клапан - команда оператора
	Close_manual: BOOL;
	// Открыть клапан полностью - команда оператора
	Open_manual_full: BOOL;
	// Закрыть клапан полностью - команда оператора
	Close_manual_full: BOOL;
	// Остановаить клапан - команда оператора
	Stop_manual: BOOL;
	// Клапан открыт
	Opened: BOOL;
	// Клапан открыт
	Closed: BOOL;
	// Открытие клапана
	Closing: BOOL;
	// Закрытие клапана
	Opening: BOOL;
	// Авария клапана
	Alarm: BOOL;
	RS1: RS;
	RS2: RS;
END_VAR</pre>
  <h3>Программа позиционера задвижки - исполнительная часть</h3>
  <pre>// Применение новых настроек
IF GVL.Set_parameters THEN
	Period_PWM := Period_PWM_new;
	Min_value := Min_value_new;
END_IF;</pre>
  <pre>// Расчет периода ШИМ в циклах
Period_PWM_cycles := REAL_TO_INT(Period_PWM / GVL.Cycle);</pre>
  <pre>// Расчет минимального времени движения клапана в циклах
Min_value_cycles := REAL_TO_INT(Min_value / GVL.Cycle);</pre>
  <pre>// Автоматический режим регулятора
IF GVL.Reg_auto THEN
	// Значение ШИМ в циклах
	Value := REAL_TO_INT(GVL.Y / 100 * Period_PWM_cycles);</pre>
  <pre>	// Определение направления движения клапана
	IF (Value &gt; 0) THEN
		Open := TRUE;
	ELSE 
		Close := TRUE;
	END_IF;</pre>
  <pre>	// Если счетчик циклов меньше минимального значения или больше значения ШИМ, то остановить движение клапана
	IF ABS(Value) &lt; Min_value OR ABS(Value) &lt; Count THEN
		Open := FALSE;
		Close := FALSE;
	END_IF;
	
	// Счетчик циклов контроллера
	Count := Count + 1;</pre>
  <pre>	// Определение конца периода ШИМ
	IF Count &gt; Period_PWM_cycles THEN
		Count := 0;	
	END_IF;</pre>
  <pre>	// Конечный выключатель закрытого состояния
	IF GVL.T &lt; 81 OR Closed THEN
		Close := FALSE;
	END_IF;</pre>
  <pre>	// Конечный выключатель открытого состояния
	IF GVL.T &gt; 179 OR Opened THEN
		Open := FALSE;
	END_IF;
// Ручной режим работы регулятора
ELSE
	// Триггер полного открытия
	RS1(SET := Open_manual_full , RESET1 := (Opened OR Open_manual OR Close_manual OR Close_manual_full OR Stop_manual));
 	Opening := RS1.Q1 ;
	
	// Триггер полного закрытия
	RS2(SET := Close_manual_full , RESET1 := (Closed OR Open_manual OR Close_manual OR Open_manual_full OR Stop_manual));
 	Closing := RS2.Q1 ; </pre>
  <pre>	// Открыть
	IF (Open_manual OR Opening) AND NOT Opened THEN
		Open := TRUE;
	ELSE
		Open := FALSE;
	END_IF;
	
	// Закрыть
	IF (Close_manual OR Closing) AND NOT Closed THEN
		Close := TRUE;
	ELSE
		Close := FALSE;
	END_IF;
END_IF;</pre>
  <h3>Ссылки</h3>
  <p><a href="https://www.bookasutp.ru/Chapter5_4_6.aspx" target="_blank">Энциклопедия АСУТП. Дискретная форма регулятора</a><br /><a href="https://ru.wikipedia.org/wiki/ПИД-регулятор" target="_blank">Википедия. ПИД-регулятор</a><br /><a href="https://www.owen.ru/uploads/rie_trm12_m_din__956.pdf" target="_blank">Овен ТРМ12. Руководство по эксплуатации</a></p>

]]></content:encoded></item></channel></rss>