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

Notifications
Clear all

برنامه نویسی برای فالت شبکه پروفی باس در OB86 به زبان SCL  

  RSS

mohamad reza maher
(@mohandesmaher)
عضو Admin
عضو شده: 7 سال قبل
ارسال‌ها: 92
۰۱/۰۲/۱۳۹۸ ۱۰:۱۰ ق.ظ  

با سلام

برخی از همکاران در مورد نحوه برنامه نویسی OB86  سوال می کنند .  این OB  در زمان وقوع فالت Profibus  و در زمان برطرف شدن فالت Profibus  توسط سیستم عامل فراخوان می شود.  به عنوان مثال وقتی یک Node  پروفی باس از دسترس خارج میشود بلافاصله OB86  اجرا می شود و وقتی که این Node  به حالت عادی بازگشت باز این OB  اجرا می گردد.

ساده ترین حالت برنامه نویسی در OB86  اینست که یک بیت Set  شده و یک آلارم تولید شود و وقتی مشکل برطرف شد این بیت توسط اپراتور  Reset  گردد .

راه اصولی تر اینست که برنامه ای بنویسیم که اولا مشخص کند فالت رخ داده یا بر طرف شده  سپس آدرس Node  که مشکل پیدا کرده را گزارش کند  . در ضمن اگر CPU  چند پورت DP داشته باشد مشخص کند که فالت مربوط به کدام پورت است. قطعا برنامه نویسی برای این منظور با زبان های LAD/FBD/STL  دشوار خواهد بود .  زبان SCL  می تواند یک گزینه مناسب باشد.

برای این منظور ابتدا لازم است با متغیر های Temp  در بلوک OB86  آشنا شویم و ببینیم چه اطلاعاتی را بر می گردانند

Local Byte 0  : این بایت اگر عدد 57 دسیمال را بر گرداند یعنی خطا به وقوع پیوسته  و اگر عدد 56 را بر گرداند یعنی فالت بر طرف شده است

Local word 6  : این word   آدرس پورت DP  که مشکل داشته  یا مشکل آن برطرف شده را بر می گرداند .

Local Byte 11  : این بایت آدرس Node  که فالت گرفته یا فالت آن بر طرف شده را بر می گرداند.

 

با توجه به نکات فوق برنامه به زبان SCL  نوشته شده است  این برنامه کل   Node  های شبکه پروفی باس را  در یک حلقه For  اسکن می کند اگر فالت هر کدام رخ داده در DB1 آدرس مربوطه یک و اگر فالت بر طرف شده  صفر می گردد.  در انتقال بایت به Memory word  دقت کنید .

 

ORGANIZATION_BLOCK OB86

 

VAR_TEMP

        info : ARRAY[0..19] OF BYTE;

       k:INT;

END_VAR

 

mb0:= info[11];

mb1:=mb0;

mb0:=0;

 

mb3:=info[0];

mb2:=0;

 

FOR k:=1 TO 127 DO

IF  WORD_TO_INT(mw2)=57 then

IF  k= WORD_TO_INT(mw0) THEN  db1.dbw [(k-1)*2] :=1; END_IF;

END_IF;

 

IF  WORD_TO_INT(mw2)=56 then

IF  k= WORD_TO_INT(mw0) THEN  db1.dbw [k*2] :=0; END_IF;

END_IF;

   

END_FOR;

    ;

END_ORGANIZATION_BLOCK

 

فایل زیپ شده پروژه به پیوست است.

اگر چند شبکه پروفی باس به پورت های مختلف CPU  وصل شوند ابتدا لازم است LW6  آنالیز شود سپس حلقه FOR  برای هر شبکه اجرا گردد.


نقل‌قول
شاهین فضلی
(@en-sh66fazli)
Reputable Member
عضو شده: 7 سال قبل
ارسال‌ها: 324
۰۱/۰۲/۱۳۹۸ ۱۰:۴۰ ب.ظ  

عالی بود ممنون مثل همیشه از زکات علم شما بهره بردیم


پاسخنقل‌قول
mohamad reza maher
(@mohandesmaher)
عضو Admin
عضو شده: 7 سال قبل
ارسال‌ها: 92
۰۴/۰۲/۱۳۹۸ ۳:۱۴ ب.ظ  

سپاس از لطف شما جناب مهندس فضلی


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