ShIoTiny: Çizim Programlarının Düğümleri, Bağlantıları ve Olayları veya Özellikleri

ShIoTiny: Çizim Programlarının Düğümleri, Bağlantıları ve Olayları veya Özellikleri

Ana noktalar veya bu makalenin konusu

Makalenin konusu görsel PLC programlama ŞIoTiny burada açıklanan akıllı ev için: ShIoTiny: küçük otomasyon, nesnelerin interneti veya “tatilden altı ay önce”.

çok kısaca gibi kavramlar düğümler, bağlantı, gelişmelergörsel bir programın yüklenmesi ve çalıştırılması özelliklerinin yanı sıra ESP8266PLC'nin temeli olan ŞIoTiny.

Giriş veya birkaç organizasyonel soru

Geliştirmemle ilgili önceki yazımda denetleyicinin yeteneklerine kısa bir genel bakış vermiştim ŞIoTiny.

İşin garibi, halk bana oldukça yoğun bir ilgi gösterdi ve bana birçok soru sordu. Hatta bazı arkadaşlarım hemen benden bir kontrol cihazı almayı bile teklif etti. Hayır, biraz para kazanmaya karşı değilim ama yazılım açısından henüz çok kaba olan bir şeyi satmama vicdanım izin vermiyor.

Bu nedenle, ürün yazılımı ikili dosyalarını ve cihaz şemasını GitHub'da yayınladım: donanım yazılımı + en kısa talimatlar + diyagram + örnekler.

Artık herkes ESP-07'yi flaşlayabilir ve ürün yazılımıyla oynayabilir. Birisi gerçekten fotoğraftakiyle tamamen aynı tahtayı istiyorsa, o zaman bende birkaç tane var. E-postayla yaz [e-posta korumalı]. Ancak unutulmaz Ogurtsov'un dediği gibi: "Ben hiçbir şeyden sorumlu değilim!"

O halde asıl meseleye geçelim: "nedir"узел" (düğüm) ve "olay"? Program nasıl yürütülür?

Her zamanki gibi sırayla başlayalım: programı indirerek.

Program nasıl yüklenir

Bir düğmeye bastığımızda ne olacağıyla başlayalım Foto Yükle editörde ElDraw ve güzel karelerden oluşan devre programımız cihaza uçuyor.

Öncelikle çizdiğimiz diyagrama dayanarak metin biçimindeki açıklaması oluşturulur.
İkinci olarak tüm düğüm girişlerinin çıkışlara bağlı olup olmadığını kontrol eder. “Asma” girişler olmamalıdır. Böyle bir giriş tespit edilirse devre ShIoTiny'ye yüklenmeyecek ve editör ilgili bir uyarı görüntüleyecektir.

Her şey yolunda giderse editör, devrenin metin açıklamasını her seferinde bir düğüm olmak üzere ShIoTiny'ye gönderir. Elbette ilk önce ShIoTiny'deki mevcut devre kaldırıldı. Ortaya çıkan metin açıklaması FLASH bellekte saklanır.

Bu arada, bir cihazdan bir devreyi kaldırmak istiyorsanız, o zaman içine boş bir devre yükleyin (tek bir düğüm elemanı içermeyen).

Devre programının tamamı ShIoTiny PLC'ye yüklendikten sonra "yürütülmeye" başlar. Bu ne anlama geliyor?

Güç açıldığında ve editörden devre alındığında FLASH bellekten devre yükleme işlemlerinin aynı olduğunu unutmayın.

İlk olarak düğüm nesneleri, açıklamalarına göre oluşturulur.
Daha sonra düğümler arasında bağlantılar yapılır. Yani çıktıların girdilere ve girdilerin çıktılara olan bağlantıları oluşturulur.

Ve ancak tüm bunlardan sonra programın ana yürütme döngüsü başlar.

Uzun zamandır yazdım, ancak devrenin FLASH bellekten "yüklenmesinden" ana döngünün başlatılmasına kadar tüm süreç, 60-80 düğümlük bir devre için saniyenin bir kısmını alıyor.

Ana döngü nasıl çalışır? Çok basit. Önce ortaya çıkmasını bekler gelişmeler bir düğümde bu olayı işler. Ve böylece sonsuza kadar devam eder. Ta ki ShIoTiny'ye yeni bir plan yükleyene kadar.

Daha önce birkaç kez buna benzer şeylerden bahsetmiştim. gelişmeler, düğümler и bağlantı. Peki yazılım açısından bakıldığında bu nedir? Bugün bunun hakkında konuşacağız.

Düğümler, bağlantılar ve olaylar

Sadece devre programı örneklerine bakın ŞIoTinyDiyagramın yalnızca iki varlıktan, düğümlerden (veya öğelerden) ve bunlar arasındaki bağlantılardan oluştuğunu anlamak.

düğüm, ama evet veya devre elemanı bazılarının sanal temsilidir etkinlik veriler üzerinden. Bu bir aritmetik işlem olabilir, mantıksal bir işlem olabilir veya aklımıza gelen herhangi bir işlem olabilir. Önemli olan düğümün bir girişi ve çıkışının olmasıdır.

Giriş - burası düğümün veri aldığı yerdir. Giriş görüntüleri her zaman düğümün sol tarafında bulunan noktalardır.

Çıktı - burası düğümün işleminin sonucunun alındığı yerdir. Çıkış görüntüleri her zaman düğümün sağ tarafında bulunan noktalardır.

Bazı düğümlerin girdileri yoktur. Bu tür düğümler sonucu dahili olarak üretir. Örneğin sabit bir düğüm veya sensör düğümü: sonucu raporlamak için diğer düğümlerden gelen verilere ihtiyaç duymazlar.

Diğer düğümlerin ise tam tersine çıktıları yoktur. Bunlar, örneğin aktüatörleri (röleler veya benzeri bir şey) görüntüleyen düğümlerdir. Verileri kabul ederler ancak diğer düğümlerin kullanabileceği bir hesaplama sonucu üretmezler.

Ayrıca benzersiz bir yorum düğümü de vardır. Hiçbir şey yapmaz, girişi veya çıkışı yoktur. Amacı diyagram üzerinde bir açıklama olmaktır.

Ne oldu "olay"? Olay herhangi bir düğümde yeni verilerin ortaya çıkmasıdır. Örneğin olaylar şunları içerir: giriş durumundaki değişiklik (düğüm Giriş), başka bir cihazdan (düğümler) veri almak MQTT и UDP), belirli bir sürenin sona ermesi (düğümler kronometre и gecikme) ve benzeri.

Etkinlikler ne içindir? Evet, yeni verilerin hangi düğümde ortaya çıktığını ve yeni verilerin alınmasıyla bağlantılı olarak hangi düğümlerin durumlarının değiştirilmesi gerektiğini belirlemek için. Olay, durumu kontrol edilmesi ve değiştirilmesi gereken tüm düğümleri atlayana kadar düğüm zinciri boyunca "geçer".

Tüm düğümler iki kategoriye ayrılabilir.
Olay üretebilecek düğümleri çağıralım "aktif düğümler'.
Olay üretemeyen düğümleri çağıracağız”pasif düğümler'.

Bir düğüm bir olay oluşturduğunda (yani, çıkışında yeni veriler göründüğünde), genel durumda, olay oluşturucu düğümün çıkışına bağlı tüm düğüm zincirinin durumu değişir.

Daha açık hale getirmek için şekildeki örneği düşünün.

ShIoTiny: Çizim Programlarının Düğümleri, Bağlantıları ve Olayları veya Özellikleri

Buradaki aktif düğümler Giriş1, Giriş2 ve Giriş3'tür. Kalan düğümler pasiftir. Bir veya başka bir giriş kapatıldığında ne olacağını düşünelim. Kolaylık sağlamak için sonuçlar bir tabloda özetlenmiştir.

ShIoTiny: Çizim Programlarının Düğümleri, Bağlantıları ve Olayları veya Özellikleri

Gördüğünüz gibi bir olay meydana geldiğinde olayın kaynak düğümünden uç düğümüne kadar bir zincir kuruluyor. Zincire girmeyen düğümlerin durumu değişmez.

Meşru bir soru ortaya çıkıyor: İki veya hatta daha fazla olay aynı anda meydana gelirse ne olacak?

Gleb Anfilov'un çalışmalarının bir aşığı olarak, meraklı bir soruyu onun "Sürprizden Kaçış" kitabına gönderme isteği duyuyorum. Bu, “eşzamanlılığın” ne anlama geldiğini ve onunla nasıl yaşanacağını çok iyi açıklayan “küçükler için görelilik teorisi”.

Ancak pratikte her şey çok daha basittir: İki veya hatta daha fazla olay meydana geldiğinde, her olay kaynağındaki tüm zincirler sırayla oluşturulur ve işlenir ve hiçbir mucize meydana gelmez.

Meraklı bir okuyucunun bir sonraki tamamen meşru sorusu, düğümlerin bir halkaya bağlanması durumunda ne olacağıdır? Veya, sizin bu akıllı adamlarınızın arasında dedikleri gibi, geri bildirimde bulunun. Yani, düğümlerden birinin çıkışını önceki düğümün girişine bağlayın, böylece bu düğümün çıkış durumu, girişinin durumunu etkiler. Düzenleyici, bir düğümün çıkışını doğrudan girişine bağlamanıza izin vermez. ElDraw. Ancak dolaylı olarak aşağıdaki şekilde olduğu gibi bu yapılabilir.

Peki bu durumda ne olacak? Cevap çok "kesin" olacaktır: hangi düğümlere bağlı olarak. Şekildeki örneğe bakalım.

ShIoTiny: Çizim Programlarının Düğümleri, Bağlantıları ve Olayları veya Özellikleri

Giriş1'in giriş kontakları açık olduğunda A düğümünün üst girişi 0'dır. A düğümünün çıkışı da 0'dır. B düğümünün çıkışı 1'dir. Ve son olarak A düğümünün alt girişi 1'dir. Her şey temizlemek. Anlaşamayanlar için, "VE" ve "DEĞİL" düğümlerinin nasıl çalıştığına ilişkin açıklamalar için aşağıya bakın.

Şimdi Giriş1 girişinin kontaklarını kapatıyoruz, yani A düğümünün üst girişine bir tane uyguluyoruz. Elektroniğe aşina olanlar biliyor ki aslında mantık elemanlarını kullanan klasik bir jeneratör devresi elde edeceğiz. Ve teorik olarak böyle bir devre, A ve B elemanlarının çıkışında sonsuz bir şekilde 1-0-1-0-1-0… dizisini üretmelidir. ve 0-1-0-1-0-1-…. Sonuçta olay, 2-3-2-3-... daire şeklinde koşarak A ve B düğümlerinin durumunu sürekli değiştirmeli!

Ancak gerçekte bu gerçekleşmez. Devre rastgele bir duruma düşecek veya röle açık veya kapalı kalacak veya arka arkaya birkaç kez hafifçe açılıp kapanacaktır. Her şey Mars'ın güney kutbundaki hava durumuna bağlı. İşte bu yüzden oluyor.

Giriş1 düğümünden gelen bir olay, A düğümünün, ardından B düğümünün durumunu değiştirir ve bu şekilde bir daire içinde birkaç kez değişir. Program olayın "döngüsünü" tespit eder ve bu karnavalı zorla durdurur. Bundan sonra A ve B düğümlerinin durumundaki değişiklikler yeni bir olay oluşana kadar engellenir. Programın "daireler çizerek dönmeyi bırakın!" - genel olarak birçok faktöre bağlıdır ve rastgele kabul edilebilir.

Düğümleri bir halkaya bağlarken dikkatli olun; etkiler her zaman belirgin olmayacaktır! Ne ve neden yaptığınıza dair iyi bir fikriniz olsun!

Kullanabileceğimiz düğümler üzerinde bir jeneratör oluşturmak hala mümkün mü? Evet yapabilirsin! Ancak bu, olayları kendisi üretebilecek bir düğüm gerektirir. Ve böyle bir düğüm var - bu "gecikme çizgisi". Aşağıdaki şekilde 6 saniye periyodu olan bir jeneratörün nasıl çalıştığını görelim.

ShIoTiny: Çizim Programlarının Düğümleri, Bağlantıları ve Olayları veya Özellikleri

Jeneratörün anahtar elemanı A düğümüdür - gecikme hattı. Gecikme hattının giriş durumunu 0'dan 1'e değiştirirseniz, çıkışta 1 hemen görünmeyecektir, yalnızca belirli bir süre sonra görünecektir. Bizim durumumuzda bu 3 saniyedir. Aynı şekilde gecikme hattının giriş durumunu 1'den 0'a değiştirirseniz aynı 0 saniye sonra çıkışta 3 görünecektir. Gecikme süresi saniyenin onda biri olarak ayarlanır. Yani 30 değeri 3 saniye anlamına gelir.

Gecikme hattının özel bir özelliği, gecikme süresi dolduktan sonra bir olay oluşturmasıdır.

Başlangıçta gecikme hattının çıkışının 0 olduğunu varsayalım. B düğümünü (invertör) geçtikten sonra bu 0, 1'e dönüşür ve gecikme hattının girişine gider. Hiçbir şey hemen olmuyor. Gecikme hattının çıkışında 0 kalacak ancak gecikme süresinin geri sayımı başlayacaktır. 3 saniye geçti. Ve sonra gecikme hattı bir olay üretir. Çıkışında 1 görünür. Bu ünite, B düğümünden (invertör) geçtikten sonra 0'a döner ve gecikme hattının girişine gider. 3 saniye daha geçer... ve süreç tekrarlanır. Yani her 3 saniyede bir gecikme hattı çıkışının durumu 0'dan 1'e ve ardından 1'den 0'a değişir. Röle tık sesi çıkarır. Jeneratör çalışıyor. Darbe periyodu 6 saniyedir (çıkış sıfırında 3 saniye ve çıkış birde 3 saniye).

Ancak gerçek devrelerde genellikle bu örneği kullanmaya gerek yoktur. Belirli bir periyotta mükemmel bir şekilde ve dışarıdan yardım almadan bir dizi darbe üreten özel zamanlayıcı düğümleri vardır. Bu darbelerdeki “sıfır” ve “bir”in süresi periyodun yarısına eşittir.

Periyodik eylemleri ayarlamak için zamanlayıcı düğümlerini kullanın.

“Sıfır” ve “bir” sürelerinin eşit olduğu bu tür dijital sinyallere “kıvrımlı” denildiğini not ediyorum.

Umarım olayların düğümler arasında nasıl yayıldığı ve ne yapılmaması gerektiği sorusuna biraz açıklık getirebilmişimdir.

Sonuç ve referanslar

Makalenin kısa olduğu ortaya çıktı ancak bu makale, düğümler ve olaylarla ilgili ortaya çıkan soruların bir yanıtıdır.

Firmware geliştikçe ve yeni örnekler ortaya çıktıkça nasıl programlanacağı hakkında yazacağım ŞIoTiny insanlar için ilginç olacağı sürece küçük makaleler.

Daha önce olduğu gibi diyagram, donanım yazılımı, örnekler, bileşenlerin açıklaması ve her şey geri kalanı burada.

Sorular, öneriler, eleştiriler - buraya gidin: [e-posta korumalı]

Kaynak: habr.com

Yorum ekle