اتصال انکودر به PLC S7-1200
اتصال انکودر به plc s7-1200 بنا به نوع plc تعداد کانالهایی که میشود به آن انکودر یا سنسور high speed متصل کرد به صورت […]
اتصال انکودر به plc s7-1200
بنا به نوع plc تعداد کانالهایی که میشود به آن انکودر یا سنسور high speed متصل کرد به صورت ذیل می باشد :
همانطور که در جدول بالا مشاهده میکنید plc های 1211 و 1212 در صورت اضافه کردن سیگنال برد به تعداد 2 عدد به تعداد کل انکودرها یا سنسور high speed اضافه میشود
و همه plc ها در صورتی که سیگنال تک باشه تا فرکانس 100 کیلو هرتز در برخی کانالها و 30 کیلو هرتز در دیگر کانالها ساپورت میکنند
ولی چنانچه انکودر متصل کنید به دلیل 2 فاز بودن A و B ماکزیمم فرکانس تا 80 کیلو هرتز در برخی کانالها و 2- کیلو هرتز در دیگر کانالها ساپورت میشود .
بنا به استفاده مورد نظر می بایست به ماکزیمم فرکانس مورد نظر توجه داشت .
برای اتصال انکودر به plc s7 1200 مراحل ذیل را باید انجام دهید :
1.ابتدا در برنامه TIA PORTAL ، plcمورد نظر را انتخاب نمایید . در بخش سخت افزار ( Device view ) روی plc کلیک کرده در پنجره پایین سر برگ properties و زیر گروه General مطابق شکل وارد بخش High speed counters (HSC ) شوید .
2.کانال مورد نظر را انتخاب نمایید . ( HSC1 یا HSC2 یا ….. ) سپس وارد زیر شاخه کانال مورد نظر شوید. در تب General در HSC مورد نظر ابتدا تیک Enable this high speed counter را فعال کنید .
3. در ادامه موارد مهم تنظیمات سخت افزاری را توضیح میدهیم :
3-1در بخش function نوع مد کاری و دیگر موارد مربوط به آن را تنظیم میکنیم:
الف ) بخش Type of counting
در این بخش نوع مد کاری را تعیین میکنیم :
Count : اگر میخواهیم در مد پوزیشن از انکودر یا سنسور استفاده کنیم از مد count استفاده میکنیم
Period : اگر میخواهیم پالس های انکودر یا سنسور را در یک فاصله زمانی مشخص ( 0.01 یا 0.1 یا 1 ثانیه در بخش frequency measuring period )شمارش کنیم از این مد استفاده میکنیم این مد شبیه به مد فرکانس هست با این تفاوت که در فرکانس تعداد پالس در مدت زمان یک ثانیه نشان داده میشود اما در این مد در سه بازه زمانی میتوانیم این مقدار را تنظیم کنیم
Frequency : اگر میخواهیم فرکانس پالس های انکودر را محاسبه کنیم از این مد استفاده میکنیم دقت کنید در این مد میتوانیم زمان رفرش شدن فرکانس را تنظیم کنیم همانند مد period اما تفاوتش با این مد این هست که هر زمانی تنظیم کنیم تعداد پالس های انکودر یا سنسور را در مدت یک ثانیه به ما نشان میدهد که یعنی همان فرکانس منتها زمان رفرش آن متفاوت می باشد که بنا به استفاده ما می تواند قابل تنظیم باشد .
Motion Control : این بخش برای زمانی هست که میخواهیم یک محور سرو یا استپ موتور را از طریق توابع موشن و پالس خارجی راه اندازی کنیم و به صورت close loop میخواهیم انکودر یا سنسور را به عنوان فیدبک پوزیشن ازش استفاده کنیم به کار میرود که در این فایل به توضیح آن نمیپردازیم .
ب) بخش Operation phase
در این بخش نوع سیگنال مورد نظر را تعیین میکنیم :
Single phase : اگر یک سنسور سرعت بالا داشتیم که روی چرخ دنده محور تنظیم شده از این گزینه استفاده میکنیم . در این صورت جهت شمارش را میتوانیم افزاینده یا کاهنده به صورت نرم افزاری یا سخت افزاری ( به عنوان یک ورودی دیجیتال ) تعیین کنیم .
Two phase : در این حالت دو سنسور سرعت بالا داریم که یکی برای حالت افزاینده شمارش استفاده میشود و یکی برای حالت کاهنده شمارش تعیین میشود که در بخش Hardware input در زیر گروه HSC این ورودی ها رو می توانیم تعیین کنیم . این حالت خیلی کم استفاده میشود و کم کاربرد می باشد .
A/B counter : این حالت برای اتصال انکودر می باشد . انکودر افزایشی که خروجی پالس آن 24 ولت می باشد و دو پالس A و B آن را به ورودی های دیجیتال متصل میکنیم . در این حالت تعداد پالس ها به صورت نرمال شمارش میشود و از پالس B به دلیل تعیین جهت گردش برای افزایشی یا کاهشی کانتر استفاده میشود .
A/B counter fourfold : این حالت نیز برای اتصال انکودر می باشد . تنها تفاوتش این هست که به لبه های پایین و بالای هر دو پالس A و B انکودر شمارش میشود . در این حالت تعداد شمارش کانتر 4 برابر مد a/b counter می باشد یعنی یک دور انکودر بزند تعداد پالس شمارش شده در کانتر 4 برابر رزولوشن انکودر می باشد . و این حالت دقت را بالاتر میبرد و در جایی که دقت بالاتری برای محاسبه پوزیشن میخواهیم از این حالت استفاده میکنیم .
ج ) بخش Counting direction is specified by
این بخش اگر در مد operation phase حالت single phase انتخاب کنید این حالت فعال میشود در مابقی موارد غیر فعال می باشد .
User program ( internal direction control ) : این حالت برای این هست که جهت گردش برای افزایشی یا کاهشی بودن شمارش پالس ها را به صورت نرم افزاری از داخل برنامه و تابع مروبطه تعیین کنیم .
Input ( external direction control ): این حالت برای تعیین جهت گردش برای افزایشی یا کاهشی بودن شمارش پالس ها به صورت تعیین ورودی سخت افزاری می باشد که ورودی مورد نظر در بخش hardware inputs در HSC تعیین می شود .
د) بخش Initial counting direction
این بخش برای تعیین اولیه نوع افزایشی یا کاهشی بودن کانتر شمارش ( یعنی جهت حرکت ) می باشد .
برای افزایشی شمارش count up و برای کاهشی بودن شمارش count down را انتخاب میکنیم .
ه ) بخش Frequency measuring period
این بحش زمانی که در operation mode حالت period یا frequency را انتخاب میکنیم فعال میشود و چهار حالت زمانی دارد 0.01 یا 0.1 یا 1 ثانیه ، که میتوان هم از این قسمت تعیین کرد هم میتوان در حین برنامه با استفاده از تابع مورد نظر تغییر دهیم .
. بخش های capture input و gate input به شرح ذیل می باشد :
3-2بخش capture input : این بخش را اگر فعال کنیم در بخش hardware input یک ورودی سخت افزاری به آن می توان اختصاص داد که میتوان در حالت لبه بالا یا لبه پایین یا در هر دو لبه مقدار کانتر فعال در این حالت ها ثبت شود و از آن در جایی استفاده شود مثلا میخواهیم در یک حالت خاص مقدار پوزیشن را در لحظه خاصی که محور از یک سنسور عبور میکند داشته باشیم در حالت عادی چون سرعت بالا هست شاید نتوان مقدار انکودر را در این لبه بالای این ورودی به طور دقیق ثبت کنیم اما میتوان از این حالت استفاده کرد برای استفاده این حالت حتما باید تابع خاص انکودر استفاده شود که در ادامه توضیح خواهیم داد .
3-3بخش gate input : این بخش را اگر فعال کنیم در بخش hardware input یک ورودی سخت افزاری به آن میتوان اختصاص داد که اگر ورودی فعال شود کانتر عمل شمارش پالس های انکودر را انجام میدهد در غیر اینصورت اگر ورودی غیر فعال شود با اینکه پالس انکودر بیاید عمل شمارش انجام نمیشود . ( فعال بودن ورودی را یا با سطح بالا میتوان تعیین کرد یعنی 1 منطقی یا با سطح پایین یعنی صفر منطقی ) این بخش شبیه کانترهای سری 300 در plc های کامپکت آن سری می باشد . که می توان این حالت را نرم افزاری انتخاب کرد و این بخش را غیر فعال کرد .
3-4. بخش Event configuration :
در این بخش اینتراپت ها را تنظیم میکنیم که اولین بخش آن مربوط به تنظیم شماره اینتراپتی هست که اگر مقدار کانتر با مقدار رفرنسی که از تابع انکودر به آن بدهیم برنامه به ob اینتراپت مربوطه رود و Ob مربوطه را اجرا نماید در حقیقت زمانی که دقیقا CV=RV شود این اینتراپت اجرا میشود . حال اگر چندین مقدار رفرنس وجود داشته باشد توضیح خواهیم داد که چگونه با یک اینتراپت بتوانیم این کار را انجام دهیم .
پس از انجام مراحل بالا در بخش event configuration و فعال کردن آن با استفاده از تابع انکودر میتوانید مقدار RV که رفرنس هست را داخل رجیستر آن بریزید و هر موقع کانتر به این مقدار رسید میرود و اینتراپت مربوطه ( با توجه به شکل ob40 ) را اجرا مینماید که میتوانید برنامه مورد نظر را در ob40 بنویسید . همانطور که اشاره شد در ادامه بعد از توضیح تابع مثالی میزنیم که بتوانیم چندین رفرنس را فقط با یک ob اینتراپتی اجرا کنیم .
3-5. بخش Hardware input :
در این بخش آدرس ورودی های سخت افزاری مورد نظر هر بخش را با توجه به فعال کردن قسمت های مختلف قبلی میتوانید وارد کنید .
به عنوان مثال اگر کانتر را به صورت دو فاز A و B انتخاب کرده باشید و بخش Gate hardware و Capture را فعال کرده باشید میتوانید مطابق شکل ذیل آدرس ورودی های موردنظر را وارد کنید .
3-6. بخش I/O addresses :
در این بخش آدرس یک double word را باید وارد کنید که مقدار کانتر انکودر در آن ریخته شود و در برنامه از آن استفاده کنید در حقیقت اگر تابع انکودر را نیز استفاده نکنید مقدار کانتر در صورت فعال کردن hsc مربوطه در این ورودی ریخته میشود که به طور پیش فرض در ID1000 ریخته میشود . ( cv= ID1000 ) برای صفر کردن کانتر باید حتما تابع انکودر استفاده شود . که در ادامه توضیح داده میشود . ( در بخش start address آدرس شروع اولین بایت داده میشود و در بخش end address آدرس بایت آخر به طور اتومات نوشته میشود که جمعا 4 بایت می باشد چون یک double word هست )
3-7. بخش Hardware identifier :
این بخش آدرس سخت افزاری هست که به عنوان شماره خاص برای این کانتر در نظر گرفته شده است که می بایست در تابع انکودر از آن استفاده کرد . این بخش تنظیمی نیست و فقط نمایشی می باشد .
پس از تنظیمات بخش سخت افزاری می توان وارد برنامه نویسی شد و با توجه به کاربرد مورد نظر و مد انتخابی تابع انکودر را استفاده کرد . در plc s7 1200 ما دو تابع انکودر داریم یک تابع به طور خاص استفاده میشود اما تابع دیگر عمومی تر می باشد . اکثر مواقع از تابع عمومی استفاده میشود اما اگر بخواهیم از تمامی قابلیت های ورودی های مختلف بخصوص capture استفاده کنیم از تابع خاص و کلی استفاده میکنیم . ابتدا تابع عمومی را توضیح میدهیم .
الف ) استفاده از تابع CTRL_HSC :
وارد بخش برنامه نویسی شده و در ob1 یا fc مورد نظر از سمت راست ستون Technology ، پوشه counting و از زیر پوشه others ، تابع CTRL_HSC را انتخاب کرده و وارد نتورک برنامه میکنیم :
یک دیتا بلاک برای تابع انتخاب میکنیم و یا به طور اتومات یک DB برای تابع انتخاب میشود .
پایه های این تابع به شرح ذیل می باشد :
پایه HSC : دراین پایه می بایست شماره HSC مورد نظر را که در بخش hardware تنظیم کردیم وارد کنیم . منظور همان کد Hardware identifier میباشد
پایه DIR :
این پایه مربوط به زمانی هست که در مد تک سیگنال هستیم و میخواهیم جهت کانتر ( افزایشی یا کاهشی ) را به صورت نرم افزاری تعیین کنیم انتخاب میکنیم . دقت کنید که این پایه برای فعال کردن جهت جدید استفاده میشود به این صورت که یک ورودی بیت میگیرد و اگر این ورودی فعال شود مقدار جهت جدید با توجه به پایه NEW_DIR داده میشود چنانچه میخواهیم جهت افزایشی یا کاهشی کانتر را انتخاب کنیم میتوان این پایه را همواره یک داده و عدد NEW_DIR را تغییر داد .
پایه CV :
این پایه برای انتقال مقدار جدید کانتر می باشد . بدین صورت که اگر این پایه فعال شود هر مقدار که در پایه NEW_CV هست به مقدار CV ( که در بخش آدرس دهی رجیستر ID1000 به عنوان مثال تنظیم شده است ) منتقل می شود . به عنوان مثال از این پایه میتوان برای صفر کردن مقدار کانتر انکودر استفاده کرد . بدین صورت که در این پایه یک بیت آدرس دهی میکنید مثلا M10.0 سپس مقدار صفر را به پایه NEW_CV میدهید با فعال کردن M10.0 مقدار صفر در رجیستر کانتر انکودر ( CV ) یا همان آدرس سخت افزاری به طور پیش فرض ID1000 ریخته میشود . میتوان به جای M10.0 ورودی یک سنسور سخت افزاری مثلا I1.0 را بدهیم که این سنسور نقطه شروع حرکت محور باشد که همان حالت Homing را نیز اجرا نماید و هنگامی که محور حرکت به این سنسور برسد مقدار کانتر انکور صفر شود .
پایه RV :
این پایه برای فعال کردن انتقال مقدار NEW_RV به رجیستر RV یا همان رفرنس هست . همانطور که در بخش تنظیمات سخت افزاری توضیح دادیم میتوان اینتراپتی تعریف کرد که اگر مقدار فعلی کانتر انکودر یا همان CV با مقدار رجیستر رفرنس یعنی RV برابر شود برنامه اینتراپت بخورد و OB مربوط به این اینتراپت اجرا شود . حال اگر بخواهیم مقادیر مختلفی را داخل رفرنس قرار دهیم میتوان پایه Rv در این تابع را یک بیت آدرس دهی کنیم به عنوان مثال M10.1 و با فعال شدن این پایه مقداری که در رجیستر NEW_RV آدرس داده باشیم به رجیستر RV منتقل میشود .
پایه PERIOD :
این پایه زمانی احتیاج میشود که کانتر در مد فرکانس یا پریودیک باشد . پنانچه بخواهیم زمان پریدویک شمارش پالس ها برای محاسبه فرکانس یا پریودیک را تغییر دهیم از این پایه استفاده میکنیم . برای اینکار می بایست این پایه را یک ورودی بیت دهیم و با فعال شدن این پایه مقداری که در پایه NEW_ PERIOD هست به عنوان زمان پریود جدید در نظر گرفته میشود . این حالت فقط در مد فرکانس و پریودیک استفاده قرار میگیرد .
مقدار کانتر پالس در ورودی سخت افزاری که تعیین کردیم در دسترس می باشد ( به عنوان مثال به صورت دیفالت ID1000 برای کانال اول می باشد ) .
نکته خیلی مهم :
پس از تنظیم ورودی های سخت افزاری برای پالس های A و B می بایست طبق شکل ذیل زمان فیلتر برای این ورودی ها را
را روی مینیمم ترین حالت یعنی 0.1 میکرو ثانیه قرار دهید . در غیر اینصورت پالس ها به درستی شمارش نمیشود .!!!!!!
مثال 1 :
یک انکودر 1024 پالس به یک موتور متصل شده است این موتور به یک گیربکس با ضریب نسبت 5 به 1 متصل شده و در نهایت یک شفت با قطر 100 میلیمتر میچرخاند. این انکودر را به plc 1200 متصل کردیم مطلوبست محاسبه موارد ذیل :
1.فرکانس محور
2. rpm محور
3.سرعت خطی بر حسب m/min ( متر بر دقیقه )
حل :
در تنظیمات plc چون نهایتا ما سرعت را فقط میخواهیم مد تنظیمی را در مد فرکانس تنظیم میکنیم ( رجوع شود به بخش تنظیمات فرکانس در plc1200 ) . سپس در ID1000 ما فرکانس پالس انکودر را داریم .
برای محاسبه فرکانس محور ابتدا فرکانس موتور را محاسبه میکنیم به صورت ذیل :
برای محاسبه فرکانس موتور ابتدا باید فرکانس پالس انکودر را بر رزولوشن انکودر تقسیم کنیم بنابراین داریم :
در MD10 ما فرکانس موتور را داریم حال باید برضریب گیربکس تقسیم کنیم تا فرکانس محور را داشته باشیم :
در MD14 فرکانس محور را داریم . حال اگر بخواهیم rpm یا همان دور در دقیقه را داشته باشیم کافیه فرکانس را در عدد 60 ضرب کنیم :
برای محاسبه سرعت خطی بر حسب واحد متر بر دقیقه ابتدا باید محیط محور یا شفت را بدست بیاوریم
برای محاسبه محیط شفت بر حسب متر باید قطر شفت یا محور را بر حسب متر در عدد پی ضرب کنیم
میلی متر 0.314= 3.14 *0.1 = محیط شفت
برای محاسبه سرعت خطی کافیه سرعت محور بر حسب rpm را در محیط شفت یا محور ضرب کنیم قبل از آن باید ابتدا سرعت را به صورت عدد اعشاری تبدیل کنیم پس از آن در عدد محیط ضرب کنیم :
در نهایت سرعت خطی ( متر بر دقیقه ) را در MD26 داریم.
مثال 2 : یک انکودر با رزولوشن 2000 پالس به محور یک نوار نقاله متصل شده است انکودر را به plc1200 متصل کرده ایم روی این نوار نقاله یک شی به طول های متفاوت تولید میشود یک سنسور خازنی به طور ثابت در یک طرف نوار نقاله متصل شده است هنگامی که جسم تولید شده به این سنسور میرسد سنسور فعال میشود تا از جلوی آن عبور کند میخواهیم توسط انکودر و سنسور طول هر جسم را بر حسب میلیمتر حساب کرده و در HMI نمایش دهیم . (هر 500 پالس از انکودر معادل 1 میلیمتر حرکت روی نوار نقاله می باشد )
حل مثال 2 :
ابتدا می بایست در plc 1200 تنظیمات را روی حالت count و از نوع A/B که مربوط به انکودر هست تنظیم کنیم ( میتوانیم برای دقت بیشتر روی حالت 4 بار شمارش گذاشت اما در این مثال روی حالت عادی شمارش میگذاریم . رجوع شود به بخش تنظیمات انکودر در بخش plc1200 )
عدد انکودر را در ID1000 داریم برای اینکه موقعی عدد انکودر را شمارش کنیم که جسم جلوی سنسور هست بنابراین ورودی سنسور را به ورودی gate میدهیم و در بخش gate input آن را تنظیم میکنیم و آدرس ورودی ها را در بخش hardware inputs تنظیم میکنیم مطابق شکل :
حال تابع انکودر را فراخوانی میکنیم :
برای اینکه بتوانیم تابع انکودر را در مواقع لازم و در موقعی که جسم از کنار سنسور رد شد و برای جسم بعدی آماده شمارش شود از بیت M0.0 به عنوان ریست انکودر استفاده کردیم که در ادامه نحوه فعال شدن آن را بیان می کنیم با فعال شدن بیت M0.0 مقدار صفر که در پایه New_cv هست در مقدار کانتر یعنی ID1000 ریخته میشود .
حال باید مقدار کانتر یعنی ID1000 را بر اساس مقدار میلیمتر کالیبره کنیم و با فعال شدن ورودی سنسور gate باید کانتر مقدارش در رجیستر مربوط به طول جسم ریخته شود و کانتر ریست شود . برای کالیبره کردن باید مقدار کانتر را طبق صورت مثال بر هر 500 پالس معادل 1 میلیمتر بود تقسیم کنیم بنابراین داریم :
در MD30 ما مقدار طول جسم را بر حسب میلیمتر هنگامی که با لبه پایین ورودی سنسور هست داریم یعنی هنگامی که جسم کاملا از جلوی سنسور رد میشود . سنسور غیر فعال میشود و با لبه پایین آن مقدار پالس شمارش شده بر عدد 500 تقسیم میشود و حاصل به عنوان
طول جسم بر حسب میلیمتر محاسبه شده در MD30 منتقل میشود .
سپس باید با لبه بالای سنسور بیت مربوط به ریست کانتر انکودر فعال شود بنابراین داریم :
در اینصورت هربار جسم از جلوی سنسور در حال عبور هست ابتدا کانتر ریست میشود و در حالی که سنسور فعال هست کانتر شروع به شمارش میکند و در پایان که جسم از جلوی سنسور میگذرد عدد طول جسم محاسبه شده و در رجیستر مربوطه نمایش داده میشود .
حالا اگر بخواهیم کل طول جسم تولید شده را بر حسب میلیمتر داشته باشیم میتوان در هنگامی که طول جسم محاسبه شد هر بار با لبه بالا یا پایین سنسور گیت مقدار طول هر جسم را با یک رجیستر جمع کرد و در خود آن رجیستر ذخیره کرد :
بنابراین ما طول آخرین جسم تولید شده را انلاین همواره در MD30 داریم و طول کل جسم تولید شده را در MD40 داریم که میتوانید به جای MD40 یک حافظه از دیتا بلاک که ماندگار هست تعیین کنید که با خاموش شدن برق plc مقدار کل تولید شده ریست نمیشود.
مثال 3: یک انکودر با تعداد پالس 1000 پالس در یک دور به یک محور نوار نقاله متصل کردیم روی این نوار نقاله یک ورق مقوا به طور پیوسته در حال حرکت هست میخواهیم هنگامی که شروع به شمارش شد یک کاتر که با یک شیر برقی فرمان میگیرد برش ها باید هر باید به ترتیب 50 سانت و 100 سانت و 150 سانتی متر پشت سر هم باشد یعنی یکبار 50 سانتی بار دوم 100 سانتی متر و بار سوم 150 سانتی متر از مقوا را برش دهد و مجددا از 50 سانتی متر شروع کند هر بار برای فرمان برش میبایست plc به مدت 500 میلی ثانیه به کاتر فرمان دهد و سپس فرمان را قطع کند . هر 2000 پالس از انکودر معادل یک سانت می باشد . این برنامه را در plc1200 پیاده سازی کنید .
حل مثال 3 :
دقت کنید که در این مثال ما با استفاده از مقایسه کننده ها نمیتوانیم مقدار انکودر را مقایسه کنیم به دلیال اینکه دقت کار بالا میخواهیم و این کار با مقایسه کننده های عادی امکان پذیر نیست . بنابراین ما از اینتراپت استفاده میکنیم . بنابراین باید از اینتراپت مخصوص انکودر استفاده کنیم و مقدار پالس معادل سانتی متر مورد نظر را در پایه RV لود کنیم و هر بار که عمل اینتراپت انجام شد میبایست مجددا مقدار RV را تغییر دهیم این مثال بسیار پرکاربرد می باشد و خیلی در صنعت مشابه این مثال استفاده میشود :
ابتدا پالس های معادل هر سانتی متر خواهسته شده را محاسبه میکنیم :
ابتدا پالس های معادل هر سانتی متر خواهسته شده را محاسبه میکنیم :
( طبق اطلاعات داده شده هر 2000 پالس معادل یک سانتی متر است )
100000 = 50 × 2000
برای 50 سانتی متر مقدار انکودر باید به مقدار 100،000 پالس برسد
200000 = 100 × 2000
برای 100 سانتی متر مقدار انکودر باید به مقدار 200،000 پالس برسد
300000 = 150 × 2000
برای 150 سانتی متر مقدار انکودر باید به مقدار 300،000 پالس برسد
بنابراین ما باید مقدار انکودر را شمارش کنیم و در هر بار در سه نقطه متفاوت مقدار Rv را که به عنوان رفرنس برای اینتراپت هست مقادیر 100،000 ، 200،000 و 300،000 منتقل کنیم تا هنگامی که مقدار کانتر یعنی CV با مقدار RV برابر شد ( CV=RV ) اینتراپت مورد نظر را اجرا نماید دقت کنید در اینتراپت ما باید خروجی مورد نظر شیر برقی کاتر را فعال کنیم و سپس در بیرون از ob اینتراپت تایمر مربوطه برای ریست کردن آن را مینویسیم سپس در ادامه اینتراپت ما از مقایسه کننده استفاده میکنیم تا هر بار مقدار جدید Rv را در رجیستر مربوطه که در تابع به مقدار NEW-RV دادیم را منتقل کنیم تا اینتراپت بعدی با توجه به مقدار جدید RV اجرا شود .
مراحل کار را به ترتیب ذیل انجام میدهیم :
1.ابتدا طبق موارد قبل تنظیمات انکودر را انجام میدهیم .
2. در بخش سخت افزار و در زیر شاخه همان hsc برای تنظیم و فعال کردن اینتراپت همانطور که قبلا توضیح داده شد وارد بخش Event configuration میشویم و مطابق شکل ob اینتراپتی را تنظیم میکنیم :
با توجه به مراحل بالا اینتراپت مربوط به انکودر OB40 ایجاد میشود که در ادامه برنامه مربوط به آن را توضیح میدهیم
3. پس از تنظیم موارد سخت افزاری انکودر و ایجاد OB مربوط به اینتراپت وارد OB1 میشویم و تابع انکودر را فرخوانی میکنیم :
در برنامه بالا M0.0 برای ریست کانتر می باشد و رجیستر MD50 برای بارگذاری مقادیر مقایسه کانتر انکودر می باشد . در ابتدا باید با بیت M1.0 که در بخش هاردور به عنوان بیت first scan تنظیم کرده ایم ( سیکل اول اسکن plc فقط ست می باشد ( مقدار اولیه 100000 را برای 50 سانتی متر بارگذاری میکنیم :
در خط بعدی برای خروجی کاتر که Q0.0 در نظر گرفته ایم یک تایمر on delay میگذاریم که هر گاه کاتر در OB40 فعال شد پس از 500 میلی ثانیه آن را ریست کند .
حال برنامه مهم را در OB40 مخصوص اینتراپت کانتر انکودر به صورت ذیل مینویسیم :
در نتورک 1 ، خروجی Q0.0 که مربوط به کاتر می باشد فعال میکنیم که همانطور که در OB1 نوشتیم پس از 500 میلی ثانیه خروجی ریست میشود . در ادامه با مقایسه کننده عدد مربوط به اینتراپت بعدی که در رجیستر MD50 به پایه RV تابع انکودر دادیم بارگذاری
می شود . بار اول در عدد 100000 اینتراپت اجرا میشود سپس چون مقدار 100000 در رجیستر MD50 می باشد عدد بعدی 200000 برای 100 سانتی متر می باشد و بار دوم که اینتراپت در عدد 200000 فعال میشود اینبار عدد 300000 در رجیستر MD50 ریخته میشود و سپس بار سوم که اینتراپت برای 150 سانتی متر فعال میشود مجددا عدد 100000 در رجیستر MD50 بارگذاری میشود .
ب) استفاده از تابع CTRL_HSC_EXT :
برای استفاده از تمامی امکانات تابع انکودر از تابع CTRL_HSC_EXT استفاده میکنیم . این تابع تمامی امکانات لازم را به ما میدهد . یکی از کاربرد این تابع استفاده پایه capture می باشد . این پایه که در بخش هاردور می باشد فقط با این تابع قابل اجرا و استفاده می باشد . برای فراخوانی این تابع در OB1 از بخش COUNTING مطابق شکل تابع را فراخوانی میکنیم :
پایه های این تابع به شرح ذیل می باشد :
پایه HSC : دراین پایه همانند تابع قبلی HSC می بایست شماره HSC مورد نظر را که در بخش hardware تنظیم کردیم وارد کنیم . منظور همان کد
Hardware identifier میباشد .
پایه CTRL : در این پایه می بایست یک بخش STATIC از یک DATA BLOCK را که مخصوص HSC هست بیاوریم . برای این منظور به ترتیب ذیل عمل میکنیم :
1.ابتدا یک DATA BLOCK دلخواه به صورت عمومی ایجاد میکنیم :
2. وارد دیتا بلاک میشویم و در قسمت DATA TYPE عبارت (( HSC_COUNT )) را تایپ میکنیم و اینتر میزنیم .
یک STATIC ایجاد میشود . دقت کنید که حتما می بایست عبارت HSC_COUNT را تایپ کنید وبه صورت تایپ آماده قابل جستجو و انتخاب نیست . اگر این آرایه را باز کنید شامل پایه های مهمی می باشد که در شکل صفحه بعد مشاهده میکنید .
یک STATIC ایجاد میشود . دقت کنید که حتما می بایست عبارت HSC_COUNT را تایپ کنید وبه صورت تایپ آماده قابل جستجو و انتخاب نیست . اگر این آرایه را باز کنید شامل پایه های مهمی می باشد که در شکل صفحه بعد مشاهده میکنید .
پس از انجام موارد فوق تمامی موارد در دیتا بلاک مورد نظر قابل دسترسی می باشد . دقت کنید که حتما هر موردی که خواستیم فعال شود می بایست پایه مربوط به Enable آن مورد را در دیتا بلاک فعال کنیم مثلا خود کانتر را اگر بخواهیم فعال کنیم باید پایه EnHSC را ست کنیم.
یکی از کاربردهای مهم این تابع برای هنگامی است که از پایه capture بخواهیم استفاده کنیم . با مثال ذیل کاربرد این پایه را بهتر می توانید درک کنید .
مثال کاربردی از پایه capture در انکودر :
بر روی یک دستگاه کاتر لفاف نایلون می خواهیم هنگامی که سنسور چشمی فتوسل روی لفاف نایلون را دید عدد کانتر انکودر را در رجیستری ثبت کنیم بدون اینکه کانتر انکودر را ریست کنیم .
حل مثال :
برای اینکار چون سرعت ورودی سنسور بسیار هست در حقیقت فرکانس سنسور زیاد هست بنابراین نمیتوان از لبه بالای سنسور استفاده کنیم در برنامه OB1 و طوری بنویسیم که با لبه بالا عدد کانتر را در رجیستری انتقال دهد این کار دقیق نیست و قطعا خطا داریم اما چنانچه بخواهیم این کار را با دقت انجام دهیم از تابع CTRL_HSC_EXT استفاده میکنیم برای این منظور طبق موارد بالا تابع را تعریف میکنیم . و ورودی سنسور چشم برای فتوسل را به پایه capture میدهیم . ابتدا HSC را در بخش هاردور فعال کرده طبق موارد قبلی و سپس پایه capture را از بخش هاردور بخش HSC فعال میکنیم . ( این پایه برای ورژن های بالاتر فریم ورک plc هست بنابراین اگر در برخی plc ها موجود نبود به دلیل ورژن انتخابی plc می باشد )
سپس از بخش Hardware inputs آدرس ورودی سنسور را برای پایه capture input مشخص می نمائید :
دقت کنید که برای ورودی capture نیز همانند ورودی های پالس A و B انکودر می بایست فیلتر زمانی را در بخش Digital Inputs روی حداقل زمان تنظیم کنید .
سپس در OB1 همانند مواردی که توضیح داده شد . تابع CTRL_HSC_EXT و دیتا بلاک مروبوطه را ایجاد میکنیم.
حال باید در دیتا بلاک مروبطه که به پایه CTRL متصل کردیم پایه های EnHSC و EnCapture را حتما فعال کنیم . برای این کار میتوانیم این دو بیت را همواره ست کنیم .
با اجرای برنامه هر بار که سنسور چشمی فتوسل را ببیند با لبه بالای ورودی عدد انکودر در رجیستر CapturedCount در دیتا بلاک مربوط به کانتر در بخش HSC_COUNT که به پایه CTRL متصل کردیم ثبت میشود .
توضیح پایه Sync input :
این پایه همانند پایه ریست در تابع انکودر می باشد . در حقیقت ریست سخت افزاری کانتر انکودر می باشد . چنانچه این پایه را در بخش HSC در تابع انکودر فعال کنیم . و یک ورودی به آن اختصاص دهیم می توان این ورودی را به صورت Normaly open (Active High ) یا به صورت Normaly close ( Active Low ) تعریف نمود . چنانچه این پایه فعال شود کانتر انکودر ریست و صفر می شود .
برای مطالعه و یادگیری PLC S7-1200 و سایر پی ال سی های دیگر زیمنس، از آموزش PLC زیمنس ما میتوانید استفاده کنید.
راههای ارتباطی نیک صنعت:
- تماس با نیک صنعت: 021:87700210
- واحد فروش نیک صنعت: 09197872783
- واحد تعمیرات نیک صنعت: 09197872789
- ایمیل نیک صنعت: info@nicsanat.com
- آدرس شرکت: تهران، خیابان بهشتی، خیابان میرعماد، کوچه پیمانی(یازدهم)، پلاک 17
نظرات کاربران