نمایندگی زیمنس آموزش بخش نرم افزاری را آغاز نموده است و هم اکنون به قسمت دوم آموزش رسیده ایم که چون بلوک های برنامه نویسی بحث پیچیده و طولانی می باشد. به همین علت در 2 قسمت اموزش داده ایم. اگر قسمت اول آموزش بلوک برنامه نویسی را مطالعه نکرده اید حتما کلیک نمایید. ( بلوک برنامه نویسی پس ال سی S7-1500 زیمنس - قسمت اول ). بلوک های برنامه نویسی در سه دسته بندی قرار می گیرند عبارتند از :
بلوک برنامه نویسی OB
بلوک برنامه نویسی FB
بلوک برنامه نویسی FC
این بلوک ها به طور ویژه برای تشخیص خطاهای نرم افزاری و سخت افزاری استفاده می شوند.در صورت بروز خطا در cpu ، این بلوک ها به طور خودکار توسط سیستم عامل فراخوانی و اجرا می شوند. در ادامه عملکرد هر یک از این بلوک ها را درصورت بروز خطا به طور کامل شرح می دهیم.
در سیستم اتوماسیون 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 کلیک نمایید.
با این کار متغیر های محلی بلوک وقفه 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 می شوند، بیان می کنیم:
اگر بلوک OB80 توسط سیستم عامل CPU فراخوانی شود، ولی در برنامه کاربر موجود نباشد، CPU به حالت توقف تغییر وضعیت می دهد. اگر بلوک OB80 در برنامه کاربر موجود باشد و یک بار دیگر نیز به علت بیشتر شدن زمان سیکل CPU از حد مجاز، توسط سیستم عامل CPU فراخوانی شود، CPU به حالت توقف می رود.
متغیرهای محلی بلوک OB80:
بلوک وقفه OB80 نیز مانند بلوک وقفه OB82، دارای چند متغیر محلی است که در زیر مجموعه گزینه Input قرار دارند و به شرح زیر است:
از میان کدهای موجود در جدول، کد B#16#01 بیانگر افزایش زمان سیکل اسکن CPU و گذشتن از حد مجاز است و از آن برای آشکار سازی این خطا در برنامه کاربر استفاده می شود.
بلوک OB83 (Pull or Plug of Modules)
اگر هنگام کار CPU، یک ماژول پیکربندی شده روی ریل S7-1500، از روی ریل برداشته یا یک مازول جدید روی ریل قرار داده شود، این بلوک وقفه توسط سیستم عامل CPU فراخوانی می شود. در این حالت، اجرای برنامه در بلوک OB1 متوقف می شود و بلوک OB83 در صورت وجود، اجرا می گردد. پس از اتمام اجرای بلوک OB83، اجرای عادی برنامه در بلوک OB1 ادامه می یابد.
متغیر های محلی بلوک OB83: بلوک وقفه OB83، در زیر مجموعه گزینه Input دارای سه متغیر محلی، به شرح زیر است:
در جدول زیر ترکیب کد های خطای ممکن در متغیر های 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 قرار دارند، عبارتند از:
بلوک (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 نیز دارای چند متغیر محلی است که مهمترین آن ها به شرح زیر است:
نکته!
بلوک های 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 به حالت توقف ببرند که این مورد از ویژگی های منحصر به فرد این سیستم اتوماسیون به شمار می رود.
نوع دیگری از بلوک های برنامه نویسی، بلوک های FB می باشند . این نوع از بلوک ها دارای یک بلوک دیگر با نام بلوک داده (Data Block) می باشند که برای ذخیره اطلاعات موجود در بلوک FB استفاده می شود و می توان در هر زمان، به اطلاعات موجود در بلوک FB مربوط دسترسی داشت. به همین دلیل به بلوک های FB، بلوک های حافظه دار نیز گفته می شود.
برای اینکه بتوانید از بلوک های FB در برنامه خود استفاده کنید، باید پس از برنامه نویسی در این بلوک ها، آن ها را با درگ کردن وارد بلوک اصلی برنامه نویسی، یعنی بلوک OB1 نمایید.
یکی دیگر از انواع بلوک های برنامه نویسی، بلوک های FC است. این بلوک ها از لحاظ عملکرد شبیه به بلوک های FB می باشند. با این تفاوت که در بلوک های FC، بلوک داده ای برای ذخیره اطلاعات وجود ندارد. به همین دلیل به بلوک های FC، بلوک های بدون حافظه نیز گفته می شود.
نکته!
کاربرد بلوک های FB و FC در مواقعی است که حجم برنامه کاربر زیاد باشد و به صورت عادی و بدون استفاده از این بلوک ها، نوشتن همه برنامه در بلوک اصلی برنامه نویسی (OB1) امکانپذیر نباشد. نوشتن تمام برنامه در بلوک اصلی، باعث طولانی تر شدن زمان سیکل CPU و به دنبال آن بروز خطای افزایش زمان سیکل می شود. در این صورت برنامه کاربر را به چند قسمت تقسیم می کنند و هر کدام از قسمت ها را در یک بلوک FB یا FC می نویسند. سپس بلوک FB یا FC را با درگ کردن وارد بلوک OB1 می کنند. یکی دیگر از کاربرد های استفاده از این بلوک ها در مواقعی است که لازم است در یک پروژه، یک عمل خاص روی چند سیستم مختلف تکرار شود. برای این منظور می توان برنامه مورد نظر برای انجام عملیات را در یک بلوک FB یا FC نوشت و سپس آن ها را چند بار و در نقاط مختلف برنامه کاربر فراخوانی کرد.