<?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%2FDAQ&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/DAQ" title="Documents/DAQ">Documents/DAQ</a> and the translation is 91% 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/DAQ.html" title="Documents/DAQ (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/DAQ.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>Сбор данных SCADA(Supervisory Control and Data Acquisition)-ÑиÑтемы ÑвлÑетÑÑ ÐµÑ‘ неотъемлемой чаÑтью, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ‚ÑÑ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸ÐµÐ¼ данных из иÑточников различного проиÑхождениÑ. Природа данных, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ работает SCADA, характеризуетÑÑ Ñигналами базовых типов значений (целое, вещеÑтвенное, логичеÑкое и Ñтрока). Сигналы изменÑÑŽÑ‚ÑÑ Ð²Ð¾ времени и обладает иÑторией — жизнью. Ð’ теории ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‚ÐµÑ…Ð½Ð¾Ð»Ð¾Ð³Ð¸Ñ‡ÐµÑкими процеÑÑами (ТП), под Ñигналом понимаетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ датчика уÑтановки ТП в коде ÐЦП — "Ñырой" Ñигнал или в реальном значении — инженерный. Сигналы могут объединÑтьÑÑ Ð² группы по ÑмыÑловой нагрузке, чаÑто называемые параметрами или комплекÑным тегом. Ðапример, развитые иÑточники данных могут предоÑтавлÑть Ñтруктуры параметров Ñ Ð¿Ñ€ÐµÐ´Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¼ набором ÑвÑзанных Ñигналов. Кроме непоÑредÑтвенного Ñбора данных, в функции Ñтого механизма также входит и передача воздейÑтвий на иÑполнительные уÑтройÑтва ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¢ÐŸ, обычно Ñто: задвижки, наÑоÑÑ‹ и регулирующие клапаны. Совокупно, Ñто оборудование получило название — УÑтройÑтво СопрÑÐ¶ÐµÐ½Ð¸Ñ Ñ ÐžÐ±ÑŠÐµÐºÑ‚Ð¾Ð¼ (УСО). </p><p>ИÑточники данных характеризуютÑÑ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¼ разнообразием, которое можно уÑловно разделить на три группы: </p> <ul><li> ИÑточники "Ñырых" данных, предоÑтавлÑющие код ÐЦП или уровни диÑкретных Ñигналов, а также включающие проÑтейшую обработку. Обычно Ñто модули раÑÑредоточенного УСО или проÑтейшие промышленные программируемые логичеÑкие контроллеры (ПЛК).</li> <li> Мощные промышленные ПЛК, обладающие значительной вычиÑлительной мощноÑтью и возможноÑтью Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñложных параметров Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ð¾Ð¹ Ñтруктурой.</li> <li> Локальные или ÑопутÑтвующие иÑточники данных. Ðапример, УСО в виде плат раÑширениÑ, а также данные аппаратного и программного Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ð² котором функционирует ÑиÑтема.</li></ul> <p>Разнообразие иÑточников данных породило большой Ñпектр механизмов доÑтупа к ним. Локальные иÑточники данных различаютÑÑ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñами Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (API), а Ñетевые иÑточники, в Ñвою очередь, транÑпортным и протокольным уровнÑми взаимодейÑтвиÑ. Ð’ целом, Ñто привело к тому, что добавление поддержки нового иÑточника данных требует Ñоздание Ð¼Ð¾Ð´ÑƒÐ»Ñ ÑопрÑÐ¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ драйвера. Ð£Ñ‡Ð¸Ñ‚Ñ‹Ð²Ð°Ñ Ð¶Ðµ большое разнообразие иÑточников, Ñто крайне накладно и фактичеÑки нереально охватить веÑÑŒ Ñпектр рынка таких уÑтройÑтв. Ð¡Ð¸Ñ‚ÑƒÐ°Ñ†Ð¸Ñ Ð½ÐµÑколько упрощаетÑÑ Ñ Ñетевыми иÑточниками, Ð±Ð»Ð°Ð³Ð¾Ð´Ð°Ñ€Ñ Ð½Ð°Ð»Ð¸Ñ‡Ð¸ÑŽ Ñ€Ñда Ñтандартных и Ñвободных протоколов взаимодейÑтвиÑ, однако многие иÑточники вÑÑ‘ же иÑпользуют ÑобÑтвенные протоколы: закрытые коммерчеÑкие или протоколы, завÑзанные на закрытые механизмы коммерчеÑких операционных ÑиÑтем (ОС). </p><p>Ð’ терминах OpenSCADA, предоÑтавлÑÑŽÑ‚ÑÑ Ñледующие объекты модели данных обÑÐ»ÑƒÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÑ…Ð°Ð½Ð¸Ð·Ð¼Ð° Ñбора данных: </p> <ul><li> "Ðтрибут" — объект Ð¾Ñ‚Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… Ñигнала, включает текущее значение определённого типа Ñигнала и доÑтуп к иÑтории Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñтих значений;</li> <li> "Параметр" — объект группы атрибутов Ñо Ñтруктурой, ÑоответÑтвующей оÑобенноÑÑ‚Ñм отдельно взÑтого иÑточника данных;</li> <li> "Объект контроллера" — объект отдельного уÑтройÑтва данных. Как правило Ñто отдельный модуль УСО или уÑтройÑтво промышленного ПЛК.</li></ul> <p>Ð”Ð»Ñ ÑƒÑ‡Ñ‘Ñ‚Ð° оÑобенноÑтей различных уÑтройÑтв Ñбора данных, а также различных механизмов взаимодейÑтвиÑ, в OpenSCADA предуÑмотрена <a href="Program_manual.html#DAQ" title="Special:MyLanguage/Documents/Program manual">подÑиÑтема "Сбор данных"</a>, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ ÑвлÑетÑÑ Ð¼Ð¾Ð´ÑƒÐ»ÑŒÐ½Ð¾Ð¹. Ð’ качеÑтве Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð¿Ð¾Ð´ÑиÑтемы выÑтупает драйвер ÑопрÑÐ¶ÐµÐ½Ð¸Ñ Ñ Ð¸Ñточником данных отдельного типа. Каждый модуль может Ñодержать конфигурацию неÑкольких уÑтройÑтв Ñтого типа в виде объектов контроллера. ÐžÐ±Ñ‰Ð°Ñ Ñхема объектов подÑиÑтемы "Сбор данных" изображена на риÑунке 1. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:309px;"><a class="image" href="http://oscada.org/wiki/File:Oscada_subsys_daq_str_ru.png"><img class="thumbimage" height="335" src="files/Oscada_subsys_daq_str_ru.png" width="307" /></a> <div class="thumbcaption">РиÑ. 1. Схема подÑиÑтемы "Сбор данных".</div></div></div></div> <div class="toc" id="toc"><div id="toctitle"><h2>Contents</h2></div> <ul> <li class="toclevel-1 tocsection-1"><a href="#.D0.9C.D0.B5.D1.82.D0.BE.D0.B4.D1.8B_.D1.81.D0.B1.D0.BE.D1.80.D0.B0_.D0.B4.D0.B0.D0.BD.D0.BD.D1.8B.D1.85"><span class="tocnumber">1</span> <span class="toctext">Методы Ñбора данных</span></a> <ul> <li class="toclevel-2 tocsection-2"><a href="#.D0.9F.D1.80.D0.BE.D1.81.D1.82.D0.BE.D0.B9_.D1.81.D0.B8.D0.BD.D1.85.D1.80.D0.BE.D0.BD.D0.BD.D1.8B.D0.B9_.D0.BC.D0.B5.D1.85.D0.B0.D0.BD.D0.B8.D0.B7.D0.BC_.D1.81.D0.B1.D0.BE.D1.80.D0.B0"><span class="tocnumber">1.1</span> <span class="toctext">ПроÑтой Ñинхронный механизм Ñбора</span></a></li> <li class="toclevel-2 tocsection-3"><a href="#.D0.9F.D1.80.D0.BE.D1.81.D1.82.D0.BE.D0.B9_.D0.B0.D1.81.D0.B8.D0.BD.D1.85.D1.80.D0.BE.D0.BD.D0.BD.D1.8B.D0.B9_.D0.BC.D0.B5.D1.85.D0.B0.D0.BD.D0.B8.D0.B7.D0.BC_.D1.81.D0.B1.D0.BE.D1.80.D0.B0"><span class="tocnumber">1.2</span> <span class="toctext">ПроÑтой аÑинхронный механизм Ñбора</span></a></li> <li class="toclevel-2 tocsection-4"><a href="#.D0.9F.D0.B0.D0.BA.D0.B5.D1.82.D0.BD.D1.8B.D0.B9_.D0.BC.D0.B5.D1.85.D0.B0.D0.BD.D0.B8.D0.B7.D0.BC_.D1.81.D0.B1.D0.BE.D1.80.D0.B0"><span class="tocnumber">1.3</span> <span class="toctext">Пакетный механизм Ñбора</span></a></li> <li class="toclevel-2 tocsection-5"><a href="#.D0.9F.D0.B0.D1.81.D1.81.D0.B8.D0.B2.D0.BD.D1.8B.D0.B9_.D0.BC.D0.B5.D1.85.D0.B0.D0.BD.D0.B8.D0.B7.D0.BC_.D1.81.D0.B1.D0.BE.D1.80.D0.B0_.D0.B8_.D0.B8.D0.BD.D0.B8.D1.86.D0.B8.D0.B0.D1.82.D0.B8.D0.B2.D0.BD.D1.8B.D0.B5_.D0.BF.D0.BE.D0.B4.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.BD.D0.B8.D1.8F"><span class="tocnumber">1.4</span> <span class="toctext"><span>ПаÑÑивный механизм Ñбора и инициативные подключениÑ</span></span></a></li> </ul> </li> <li class="toclevel-1 tocsection-6"><a href="#.D0.92.D0.B8.D1.80.D1.82.D1.83.D0.B0.D0.BB.D1.8C.D0.BD.D1.8B.D0.B5_.D0.B8.D1.81.D1.82.D0.BE.D1.87.D0.BD.D0.B8.D0.BA.D0.B8_.D0.B4.D0.B0.D0.BD.D0.BD.D1.8B.D1.85"><span class="tocnumber">2</span> <span class="toctext"><span>Виртуальные иÑточники данных</span></span></a></li> <li class="toclevel-1 tocsection-7"><a href="#.D0.9B.D0.BE.D0.B3.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.B8.D0.B9_.D1.83.D1.80.D0.BE.D0.B2.D0.B5.D0.BD.D1.8C_.D0.BE.D0.B1.D1.80.D0.B0.D0.B1.D0.BE.D1.82.D0.BA.D0.B8_.D0.B4.D0.B0.D0.BD.D0.BD.D1.8B.D1.85"><span class="tocnumber">3</span> <span class="toctext"><span>ЛогичеÑкий уровень обработки данных</span></span></a> <ul> <li class="toclevel-2 tocsection-8"><a href="#.D0.9A.D0.BE.D0.BD.D1.86.D0.B5.D0.BF.D1.86.D0.B8.D1.8F_.D0.B4.D0.BE.D1.81.D1.82.D1.83.D0.BF.D0.B0_.D0.BA_.D0.B4.D0.B0.D0.BD.D0.BD.D1.8B.D0.BC_.D1.87.D0.B5.D1.80.D0.B5.D0.B7_.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8C.D1.81.D0.BA.D0.B8.D0.B9_.D0.BF.D1.80.D0.BE.D1.82.D0.BE.D0.BA.D0.BE.D0.BB"><span class="tocnumber">3.1</span> <span class="toctext"><span>ÐšÐ¾Ð½Ñ†ÐµÐ¿Ñ†Ð¸Ñ Ð´Ð¾Ñтупа к данным через пользовательÑкий протокол</span></span></a></li> </ul> </li> <li class="toclevel-1 tocsection-9"><a href="#.D0.A0.D0.B5.D0.B7.D0.B5.D1.80.D0.B2.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D0.B8.D1.81.D1.82.D0.BE.D1.87.D0.BD.D0.B8.D0.BA.D0.BE.D0.B2_.D0.B4.D0.B0.D0.BD.D0.BD.D1.8B.D1.85"><span class="tocnumber">4</span> <span class="toctext"><span>Резервирование иÑточников данных</span></span></a></li> <li class="toclevel-1 tocsection-10"><a href="#.D0.9C.D0.B5.D1.82.D0.BA.D0.B0_.D0.B2.D1.80.D0.B5.D0.BC.D0.B5.D0.BD.D0.B8_.D0.B8.D1.81.D1.82.D0.BE.D1.87.D0.BD.D0.B8.D0.BA.D0.B0_.D0.B4.D0.B0.D0.BD.D0.BD.D1.8B.D1.85"><span class="tocnumber">5</span> <span class="toctext"><span>Метка времени иÑточника данных</span></span></a></li> <li class="toclevel-1 tocsection-11"><a href="#Links"><span class="tocnumber">6</span> <span class="toctext">Links</span></a></li> </ul> </div> <h2><span class="mw-headline" id=".D0.9C.D0.B5.D1.82.D0.BE.D0.B4.D1.8B_.D1.81.D0.B1.D0.BE.D1.80.D0.B0_.D0.B4.D0.B0.D0.BD.D0.BD.D1.8B.D1.85"><span class="mw-headline-number">1</span> Методы Ñбора данных</span></h2> <p>Ð£Ñ‡Ð¸Ñ‚Ñ‹Ð²Ð°Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ðµ ÑвойÑтва иÑточников данных, а также возможные варианты взаимодейÑтвиÑ, методы Ñбора данных можно разделить на: проÑтой Ñинхронный, проÑтой аÑинхронный, пакетный и паÑÑивный. </p><p>Ð’ раÑÑмотрении механизмов ниже будут учаÑтвовать Ñледующие объекты: </p> <ul><li> "ObjectSCADA" — любой объект SCADA-ÑиÑтемы, обращающийÑÑ Ð·Ð° значением Ñигнала, например, архивы и визуализаторы;</li> <li> "DAQParamAttribute" — атрибут параметра подÑиÑтемы "Сбор данных", выÑтупающий поÑредником в доÑтупе к значению Ñигнала иÑточника данных;</li> <li> "DAQParamAttributeArch" — объект архива атрибута;</li> <li> "HardwarePLC" — объект иÑточника данных, например, модули раÑÑредоточенного УСО или промышленные ПЛК.</li></ul> <h3><span class="mw-headline" id=".D0.9F.D1.80.D0.BE.D1.81.D1.82.D0.BE.D0.B9_.D1.81.D0.B8.D0.BD.D1.85.D1.80.D0.BE.D0.BD.D0.BD.D1.8B.D0.B9_.D0.BC.D0.B5.D1.85.D0.B0.D0.BD.D0.B8.D0.B7.D0.BC_.D1.81.D0.B1.D0.BE.D1.80.D0.B0"><span class="mw-headline-number">1.1</span> ПроÑтой Ñинхронный механизм Ñбора</span></h3> <p>Механизм характеризуетÑÑ Ð·Ð°Ð¿Ñ€Ð¾Ñами к иÑточнику данных Ñинхронно Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñом к атрибуту параметра (риÑ.2). Данный механизм обычно применÑетÑÑ Ð¿Ñ€Ð¸ работе Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ иÑточниками данных, характеризующимиÑÑ Ð½Ð¸Ð·ÐºÐ¾Ð¹ латентноÑтью, Ñ‚.е. задержкой в ответе на запроÑ. С помощью Ñтого метода можно получить актуальные данные непоÑредÑтвенно Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñом, однако Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñа объекта будет включать Ð²Ñ€ÐµÐ¼Ñ Ñ‚Ñ€Ð°Ð½Ñпортировки и обработки запроÑа иÑточником данных. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:686px;"><a class="image" href="http://oscada.org/wiki/File:DAQ_simpleSync.png"><img class="thumbimage" height="179" src="../en/files/DAQ_simpleSync.png" width="684" /></a> <div class="thumbcaption">РиÑ. 2. Диаграмма поÑледовательноÑти взаимодейÑÑ‚Ð²Ð¸Ñ Ð¿Ñ€Ð¸ Ñинхронных запроÑах.</div></div></div></div> <p>Ð’ ÑоответÑтвии Ñ Ð´Ð¸Ð°Ð³Ñ€Ð°Ð¼Ð¼Ð¾Ð¹ выше, мы получаем Ñледующую поÑледовательноÑть запроÑов Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… и их передачи: </p> <ul><li> объект SCADA-ÑиÑтемы шлёт Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ðº объекту атрибута параметра <b>DAQParamAttribute::getVal()</b>;</li> <li> объект атрибута параметра, получив запроÑ, шлёт его иÑточнику данных <b>HardwarePLC::valueRequest()</b>;</li> <li> иÑточник данных, обработав запроÑ, возвращает результат;</li> <li> объект атрибута параметра, получив результат, возвращает его объекту SCADA-ÑиÑтемы.</li></ul> <p>Ð’ OpenSCADA такой механизм реализуют Ñледующие модули подÑиÑтемы "Cбор данных": </p> <ul><li> <i><a href="Modules/JavaLikeCalc.html" title="Special:MyLanguage/Modules/JavaLikeCalc">JavaLikeCalc</a></i> — вычиÑлитель на Java-подобном Ñзыке выÑокого уровнÑ. Ð’ качеÑтве иÑточника данных выÑтупает пользовательÑÐºÐ°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° на Java-подобном Ñзыке. Ðтрибуты параметров Ð¼Ð¾Ð´ÑƒÐ»Ñ Ñинхронно обращаютÑÑ Ðº входам/выходам вычиÑлительного контекÑта пользовательÑкой функции.</li> <li> <i><a href="Modules/LogicLev.html" title="Special:MyLanguage/Modules/LogicLev">LogicLev</a></i> — модуль логичеÑкого ÑƒÑ€Ð¾Ð²Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð² Ñбора данных, детальнее о нём в разделе 3. Ð’ качеÑтве иÑточника данных Ñтого Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð²Ñ‹Ñтупают другие параметры подÑиÑтемы "Сбор данных" и контекÑÑ‚ иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° параметров. Ðтрибуты параметров Ð¼Ð¾Ð´ÑƒÐ»Ñ Ñинхронно обращаютÑÑ Ðº атрибутам других параметров, в режиме Ð¾Ñ‚Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð² подÑиÑтемы "Сбор данных", или к входам/выходам контекÑта иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð°, в режиме работы по шаблону.</li> <li> <i><a href="Modules/BlockCalc.html" title="Special:MyLanguage/Modules/BlockCalc">BlockCalc</a></i> — вычиÑлитель на Ñзыке блочных Ñхем. Ð’ качеÑтве иÑточника данных выÑтупает пользовательÑÐºÐ°Ñ Ð±Ð»Ð¾Ñ‡Ð½Ð°Ñ Ñхема. Ðтрибуты параметров Ð¼Ð¾Ð´ÑƒÐ»Ñ Ñинхронно обращаютÑÑ Ðº входам/выходам блоков блочной Ñхемы.</li> <li> <i><a href="Modules/DAQGate.html" title="Special:MyLanguage/Modules/DAQGate">DAQGate</a></i> — модуль Ð¾Ñ‚Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð² контроллеров удалённых OpenSCADA-Ñтанций на локальную. Ð’ модуле реализован Ñинхронный режим запиÑи данных.</li> <li> <i><a href="Modules/ModBus.html" title="Special:MyLanguage/Modules/ModBus">ModBus</a></i> — модуль доÑтупа к данным иÑточников поÑредÑтвом ÑемейÑтва протоколов "ModBus". Ð’ модуле реализован Ñинхронный режим запиÑи данных.</li> <li> <i><a href="Modules/DiamondBoards.html" title="Special:MyLanguage/Modules/DiamondBoards">DiamondBoards</a></i> — модуль доÑтупа к данным PC/104 плат фирмы Diamond Systems. Платы PC/104 размещаютÑÑ Ð½Ð° ISA-шине, Ñледовательно ÑвлÑÑŽÑ‚ÑÑ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ и доÑтупны Ñравнительно быÑтро. Ð’ режиме Ñбора данных не по прерыванию доÑтуп к значениÑм ÐЦП оÑущеÑтвлÑетÑÑ Ñинхронно. Режим запиÑи Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¦ÐП вÑегда работает Ñинхронно.</li></ul> <h3><span class="mw-headline" id=".D0.9F.D1.80.D0.BE.D1.81.D1.82.D0.BE.D0.B9_.D0.B0.D1.81.D0.B8.D0.BD.D1.85.D1.80.D0.BE.D0.BD.D0.BD.D1.8B.D0.B9_.D0.BC.D0.B5.D1.85.D0.B0.D0.BD.D0.B8.D0.B7.D0.BC_.D1.81.D0.B1.D0.BE.D1.80.D0.B0"><span class="mw-headline-number">1.2</span> ПроÑтой аÑинхронный механизм Ñбора</span></h3> <p>Механизм характеризуетÑÑ Ð·Ð°Ð¿Ñ€Ð¾Ñами к иÑточнику данных незавиÑимо от запроÑа к атрибуту параметра (риÑ.3). Обычно, запроÑÑ‹ к иÑточнику данных оÑущеÑтвлÑÑŽÑ‚ÑÑ Ð¿ÐµÑ€Ð¸Ð¾Ð´Ð¸Ñ‡ÐµÑки, в ÑобÑтвенной задаче опроÑа отдельно взÑтого контроллера и блоками по неÑколько Ñигналов. При Ñтом, запроÑом к атрибуту параметра возвращаетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ, полученное поÑледним ÑеанÑом ÑвÑзи Ñ Ð¸Ñточником данных. Данный механизм обычно применÑетÑÑ Ð¿Ñ€Ð¸ работе Ñ ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ñ‹Ð¼Ð¸ (Ñетевыми) иÑточниками данных, характеризующимиÑÑ Ð²Ñ‹Ñокой латентноÑтью, то еÑть задержкой в ответе на запроÑ. </p><p>С помощью Ñтого метода можно обеÑпечить оптимизацию временного реÑурÑа, затраченного на один Ñигнал, и тем Ñамым увеличить макÑимальное количеÑтво опрашиваемых Ñигналов за интервал времени опроÑа. </p><p>Ð’ качеÑтве показательного примера раÑÑмотрим промышленный ПЛК "Siemens S7-315", при опроÑе его по шине ProfiBus (1,5 Мбит/Ñ). Среднее Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ MPI-запроÑа Ñтим контроллером ÑоÑтавлÑет 30 мÑ. ЕÑли иÑпользовать Ñинхронный механизм Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñигнала, Ñ‚.е. один Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° каждый Ñигнал, то в течении одной Ñекунды мы Ñможем получить около 33 Ñигналов. РеÑли применить аÑинхронный механизм, Ñ‚.е. в одном MPI-пакете получать до 220 байт или 110 Ñигналов целочиÑленного типа на 16-разрÑдов, то мы Ñможем за одну Ñекунду получить до 3630 Ñигналов. Как можно видеть, ÑффективноÑть аÑинхронного механизма в данном Ñлучае ÑоÑтавлÑет 110 раз, а именно значение макÑимальной ёмкоÑти MPI-пакета. </p><p>ÐедоÑтатком аÑинхронного механизма ÑвлÑетÑÑ Ñ‚Ð¾, что Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° параметра возвращает неактуальное на момент запроÑа значение, а значение поÑледнего ÑеанÑа опроÑа контроллера. Впрочем, еÑли учеÑть, что иÑточник данных может обновлÑтьÑÑ Ñ Ð¿ÐµÑ€Ð¸Ð¾Ð´Ð¸Ñ‡Ð½Ð¾Ñтью аппаратных ограничений ÐЦП, да и Ñами датчики могут иметь определённые Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð² ÑкороÑти реакции, то применение аÑинхронного механизма Ñбора может иметь Ñерьёзные оÑнованиÑ. </p><p>Применение аÑинхронного механизма Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи значений в ПЛК ÑвлÑетÑÑ Ð´Ð¾Ñтаточно редким Ñвлением, поÑкольку запиÑÑŒ значений обычно подразумевает влиÑние оператора на ТП. Оператор, по факту, доÑтаточно редко вноÑит коррективы в процеÑÑ, Ñледовательно запиÑÑŒ можно выполнÑть Ñинхронно. Однако, ÑущеÑтвуют Ñитуации, например, управление ТП регулÑторами на SCADA-ÑиÑтеме, выполнÑющей функции Ñреды иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐŸÐ›Ðš. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:710px;"><a class="image" href="http://oscada.org/wiki/File:DAQ_simpleAsync.png"><img class="thumbimage" height="279" src="../en/files/DAQ_simpleAsync.png" width="708" /></a> <div class="thumbcaption">РиÑ. 3. Диаграмма поÑледовательноÑти взаимодейÑÑ‚Ð²Ð¸Ñ Ð¿Ñ€Ð¸ аÑинхронных запроÑах.</div></div></div></div> <p>Ð’ ÑоответÑтвии Ñ Ð´Ð¸Ð°Ð³Ñ€Ð°Ð¼Ð¼Ð¾Ð¹ выше, мы получаем Ñледующую картину: </p> <ul><li> атрибут параметра, или вышеÑтоÑщий объект контроллера, выполнÑет периодичеÑкие запроÑÑ‹ <b>HardwarePLC::valueRequest()</b> Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñигнала или группы Ñигналов;</li> <li> полученные Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñигналов размещаютÑÑ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾ в атрибутах параметров;</li> <li> объект SCADA-ÑиÑтемы шлёт Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ðº атрибуту параметра <b>DAQParamAttribute::getVal()</b> и получает Ñохранённое локально значение предыдущего ÑеанÑа опроÑа иÑточника данных.</li></ul> <p>Ð’ OpenSCADA такой механизм реализуют Ñледующие модули подÑиÑтемы "Cбор данных": </p> <ul><li> <i><a href="Modules/DAQGate.html" title="Special:MyLanguage/Modules/DAQGate">DAQGate</a></i> — модуль Ð¾Ñ‚Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð² контроллеров удалённых OpenSCADA-Ñтанций на локальную. Ð’ модуле реализован аÑинхронный режим Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ….</li> <li> <i><a href="../en/Modules/System.html" title="Special:MyLanguage/Modules/System">System</a></i> — модуль доÑтупа к данным Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ OpenSCADA. Ð’ модуле реализован аÑинхронный режим Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ….</li> <li> <i><a href="Modules/ModBus.html" title="Special:MyLanguage/Modules/ModBus">ModBus</a></i> — модуль доÑтупа к данным иÑточников поÑредÑтвом ÑемейÑтва протоколов "ModBus". Ð’ данном модуле аÑинхронный режим реализован как Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…, так и Ð´Ð»Ñ Ð¸Ñ… запиÑи (опционально) на ПЛК.</li> <li> <i><a href="Modules/SNMP.html" title="Special:MyLanguage/Modules/SNMP">SNMP</a></i> — модуль доÑтупа к данным уÑтройÑтв Ñети поÑредÑтвом "Simple Network Management Protocol". Ð’ модуле реализован аÑинхронный режим Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ….</li> <li> <i><a href="Modules/Siemens.html" title="Special:MyLanguage/Modules/Siemens">Siemens</a></i> — модуль доÑтупа к данным контроллеров фирмы Siemens Ñерии S7. Ð’ данном модуле аÑинхронный режим реализован как Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…, так и Ð´Ð»Ñ Ð¸Ñ… запиÑи (опционально) на ПЛК.</li></ul> <h3><span class="mw-headline" id=".D0.9F.D0.B0.D0.BA.D0.B5.D1.82.D0.BD.D1.8B.D0.B9_.D0.BC.D0.B5.D1.85.D0.B0.D0.BD.D0.B8.D0.B7.D0.BC_.D1.81.D0.B1.D0.BE.D1.80.D0.B0"><span class="mw-headline-number">1.3</span> Пакетный механизм Ñбора</span></h3> <p>Пакетный механизм Ñбора характерен Ñбором данных каждого Ñигнала пакетом, включающим иÑторию его изменениÑ. Т.е. за один ÑÐµÐ°Ð½Ñ Ð¾Ð¿Ñ€Ð¾Ñа получаетÑÑ Ð½ÐµÑколько значений иÑтории Ñигнала. Пакетный механизм работает ÑовмеÑтно Ñ Ñинхронным и аÑинхронными механизмами. </p><p>Ð’ Ñлучае работы Ñ Ñинхронным механизмом, выполнÑетÑÑ Ñ„Ð°ÐºÑ‚Ð¸Ñ‡ÐµÑкий Ð¿ÐµÑ€ÐµÐ±Ñ€Ð¾Ñ Ð°Ñ€Ñ…Ð¸Ð²Ð° иÑточника данных Ð´Ð»Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¸Ð²Ð½Ð¾Ð¹ работы в ÑиÑтеме (риÑ. 2). Как и проÑтой Ñинхронный механизм, его желательно применÑть только на низколатентных иÑточниках данных или Ñ Ð¸Ñточниками, работа которых ÑвлÑетÑÑ ÑеанÑовой, например, в Ñфере коммерчеÑкого учёта Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ Ñчётчиков. </p><p>При работе ÑовмеÑтно Ñ Ð°Ñинхронным механизмом, иÑÑ‚Ð¾Ñ€Ð¸Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ‹Ñ… Ñигналов обычно прÑмо помещаетÑÑ Ð² архивы (риÑ. 4), а текущее значение атрибута параметра уÑтанавливаетÑÑ Ð² поÑледнее значение пакета. Ð”Ð°Ð½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ Ñффективна при Ñборе быÑтрых данных или при Ñинхронизации архивов поÑле потери ÑвÑзи Ñ ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ñ‹Ð¼ иÑточником данных. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:555px;"><a class="image" href="http://oscada.org/wiki/File:DAQ_packAsync.png"><img class="thumbimage" height="267" src="../en/files/DAQ_packAsync.png" width="553" /></a> <div class="thumbcaption">РиÑ. 4. Диаграмма поÑледовательноÑти взаимодейÑÑ‚Ð²Ð¸Ñ Ð¿Ñ€Ð¸ аÑинхронных запроÑах пакетного механизма.</div></div></div></div> <p>Ð’ ÑоответÑтвии Ñ Ð´Ð¸Ð°Ð³Ñ€Ð°Ð¼Ð¼Ð¾Ð¹ выше, мы получаем Ñледующее поведение пакетного механизма при аÑинхронных запроÑах: </p> <ul><li> атрибут параметра, или вышеÑтоÑщий объект контроллера, выполнÑет периодичеÑкие запроÑÑ‹ <b>HardwarePLC::valuesRequest()</b> Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð¾Ð² значений Ñигнала или группы Ñигналов;</li> <li> полученные пакеты значений Ñигналов помещаютÑÑ Ð² архив запроÑом <b>DAQParamAttributeArch::setValues()</b>, а поÑледнее значение пакетов размещаетÑÑ Ð² атрибуте параметра;</li> <li> объект SCADA-ÑиÑтемы шлёт Ð·Ð°Ð¿Ñ€Ð¾Ñ Ñ„Ñ€Ð°Ð³Ð¼ÐµÐ½Ñ‚Ð° архива к атрибуту параметра <b>DAQParamAttribute::getValues()</b>, а тот перенаправлÑет Ð·Ð°Ð¿Ñ€Ð¾Ñ Ðº архиву <b>DAQParamAttributeArch::getValues()</b>. Ð’ результате, возвращаетÑÑ Ñ„Ñ€Ð°Ð³Ð¼ÐµÐ½Ñ‚ архива, доÑтупный поÑле предыдущего ÑеанÑа опроÑа иÑточника данных;</li> <li> объект SCADA-ÑиÑтемы шлёт Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð¿Ð¾Ñледнего Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ðº атрибуту параметра <b>DAQParamAttribute::getVal()</b> и получает Ñохранённое локально значение предыдущего ÑеанÑа опроÑа иÑточника данных.</li></ul> <p>Ð’ OpenSCADA такой механизм реализуют Ñледующие модули подÑиÑтемы "Cбор данных": </p> <ul><li> <i><a href="Modules/DAQGate.html" title="Special:MyLanguage/Modules/DAQGate">DAQGate</a></i> — модуль Ð¾Ñ‚Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð² контроллеров удалённых OpenSCADA-Ñтанций на локальную. Реализует Ñинхронный и аÑинхронный пакетный режимы Ð¾Ñ‚Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð²Ð¾Ð² удалённых OpenSCADA-Ñтанций.</li> <li> <i><a href="Modules/DiamondBoards.html" title="Special:MyLanguage/Modules/DiamondBoards">DiamondBoards</a></i> — модуль доÑтупа к данным PC/104 плат фирмы Diamond Systems. Платы PC/104 размещаютÑÑ Ð½Ð° ISA-шине, Ñледовательно ÑвлÑÑŽÑ‚ÑÑ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ и доÑтупны Ñравнительно быÑтро. Ð’ режиме Ñбора данных по прерыванию оÑущеÑтвлÑетÑÑ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ðµ пакетов быÑтрых значений (до 200 кГц) за одну Ñекунду (до 200000 значений в пакете) и поÑледующее размещение данных пакетов в архивах атрибутов параметров DAQ.</li></ul> <h3><span class="mw-headline" id=".D0.9F.D0.B0.D1.81.D1.81.D0.B8.D0.B2.D0.BD.D1.8B.D0.B9_.D0.BC.D0.B5.D1.85.D0.B0.D0.BD.D0.B8.D0.B7.D0.BC_.D1.81.D0.B1.D0.BE.D1.80.D0.B0_.D0.B8_.D0.B8.D0.BD.D0.B8.D1.86.D0.B8.D0.B0.D1.82.D0.B8.D0.B2.D0.BD.D1.8B.D0.B5_.D0.BF.D0.BE.D0.B4.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.BD.D0.B8.D1.8F"><span class="mw-headline-number">1.4</span> <span id="PassiveAndInitiative" title="#PassiveAndInitiative">ПаÑÑивный механизм Ñбора и инициативные подключениÑ</span></span></h3> <p>ПаÑÑивный механизм Ñбора характерен инициативой предоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… в SCADA-ÑиÑтему Ñо Ñтороны иÑточника данных. Ðтот механизм ÑвлÑетÑÑ Ñ€ÐµÐ´ÐºÐ¸Ð¼ Ñвлением однако может иметь меÑто в Ñлучае определённых уÑловий или ограничений в возможноÑти иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ñмых механизмов Ñбора данных, риÑунок 1.4a. Примером такой Ñитуации могут Ñлужить географичеÑки раÑÑредоточенные ÑиÑтемы Ñбора данных поÑредÑтвом мобильных Ñетей GPRS/EDGE/3G/4G/... . Ðаделение вÑех узлов отдельными реальными и ÑтатичеÑкими IP-адреÑами, или формирование корпоративной мобильной Ñети, может оказатьÑÑ Ð´Ð¾Ñ€Ð¾Ð³Ð¸Ð¼ удовольÑтвием в таких ÑетÑÑ…, поÑтому доÑтупнее оказываетÑÑ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ñ‚Ð¸Ð²Ð° ÑеанÑа передачи данных из-за динамичеÑких IP-адреÑов на один реальный IP-Ð°Ð´Ñ€ÐµÑ Ñервера SCADA-ÑиÑтемы. ВоздейÑÑ‚Ð²Ð¸Ñ Ð½Ð° модификацию передаютÑÑ Ð¸Ñточнику данных в момент ÑеанÑа передачи данных иÑточником — читаниÑ. Ð¥Ð¾Ñ‚Ñ Ñ‚ÑƒÑ‚ возможны типовые запроÑÑ‹ через VPN подключение от иÑточника данных и работа через Ñетевую СУБД-поÑредника. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:729px;"><a class="image" href="http://oscada.org/wiki/File:DAQ_passive.png"><img class="thumbimage" height="190" src="../en/files/DAQ_passive.png" width="727" /></a> <div class="thumbcaption">РиÑ.1.4a. Диаграмма поÑледовательноÑти взаимодейÑÑ‚Ð²Ð¸Ñ Ð¿Ñ€Ð¸ паÑÑивном механизме работы.</div></div></div></div> <p>Ð’ ÑоответÑтвии Ñ Ð´Ð¸Ð°Ð³Ñ€Ð°Ð¼Ð¼Ð¾Ð¹ выше, мы получаем Ñледующее поведение паÑÑивного механизма: </p> <ul><li> объект иÑточника данных оÑущеÑтвлÑет периодичеÑкие ÑеанÑÑ‹ ÑвÑзи Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð¼ параметра <b>DAQParamAttributeArch::setVal()</b> Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‡Ð¸ Ñвоих данных и Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ воздейÑтвиÑ;</li> <li> объект SCADA-ÑиÑтемы шлёт Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð¿Ð¾Ñледнего Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° параметра <b>DAQParamAttribute::getVal()</b> и получает Ñохранённое локально значение предыдущего ÑеанÑа ÑвÑзи иÑточника данных.</li></ul> <p>Ð’ Ñлучае когда хоÑÑ‚, который инициирует подключение, имеет динамичеÑкий Ð°Ð´Ñ€ÐµÑ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ не ÑвлÑетÑÑ "Ñерым", Ñ‚.е. по нему можно подключитьÑÑ Ð¿Ñ€Ñмо, тогда инициативное подключение можно иÑпользовать только Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð¾Ð³Ð¾ адреÑа, по которому прÑмо и подключатьÑÑ, а в контроллере таких подключений оÑущеÑтвлÑть только обновление динамичеÑкого адреÑа. </p><p><a class="image" href="http://oscada.org/wiki/File:At.png"><img alt="At.png" height="22" src="../en/files/At.png" width="22" /></a> A special case is the initiative of the TCP-connection establishing from the data source and the standard requests do next by the server through the connection, that the input transports of <a href="Modules/Sockets.html" title="Special:MyLanguage/Modules/Sockets">the module "Sockets"</a> and <a href="../en/Modules/SSL.html" title="Special:MyLanguage/Modules/SSL">the module "SSL"</a> are currently supported. This mode is currently even the most popular! </p><p>OpenSCADA also supports the initiation of such connections itself, that is, it can act as a data source for "gray" and dynamic IP. So, the input transport of <a href="Modules/Sockets.html" title="Special:MyLanguage/Modules/Sockets">the module "Sockets"</a> and <a href="../en/Modules/SSL.html" title="Special:MyLanguage/Modules/SSL">the module "SSL"</a> in the mode 2 initiates the connection and then sends an identifying sequence and enters the normal mode of receiving requests from the host to which it is connected. <a class="image" href="http://oscada.org/wiki/File:At.png"><img alt="At.png" height="22" src="../en/files/At.png" width="22" /></a> Regarding what is currently especially useful is the remote control of OpenSCADA stations in "gray" networks with such a connection. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:758px;"><a class="image" href="http://oscada.org/wiki/File:Oscada_initCon.png"><img class="thumbimage" height="718" src="../en/files/Oscada_initCon.png" width="756" /></a> <div class="thumbcaption">Fig.1.4b. Initiative connection of the Data Sources.</div></div></div></div> <h2><span class="mw-headline" id=".D0.92.D0.B8.D1.80.D1.82.D1.83.D0.B0.D0.BB.D1.8C.D0.BD.D1.8B.D0.B5_.D0.B8.D1.81.D1.82.D0.BE.D1.87.D0.BD.D0.B8.D0.BA.D0.B8_.D0.B4.D0.B0.D0.BD.D0.BD.D1.8B.D1.85"><span class="mw-headline-number">2</span> <span id="Virtual" title="#Virtual">Виртуальные иÑточники данных</span></span></h2> <p>Кроме Ñбора физичеÑких данных, актуальной ÑвлÑетÑÑ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð²Ð¸Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñбора данных. Виртуальные данные предÑтавлÑÑŽÑ‚ Ñобой данные, полученные внутри ÑиÑтемы как незавиÑимо, так и на оÑнове физичеÑких данных. ПрактичеÑки, механизмы Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¸Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ñ… данных реализуютÑÑ ÑовмеÑтно Ñ Ð¼ÐµÑ…Ð°Ð½Ð¸Ð·Ð¼Ð¾Ð¼ пользовательÑких вычиÑлений. Ð’ Ñреде промышленных контроллеров и SCADA-ÑиÑтем иÑпользуютÑÑ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ðµ Ñзыки программированиÑ. Ð’ Ñлучае Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ð»ÐµÑ€Ð°Ð¼Ð¸, в качеÑтве таких Ñзыков чаÑто иÑпользуютÑÑ Ñзыки низкого ÑƒÑ€Ð¾Ð²Ð½Ñ (аÑÑемблеры), однако, в поÑледнее времÑ, вÑÑ‘ чаще иÑпользуютÑÑ Ñзыки выÑокого ÑƒÑ€Ð¾Ð²Ð½Ñ (C, Pascal и другие), а также формальные Ñзыки МÐК 61131-3 (Ñхемы потоков ÑоÑтоÑний SFC, блочные Ñхемы FBD, релейные Ñхемы LD и текÑтовые ST, IL). Ð’ Ñлучае Ñо SCADA-ÑиÑтемами, вычиÑÐ»ÐµÐ½Ð¸Ñ Ñ‡Ð°Ñ‰Ðµ обеÑпечиваютÑÑ Ñзыками Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ñ‹Ñокого ÑƒÑ€Ð¾Ð²Ð½Ñ Ð¸ формальными Ñзыками. </p><p>Ð’ OpenSCADA могут быть реализованы интерфейÑÑ‹ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ виртуальных иÑточников данных на оÑнове различных Ñзыков, в отдельных модулÑÑ… подÑиÑтемы "Сбор данных". Ðа текущий момент доÑтупны модули виртуальных вычиÑлителей: </p> <ul><li> ВычиÑлитель на Java-подобном Ñзыке: <a href="Modules/JavaLikeCalc.html" title="Special:MyLanguage/Modules/JavaLikeCalc">JavaLikeCalc</a>;</li> <li> Блочный вычиÑлитель: <a href="Modules/BlockCalc.html" title="Special:MyLanguage/Modules/BlockCalc">BlockCalc</a>.</li></ul> <p>Ð’ Ñдро OpenSCADA интегрирован механизм пользовательÑких функций или <a href="User_API.html" title="Special:MyLanguage/Documents/User API">API пользовательÑкого программированиÑ</a>. ПользовательÑкие функции могут предоÑтавлÑтьÑÑ Ð»ÑŽÐ±Ñ‹Ð¼ объектом программы, в том чиÑле и модулÑми, в ÑоответÑтвии Ñо Ñвоей функциональноÑтью, тем Ñамым предоÑтавлÑÑ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŽ некий набор функций ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð·Ð° тем или иным объектом. Функции пользовательÑкого API могут быть как ÑтатичеÑкими, Ñ‚.е. реализующими фикÑированную функциональноÑть отдельного объекта, так и динамичеÑкими, Ñ‚.е. формируемые пользователем под нужную ему задачу на внутреннем Ñзыке пользовательÑкого Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ñ‹Ñокого уровнÑ. </p><p>Модуль <a href="Modules/JavaLikeCalc.html" title="Special:MyLanguage/Modules/JavaLikeCalc">JavaLikeCalc</a> предоÑтавлÑет в OpenSCADA механизм ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑких пользовательÑких функций и их библиотек на Java-подобном Ñзыке. ОпиÑание функции на Java-подобном Ñзыке заключаетÑÑ Ð² обвÑзке параметров функции алгоритмом. Кроме Ñтого, модуль наделен функциÑми непоÑредÑтвенных вычиÑлений, путём ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²Ñ‹Ñ‡Ð¸Ñлительных контроллеров Ñ Ð°ÑÑоциированной вычиÑлительной функцией. Модулем предоÑтавлÑетÑÑ Ð¼ÐµÑ…Ð°Ð½Ð¸Ð·Ð¼ прекомпилÑции контекÑтно-завиÑимых функций, что иÑпользуетÑÑ Ð´Ð»Ñ Ð²ÑÑ‚Ñ€Ð°Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑких алгоритмов непоÑредÑтвенно в контекÑÑ‚ различных компонентов OpenSCADA, Ñто, например, <a href="Program_manual.html#DAQ" title="Special:MyLanguage/Documents/Program manual">шаблоны параметров подÑиÑтемы "Сбор данных"</a> и <a href="Modules/VCAEngine.html" title="Special:MyLanguage/Modules/VCAEngine">движок Ñреды визуализации и ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (СВУ)</a>. </p><p>Модуль <a href="Modules/BlockCalc.html" title="Special:MyLanguage/Modules/BlockCalc">BlockCalc</a> предоÑтавлÑет в OpenSCADA механизм ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑких вычиÑлений, который оÑновываетÑÑ Ð½Ð° формальном Ñзыке блочных Ñхем. Языки блочного Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾ÑновываютÑÑ Ð½Ð° понÑтии блочных Ñхем и функциональных блоков. Причём, в завиÑимоÑти от ÑущноÑти блока, блочные Ñхемы могут быть: логичеÑкими Ñхемами, Ñхемами релейной логики, моделью технологичеÑкого процеÑÑа и другое. Суть блочной Ñхемы ÑоÑтоит в том, что она Ñодержит ÑпиÑок блоков и ÑвÑзи между ними. С формальной точки Ð·Ñ€ÐµÐ½Ð¸Ñ Ð±Ð»Ð¾Ðº — Ñто Ñлемент (функциÑ), который имеет входы, выходы и алгоритм вычиÑлениÑ. ИÑÑ…Ð¾Ð´Ñ Ð¸Ð· концепции Ñреды программированиÑ, блок — Ñто кадр значений, аÑÑоциированный Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð¼ функции. Входы и выходы блоков нужно ÑоединÑть Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ñ†ÐµÐ»ÑŒÐ½Ð¾Ð¹ блочной Ñхемы. </p><p>С целью Ð½Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ API пользовательÑкого Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñми, Ñозданы Ñледующие Ñпециализированные модули ÑтатичеÑких функций API пользовательÑкого программированиÑ: </p> <ul><li> Библиотека функций ÑиÑтемного API: <a href="Modules/FLibSYS.html" title="Special:MyLanguage/Modules/FLibSYS">FLibSYS</a>;</li> <li> Библиотека Ñтандартных математичеÑких функций: <a href="Modules/FLibMath.html" title="Special:MyLanguage/Modules/FLibMath">FLibMath</a>;</li> <li> Библиотека функций ÑовмеÑтимоÑти Ñо SCADA Complex1: <a href="Modules/FLibComplex1.html" title="Special:MyLanguage/Modules/FLibComplex1">FLibComplex1</a>.</li></ul> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:602px;"><a class="image" href="http://oscada.org/wiki/File:DAQ_progCompon_ru.png"><img class="thumbimage" height="662" src="files/DAQ_progCompon_ru.png" width="600" /></a> <div class="thumbcaption">РиÑ. 6. ÐžÐ±Ñ‰Ð°Ñ Ñтруктура компонентов Ñреды программированиÑ.</div></div></div></div> <h2><span class="mw-headline" id=".D0.9B.D0.BE.D0.B3.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.B8.D0.B9_.D1.83.D1.80.D0.BE.D0.B2.D0.B5.D0.BD.D1.8C_.D0.BE.D0.B1.D1.80.D0.B0.D0.B1.D0.BE.D1.82.D0.BA.D0.B8_.D0.B4.D0.B0.D0.BD.D0.BD.D1.8B.D1.85"><span class="mw-headline-number">3</span> <span id="LogicLev" title="#LogicLev">ЛогичеÑкий уровень обработки данных</span></span></h2> <p>Выше мы отмечали, что тип иÑточника данных может колебатьÑÑ Ð¾Ñ‚ "Ñырого" до комплекÑного. Под "Ñырым" подразумеваетÑÑ Ð¸Ñточник, который предоÑтавлÑет только Ñлементарные Ñигналы (целое, вещеÑтвенное, логичеÑкое, Ñтрока, ...), причём отдельно. Под комплекÑным подразумеваетÑÑ Ð¸Ñточник, который группирует Ñигналы и, в параметре подÑиÑтемы "Сбор данных", предоÑтавлÑет атрибуты дополнительного назначениÑ, покрывающие практичеÑки вÑе диагноÑтичеÑкие задачи, Ñ‚.е. параметр ÑвлÑетÑÑ Ð·Ð°ÐºÐ¾Ð½Ñ‡ÐµÐ½Ð½Ñ‹Ð¼ объектом, не требующим дополнениÑ. </p><p>Ð£Ñ‡Ð¸Ñ‚Ñ‹Ð²Ð°Ñ Ñ‚Ð°ÐºÐ¾Ð¹ разброÑ, может возникнуть ÑитуациÑ, когда информации в параметре контроллера от иÑточника данных недоÑтаточно Ð´Ð»Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ Ñ€ÐµÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ объекта ТП в целом и нужен производный объект более выÑокого ÑƒÑ€Ð¾Ð²Ð½Ñ Ð°Ð±Ñтракции. Решением Ñтой Ñитуации может быть формирование дополнÑющих параметров, что ÑвлÑетÑÑ Ð½ÐµÐ½Ð°Ð³Ð»Ñдным и вноÑит путаницу. Более правильным решением ÑвлÑетÑÑ Ð¸Ñпользование проÑлойки "ЛогичеÑкого уровнÑ", выполнÑющей функции гибкого Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð²-контейнеров Ñигналов необходимой Ñтруктуры и включающей поÑÑ‚-обработку. </p><p>Функционально, "ЛогичеÑкий уровень" предназначен Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð¾ÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² OpenSCADA механизма Ñвободного Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð²-контейнеров Ñигналов нужной Ñтруктуры. </p><p>ÐкÑплуатационным назначением "ЛогичеÑкого уровнÑ" ÑвлÑетÑÑ: </p> <ul><li> раÑширение Ñферы Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ OpenSCADA за Ñчёт ÑƒÐ²ÐµÐ»Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð³Ð¸Ð±ÐºÐ¾Ñти опиÑÐ°Ð½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð² подÑиÑтемы "Сбор данных";</li> <li> Ñокращение трудозатрат на Ñоздание Ñложных автоматизированных ÑиÑтем.</li></ul> <p>The "Logical level" concept is based on the template parameters, for which, in the subsystem "Data acquisition", the container of template libraries is provided (Fig.1). Each library contains templates of parameters that can be used by the modules of the subsystem "Data acquisition" for implementation of parameters based on the templates. The OpenSCADA modules, which use the templates in their work, are: </p> <ul><li> <a href="Modules/LogicLev.html" title="Special:MyLanguage/Modules/LogicLev">LogicLev</a> — module of implementation the classical conception of "Logic Level" .</li> <li> <a href="Modules/ModBus.html" title="Special:MyLanguage/Modules/ModBus">ModBus</a> — module of accessing data sources through the family of "ModBus" protocols. Besides of the parameter type of the direct description the registers list it also supports the logical type, where the "ModBus" registers described in links of the template.</li> <li> <a href="Modules/Siemens.html" title="Special:MyLanguage/Modules/Siemens">Siemens</a> — data acquisition module for Siemens controllers of the series S7. Thanks to the high flexibility and functionality of the controllers in this series, which allows for the formation of complex data types of diverse structure, all parameters of this module initially work on templates, and the direct data was added later.</li> <li> <a href="Modules/OPC_UA.html" title="Special:MyLanguage/Modules/OPC UA">OPC-UA</a> — module of accessing data sources through the "OPC-UA" protocol. Besides of the parameter type of the direct description the nodes list it also supports the logical type, where the "OPC-UA" nodes described in links of the template.</li></ul> <p>Общий механизм работы "ЛогичеÑкого уровнÑ", на примере Ð¼Ð¾Ð´ÑƒÐ»Ñ <a class="new" href="http://oscada.org/wiki/index.php?title=LogicLev&action=edit&redlink=1" title="LogicLev (page does not exist)">LogicLev</a>, изображён на риÑунке 7. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:296px;"><a class="image" href="http://oscada.org/wiki/File:DAQ_loglevel_ru.png"><img class="thumbimage" height="360" src="files/DAQ_loglevel_ru.png" width="294" /></a> <div class="thumbcaption">РиÑ. 7. Механизм работы "ЛогичеÑкого уровнÑ" на примере Ð¼Ð¾Ð´ÑƒÐ»Ñ "LogicLev".</div></div></div></div> <p>ИÑÑ…Ð¾Ð´Ñ Ð¸Ð· Ñтого Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð²Ð¸Ð´Ð½Ð¾, что параметры контроллера логичеÑкого ÑƒÑ€Ð¾Ð²Ð½Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÑÑŽÑ‚ функцию Ð¾Ñ‚Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… параметров подÑиÑтемы "Сбор данных" (на примере параметров 1 и 4) и произвольное формирование параметров на оÑнове шаблонов 1, 2 и других параметров подÑиÑтемы "Сбор данных" (на примере параметров 2, 3 и 5). </p><p>Structure of the parameters with the template in their basis is shown in Figure 8. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:244px;"><a class="image" href="http://oscada.org/wiki/File:DAQ_str_prmtmpl_ru.png"><img class="thumbimage" height="200" src="files/DAQ_str_prmtmpl_ru.png" width="242" /></a> <div class="thumbcaption">РиÑ. 8. Структура параметров Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð¾Ð¼ в оÑнове.</div></div></div></div> <p>Как можно видеть из Ñтруктуры, параметр логичеÑкого ÑƒÑ€Ð¾Ð²Ð½Ñ ÑоÑтоит из объекта функции, атрибутов и конфигурации шаблона. Объект функции Ñто ÑкземплÑÑ€ иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ шаблона Ñ Ð½Ð°Ð±Ð¾Ñ€Ð¾Ð¼ входов/выходов и программой вычиÑÐ»ÐµÐ½Ð¸Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° на одном из Ñзыков пользовательÑкого программированиÑ, обычно Ñто Java-подобный Ñзык пользовательÑкого Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ <a href="Modules/JavaLikeCalc.html" title="Special:MyLanguage/Modules/JavaLikeCalc">DAQ.JavaLikeCalc</a>. Впрочем, шаблон может быть вообще без программы, предоÑтавлÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñтруктуру проброÑа входов/выходов. Ðтрибуты в Ñтруктуре изображают перечень атрибутов результирующего параметра в ÑоответÑтвии Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð¾Ð¼. ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð² Ñтруктуре предоÑтавлÑет конфигурацию ÑвойÑтв шаблона и его внешних ÑвÑзей. </p><p>Логику работы логичеÑкого ÑƒÑ€Ð¾Ð²Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð² можно запиÑать Ñледующим образом: </p> <ul><li> Параметр ÑвÑзываетÑÑ Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð¾Ð¼, из которого получаетÑÑ Ñтруктура атрибутов, в ÑоответÑтвии Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸ÐµÐ¹ шаблона.</li> <li> ВыполнÑетÑÑ ÑвÑзывание объекта функции параметра Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸ÐµÐ¹ из шаблона.</li> <li> ФормируетÑÑ Ñтруктура ÑвÑзей в ÑоответÑтвии Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð¾Ð¼ функции. ИÑÑ…Ð¾Ð´Ñ Ð¸Ð· Ñтруктуры ÑвÑзей формируетÑÑ Ñ„Ð¾Ñ€Ð¼Ð° ÑвÑÐ·Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° и пользователем уÑтанавливаютÑÑ ÑвÑзи.</li> <li> При доÑтупе к атрибутам полученного параметра производитÑÑ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ° на наличие прÑмой ÑвÑзи. Ð’ Ñлучае Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ñ Ð¿Ñ€Ñмой ÑвÑзи, Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð»ÑетÑÑ Ð¿Ð¾ Ñтой ÑвÑзи, в противном Ñлучае, значение берётÑÑ Ð¸Ð· объекта функции параметра.</li> <li> Параллельно работает вычиÑление функции шаблона по объекту функции параметров. При Ñтом, перед вычиÑлением, производитÑÑ Ñ‡Ñ‚ÐµÐ½Ð¸Ðµ значений по ÑвÑзÑм, а поÑле вычиÑÐ»ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ изменений по Ñтим ÑвÑзÑм.</li></ul> <p>Шаблон параметров, в целом, предоÑтавлÑет Ñледующее: </p> <ul><li> Ñтруктуру входов/выходов функции шаблона;</li> <li> признаки конфигурации и ÑвÑÐ·Ñ‹Ð²Ð°Ð½Ð¸Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° (конÑтанта, ÑвÑзь);</li> <li> предварительные Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸ поÑтоÑнных и шаблонов ÑвÑзей;</li> <li> признаки атрибутов результирующего параметра логичеÑкого уровнÑ, типов: не атрибут, атрибут Ñ Ð¿Ð¾Ð»Ð½Ñ‹Ð¼ доÑтупом, атрибут Ñ Ð´Ð¾Ñтупом только на чтение; </li> <li> механизм вычиÑÐ»ÐµÐ½Ð¸Ñ Ð²Ñ…Ð¾Ð´Ð¾Ð²/выходов функции шаблонов Ñзыком пользовательÑкого Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ OpenSCADA.</li></ul> <p>Ðа риÑунке 9 предÑтавлено изображение вкладки конфигурации шаблона параметров подÑиÑтемы "Сбор данных" в виде таблицы Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸ÐµÐ¹ входов/выходов и текÑта программы пользовательÑкого программированиÑ. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:1044px;"><a class="image" href="http://oscada.org/wiki/File:DAQ_prmtmpl_ru.png"><img class="thumbimage" height="724" src="files/DAQ_prmtmpl_ru.png" width="1042" /></a> <div class="thumbcaption">РиÑ. 9. Вкладка конфигурации шаблона параметров подÑиÑтемы "Сбор данных".</div></div></div></div> <p>Вкладкой входы/выходы "Ð’Ð’" шаблона параметра предуÑмотрены Ñледующие ÑвойÑтва Ñпециализированного назначениÑ: "Ðтрибут", "КонфигурациÑ" и "Значение". </p><p>СвойÑтво "Ðтрибут" выÑтупает признаком Ð¾Ñ‚Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð²Ñ…Ð¾Ð´Ð°/выхода шаблона на результирующий атрибут параметра. ПредуÑмотрены Ñледующие варианты Ñтого ÑвойÑтва: </p> <ul><li> <i>Ðе атрибут</i> — вход/выход функции шаблона не отражаетÑÑ Ð½Ð° атрибут;</li> <li> <i>Только чтение</i> — вход/выход функции шаблона отражаетÑÑ Ð½Ð° атрибут Ñ Ð´Ð¾Ñтупом только на чтение;</li> <li> <i>Полный доÑтуп</i> — вход/выход функции шаблона отражаетÑÑ Ð½Ð° атрибут Ñ Ð¿Ð¾Ð»Ð½Ñ‹Ð¼ доÑтупом.</li></ul> <p>СвойÑтво "КонфигурациÑ" выÑтупает признаком, указывающим на иÑпользование входа/выхода функции шаблона в результирующей конфигурации шаблона на логичеÑком уровне. ПредуÑмотрены Ñледующие варианты Ñтого ÑвойÑтва: </p> <ul><li> <i>ПеременнаÑ</i> — доÑтупен Ð´Ð»Ñ Ð´Ð¾Ñтупа и ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ из процедуры шаблона, как переменнаÑ, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ ÑохранÑетÑÑ Ñ ÐºÐ¾Ð½Ñ‚ÐµÐºÑтом параметра логичеÑкого уровнÑ;</li> <li> <i>КонÑтанта</i> — доÑтупен Ð´Ð»Ñ ÑƒÑтановки на уровне параметра логичеÑкого уровнÑ, в виде поÑтоÑнной раздела конфигурации шаблона;</li> <li> <i>СвÑзь</i> — доÑтупен Ð´Ð»Ñ ÑƒÑтановки на уровне параметра логичеÑкого уровнÑ, в виде ÑвÑзи раздела конфигурации шаблона.</li></ul> <p>Поле "Значение" опиÑывает предуÑтановленное значение Ð´Ð»Ñ Ð¿Ð¾ÑтоÑнных и шаблонов внешних ÑвÑзей. Шаблон внешних ÑвÑзей иÑпользуетÑÑ Ð² целÑÑ… опиÑÐ°Ð½Ð¸Ñ Ð¼ÐµÑ…Ð°Ð½Ð¸Ð·Ð¼Ð° группировки и автоматичеÑкого раÑÐ¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð²Ð½ÐµÑˆÐ½Ð¸Ñ… ÑвÑзей. Структура шаблона внешних ÑвÑзей однакова в чаÑти Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº атрибутам параметров подÑиÑтемы "Сбор данных" и раÑширÑетÑÑ ÑпецифичеÑким форматом адреÑа отдельного Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð¿Ð¾Ð´ÑиÑтемы "Сбора данных", который иÑпользует механизм шаблонов. Подключение к параметрам подÑиÑтемы "Сбор данных" — шаблон конфигурации внешней ÑвÑзи имеет вид <b>{Параметр}|{атрибут}</b>, где </p> <ul><li> <i>Параметр</i> — иÑпользуетÑÑ Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð² и Ð¿Ð¾Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð½Ð° форму конфигурации;</li> <li> <i>атрибут</i> — Ð´Ð»Ñ Ð°ÑÑоциативного ÑвÑÐ·Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð² при назначении параметра. </li></ul> <p><span id="LogicLevLnks" title="#LogicLevLnks">The further linking</span> in general can be carried out by: </p> <ul><li> general definition-selecting the address-attribute of the subsystem "DAQ"; for example, the link "LogicLev.experiment.Pi.var" or "prm:/LogicLev/experiment/Pi/var" performs the access of the parameter attribute to the other parameter attribute; sign "(+)" at the end of the address indicate about successful linking and presence of the target; for the object-type attributes there permissible hierarchical access to a specific property of the object, by specifying its path through the symbol '#', for example: "LogicLev.experiment.Pi.var#pr1.pr2" or "prm:/LogicLev/experiment/Pi/var#pr1.pr2"; in the path with the "prm:" prefix you can use items of the relativity "." and "..";</li> <li> definition of the specific address of a separate module of the subsystem "DAQ";</li> <li> direct setting a constant value in the format "<b>val:Constant value</b>";</li> <li> empty or erroneous address when the value by the link is set to <b>EVAL</b>.</li></ul> <p>Ð’ качеÑтве примера иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° на риÑунке 10 приведено изображение параметра "F3" Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð»Ð¾Ð³Ð¸Ñ‡ÐµÑкого уровнÑ, где предÑтавлена вкладка "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð°" Ð´Ð»Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸ шаблона параметра, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ ÑвÑзывание. Ðа риÑунке 11 предÑтавлена вкладка "Ðтрибуты" Ñ Ð¿ÐµÑ€ÐµÑ‡Ð½ÐµÐ¼ атрибутов и их значений, Ñозданных поÑредÑтвом шаблона. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:869px;"><a class="image" href="http://oscada.org/wiki/File:DAQ_wprm_tmpl_ru.png"><img class="thumbimage" height="606" src="files/DAQ_wprm_tmpl_ru.png" width="867" /></a> <div class="thumbcaption">РиÑ. 10. Вкладка "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð°" параметра "F3" Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð»Ð¾Ð³Ð¸Ñ‡ÐµÑкого уровнÑ.</div></div></div></div> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:915px;"><a class="image" href="http://oscada.org/wiki/File:DAQ_wprm_a_ru.png"><img class="thumbimage" height="690" src="files/DAQ_wprm_a_ru.png" width="913" /></a> <div class="thumbcaption">РиÑ. 11. Вкладка "Ðтрибуты" параметра "F3" Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð»Ð¾Ð³Ð¸Ñ‡ÐµÑкого уровнÑ.</div></div></div></div> <h3><span class="mw-headline" id=".D0.9A.D0.BE.D0.BD.D1.86.D0.B5.D0.BF.D1.86.D0.B8.D1.8F_.D0.B4.D0.BE.D1.81.D1.82.D1.83.D0.BF.D0.B0_.D0.BA_.D0.B4.D0.B0.D0.BD.D0.BD.D1.8B.D0.BC_.D1.87.D0.B5.D1.80.D0.B5.D0.B7_.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8C.D1.81.D0.BA.D0.B8.D0.B9_.D0.BF.D1.80.D0.BE.D1.82.D0.BE.D0.BA.D0.BE.D0.BB"><span class="mw-headline-number">3.1</span> <span id="UserPrt" title="#UserPrt">ÐšÐ¾Ð½Ñ†ÐµÐ¿Ñ†Ð¸Ñ Ð´Ð¾Ñтупа к данным через пользовательÑкий протокол</span></span></h3> <p>Следующим уровнем, оÑнованным на ЛогичеÑком Уровне, ÑвлÑетÑÑ ÐºÐ¾Ð½Ñ†ÐµÐ¿Ñ†Ð¸Ñ Ð´Ð¾Ñтупа к данным через пользовательÑкий протокол, что реализуетÑÑ Ð¸Ð»Ð¸ прÑмо в коде шаблона или как отдельный объект ПользовательÑкого Протоколу в <a href="Modules/UserProtocol.html" title="Special:MyLanguage/Modules/UserProtocol">модуле Protocol.UserProtocol</a>, где, на данный момент, также можно иÑпользовать DAQ-шаблоны. </p><p>Концепцию доÑтупа к данным через пользовательÑкий протокол можно изобразить как на риÑунке 1. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:324px;"><a class="image" href="http://oscada.org/wiki/File:UserPrtDevs_concept_ru.png"><img class="thumbimage" height="275" src="files/UserPrtDevs_concept_ru.png" width="322" /></a> <div class="thumbcaption">РиÑ.1. ÐšÐ¾Ð½Ñ†ÐµÐ¿Ñ†Ð¸Ñ Ð´Ð¾Ñтупа к данным через пользовательÑкий протокол.</div></div></div></div> <p>Как можно видеть Ñ Ñ€Ð¸Ñунка 1, взаимодейÑтвие Ñ ÑƒÑтройÑтвом проиÑходит через некоторый транÑпорт на котором они физичеÑки базируютÑÑ. Ð—Ð°Ð¿Ñ€Ð¾Ñ Ðº транÑпорту Ð’Ñ‹ можете отправить: </p> <ol><li> ÐепоÑредÑтвенно Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ функции ÑиÑтемного API OpenSCADA объекта транÑпорта <i><a href="User_API.html#SYSTransport" title="Special:MyLanguage/Documents/User API">string messIO( string mess, real timeOut = 0 );</a></i>, еÑли протоколоÑпецифичеÑÐºÐ°Ñ Ñ‡Ð°Ñть очень проÑта и данные Вам нужно лишь извлечь.</li> <li> Завёрнутый Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… <i>req</i>, функцией <i><a href="User_API.html#SYSTransport" title="Special:MyLanguage/Documents/User API">int messIO( XMLNodeObj req, string prt );</a></i> и Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ð° <i>prt</i>, еÑли Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»ÑŒÐ½Ð°Ñ Ñ‡Ð°Ñть доÑтаточно ÑÐ»Ð¾Ð¶Ð½Ð°Ñ Ð¸ уже предÑтавлена в OpenSCADA.</li> <li> Завёрнутый Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… ÑпецифичеÑкий к пользователю Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ функции <i><a href="User_API.html#SYSTransport" title="Special:MyLanguage/Documents/User API">int messIO( XMLNodeObj req, "UserProtocol" );</a></i> и реализации <a href="Modules/UserProtocol.html" title="Special:MyLanguage/Modules/UserProtocol">пользовательÑкого протокола</a>, еÑли Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»ÑŒÐ½Ð°Ñ Ñ‡Ð°Ñть доÑтаточно ÑÐ»Ð¾Ð¶Ð½Ð°Ñ Ð¸ ещё отÑутÑтвует в OpenSCADA. Пользователь реализует тут Ñаму протоколоÑпецифичеÑкую чаÑть в <a href="Modules/UserProtocol.html" title="Special:MyLanguage/Modules/UserProtocol">модуле UserProtocol</a> и чаÑть ÑпецифичеÑкую к данным в шаблоне Ð´Ð»Ñ <a href="Modules/LogicLev.html" title="Special:MyLanguage/Modules/LogicLev">Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð›Ð¾Ð³Ð¸Ñ‡ÐµÑкого УровнÑ</a> или непоÑредÑтвенно в процедуре контролера на внутреннем Ñзыке Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ <a href="Modules/JavaLikeCalc.html" title="Special:MyLanguage/Modules/JavaLikeCalc">Ð¼Ð¾Ð´ÑƒÐ»Ñ JavaLikeCalc</a>.</li></ol> <dl><dd><dl><dd> <a class="image" href="http://oscada.org/wiki/File:At.png"><img alt="At.png" height="22" src="../en/files/At.png" width="22" /></a> Ðтот поÑледний метод развит к возможноÑти Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»ÑŒÐ½Ð¾Ð¹ чаÑти кода непоÑредÑтвенно в том-же коде шаблона, как Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ð°Ñ Ð²ÑÑ‚Ñ€Ð¾ÐµÐ½Ð½Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ‡ÐµÑ€ÐµÐ· вызовом функции запроÑа первого метода, еÑли нет необходимоÑти повторного иÑпользованиÑ, или даже еÑли Ñ‚Ð°ÐºÐ°Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾Ñть еÑть и тут имеет ÑмыÑл Ñоздание комплекÑного шаблона, который Ñможет объединÑть роль и выходного протокола, через его подключение также к модулю пользовательÑкого протокола. И оно будет полноÑтью хранитьÑÑ Ð² одной библиотеке шаблонов. </dd></dl></dd></dl> <p><a class="image" href="http://oscada.org/wiki/File:At.png"><img alt="At.png" height="22" src="../en/files/At.png" width="22" /></a> ПрÑÐ¼Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð° Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ñ‹Ð¼ транÑпортом функции <a href="User_API.html#SYSTransport" title="Special:MyLanguage/Documents/User API">string messIO( string mess, real timeOut = 0 );</a> не предуÑматривает Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‚Ñ€Ð°Ð½Ñпорта поза вызовом Ñтой функции, а ÑоответÑтвенно, Ð´Ð»Ñ Ñложных протоколов Ñ Ð¿Ð¾Ñылками ответа более чем в одном пакете, что предуÑматривает процеÑÑ "дожиданиÑ", не можно иÑпользовать общий транÑпорт, по которому возможна отправка пакетов различных протоколов или даже один, но в различных задачах (объектах контроллеров). СоответÑтвенно, еÑли еÑть необходимоÑть иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑовмеÑтного транÑпорта, то размещайте параметры опроÑа по протоколу в одном объекте контроллера (задаче) или иÑпользуйте <a href="Modules/UserProtocol.html" title="Special:MyLanguage/Modules/UserProtocol">модуль пользовательÑкого протокола</a>, к которому Ñто замечание не имеет отношениÑ, поÑкольку он оÑущеÑтвлÑет такое блокирование на Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð·Ð¾Ð²Ð° процедуры обработки, как и оÑтальные модульные протоколы OpenSCADA. </p><p>Созданы Ñледующие библиотеки Ñ Ð¸Ñпользованием концепции доÑтупа к данным через пользовательÑкий протокол: </p> <ul><li> <a href="Libs_Devices.html" title="Special:MyLanguage/Libs/Devices">Библиотека промышленных уÑтройÑтв</a></li> <li> <a href="Libs_LowLevelDevices.html" title="Special:MyLanguage/Libs/LowLevelDevices">Библиотека низкоуровневых ÑенÑоров и чипов</a></li></ul> <h2><span class="mw-headline" id=".D0.A0.D0.B5.D0.B7.D0.B5.D1.80.D0.B2.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D0.B8.D1.81.D1.82.D0.BE.D1.87.D0.BD.D0.B8.D0.BA.D0.BE.D0.B2_.D0.B4.D0.B0.D0.BD.D0.BD.D1.8B.D1.85"><span class="mw-headline-number">4</span> <span id="Redundancy" title="#Redundancy">Резервирование иÑточников данных</span></span></h2> <p>Резервирование вообще, и иÑточников данных в чаÑтноÑти, Ñлужит Ð´Ð»Ñ Ð¿Ð¾Ð²Ñ‹ÑˆÐµÐ½Ð¸Ñ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ ÑƒÑ€Ð¾Ð²Ð½Ñ Ð¾Ñ‚ÐºÐ°Ð·Ð¾ÑƒÑтойчивоÑти Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¿ÑƒÑ‚Ñ‘Ð¼ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´ÑƒÐ±Ð»Ð¸Ñ€ÑƒÑŽÑ‰Ð¸Ñ… узлов в ÑовмеÑтную работу Ñ Ð¾Ñновным узлом. Ð’ Ñлучае ÑÐ±Ð¾Ñ Ð¾Ñновного узла проиÑходит подхват функций оÑновного узла резервным. ЧаÑто, Ñхема Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ работать и в режиме раÑÐ¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ между ÑовмеÑтно работающими узлами. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:515px;"><a class="image" href="http://oscada.org/wiki/File:DAQ_red_ru.png"><img class="thumbimage" height="351" src="files/DAQ_red_ru.png" width="513" /></a> <div class="thumbcaption">РиÑ. 12. Горизонтальное и вертикальное резервирование.</div></div></div></div> <p>In the case of the "Data acquisition" subsystem, data reservation (Fig. 12) serves as: </p> <ul><li> <b>Redundancy of the data acquisition mechanism</b>. Typically, this function is realized without special arrangements by simply running of the parallel redundancy stations with the same configuration and working independently. However, in the case at the station working as PLC, such approach is unacceptable because of the simultaneous making of the control actions and the absence of synchronisation of data of the calculators, also as for the primary sources with single possible connection.</li> <li> <b>Compensation of the data loss on the time of the node inaccessibility</b> with the redundant node archive. There are two mechanisms of the compensation. The first and the main mechanism implements the loading of the sections of the archive from the redundant station at the time of the station startup in general or of individual controller objects. The section of the archive is requested from the moment of the last record in the local archive and till the current time. The depth of the request is limited by the indicating of the limit time in the configuration of the redundancy. The second, complementary mechanism, performs the filling of the "holes" in the archive at the time of the actual user's request to the data. Such an approach on the one hand allows to make the predictable in time synchronization at startup and on the other hand it's actually eliminates the data loss in the case of working at least one station during the entire time.</li> <li> <b>Distribution of the data acquisition load between the nodes</b>. When creating complex allocated systems there can be an important question of predicting and optimizing of the overall system performance. Taking in account these problems, the redundancy mechanism provides execution of the data acquisition tasks of individual sources (OpenSCADA controller objects) only at one station. The other stations' tasks would go to the data synchronization mode with the executive station. In the case of loss of the connection with the executive station, the local data acquisition task is started. It is also provided for the possibility of an optimal load distribution for executing the tasks of the data acquisition for a group of controller objects, between the stations.</li> <li> <b>Optimization of the load on the primary data sources</b> through the data requesting from the primary source by the only one node. In practice, we often meet highly loaded data sources or interfaces of accessing to the data sources, for which even the data acquisition by one station can be a problem and would require reducing the acquisition periodicity, i.e. data quality. The mechanism of redundancy, besides the load distribution between the stations as described above, allows you to remove additional load form the data source and its interfaces, thereby improving the quality of the data. Writing to attributes of the controller object under redundancy causes to the modification request sending to the master one, that is — through it.</li> <li> <b>Prevention of some differences of the data on different nodes</b> associated with the mismatch of moments of time at the independent acquisition of the data by individual nodes, performs in a way of receiving the data from the station with the active controller object. In systems of high accountability under the redundancy there should be excluded or minimized the differences in the data at different stations, that means the real acquisition of the data by one station and synchronization with these data of other ones.</li></ul> <p>Резервирование рекомендуетÑÑ Ð½Ð°Ñтраивать таким образом чтобы БД резервных Ñтанций ÑохранÑлиÑÑŒ одинаковыми, что в дальнейшем позволит безболезненно копировать их, при воÑÑтановлении, на любую Ñтанцию и, ÑоответÑтвенно, в резервной копии можно хранить только один набор БД. При Ñтом, наÑтройки, Ñпецифичные Ð´Ð»Ñ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ð¾Ð¹ Ñтанции, будут ÑохранÑтьÑÑ Ð² конфигурационном файле и можно будет легко конфигурировать и менÑть нужную Ñтанцию через выбор ÑоответÑтвующего конфигурационного файла. </p><p>ÐаÑтройка Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð°Ñ‡Ð¸Ð½Ð°ÐµÑ‚ÑÑ Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ñ‹Ñ… Ñтанций в ÑпиÑок Ñтанций OpenSCADA на вкладке "ПодÑиÑтема" подÑиÑтемы "ТранÑпорты" (РиÑ.13). Причём, добавлÑть тут нужно не только резервные Ñтанции к текущей, но и Ñаму Ñту текущую Ñтанцию Ñ ÐµÑ‘ внешним адреÑом, Ñ‚.е. ÑÐ²Ð¾ÐµÐ¾Ð±Ñ€Ð°Ð·Ð½Ð°Ñ Ð¿ÐµÑ‚Ð»Ñ. Ð’ дальнейшем Ñти наÑтройки будут Ñохранены в общую БД резервированной ÑиÑтемы и Ñама БД Ñ Ñтого момента будет иÑпользоватьÑÑ Ð¿Ñ€Ð¸ Ñоздании вÑех резервных Ñтанций. СоответÑтвенно важно на Ñтом Ñтапе внеÑти вÑе нужные Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² общую БД вокруг проекта в целом! </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:974px;"><a class="image" href="http://oscada.org/wiki/File:DAQ_tr_extHst_ru.png"><img class="thumbimage" height="450" src="files/DAQ_tr_extHst_ru.png" width="972" /></a> <div class="thumbcaption">РиÑ. 13. Вкладка "ПодÑиÑтема" подÑиÑтемы "ТранÑпорты".</div></div></div></div> <p>Далее, на конкретной Ñтанции Ñ ÐºÐ¾Ð¿Ð¸ÐµÐ¹ общей БД, наÑтраиваем её ÑпецифичеÑкие параметры во вкладке "Резервирование" главной Ñтраницы (РиÑ.14), которые будут Ñохранены в конфигурационном файле. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:778px;"><a class="image" href="http://oscada.org/wiki/File:DAQ_sys_rd_ru.png"><img class="thumbimage" height="589" src="files/DAQ_sys_rd_ru.png" width="776" /></a> <div class="thumbcaption">РиÑ. 14. Вкладка "Резервирование" главной Ñтраницы.</div></div></div></div> <p>ПоÑле Ñтого вÑÑ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾ÑущеÑтвлÑетÑÑ Ð²Ð¾ вкладке "Резервирование" подÑиÑтемы "Сбор данных" (РиÑ.15). ЕÑли уÑтановить параметр "Передача локальных первичных команд" (РиÑ.14) то Ñта конфигурациÑ, как и Ð»ÑŽÐ±Ð°Ñ Ð´Ñ€ÑƒÐ³Ð°Ñ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ характера, может оÑущеÑтвлÑтьÑÑ Ð½Ð° одной из Ñтанций, а внеÑённые Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð¿Ð°Ð´ÑƒÑ‚ на вÑе резервные, конечно еÑли они будут доÑтупны. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:933px;"><a class="image" href="http://oscada.org/wiki/File:DAQ_rd_ru.png"><img class="thumbimage" height="589" src="files/DAQ_rd_ru.png" width="931" /></a> <div class="thumbcaption">РиÑ. 15. Вкладка "Резервирование" подÑиÑтемы "Сбор данных".</div></div></div></div> <p>Задача обÑÐ»ÑƒÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÑ…Ð°Ð½Ð¸Ð·Ð¼Ð° Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿ÑƒÑкаетÑÑ Ð²Ñегда и иÑполнÑетÑÑ Ñ Ð¿ÐµÑ€Ð¸Ð¾Ð´Ð¸Ñ‡Ð½Ð¾Ñтью, уÑтановленной в ÑоответÑтвующем конфигурационном поле. Ð ÐµÐ°Ð»ÑŒÐ½Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð° по оÑущеÑтвлению Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾ÑущеÑтвлÑетÑÑ Ð¿Ñ€Ð¸ наличии Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ одной резервной Ñтанции в ÑпиÑке Ñтанций и предполагает: </p> <ul><li> Контроль за Ñоединением Ñ Ð²Ð½ÐµÑˆÐ½Ð¸Ð¼Ð¸ ÑтанциÑми. Ð’ процеÑÑе ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð¾ÑущеÑтвлÑÑŽÑ‚ÑÑ Ð·Ð°Ð¿Ñ€Ð¾ÑÑ‹ к удалённым ÑтанциÑм, за обновлением информации о них и проверки ÑвÑзи. Ð’ Ñлучае потери ÑвÑзи Ñо Ñтанцией, повтор Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº ней оÑущеÑтвлÑетÑÑ Ñ‡ÐµÑ€ÐµÐ· промежуток времени, указанный в конфигурационном поле интервала времени воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑоединениÑ. Ð’ поле "Жив", Ñтанции, отображаетÑÑ Ñ‚ÐµÐºÑƒÑ‰ÐµÐµ ÑоÑтоÑние ÑвÑзи. Ð’ поле "Счётчик" предÑтавлено количеÑтво запроÑов, оÑущеÑтвлённых к удалённой Ñтанции, или же времÑ, оÑтавшееÑÑ Ð´Ð¾ оÑущеÑÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ Ñледующей попытки ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ñ‚ÐµÑ€Ñнной Ñтанции.</li> <li> Локальное планирование иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð² контроллеров в резерве. Планирование оÑущеÑтвлÑетÑÑ Ð² ÑоответÑтвии Ñ ÑƒÑ€Ð¾Ð²Ð½Ñми Ñтанций и предпочтениÑми иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð² контроллеров.</li> <li> Вызов функции Ñинхронизации данных локальных объектов контроллеров, работающих в режиме Ñинхронизации данных из внешних Ñтанций.</li></ul> <p>Ð”Ð»Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð·Ð° временем, затраченным на выполнение цикла обÑÐ»ÑƒÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ, предуÑмотрено поле ÑтатуÑа. При приближении реального времени Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ðº циклу задачи обÑÐ»ÑƒÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ, рекомендуетÑÑ ÑƒÐ²ÐµÐ»Ð¸Ñ‡Ð¸Ñ‚ÑŒ периодичноÑть иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñтой задачи! </p><p>Ð”Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° контроллера подÑиÑтемы "Сбор данных" предуÑмотрены режимы Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ "ÐÑимметричное" и "Только нарушениÑ". ÐÑимметричное резервирование работает Ñ Ñ‚Ð¾Ð¹ конфигурацией контроллера удалённой Ñтанции, ÐºÐ°ÐºÐ°Ñ ÐµÑть и не пытаетÑÑ ÐµÑ‘ обобщать. Ð”Ð»Ñ Ñтого режима работают вÑе ранее опиÑанные функции и ÑвойÑтва резервированиÑ. Резервирование "Только нарушениÑ" предуÑматривает фактичеÑкую работу без резервированиÑ, но Ñ Ð¿Ð¾Ð´Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ нарушений от резервного объекта контроллера Ñ Ñ†ÐµÐ»ÑŒÑŽ иÑÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´ÑƒÐ±Ð»Ð¸Ñ€ÑƒÑŽÑ‰Ð¸Ñ… Ñообщений о нарушениÑÑ…. </p> <h2><span class="mw-headline" id=".D0.9C.D0.B5.D1.82.D0.BA.D0.B0_.D0.B2.D1.80.D0.B5.D0.BC.D0.B5.D0.BD.D0.B8_.D0.B8.D1.81.D1.82.D0.BE.D1.87.D0.BD.D0.B8.D0.BA.D0.B0_.D0.B4.D0.B0.D0.BD.D0.BD.D1.8B.D1.85"><span class="mw-headline-number">5</span> <span id="TimeStamp" title="#TimeStamp">Метка времени иÑточника данных</span></span></h2> <p>ФактичеÑки вÑе иÑточники данных, которые поддерживаютÑÑ OpenSCADA, в качеÑтве метки времени оперативных-текущих данных иÑпользуют Ð²Ñ€ÐµÐ¼Ñ ÐºÐ¾Ð¼Ð¿ÑŒÑŽÑ‚ÐµÑ€Ð° где работает OpenSCADA и оÑущеÑтвлÑетÑÑ Ð¾Ð¿Ñ€Ð¾Ñ Ñтого иÑточника данных, даже в Ñлучае возможноÑти Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ Ñервера или иÑточника у иÑточника данных, и чаÑто даже в Ñлучае когда таким иÑточником выÑтупает Ð´Ñ€ÑƒÐ³Ð°Ñ ÑтанциÑ-ПЛК из OpenSCADA. </p><p>Такой подход определён Ñ Ð½ÐµÑкольких причин, а именно: </p> <ul><li> различение и выделение Ð¾Ñ‚Ð»Ð¸Ñ‡Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ оперативных значений иÑточника данных и ПК Ñбора данных не имеет ни одной практичеÑкой цели кроме диагноÑтичеÑкой Ñ Ð²Ñ‹ÑÐ²Ð»ÐµÐ½Ð¸Ñ Ñамого раÑÑ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸, поÑкольку текущие данные архивируютÑÑ Ð² архив периодичеÑких значений, где метка времени так или иначе притÑгиваетÑÑ Ð¸ округлÑетÑÑ Ðº Ñтой периодичноÑти, Ñ‚.е. чаÑть времени точнее за период данных архива терÑетÑÑ;</li> <li> редко какой иÑточник данных вообще имеет чаÑÑ‹ реального времени, а когда и имеет то до него Ñразу ÑтавитÑÑ Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ðµ Ñинхронизации времени Ñ Ð²Ð½ÐµÑˆÐ½Ð¸Ð¼ иÑточником образцового времени, что в Ñвою очередь требует Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ ÑложноÑтей Ñ Ð¿Ñ€Ñмым подключением GPS приёмника или доÑтупом к NTP-Ñерверу в интернет или локальной Ñети; ÑоглаÑно-же Ñтого подхода образцовым временем ÑтановитÑÑ Ð²Ñ€ÐµÐ¼Ñ ÐŸÐš Ñбора данных, даже когда он Ñам не Ñинхронизирован, поÑкольку он один;</li> <li> метка времени иÑточника данных может менÑтьÑÑ Ñ ÑобÑтвенной периодичноÑтью или Ñто обновление вообще может быть апериодичеÑким, что в Ñлучае иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтой метки при опроÑе приведёт к пробелам в архиве, и даже когда периодичноÑти опроÑа-Ð°Ñ€Ñ…Ð¸Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼ÐµÑ‚ÐºÐ¸ времени иÑточника одинаковы такие пробелы будут иметь меÑто из-за отÑутÑÑ‚Ð²Ð¸Ñ ÑинхронноÑти, что придётÑÑ ÐºÐ¾Ð¼Ð¿ÐµÐ½Ñировать уменьшением периодичноÑти опроÑа и, ÑоответÑтвенно, увеличением нагрузки на Ñеть и иÑточник; итак Ñто Ñделает архив мало полезным, Ñ…Ð¾Ñ‚Ñ ÑÐµÐ¹Ñ‡Ð°Ñ Ð¿Ñ€ÐµÐ´Ð¾ÑтавлÑетÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñть Ñчитать такие пробелы (проходные) не фактом отÑутÑÑ‚Ð²Ð¸Ñ Ð¸Ð»Ð¸ ошибочноÑтью данных.</li></ul> <p>Ðа данный момент извеÑтен один ÑпоÑоб, когда от метки времени иÑточника данных еÑть практичеÑÐºÐ°Ñ Ñ†ÐµÐ½Ð½Ð¾Ñть, Ñто работа Ñ Ð¸Ñторией-архивом на Ñтороне иÑточника данных, когда при обнаружении пробелов в данных, например, на Ð²Ñ€ÐµÐ¼Ñ Ð¾Ñ‚ÑутÑÑ‚Ð²Ð¸Ñ ÑвÑзи, вмеÑто текущих-оперативных данных запрашиваетÑÑ ÑƒÑ‡Ð°Ñток иÑтории-архива, который ÑоответÑтвует Ñтому пробелу. И Ñтот метод реализован в модуле <a href="Modules/DAQGate.html" title="Special:MyLanguage/Modules/DAQGate">DAQ.DAQGate</a>, при работе OpenSCADA на Ñтороне иÑточника данных или ПЛК. </p> <h2><span class="mw-headline" id="Links"><span class="mw-headline-number">6</span> Links</span></h2> <ul><li> <a class="external" href="http://oscada.org/wiki/File:Oscada_subsys_daq_str.odg" title="File:Oscada subsys daq str.odg">Diagram: Hierarchical structure of the subsystem "DAQ".</a></li> <li> <a class="external" href="http://oscada.org/wiki/File:Daq.xmi.gz" title="File:Daq.xmi.gz">UML: Sequence diagrams of the subsystem "DAQ".</a></li> <li> <a class="external" href="http://oscada.org/wiki/File:Oscada_initCon.odg" title="File:Oscada initCon.odg">Diagram: Initiative connection of the Data Sources.</a></li> <li> <a class="external" href="http://oscada.org/wiki/File:Daq_loglevel.dia" title="File:Daq loglevel.dia">Diagram: The mechanism of the "Logic Level" on the example of LogicLev module.</a></li> <li> <a class="external" href="http://oscada.org/wiki/File:Loglev_prm.dia" title="File:Loglev prm.dia">Diagram: Structure of the parameters, with a template in their basis.</a></li> <li> <a class="external" href="http://oscada.org/wiki/File:Daq_progcompon.dia" title="File:Daq progcompon.dia">Diagram: The overall structure of the programming area components.</a></li> <li> <a class="external" href="http://oscada.org/wiki/File:UserPrtDevs_concept.odg" title="File:UserPrtDevs concept.odg">Diagram: Conception of custom accessing to services and device's data.</a></li> <li> <a class="external" href="http://oscada.org/wiki/File:Daq_red.odg" title="File:Daq red.odg">Diagram: Horizontal and vertical redundancy.</a></li></ul> </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/DAQ/ru">Documents/DAQ/ru</a> - <a href="http://oscada.org/en/main/about-the-project/licenses/">GFDL</a></td><td style="text-align: center;">June 2025</td><td style="text-align: right;" width="40%">OpenSCADA 1+r3030</td></tr></table></body> </html>