اتصال انکودر به PLC S7-300
اتصال انکودر افزایشی به PLC S7 300 کامپکت زیمنس: برای اتصال انکودر به plc های سری 300 احتیاج هست که […]
اتصال انکودر افزایشی به PLC S7 300 کامپکت زیمنس:
برای اتصال انکودر به plc های سری 300 احتیاج هست که plc از نوع کامپکت باشد. چنانچه Plc s7 300 از نوع کامپکت نبود از کارت fm350 استفاده میکنیم. در این قسمت ما نحوه اتصال انکودر به plc سری کامپکت 300 را توضیح میدهیم.
بنا به نوع plc تعداد کانالهایی که میشود به آن انکودر یا سنسور high speed متصل کرد. به صورت ذیل می باشد:
همچنین ماکزیمم فرکانسی که پالس های انکودر در plc s7 300 میشود شمارش کرد به صورت ذیل می باشد :
برای اتصال انکودر به plc s7 300 کامپکت مراحل ذیل را باید انجام دهید:
1.ابتدا باید پالس های A و B انکودر را که پالس 24 ولت میدهند. به صورت ذیل با توجه به نوع plc به ورودی های مورد نظر متصل کنیم.
شماتیک سخت افزاری plc s7 314c کامپکت
جدول 2
جدول 3
در جدول های بالا سه نوع Plc s7 300 که کامپکت می باشند مشخص هست و هر کانال مشخص هست که پالس A و B انکودر باید به کدام ورودی متصل شود.
مثلا در plc 314 c اگر از کانال صفر (اولین کانال) بخواهیم استفاده کنیم. می بایست پالس A را به ورودی i0.0 و پالس B به ورودی i0.1 متصل میشود.
(البته منظور اولین ورودی دیجیتال هست لزوما آدرس دیجیتالها ممکن هست از بایت صفر شروع نشود اما از لحاظ سخت افزاری بایت اول ورودی مد نظر هست یعنی کانکتور X2 شماره های 2و 3 در شماتیک سخت افزاری توجه کنید)
2. در برنامه سیماتیک منیجر وارد بخش hardware میشویم و cpu مورد نظر را انتخاب میکنیم و روی بخش count کلیک میکنیم:
3. در پنجره باز شده در قسمتchannel میتوانید شماره کانال مورد نظر را انتخاب کنید و در بخشoperation mode می توانید انتخاب کنید که در چه مدی کار کنید.
اولین مد یعنیcount continuously برای همان حالت شمارش مداوم پالس ها هست و مدfrequency counting برای بدست آوردن فرکانس پالس انکودر هست.
هر دو مد را توضیح میدهیم.
الف) count continuously
این مد برای شمارش پالس به طور مداوم هست و از این مد برای پوزیشن استفاده میکنیم.
اگر این مد را در کانال مورد نظر انتخاب کنید یک ستون به نام count به پنجره قبلی اضافه میشود:
روی سربرگcount کلیک کرده تا تنظیمات مورد نظر انکودر را انجام دهید :
در پنجره باز شده مهمترین قسمت این هست که نوع ورودی سیگنالی که میخواهیم پالس آن شمارش شود را تعیین کنید:
برای این کار از قسمت input سربرگ signal evaluation باید گزینه مورد نظر را انتخاب کنید. اگر شما یک سنسور دیجیتال دارید که میخواهید پالس آن شمارش شود و یک ورودی به عنوان جهت شمارش یا همان direction تعیین کنید باید گزینه اول یعنی pulse direction را تعیین کنید و طبق جدولی که برای نوع plc بود ورودی های مورد نظر را یعنی pulse و direction را متصل کنید. اما اگر انکودر دارید باید گزینه های بعدی یعنی Rotary encoder را انتخاب کنید.
برای انکودر 3 حالت وجود دارد که طبق توضیح میتوان حالت single یا double یا quadruple را انتخاب کرد. در حالت Single فقط لبه بالای پالس A لبه خوانده میشود و از پالس B جهت تغییر حرکت استفاده میشود. در این حالت تعداد پالس ها در یک دور برابر هست با تعداد رزولوشن انکودر یا همان تعداد پالس انکودر در یک دور اما در حالت double لبه های بالا و پایین پالس A خوانده میشود و دقت دو برابر میشود و از پالس B باز برای تغییر جهت حرکت استفاده میشود.
در این حالت تعداد پالس خوانده شده یا شمارش شده در یک دور 2 برابر رزولوشن انکودر خواهد بود. اما در حالت quadruple دقت 4 برابر میشود و لبه های بالا و پایین پالس A و لبه های بالا و پایین پالس B هر دو خوانده میشود و همچنین باز از پالس B برای تعیین جهت حرکت استفاده میشود. در این صورت تعداد پالس های خوانده شده در یک دور از حرکت انکودر 4 برابر رزولوشن انکودر می باشد .
بنا به دقت مورد نیاز ما یکی از این سه حالت را استفاده میکنیم .
چنانچه یک ورودی به نام GATE داشته باشید که در صورت فعال شدن آن ورودی پالس های انکودر شمارش شود میتوانید تیک Hardware gate را مطابق شکل تیک بزنید اما چنانچه از طریق نرم افزار خواستید این تیک را می توانید بردارید .
دقت داشته باشید که اگر تیک مورد نظر را بزنید می بایست ورودی gate مورد نظر را طبق جدول های 1و 2 یا 3 که در صفحات قبل بود به ورودی دیجیتال plc متصل کنید.
چنانچه میخواستید جهت شمارش پالس ها به طور معکوس باشد. یعنی در جهت ساعتگرد کانتر مورد نظر کاهشی و در جهت پادساعتگرد کانتر مورد نظر افزایشی باشد تیک count direction inverted را بزنید اما در غیر اینصورت به صورت دیفالت شمارش در جهت ساعتگرد افزایشی و در خلاف جهت کاهشی خواهد بود.
ب) frequency counting:
چنانچه مد فرکانس را خواسته باشید میتوانید این مد را انتخاب کرده و پس از انتخاب سربرگ frequency counting در پنجره مورد نظر مطابق شکل ظاهر میشود.
روی سربرگ frequency counting کلیک کرده وارد تنظیمات آن میشوید:
در قسمت input و signal evaluation میتوانید نوع ورودی رو تعیین کنید که اگر یک سنسور دیجیتال فرکانس بالا داشتید میتوانید
حالت pulse/direction را انتخاب کنید و اگر انکودر داشتید میتوانید حالت Rotary encoder single را انتخاب کنید .
بخش hardware gate و بخش count direction invert نیز همانند بخش count قبلی تنظیم میشود.
دقت داشته باشید که فرکانس محاسبه شده به صورت میلی هرتز می باشد و چون تا ماکزیمم 60 کیلو هرتز میتواند محاسبه کند بنابراین عدد فرکانس میتواند تا عدد 60 میلیون میلی هرتز باشد . در بخش integration time شما میتوانید زمان آپدیت محاسبه فرکانس را وارد کنید که میتواند عددی بین 1 تا 10000 میلی ثانیه باشد که به صورت دیفالت 100 میلی ثانیه می باشد که عدد مناسبی می باشد .
پس از تنظیمات مورد نظر ok را میزنید و بخش hardware را save و کامپایل میکنید .
در قسمت بعد نحوه نوشتن برنامه در ob مورد نظر را توضیح میدهیم .
4. پس از انجام تنظیمات در بخش hardware وارد ob1 شده و یا در fc دلخواه برنامه را نوشته و در ob1 فرخوانی نمایید . با توجه به مد انتخابی مورد نظر count continuously ویا frequency counting از مسیر ذیل sfb مورد نظر را فراخوانی میکنیم .
ابتدا مد count continuously را در نظر میگیریم . در اینصورت sfb47 را برای مد شمارش پالس ها از مسیر ذیل انتخاب کرده و فراخوانی مینمایید .
مسیر انتخاب sfb47:
پس از انتخاب sfb47 و فراخوانی در برنامه یک دیتا بلاک به ان اختصاص دهید که موارد ورودی و خروجی در دیتابلاک مورد نظر ایجاد شود البته میتوانید جداگانه نیز پایه های ورودی و خروجی تابع را آدرس دهی یا مقدار دهید . مانند شکل زیر:
توضیح پایه های مهم تابع sfb47 :
در این قسمت پایه های مهم و کاربردی تابع را توضیح میدهیم .
پایه LADDR : در این قسمت باید شروع آدرسی که در بخش hardware برای بخش count تعیین شده را به صورت کد hex وارد کنیم به صورت دیفالت شروع آدرس در بخش hardware عدد 768 هست که این عدد در حوزه کد هگز میشود 300 بنابراین باید به صورت W#16#300 وارد کنیم چنانچه آدرس را در بخش count تغییر دادیم باید کد هگز شروع آدرس را در این قسمت تابع وارد کنیم.
پایه CHANNEL: در این پایه شماره کانالی که در آن انکودر نصب شده و در بخش hardware تنظیم کردید را وارد کنید البته ممکن هست ما چند کانال را انکودر وصل کنیم در این صورت باید به تعداد کانال ها تابع sfb47 را فراخوانی کرده اما در هر کدام بخش پایه LADDR عدد ثابت هست چون شروع آدرس در همه یکی هست اما عدد CHANNEL متفاوت هست . و به نوع PLC کامپکت مربوط می باشد مثلا در PLC 312 ما فقط 2 کانال داریم بنابراین این عدد می توان 0 یا 1 باشد اما در PLC 314 C ما 4 کانال داریم و این عدد میتواند بین 0 تا 3 بیانگر کانال اول تا چهارم باشد.
پایه SW- GATE : این پایه بسیار مهم می باشد این پایه در حقیقت GATE نر م افزاری می باشد اگر ما در تنظیمات سخت افزاری پایه GATE نداریم و ورودی سخت افزاری GATE نداریم میتوانیم یک بیت نرم افزاری تعیین کنیم که در صورت فعال بودن این بیت عمل شمارش پالس ها انجام گردد در صورت غیر فعال بودن این بیت عمل شمارش انجام نمیشود . اگر تمایل داشتید که همواره عمل شمارش توسط انکودر در برنامه انجام شود یک بیت همواره 1 را به این پایه نسبت دهید در تصویر ما بیت M0.0 را در نظر گرفتیم .
پایه JOB_REQ : این پایه برای انجام فعالیت های خاص می باشد بیشترین کاربرد این هست که بخواهیم مقدار شمارش انکودر را صفر کنیم در این صورت یک بیت به این پایه اختصاص میدهیم این پایه حساس به لبه بالا می باشد که اگر فعال شود با توجه به دیگر پایه های JOB-ID و JOB-VAL این کار انجام میشود . برای مثال ما بیت M0.1 را برای صفر کردن مقدار انکودر در نظر گرفتیم . میتوانیم این بیت را در HMI قرار داد و اپراتور با فعال کردن این بیت مقدار کانتر شمارش انکودر را صفر کند . دقت کنید که این بیت همواره فعال نماند و فقط برای یک لحظه فعال شود چون همانطور که گفتیم این پایه حساس به لبه بالا می باشد .
پایه JOB_ID : در این پایه کد مورد نظر کار خاص را به صورت کد هگز وارد مینماییم . چون ما میخواهیم که از این پایه برای صفر کردن مقدار شمارش استفاده کنیم کد W#16#1 را وارد میکنیم این کد ، کد نوشتن در مقدار COUNTVAL که همان مقدار شمارش پالس انکودر هست می باشد .
پایه JOB_VAL : در این پایه مقداری که میخواهیم عمل JOB با توجه به JOB_ID انتخاب کردیم قرار میدهیم . این پایه یک مقدار DOUBLE INTIGER باید بدهیم بنابراین می توانیم عدد صفر را به صورت L#0 به صورت عدد اینتیجر 32 بیتی همواره دهیم تا عمل صفر شدن انکودر با توجه به کد w#16#1 در پایه JOB_ID و فعال شدن پایه JOB_REQ انجام دهیم و یا میتوانیم یک MD اختصاص دهیم که مثلا ما MD10 را در برنامه داده ایم و میتوانیم عدد دلخواهی را در آن بریزیم تا عمل شمارش از این عدد انجام شود .
پایه COUNTVAL : این پایه همان مقدار شمارش پالس های انکودر می باشد که می توان یک حافظه 32 بیتی از نوع DOUBLE INTIGER به آن اختصاص داد و عدد شمارش پالس های انکودر را داشته باشیم که با توجه به توضیحات قبلی میتوان آن را در هر لحظه صفر کرد . چنانچه انکودر به جهت ساعتگرد حرکت کند این مقدار شروع به افزایش میکند و در صورت چرخش به جهت پادساعتگرد این مقدار کاهش پیدا میکند . ما در عکس MD20 را به عنوان مثال اختصاص دادیم .
مثال 1 : انکودری داریم که رزولوشن آن 1000 پالس می باشد . این انکودر را به یک محور بال اسکرو متصل کردیم و به کانال اول یک PLC314C متصل کردیم .
اگر 10 سانت حرکت محور معادل 34 دور حرکت انکودر باشد . برنامه ای در PLC 300 بنویسید که مقدار حرکت انکودر را به صورت میلیمتر در MD20 داشته باشیم . همچنین اگر محور به سنسور پراکسی سوئیچ که به ورودی I1.0 متصل هست رسید مقدار انکودر صفر شود (نقطه شروع حرکت می باشد در حقیقت هومینگ محور نیز این سوییچ می باشد)
حل مثال : پس از تنظیمات بخش HARDWARE ابتدا ضریب مورد نظر پالس را بدست میاوریم و در ادامه در ob1 برنامه مورد نظر را مینویسیم .
مقدار پالس انکودر در حرکت 100 میلی متر 34000 = 1000 × 34
ضریب پالس انکودر در حرکت 1 میلی متر 340 = 100 ÷ 34000
بنابراین اگر مقدار پالس شمارش شده انکودر را همواره تقسیم بر 340 کنیم مقدار حرکت را بر حسب میلی متر داریم اگر ضریب بدست آمده اعشاری باشد میتوانیم مقادیر پالس شمارش شده را در به حوزه اعشاری تبدیل کرده و محاسبات را در حوزه اعشار انجام میدهیم . با تجه به توضیحات برنامه به صورت ذیل می باشد .
همانطور که در شکل زیر میبینید ابتدا بیت M0.0 را یک بیت همواره set تعریف میکنیم .
سپس sfb47 را فراخوانی میکنیم و آدرس کانال اول را میدهیم و برای اینکه همواره پالس های انکودر را شمارش کند به پایه sw_gate بیت M0.0 را میدهیم .
برای اینکه با ورودی سنسور I1.0 کانتر ریست شود .
آن را به پایه JOB_REQ میدهیم و پایه JOB_ID را کد w#16#1 میدهیم که در حالت نوشتن در COUNTVAL باشد و مقدار صفر را به پایه JOB_VAL میدهیم . مقدار شمارش کانتر را هم که در پایه COUNTVAL هست میریزیم در MD4 . سپس در نتورک بعد مقدار MD4 را بر عدد 340 تقسیم کردیم و حاصل را در MD20 میریزیم .
مقدار عددی MD20 همان پوزیشن محور بر حسب میلی متر هست . حال میتوان از آن در برنامه یا در HMI استفاده کرد.
مثال 2 : فرض کنید بخواهیم در مثال 1 ،محور که با درایو راه اندازی میشود و در پوزیشن مثلا 500 میلی متری محور را نگه داریم میتوانیم مثلا تا فاصله 400 میلی متری با فرکانس 50 هرتز حرکت کند و پس از آن در دو یا چند مرحله فرکانس درایو را کاهش دهیم و در نهایت محور را در 500 میلی متری نگه داریم .
برای اینکار از مقایسه کننده ها استفاده میکنیم فرض کنید مقدار فرکانس را در خروجی PQW100 به صورت ولتاژ 0 تا 10 میخواهیم بریزیم بنابراین ابتدا مقدار فرکانس را از 0 تا 50 هرتز در MD40 میریزیم سپس با استفاده از FC106 آن را به خروجی آنالوگ تبدیل میکنیم .
حل مثال 2 : برنامه ذیل را مینویسیم :
در برنامه بالا در نتورک 4 ، پوزیشن محور که اسکیل کردیم بر حسب میلی متر رو با عدد 400 میلی متر مقایسه کرده در صورت کمتر بودن فرکانس 50 را در MD40 که مربوط به فرکانس اینورتر محور هست منتقل کردیم که محور با بیشترین سرعت حرکت کند سپس در نتورک های 5و 6و 7 به ترتیب مقدار فرکانس را با توجه به پوزیشن محور کمتر تا به مقدار 500 میلیمتر که رسید فرکانس را صفر کردیم تا موتور بایستد در نتورک آخر نیز از FC106 استفاده کردیم تا مقدار رجیستر رفرنس فرکانس یعنی MD40 را به آنالوگ خروجی مورد نظر تبدیل کند .
مد frequency counting :
پس از تنظیمات سخت افزاری برای این مد در ob1 اینبار از مسیر ذیل تابع sfb48 را انتخاب میکنیم وفراخوانی می نماییم :
مسیر انتخاب sfb48 :
Libraries > standard library > system function Blocks > sfb48
پس از انتخاب sfb48 و فراخوانی در برنامه یک دیتا بلاک به ان اختصاص دهید که موارد ورودی و خروجی در دیتابلاک مورد نظر ایجاد شود البته میتوانید جداگانه نیز پایه های ورودی و خروجی تابع را آدرس دهی یا مقدار دهید. مانند شکل ذیل :
تابع sfb48 دقیقا مشابه sfc47 می باشد به جز کدهای JOB_ID که هر کدام کدهای مخصوص خود دارد و اینکه این تابع یک پایه اضافه تر از sfb47 دارد و اون پایه MEAS_VAL هست . این پایه مقدار فرکانس پالس انکودر را به صورت آنلاین در زمان پریودی که تعیین شده ( در بخش سخت افزار مثلا 100 میلی ثانیه تعیین شده ) را به صورت عدد DOUBLE INTIGER با دقت میلی ثانیه نشان میدهد . همچنین تعداد پالس شمارش شده را نیز همانند تابع SFC47 در پایه COUNTVAL میتوانید داشته باشید . دقت داشته باشید برای فعال بودن تابع حتما پایه SW_GATE همواره فعال باشد.
مثال 3: یک انکودر را با رزولوشن 500 پالس را به یک موتور متصل میکنیم و پالس های انکودر را به PLC 314C متصل کردیم. مطلوبست محاسبه فرکانس موتور بر حسب هرتز و سرعت موتور برحسب RPM به ترتیب در رجیسترهای MD10 و MD20 به صورت عدد صحیح قابل نمایش در HMI بدست بیاورید.
حل مثال: برای این کار ابتدا SFB48 را فراخوانی کرده و مقدار فرکانس پالس انکودر رااز پایه MEAS_VAL به MD30 میدهیم .
سپس چون رزولوشن انکودر 500 هست و هدف محاسبه فرکانس موتور هست این مقدار را ابتدا تقسیم بر 500 میکنیم سپس مقدار فرکانس موتور بر حسب میلی هرتز بدست میاید . برای اینکه این مقدار برحسب هرتز باشد عدد حاصل را بر 1000 تقسیم مینماییم . و حاصل نهایی را در MD10 منتقل میکنیم . برای بدست آوردن RPM موتور باید فرکانس موتور بر حسب هرتز را در عدد 60 ضرب کنیم و مقدار حاصل را در MD20 منتقل کنیم . این برنامه به صورت ذیل می باشد :
راههای ارتباطی نیک صنعت:
- تماس با نیک صنعت: 87700210
- واحد فروش نیک صنعت: 09197872783
- واحد تعمیرات نیک صنعت: 09197872789
- ایمیل نیک صنعت: info@nicsanat.com
- آدرس شرکت: تهران، خیابان بهشتی، خیابان میرعماد، کوچه پیمانی (یازدهم)، پلاک 17
نظرات کاربران