ShioTiny: зангилаа, холболт, үйл явдал эсвэл зургийн програмын онцлог

ShioTiny: зангилаа, холболт, үйл явдал эсвэл зургийн програмын онцлог

Гол санаанууд эсвэл энэ нийтлэл юуны тухай юм

Өгүүллийн сэдэв нь визуал PLC програмчлал юм ShioTiny Энд тайлбарласан ухаалаг байшингийн хувьд: ShioTiny: жижиг автоматжуулалт, интернетийн зүйлс эсвэл "амралтаас зургаан сарын өмнө".

Маш товчхон гэх мэт ойлголтууд зангилаа, харилцаа холбоо, хөгжил, түүнчлэн визуал програмыг ачаалах, гүйцэтгэх онцлогууд ESP8266PLC-ийн үндэс суурь болсон ShioTiny.

Танилцуулга эсвэл зохион байгуулалтын хоёр асуулт

Миний хөгжлийн талаархи өмнөх нийтлэлд би хянагчийн чадварын талаар товч мэдээлэл өгсөн ShioTiny.

Хачирхалтай нь олон нийт маш их сонирхож, надаас маш олон асуулт асуусан. Зарим найзууд надаас хянагч худалдаж авахыг санал болгов. Үгүй ээ, би бага зэрэг мөнгө олохыг эсэргүүцдэггүй, гэхдээ миний ухамсар програм хангамжийн хувьд маш бүдүүлэг хэвээр байгаа зүйлийг зарахыг зөвшөөрдөггүй.

Тиймээс би GitHub дээр програм хангамжийн хоёртын файлууд болон төхөөрөмжийн диаграммыг нийтэлсэн: програм хангамж + хамгийн богино заавар + диаграм + жишээнүүд.

Одоо хүн бүр ESP-07-г анивчуулж, програм хангамжийг өөрсдөө тоглох боломжтой. Хэрэв хэн нэгэн үнэхээр зураг дээрхтэй яг адилхан самбар авахыг хүсч байвал надад хэд хэдэн самбар байгаа. Имэйлээр бичнэ үү [имэйлээр хамгаалагдсан]. Гэхдээ мартагдашгүй Огурцов хэлэхдээ: "Би юунд ч хариуцлага хүлээхгүй!"

Тэгэхээр, гол зүйлдээ орцгооё: юу вэ?зангилаа"(зангилаа) ба"үйл явдал"? Програм хэрхэн хэрэгждэг вэ?

Ердийнх шигээ дарааллаар нь эхэлцгээе: програмыг татаж ав.

Програмыг хэрхэн ачаалж байна

Товчлуур дарахад юу болох талаар эхэлцгээе оруулах редактор дээр ElDraw мөн үзэсгэлэнтэй квадратуудаас бүрдсэн схемийн программ маань төхөөрөмж рүү нисдэг.

Нэгдүгээрт, бидний зурсан диаграмм дээр үндэслэн түүний тайлбарыг текст хэлбэрээр хийсэн болно.
Хоёрдугаарт, бүх зангилааны оролтууд гаралттай холбогдсон эсэхийг шалгадаг. "өлгөөтэй" орц байх ёсгүй. Хэрэв ийм оролт илэрсэн бол хэлхээг ShioTiny-д ачаалахгүй бөгөөд засварлагч холбогдох анхааруулгыг харуулах болно.

Хэрэв бүх зүйл сайн болсон бол засварлагч хэлхээний текстийн тайлбарыг нэг нэгээр нь ShioTiny руу илгээдэг. Мэдээжийн хэрэг, ShioTiny-ээс одоо байгаа хэлхээг эхлээд устгана. Үүссэн текстийн тайлбар нь FLASH санах ойд хадгалагдана.

Дашрамд хэлэхэд, хэрэв та төхөөрөмжөөс хэлхээг арилгахыг хүсч байвал зүгээр л хоосон хэлхээг ачаална уу (нэг зангилааны элемент агуулаагүй).

Бүх хэлхээний программыг ShioTiny PLC-д ачаалсны дараа энэ нь "гүйцэтгэж" эхэлнэ. Энэ нь юу гэсэн үг вэ?

Цахилгаан асаалттай үед болон засварлагчаас хэлхээг хүлээн авах үед FLASH санах ойноос хэлхээг ачаалах процессууд ижил байна гэдгийг анхаарна уу.

Нэгдүгээрт, зангилааны объектуудыг тэдгээрийн тайлбар дээр үндэслэн үүсгэнэ.
Дараа нь зангилааны хооронд холболт хийгдэнэ. Өөрөөр хэлбэл, гаралтын оролт, оролтыг гаралттай холбох холбоосууд үүсдэг.

Энэ бүхний дараа л программын үндсэн мөчлөг эхэлнэ.

Би удаан хугацаанд бичсэн боловч FLASH санах ойноос хэлхээг "ачаалах" -аас эхлээд үндсэн циклийг эхлүүлэх хүртэлх бүх үйл явц нь 60-80 зангилаатай хэлхээнд секундын багахан хэсгийг зарцуулдаг.

Үндсэн гогцоо хэрхэн ажилладаг вэ? Маш энгийн. Эхлээд тэр гарч ирэхийг хүлээж байна хөгжил зарим зангилаанд, дараа нь тухайн үйл явдлыг боловсруулдаг. Гэх мэт эцэс төгсгөлгүй. За, эсвэл тэд ShioTiny-д шинэ схем байршуулах хүртэл.

гэх мэт зүйлсийг би хэд хэдэн удаа дурдсан хөгжил, зангилаа и харилцаа холбоо. Гэхдээ энэ нь програм хангамжийн үүднээс юу вэ? Бид өнөөдөр энэ тухай ярих болно.

Зангилаа, холболт, үйл явдал

Зөвхөн хэлхээний програмуудын жишээг хараарай ShioTinyдиаграмм нь зөвхөн зангилаа (эсвэл элементүүд) ба тэдгээрийн хоорондын холболтуудаас бүрддэг гэдгийг ойлгох.

Зангилаа, гэхдээ тийм буюу хэлхээний элемент заримынх нь виртуал дүрслэл юм үйлдэл өгөгдөл дээр. Энэ нь арифметик үйлдэл, логик үйлдэл эсвэл бидний санаанд орж ирдэг аливаа үйлдэл байж болно. Хамгийн гол нь зангилаа нь орох, гарах гарцтай байх явдал юм.

нэвтрэх - энэ бол зангилаа мэдээлэл хүлээн авах газар юм. Оролтын зургууд нь зангилааны зүүн талд үргэлж байдаг цэгүүд юм.

Гарах - энэ нь зангилааны ажиллагааны үр дүнг авах газар юм. Гаралтын зургууд нь зангилааны баруун талд үргэлж байрладаг цэгүүд юм.

Зарим зангилаанууд оролтгүй байдаг. Ийм зангилаа нь үр дүнг дотооддоо үүсгэдэг. Жишээлбэл, тогтмол зангилаа эсвэл мэдрэгчийн зангилаа: үр дүнг мэдээлэхийн тулд бусад зангилааны өгөгдөл шаардлагагүй.

Бусад зангилаанууд нь эсрэгээрээ гаралтгүй байдаг. Эдгээр нь жишээлбэл, идэвхжүүлэгч (реле эсвэл үүнтэй төстэй зүйл) харуулах зангилаа юм. Тэд өгөгдлийг хүлээн авдаг боловч бусад цэгүүдэд боломжтой тооцооллын үр дүнг үүсгэдэггүй.

Нэмж дурдахад өвөрмөц тайлбарын цэг бас байдаг. Энэ нь юу ч хийхгүй, оролт, гаралтгүй. Үүний зорилго нь диаграмм дээрх тайлбар юм.

Юу "үйл явдал"? Үйл явдал нь аливаа зангилаанд шинэ өгөгдөл гарч ирэх явдал юм. Жишээлбэл, үйл явдалд: оролтын төлөвийн өөрчлөлт (зангилаа Оролт), өөр төхөөрөмжөөс өгөгдөл хүлээн авах (зангилаа MQTT и UDP), тодорхой хугацааны хугацаа дуусах (зангилаа Таймер и Түр хүлээнэ үү) гэх мэт.

Үйл явдал юунд зориулагдсан вэ? Тиймээ, шинэ өгөгдөл хүлээн авахтай холбогдуулан аль зангилаанд шинэ өгөгдөл үүсч, ямар зангилааг өөрчлөх шаардлагатай байгааг тодорхойлохын тулд. Энэ үйл явдал нь зангилааны гинжин хэлхээний дагуу "дамждаг" бөгөөд төлөв байдлыг нь шалгаж, өөрчлөх шаардлагатай бүх зангилаануудыг тойрч гарах хүртэл.

Бүх зангилааг хоёр төрөлд хувааж болно.
Үйл явдал үүсгэж болох зангилааг нэрлэе "идэвхтэй зангилаа".
Бид үйл явдал үүсгэж чадахгүй зангилааг дуудах болно "идэвхгүй зангилаа".

Зангилаа нь үйл явдлыг үүсгэх үед (өөрөөр хэлбэл түүний гаралт дээр шинэ өгөгдөл гарч ирдэг) ерөнхий тохиолдолд үйл явдлын үүсгэгчийн зангилааны гаралттай холбогдсон зангилааны бүх гинжин хэлхээний төлөв өөрчлөгддөг.

Үүнийг тодорхой болгохын тулд зураг дээрх жишээг анхаарч үзээрэй.

ShioTiny: зангилаа, холболт, үйл явдал эсвэл зургийн програмын онцлог

Энд байгаа идэвхтэй зангилаанууд нь Input1, Input2, Input3 юм. Үлдсэн зангилаа нь идэвхгүй байна. Нэг эсвэл өөр оролт хаагдах үед юу болохыг авч үзье. Тохиромжтой болгохын тулд үр дүнг хүснэгтэд нэгтгэн харуулав.

ShioTiny: зангилаа, холболт, үйл явдал эсвэл зургийн програмын онцлог

Таны харж байгаагаар үйл явдал тохиолдоход тухайн үйл явдлын эх зангилаанаас төгсгөлийн зангилаа хүртэл гинж үүсдэг. Гинжинд ордоггүй зангилааны төлөв өөрчлөгддөггүй.

Хууль ёсны асуулт гарч ирнэ: хоёр эсвэл бүр хэд хэдэн үйл явдал нэгэн зэрэг тохиолдвол юу болох вэ?

Глеб Анфиловын бүтээлд дуртай хүний ​​хувьд би түүний "Гайхлаас зугтах нь" ном руу сониуч асуулт илгээхийг хүсч байна. Энэ бол "бага насныханд зориулсан харьцангуйн онол" бөгөөд "нэгэн зэрэг" гэж юу болохыг, түүнтэй хэрхэн амьдрахыг маш сайн тайлбарладаг.

Гэхдээ бараг бүх зүйл илүү хялбар байдаг: хоёр эсвэл бүр хэд хэдэн үйл явдал тохиолдоход үйл явдлын эх сурвалж бүрийн бүх хэлхээг дараалан бүтээж, боловсруулдаг бөгөөд ямар ч гайхамшиг тохиолддоггүй.

Сонирхолтой уншигчдын дараагийн бүрэн хууль ёсны асуулт бол зангилаанууд нь цагирагт холбогдсон бол юу болох вэ? Эсвэл эдгээр ухаалаг залуусын хэлснээр санал хүсэлтээ танилцуулаарай. Өөрөөр хэлбэл, зангилааны аль нэгний гаралтыг өмнөх зангилааны оролттой холбож, энэ зангилааны гаралтын төлөв нь түүний оролтын төлөвт нөлөөлнө. Засварлагч нь зангилааны гаралтыг түүний оролттой шууд холбохыг зөвшөөрөхгүй. ElDraw. Гэхдээ доорх зурган дээрх шиг шууд бусаар үүнийг хийж болно.

Тэгэхээр энэ тохиолдолд юу болох вэ? Хариулт нь маш "тодорхой" байх болно: аль зангилаанаас хамаарна. Зураг дээрх жишээг харцгаая.

ShioTiny: зангилаа, холболт, үйл явдал эсвэл зургийн програмын онцлог

Оролт1-ийн оролтын контактууд нээлттэй үед А зангилааны дээд оролт 0. А зангилааны гаралт мөн 0. В зангилааны гаралт 1. Тэгээд эцэст нь А зангилааны доод оролт 1. Бүх зүйл тодорхой. Мөн ойлгомжгүй хүмүүст "БӨН" ба "БИШ" зангилаа хэрхэн ажилладаг тухай тайлбарыг доороос харна уу.

Одоо бид Input1 оролтын контактуудыг хааж, өөрөөр хэлбэл бид A зангилааны дээд оролтод нэгийг хэрэглэнэ. Электроникийн талаар сайн мэддэг хүмүүс бид логик элементүүдийг ашиглан сонгодог генераторын хэлхээг авах болно гэдгийг мэддэг. Онолын хувьд ийм хэлхээ нь А ба В элементүүдийн гаралтын үед 1-0-1-0-1-0... дарааллыг эцэс төгсгөлгүй гаргах ёстой. болон 0-1-0-1-0-1-…. Эцсийн эцэст, үйл явдал нь 2-3-2-3-... тойрог дотор ажиллаж байгаа А ба В зангилааны төлөвийг байнга өөрчлөх ёстой!

Гэвч бодит байдал дээр ийм зүйл тохиолддоггүй. Хэлхээ санамсаргүй байдалд орох эсвэл реле асаалттай эсвэл унтарсан хэвээр байх эсвэл хэд хэдэн удаа дараалан бага зэрэг дуугарч, унтрааж болно. Энэ бүхэн Ангараг гарагийн өмнөд туйлын цаг агаарын байдлаас хамаарна. Тэгээд л ийм зүйл болдог.

Оролт1 зангилааны үйл явдал нь A зангилааны төлөвийг, дараа нь В зангилаа гэх мэтийг тойрог хэлбэрээр хэд хэдэн удаа өөрчилнө. Хөтөлбөр нь үйл явдлын "гогцоо" -ыг илрүүлж, энэ багт наадмыг хүчээр зогсооно. Үүний дараа шинэ үйл явдал гарах хүртэл A ба B зангилааны төлөвийн өөрчлөлтийг хаадаг. Хөтөлбөр "тойрог эргэхээ боль!" гэж шийдэх мөч - ерөнхийдөө энэ нь олон хүчин зүйлээс хамаардаг бөгөөд санамсаргүй гэж үзэж болно.

Зангилааг цагираг болгон холбохдоо болгоомжтой байгаарай - үр нөлөө нь үргэлж тодорхой биш байх болно! Та юу хийж байгаагаа, яагаад хийж байгаагаа сайн санаарай!

Бидэнд байгаа зангилаанууд дээр генератор барих боломжтой хэвээр байна уу? Тиймээ чи чадна! Гэхдээ энэ нь үйл явдлыг өөрөө үүсгэж чадах зангилаа шаарддаг. Ийм зангилаа байдаг - энэ бол "сааталын шугам" юм. Доорх зургаас 6 секундын хугацаатай генератор хэрхэн ажилладагийг харцгаая.

ShioTiny: зангилаа, холболт, үйл явдал эсвэл зургийн програмын онцлог

Генераторын гол элемент нь зангилаа А - саатлын шугам юм. Хэрэв та саатлын шугамын оролтын төлөвийг 0-ээс 1 болгон өөрчилвөл гаралт дээр 1 нь шууд гарч ирэхгүй, зөвхөн тодорхой хугацааны дараа л гарч ирнэ. Манай тохиолдолд энэ нь 3 секунд байна. Үүнтэй адилаар, хэрэв та саатлын шугамын оролтын төлөвийг 1-ээс 0 болгон өөрчилвөл гаралт дээрх 0 ижил 3 секундын дараа гарч ирнэ. Саатуулах хугацааг секундын аравны нэгээр тогтоосон. Энэ нь 30 гэсэн утга нь 3 секунд гэсэн үг юм.

Хойшлуулсан шугамын онцлог нь саатлын хугацаа дууссаны дараа үйл явдал үүсгэдэг явдал юм.

Эхэндээ саатлын шугамын гаралт 0 байсан гэж үзье. В зангилаа - инвертерийг дамжуулсны дараа энэ 0 нь 1 болж, саатлын шугамын оролт руу очно. Шууд юу ч болдоггүй. Саатлын шугамын гаралтад энэ нь 0 хэвээр байх боловч саатлын хугацааг тоолж эхэлнэ. 3 секунд өнгөрчээ. Дараа нь саатлын шугам нь үйл явдлыг үүсгэдэг. Түүний гаралт дээр энэ нь гарч ирнэ 1. Энэ нэгж нь В зангилаа - инвертер - 0 болж хувирч, саатлын шугамын оролт руу шилждэг. Дахиад 3 секунд өнгөрч, процесс давтагдана. Өөрөөр хэлбэл, 3 секунд тутамд саатлын шугамын гаралтын төлөв 0-ээс 1, дараа нь 1-ээс 0 болж өөрчлөгдөнө. Реле товшиж байна. Генератор ажиллаж байна. Импульсийн хугацаа 6 секунд (гаралтын тэг дээр 3 секунд, гаралтын нэг дээр 3 секунд).

Гэхдээ бодит хэлхээнд энэ жишээг ашиглах шаардлагагүй байдаг. Гадны тусламжгүйгээр өгөгдсөн хугацаатай импульсийн дарааллыг бий болгодог тусгай таймер зангилаанууд байдаг. Эдгээр импульсийн "тэг" ба "нэг" үргэлжлэх хугацаа нь хугацааны хагастай тэнцүү байна.

Тогтмол үйлдлүүдийг тохируулахын тулд таймер зангилаа ашиглана уу.

"Тэг" ба "нэг" үргэлжлэх хугацаа тэнцүү байдаг ийм дижитал дохиог "меандер" гэж нэрлэдэг гэдгийг би тэмдэглэж байна.

Зангилааны хооронд үйл явдал хэрхэн тархдаг, юу хийх ёсгүй вэ гэсэн асуултыг бага зэрэг тодруулсан гэж найдаж байна.

Дүгнэлт ба лавлагаа

Нийтлэл богино байсан боловч энэ нийтлэл нь зангилаа, үйл явдлын талаар үүссэн асуултуудын хариулт юм.

Програм хангамж хөгжиж, шинэ жишээнүүд гарч ирэх тусам би хэрхэн програмчлах талаар бичих болно ShioTiny хүмүүст сонирхолтой байх л юм бол жижиг нийтлэлүүд.

Өмнөх шиг, диаграмм, програм хангамж, жишээ, бүрэлдэхүүн хэсгүүдийн тайлбар, бүх зүйл үлдсэн хэсэг нь энд байна.

Асуулт, санал, шүүмжлэл - эндээс үзнэ үү: [имэйлээр хамгаалагдсан]

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх