نمایندگی زیمنس: نحوه ی ایجاد و استفاده از فانکشن FC در برنامه نویسی اتوماسیون صنعتی
اگر بخواهیم داخل OB1 بلاکی را صدا بزنیم ، لازم است قبلاً آن را ساخته باشیم. در غیر اینصورت ، با فراخوانی بلاک ، دستور آن با رنگ قرمز نشان داده میشود که خطا را نشان میدهد.
نمایندگی زیمنس
بنابراین لازم است ابتدا توسط Simatic Manager این فانکشن را ایجاد کرده و سپس با کلیک بر روی آن ، آن را توسط LAD /STL /FBD باز کنیم. در محیط FC میتوان برنامه نویسی را به دو روش انجام داد. اول اینکه میتوان بصورت کاملاً معمولی و بدون در نظر گرفتن ورودی و خروجی های بلاک ، برنامه نویسی را انجام داد. در اینصورت ، پس از فراخوانی بلاک در OB1 ، پایه های ورودی و خروجی دیده نمیشوند ، زیرا در محیط FC تمام پایه ها آدرس مطلق و مستقیم دریافت کرده اند. در ادامه ، به یک مثال ساده برای تفهیم این مطلب میپردازیم :
مثال 1 : برنامه ای بنویسید که در آن مقدار A به اضافه ی مقدار B شده و نتیجه آن در فضایی از حافظه ریخته شود.
اگر به روش اول انجام شود ، مقدار مستقیم A و B در محیط FC وارد میشود.
نمایندگی زیمنس تهران
حال ، باید محیط FC را حتماً ذخیره نمائید و سپس به محیط OB1 وارد شده و FC را فراخوانی کنید. اگر محیط OB1 از زبان برنامه نویسی LAD یا FBD استفاده شده باشد ، روش فراخوانی به اینصورت است که باید در محیط OB1 و قسمت Program Element پوشه ی FC Blocks را باز کرده و با عمل Darg and Drop یا دابل کلیک بر روی آن ، FC مورد نظر را فراخوانی کنید. بدیهی است که در پوشه ی FC Blocks فقط بلاک هایی دیده میشوند که قبلاً Simatic Manager ساخته شده اند.
نماینده زیمنس در ایران
همانطور که در تصویر فوق دیده میشود ، FC فراخوانی شده بدون پایه های ورودی و خروجی دیده میشود. پایه هایی که در حالت پیش فرض در تمام بلاک ها پس از فراخوانی دیده میشود ، EN در ورودی و ENO در خروجی است.
پایه ی EN : این پایه مخفف Enable بوده و شرط عملکرد بلاک است. اگر در این پایه شرطی وجود نداشته باشد ، مقدار RLO در آن برابر یک است و به این معنی است که بلاک پس از دانلود همیشه اجرا شود.
پایه ی ENO : این پایه مخفف Enable Outاست که مقدار آن پس از دریافت EN در بلاک و اجرای منطقی بلاک ، یک میشود. به عبارت دیگر ، از مقدار RLO در این پایه میتوان به عنوان تائیدی بر عملکرد بلاک استفاده کرد.
روش دوم برنامه نویسی FC این است که در محیط FC از قسمت Declaration Section استفاده کرده و برای ورودی و خروجی های برنامه یک نام متناسب با آن پایه به همراه Type مورد نظر وارد میکنیم. مثال فوق را با استفاده از روش دوم انجام میدهیم :
زیمنس ایران
برای استفاده از ورودی / خروجی های FC باید نکات زیر را مورد نظر قرار دهید :
پس از وازد کردن نام مورد نظر در قسمت IN یا OUT ، لازم است Data Type را دقیقاً متناسب با پارامتر مورد نظر وارد کرده و سپس نام را به آن پایه مطابق تصویر فوق اختصاص دهید. در غیر اینصورت ، نام در محیط برنامه قرمز رنگ میشود که نشان دهنده ی خطا ست. در اینجا جنس پایه ها با توجه به دستور مورد نظر INT انتخاب شده است.
همانطور که دیده میشود تمام اسامی با علامت # شروع شده اند. این نشان میدهد که اسامی وارد شده مربوط به جدول Declaration Section بوده و نام سمبلیک نمیباشد.
ممکن است آدرس برخی از پایه ها در محیط برنامه نویسی ثابت باشد. در اینصورت میتوان آن پایه را مستقیماً (به روش اول) آدرس دهی کرد. حال ، آدرس آن پایه پس از فراخوانی در OB1 دیده نخواهد شد.
اگر برنامه شامل چندین Network باشد ، برای تمام ورودی و خروجی های کل FC در همین قسمت نام مورد نظر تعیین میشود.
اگر محیط FC قبلاً برنامه ریزی و فراخوانی شده و سپس ، تغییراتی در آن ایجاد شود ، پس از باز شدن OB1 ، شکل بلاک قرمز رنگ شده است. زیرا نسبت به حالت قبل در Source برنامه تغییراتی داده شده که در OB1 این تغییرات به روز نشده است. برای حل این مشکل ، لازم است بر روی FC فراخوانی شده راست کلیک کرده و سپس ، از منوی باز شده گزینه Update Block Call را انتخاب کنید. مطابق تصویر زیر :
ایران زیمنس
پس از کامل کردن محیط FC لازم است آن را ذخیره کرده و در محیط OB1 به روش ذکر شده ، فراخوانی کنید. در اینصورت ، بلاک FC در OB1 مطابق تصویر زیر دیده خواهد شد.
نماینده اتوماسیون صنعتی زیمنس
همانطور که در تصویر فوق دیده میشود ، پارامتر های b , a و c به عنوان پایه های ورودی و خروجی ظاهر شده اند. در اینجا لازم است به جای علامت سوال ، مقدار مورد نظر وارد شود.
به این روش ، برنامه نویسی ساختار یافته میگویند. به عبارت دیگر ، مقادیری که در اینجا به جای علامت سوال ها وارد میکنیم ، از طریق اسامی وارد شده ، به پایه های اصلی در محیط FC به عنوان Interface عمل میکنند.
مثال 2 : برنامه ای بنویسید که در آن یک خروجی با یک شستی Start شود و به روش خودنگهدار فعال بماند تا زمانی که توسط شستی Stop خاموش شود. این برنامه را بصورت ساختار یافته در محیط FC بنویسید.
برای حل این مثال ، بر اساس اصل عملکرد خود نگهدار لازم است یک خروجی به عنوان Coil استارت شده و نتیجه آن به عنوان Normal Open (NO) با کلید استارت OR شود. بنابراین ، لازم است آدرس خروجی مورد نظر هم به عنوان Input و هم به عنوان Output استفاده شود. در اینجا لازم است از گزینه IN_OUT استفاده کنیم.
کنترل زیمنس
مثال 3 : برنامه ای بنویسید که در آن مقدار a در b ضرب شود ، سپس حاصلضرب بدست آمده بر مقدار c تقسیم شده و حاصل نهایی را بتوان مشاهده نمود. این برنامه را بصورت ساختار یافته در محیط FC بنویسید.
در یک برنامه ، با توجه به پیچیده بودن یا ساده بودن آن ، عملیات محاسباتی مختلف اتفاق می¬افتد. وقتی این بلاک در OB فراخوانی میشود ، لازم نیست که تمام پایه های ورودی و خروجی دیده شود. بلکه مهمترین پایه ها را برای مقداردهی یا مشاهده نیاز خواهیم داشت. از دیدگاه دیگر ، اگر بخواهیم همه ی پایه ها را به عنوان ورودی و خروجی در نظر بگیریم ، فقط حجم بلاک در هنگام فراخوانی زیاد میشود که تاثیری در عملکرد آن نیز ندارد.
در جواب این تمرین باید گفت که حاصلضرب بدست آمده در اولین عمل محاسباتی باید در یک حافظه وارد شود. سپس ، این مقدار بر مقدار C تقسیم شود. بنابراین ، اینجا به متغیری از حافظه نیاز داریم که به صورت یک حافظه میان برنامه عمل کند. یک روش ، استفاده از Bit Memory است ، ولی مشکلی که پیش می¬آید این است که این حافظه به صورت Global است ، یعنی آدرس های آن در کل پروژه قابل استفاده است و به همین صورت نیز امکان تداخل آدرس ها وجود دارد.
در قسمت Declaration Section هر بلاک گزینه ای به نام Temp وجود دارد. Temp مخفف Temporary به معنای موقت است که میتوان دیتاهای همان بلاک را در این حافظه ذخیره کرده و از آن در همان محیط مجدداً استفاده کنیم. در ضمن ، این متغیر پس از فراخوانی در محیط OB دیده نخواهد شد.
برنامه ی آن به صورت زیر نوشته میشود
نماینده زیمنس در تهران
و پس از فراخوانی در محیط OB1 به صورت زیر دیده میشود :
زیمنس در تهران
تذکر : مثال های ذکر شده ، برنامه ی ساده ای بود که صرفاً برای آشنایی کاربر ارائه گردید. در عمل ، برنامه های داخل فانکشن پیچیده تر از این هستند.
در قسمت Declaration Section تمام FC ها یک پایه ی دیگر به نام Return وجود دارد. در زیر مجموعه آن فقط یک پایه به نام RET_VAL است. از این پایه در FC های استاندارد که توسط شرکت زیمنس برنامه ریزی شده اند ، به عنوان خروجی خط های بلاک استفاده میشود. در این قسمت نمیتوان نام دیگری را اضافه کرد. با فراخوانی یکی از FC ها در Libraries پایه ی RET_VAL در خروجی بلاک دیده میشود.
نمایندگی زیمنس در ایران