معرفی

PLCهای زیمنس در قلب اتوماسیون صنعتی مدرن قرار دارند و قابل اعتماد و انعطاف‌پذیر هستند. یکی از ارکان مهم در برنامه‌نویسی زیمنس استفاده از بلوک‌های سازمانی (OBs) است. این بلوک‌ها ستون فقرات ساختار عملکردی PLC هستند و ارتباط روان بین سیستم‌عامل و برنامه کاربر را ممکن می‌سازند.

انواع اصلی OBها

وقفه ها به صورت كلي به چند دسته زير تقسيم ميشوند:

1. OB1 – بلوک اصلی چرخه‌ای

  • نقش و اهمیت: اجرای مداوم برنامه برای عملکرد پیوسته PLC.
  • ایجاد و استفاده: در TIA Portal به‌طور خودکار ایجاد می‌شود. می‌توان کل برنامه را داخل آن نوشت یا از FC/FBها فراخوانی کرد.
  • مثال‌ها: بررسی سنسورها، کنترل عملگرها، اجرای حلقه‌های کنترلی.

2. OBهای وقفه زمانی (Time Interrupt OBs)

  • بررسی کلی: مانند OB10 تا OB17، برای اجرای وظایف در بازه‌های منظم (مثلاً هر دقیقه یا ساعت).
  • کاربردها: ثبت داده‌ها، به‌روزرسانی نمایشگرها، چکاپ‌های دوره‌ای.
  • پیکربندی: در TIA Portal می‌توان فواصل زمانی دلخواه را تعریف کرد.

3. OBهای رویدادمحور (Event-Driven OBs)

  • کارکرد: مانند OB40 تا OB47، در پاسخ به رویدادهایی مثل خطاهای سخت‌افزاری، تغییر ورودی‌ها یا شرایط خاص برنامه.
  • کاربرد عملی: پاسخ به توقف اضطراری، تشخیص خطا، مدیریت رویدادهای سفارشی.
  • پیاده‌سازی: تعریف شرایط اجرای آن‌ها و ادغام با برنامه اصلی.

4. OB100 – بلوک راه‌اندازی (Start-Up OB)

  • نقش: فقط یک‌بار، هنگام تغییر وضعیت PLC از STOP به RUN اجرا می‌شود.
  • وظایف: مقداردهی اولیه به متغیرها، بررسی هشدارها، اطمینان از ایمنی سیستم.
  • مثال: راه‌اندازی سیستم‌های ایمنی یا انجام تشخیص‌های اولیه پیش از اجرای برنامه اصلی.

5. OB30 – وقفه چرخه‌ای دقیق (Cyclic Interrupt OB)

  • نقش: اجرای دقیق وظایف در فواصل مشخص، با قطع برنامه اصلی.
  • کاربردها: کنترل PID، بررسی شرایط ایمنی، مدیریت ارتباطات.
  • مراحل پیکربندی:
    • زمان چرخه (Cycle Time): مثلاً هر 10 میلی‌ثانیه.
    • تأخیر فاز (Phase Offset): جلوگیری از تداخل بین OBها.
    • اولویت (Priority): هرچه بالاتر، اولویت اجرا بیشتر.
  • اجتناب از هم‌پوشانی: اگر OB30 هر 10ms و OB دیگر هر 5ms اجرا شود، ممکن است هم‌پوشانی رخ دهد. استفاده از Offset راهکار است.

در ادامه به بررسي و عملكرد وقفه ها مي پردازيم.

OB1


OB1 (Organization Block 1) اصلی‌ترین و مهم‌ترین بلوک برنامه‌نویسی در PLCهای زیمنس است. وقتی PLC در حالت RUN قرار می‌گیرد، سیستم‌عامل به‌صورت مداوم (چرخه‌ای) این OB را اجرا می‌کند.

وظیفه OB1

  • اجرای مداوم منطق برنامه‌ی کاربر (user program)
  • اجرای تمام Function Blockها (FBها) و Functionها (FCها) که در آن فراخوانی شده‌اند
  • اجرای دستورات کنترلی مثل خواندن ورودی‌ها، محاسبات منطقی، نوشتن روی خروجی‌ها و غیره

PLC بعد از رسیدن به انتهای OB1، فوراً دوباره از ابتدا شروع به اجرای آن می‌کند. به این چرخه، Scan Cycle می‌گویند.

یک چرخه شامل مراحل زیر است:

  1. خواندن وضعیت ورودی‌ها
  2. اجرای برنامه داخل OB1
  3. نوشتن روی خروجی‌ها
  4. به‌روزرسانی تایمرها، شمارنده‌ها، و پردازش وقفه‌ها


STARTUP


STARTUP یک بلوک سازمانی راه‌اندازی (OB100) در PLC زیمنس است که فقط یک‌بار اجرا می‌شود، آن هم وقتی PLC از حالت STOP به RUN تغییر وضعیت می‌دهد. از OB100 برای انجام کارهایی استفاده می‌شود که فقط باید در زمان راه‌اندازی اولیه سیستم اجرا شوند؛ نه در هر چرخه برنامه.

موارد استفاده:

  • مقداردهی اولیه متغیرها (Initialization)
  • بررسی وضعیت ایمنی سیستم
  • ریست کردن شمارنده‌ها، تایمرها یا فلگ‌ها
  • انجام تست‌های اولیه سخت‌افزار (Self-Test)
  • آماده‌سازی سیستم برای اجرای پایدار در OB1

نکات مهم:

  • OB100 فقط یک بار و در ابتدای روشن شدن یا اجرای PLC اجرا می‌شود.
  • اگر OB100 در پروژه وجود نداشته باشد، PLC بدون آن هم به درستی وارد چرخه اصلی می‌شود، اما استفاده از آن باعث می‌شود شروع به کار سیستم ایمن‌تر و قابل کنترل‌تر باشد.


 Time Delay Interrupt


بلوک‌های وقفه زمانی در PLC زیمنس با نام OB10 تا OB17 شناخته می‌شوند. این OBها امکان اجرای یک قطعه کد را در بازه‌های زمانی مشخص و دوره‌ای (مثلاً هر 10 میلی‌ثانیه یا هر 1 ثانیه) فراهم می‌سازند.

OBهای وقفه زمانی برای اجرای وظایفی طراحی شده‌اند که باید در بازه‌های زمانی ثابت، بدون وقفه و مستقل از چرخه OB1 اجرا شوند. برخی کاربردهای رایج عبارت‌اند از:

  • ثبت و ذخیره‌سازی داده‌ها به‌صورت دوره‌ای (Data Logging)
  • کنترل فرآیندهایی که نیاز به زمان‌بندی دقیق دارند (مانند PID)
  • ارسال پالس‌های کنترل‌شده برای تجهیزات خاص
  • به‌روزرسانی صفحه‌نمایش‌ها یا مقادیر HMI در فواصل زمانی مشخص

نکات مهم:

  • مدت زمان اجرای کد داخل OB نباید از بازه زمانی تعیین‌شده بیشتر شود. در غیر این صورت، سیستم ممکن است با خطا مواجه شود.
  • هنگام استفاده هم‌زمان از چند OB وقفه زمانی (مثلاً OB10 و OB11)، باید از (Phase Offset) استفاده شود تا تداخل زمانی بین آنها رخ ندهد.
  • این نوع OBها در CPUهای سری S7-1500 با دقت بالا پشتیبانی می‌شوند و برای کنترل فرآیندهای حساس زمانی توصیه می‌شوند.


Cyclic Interrupt


Cyclic Interrupt OBs (مانند OB30 تا OB38) بلوک‌هایی هستند که در بازه‌های زمانی مشخص و به‌صورت وقفه‌ای اجرا می‌شوند، یعنی اجرای آن‌ها حتی می‌تواند برنامه اصلی را (مثلاً OB1) متوقف کرده و کد داخل خود را در اولویت اجرا کنند.

موارد استفاده:

  • اجرای کنترلر PID با دقت بالا
  • پایش ایمنی در فواصل زمانی دقیق (Safety Scan)
  • ارسال و دریافت داده‌های سنسورها به‌صورت منظم
  • کنترل فرآیندهایی که باید در دوره‌های بسیار کوتاه اجرا شوند (مثلاً هر 5 یا 10 میلی‌ثانیه)

نکات مهم:

  • مدت زمان اجرای کد داخل OB30 نباید از Interval تعیین‌شده بیشتر شود، در غیر این صورت، اجرای وقفه بعدی ممکن است از دست برود یا خطا ایجاد شود.
  • استفاده هم‌زمان از چند OB چرخه‌ای (مثلاً OB30 و OB31) نیازمند مدیریت دقیق زمان‌بندی و اولویت‌هاست.
  • اگر نیاز دارید چند OB چرخه‌ای با دقت بالا اجرا شوند، حتماً از Phase Offset برای جلوگیری از هم‌پوشانی استفاده کنید.
  • اولویت (Priority) پایین‌تر به معنای احتمال بالاتر نادیده‌گرفته‌شدن توسط OB با اولویت بالاتر است.

تفاوت Cycle Interrupt با Time Delay Interrupt 

  • اگر نیاز دارید عملیاتی در زمان مشخص واقعی (مثلاً هر ساعت یک بار یا دقیقاً ساعت ۱۲) اجرا شود، از Time Delay OB استفاده کنید.
  • اگر نیاز به اجرای پیوسته و با دقت بالا در بازه‌های ثابت دارید (مثلاً هر 10ms یا هر 100ms)، از Cyclic Interrupt OB استفاده کنید.
  • Time Delay معمولاً برای وظایف غیرفوری مناسب است، در حالی که Cyclic Interrupt برای وظایف بسیار حساس و ضروری در سیستم استفاده می‌شود.

در یک خط تولید:

  • از OB10 (Time Delay Interrupt) برای ذخیره‌سازی دمای محیط هر 30 ثانیه استفاده می‌شود.
  • از OB30 (Cycle Interrupt) برای بررسی وضعیت عملکرد یک شیر کنترلی در هر 10 میلی‌ثانیه استفاده می‌شود تا تأخیر در باز و بسته شدن آن رخ ندهد.


Hardware Interrupt


Hardware Interrupt یا وقفه سخت‌افزاری، نوعی سازمان‌دهی اجرای برنامه در PLC است که در واکنش به یک رویداد فیزیکی خاص (مانند تغییر در وضعیت ورودی دیجیتال یا آنالوگ، یا وقوع یک خطا در سخت‌افزار) فعال می‌شود. این رویداد توسط سخت‌افزار سیستم شناسایی می‌شود و باعث اجرای فوری یک OB خاص می‌گردد.

در سری S7-1500 و S7-1200 از زیمنس، وقفه‌های سخت‌افزاری معمولاً در بازه‌ی زیر قرار دارند:

هرکدام از این OBها برای نوع خاصی از وقفه سخت‌افزاری تعریف شده‌اند. برای مثال:

OB40
Digital Input Interrupt
OB41
Counter Interrupt
OB42
Diagnostic Interrupt
OB43
Time Error Interrupt
OB44
Communication Error Interrupt
OB45
Analog Input Interrupt
OB46
Analog Output Interrupt
OB47
Rack/Module Failure Interrupt


فرآیند اجرای Hardware Interrupt

  1. رویداد سخت‌افزاری در سیستم اتفاق می‌افتد (مثلاً یک سیگنال ورودی به وضعیت "1" تغییر می‌کند).
  2. CPU رویداد را شناسایی می‌کند.
  3. اجرای برنامه جاری (مثلاً OB1) موقتاً متوقف می‌شود.
  4. بلوک مربوط به وقفه (مثلاً OB40) اجرا می‌شود.
  5. پس از پایان اجرای OB وقفه، برنامه اصلی ادامه پیدا می‌کند.

نکات مهم:

  • سرعت اجرا: OBهای وقفه سخت‌افزاری با اولویت بالا اجرا می‌شوند، بنابراین باید کدهای داخل آن سبک و سریع باشند.
  • عدم استفاده از توابع سنگین: از توابعی که زمان زیادی نیاز دارند (مانند PID، ارتباط با HMI یا دیتابیس) در این OBها اجتناب کنید.
  • ثبت لاگ: در بسیاری از پروژه‌ها، هنگام بروز وقفه، باید وقایع در یک Data Block ثبت شوند (مثل زمان وقوع، آدرس ورودی، وضعیت سیستم).
  • محدودیت در تعداد وقفه‌ها: به دلیل منابع محدود CPU، تعداد وقفه‌های هم‌زمان فعال‌شده نباید بیش از حد شود.
  • رفع تداخل: اگر چندین وقفه هم‌زمان رخ دهد، اولویت‌ها باید به‌درستی تنظیم شوند تا وقفه‌های حیاتی اول اجرا شوند.


 Time Error Interrupt


در سیستم‌های PLC، بلوک‌های برنامه‌نویسی مانند OB1، OB30، یا OB40 باید در یک زمان مشخص اجرا و به پایان برسند. اگر اجرای یک OB بیشتر از زمان مجاز آن طول بکشد، این امر می‌تواند عملکرد کل سیستم را مختل کرده یا باعث ایجاد شرایط ناایمن شود. برای جلوگیری از این مشکل، زیمنس بلوک وقفه‌ای به نام OB80 را برای مدیریت خطاهای زمانی (Time Errors) در نظر گرفته است.

OB80 یک Organization Block ویژه برای رسیدگی به خطاهای زمانی در اجرای برنامه است. هر زمان که یک Time Delay Error در یکی از OBهای چرخه‌ای یا وقفه‌ای رخ دهد (یعنی اجرای آن OB بیشتر از زمان مجاز طول بکشد)، CPU اجرای آن OB را متوقف کرده و وارد OB80 می‌شود.

چه زمانی OB80 فراخوانی می‌شود؟

  1. زمان اجرای طولانی‌تر از حد مجاز (Cycle Time Exceeded):
    اگر اجرای OB1، OB30 یا سایر OBهای وقفه‌ای از زمان تعیین‌شده در تنظیمات CPU بیشتر شود.
  2. تأخیر در اجرای وقفه‌های دوره‌ای (Interrupt Delay):
    اگر یک OB وقفه‌ای مانند OB30 به موقع اجرا نشود.
  3. تداخل اجرای OBها:
    اگر دو OB هم‌زمان بخواهند اجرا شوند و CPU قادر به مدیریت آن‌ها نباشد.
  4. Timeout در عملیات ارتباطی یا سیستمی

موارد استفاده:

  • جلوگیری از توقف کامل CPU:
    اگر OB80 در پروژه وجود نداشته باشد، بروز خطای زمانی منجر به رفتن CPU به حالت STOP می‌شود.
    اما اگر OB80 نوشته شده باشد، CPU با ورود به این بلوک، به‌طور کنترل‌شده به خطا واکنش نشان داده و می‌تواند به اجرای برنامه ادامه دهد.
  • ثبت و مدیریت خطا:
    OB80 می‌تواند با ثبت فلگ‌ها، ارسال پیام به HMI یا لاگ‌گیری در حافظه، کاربر را از بروز خطا آگاه کند.

مثال: فرض کنید یک خط تولید دارید که یک بلوک وقفه‌ای (مثلاً OB30) برای اجرای حلقه PID در هر 10ms استفاده می‌شود. اگر فرآیند کنترلی در OB30 به‌طور ناگهانی دچار تأخیر شود (مثلاً به دلیل بار پردازشی زیاد یا خطای ارتباطی)، مدت اجرای آن بیشتر از 10ms خواهد شد. این شرایط باعث خطای زمانی می‌شود.

اگر OB80 در برنامه تعریف شده باشد، PLC به جای رفتن به حالت STOP، وارد OB80 شده و اقدامات ایمنی مثل خاموش کردن سیستم، هشدار دادن، و ثبت خطا را انجام می‌دهد.

نکات مهم:

  1. وجود OB80 الزامی نیست، ولی توصیه می‌شود:
    اگر این بلوک تعریف نشده باشد، هر Time Error باعث STOP شدن CPU می‌شود.
  2. استفاده از ساختار OB80_MDL:
    این ساختار اطلاعاتی مانند شماره OB مقصر، زمان وقوع خطا و نوع خطا را در اختیار قرار می‌دهد.
  3. زمان چرخه CPU را بررسی کنید:
    در بخش تنظیمات CPU می‌توانید Cycle Time Maximum و Watchdog Time را پیکربندی کنید تا از بروز خطاهای زمانی جلوگیری شود.
  4. زمان اجرای بلوک‌های سنگین را کاهش دهید:
    منطق‌های سنگین یا حلقه‌های تکرار زیاد را به چند بخش تقسیم کنید یا در OBهایی با فرکانس پایین‌تر اجرا کنید.


Diagnostic Error Interrupt


OB82 یک بلوک سازمان‌دهی (Organization Block) ویژه برای رسیدگی به خطاهای تشخیصی سخت‌افزار در سیستم PLC است. این بلوک زمانی اجرا می‌شود که یک ماژول ورودی/خروجی (I/O)، منبع تغذیه، یا ماژول ارتباطی دچار مشکلی شود که توسط سیستم قابل شناسایی است.

چه خطاهایی باعث اجرای OB82 می‌شوند؟

  • قطع ارتباط با ماژول I/O
  • خرابی یا جدا شدن یک کارت از رک
  • خطای منبع تغذیه (مثلاً افت ولتاژ)
  • آدرس‌دهی نادرست به ماژول
  • خطای دمایی ماژول
  • قطعی در کابل پروفی‌نت یا پروفی‌باس

فرآیند اجرای OB82

  1. یک خطای تشخیصی در ماژول یا دستگاه زیرمجموعه رخ می‌دهد.
  2. CPU خطا را تشخیص داده و اجرای OB جاری (مثل OB1) را متوقف می‌کند.
  3. OB82 فراخوانی می‌شود.
  4. اطلاعات مربوط به خطا در ساختار OB82_MDL قرار می‌گیرد.
  5. برنامه‌نویس می‌تواند در OB82 به خطا واکنش نشان دهد (مثلاً خاموش کردن سیستم، ثبت لاگ، فعال‌سازی آلارم).
  6. پس از پایان OB82، برنامه اصلی ادامه پیدا می‌کند.

ساختار اطلاعاتی OB82_MDL

هنگام اجرای OB82، CPU اطلاعات خطای رخ‌داده را در ساختاری به نام OB82_MDL ذخیره می‌کند. این ساختار شامل داده‌های زیر است:

نام
توضيحات
ModuleType
نوع ماژول (مثلاً دیجیتال، آنالوگ، ارتباطی و...)
SlotNumber
شماره اسلات ماژولی که خطا داده
SubslotNumber
شماره ساب‌اسلات (در سیستم‌های Profinet)
EventID
شناسه‌ی نوع رویداد تشخیصی
DiagStatus
وضعیت تشخیصی ماژول
TimeStamp
زمان دقیق بروز خطا

مزایای استفاده از OB82

  • افزایش قابلیت اطمینان سیستم:
    واکنش فوری به خطاهای سخت‌افزاری بدون توقف کامل CPU
  • مستندسازی دقیق خطاها:
    ثبت دقیق اطلاعات خطا برای عیب‌یابی و تحلیل
  • افزایش ایمنی:
    قطع سریع تجهیزات در زمان بروز خطاهای سخت‌افزاری خطرناک
  • یکپارچگی با سیستم HMI/SCADA:
    ارسال خطا به اپراتور جهت نمایش یا ثبت در دیتابیس

مثال: در یک ماشین بسته‌بندی، ورودی سنسورهای وضعیت در یک ماژول ET200SP قرار دارند. اگر ماژول قطع شود یا ارتباط پروفی‌نت دچار خطا شود، سیستم باید بلافاصله خط تولید را متوقف کند و اپراتور را آگاه سازد.

نکات مهم:

  • وجود OB82 در پروژه باعث جلوگیری از STOP شدن CPU می‌شود.
    در صورتی که OB82 تعریف نشده باشد، برخی خطاهای سخت‌افزاری باعث STOP شدن CPU خواهند شد.
  • کد داخل OB82 باید سبک و سریع باشد.
    از اجرای دستورات طولانی یا پیچیده (مثل حلقه‌ها، ارتباط شبکه‌ای یا فراخوانی FCهای سنگین) در OB82 خودداری کنید.
  • ساختار OB82_MDL را به‌درستی بخوانید.
    با بررسی Slot/Subslot می‌توانید منبع دقیق خطا را مشخص کرده و روی HMI نمایش دهید.
  • امکان استفاده از چند خطای هم‌زمان:
    اگر چند ماژول دچار خطا شوند، OB82 به‌صورت پشت‌سرهم اجرا می‌شود و اطلاعات هر خطا را جداگانه ثبت می‌کند.

تفاوت OB82 با OB40 و OB80

نام وقفه
OB82 (Diagnostic Error)
OB40 (Digital Interrupt)
(OB80 (Time Error
نوع وقفه
سخت‌افزاری، تشخیصی
سخت‌افزاری، لحظه‌ای
خطای زمان‌بندی اجرای OB
علت اجرا
خطا در ماژول‌ها یا ارتباط
تغییر وضعیت دیجیتال
اجرای بیش از زمان مجاز
ساختار اطلاعاتی
OB82_MDL
OB40_MDL
OB80_MDL
عملکرد در صورت عدم تعریف
CPU احتمالاً به STOP می‌رود
هیچ واکنشی اجرا نمی‌شود
CPU به حالت STOP می‌رود

این بلوک امکان واکنش سریع، دقیق و مستند به خطاهای سخت‌افزاری را فراهم می‌کند. با استفاده از OB82 می‌توان علاوه بر افزایش ایمنی، زمان عیب‌یابی را کاهش داده و از توقف ناگهانی سیستم جلوگیری کرد. توصیه می‌شود در هر پروژه‌ی صنعتی که شامل ماژول‌های I/O و ارتباطی است، OB82 به‌صورت پیش‌فرض در نظر گرفته و برنامه‌ریزی شود.



Pull or Plug of Modules


در سیستم‌های اتوماسیون صنعتی مبتنی بر ماژول‌های قابل تعویض (Modular PLC Systems) مانند S7-1500 یا ET200SP، امکان جداسازی یا اتصال فیزیکی ماژول‌ها در زمان بهره‌برداری وجود دارد. این عمل که در اصطلاح به آن Pull (کشیدن) یا Plug (وصل کردن) ماژول‌ها گفته می‌شود، یک رخداد مهم برای سیستم محسوب می‌شود و معمولاً توسط CPU تشخیص داده شده و از طریق یک وقفه تشخیصی (OB82) به برنامه اطلاع داده می‌شود.

  • Pull of Module: زمانی رخ می‌دهد که یک ماژول از رک یا بک‌پلن (Backplane) یا ریل خود در حین عملکرد سیستم فیزیکی جدا شود. این می‌تواند به‌صورت عمدی (برای تعمیر یا تعویض) یا ناگهانی (بر اثر خطا یا لرزش) باشد.
  • Plug of Module: زمانی اتفاق می‌افتد که یک ماژول جدید یا همان ماژول جداشده، دوباره به سیستم متصل می‌شود و CPU آن را شناسایی می‌کند.
وضعيت
توضيحات
Pull
CPU به‌سرعت وقفه‌ی تشخیصی صادر کرده، OB82 را اجرا می‌کند؛ دسترسی به آن ماژول از بین می‌رود.
Plug
پس از شناسایی ماژول جدید، یک رویداد تشخیصی دیگر صادر می‌شود؛ در صورت تنظیمات صحیح، سیستم به کار ادامه می‌دهد.

این رخدادها در سیستم‌های زیر رایج هستند:

  • سیستم‌های ET200SP یا ET200MP با طراحی ماژولار
  • نصب روی ریلی DIN در تابلوهای صنعتی
  • کاربردهای Hot Swapping (تعویض ماژول بدون خاموش کردن کل سیستم)

هنگامی که کشیدن یا اتصال ماژول رخ می‌دهد:

  1. CPU سیگنال را دریافت کرده و یک خطای تشخیصی ثبت می‌کند.
  2. در صورت وجود OB82، این OB اجرا می‌شود.
  3. اطلاعاتی مانند Slot Number، نوع ماژول، علت خطا در ساختار OB82_MDL در دسترس قرار می‌گیرد.
  4. برنامه‌نویس می‌تواند واکنش مناسب انجام دهد (مانند توقف جزئی سیستم، هشدار به اپراتور، یا ثبت خطا).

نکات مهم:

  1. تعریف OB82 الزامی است تا CPU در صورت Pull/Plug ماژول به حالت STOP نرود.
  2. در سیستم‌هایی که نیاز به Hot Swap دارند (مثلاً در تولید مداوم)، باید این رخدادها به‌درستی مدیریت شوند.
  3. به‌کمک ساختار OB82_MDL می‌توان نوع و محل ماژول کشیده‌شده را مشخص کرد.
  4. در صورت استفاده از HMI یا SCADA، اطلاعات Pull/Plug باید به اپراتور نمایش داده شود.
  5. واکنش نرم‌افزاری مناسب (مثل ایزوله‌سازی فرآیند مرتبط با ماژول) برای حفظ ایمنی سیستم ضروری است.



Rack or Station Failure


در سامانه‌های مدولار اتوماسیون صنعتی، به‌ویژه در معماری‌هایی مانند ET 200SP یا ET 200MP که مبتنی بر ارتباطات توزیع‌شده هستند، هر بخش از سیستم می‌تواند شامل یک یا چند ماژول در یک رک یا ایستگاه مجزا باشد. زمانی که به‌دلایل سخت‌افزاری یا ارتباطی، یک رک یا ایستگاه به‌طور کامل از دسترس خارج شود، رخدادی به نام Rack or Station Failure اتفاق می‌افتد.

Rack or Station Failure به حالتی اطلاق می‌شود که کل ایستگاه یا رک ماژولار، به‌دلیل قطع برق، خرابی سخت‌افزار، یا اختلال در ارتباطات پروفی‌نت یا پروفی‌باس، دیگر در دسترس CPU قرار نمی‌گیرد.

وقتی خرابی ایستگاه رخ می‌دهد:

  1. CPU یک رویداد تشخیصی ثبت می‌کند.
  2. در صورت پیکربندی OB86، این OB فراخوانی می‌شود.
  3. اطلاعات مربوط به رک معیوب مانند Rack Number، Slot Number، و Event ID از ساختار سیستمی OB86_MDL قابل دسترسی است.

OB86 یک Interrupt Organization Block است که در هنگام تشخیص خرابی یا بازگشت یک رک یا ایستگاه فعال می‌شود.

علل رایج بروز Rack/Station Failure

  • قطع برق در ایستگاه توزیع‌شده (مانند ET200SP)
  • خرابی CPU یا Interface Module
  • قطع کابل ارتباطی پروفی‌نت یا پروفی‌باس
  • نویز شدید در محیط صنعتی که باعث اختلال ارتباط شود
  • خارج شدن دستی یا اتفاقی کانکتور

نکات مهم:

  1. فعال‌سازی OB86 الزامی است، در غیر این‌صورت خرابی ایستگاه ممکن است منجر به توقف CPU شود.
  2. در محیط‌های صنعتی با حساسیت بالا، باید ارتباطات با Redundancy یا افزونگی طراحی شوند.
  3. از طریق HMI یا SCADA، باید اطلاع‌رسانی مناسبی به اپراتور داده شود.
  4. ثبت وقایع خرابی ایستگاه در فایل لاگ یا آرشیو سیستم برای تحلیل‌های آینده ضروری است.
  5. در زمان بازگشت ایستگاه، ممکن است نیاز به مقداردهی مجدد یا سینک‌سازی مجدد داده‌ها باشد.



Programming Error


در فرآیند اجرای برنامه‌های PLC، ممکن است شرایطی رخ دهد که باعث شود کد نوشته‌شده منطبق با قواعد منطقی و ساختاری سیستم نباشد. این دسته از خطاها که به‌صورت لحظه‌ای و در زمان اجرا ظاهر می‌شوند، تحت عنوان Programming Error شناخته می‌شوند. PLC زیمنس برای کنترل و مدیریت این خطاها از OB121 استفاده می‌کند. Programming Error به وضعیتی گفته می‌شود که در زمان اجرای برنامه، یک عملکرد غیرمجاز، ناصحیح یا نامشخص در برنامه PLC شناسایی شود. این خطا معمولاً در اثر مواردی مانند فراخوانی نادرست بلاک، پارامتر اشتباه، یا استفاده از بلاک حذف‌شده یا وجودنداشته اتفاق می‌افتد.

مثال‌های متداول بروز خطای Programming Error

علت
توضيحات
فراخوانی بلاک حذف‌شده (FC یا FB)
اگر بلاکی حذف شده و هنوز در جای دیگری از برنامه فراخوانی می‌شود
ارسال پارامتر اشتباه
ارسال ساختار یا نوع داده اشتباه به یک بلاک
فراخوانی بلاک محافظت‌شده بدون پسورد
تلاش برای دسترسی به بلاک محافظت‌شده بدون مجوز
دسترسی به حافظه خارج از محدوده
مثل دسترسی به آدرس DB یا Array که وجود ندارد



OB121 یک Organization Block مخصوص است که در صورت وقوع Programming Error توسط سیستم فراخوانی می‌شود. اگر این OB در برنامه موجود نباشد، در صورت بروز خطا، PLC به حالت STOP می‌رود.در داخل OB121 می‌توان اطلاعات مربوط به خطا را از رجیسترهای سیستمی (System Status List) استخراج کرد. یکی از مهم‌ترین داده‌ها OB121_MDL است که حاوی اطلاعاتی مانند شماره بلاک خطادار، آدرس حافظه و نوع خطا است.

نکات مهم:

  1. همیشه OB121 را در برنامه لحاظ کنید تا در صورت بروز خطا، CPU به STOP نرود.
  2. در OB121 می‌توان تصمیم‌گیری کرد که سیستم به کار خود ادامه دهد یا در وضعیت خاصی باقی بماند.
  3. ثبت گزارش خطا در لاگ سیستم یا ارسال هشدار به HMI/SCADA توصیه می‌شود.
  4. می‌توان با استفاده از تابع‌هایی مثل CONCAT, INT_TO_STRING, یا WRITE_LOG جزئیات خطا را دقیق ثبت کرد.


I/O Access Error


در سیستم‌های PLC زیمنس، ارتباط پایدار و صحیح با ورودی‌ها (Inputs) و خروجی‌ها (Outputs) نقش حیاتی در عملکرد بدون وقفه‌ی سیستم ایفا می‌کند. هرگونه اختلال در این ارتباط می‌تواند منجر به I/O Access Error شود؛ خطایی که معمولاً به دلیل عدم دسترسی یا از بین رفتن ارتباط با ماژول‌های I/O به وجود می‌آید. این خطا توسط سیستم عامل PLC تشخیص داده شده و از طریق OB122 قابل مدیریت است. I/O Access Error زمانی رخ می‌دهد که CPU نتواند به یک آدرس یا ماژول ورودی/خروجی دسترسی پیدا کند. این خطا معمولاً در شرایطی ایجاد می‌شود که:

  • ماژول I/O در زمان اجرا جدا شده باشد (Hot Swap)
  • خطای سخت‌افزاری در ماژول رخ دهد
  • آدرس I/O به‌اشتباه در برنامه استفاده شده باشد (مثلاً آدرسی که وجود ندارد)
  • تاخیر یا قطع ارتباط در شبکه Profinet/Profibus ایجاد شده باشد

در صورتی که CPU هنگام اجرای برنامه با خطای I/O Access مواجه شود، و OB122 در پروژه تعریف شده باشد، آن را اجرا می‌کند. در غیر این صورت، PLC وارد حالت STOP می‌شود.

در داخل OB122، متغیر سیستمی مانند OB122_MDL اطلاعاتی از قبیل شماره ماژول، آدرس خطادار و نوع دسترسی (ورودی یا خروجی) را ارائه می‌دهد. این اطلاعات می‌تواند در تشخیص دقیق محل بروز خطا و واکنش صحیح مورد استفاده قرار گیرد.

نکات مهم:

  1. تعریف OB122 الزامی است تا در صورت بروز خطا، CPU در وضعیت RUN باقی بماند.
  2. اطلاعات داخل OB122 را لاگ‌گیری کنید تا محل دقیق خطا در دسترس باشد.
  3. در صورت بروز مکرر این خطا، احتمال وجود اشکال در کابل‌کشی، کانکتور یا ماژول وجود دارد.
  4. در سیستم‌های شبکه‌ای (Profinet/Profibus)، بروز این خطا ممکن است به دلیل ناپایداری در ارتباط شبکه باشد.

تفاوت با خطاهای مشابه

نوع خطا
تفاوت
Programming Error (OB121)
خطای منطقی یا دستوری در برنامه
Diagnostic Interrupt (OB82)
خطای تشخیص داده‌شده توسط ماژول
I/O Access Error (OB122)
عدم امکان دسترسی به آدرس I/O توسط CPU