سلام
یه برنامه توی fb نوشتم , شامل 2 خروجی و 4 ورودی و توی یه fc چند بار اونو فراخوندم، هر با ورودی های مختلف و خروجی مختلف اما یکی از خروجی ها یه q ثابت هست و هر بار در کنار خروجی این هم باید انرجایز بشه اما فقط توی خط اخر انرجایز میشه کسی تابه حال به این موضوع برخورده
پیوست
reza bytسرباز
سلام
این موضوع در Siemens Step 7 (Simatic Manager) طبیعی است. مشکلی که شما میبینید به دلیل آخرین مقدار نویسی (Last Write Wins) در برنامههای فراخوانیشده است.
دلیل مشکل:
وقتی یک FB را در FC چند بار فراخوانی میکنید، متغیرهای محلی (TEMP) و متغیرهای خروجی (Q) هر بار مقدار جدیدی میگیرند. از آنجایی که Q ثابت را در چندین فراخوانی به کار بردهاید، مقدار آن تا آخرین اجرای FB تغییر میکند. به همین دلیل، فقط مقدار آخرین اجرای FB روی Q تأثیر میگذارد و مقادیر قبلی از بین میرود.
راهحل:
1. استفاده از فلگ کمکی (Marker Bit – M)
در داخل FB بهجای نوشتن مستقیم روی خروجی Q، یک متغیر کمکی (M-Flag) را فعال کنید. سپس در FC، بعد از همه فراخوانیهای FB، مقدار آن متغیر کمکی را روی Q قرار دهید.
2. استفاده از یک DB برای ذخیره وضعیت
بهجای استفاده از یک خروجی مشترک، میتوانید مقدار وضعیت را در یک DB ذخیره کنید و در انتها مقدار نهایی را به Q اختصاص دهید.
3. استفاده از درایو یا OR بین خروجیها
در FC، مقدار Q را در هر خط از برنامه OR کنید تا اگر هرکدام از FBها آن را فعال کردند، خروجی نهایی هم فعال شود.
این مشکل برای خروجیهای دیجیتال که در چندین بلوک برنامه استفاده میشوند، رایج است. راهکارهای بالا کمک میکند که مقدار Q ثابت در همه خطوط برنامه بهدرستی بهروز شود.
با اختصاص m و or کردن جواب گرفتم ، ممنون
خدارو شکر