تالار گفتگوی سایت مهندس ماهر

Notifications
Clear all

محاسبه زمان اجرای برنامه PLC و نمایش روی Trend  

  RSS

Hamid
(@hamid)
Estimable Member
عضو شده: 5 سال قبل
ارسال‌ها: 126
۰۶/۱۰/۱۴۰۱ ۱۰:۲۰ ب.ظ  

درود بر همکاران

اگر در PLC  چند OB  داشته باشیم مانند OB1  و OB35  و OB34  و ... که CPU  همه را پردازش می کند  و بخواهیم زمان اجرای برنامه در هر کدام را داشته باشیم   و ازش ترند بگیریم چه روشی را پیشنهاد می کنید

مرسی


نقل‌قول
amir omidi
(@amiromidi)
Trusted Member
عضو شده: 7 سال قبل
ارسال‌ها: 56
۰۷/۱۰/۱۴۰۱ ۱۱:۴۶ ق.ظ  

درود بر شما

می توان از متغیر های محلی با نام OB1_PREV_CYCLE (برای OB1) استفاده نمود و آن ها را به مموری وردها یا دیتا بلاک منتقل کرد و در WINCC  ان ها را آرشیو و به ترند تبدیل نمود.

برای OB های سیکلی، متغیرهای محلی OB35_EXC_FREQ بازه زمانی فراخوانی ob را به ما میدهد و زمان اجرای برنامه را نمیدهد که شاید با برنامه نویسی بتوان این زمان را بدست آورد.

موفق باشید.


پاسخنقل‌قول
Hamid
(@hamid)
Estimable Member
عضو شده: 5 سال قبل
ارسال‌ها: 126
۰۷/۱۰/۱۴۰۱ ۵:۰۳ ب.ظ  

@amiromidi

سپاس از شما . مشکل اصلیم روش برنامه نویسیه در Cyclic Interrupts


پاسخنقل‌قول
kolahi
(@kolahi)
Estimable Member
عضو شده: 7 سال قبل
ارسال‌ها: 234
۱۰/۱۰/۱۴۰۱ ۸:۰۷ ب.ظ  

در S7-1200/1500  از اطلاعات لینک زیر استفاده کنید

 

https://support.industry.siemens.com/cs/document/87668055/for-s7-1200-s7-1500-how-do-you-measure-the-runtime-of-the-complete-program-subprograms-or-specific-organization-blocks-?dti=0&lc=en-WW

 

در S7-300/400   برای زمان  اجرای OB1  همان روشی که آقای مهندس  امیدی گفتن  بهترین روشه

برای زمان اجرای OB35  روش بالایی را نداریم پارامتر OB1_PREV_CYCLE  در این OB ها نیست و OB35_EXC_FREQ هم فقط عدد تنظیمی برای اجرای این OB  ها را نشون میده . راه حل اینه که زمان در ابتدای برنامه OB35  ثبت بشه و در انتهای برنامه هم ثبت بشه بعدش اختلاف اونا حساب بشه تا  زمان پردازش برنامه  محاسبه بشه .  فانکشن های آماده برای این منظور هست.  نمونه اش دو فانکشن در لایبراری CFC  هست  که در عکس پیوست می بینید. Time_BEG را در اول OB35    صدا بزنید خروجیش زمان فعلی را ثبت می کنه . Time_END  را در انتهای برنامه OB35  صدا بزنین و به ورودیش  زمان ثبت شده قبلی را بدین  این فانکشن اختلاف دو زمان را محاسبه می کنه و نتیجه را بهتون میده که می تونید ازش ترند بگیرید یا ماکزیممش را حساب کنید .  با توجه به زمان کوتاه و تغییرات زیادی که ممکنه سیکل اسکن داشته باشه حتی اگر ترند را روی Upon change  تنظیم کنید تغییرات درست دیده نمیشه بنابراین بهتره همیشه ماکزیمم را مانیتور کنید . برای ماکزیمم گیری جنس متغیر ها را DINT  بگیرید تا بشه کار محاسباتی  روش انجام داد مثلا می تونید کد SCL  زیر را در یک فانکشن بنویسید

FUNCTION_BLOCK FB10

 

VAR_INPUT

val : DINT;

END_VAR

VAR_OUTPUT

MX :DINT;

END_VAR

 

IF val> mx THEN mx:=val; END_IF;

 

END_FUNCTION_BLOCK

 

 

موفق باشید

 


amir omidi پسندید
پاسخنقل‌قول
Hamid
(@hamid)
Estimable Member
عضو شده: 5 سال قبل
ارسال‌ها: 126
۱۲/۱۰/۱۴۰۱ ۵:۳۸ ب.ظ  

@kolahi

مرسی از وقتی که گزاشتین

فکر میکردم ساده است ولی با توضیحات خوب شما معلومه کار داره


پاسخنقل‌قول
Share: