آموزش PLC S7-1500 نمایندگی زیمنس بخش نرم افزاری 2: بلوک برنامه نویسی 2

>آموزش PLC S7-1500 نمایندگی زیمنس بخش نرم افزاری 2: بلوک برنامه نویسی 2

نمایندگی زیمنس و بلوک های برنامه نویسی PLC S7-1500 زیمنس

نمایندگی زیمنس آموزش بخش نرم افزاری را آغاز نموده است و هم اکنون به قسمت دوم آموزش رسیده ایم که چون بلوک های برنامه نویسی بحث پیچیده و طولانی می باشد. به همین علت در 2 قسمت اموزش داده ایم. اگر قسمت اول آموزش بلوک برنامه نویسی را مطالعه نکرده اید حتما کلیک نمایید. ( بلوک برنامه نویسی پس ال سی S7-1500 زیمنس - قسمت اول ). بلوک های برنامه نویسی در سه دسته بندی قرار می گیرند عبارتند از :

   بلوک برنامه نویسی OB        

   بلوک برنامه نویسی FB         

   بلوک برنامه نویسی FC         

 

 

بلوک های OB8x

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

 

بلوک OB82 (Diagnostic Error Interrupt)

در سیستم اتوماسیون S7-1500 ، برخی از ماژول های IO دارای قابلیت تشخیص خطاهای سخت افزاری، مانند قطعی ولتاژ تغذیه ماژول، قطعی سیم یا اتصال کوتاه می باشند.در شکل 2-5 که مربوط به یک ماژول خروجی دیجیتال با نام DQ 16x24VDC/0.5A ST است، مشاهده می کنید که در قسمت Information (شماره 1) آن، عبارت configurable diagnostics  (شماره 2)نوشته شده است و بدین معناست که این ماژول دارای قابلیت تشخیص خطای سخت افزاری می باشد. برای استفاده از این قابلیت، ابتدا باید گزینه های مربوط به عیب یابی را برای ماژول مربوط در نرم افزار فعال کنید. در این صورت، هنگام بروز هر یک از خطاهایی که گزینه عیب یابی آن ها در ماژول فعال شده است، سیستم عامل CPU درخواست وقفه می کند و به طور خودکار بلوک OB82 را فراخوانی می نماید.در این صورت اجرای برنامه کاربر در بلوک OB1 متوقف و بلافاصله بلوک OB82 اجرا می شود.پس از اجرای بلوک OB82، پردازش سیکلی برنامه کاربر در OB1 ادامه می یابد.

 متغیرهای محلی بلوک OB82 :در بلوک وقفه OB82  چندین متغیر با عنوان "متغیرهای محلی" در نظر گرفته شده اند.

توجه:                           

متغیرهای محلی موجود در بلوک های وقفه، شامل اطلاعاتی برای کاربر می باشند.برای اینکه بتوان این اطلاعات را در برنامه کاربر نمایش داد و برای مقاصد مختلف از آن ها استفاده کرد، باید از دستور MOVE استفاده کنیم.این دستور دارای دو پارامتر ورودی و خروجی است.روش کار به این صورت است که ابتدا نام متغیر محلی مورد نظر را درپارمتر ورودی این دستور درج می کنیم و کلید ENTER را فشار می دهیم.سپس برای پارامترهای خروجی دستور MOVE ،یک مکان حافظه با آدرس مورد نظر (مثلاً آدرس MW10  ) را برای ذخیره سازی اطلاعات فعلی متغیر محلی اختصاص می دهیم. در این حالت، با اجرای بلوک وقفه مربوط ،اطلاعات فعلی متغیر محلی آن با استفاده از دستور MOVE به مکان حافظه تعیین شده در پارامتر خروجی این دستور منتقل می شوند.

شایان ذکر است که دستور MOVE ، متغیرهای محلی از نوع دیجیتال (BOOL) مانند متغیر محلی Multierror را پوشش    نمی دهد. برای نمایش اطلاعات متغیر محلی دیجیتال، می توان از دستورهای NC ،NO ،Assignment  و ... که ورودی های دیجیتال را پوشش می دهند، استفاده کرد.

 برای دسترسی به این متغیرها، کافی است وارد این بلوک شوید و روی قسمت  1  کلیک نمایید.

 

نمایندگی زیمنس- آموزش پی ال سی s7-1500 زیمنس - بلوک برنامه نویسی- دسترسی به متغیرها

 

با این کار متغیر های محلی بلوک وقفه OB82، در زیر مجموعه Input نشان داده می شوند. مهمترین متغیر های محلی این بلوک عبارتند از:

 LADDR:

این متغیر، آدرس ماژول IO ای را که باعث فراخوانی بلوک OB شده است، نمایش می دهد. مثلا می توان با استفاده از دستور Move، این پارامتر را به یک حافظه اختصاص داد. این آدرس، همان شناسه سخت افزاری ماژول IO می باشد که قبلا برای ان تعیین شده است. 

Channel: شماره کانالی که خطا در آن رخ داده است، در این متغیر نشان داده می شود. 

MultiError: در صورتی که بخواهیم وجود بیشتر از یک خطا را در ماژولی که در آن رخ داده است نشان دهیم;  از این متغیر استفاده می کنیم. 

 

 

این متغیر از نوعع دیجیتال است و می تواند دارای یک از وضعیت های صفر تا یک منطقی باشد; بنابراین زمانی که بیشتر از یک خطا در این ماژول وجود داشته باشد; متغیر MultiError برابر با یک منطقی می شود. اگر این پارامتر برابر با صفر باشد، یعنی خطایی وجود ندارد یا یک خطا رخ داده است که این موضوع (عدم رخ دادن خطا یا بروز یک خطا) را می توان با توجه به مقادیر پارامتر های LADDR و Channel متوجه شد.

 

توجه!                     

روش دسترسی به متغیرهای محلی سایر بلوک های وقفه دارای متغیر های محلی نیز مانند روش دسترسی ذکر شده برای متغیر های محلی بلوک OB82 است.

 

بلوک (Time Error Interrupt) OB82

اگر زمان سیکل CPU  از زمان مجاز تعیین شده در قسمت Cycle time از زبانه Properties بیشتر شود، بلوک وقفه OB82 توسط سیستم عامل CPU فراخوانی می شود. در این حالت، پردازش سیکلی برنامه کاربر در بلوک OB1 و بلوک OB80 اجرا می گردد. می توان بر حسب نیاز، برنامه ای دلخواه را نیز در بلوک وقفه OB80 نوشت تا با فراخوانی این بلوک، برنامه درون آن نیز اجرا شود. پس از اجرای بلوک OB80، اجرای عادی برنامه در بلوک OB1 ادامه می یابد.

 

توجه!                     

منظور از زمان سیکل، زمانی است که CPU برای اجرای برنامه کاربر در یک سیکل نیاز دارد.

در  ادامه برخی از دلایلی که باعث بیشتر شدن زمان سیکل CPU از حد مجاز و در نتیجه فراخوانی بلوک وقفه OB80 می شوند، بیان می کنیم:

  1. خطاهای وقفه: این خطا هنگامی رخ می دهد که پردازش سیکلی برنامه کاربر در بلوک OB1 چندبار توسط بلوک های وقفه متوقف شود.
  2. کند بودن سخت افزار: در برخی موارد اجرای آهسته تر برخی نسخه های قدیمی سخت افزار نسبت به نسخه های جدید باعث افزایش زمان سیکل CPU می شود;  در این شرایط و برای جلوگیری از بروز چنین مشکلاتی، توصیه می شود که سخت افزار CPU همیشه به آخرین نسخه موجود به روز رسانی شود.

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

 

 متغیرهای محلی بلوک OB80:

بلوک وقفه OB80 نیز مانند بلوک وقفه OB82، دارای چند متغیر محلی است که در زیر مجموعه گزینه Input قرار دارند و به شرح زیر است:

  • Fault_ID: این متغیر، مهم ترین متغیر محلی موجود در بلوک OB80 است و از آن برای آشکار سازی خطای به وجود آمده در برنامه کاربر استفاده می شود که این آشکار سازی، از طریق کد های به وجود آمده در متغیر Fault_ID موسوم به " کد های خطا " انجام می شود.

از میان کدهای موجود در جدول، کد B#16#01  بیانگر افزایش زمان سیکل اسکن CPU و گذشتن از حد مجاز است و از آن برای آشکار سازی این خطا در برنامه کاربر استفاده می شود.

  • Csg_OBnr: شماره بلوک OB ای که باعث بروز خطا شده است، در این متغیر وارد می شود.
  • Csg_Prio: شماره اولویت بلوک OB ای که باعث بروز خطا شده است، در این متغیر وارد می شود.

 

بلوک OB83 (Pull or Plug of Modules)

اگر هنگام کار CPU، یک ماژول پیکربندی شده روی ریل S7-1500، از روی ریل برداشته یا یک مازول جدید روی ریل قرار داده شود، این بلوک وقفه توسط سیستم عامل CPU فراخوانی می شود. در این حالت، اجرای برنامه در بلوک OB1 متوقف می شود و بلوک OB83 در صورت وجود، اجرا می گردد. پس از اتمام اجرای بلوک OB83، اجرای عادی برنامه در بلوک OB1 ادامه می یابد.

 متغیر های محلی بلوک OB83: بلوک وقفه OB83، در زیر مجموعه گزینه Input دارای سه متغیر محلی، به شرح زیر است:

  • LADDR: در این متغیر، آدرس ماژول IO ای که باعث فراخوانی بلوک OB83 شده است، نمایش داده می شود. این آدرس، همان شناسه سخت افزاری ماژول مربوط می باشد که قبلا برای ان تعیین شده است.

 

  • Event_Class: در این متغیر، بسته به خطای ایجاد شده، دو کد به شرح زیر قرار می گیرند:
    • B#16#38: این کد، بیانگر خطای مربوط به وارد کردن یک ماژول می باشد.
    • B316#39: این کد بیانگر خطای مربوط به برداشتن یک ماژول می باشد.

 

  • FauIt_ID: در این متغیر، کد مربوط به خطای ایجاد شده نمایش داده می شود.

در جدول زیر ترکیب کد های خطای ممکن در متغیر های Event_Class و FauIt_ID برای بلوک OB83 را نشان می دهد.

 

 

 

Event_Class

...B#16#

Fault_ID

...B#16#

نتیجه
39 51  PROFINET IO module removed
39 54 PROFINET IO submodule removed
38 54 PROFINET IO submodule inserted and matches configured submodule
38 55 PROFINET IO submodule inserted, Butdoes not match configured submodule
38 56 PROFINET IO submodule inserted، but error in module parameter assignment
38 57 PROFINET IO submodule or module inserted، but with a problem or maintenance
38 58 PROFINET IO submodule inserted، access error corrected
39 61 Module removed or not responding
38 61 Module inserted، module type OK
38 63 Module inserted but module type is incorrect
38 64 Module inserted but faulty (module ID cannot be read)
38 65 Module inserted، but error in module parameter assignment
39 66 Module not responding ، load voltage error
38 66 Module responds again، load voltage error corrected

 

 

 

بلوک های OB122 و OB121

این بلوک ها برای تشخیص خطاهای نرم افزاری به کار می روند و مشابه بلوک های OB8x به طور خودکار هنگام بروز خطا، توسط سیستم عامل فراخوانی می شوند.

 

بلوک (Programming Error) OB121

 اگر در طول پردازش برنامه کاربر، یک خطای برنامه نویسی توسط CPU تشخیص داده شود، بلوک OB121 به طور خودکار فراخوانی می شود. برای مثال، اگر در برنامه کاربر، از مکان حافظه یک بلوک داده (Data Block) برای آدرس دهی پارامتر های ورودی یا خروجی استفاده کنیم، ولی این بلوک داده در برنامه کاربر موجود نباشد، یک خطای برنامه نویسی رخ می دهد و بلوک OB121 فراخوانی می شود. شایان ذکر است که اگر بلوک OB121 در برنامه کاربر موجود نباشد، CPU بلافاصله به حالت توقف خواهد رفت.

 متغیر های محلی بلوک OB121: مهمترین متغیرهای محلی بلوک وقفه OB121 که در زیر مجموعه گزینه Input قرار دارند، عبارتند از:

  • Block Nr: شماره بلوکی که باعث بروز خطا شده است، در این متغیر نمایش داده می شود.
  • FauIt_ID: در این متغیر، کدهایی که بیانگر خطای به وجود آمده در برنامه کاربر می باشند، ظاهر می شوند. از متداول ترین کد های خطای برنامه نویسی، می توان به موارد زیر اشاره کرد:
    • B#16#3A: این کد زمانی ظاهر می شود که بخواهیم به بلوک داده ای که به VCPU دانلود نشده است، دسترسی داشته باشیم.
    • B#16#3C: این کد زمانی ظاهر می شود که بخواهیم به بلوک FC ای که به CPU دانلود نشده است، دسترسی داشته باشیم.
    • B#16#3E: این کد زمانی ظاهر می شود که بخواهیم در برنامه کاربر، به بلوک FB ای که به CPU دانلود نشده است، دسترسی داشته باشیم.
  • BlockType: نوع بلوکی که باعث بروز خطا شده است، در این متغیر مشخص می شود.

 

بلوک (IO Access Error) OB122

 اگر در هنگام دسترسی به اطلاعات یک ماژول خطایی رخ دهد، سیستم عامل CPU، بلوک OB122 را فراخوانی می کند. این خطا می تواند خطای دسترسی خواندنی (Read Access Error) یا خطای دسترسی نوشتنی (Write Access Error) ببه اطلاعات یک مازول IO باشد.

با دو مثال، منظور از خطای دسترسی خواندنی و نوشتنی را بیان می کنیم. برای خطای دسترسی خواندنی، یک ماژول ورودی آنالوگ (AI) را که محدوده آدرس آن از بایت 2 تا بایت 17 است، در نظر بگیرید. اگر کاربر در برنامه خود، برای آدرس دهی ورودی های آنالوگ از بایت های خارج از محدوده تعیین شده، مثلا بایت 27 (آدرس PIW27) استفاده کند، که خارج از محدوده معین برای ماژول آنالوگ مربوط است، یک خطای دسترسی خواندنی به اطلاعات ماژول IO توسط CPU تشخیص داده می شود و بلوک OB122 به طور خودکار فراخوانی می گردد.

برای خطای دسترسی نوشتنی نیز ماژول خروجی آنالوگی (AQ) را در نظر بگیرید که محدوده آدرس آن از بایت 2  تا بایت 17 است. اگر کاربر در برنامه خود، برای ادرس دهی خروجی های آنالوگ، از بایت های خارج از محدوده تعیین شده، مثلا بایت 27 (آدرس PQW27) استفاده کند، که خارج از محدوده معین برای ماژول آنالوگ مربوط است، یک خطای دسترسی نوشتنی به اطلاعات ماژول IO توسط CPU تشخیص داده می شود و بلوک OB122 به طور خودکارفراخوانی می گردد.

 متغیرهای محلی بلوک OB122: بلوک وقفه OB122 نیز دارای چند متغیر محلی است که مهمترین آن ها به شرح زیر است:

  • BlockNr: شماره بلوکی که باعث بروز خطا شده است، در این متغیر نمایش داده می شود.
  • FauIt_ID: در این متغیر، دو کد به شرح زیر ظاهر می شوند:
    • B#16#42: این کد، بیانگر خطای دسترسی خواندنی به اطلاعات یک ماژول است.
    • B#16#43: این کد، بیانگر خطای دسترسی نوشتنی به اطلاعات یک ماژول است.
  • BlockType: نوع بلوکی (FC ,FB ,OB) که باعث خطا شده است، در این متغیر مشخص می شود.
  • Area: در این متغیر، دو کد ظاهر می شوند که تعیین می کنند خطای دسترسی IO در کدام بخش از برنامه کاربر رخ داده است:
    • W#16#81: خطای به وجود آمده، مربوط به ورودی های (I) برنامه کاربر است.
    • W#16#82: خطای به وجود آمده، مربوط به خروجی های (Q) برنامه کاربر است.

 

نکته!                    

بلوک های OB80، OB82، OB83، OB121، OB122 که در صورت بروز خطا، به طور مستقیم توسط سیستم عامل CPU فراخوانی می شوند، در واقع برای تایید خطای به وجود امده در سیستم اتوماسیون مورد استفاده قرار می گیرند. همچنین کاربر می تواند یک برنامه دلخواه نیز در این بلوک ها بنویسد تا در صورت فراخوانی بلوک مربوط، برنامه درون آن نیز اجرا شود. برای مثال، می توان برنامه ای برای آشکار سازی دقیق خطای به وجود امده با استفاده از متغیرهای محلی بلوک مربوط نوشت.

 

بلوک های (Time of Day OB1x)

زمانی که بخواهیم یک یا چند خروجی را یک بار به صورت دوره ای (سیکلی)، در تاریخ و زمان مشخصی فعال و در تاریخ و زمان مشخص دیگری غیر فعال کنیم، می توانیم از بلوک های وقفه OB1x (OB10-OB17) استفاده کنیم.

روش کار به این صورت است که ابتدا دستور Start یا فعال سازی خروجی های مورد نظر را در یک بلوک OB1x، مثلا بلوک OB10، می نویسیم و تاریخ و زمان مورد نظر را برای فعال شدن خروجی ها را نیز در این بلوک تعیین می کنیم. سپس دستور غیر فعال کردن همان خروجی ها را در یک بلوک OB1x دیگر، مثلا بلوک OB11، می نویسیم و تاریخ و زمان مورد نظر را برای غیر فعال کردن خروجی ها را نیز در این بلوک تعیین می کنیم.

پس از اجرای برنامه کاربر و در تاریخ و زمان تعیین شده برای فعال سازی خروجی های مورد نظر، اجرای برنامه در بلوک اصلی برنامه نویسی، یعنی OB1 قطع می شود و سپس برنامه نوشته در بلوک OB10 اجرا می گردد و خروجی های مورد نظر فعال می شوند. پس از اتمام اجرای برنامه در بلوک OB10، اجرای عادی برنامه کاربر در بلوک OB1 ادامه می یابد. پس از رسیدن تاریخ و زمان تعیین شده بعدی، برای غیر فعالسازی خروجی ها، دوباره اجرای برنامه در بلوک OB1 قطع می شود و برنامه موجود در بلوک OB11 برای غیر فعال سازی خروجی ها اجرا می گردد. پس از اتمام اجرای برنامه موجود در بلوک OB11، اجرای عادی برنامه در بلوک OB1 از سر گرفته می شود. شایان ذکر است که هنگام استفاده از بلوک های وقفه OB1x، نوشتن برنامه ددر بلوک OB1 اختیاری است.

 

نکته!                            

بر خلاف سیستم های اتوماسیون S7-300 و S7-400، تنها سه نوع خطا وجود دارند که می توانند CPU را در سیستم اتوماسیون S7-1500 به حالت توقف ببرند که این مورد از ویژگی های منحصر به فرد این سیستم اتوماسیون به شمار می رود.

  1. اگر زمان سیکل اسکن CPU، یک بار از حد مجاز تجاوز کند، در این صورت، اگر بلوک وقفه  OB80 در برنامه کاربر موجود نباشد، CPUبه حالت توقف می رود.
  2. اگر زمان سیکل اسکن CPU، برای بار دوم ازحد مجاز بیشتر شود; حتی اگر بلوک وقفه OB80 نیز در برنامه کاربر موجود باشد، CPU به حالت توقف می رود.
  3. در صورت وجود خطاهای برنامه نویسی، اگر بلوک OB121 در برنامه کاربر موجود نباشد، CPU به حالت توقف خواهد رفت.

 

بلوک های FB:

نوع دیگری از بلوک های برنامه نویسی، بلوک های FB می باشند . این نوع از بلوک ها دارای یک بلوک دیگر با نام بلوک داده (Data Block) می باشند که برای ذخیره اطلاعات موجود در بلوک FB استفاده می شود و می توان در هر زمان، به اطلاعات موجود در بلوک FB مربوط دسترسی داشت. به همین دلیل به بلوک های FB، بلوک های حافظه دار نیز گفته می شود.

برای اینکه بتوانید از بلوک های FB در برنامه خود استفاده کنید، باید پس از برنامه نویسی در این بلوک ها، آن ها را با درگ کردن وارد بلوک اصلی برنامه نویسی، یعنی بلوک OB1 نمایید.

 

بلوک های FC:

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

 

نکته!                                     

کاربرد بلوک های FB و FC در مواقعی است که حجم برنامه کاربر زیاد باشد و به صورت عادی  و بدون استفاده از این بلوک ها، نوشتن همه برنامه در بلوک اصلی برنامه نویسی (OB1) امکانپذیر نباشد. نوشتن تمام برنامه در بلوک اصلی، باعث طولانی تر شدن زمان سیکل CPU و به دنبال آن بروز خطای افزایش زمان سیکل می شود. در این صورت برنامه کاربر را به چند قسمت تقسیم می کنند و هر کدام از قسمت ها را در یک بلوک FB یا FC می نویسند. سپس بلوک FB یا FC را با درگ کردن وارد بلوک OB1 می کنند. یکی دیگر از کاربرد های استفاده از این بلوک ها در مواقعی است که لازم است در یک پروژه، یک عمل خاص روی چند سیستم مختلف تکرار شود. برای این منظور می توان برنامه مورد نظر برای انجام عملیات را در یک بلوک FB یا FC نوشت و سپس آن ها را چند بار و در نقاط مختلف برنامه کاربر فراخوانی کرد.