آموزش زبان STL -آدرس دهی غیر مستقیم در stl
آدرسدهی غیرمستقیم یا Indirect Addressing یکی از قابلیتهای مهم زبان برنامهنویسی STL در PLCهای زیمنس است. در این روش، بهجای اینکه همیشه آدرس موردنظر را مستقیماً داخل دستور بنویسیم، آدرس یا شماره موردنظر را از یک Pointer، Memory Word یا Register آدرس دریافت میکنیم.
آدرسدهی غیرمستقیم در برنامههای پیچیده، کار با آرایهها، جابهجایی بین آدرسها، Data Blockها و برنامههایی که نیاز به دسترسی پویا به حافظه دارند، اهمیت زیادی دارد.
در آدرسدهی مستقیم، آدرس دقیقاً داخل دستور مشخص میشود. برای مثال:
در این حالت PLC دقیقاً میداند که باید مقدار MW30 را بخواند.
اما در آدرسدهی غیرمستقیم، آدرس از طریق یک مقدار دیگر تعیین میشود. بنابراین آدرس مقصد میتواند بر اساس مقدار موجود در Pointer، Memory یا Register تغییر کند.
۱. Memory Indirect Addressing with Area Pointer
۲. Memory Indirect Addressing with Number
۳. Register-Indirect Area-Internal Addressing
۴. Register-Indirect Area-Crossing Addressing
Memory Indirect Addressing with Area Pointer
در روش اول، یک Pointer ۳۲ بیتی که شامل اطلاعات مربوط به شماره بایت و بیت است، داخل یک متغیر Double Word مانند MD20 ذخیره میشود.
سپس همان مقدار بهعنوان آدرس غیرمستقیم استفاده میشود.
T MD20
L MW[MD20] // معادل خواندن MW30
A M[MD20] // معادل بررسی بیت M30.0
دستور L P#30.0 یک Pointer با Offset برابر ۳۰.۰ ایجاد میکند.
Pointer ساختهشده در مرحله قبل داخل MD20 قرار میگیرد. بنابراین میتوان گفت:
چون مقدار Pointer موجود در MD20 برابر P#30.0 است، این دستور در عمل به آدرس زیر اشاره میکند:
MW[MD20] معادل MW30 است.
یعنی PLC مقدار Word موجود در آدرس MW30 را میخواند.
در اینجا نیز همان Pointer استفاده میشود؛ اما این بار دسترسی به یک بیت از ناحیه Memory انجام میشود.
چون Pointer برابر P#30.0 است:
M[MD20] معادل M30.0 خواهد بود.
Memory Indirect Addressing with Number
در روش دوم، بهجای ذخیره یک Pointer، یک عدد صحیح داخل یک Memory Word مانند MW100 قرار میگیرد.
این عدد میتواند شماره یک شیء مانند Timer، Counter یا Data Block را مشخص کند.
T MW100 // عدد 237 را در MW100 ذخیره کن
OPN DB[MW100] // معادل OPN DB 237؛ دیتابلاک 237 را باز کن
SP T[MW100] // معادل SP T 237؛ تایمر 237 را به صورت پالس راهاندازی کن
در این مرحله عدد 237 بهعنوان یک مقدار عددی وارد Accumulator میشود.
حالا وضعیت Memory به شکل زیر است:
چون مقدار موجود در MW100 برابر 237 است، PLC این دستور را بهصورت زیر تفسیر میکند:
OPN DB[MW100] معادل OPN DB 237 است.
بنابراین DB شماره 237 باز میشود.
چون MW100 هنوز مقدار 237 را دارد، نتیجه این دستور نیز مشخص است:
SP T[MW100] معادل SP T 237 است.
یعنی Timer شماره 237 بهصورت پالس راهاندازی میشود.
در روش اول، مقدار داخل Memory یک Pointer است؛ اما در روش دوم، مقدار داخل Memory یک Number است که شماره یک شیء مانند DB یا Timer را مشخص میکند.
Register-Indirect Area-Internal Addressing
در روش سوم از Registerهای آدرس یعنی AR1 یا AR2 استفاده میشود.
در این نوع آدرسدهی، Register شامل مقدار Offset است و ناحیه حافظه داخل خود دستور مشخص میشود.
همچنین میتوان یک Offset ثابت دیگر را نیز به مقدار موجود در AR1 یا AR2 اضافه کرد.
L MW[AR1,P#4.0] // معادل MW؛ حاصل 2.0 + 4.0 = 6.0
A I[AR1,P#1.4] // معادل I؛ حاصل 2.0 + 1.4 = 3.4
پس از اجرای این دستور، مقدار Offset موجود در AR1 برابر 2.0 است.
در این دستور دو مقدار با یکدیگر جمع میشوند:
بنابراین آدرس نهایی برابر با MW6 خواهد بود.
MW[AR1,P#4.0] معادل MW6 است.
چون: 2.0 + 4.0 = 6.0
مقدار AR1 برابر P#2.0 است و Offset دوم برابر P#1.4 است. بنابراین:
I[AR1,P#1.4] معادل I3.4 است.
یعنی PLC در نهایت وضعیت ورودی I3.4 را بررسی میکند.
چون Area در خود دستور مشخص شده است. برای مثال در I[AR1,P#1.4] حرف I مشخص میکند که ناحیه موردنظر Input است. AR1 فقط برای تعیین موقعیت داخل آن ناحیه استفاده میشود.
Register-Indirect Area-Crossing Addressing
در روش چهارم، علاوه بر شماره بایت و بیت، خود ناحیه حافظه نیز در Pointer موجود در Register قرار میگیرد.
به همین دلیل ساختار Pointer میتواند مشخص کند که نقطه شروع در کدام Area قرار دارد. در این روش، Registerهایی مانند AR1 میتوانند برای دسترسی غیرمستقیم استفاده شوند و در دستور نوع داده نیز مشخص میشود.
L B[AR1,P#4.0] // معادل MB؛ حاصل 10.0 + 4.0 = 14.0
= Q[AR1,P#1.7] // معادل Q؛ حاصل 10.0 + 1.7 = 11.7
برخلاف مثال قبلی، اینجا Pointer فقط یک Offset ساده نیست. در P#M10.0 هم Area و هم موقعیت مشخص شده است.
Area = M
Offset = 10.0
مقدار پایه Pointer برابر M10.0 است و Offset برابر P#4.0 است. بنابراین:
B[AR1,P#4.0] معادل MB14 است.
یعنی مقدار یک Byte از آدرس MB14 خوانده میشود.
این بار Offset برابر P#1.7 است. بنابراین از آدرس پایه 10.0 حرکت میکنیم:
Q[AR1,P#1.7] معادل Q11.7 است.
بنابراین نتیجه دستور در نهایت در Q11.7 قرار میگیرد.
| شماره | روش آدرسدهی | مبنای آدرس | نمونه | نتیجه مثال |
|---|---|---|---|---|
| ۱ | Memory Indirect Area Pointer |
Pointer ذخیرهشده در Memory | MW[MD20] | MW30 |
| ۲ | Memory Indirect Number |
Number ذخیرهشده در Memory | DB[MW100] | DB237 |
| ۳ | Register Indirect Area Internal |
AR1 + Offset | MW[AR1,P#4.0] | MW6 |
| ۴ | Register Indirect Area Crossing |
Area + Pointer + Offset | B[AR1,P#4.0] | MB14 |
P#30.0 داخل MD20 قرار میگیرد.
MW[MD20] → MW30
M[MD20] → M30.0
عدد 237 داخل MW100 قرار میگیرد.
OPN DB[MW100] → OPN DB237
SP T[MW100] → SP T237
AR1 = P#2.0
MW[AR1,P#4.0] → MW6
I[AR1,P#1.4] → I3.4
AR1 = P#M10.0
B[AR1,P#4.0] → MB14
Q[AR1,P#1.7] → Q11.7
- اگر در Memory یک مقدار مانند P#30.0 ذخیره شده باشد، باید آن را بهعنوان Pointer در نظر گرفت.
- اگر یک عدد مانند 237 در MW ذخیره شده باشد و برای تعیین شماره DB یا Timer استفاده شود، با Memory Indirect Addressing with Number روبهرو هستیم.
- در Register-Indirect Addressing معمولاً AR1 یا AR2 نقش Register آدرس را دارند.
- Offsetهایی مانند P#4.0 به Pointer پایه اضافه میشوند تا آدرس نهایی مشخص شود.
- در Area-Internal، ناحیهای مانند I یا M در خود دستور مشخص میشود.
- در Area-Crossing، Pointer میتواند اطلاعات ناحیه و Offset را در خود داشته باشد و دسترسی غیرمستقیم بین نواحی مختلف انجام شود.
برای تشخیص نوع آدرسدهی غیرمستقیم، فقط به وجود AR1 یا MD نگاه نکنید. باید بررسی کنید که مقدار داخل آن چیست، آیا Pointer است یا Number، Area در کجا مشخص شده و Offset چگونه محاسبه میشود. همین موارد نوع دقیق آدرسدهی را مشخص میکنند.
آدرسدهی غیرمستقیم در STL به PLC اجازه میدهد بهجای استفاده از آدرسهای ثابت، آدرس مقصد را از طریق Pointer، Number یا Register محاسبه و تعیین کند. این قابلیت یکی از ابزارهای مهم برای نوشتن برنامههای انعطافپذیر و حرفهای در PLCهای زیمنس است.
چهار ساختار اصلی که در این مقاله بررسی شدند عبارتاند از:
Pointer داخل Memory ذخیره میشود و برای دسترسی به آدرس استفاده میشود.
۲. Memory Indirect Addressing with Number
یک Number داخل Memory قرار میگیرد و شماره DB، Timer یا سایر اشیاء را مشخص میکند.
۳. Register-Indirect Area-Internal Addressing
AR1 یا AR2 شامل Offset است و Area در خود دستور مشخص میشود.
۴. Register-Indirect Area-Crossing Addressing
Pointer موجود در Register میتواند شامل Area و Offset باشد و امکان دسترسی غیرمستقیم بین نواحی مختلف را فراهم کند.
آموزش برنامهنویسی STL زیمنس، آدرسدهی مستقیم و غیرمستقیم، تحلیل برنامه PLC و عیبیابی سیستمهای اتوماسیون صنعتی
خرید و تعمیرات تجهیزات زیمنس
برق موشن ارائهدهنده خدمات فروش، مشاوره، راهاندازی و تعمیرات درایوهای زیمنس است. برای خرید تجهیزات زیمنس یا دریافت خدمات تعمیرات درایو زیمنس، بخش موردنظر خود را انتخاب کنید.
خرید، تعمیرات و اجرای پروژه SIEMENS
جهت خرید HMI زیمنس، PLC زیمنس، اینورتر SIEMENS و سایر محصولات اتوماسیون صنعتی یا برای تعمیرات و اجرای پروژههای اتوماسیون صنعتی زیمنس با برق موشن تماس بگیرید.
فروش محصولات SIEMENS 09331234717 تعمیرات تجهیزات SIEMENS 09011234717 اجرای پروژههای اتوماسیون صنعتی 09381234717پروتکل های ارتباطی زیمنس و معرفی شبکه های صنعتی Siemens در دنیای اتوماسیون صنعتی، ارتباط بین تجهیزات مختلف اهمیت بسیار زیادی دارد. شرکت زیمنس (Siemens) به عنوان یکی از بزرگترین تولیدکنندگان تجهیزات اتوماسیون صنعتی، سالهاست که شبکهها و پروتکلهای ارتباطی متنوعی را برای اتصال PLC، درایو، HMI، سنسورها و سیستمهای کنترل ارائه کرده است. پروتکل […]
نرم افزار درایو زیمنس چیست؟ معرفی کامل نرم افزارهای تنظیم و برنامه نویسی درایو Siemens درایوهای صنعتی یکی از مهمترین تجهیزات کنترل موتور در کارخانهها و خطوط تولید هستند. شرکت زیمنس (Siemens) به عنوان یکی از بزرگترین تولیدکنندگان تجهیزات اتوماسیون صنعتی، برای تنظیم، راهاندازی، پارامتردهی و عیبیابی درایوهای خود نرم افزارهای تخصصی ارائه کرده است. […]
اچ ام آی HMI چیست؟ در دنیای مدرن اتوماسیون، (Interface Machine-Human (HMI نه تنها یک نمایشگر، بلکه قلب تپنده و چشم بینای سیستم های صنعتی است. HMI به عنوان یک پل ارتباطی دیجیتال،اطلاعات پیچیده دستگاه ها و PLCها را به زبانی ساده و گرافیکی برای اپراتور ترجمه میکند کالبدشکافی عملکرد HM HMI از دو بخش […]
معرفی HMI اینوت + کاتالوگ HMI اینوت یا HMI INVT یکی از تجهیزات کاربردی در اتوماسیون صنعتی است که برای ایجاد ارتباط بین اپراتور و سیستم کنترل مورد استفاده قرار میگیرد. HMI یا Human Machine Interface به اپراتور اجازه میدهد اطلاعات مربوط به ماشین و فرآیند را مشاهده و بسیاری از پارامترهای سیستم را کنترل […]
HMI اینوت INVT چیست؟ معرفی کامل سریها، مدلها، مشخصات و کاربردها HMI اینوت INVT یکی از تجهیزات مهم در اتوماسیون صنعتی است که برای ارتباط بین اپراتور، PLC، درایو و ماشینآلات صنعتی مورد استفاده قرار میگیرد. HMI اینوت با فراهم کردن یک رابط گرافیکی به اپراتور اجازه میدهد وضعیت ماشین را مشاهده کرده، پارامترهای فرآیند […]
درایو اینوت GD27 دارای پارامترهایی است که امکان مدیریت رفتار دستگاه هنگام قطع و وصل شدن برق را فراهم میکنند. یکی از کاربردهای مهم این تنظیمات، مشخص کردن این موضوع است که بعد از قطع برق و وصل مجدد آن، آیا درایو بهصورت خودکار دوباره وارد حالت RUN شود یا خیر. برای این کار در […]
تنظیم Connection Macro در درایو زیمنس در درایوهای زیمنس، Connection Macro برای انتخاب تنظیمات آماده مربوط به نحوه فرماندهی، مرجع فرکانس، ورودیها و خروجیهای درایو استفاده میشود. این تنظیمات میتوانند برای کاربردهای مختلف، فرآیند راهاندازی و تنظیم اولیه درایو را سادهتر کنند. نکته مهم: تغییر Connection Macro یک تنظیم یکباره محسوب میشود و طبق منوال، […]
تفاوت PLC دلتا و زیمنس، فراتر از اختلاف قیمت آشکار آنها، در کلاس کاری پروژههاست؛ جایی که زیمنس به عنوان غول صنایع سنگین با پایداری بینظیر شناخته میشود. درک تفاوتهای بنیادین این دو برند در زمینه قدرت پردازشی، محیط های نرمافزاری، قابلیتهای ارتباطی و مهمتر از همه «صرفهی اقتصادی پروژه»، برای اجرای یک سیستم اتوماسیون […]
دانلود منوال و کاتالوگ درایو کومارک درایو یا اینورتر فرکانس متغیر، یکی از مهمترین تجهیزات در اتوماسیون صنعتی و کنترل دور موتورهای AC است. در میان برندهای موجود در بازار، Cumark با سری های مختلف ES توانسته جایگاهی در کاربردهای عمومی، نیمه سنگین و صنعتی پیدا کند. این درایوها برای کنترل سرعت، گشتاور، بهینه سازی […]
نظری برای این وجود ندارد.