تبدیل Arduino به PLC با OpenPLC

تبدیل Arduino به PLC
17 بازدید
۱۴۰۵-۰۳-۲۷
4 دقیقه
  • نویسنده: امیر مطهری
  • درباره نویسنده: مهندس نرم‌افزار ولی علاقمند به سخت‌افزار

توی این مقاله قراره با OpenPLC آشنا بشیم، پروژه ساده و معروف Blink یا چشمک‌زن رو انجام بدیم و در نهایت روی آردوینو دانلودش کنیم.
درست دیدید، غلط املایی نیست! شما برنامه‌تون رو روی PLC آپلود نمی‌کنید، بلکه دانلود می‌کنید 🙂
البته این بهانه‌ای هست که یک نگاهی هم به ساختار نرم‌افزاری PLCها بندازیم.

بهتون پیشنهاد می‌کنم اگر مقاله قبلی رو نخوندید حتماً بخونید، چون سیر تکامل PLC تا Soft PLC رو به زبان خیلی ساده و مختصر بررسی کردیم. (پروژه OpenPLC هم یک نوع Soft PLC محسوب میشه)

قبل از شروع بذارید یک سؤال مطرح کنم؛ چه چیزی از نظر نرم‌افزاری یک PLC رو از یک برد معمولی متمایز می‌کنه و باعث میشه قابل اتکا باشه؟
جواب میشه: Runtime

از نظر نرم‌افزاری ما می‌تونیم PLC رو به دو بخش ساده تقسیم کنیم:

  • محیط توسعه (IDE / Editor)
  • محیط اجرا (Runtime)

محیط توسعه مثل STEP 7 یا TIA Portal برای زیمنس، یا همین OpenPLC Editor که توی این مقاله باهاش کار داریم. یکی از وظایفش تبدیل برنامه ما از هر زبانی (مثل Structured Text که توی این مقاله قراره ازش استفاده کنیم) به ساختاری هست که سخت‌افزار PLC به کمک Runtime بتونه اون رو اجرا کنه.

وظایف کلی Runtime در PLC:

  • اجرای چرخه اسکن (Scan Cycle Management)
  • زمان‌بندی و مدیریت Taskها (Task Scheduling)
  • اجرای Programها و Function Blockها
  • مدیریت ورودی‌ها و خروجی‌ها (I/O Management)
  • مدیریت متغیرها و داده‌های برنامه
  • مدیریت ارتباطات صنعتی و پروتکل‌ها
  • مدیریت خطاها و شرایط استثنا
  • مانیتورینگ و عیب‌یابی سیستم
  • تضمین اجرای Real-Time و رفتار Deterministic

از نظر معماری، Runtime در PLCها خیلی وقت‌ها نقشی شبیه یک RTOS رو بازی می‌کنه، ولی همیشه به معنی وجود یک سیستم‌عامل مجزا نیست.

از این قسمت به بعد قراره برنامه‌نویسی رو شروع کنیم.
در قدم اول از سایت OpenPLC Editor رو متناسب با سیستم‌عاملتون دانلود و نصب کنید.
بعد یک پروژه جدید از نوع PLC Project بسازید و زبان Structured Text رو انتخاب کنید.
اگر همه چیز درست باشه با این صفحه مواجه می‌شید:

OpenPLC Editor

حالا بردتون رو به کامپیوتر متصل کنید و از پنل سمت چپ روی Configuration که زیرمجموعه Device هست کلیک کنید.
توی این صفحه، در بخش Board Settings روی Device کلیک کنید و برد خودتون رو انتخاب کنید (من از Arduino Uno استفاده می‌کنم). بعد هم در قسمت Communication Port پورتی که آردوینو بهش متصل هست رو انتخاب کنید.

حالا بریم سراغ بخش Pin Mapping.

ما قراره LED روی برد Arduino Uno رو خاموش و روشن کنیم. می‌دونیم این LED به پایه 13 متصل هست، پس روی + کلیک کنید و در قسمت Pin عدد 13 رو وارد کنید. Type رو روی Digital Output قرار بدید و یک اسم هم براش انتخاب کنید.
اختیاریه، ولی پیشنهاد می‌کنم حتماً اسم انتخاب کنید تا موقع آدرس‌دهی گیج نشید.

من اسمش رو گذاشتم: Pin13

OpenPLC Editor

حالا برگردیم به قسمت Main زیرمجموعه Programs.
توی این صفحه سه پنل اصلی داریم:

  • پنل بالا برای تعریف متغیرها
  • پنل وسط برای نوشتن کد
  • پنل پایین برای نمایش لاگ‌ها

روی + در پنل بالا کلیک کنید و یک اسم دلخواه برای متغیری که وضعیت پین رو مشخص می‌کنه انتخاب کنید.

من نوشتم: LEDStatus

بعد Type رو روی BOOL قرار بدید و در قسمت Location پین شماره 13 که در مرحله قبل تعریف کردید رو انتخاب کنید.
مجدد روی + کلیک کنید و یک متغیر از نوع TON بسازید.

من اسمش رو گذاشتم: Timer

حالا بریم سراغ پنل وسط و کد زیر رو اونجا قرار بدید:

حالا روی آیکون Download (همون پوشه‌ای که فلش رو به پایین داره) در سمت چپ کلیک کنید.
در پنل پایین می‌تونید لاگ‌های کامپایل و دانلود رو ببینید. اگر متنی با رنگ قرمز مشاهده کردید یعنی جایی از کار مشکل داره. متن خطا رو دقیق بخونید و اصلاحش کنید.
اگر همه چیز درست باشه باید ببینید LED روی برد هر یک ثانیه یک بار خاموش و روشن میشه.

✅یک نکته

اگر اولین باره که روی این برد برنامه دانلود می‌کنید، ممکنه چند دقیقه طول بکشه، چون OpenPLC نیاز داره یک‌سری پیش‌نیاز رو از اینترنت دریافت کنه.
بعد از اون، برنامه‌ها معمولاً ظرف چند ثانیه کامپایل و دانلود میشن.

OpenPLC Editor

تبریک میگم، شما اولین برنامه‌تون رو نوشتید!

حالا که همه چیز خوب پیش رفته، بیاید یک نگاه اجمالی به کد داشته باشیم.
در خط اول تایمر رو فعال می‌کنیم.
زمانی که پارامتر 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 بعدی دوباره شروع به کار کنه.

شاید برای شما مفید باشد:
آموزش فیلترینگ سیگنال در پایتون | طراحی فیلتر ایده‌آل در حوزه فرکانس (FFT)

توی این مقاله عمداً بعضی از اصطلاحات و مفاهیم رو بدون توضیح کامل آوردم؛ هم برای اینکه مقاله بیش از حد طولانی نشه و هم بهانه‌ای باشه که خودتون در موردشون جستجو کنید یا بعداً تبدیل به یک مقاله مستقل بشن.

تمرین در منزل

همین برنامه رو با زبان Ladder پیاده‌سازی کنید.

پروژه OpenPLC در گیت‌هاب (شامل Editor و Runtime)

وب‌سایت OpenPLC

اطلاعات
17
1
0
اشتراک و حمایت
profile نویسنده: امیر مطهری متخصص الکترونیک

وبسایت: http://iamamir.ir

مهندس نرم‌افزار ولی علاقمند به سخت‌افزار


مقالات بیشتر

slide

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند. فروش در پالت
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. جستجو در آیسی
family

سیسوگ‌شاپ | فروشگاه محصولات Quectel

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند. پرسش در سیسوگ فرم
family

سیکار | اولین مرجع متن باز ECU در ایران

بررسی و ارائه اطلاعات مربوط به ECU (واحد کنترل الکترونیکی) و نرم‌افزارهای متن باز مرتبط با آن برو به سیکار
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله

خانواده سیسوگ

سیسوگ‌شاپ

فروشگاه محصولات Quectel

پالت
سیسوگ فروم

محلی برای پاسخ پرسش‌های شما

سیسوگ جابز
سیسوگ
سیسوگ فروم
سی‌کار

اولین مرجع متن باز ECU در ایران

سیسوگ مگ
آی‌سی

موتور جستجوی قطعات الکترونیکی

سیسوگ آکادمی
پالت

بازار خرید و فروش قطعات الکترونیک

دیدگاه ها

profile
محسن گفت :
۱۴۰۵-۰۳-۲۷ ۱۳:۳۱

به نظر باید پروژه باحالی باشه ممنونم از شما

become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله