تالار گفتگوی سایت مهندس ماهر
با سلام
من داشتم، کتاب سطح پیشرفته (صفحه 291) مهندس ماهر رو میخوندم. یه جایی با یه مشکلی روبرو شدم. ممنون میشم اگه کسی از دوستان کمکم کنه.
من یه بلوک FC ساختم و اون رو دو بار در OB1 اضافه کردم و به اون ورودی ها و خروجی های مختلفی اختصاص دادم با ست شدن ورودی یکی ، خروجی بقیه هم تغییر میکنه . به نظرتون مشکل از کجاست ؟
آیا مثلا اگر 5 موتور یکسان رو بخوایم فرمان بدیم باید از 5 بلوک FC متفاوت استفاده کنیم ؟
سلام
بله این مشکل در FC در برخی موارد رخ میده و RLO مقدارش را از FC قبلی حفظ میکنه
اگر از FB استفاده کنید مشکل حل میشه چون هر FB یک DB جداگانه داره . بنابراین یک FB برای موتور طراحی کنید 5 بار صدا بزنید هر بار با یک DB جدید
سلام
ممنون از پاسختون ، با FB ها امتحان کردم ولی باز هم همون مشکل وجود داشت ولی بعد متوجه شدم مشکل از حافظه موقت (TEMP) هست، یعنی وقتی شما یک بیت رو در حافظه TEMP یک کنید ، برای همه بلوک های FC و FB مشابه یک در نظر میگیره و این گاهی باعث اشتباه در خروجی برنامه میشه (مخصوصا وقتی اون بیت مستقیم به خروجی مرتبط باشه).
راه حل ماجرا هم استفاده از FB و بکارگیری حافظه STAT بجای TEMP هست.
بازم ممنون
با سلام
البته بسیاری از برنامه ها که در Library زیمنس هستند، با FC نوشته شده اند و هیچگاه تداخل حافظه های Temp بین آنها رخ نمی دهد.
به نظر بنده دلیل آن استفاده از زبان سطح بالاتر برنامه نویسی یعنی SCL است که FC های زیمنس با آن زبان نوشته شده اند.
بنده در تست عملی که در برنامه مشابه انجام دادم متوجه شدم که فانکشن هایی که با SCL برنامه نویسی می شوند، هرگز دچار این مشکل نمی شوند. گویا کدهای کامپایل در SCL با رجیستری سازگاری کاملی دارند.
موفق باشید