ShiIoTiny. հանգույցներ, հղումներ և իրադարձություններ կամ նկարչական ծրագրերի առանձնահատկություններ

ShiIoTiny. հանգույցներ, հղումներ և իրադարձություններ կամ նկարչական ծրագրերի առանձնահատկություններ

Հիմնական կետերը կամ ինչի մասին է այս հոդվածը

Հոդվածի թեման տեսողական PLC ծրագրավորումն է ShioTiny այստեղ նկարագրված խելացի տան համար. ShiIoTiny. փոքր ավտոմատացում, իրերի ինտերնետ կամ «արձակուրդից վեց ամիս առաջ».

Շատ կարճ հասկացություններ, ինչպիսիք են հանգույցներ, հաղորդակցությունները, զարգացումները, ինչպես նաև տեսողական ծրագրի բեռնման և կատարման առանձնահատկությունները ESP8266, որը հանդիսանում է PLC-ի հիմքը ShioTiny.

Ներածություն կամ մի քանի կազմակերպչական հարց

Իմ զարգացման մասին նախորդ հոդվածում ես կարճ ակնարկ տվեցի վերահսկիչի հնարավորությունների մասին ShioTiny.

Տարօրինակ կերպով հանրությունը բավական մեծ հետաքրքրություն ցուցաբերեց և ինձ բավականին շատ հարցեր տվեց։ Որոշ ընկերներ նույնիսկ անմիջապես առաջարկեցին ինձանից վերահսկիչ գնել: Ոչ, ես դեմ չեմ մի քիչ գումար աշխատելուն, բայց իմ խիղճը թույլ չի տալիս ինձ վաճառել մի բան, որը դեռևս շատ կոպիտ է ծրագրային ապահովման առումով:

Հետևաբար, ես տեղադրեցի որոնվածը երկուական սարքերը և սարքի դիագրամը GitHub-ում. որոնվածը + ամենակարճ հրահանգները + դիագրամ + օրինակներ.

Այժմ բոլորը կարող են թարթել ESP-07-ը և ինքնուրույն խաղալ որոնվածի հետ: Եթե ​​որևէ մեկն իսկապես ցանկանում է նույն տախտակը, ինչպես լուսանկարում, ապա ես ունեմ դրանցից մի քանիսը: Գրեք էլփոստով [էլեկտրոնային փոստով պաշտպանված]. Բայց, ինչպես ասում էր անմոռանալի Օգուրցովը. «Ես ոչ մի բանի համար պատասխանատու չեմ»։

Այսպիսով, եկեք գնանք կետին. ինչ է «հանգույց«(հանգույց) և»Событие«? Ինչպե՞ս է իրականացվում ծրագիրը:

Ինչպես միշտ, սկսենք հերթականությամբ՝ ներբեռնելով ծրագիրը։

Ինչպես է բեռնված ծրագիրը

Սկսենք նրանից, թե ինչ է տեղի ունենում, երբ սեղմում ենք կոճակը Վերբեռնել խմբագրության մեջ ԷլԴրաու և գեղեցիկ քառակուսիներից բաղկացած մեր միացում-ծրագիրը թռչում է սարքի մեջ:

Նախ, մեր գծած դիագրամի հիման վրա կառուցվում է դրա նկարագրությունը տեքստային տեսքով:
Երկրորդ, այն ստուգում է, թե արդյոք հանգույցի բոլոր մուտքերը միացված են ելքերին: «Կախովի» մուտքեր չպետք է լինեն։ Եթե ​​նման մուտքագրում հայտնաբերվի, միացումը չի բեռնվի ShioTiny-ում, և խմբագրիչը կցուցադրի համապատասխան նախազգուշացում:

Եթե ​​ամեն ինչ լավ է ընթանում, խմբագիրն ուղարկում է շղթայի տեքստային նկարագրությունը մեկ-մեկ հանգույցի ShiIoTiny-ին: Իհարկե, ShiIoTiny-ից գոյություն ունեցող միացումն առաջին հերթին հեռացվում է: Ստացված տեքստի նկարագրությունը պահվում է FLASH հիշողության մեջ:

Ի դեպ, եթե ցանկանում եք սարքից շղթա հեռացնել, ապա պարզապես դրա մեջ բեռնեք դատարկ միացում (չպարունակող մեկ հանգույցի տարր):

Երբ ամբողջ միացման ծրագիրը բեռնվում է ShioTiny PLC-ում, այն սկսում է «իրագործվել»: Ինչ է դա նշանակում?

Նկատի ունեցեք, որ FLASH հիշողությունից շղթա բեռնելու գործընթացները, երբ հոսանքը միացված է և խմբագրից շղթա ստանալիս, նույնական են:

Նախ, հանգույցների օբյեկտները ստեղծվում են դրանց նկարագրության հիման վրա:
Այնուհետեւ հանգույցների միջեւ կապեր են կատարվում: Այսինքն՝ ստեղծվում են ելքերի կապեր մուտքերի և մուտքերի ելքերի հետ:

Եվ միայն այս ամենից հետո սկսվում է հիմնական ծրագրի կատարման ցիկլը։

Ես գրել էի երկար ժամանակ, բայց ամբողջ գործընթացը՝ FLASH հիշողությունից սխեման «բեռնելուց» մինչև հիմնական ցիկլը սկսելը, վայրկյանի մի մասն է տևում 60-80 հանգույցների միացման համար:

Ինչպե՞ս է աշխատում հիմնական օղակը: Շատ պարզ. Նախ նա սպասում է ի հայտ գալուն զարգացումները ինչ-որ հանգույցում, այնուհետև մշակում է այդ իրադարձությունը: Եվ այսպես անվերջ։ Դե, կամ մինչև նրանք նոր սխեմա վերբեռնեն ShioTiny:

Արդեն մի քանի անգամ ես նման բաներ եմ նշել զարգացումները, հանգույցներ и հաղորդակցությունները. Բայց ի՞նչ է սա ծրագրային ապահովման տեսանկյունից: Այս մասին այսօր կխոսենք:

Հանգույցներ, կապեր և իրադարձություններ

Պարզապես նայեք միացումային ծրագրերի օրինակներին ShioTinyհասկանալ, որ դիագրամը բաղկացած է միայն երկու միավորից՝ հանգույցներից (կամ տարրերից) և նրանց միջև եղած կապերից։

Հանգույց, բայց այո կամ միացման տարր ոմանց վիրտուալ ներկայացումն է գործունեություն տվյալների նկատմամբ։ Սա կարող է լինել թվաբանական գործողություն, տրամաբանական գործողություն կամ ցանկացած գործողություն, որը գալիս է մեր մտքին: Հիմնական բանը այն է, որ հանգույցը ունի մուտք և ելք:

Մուտք - սա այն վայրն է, որտեղ հանգույցը ստանում է տվյալներ: Մուտքային պատկերները կետեր են, որոնք միշտ գտնվում են հանգույցի ձախ կողմում:

Արտադրողականություն - սա այն վայրն է, որտեղ վերցվում է հանգույցի գործողության արդյունքը: Ելքային պատկերները կետեր են, որոնք միշտ գտնվում են հանգույցի աջ կողմում:

Որոշ հանգույցներ մուտքեր չունեն: Նման հանգույցները արդյունք են ստեղծում ներսից: Օրինակ՝ հաստատուն հանգույց կամ սենսորային հանգույց՝ արդյունքը հաղորդելու համար այլ հանգույցներից տվյալների կարիք չունեն:

Մյուս հանգույցները, ընդհակառակը, ելքեր չունեն։ Սրանք հանգույցներ են, որոնք ցուցադրում են, օրինակ, ակտուատորներ (ռելեներ կամ նմանատիպ այլ բան): Նրանք ընդունում են տվյալներ, բայց չեն առաջացնում հաշվողական արդյունք, որը հասանելի է այլ հանգույցների համար:

Բացի այդ, կա նաև եզակի մեկնաբանությունների հանգույց։ Այն ոչինչ չի անում, չունի մուտքեր կամ ելքեր: Դրա նպատակը գծապատկերում բացատրություն լինելն է:

Ինչ "Событие»: Իրադարձություն ցանկացած հանգույցում նոր տվյալների ի հայտ գալն է: Օրինակ՝ իրադարձությունները ներառում են՝ մուտքային վիճակի փոփոխություն (հանգույց Մուտքային), ստանալով տվյալներ այլ սարքից (հանգույցներ MQTT и UDP), սահմանված ժամկետի ավարտը (հանգույցներ Տայմեր и Դադարեցում) և այլն։

Ինչի համար են միջոցառումները: Այո, որոշելու համար, թե որ հանգույցում են առաջացել նոր տվյալներ և որ հանգույցների վիճակները պետք է փոխվեն՝ կապված նոր տվյալների ստացման հետ: Իրադարձությունն, այսպես ասած, «անցնում է» հանգույցների շղթայի երկայնքով, մինչև այն շրջանցում է բոլոր հանգույցները, որոնց վիճակը պետք է ստուգվի և փոխվի:

Բոլոր հանգույցները կարելի է բաժանել երկու կատեգորիայի.
Եկեք կանչենք հանգույցներ, որոնք կարող են առաջացնել իրադարձություններ»ակտիվ հանգույցներ.
Մենք կանվանենք հանգույցներ, որոնք չեն կարող ստեղծել իրադարձություններ»պասիվ հանգույցներ.

Երբ հանգույցը ստեղծում է իրադարձություն (այսինքն՝ նոր տվյալներ են հայտնվում նրա ելքում), ապա ընդհանուր դեպքում փոխվում է իրադարձությունների գեներատոր հանգույցի ելքին միացված հանգույցների ամբողջ շղթայի վիճակը։

Պարզ դարձնելու համար հաշվի առեք նկարի օրինակը:

ShiIoTiny. հանգույցներ, հղումներ և իրադարձություններ կամ նկարչական ծրագրերի առանձնահատկություններ

Այստեղ ակտիվ հանգույցներն են Input1, Input2 և Input3: Մնացած հանգույցները պասիվ են: Եկեք դիտարկենք, թե ինչ է տեղի ունենում, երբ այս կամ այն ​​մուտքը փակ է: Հարմարության համար արդյունքներն ամփոփված են աղյուսակում:

ShiIoTiny. հանգույցներ, հղումներ և իրադարձություններ կամ նկարչական ծրագրերի առանձնահատկություններ

Ինչպես տեսնում եք, երբ իրադարձություն է տեղի ունենում, շղթա է կառուցվում իրադարձության սկզբնաղբյուր հանգույցից մինչև վերջի հանգույց: Այդ հանգույցների վիճակը, որոնք չեն ընկնում շղթայի մեջ, չի փոխվում։

Իրավացի հարց է ծագում՝ ի՞նչ կլինի, եթե երկու կամ նույնիսկ մի քանի իրադարձություն միաժամանակ տեղի ունենան։

Որպես Գլեբ Անֆիլովի ստեղծագործության սիրահար՝ ես գայթակղվում եմ հետաքրքրասեր հարցով ուղարկել նրա «Փախուստ անակնկալից» գրքին։ Սա «փոքրերի համար հարաբերականության տեսություն է», որը լավ բացատրում է, թե ինչ է նշանակում «միաժամանակ» և ինչպես ապրել դրա հետ։

Բայց գործնականում ամեն ինչ շատ ավելի պարզ է. երբ տեղի են ունենում երկու կամ նույնիսկ մի քանի իրադարձություն, իրադարձությունների յուրաքանչյուր աղբյուրի բոլոր շղթաները հաջորդաբար կառուցվում և մշակվում են հերթով, և հրաշքներ չեն լինում:

Հետաքրքրասեր ընթերցողի հաջորդ լիովին օրինական հարցն այն է, թե ինչ կլինի, եթե հանգույցները միացվեն օղակի մեջ: Կամ, ինչպես ասում են ձեր այս խելացի տղաների մեջ, ներկայացրեք հետադարձ կապ: Այսինքն՝ միացնել հանգույցներից մեկի ելքը նախորդ հանգույցի մուտքին, որպեսզի այս հանգույցի ելքային վիճակն ազդի նրա մուտքի վիճակի վրա։ Խմբագիրը թույլ չի տա ուղղակիորեն միացնել հանգույցի ելքը նրա մուտքագրմանը: ԷլԴրաու. Բայց անուղղակիորեն, ինչպես ստորև բերված նկարում, դա կարելի է անել:

Այսպիսով, ի՞նչ կլինի այս դեպքում: Պատասխանը կլինի շատ «հստակ»՝ կախված նրանից, թե որ հանգույցներից: Եկեք նայենք նկարի օրինակին:

ShiIoTiny. հանգույցներ, հղումներ և իրադարձություններ կամ նկարչական ծրագրերի առանձնահատկություններ

Երբ Input1-ի մուտքային կոնտակտները բաց են, A հանգույցի վերին մուտքը 0 է: A հանգույցի ելքը նույնպես 0 է: B հանգույցի ելքը 1 է: Եվ, վերջապես, A հանգույցի ստորին մուտքը 1 է: պարզ. Իսկ նրանց համար, ովքեր պարզ չեն, ստորև նայեք նկարագրությունը, թե ինչպես են աշխատում «ԵՎ» և «ՉԻ» հանգույցները:

Այժմ մենք փակում ենք Input1 մուտքագրման կոնտակտները, այսինքն՝ մեկը կիրառում ենք A հանգույցի վերին մուտքի վրա։ Էլեկտրոնիկայի հետ ծանոթները գիտեն, որ իրականում մենք կստանանք դասական գեներատորի սխեման՝ օգտագործելով տրամաբանական տարրեր։ Եվ տեսականորեն, նման շղթան պետք է անվերջ առաջացնի 1-0-1-0-1-0 հաջորդականությունը… A և B տարրերի ելքում: և 0-1-0-1-0-1-… Ի վերջո, իրադարձությունը պետք է անընդհատ փոխի A և B հանգույցների վիճակը՝ վազելով շրջանագծով 2-3-2-3-...:

Բայց իրականում դա տեղի չի ունենում։ Շղթան կընկնի պատահական վիճակի, կամ ռելեը կմնա միացված կամ անջատված, կամ գուցե մի քանի անգամ անընդմեջ թեթևակի միացվի և անջատվի: Ամեն ինչ կախված է Մարսի հարավային բևեռի եղանակից: Եվ դա է պատճառը, որ դա տեղի է ունենում:

Input1 հանգույցից մի իրադարձություն մի քանի անգամ փոխում է A հանգույցի վիճակը, այնուհետև B հանգույցը և այլն: Ծրագիրը հայտնաբերում է իրադարձության «շրջադարձը» և բռնի կերպով դադարեցնում այս կառնավալը: Դրանից հետո A և B հանգույցների վիճակի փոփոխություններն արգելափակվում են մինչև նոր իրադարձություն տեղի ունենա: Այն պահը, երբ ծրագիրը որոշում է «դադարեցնել պտտվել շրջանակներով»: - Ընդհանրապես, դա կախված է բազմաթիվ գործոններից և կարելի է պատահական համարել։

Զգույշ եղեք հանգույցները օղակի մեջ միացնելիս, հետևանքները միշտ չէ, որ ակնհայտ կլինեն: Լավ պատկերացրեք, թե ինչ և ինչու եք անում:

Դեռ հնարավո՞ր է մեզ հասանելի հանգույցների վրա գեներատոր կառուցել: Այո, դու կարող ես! Բայց սա պահանջում է հանգույց, որը կարող է ինքնին իրադարձություններ առաջացնել: Եվ կա այդպիսի հանգույց. սա «հետաձգման գիծն է»: Տեսնենք, թե ինչպես է աշխատում 6 վայրկյան ժամանակով գեներատորը ստորև ներկայացված նկարում:

ShiIoTiny. հանգույցներ, հղումներ և իրադարձություններ կամ նկարչական ծրագրերի առանձնահատկություններ

Գեներատորի հիմնական տարրը A հանգույցն է՝ հետաձգման գիծը: Եթե ​​դուք փոխեք հետաձգման գծի մուտքագրման վիճակը 0-ից 1-ի, ապա 1-ը անմիջապես չի հայտնվի ելքի վրա, այլ միայն սահմանված ժամանակից հետո: Մեր դեպքում դա 3 վայրկյան է։ Նույն կերպ, եթե հետաձգման գծի մուտքային վիճակը փոխեք 1-ից 0-ի, ապա ելքի վրա 0 կհայտնվի նույն 3 վայրկյանից հետո: Հետաձգման ժամանակը սահմանվում է վայրկյանի տասներորդով: Այսինքն՝ 30 արժեքը նշանակում է 3 վայրկյան։

Հետաձգման գծի առանձնահատկությունն այն է, որ այն առաջացնում է իրադարձություն հետաձգման ժամանակի ավարտից հետո:

Ենթադրենք, որ սկզբում հետաձգման գծի ելքը եղել է 0։ B հանգույցը՝ ինվերտերն անցնելուց հետո, այս 0-ը վերածվում է 1-ի և գնում դեպի հետաձգման գծի մուտք։ Միանգամից ոչինչ չի լինում։ Հետաձգման գծի ելքում այն ​​կմնա 0, բայց կսկսվի հետաձգման ժամանակի հետհաշվարկը: Անցնում է 3 վայրկյան։ Եվ հետո հետաձգման գիծը առաջացնում է իրադարձություն: Իր ելքում հայտնվում է 1: Այս միավորը B հանգույցից անցնելուց հետո՝ ինվերտերը, վերածվում է 0-ի և գնում դեպի հետաձգման գծի մուտք: Անցնում է ևս 3 վայրկյան... և գործընթացը կրկնվում է։ Այսինքն, յուրաքանչյուր 3 վայրկյանը մեկ հետաձգման գծի ելքի վիճակը փոխվում է 0-ից 1-ի, այնուհետև 1-ից 0-ի: Ռելեը կտտացնում է: Գեներատորն աշխատում է։ Զարկերակային ժամանակահատվածը 6 վայրկյան է (3 վայրկյան ելքային զրոյում և 3 վայրկյան ելքային մեկում):

Բայց իրական սխեմաներում սովորաբար կարիք չկա օգտագործել այս օրինակը: Կան հատուկ ժմչփ հանգույցներ, որոնք կատարելապես և առանց արտաքին օգնության առաջացնում են իմպուլսների հաջորդականություն տվյալ ժամանակահատվածով: Այս իմպուլսներում «զրոյի» և «մեկ»-ի տևողությունը հավասար է ժամանակաշրջանի կեսին:

Պարբերական գործողություններ սահմանելու համար օգտագործեք ժամանակաչափի հանգույցները:

Նշում եմ, որ այնպիսի թվային ազդանշանները, որտեղ «զրոյի» և «մեկ»-ի տևողությունը հավասար է, կոչվում են «meander»:

Հուսով եմ մի փոքր պարզաբանեցի այն հարցը, թե ինչպես են իրադարձությունները տարածվում հանգույցների միջև և ինչ չանել:

Եզրակացություն և հղումներ

Հոդվածը կարճ է ստացվել, բայց այս հոդվածը պատասխան է այն հարցերի, որոնք ծագել են հանգույցների և իրադարձությունների վերաբերյալ:

Քանի որ որոնվածը զարգանում է և հայտնվում են նոր օրինակներ, ես կգրեմ, թե ինչպես ծրագրավորել ShioTiny փոքր հոդվածներ, քանի դեռ այն հետաքրքիր կլինի մարդկանց համար:

Ինչպես նախկինում, դիագրամ, որոնվածը, օրինակներ, բաղադրիչների նկարագրություն և ամեն ինչ մնացածն այստեղ է.

Հարցեր, առաջարկություններ, քննադատություն - գնացեք այստեղ. [էլեկտրոնային փոստով պաշտպանված]

Source: www.habr.com

Добавить комментарий