Локални аутономни систем прикупљања података

Компанија је купила НЕКСТ-М контролне стубове, домаће производње компаније Нект Тецхнологиес. Да би се обезбедила визуелизација рада пумпних јединица,
пожарни и сигурносни аларми, присуство напона на стартерима, собна температура, ниво воде за ванредне ситуације. Срце НЕКСТ-М је АТМЕГА 1280 и ова чињеница охрабрује у погледу могућности креирања сопственог комплета за специфичне потребе.

Постављен је задатак да се у најкраћем могућем року и уз минималне трошкове створи потпуно аутономан локални диспечерски систем за специфичне потребе. Основа је микроконтролер. Развој, производња коју стварају сами запослени.

Систем мора да ради без зависности од целуларних мрежа, сервера, Интернета и система лиценцирања за коришћење радиофреквентних ресурса, да не користи рачунаре у раду система за праћење и контролу или, највише, периодично користи лаптоп рачунаре, без приступа објеката на дуже време (6-9 месеци). Мрежна конфигурација има радијалну структуру. Подаци се прикупљају у једном тренутку, а затим шаљу на обраду путем редовних комуникационих канала или као штампана копија.

Систем мора да обезбеди:

  • праћење рада пумпних јединица
  • технолошка аутоматизација
  • заштита од последица ванредних услова
  • хитна сигнализација
  • обрачун радног времена
  • израчунавање количине утрошене електричне енергије
  • контрола температуре опреме
  • сигурносни и противпожарни аларм
  • периодично даљинско снимање информација
  • непознати будући захтеви

Услови рада:

  • површина покривања 1 ск. км.
  • директна видљивост између објеката
  • температура од +50 до -50 Ц
  • влажност до 100%
  • биолошки активни депозити (буђ, бактерије које редукују сулфат)
  • вибрације, не више, машина класе 1-2 према ГОСТ ИСО 10816-1-97
  • електромагнетно окружење - укључивање електромотора са контакторима КТ 6053, РВС-ДН опрема за меки старт, СИЕМЕНС МИЦРОМАСТЕР ПИД управљачка опрема, зрачење у ИСМ и ГСМ опсегу према захтевима за ове уређаје, ручно електролучно заваривање на лицу места
  • превисок мрежни напон, краткотрајни прекиди у напајању електричном енергијом, пренапони грома, неуравнотеженост фазе при ломљењу жице надземног вода у дистрибутивној мрежи 6-10 кВ.

Упркос тако строгим захтевима, имплементација је прилично једноставна када се проблем решава корак по корак.

Узимајући све у обзир, „Ардуино Нано 3.0“ плоча је постала „мозак“ плана. Роботдин плоча има АТМЕГА 328 контролер, неопходан стабилизатор напона од 3,3 В за
струја 800 мА и претварач у ЦХ340Г УАРТ-УСБ.

Пре свега, направљени су бројачи радних сати као најсавременији. Раније коришћена индустријска бројила састављена на ПИЦ-има са струјним колом без трансформатора су отказала због напона током годину дана рада. Остале су нетакнуте само оне повезане помоћу домаћег 5В напајања. Да би се убрзала инсталација и свестраност повезивања, сигнал о стању јединица узима се са терминала склопних уређаја, тј. регистрација присуства 1. фазног напона са трофазним напајањем од 380В. За координацију са контролером користи се средњи релеј са намотајем од 220В или оптокаплер састављен од ЛЕД диоде и ГЛ5516 фотоотпорника или ПЦ817 оптокаплера. Све опције су тестиране. ЛЕД се напаја исправљеним напоном са ограничењем струје помоћу два СВВ22 кондензатора дизајнирана за напон од 630В серијски спојена ради сигурности током случајног тестирања кола мегоомметром.
Читање очитавања радног времена помоћу СТ7735С ЛЦД екрана, пренос података у реалном времену преко радија помоћу модула Е01-МЛ01ДП05 на фреквенцији од 2,4 МХз. Овај уређај садржи нРФ24Л01+ чип и РФКС2401Ц појачало за пренос/пријем,
излазна снага до 100 мВ. Спиралне антене дизајниране за жељени домет у онлајн калкулатору саита. Избор типа антене одређен је искључењем пријема појединачно рефлектованих таласа од околних металних конструкција. Делови антене се штампају на 3Д штампачу. Тренутно стање бројача се чува у ЕЕПРОМ-у самог контролера и враћа се у случају неочекиваног нестанка струје. Временске интервале за бројање обезбеђује РТЦ чип ДС3231 у облику модула са резервном батеријом. Напајање користи 3 модула, стварни импулсни извор 220/5В ХЛК-ПМ01 600мА, претварач са 1-5В на 5В ХВ-КСНУМКС и КСНУМКСА - контролер батерије са шема заштита од кратког споја, прекомерног пражњења и препуњавања. Све компоненте су купљене на веб страници Алиекпресс.

Табла за хлебЛокални аутономни систем прикупљања података
4-канални бројач. На улазима се налазе ЛЦ филтери за заштиту од сметњи преко комуникационе линије упредене парице. Подаци о стању контролних објеката се стално читају једном у секунди и приказују у боји на ЛЦД екрану. Очитавања се ажурирају и снимају у непроменљиву меморију сваких 1 секунди. 36 секунди је 36/1 сата, ово је формат у којем су подаци потребни. Сваких 100 сек. преноси се информација о броју секунди рада за сваку контролну јединицу. ЕЕПРОМ меморија има ограничен број циклуса писања-брисања, према произвођачу, 12 пута. Најгора опција је када се најмање једна ћелија стално ажурира. Обим 100000. бројача је 1 бајта, ово је број дугог формата, 4 бројача, укупно 4 бајтова заузима један запис. Дужина меморије чипа је 16 бајта; након 1024 уноса од 64 бројача, снимање ће почети изнова. У ЕЕПРОМ библиотеци, метода ЕЕПРОМ.пут не пише; ако се вредност ћелије и информације које се уписују поклапају, неће доћи до деградације ћелија. Као резултат тога, гарантовано време рада меморије ће бити више од 4 година. Време могућег, али не гарантованог рада може бити много дуже.

Дијаграм колаЛокални аутономни систем прикупљања података
Програм у Ардуино ИДЕ//12 бајтова (328%)

#инцлуде // Основна графичка библиотека
#инцлуде // Библиотека специфична за хардвер
#инцлуде
#инцлуде
#инцлуде
#инцлуде
#инцлуде
РФ24 радио(9, 10); // радио објекат за рад са библиотеком РФ24,
// и пин бројеви нРФ24Л01+ (ЦЕ, ЦСН)
#инцлуде
ДС3231 ртц(СДА, СЦЛ);
Време т;

//#дефине ТФТ_ЦС 10
#дефине ТФТ_ЦС 8
#дефине ТФТ_РСТ -1 // ово такође можете повезати са Ардуино ресетовањем
// у том случају, поставите овај #дефине пин на -1!
//#дефине ТФТ_ДЦ 9 // ДЦ=РС=А0 - опције означавања за избор команде или регистра података.
#дефине ТФТ_ДЦ 3

Адафруит_СТ7735 тфт = Адафруит_СТ7735(ТФТ_ЦС, ТФТ_ДЦ, ТФТ_РСТ);

// Опција 2: користите било које игле, али мало спорије!
#дефине ТФТ_СЦЛК 13 // поставите ове чиоде које желите!
#дефине ТФТ_МОСИ 11 // подесите ове игле да буду које год желите!
//Адафруит_СТ7735 тфт = Адафруит_СТ7735(ТФТ_ЦС, ТФТ_ДЦ, ТФТ_МОСИ, ТФТ_СЦЛК, ТФТ_РСТ);
#инцлуде

померање бајта = 52;
бите пинСтате;
унсигнед лонг пумп[4];// низ са вредностима бројача од 4 секунде
пловак м = 3600.0;
унсигнед инт адреса = 0;
инт рц;// променљива за бројаче
унсигнед лонг сумприм = 0;
унсигнед лонг сумсец = 0;
бајт и = 0;
бајт к = 34;
унсигнед инт з = 0;
бајт б = Б00000001;
бите пумрцоунтер[4]; // низ за чување стања објеката, 1 - искључено, 0 - укључено.
инт старт = 0; //

воид сетуп () {

ртц.бегин();
радио.бегин(); // Покрени рад нРФ24Л01+
радио.сетЦханнел(120); // канал података (од 0 до 127).
радио.сетДатаРате(РФ24_250КБПС); // брзина преноса података (РФ24_250КБПС, РФ24_1МБПС, РФ24_2МБПС).
радио.сетПАЛевел(РФ24_ПА_МАКС); // снага предајника (РФ24_ПА_МИН=-18дБм, РФ24_ПА_ЛОВ=-12дБм,
// РФ24_ПА_ХИГХ=-6дБм, РФ24_ПА_МАКС=0дБм)
радио.опенВритингПипе(0кААББЦЦДД11ЛЛ); // Отварање цеви са идентификатором за пренос података

// Да бисте подесили време, декоментирајте потребне редове
//ртц.сетДОВ(1); // Дан у недељи
//ртц.сетТиме(21, 20, 0); // Време, у 24-часовном формату.
//ртц.сетДате(29, 10, 2018); // Датум, 29

тфт.инитР(ИНИТР_БЛАЦКТАБ); // иницијализује СТ7735С чип, црни језичак
// Користите овај иницијализатор (декоментирајте) ако користите ТФТ од 1.44 инча
//тфт.инитР(ИНИТР_144ГРЕЕНТАБ); // иницијализује СТ7735С чип, РЕД рцБ таб
тфт.сетТектВрап(фалсе); // Дозволи да текст иде са десне ивице
тфт.сетРотатион( 2 ); // за ЦРНУ ПЦБ и ЦРВЕНУ тфт.сетРотатион(0) или не.
тфт.филлСцреен(СТ7735_БЛАЦК); // очисти екран

ДДРД = ДДРД | Б00000000;
ПОРТД = ПОРТД | Б11110000; // затезање софтвера ради, висок ниво -
// контролисани објекти „не раде“, „4“ се уписује на сва 1 виша порта Д, нема бројања.

за ( рц = 0; рц < 4; рц++)
{
тфт.сетЦурсор (3, рц * 10 + схифт); // приказ бројева позиција контролних објеката
тфт.принт(рц + 1);
}

тфт.сетЦурсор(12, 0); // излаз 3 реда текста
тфт.принтлн("ДЕВЕЛОПЕРИ & ИЗГРАДЊА"); // хвалити себе вољене
тфт.сетЦурсор(24, 10); // или зло ауторско право
тфт.принт("ДЕВЕЛОПЕР ММ");
тфт.сетЦурсор(28, 20);
тфт.принт("БУИЛД-ЕР ДД");

//опоравак података///////////////////////////////////////////// ////////////

фор ( з = 0; з < 1023; з += 16 ) { // Понавља се кроз све ћелије у индустрији
//и уписује у низ од 4 променљиве пумпе, 4 бајта за сваки бројач, јер
// неозначена дуга променљива. Постоје 4 бројача, један запис од сва 4 заузима 16 бајтова.
ЕЕПРОМ.гет(з, пумпа[0]); // дакле, без фор петље, мањи волумен
ЕЕПРОМ.гет(з+4, пумпа[1]);
ЕЕПРОМ.гет(з+8, пумпа[2]);
ЕЕПРОМ.гет(з+12, пумпа[3]);

// додељивање нове следеће вредности за збир 4 бројача
сумприм = (пумпа [0] + пумпа [1] + пумпа [2] + пумпа [3]);

// упоређује нову вредност збира 4 бројача у променљивој сумприм са претходном вредношћу у променљивој
// сумсец и ако је претходни збир мањи или једнак новом збиру, додељује се нови већи или једнак
// вредност сумсец.

иф ( сумсец <= сумприм ) {
сумсец = сумприм; //

//и тренутна вредност з је додељена адресној променљивој, з је адреса почетка 16-бајтног блока од 4 вредности
// бројачи који се снимају у исто време (пошто се при прозивању порта свих 8 битова уписује истовремено,
// укључујући наша неопходна висока 4 бита порта Д).
адреса = з;
}
}

// још једном приступам еепром меморији на адреси почетка блока од 16 бајтова од 4 забележене вредности бројача
// последњи, тј. вредности пре искључивања или поновног покретања због замрзавања. Снимање најновијег
// бројач вредности у низ од 4 варијабле пумпа.

ЕЕПРОМ.гет(адреса, пумпа[0]);
ЕЕПРОМ.гет(адреса + 4, пумпа[1]);
ЕЕПРОМ.гет(адреса + 8, пумпа[2]);
ЕЕПРОМ.гет(адреса + 12, пумпа[3]);

адреса += 16; //повећање адресе за писање следећег блока без преписивања података последњег записа

//крај опоравка података////////////////////////////////////////// ///////////////////

аттацхИнтеррупт(0, цоунт, РИСИНГ); // пин Д2, омогући прекиде, долази сваке секунде
// импулси из РТЦ ДС3231 са СКВ излаза

вдт_енабле(ВДТО_8С); // покренути ватцхдог тајмер, поново покренути контролер у случају замрзавања, време,
// за који треба да издате команду за ресетовање тајмера вдт_ресет( и избегавате поновно покретање током нормалног рада - 8 сек.
// за тестове није препоручљиво подесити вредност на мање од 8 секунди. У овом случају, тајмер се пожељно ресетује
// трзање, а то се дешава сваке секунде.

}

воид лооп () {
// празан циклус, овде ће бити контрола рада електромотора у отвореној фази
}

воид цоунт() {

тфт.сетТектЦолор(СТ7735_ВХИТЕ); // поставља боју фонта
т = ртц.гетТиме(); // време читања
тфт.сетЦурсор(5, 120); // подешавање позиције курсора
тфт.филлРецт(5, 120, 50, 7, СТ7735_БЛАЦК); // брисање области временског излаза
тфт.принт(ртц.гетТимеСтр()); // излазна очитавања сата

вдт_ресет(); // ресетујте ватцхдог сваког циклуса, тј. секунде

фор (рц = 0; рц < 4; рц ++) // почетак циклуса за проверу усаглашености улазног стања
// порт битова у претходно стање читања битова порта Д
{
пинСтате = (ПИНД >> 4) & ( б << рц);

иф (пумрцоунтер [рц] != пинСтате) { // и ако се не подудара, онда
пумрцоунтер[рц] = пинСтате; // додељивање променљивој статуса бита порта нове вредности 1/0
}
// индикација стања објеката контроле боја
// ПЛАВА је мала грешка постојећег екрана (или библиотеке?), РГБ и БГР су помешани.
иф (пинСтате == ( б << рц )) {
тфт.филлРецт(15, ((рц * 10 + схифт)), 7, 7, СТ7735_БЛУЕ); // за низак ниво бројања промените ЗЕЛЕНО у ПЛАВО
} Елсе {
тфт.филлРецт(15, ((рц * 10 + схифт)), 7, 7, СТ7735_ГРЕЕН); // за низак ниво бројања промените ПЛАВО у ЗЕЛЕНО
пумпа [рц] += 1; // додај 1 секунду на бројач времена рада
}
}

к++;
ако (к == 36) {
к = 0;

тфт.филлРецт(30, схифт, 97, 40, СТ7735_БЛАЦК); // брисање области приказа времена рада
тфт.филлРецт(60, 120, 73, 7, СТ7735_БЛАЦК); // и датуми

тфт.сетЦурсор(60, 120); // подешавање позиције курсора
тфт.принт(ртц.гетДатеСтр()); // приказује датум на ЛЦД екрану

за (рц = 0; рц < 4; рц ++) //излаз радних сати у целини, десетине и
{
тфт.сетЦурсор (30, рц * 10 + схифт); // стотинке сата са померањем екрана наниже за 10 пиксела
тфт.принтлн(пумпа [рц] / м);
}

// уписивање „сирових“ вредности радних сати (у секундама) у ЕЕПРОМ //////////////////////////////

за (рц = 0; рц < 4; рц++)
{
ЕЕПРОМ.пут(адреса, пумпа [рц]);
адреса += сизеоф(флоат); // повећава променљиву адресе за писање
}
}

// шаље податке преко радио канала из података који показују колико бајтова треба послати.
иф ((к == 6 ) || (к == 18 ) || (к == 30 )) {

непотписани дуги подаци;

радио.врите(&старт, сизеоф(старт));

за (и = 0; и < 4; и++) {
подаци = пумпа [и ];
радио.врите( &дата, сизеоф(подаци));
}
}
}

Неколико напомена на крају. Бројање се дешава на ниском логичком нивоу на улазима.

Отпори повлачења Р2-Р5 су 36 кОхм за опцију са фотоотпорницима ГЛ5516. У случају фототранзисторског оптокаплера и релеја, подесите на 4,7-5,1 кОхм. Ардуино Нано в3.0 боотлоадер је замењен Ардуино Уно користећи ТЛ866А програматор за исправан рад ватцхдог тајмера. Осигурачи су исправљени да раде на напонима изнад 4,3 В. Спољно коло за ресетовање Р6 Ц3 није коришћено. У узорку програма, фреквенција предајника не одговара нелиценцираном опсегу; опсег од 2,4 МХз је ограничен на фреквенције 2400.0-2483.5 МХз.

Опсег предајника Е01-МЛ01ДП05 је 2400-2525 МХз. Пропусни опсег једног канала је 1 МХз, при подешавању брзине као “РФ24_2МБПС” наведени радио.сетЦханнел(120) канал ће бити заузети, тј. опсег ће бити 2 МХз.

Извор: ввв.хабр.цом

Додај коментар