در یک محیط صنعتی، عملکرد روان و توانایی رسیدگی به درخواستها بدون مشکل برای عملیات بسیار مهم است، بنابراین ما باید کد قوی بسازیم که امکان غیرمنتظرهها را فراهم کند و در انجام این کار، HMI به مکانی مرکزی تبدیل میشود که اپراتورها برای تشخیص مشکلات به آن مراجعه میکنند.
مهم است که بتوانید سیستم را از HMI بدون نیاز به بازجویی کد برای دیدن آنچه اتفاق میافتد کار کنید. PLC زیمنس و HMI زیمنس باید یکپارچه با هم کار کنند و بدون مشکل کار کنند.
این اولین مورد از یک سری آموزش است که در آن ما قصد داریم یک پروژه برای حفظ امتیاز در یک مسابقه فوتبال (معروف به فوتبال) ایجاد کنیم. این به شما کمک می کند تا درک کنید که چگونه یک پروژه را از ابتدا شروع کنید و تمام جنبه های مورد نیاز را به انجام برسانید. اتصال یک سی پی یو زیمنس S7-300 317-2 PN/DP PLC به یک صفحه نمایش لمسی 7 اینچی زیمنس سری TP700 HMI، نوشتن کد PLC و طراحی و ساخت پروژه HMI.
در این آموزش، شما یاد خواهید گرفت که چگونه یک PLC زیمنس S7-300 و یک صفحه نمایش لمسی زیمنس سری TP700 7 اینچی HMI را به یک پروژه اضافه کنید، یک Profinet و یک اتصال HMI بین آنها راه اندازی کنید، و با استفاده از هر دو تگ PLC ایجاد کنید. برچسبهای PLC داخلی در پرتال TIA و استفاده از بلوکهای داده برای نگهداری دادههای شما با استفاده از ساختارها.
اتصال PLC زیمنس به HMI زیمنس
بیایید با افزودن دستگاههایمان شروع کنیم. ابتدا PLC را انتخاب می کنیم.
هنگامی که آنها به پروژه اضافه می شوند، باید بین آنها ارتباط ایجاد کنیم. برای انجام این کار، پنجره “Devices & networks” را باز میکنیم.
ابتدا باید یک شبکه PNIE جدید اضافه کنیم. این به PLC و HMI اجازه میدهد بدانند که قرار است به صورت فیزیکی متصل شوند.
ابتدا این کار را برای PLC انجام دهید و وقتی به HMI رسیدید، می توانید آن را به شبکه ای که برای PLC خود ایجاد کرده اید اختصاص دهید.
اکنون یک اتصال بین دو دستگاه ایجاد شده است.
اکنون باید یک اتصال جدید ایجاد کنیم.
روی “connections” کلیک کنید.
روی “Add new connection” کلیک کنید.
اسکرین شات بالا PLC و HMI اضافه شده به پروژه را نشان می دهد.1 – PLC. این توسط یک خط سبز به شماره 2، HMI متصل می شود. این خط سبز نشان دهنده یک پیوند اترنت از PLC به HMI با شماره 3 آدرس IP PLC است. در نهایت، شماره 4 نشان می دهد که ارتباط بین دو نقطه برقرار است، به این معنی که پارامترها و تنظیمات آن معتبر هستند. اگر مشکلی در پیکربندی وجود داشت، مثلاً قرمز بود
اگر قرار بود چنین چیزی را ببینید، می دانید که چیزی وجود دارد که نیاز به اصلاح دارد.
در قسمت “Connections” در HMI که در ساختار پروژه ظاهر شده است، میتوانید این اتصال را تأیید کنید، که ما را قادر میسازد تا به پروژه HMI خود جستجو کرده و برچسبهایی را به آن اضافه کنیم.
et voila! پیکربندی کامل شده است.
اکنون که پیکربندی PLC و HMI خود را کامل کرده ایم، زمان شروع برنامه نویسی آنها است.
راه اندازی برچسب های PLC و ساختارهای داده اولیه
شناخت بلوک های سازمانی
ما با تنظیم ساختارهای داده شروع خواهیم کرد. با PLC های زیمنس، این کار با استفاده از بلوک های داده انجام می شود.
ما بلوک های سازمانی (OB) داریم که بین توابع برنامه ریزی شده کاربر و سیستم عامل رابط دارند. یک مثال از آن استفاده از تابع OB100، “راه اندازی مجدد کامل” است. این بلوک سازمانی یک بار در هنگام راه اندازی PLC یا تغییر وضعیت سوئیچ حالت اجرا می شود و دیگر فراخوانی نمی شود.
این نوع بلوک برای برنامهنویسی یک پرچم «FirstScan» برای راهاندازی تنظیمات پارامترها یا به تأخیر انداختن اسکن یک پروتکل ارتباطی بلافاصله پس از روشن کردن PLC مفید است.
شناخت بلوک های تابعی
بلوکهای تابع (FB) و فراخوانیهای تابع (FC) تا آنجا که هر دو برای نوشتن توابعی استفاده میشوند که میتوانند مجدداً در برنامه استفاده شوند مشابه هستند، اما تفاوت آنها این است که بلوکهای تابع حافظه دارند که به این معنی است که میتوانیم برچسبها را آدرسدهی کنیم. یک بلوک تابعی خارج از بلوک مذکور. با فراخوانی تابع، نمی توانید این کار را انجام دهید زیرا حافظه موقتی است.
Function Blocks حافظه خود را در Instance Data Blocks ذخیره می کند. اگر یک FB، FB1، دارای بلوک داده نمونه DB1 باشد، تگ های حافظه از FB1 می توانند به عنوان “DB1.xxx” آدرس دهی شوند.
آشنایی با بلوک های داده
همانطور که از نام آن پیداست، بلوکهای داده جایی هستند که میتوانیم دادههای خود را ذخیره کنیم که میتوان از آنها در سراسر برنامه استفاده کرد. ما می توانیم از این بلوک ها بخوانیم و بنویسیم، بنابراین می توانیم امتیاز خود را در بازی خود پیگیری کنیم!
هنگام نوشتن برنامه های PLC، داشتن برچسبی که همیشه یک منطق 1 است مفید است. این بدان معناست که وقتی از آن استفاده می کنیم، خروجی همیشه روشن است، بنابراین برای پله های شرطی مفید است. همین امر را می توان در مورد منطق 0 گفت. این خروجی همیشه خاموش است. این را می توان در هر جایی قرار داد، اما من تمایل دارم آن را در یک بلوک “Houseeping” یا در این مورد یک بلوک “Setup” قرار دهم. این جایی است که من داده های اولیه خود را تنظیم می کنم. ما میتوانیم از «مقادیر اولیه» در بلوک داده برای تنظیم مقادیر استفاده کنیم، اما این بیشتر برای زمانی که PLC به طور کامل دانلود شده است استفاده میشود. وقتی این کار را انجام میدهیم، همه مقادیر فعلی را با مقادیر اولیه بازنویسی میکند، بنابراین هر چیزی که به درستی مستند نکردهایم یا تغییرات زنده ثبت نمیشود. انجام آن در FB به این ترتیب به این معنی است که این اتفاق نمی افتد.
همیشه روشن / همیشه خاموش
در اینجا ما تگ های Logic1 و Logic0 را داریم. هنگامی که PLC راه اندازی می شود، هر دو Logic1 و Logic0 در واقع “0” خواهند بود. کاری که ما در اینجا انجام می دهیم این است که بررسی کنیم که آیا تگ Logic1 ‘0’ است یا خیر، و سپس آن را روی ‘1’ تنظیم می کنیم. سپس هنگامی که Logic1 را در “1” داشتیم، Logic0 را روی “0” قرار می دهیم. به این ترتیب میتوانیم مطمئن باشیم که میتوانیم از این برچسبها استفاده کنیم و نتیجه مطابق انتظار خواهد بود.
ما میخواهیم مطمئن شویم که امتیاز و تایمر بازیکن هنگام راهاندازی صفر است. به این ترتیب می توانیم زودتر بازی را شروع کنیم! ما همچنین مطمئن میشویم که پرچم در حال اجرا و فشار دادن دکمه HMI خاموش باشد، در صورتی که آخرین باری که PLC در حال اجرا بود روشن باشد.
از آنجایی که ما اکنون PLC را با مقادیر شروع ترجیحی خود پارامتر کرده ایم، اکنون می توانیم تگ “FirstScan” را که قبلا ایجاد کرده بودیم بازنشانی کنیم:
پیکربندی حافظه ساعت
برای اینکه پروژه ما به درستی کار کند، باید بتوانیم زمان را به تعداد دلخواه ثانیه یا دقیقه (یا ساعت!) بشماریم، بنابراین تابعی که برای انجام این کار استفاده می کنیم از پالس ساعت PLC استفاده می کند. شما می توانید این را با رفتن به PLC قسمت “Device Configuration” خود تنظیم کنید و در برگه عمومی، “Clock memory” را انتخاب کنید. برای فعال کردن حافظه ساعت، کادر را علامت بزنید و یک بایت حافظه به آن اختصاص دهید. این بایت به ما یک پالس ساعت می دهد
پیکربندی حافظه ساعت PLC
می توانید از حافظه ساعت استفاده کنید، به عنوان مثال، برای فعال کردن لامپ های نشانگر چشمک زن یا برای شروع عملیات دوره ای تکرار شونده مانند ثبت مقادیر واقعی.
فرکانس های موجود
به هر بیت از بایت حافظه ساعت بیت یک فرکانس اختصاص داده می شود. جدول زیر تکلیف را نشان می دهد:
از آنجایی که ما یک تایمر 1 ثانیه ای برای ساعت خود می خواهیم، باید به بیت حافظه 5 بایت 50 حافظه نگاه کنیم. می توانیم از یک سیگنال پالسی برای افزایش شمارنده استفاده کنیم تا به عنوان ساعت من کار کند. به این ترتیب میتوانیم به راحتی بازی را برای آبرسانی سریع قبل از ادامه نیمه دوم متوقف کنیم.
برای دریافت سیگنال پالسی، میتوانیم از بیت 5 حافظه بایت 50 استفاده کنیم و از دو بایت دیگر برای ایجاد سیگنال پالسی استفاده کنیم. این بخش از کد از STL استفاده می کند، نه از LAD مانند بقیه کدها، اما می تواند به همین راحتی در LAD انجام شود. دلیل انتخاب ما برای انجام این کار این است که میتوانیم تمام بیتهای حافظه را بدون پلهها و پلههای کد به پرچمهای پالس نگاشت کنیم.
همانطور که می بینید، بیت 5 از بایت 50 Clock1Hz است. دستورالعمل FP به دنبال تغییر حالت از 0 به 1 است. پس از مشاهده آن، “Pulse1sec” را روشن می کند. از آنجا که دستورالعمل FP فقط برای 1 اسکن روشن است، بیت M51.5 نیز فقط برای 1 اسکن روشن است، بنابراین می توانیم از آن برای پالس کردن یک دستورالعمل شمارنده استفاده کنیم.
اکنون هنگامی که ما این فراخوانی تابع را در بلوک عملکرد راه اندازی خود فراخوانی می کنیم، زمان بندی دقیقی برای بازی خود خواهیم داشت.
پیکربندی تگ های PLC
برچسبهای PLC ما به این شکل هستند.
اینها تگ هایی هستند که ما به تگ های Logic0 و Logic1، تگ FirstScan و بیت های حافظه ساعت خود با پالس اختصاص داده ایم.
وظیفه بعدی این است که بلوک های داده خود را با داده هایی که برای پروژه خود نیاز داریم تنظیم کنیم.
ما باید چندین تگ را در اینجا ایجاد کنیم، و هیچ جایی بهتر از “Inputs” ما برای شروع وجود ندارد. ما به روشی برای جمع و تفریق امتیازها (بسته به VAR) و همچنین شروع، توقف، تنظیم مجدد و مکث نیاز داریم.
در مرحله بعد باید بیت های “Status” را در نظر بگیریم. در اینجا میتوانیم با استفاده از یک ورودی مثبت از PlayerX در یک شروع تایید شده برنامهنویسی کنیم. وقتی هر دو بازیکن تایید کردند، وضعیت Game_Confirmed داریم. ما همچنین یک وضعیت در حال اجرا داریم و مقادیر شمارنده انباشته شده برای مقادیر دقیقه و ثانیه برای نمایش در HMI.
بیت های “Command” در مرحله بعدی قرار می گیرند. در اینجا ما درخواست های دستوری خود را مانند شروع بازی یا نمایش یک صفحه آماده که در آن بازیکنان قصد خود را برای بازی تأیید می کنند، تعریف می کنیم. ما همچنین یک انیمیشن داریم که میتوان آن را در هنگام به ثمر رساندن گل نشان داد.
در نهایت یک شات داریم که می توان از آنها در برنامه استفاده کرد، به عنوان مثال وقتی بازی به پایان می رسد، نتیجه را در جدول تاریخچه کپی می کنیم.
این امتیاز فعلی را به اولین مکاندار تاریخ منتقل میکند، این تئوری این است که وقتی بازی متوقف شود، موارد زیر اتفاق میافتد.
ما به یک بلوک داده “Name” و “Score” نیاز داریم تا اسامی بازیکنان و امتیازات آنها را پیگیری کنیم.
دادههای PlayerXNameHist[x] و PlayerXScoreHist[x] حاوی دادههای موجود در گزارش سابقه هستند. این رجیسترها به صورت آرایه ای از «String» برای نام و آرایه «Int» برای امتیاز نگهداری می شوند. با استفاده از نوع آرایه[lo..hi] می توانید تعداد عناصر آرایه را تنظیم کنید. هنگامی که به یک ورودی خاص آدرس می دهیم، از شماره آرایه آن برای شناسایی آن استفاده می کنیم.
آخرین قطعه داده ای که ما برای این پروژه نیاز داریم، یک بلوک داده تنظیم نقطه است. تنها نقطه تنظیمی که در اینجا باید لحاظ کنیم، مدت زمان بازی است. این به این دلیل است که ما قبلاً یک بلوک داده “Name” داریم که نامهایی را که باید استفاده شود را ثبت میکند و منطقی است که آنها را همراه با ورودیهای تاریخی نگه داریم. مدت زمان بازی یک عدد صحیح است که با وارد کردن آن تعداد دقیقه بازی را در اختیار ما قرار می دهد.
اکنون همه چیز را تنظیم کرده ایم، مرحله بعدی نوشتن کد برای کنترل بازی و ایجاد و تگ کردن صفحه نمایش HMI است.
نتیجه
اکنون اجازه دهید آنچه را که در این آموزش آموختهایم خلاصه کنیم. ما یک PLC و HMI را به یک پروژه اضافه کرده ایم، یک Profinet و یک اتصال HMI بین آنها راه اندازی کرده ایم. این به آنها اجازه می دهد تا با یکدیگر ارتباط برقرار کرده و داده ها را انتقال دهند. ما تعدادی تگ PLC ایجاد کردهایم که هم از تگهای PLC داخلی در پورتال TIA و هم از بلوکهای داده برای نگهداری دادههایمان با استفاده از ساختارها استفاده میکنیم. با استفاده از ساختارها در بلوکهای داده، میتوانیم سیگنالها را به بخشهای مختلف، مانند «ورودیها» و «فرمانها» جدا کنیم. آنها در یک مکان هستند، اما پیشوندی که ما در کد استفاده می کنیم آنها را به راحتی قابل شناسایی می کند.
ما همچنین یک پرچمهای First Scan، Logic1 و Logic0 ایجاد کردهایم. پرچم First Scan را می توان در کد ما برای راه اندازی چیزی در راه اندازی PLC مانند تنظیم مقادیر پیش فرض یا بازنشانی مقادیر شمارنده استفاده کرد. پرچمهای Logic1 و Logic0 برای غیرفعال کردن کد هنگام آزمایش یا زمانی که میخواهیم از یک شاخه استفاده کنیم و اجرای را با یک سیگنال مثبت واجد شرایط کنیم، مفید هستند.
تنظیم حافظه ساعت PLC به ما این امکان را می دهد که زمان بندی دقیقی داشته باشیم، چیزی که در پروژه آزمایشی ما برای پیگیری زمان بسیار مفید است.