ShioTiny: گره ها، پیوندها، و رویدادها یا ویژگی های برنامه های طراحی

ShioTiny: گره ها، پیوندها، و رویدادها یا ویژگی های برنامه های طراحی

نکات اصلی یا آنچه این مقاله در مورد آن است

موضوع مقاله برنامه نویسی ویژوال PLC می باشد ShioTiny برای خانه هوشمند که در اینجا توضیح داده شده است: ShioTiny: اتوماسیون کوچک، اینترنت اشیا یا "شش ماه قبل از تعطیلات".

خیلی خلاصه مفاهیمی مانند گره ها, ارتباطات, تحولاتو همچنین ویژگی های بارگذاری و اجرای برنامه بصری در ESP8266که اساس PLC است ShioTiny.

مقدمه یا چند سوال سازمانی

در مقاله قبلی در مورد توسعه من، مروری کوتاه بر قابلیت های کنترلر ارائه دادم ShioTiny.

به اندازه کافی عجیب، مردم علاقه زیادی نشان دادند و از من سؤالات زیادی پرسیدند. حتی برخی از دوستان بلافاصله پیشنهاد خرید یک کنترلر از من را دادند. نه، من مخالف کسب درآمد کم نیستم، اما وجدانم اجازه نمی دهد چیزی را بفروشم که هنوز از نظر نرم افزاری بسیار خام است.

بنابراین، من باینری های سیستم عامل و نمودار دستگاه را در GitHub پست کردم: سیستم عامل + کوتاه ترین دستورالعمل ها + نمودار + مثال ها.

حالا همه می توانند ESP-07 را فلش کنند و خودشان با فریمور بازی کنند. اگر واقعاً کسی دقیقاً همان تخته ای را که در عکس است می خواهد ، من چندین مورد از آنها را دارم. از طریق ایمیل بنویسید [ایمیل محافظت شده]. اما همانطور که اوگورتسف فراموش نشدنی می گفت: "من مسئول هیچ چیز نیستم!"

بنابراین، بیایید به این موضوع بپردازیم: "چیست"گره"(گره) و"رویداد"؟ برنامه چگونه اجرا می شود؟

طبق معمول به ترتیب شروع می کنیم: با دانلود برنامه.

نحوه بارگذاری برنامه

بیایید با آنچه که با فشار دادن یک دکمه اتفاق می افتد شروع کنیم بارگذاری در ویرایشگر الدراو و برنامه مدار ما، متشکل از مربع های زیبا، به داخل دستگاه پرواز می کند.

ابتدا بر اساس نموداری که ترسیم کردیم، توضیحات آن به صورت متنی ساخته شده است.
در مرحله دوم، بررسی می کند که آیا تمام ورودی های گره به خروجی ها متصل هستند یا خیر. هیچ ورودی "آویزان" نباید وجود داشته باشد. اگر چنین ورودی شناسایی شود، مدار در ShioTiny بارگذاری نمی شود و ویرایشگر یک هشدار مربوطه را نمایش می دهد.

اگر همه چیز به خوبی پیش رفت، ویرایشگر یک توضیح متنی از مدار یک نود را برای ShioTiny ارسال می کند. البته ابتدا مدار موجود از ShioTiny حذف می شود. توضیحات متن به دست آمده در حافظه FLASH ذخیره می شود.

به هر حال، اگر می خواهید مداری را از یک دستگاه حذف کنید، به سادگی یک مدار خالی را در آن بارگذاری کنید (بدون یک عنصر گره).

هنگامی که کل برنامه مدار در ShioTiny PLC بارگذاری می شود، شروع به "اجرا" می کند. چه مفهومی داره؟

توجه داشته باشید که فرآیندهای بارگیری مدار از حافظه FLASH هنگام روشن شدن برق و هنگام دریافت مدار از ویرایشگر یکسان است.

ابتدا اشیاء گره بر اساس توضیحات آنها ایجاد می شوند.
سپس اتصالات بین گره ها ایجاد می شود. یعنی پیوندهای خروجی ها به ورودی ها و ورودی ها به خروجی ها ایجاد می شود.

و تنها پس از همه اینها چرخه اجرای برنامه اصلی شروع می شود.

من برای مدت طولانی نوشتم، اما کل فرآیند - از "بارگیری" مدار از حافظه FLASH تا شروع چرخه اصلی - برای مدار 60-80 گره کسری از ثانیه طول می کشد.

حلقه اصلی چگونه کار می کند؟ بسیار ساده. ابتدا منتظر ظهور است تحولات در برخی از گره ها، سپس آن رویداد را پردازش می کند. و به همین ترتیب بی پایان. خوب، یا تا زمانی که یک طرح جدید را در ShioTiny آپلود کنند.

قبلاً چندین بار به مواردی از این قبیل اشاره کرده ام تحولات, گره ها и ارتباطات. اما این از نظر نرم افزاری چیست؟ ما امروز در مورد این صحبت خواهیم کرد.

گره ها، اتصالات و رویدادها

فقط به نمونه برنامه های مدار برای نگاه کنید ShioTinyبرای درک اینکه نمودار فقط از دو موجودیت - گره ها (یا عناصر) و ارتباطات بین آنها تشکیل شده است.

گره, اما بله یا عنصر مدار نمایش مجازی برخی است فعالیت بیش از داده ها این می تواند یک عملیات حسابی، یک عملیات منطقی یا هر عملیاتی باشد که به ذهن ما می رسد. نکته اصلی این است که گره یک ورودی و یک خروجی دارد.

ورود - این جایی است که گره داده ها را دریافت می کند. تصاویر ورودی نقاطی هستند که همیشه در سمت چپ گره قرار دارند.

تولید - این مکانی است که نتیجه عملیات گره در آن بازیابی می شود. تصاویر خروجی نقاطی هستند که همیشه در سمت راست گره قرار دارند.

برخی از گره ها ورودی ندارند. چنین گره هایی نتیجه را در داخل ایجاد می کنند. به عنوان مثال، یک گره ثابت یا یک گره حسگر: آنها برای گزارش نتیجه به داده های سایر گره ها نیاز ندارند.

گره های دیگر، برعکس، خروجی ندارند. اینها گره هایی هستند که مثلاً محرک ها (رله ها یا موارد مشابه) را نمایش می دهند. آنها داده ها را می پذیرند اما نتیجه محاسباتی که در دسترس سایر گره ها باشد تولید نمی کنند.

علاوه بر این، یک گره نظر منحصر به فرد نیز وجود دارد. هیچ کاری نمی کند، ورودی و خروجی ندارد. هدف آن توضیحی بر روی نمودار است.

چی "رویداد» رویداد ظهور داده های جدید در هر گره است. به عنوان مثال، رویدادها عبارتند از: تغییر در وضعیت ورودی (گره ورودی، دریافت داده ها از دستگاه دیگر (گره ها MQTT и UDP، انقضای یک دوره زمانی مشخص (گره ها زمان سنج и تاخیر انداختن) و غیره.

رویدادها برای چیست؟ بله، برای اینکه مشخص شود داده های جدید در کدام گره به وجود آمده است و وضعیت کدام گره ها باید در ارتباط با دریافت داده های جدید تغییر کند. این رویداد، همانطور که بود، در امتداد زنجیره گره ها "گذر" می کند تا زمانی که تمام گره هایی را که وضعیت آنها باید بررسی و تغییر شود را دور بزند.

تمام گره ها را می توان به دو دسته تقسیم کرد.
بیایید گره هایی را فراخوانی کنیم که می توانند رویدادها را ایجاد کنند.گره های فعال'.
گره هایی را که نمی توانند رویدادها را ایجاد کنند، فراخوانی می کنیم.گره های غیرفعال'.

هنگامی که یک گره یک رویداد تولید می کند (یعنی داده های جدید در خروجی آن ظاهر می شود)، در حالت کلی وضعیت کل زنجیره گره های متصل به خروجی گره مولد رویداد تغییر می کند.

برای روشن شدن موضوع، مثال شکل را در نظر بگیرید.

ShioTiny: گره ها، پیوندها، و رویدادها یا ویژگی های برنامه های طراحی

گره های فعال در اینجا Input1، Input2 و Input3 هستند. گره های باقی مانده منفعل هستند. بیایید در نظر بگیریم که وقتی یک ورودی بسته می شود چه اتفاقی می افتد. برای راحتی، نتایج در یک جدول خلاصه شده است.

ShioTiny: گره ها، پیوندها، و رویدادها یا ویژگی های برنامه های طراحی

همانطور که می بینید، هنگامی که یک رویداد رخ می دهد، یک زنجیره از گره منبع رویداد تا گره انتهایی ساخته می شود. وضعیت گره هایی که در زنجیره قرار نمی گیرند تغییر نمی کند.

یک سوال مشروع مطرح می شود: اگر دو یا حتی چند رویداد به طور همزمان رخ دهند چه اتفاقی خواهد افتاد؟

به عنوان یک عاشق کار گلب آنفیلوف، وسوسه می شوم که یک پرسشگر کنجکاو را به کتاب او "فرار از غافلگیری" بفرستم. این یک «نظریه نسبیت برای بچه‌های کوچک» است که به خوبی توضیح می‌دهد که «هم‌زمان» به چه معناست و چگونه می‌توان با آن زندگی کرد.

اما عملاً همه چیز بسیار ساده‌تر است: وقتی دو یا حتی چندین رویداد رخ می‌دهد، تمام زنجیره‌های هر منبع رویداد به‌طور متوالی ساخته و پردازش می‌شوند و هیچ معجزه‌ای رخ نمی‌دهد.

سوال کاملاً قانونی بعدی از یک خواننده کنجکاو این است که اگر گره ها به یک حلقه متصل شوند چه اتفاقی می افتد؟ یا به قول خودشان بین این پسران باهوش شما بازخورد معرفی کنید. یعنی خروجی یکی از گره ها را به ورودی گره قبلی وصل کنید تا وضعیت خروجی این گره روی وضعیت ورودی آن تاثیر بگذارد. ویرایشگر به شما اجازه نمی دهد که خروجی یک گره را مستقیماً به ورودی آن متصل کنید. الدراو. اما به طور غیرمستقیم مانند شکل زیر می توان این کار را انجام داد.

پس در این صورت چه اتفاقی خواهد افتاد؟ پاسخ بسیار "قطعی" خواهد بود: بسته به اینکه کدام گره ها. بیایید به مثال در شکل نگاه کنیم.

ShioTiny: گره ها، پیوندها، و رویدادها یا ویژگی های برنامه های طراحی

وقتی کنتاکت های ورودی Input1 باز هستند، ورودی بالایی گره A 0 است. خروجی گره A نیز 0 است. خروجی گره B 1 است. و در نهایت، ورودی پایینی گره A 1 است. روشن و برای کسانی که واضح نیستند، در زیر برای توضیح نحوه کار گره های "AND" و "NOT" نگاه کنید.

اکنون کنتاکت های ورودی 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 ثانیه در شکل زیر چگونه کار می کند.

ShioTiny: گره ها، پیوندها، و رویدادها یا ویژگی های برنامه های طراحی

عنصر کلیدی ژنراتور گره 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 ثانیه در خروجی یک).

اما در مدارهای واقعی معمولاً نیازی به استفاده از این مثال نیست. گره های تایمر خاصی وجود دارند که به طور کامل و بدون کمک خارجی، دنباله ای از پالس ها را با یک دوره معین تولید می کنند. مدت زمان "صفر" و "یک" در این پالس ها برابر با نیم دوره است.

برای تنظیم اقدامات دوره ای، از گره های تایمر استفاده کنید.

متذکر می شوم که چنین سیگنال های دیجیتالی که مدت زمان "صفر" و "یک" برابر است، "میاندر" نامیده می شوند.

امیدوارم این سوال را کمی روشن کرده باشم که رویدادها چگونه بین گره ها منتشر می شوند و چه کارهایی را نباید انجام داد؟

نتیجه گیری و مراجع

این مقاله کوتاه بود، اما این مقاله پاسخی است به سؤالاتی که در مورد گره ها و رویدادها ایجاد شده است.

همانطور که سیستم عامل توسعه می یابد و نمونه های جدیدی ظاهر می شوند، در مورد نحوه برنامه نویسی خواهم نوشت ShioTiny مقالات کوچک تا زمانی که برای مردم جالب باشد.

مانند قبل، نمودار، سیستم عامل، مثال ها، توضیحات اجزا و همه چیز بقیه اینجاست.

سوالات، پیشنهادات، انتقادات - اینجا بروید: [ایمیل محافظت شده]

منبع: www.habr.com

اضافه کردن نظر