توی این مقاله قراره با OpenPLC آشنا بشیم، پروژه ساده و معروف Blink یا چشمکزن رو انجام بدیم و در نهایت روی آردوینو دانلودش کنیم.
درست دیدید، غلط املایی نیست! شما برنامهتون رو روی PLC آپلود نمیکنید، بلکه دانلود میکنید 🙂
البته این بهانهای هست که یک نگاهی هم به ساختار نرمافزاری PLCها بندازیم.
بهتون پیشنهاد میکنم اگر مقاله قبلی رو نخوندید حتماً بخونید، چون سیر تکامل PLC تا Soft PLC رو به زبان خیلی ساده و مختصر بررسی کردیم. (پروژه OpenPLC هم یک نوع Soft PLC محسوب میشه)
قبل از شروع بذارید یک سؤال مطرح کنم؛ چه چیزی از نظر نرمافزاری یک PLC رو از یک برد معمولی متمایز میکنه و باعث میشه قابل اتکا باشه؟
جواب میشه: Runtime
از نظر نرمافزاری ما میتونیم PLC رو به دو بخش ساده تقسیم کنیم:
محیط توسعه مثل STEP 7 یا TIA Portal برای زیمنس، یا همین OpenPLC Editor که توی این مقاله باهاش کار داریم. یکی از وظایفش تبدیل برنامه ما از هر زبانی (مثل Structured Text که توی این مقاله قراره ازش استفاده کنیم) به ساختاری هست که سختافزار PLC به کمک Runtime بتونه اون رو اجرا کنه.
از نظر معماری، Runtime در PLCها خیلی وقتها نقشی شبیه یک RTOS رو بازی میکنه، ولی همیشه به معنی وجود یک سیستمعامل مجزا نیست.
از این قسمت به بعد قراره برنامهنویسی رو شروع کنیم.
در قدم اول از سایت OpenPLC Editor رو متناسب با سیستمعاملتون دانلود و نصب کنید.
بعد یک پروژه جدید از نوع PLC Project بسازید و زبان Structured Text رو انتخاب کنید.
اگر همه چیز درست باشه با این صفحه مواجه میشید:

حالا بردتون رو به کامپیوتر متصل کنید و از پنل سمت چپ روی Configuration که زیرمجموعه Device هست کلیک کنید.
توی این صفحه، در بخش Board Settings روی Device کلیک کنید و برد خودتون رو انتخاب کنید (من از Arduino Uno استفاده میکنم). بعد هم در قسمت Communication Port پورتی که آردوینو بهش متصل هست رو انتخاب کنید.
حالا بریم سراغ بخش Pin Mapping.
ما قراره LED روی برد Arduino Uno رو خاموش و روشن کنیم. میدونیم این LED به پایه 13 متصل هست، پس روی + کلیک کنید و در قسمت Pin عدد 13 رو وارد کنید. Type رو روی Digital Output قرار بدید و یک اسم هم براش انتخاب کنید.
اختیاریه، ولی پیشنهاد میکنم حتماً اسم انتخاب کنید تا موقع آدرسدهی گیج نشید.
من اسمش رو گذاشتم: Pin13

حالا برگردیم به قسمت Main زیرمجموعه Programs.
توی این صفحه سه پنل اصلی داریم:
روی + در پنل بالا کلیک کنید و یک اسم دلخواه برای متغیری که وضعیت پین رو مشخص میکنه انتخاب کنید.
من نوشتم: LEDStatus
بعد Type رو روی BOOL قرار بدید و در قسمت Location پین شماره 13 که در مرحله قبل تعریف کردید رو انتخاب کنید.
مجدد روی + کلیک کنید و یک متغیر از نوع TON بسازید.
من اسمش رو گذاشتم: Timer
حالا بریم سراغ پنل وسط و کد زیر رو اونجا قرار بدید:
|
1 2 3 4 5 6 |
Timer(IN := TRUE, PT := T#1s); IF Timer.Q THEN LEDStatus := NOT LEDStatus; Timer(IN := FALSE); END_IF; |
حالا روی آیکون Download (همون پوشهای که فلش رو به پایین داره) در سمت چپ کلیک کنید.
در پنل پایین میتونید لاگهای کامپایل و دانلود رو ببینید. اگر متنی با رنگ قرمز مشاهده کردید یعنی جایی از کار مشکل داره. متن خطا رو دقیق بخونید و اصلاحش کنید.
اگر همه چیز درست باشه باید ببینید LED روی برد هر یک ثانیه یک بار خاموش و روشن میشه.

تبریک میگم، شما اولین برنامهتون رو نوشتید!
حالا که همه چیز خوب پیش رفته، بیاید یک نگاه اجمالی به کد داشته باشیم.
در خط اول تایمر رو فعال میکنیم.
زمانی که پارامتر IN برابر False باشه، تایمر آماده شروع مجدد هست. اینجا یک نکته مهم وجود داره؛ فکر نکنید هر بار که برنامه به این خط میرسه تایمر ریست میشه یا اجرای برنامه برای یک ثانیه متوقف میمونه.
تایمر ما یک Function نیست، بلکه یک Function Block هست.
طبیعتاً مقدار T#1s هم برابر یک ثانیه است.
حرف T مشخص میکنه که این مقدار از نوع Time هست و مقدار زمانی بعد از # مشخص میشه. عدد 1 یعنی یک و حرف s هم مخفف Second یا ثانیه هست.
وقتی یک ثانیه سپری بشه، تایمر متوقف میشه و مقدار Q اون برابر True میشه. همین مقدار شرط ورود به بلوک IF ماست.
LEDStatus هم متغیریه که به LED متصل شده.
با تغییر مقدارش بین True و False میتونیم LED رو روشن یا خاموش کنیم.
در نتیجه با استفاده از NOT وضعیت فعلی رو معکوس میکنیم و در خط بعد با قرار دادن False برای پارامتر IN، تایمر رو ریست میکنیم تا در Scan Cycle بعدی دوباره شروع به کار کنه.
توی این مقاله عمداً بعضی از اصطلاحات و مفاهیم رو بدون توضیح کامل آوردم؛ هم برای اینکه مقاله بیش از حد طولانی نشه و هم بهانهای باشه که خودتون در موردشون جستجو کنید یا بعداً تبدیل به یک مقاله مستقل بشن.
همین برنامه رو با زبان Ladder پیادهسازی کنید.
پروژه OpenPLC در گیتهاب (شامل Editor و Runtime)
وبسایت OpenPLC
وبسایت: http://iamamir.ir
مهندس نرمافزار ولی علاقمند به سختافزار
به نظر باید پروژه باحالی باشه ممنونم از شما
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.