<?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>Модули/GPIO - 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">Модули/GPIO</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-Modules%2FGPIO&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/Modules/GPIO" title="Modules/GPIO">Modules/GPIO</a> and the translation is 100% complete.</div><hr /><div class="mw-pt-languages" dir="ltr" lang="en"><div class="mw-pt-languages-list autonym"><a class="mw-pt-languages-ui mw-pt-progress mw-pt-progress--complete" href="../../en/Modules/GPIO.html" title="Modules/GPIO (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/Modules/GPIO.html" title="Модулі/GPIO (100% translated)">УкраїнÑька</a></div></div> <table class="wikitable"> <tr> <th> Модуль </th> <th> Ð˜Ð¼Ñ </th> <th> ВерÑÐ¸Ñ </th> <th> Ð›Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ </th> <th> ИÑточник </th> <th> Языки </th> <th> Платформы </th> <th> Тип </th> <th> Ðвтор </th> <th> ОпиÑание </th></tr> <tr> <td> <a href="../Modules/GPIO.html" title="Special:MyLanguage/Modules/GPIO">GPIO</a> </td> <td> GPIO </td> <td> 2.1 </td> <td> GPL2 </td> <td> daq_GPIO.so </td> <td> en,uk,ru,de </td> <td> x86,x86_64,ARM </td> <td> DAQ </td> <td> Роман Савоченко </td> <td> GPIO различных одноплатных ПК: Broadcom BCM 2835 и больше (Raspberry Pi, ...), SUNXI AllWinner H2 и больше (Orange Pi Zero, ...). </td></tr></table> <div class="toc" id="toc"><div id="toctitle"><h2>Contents</h2></div> <ul> <li class="toclevel-1 tocsection-1"><a href="#.D0.9E.D0.B1.D1.8A.D0.B5.D0.BA.D1.82_.D0.BA.D0.BE.D0.BD.D1.82.D1.80.D0.BE.D0.BB.D0.B5.D1.80.D0.B0"><span class="tocnumber">1</span> <span class="toctext">Объект контролера</span></a></li> <li class="toclevel-1 tocsection-2"><a href="#.D0.9F.D0.B0.D1.80.D0.B0.D0.BC.D0.B5.D1.82.D1.80.D1.8B_.28BCM2835.2C_SUNXI.29"><span class="tocnumber">2</span> <span class="toctext">Параметры (BCM2835, SUNXI)</span></a> <ul> <li class="toclevel-2 tocsection-3"><a href="#.D0.A4.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D1.8F_GPIO:_.D0.A0.D0.B5.D0.B6.D0.B8.D0.BC_.28mode.29"><span class="tocnumber">2.1</span> <span class="toctext">Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ GPIO: Режим (mode)</span></a></li> <li class="toclevel-2 tocsection-4"><a href="#.D0.A4.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D1.8F_GPIO:_.D0.9F.D0.BE.D0.BB.D1.83.D1.87.D0.B8.D1.82.D1.8C_.28get.29"><span class="tocnumber">2.2</span> <span class="toctext">Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ GPIO: Получить (get)</span></a></li> <li class="toclevel-2 tocsection-5"><a href="#.D0.A4.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D1.8F_GPIO:_.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.B8.D1.82.D1.8C_.28put.29"><span class="tocnumber">2.3</span> <span class="toctext">Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ GPIO: УÑтановить (put)</span></a></li> </ul> </li> <li class="toclevel-1 tocsection-6"><a href="#.D0.97.D0.B0.D0.BC.D0.B5.D1.87.D0.B0.D0.BD.D0.B8.D1.8F"><span class="tocnumber">3</span> <span class="toctext">ЗамечаниÑ</span></a></li> </ul> </div> <p>Модуль предоÑтавлÑет в OpenSCADA поддержку Входов/Выходов общего Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ (GPIO), оÑнованных на одноплатных ПК: </p> <ul><li> BCM2835 и выше — <a class="external text" href="https://www.raspberrypi.org" rel="nofollow noreferrer noopener" target="_blank">Raspberry PI, PI2, PI3</a>;</li> <li> SUNXI AllWinner H2 и выше — <a class="external text" href="http://www.orangepi.org" rel="nofollow noreferrer noopener" target="_blank">Orange Pi, Zero, One, Plus</a>.</li></ul> <p>GPIO на BCM2835 и выше, на Raspberry Pi, наÑчитывает до 32 штырей, некоторый из которых могут оÑущеÑтвлÑÑ‚ÑŒ альтернативные функции вроде: I2C, UART, SPIO. Ð”Ð»Ñ Ð´Ð¾Ñтупа к Ñтому GPIO иÑпользовано GPIO чаÑÑ‚ÑŒ библиотеки <a class="external text" href="http://www.airspayce.com/mikem/bcm2835" rel="nofollow noreferrer noopener" target="_blank">libBCM2835</a>, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð° и ÑобираетÑÑ Ð²Ð¼ÐµÑте Ñ Ñтим модулем. </p><p>GPIO на SUNXI AllWinner H2 и выше, на Orange Pi, может иметь 9 оÑновных и 6 дополнительных банков Ñ 32 штырÑми в каждом, некоторый из которых могут оÑущеÑтвлÑÑ‚ÑŒ альтернативные функции вроде: I2C, UART, SPIO. Ð”Ð»Ñ Ð´Ð¾Ñтупа к Ñтому GPIO иÑпользовано GPIO чаÑÑ‚ÑŒ библиотеки <a class="external text" href="https://github.com/duxingkei33/orangepi_PC_gpio_pyH3" rel="nofollow noreferrer noopener" target="_blank">orangepi_PC_gpio_pyH3</a>, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð° и ÑобираетÑÑ Ð²Ð¼ÐµÑте Ñ Ñтим модулем. </p> <h2><span class="mw-headline" id=".D0.9E.D0.B1.D1.8A.D0.B5.D0.BA.D1.82_.D0.BA.D0.BE.D0.BD.D1.82.D1.80.D0.BE.D0.BB.D0.B5.D1.80.D0.B0"><span class="mw-headline-number">1</span> Объект контролера</span></h2> <p>GPIO в OpenSCADA конфигурируетÑÑ Ð¿ÑƒÑ‚Ñ‘Ð¼ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ объекта контролера (РиÑ.1) и параметра контролера — один параметр GPIO Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¹ платы. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:781px;"><a class="image" href="http://oscada.org/wiki/File:GPIO_obj_cntr_ru.png"><img class="thumbimage" height="567" src="../files/GPIO_obj_cntr_ru.png" width="779" /></a> <div class="thumbcaption">РиÑ.1. Вкладка конфигурации объекта контролера.</div></div></div></div> <p>По Ñтой вкладке Ð’Ñ‹ можете уÑтановить: </p> <ul><li> СоÑтоÑние объекта контроллера, а именно: ÑтатуÑ, "Включен", "ВыполнÑетÑÑ" и Ð¸Ð¼Ñ Ð±Ð°Ð·Ñ‹ данных, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñодержит Ñту конфигурацию.</li> <li> Идентификатор, Ð¸Ð¼Ñ Ð¸ опиÑание контролера.</li> <li> СоÑтоÑние "Включен" и "ВыполнÑетÑÑ", в которое объект контроллера должен быть переведен при запуÑке.</li> <li> Ð˜Ð¼Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð² контроллера.</li></ul> <h2><span class="mw-headline" id=".D0.9F.D0.B0.D1.80.D0.B0.D0.BC.D0.B5.D1.82.D1.80.D1.8B_.28BCM2835.2C_SUNXI.29"><span class="mw-headline-number">2</span> Параметры (BCM2835, SUNXI)</span></h2> <p>Параметр ÑвлÑетÑÑ Ð½ÐµÐ¿Ð¾ÑредÑтвенным предÑтавителем-отражением GPIO, который Ñодержит перечень атрибутов диÑкретного типа в количеÑтве, которое ÑоответÑтвует Ñтому типу GPIO. Вкладка конфигурации параметра изображена на риÑунке 2. Сбор данных оÑущеÑтвлÑетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ в Ñинхронном режиме поÑкольку GPIO должен быть быÑтрым. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:781px;"><a class="image" href="http://oscada.org/wiki/File:GPIO_obj_prm_ru.png"><img class="thumbimage" height="567" src="../files/GPIO_obj_prm_ru.png" width="779" /></a> <div class="thumbcaption">РиÑ.2. Вкладка конфигурации параметра.</div></div></div></div> <p>С помощью вкладки конфигурации параметра Ð’Ñ‹ можете уÑтановить: </p> <ul><li> СоÑтоÑние параметра: тип (BCM2835, SUNXI), "Включенный" и перечень ÑтатичеÑких функций.</li> <li> Идентификатор, Ð¸Ð¼Ñ Ð¸ опиÑание параметра.</li> <li> СоÑтоÑние "Включенный", в который параметр должен переводитьÑÑ Ð¿Ñ€Ð¸ запуÑке.</li></ul> <p>Вкладка "Ðтрибуты" GPIO изображена на риÑунке 3, Ð´Ð»Ñ BCM2835, и риÑунке 4, Ð´Ð»Ñ SUNXI. Ð”Ð»Ñ GPIO также доÑтупна вкладка "КонфигурациÑ" (РиÑ.5) Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð¾Ð¼ Ð’Ð’ и ÑоÑтоÑнием инверÑии. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:781px;"><a class="image" href="http://oscada.org/wiki/File:GPIO_obj_prmAttr_ru.png"><img class="thumbimage" height="656" src="../files/GPIO_obj_prmAttr_ru.png" width="779" /></a> <div class="thumbcaption">РиÑ.3. Вкладка "Ðтрибуты" параметра "BCM2835".</div></div></div></div> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:881px;"><a class="image" href="http://oscada.org/wiki/File:GPIO_obj_prmAttrSUNXI_ru.png"><img class="thumbimage" height="606" src="../files/GPIO_obj_prmAttrSUNXI_ru.png" width="879" /></a> <div class="thumbcaption">РиÑ.4. Вкладка "Ðтрибуты" параметра "SUNXI".</div></div></div></div> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:781px;"><a class="image" href="http://oscada.org/wiki/File:GPIO_obj_prmCfg_ru.png"><img class="thumbimage" height="656" src="../files/GPIO_obj_prmCfg_ru.png" width="779" /></a> <div class="thumbcaption">РиÑ.5. Вкладка "КонфигурациÑ" параметра.</div></div></div></div> <p>Ð”Ð»Ñ Ð¼Ð°ÐºÑимально быÑтрого доÑтупа к GPIO, параметр предоÑтавлÑет три ÑтатичеÑкие функции: "mode", "get" и "put". Ðти функции могут быть иÑпользованы в окружении Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑиÑтемы OpenSCADA Ð´Ð»Ñ Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ð¸ неординарных алгоритмов взаимодейÑтвиÑ. Ð”Ð»Ñ Ð°Ð´Ñ€ÐµÑации функции вы можете иÑпользовать ÑтатичеÑкий вызов адреÑа <b>GPIO.{cntr}.{prm}.{Func}()</b> или динамичеÑкий <b>SYS.DAQ.GPIO.{cntr}.{prm}["{Func}"].call()</b>. Где: </p> <ul><li> {cntr} — идентификатор объекта контроллера;</li> <li> {prm} — идентификатор объекта параметра;</li> <li> {Func} — идентификатор функции.</li></ul> <p>Ðа данный момент, также предоÑтавлÑетÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑ‚ÑŒ динамичеÑкого Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÑтатичеÑких функций, как Ñамое быÑтрое и одновременно гибкое решение, например: </p> <pre style="white-space: pre-wrap;"> function put = addr+".fnc_put"; if(put) { put(D4, vl&0x10); put(D5, vl&0x20); put(D6, vl&0x40); put(D7, vl&0x80); }</pre> <p>И в такой конфигурабильный ÑпоÑоб, на данный момент, реализованы Ñледующие шаблоны низкоуровневых уÑтройÑтв: </p> <ul><li> <a href="../Libs_LowLevelDevices.html#DHT" title="Special:MyLanguage/Libs/LowLevelDevices">GPIO: DHT11,22 (AM23XX)</a></li> <li> <a href="../Libs_LowLevelDevices.html#1602A" title="Special:MyLanguage/Libs/LowLevelDevices">GPIO: 1602A(HD44780) (1602A)</a></li></ul> <h3><span class="mw-headline" id=".D0.A4.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D1.8F_GPIO:_.D0.A0.D0.B5.D0.B6.D0.B8.D0.BC_.28mode.29"><span class="mw-headline-number">2.1</span> Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ GPIO: Режим (mode)</span></h3> <p><i>ОпиÑание</i>: GPIO режим, вход или выход.<br /> <i>Параметры</i>: </p> <table class="wikitable"> <tr> <th> ID </th> <th> Параметр </th> <th> Тип </th> <th> Режим </th> <th> По умолчанию </th></tr> <tr> <td> rez </td> <td> Результат </td> <td> Целое </td> <td> Возврат </td> <td> </td></tr> <tr> <td> pin </td> <td> Штырь </td> <td> Целое </td> <td> Вход </td> <td> </td></tr> <tr> <td> set </td> <td> УÑтановка режима входа: 1-Вход, 2-Вход (pull up), 3-Вход (pull down), 4-Выход </td> <td> Целое </td> <td> Вход </td> <td> 0 </td></tr></table> <h3><span class="mw-headline" id=".D0.A4.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D1.8F_GPIO:_.D0.9F.D0.BE.D0.BB.D1.83.D1.87.D0.B8.D1.82.D1.8C_.28get.29"><span class="mw-headline-number">2.2</span> Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ GPIO: Получить (get)</span></h3> <p><i>ОпиÑание</i>: Получение ÑƒÑ€Ð¾Ð²Ð½Ñ ÑˆÑ‚Ñ‹Ñ€Ñ GPIO.<br /> <i>Параметры</i>: </p> <table class="wikitable"> <tr> <th> ID </th> <th> Параметр </th> <th> Тип </th> <th> Режим </th> <th> По умолчанию </th></tr> <tr> <td> rez</td> <td> Результат </td> <td> ЛогичеÑкий </td> <td> Возврат </td> <td> </td></tr> <tr> <td> pin </td> <td> Штырь </td> <td> Целое </td> <td> Вход </td> <td> </td></tr></table> <h3><span class="mw-headline" id=".D0.A4.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D1.8F_GPIO:_.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.B8.D1.82.D1.8C_.28put.29"><span class="mw-headline-number">2.3</span> Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ GPIO: УÑтановить (put)</span></h3> <p><i>ОпиÑание</i>: УÑтановка ÑƒÑ€Ð¾Ð²Ð½Ñ GPIO штырÑ.<br /> <i>Параметры</i>: </p> <table class="wikitable"> <tr> <th> ID </th> <th> Параметр </th> <th> Тип </th> <th> Режим </th> <th> По умолчанию </th></tr> <tr> <td> pin </td> <td> Штырь </td> <td> Целое </td> <td> Вход </td> <td> </td></tr> <tr> <td> val </td> <td> Значение </td> <td> ЛогичеÑкое </td> <td> Вход </td> <td> </td></tr></table> <h2><span class="mw-headline" id=".D0.97.D0.B0.D0.BC.D0.B5.D1.87.D0.B0.D0.BD.D0.B8.D1.8F"><span class="mw-headline-number">3</span> ЗамечаниÑ</span></h2> <p>Модуль опробован на платах <a class="external" href="http://oscada.org/wiki/Special:MyLanguage/Using/Raspberry_Pi" title="Special:MyLanguage/Using/Raspberry Pi">Raspberry Pi 2, 3 модели B</a> и <a class="external" href="http://oscada.org/wiki/Using/Orange_Pi" title="Using/Orange Pi">Orange Pi Zero</a>. </p><p>Ð’Ñ€ÐµÐ¼Ñ Ð´Ð¾Ñтупа к Ñтатичным функциÑм было измерено в Ñравнении Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ методами, что Ð’Ñ‹ можете поÑмотреть <a href="../Modules/JavaLikeCalc.html#Productivity" title="Special:MyLanguage/Modules/JavaLikeCalc">тут</a>, а общие измерение производительноÑти приведены в Ñледующей таблице: </p> <table class="wikitable"> <tr> <th> GPIO type </th> <th> get(), us </th> <th> put(), us </th></tr> <tr> <td> Raspberry Pi 3 </td> <td> 0.36 </td> <td> 0.27 </td></tr> <tr> <td> Orange Pi Zero </td> <td> 1.2 </td> <td> 1.2 </td></tr></table> </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/Modules/GPIO/ru">Modules/GPIO/ru</a> - <a href="http://oscada.org/en/main/about-the-project/licenses/">GFDL</a></td><td style="text-align: center;">April 2025</td><td style="text-align: right;" width="40%">OpenSCADA 1+r3018</td></tr></table></body> </html>