آموزش آدرس‌دهی غیرمستقیم در STL زیمنس
آدرس‌دهی غیرمستقیم یا Indirect Addressing یکی از قابلیت‌های مهم زبان برنامه‌نویسی STL در PLCهای زیمنس است. در این روش، به‌جای اینکه همیشه آدرس موردنظر را مستقیماً داخل دستور بنویسیم، آدرس یا شماره موردنظر را از یک Pointer، Memory Word یا Register آدرس دریافت می‌کنیم.

آدرس‌دهی غیرمستقیم در برنامه‌های پیچیده، کار با آرایه‌ها، جابه‌جایی بین آدرس‌ها، Data Blockها و برنامه‌هایی که نیاز به دسترسی پویا به حافظه دارند، اهمیت زیادی دارد.
آدرس‌دهی غیرمستقیم در STL به چه معناست؟

در آدرس‌دهی مستقیم، آدرس دقیقاً داخل دستور مشخص می‌شود. برای مثال:

L MW30 // مقدار موجود در MW30 را بخوان

در این حالت 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 ذخیره می‌شود.

سپس همان مقدار به‌عنوان آدرس غیرمستقیم استفاده می‌شود.

L P#30.0
T MD20

L MW[MD20] // معادل خواندن MW30
A M[MD20] // معادل بررسی بیت M30.0
بررسی خط اول
L P#30.0 // Pointer مربوط به آدرس 30.0 را بارگذاری کن

دستور L P#30.0 یک Pointer با Offset برابر ۳۰.۰ ایجاد می‌کند.

بررسی خط دوم
T MD20 // Pointer را در MD20 ذخیره کن

Pointer ساخته‌شده در مرحله قبل داخل MD20 قرار می‌گیرد. بنابراین می‌توان گفت:

MD20 ← P#30.0
بررسی MW[MD20]
L MW[MD20] // مقدار Word از آدرسی که MD20 مشخص می‌کند خوانده می‌شود

چون مقدار Pointer موجود در MD20 برابر P#30.0 است، این دستور در عمل به آدرس زیر اشاره می‌کند:

نتیجه:
MW[MD20] معادل MW30 است.

یعنی PLC مقدار Word موجود در آدرس MW30 را می‌خواند.
بررسی M[MD20]
A M[MD20] // وضعیت بیت Memory را در آدرس مشخص‌شده بررسی کن

در اینجا نیز همان Pointer استفاده می‌شود؛ اما این بار دسترسی به یک بیت از ناحیه Memory انجام می‌شود.

نتیجه:
چون Pointer برابر P#30.0 است:

M[MD20] معادل M30.0 خواهد بود.
نکته مهم: در این روش مقدار داخل MD20 یک عدد معمولی برای تعیین شماره تجهیز نیست؛ بلکه به‌عنوان Pointer استفاده می‌شود و موقعیت آدرس را مشخص می‌کند.
۲ آدرس‌دهی غیرمستقیم حافظه با عدد
Memory Indirect Addressing with Number

در روش دوم، به‌جای ذخیره یک Pointer، یک عدد صحیح داخل یک Memory Word مانند MW100 قرار می‌گیرد.

این عدد می‌تواند شماره یک شیء مانند Timer، Counter یا Data Block را مشخص کند.

L 237 // عدد 237 را بارگذاری کن
T MW100 // عدد 237 را در MW100 ذخیره کن

OPN DB[MW100] // معادل OPN DB 237؛ دیتابلاک 237 را باز کن
SP T[MW100] // معادل SP T 237؛ تایمر 237 را به صورت پالس راه‌اندازی کن
مرحله اول؛ بارگذاری عدد 237
L 237 // مقدار عددی 237 را وارد Accumulator کن

در این مرحله عدد 237 به‌عنوان یک مقدار عددی وارد Accumulator می‌شود.

مرحله دوم؛ ذخیره عدد در MW100
T MW100 // مقدار 237 را در MW100 قرار بده

حالا وضعیت Memory به شکل زیر است:

MW100 = 237
مرحله سوم؛ باز کردن DB به‌صورت غیرمستقیم
OPN DB[MW100] // DB شماره موجود در MW100 را باز کن

چون مقدار موجود در MW100 برابر 237 است، PLC این دستور را به‌صورت زیر تفسیر می‌کند:

نتیجه:
OPN DB[MW100] معادل OPN DB 237 است.

بنابراین DB شماره 237 باز می‌شود.
مرحله چهارم؛ استفاده از همان Number برای Timer
SP T[MW100] // تایمر شماره موجود در MW100 را راه‌اندازی کن

چون 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 اضافه کرد.

LAR1 P#2.0 // بارگذاری آفست 2.0 در رجیستر AR1

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
مرحله اول؛ مقداردهی AR1
LAR1 P#2.0 // Pointer برابر P#2.0 را در AR1 قرار بده

پس از اجرای این دستور، مقدار Offset موجود در AR1 برابر 2.0 است.

AR1 = P#2.0
مرحله دوم؛ دسترسی به MW
L MW[AR1,P#4.0] // دسترسی غیرمستقیم به Memory Word

در این دستور دو مقدار با یکدیگر جمع می‌شوند:

P#2.0 + P#4.0 = P#6.0

بنابراین آدرس نهایی برابر با MW6 خواهد بود.

نتیجه:
MW[AR1,P#4.0] معادل MW6 است.

چون: 2.0 + 4.0 = 6.0
مرحله سوم؛ دسترسی به Input
A I[AR1,P#1.4] // بررسی ورودی با آدرس غیرمستقیم

مقدار AR1 برابر P#2.0 است و Offset دوم برابر P#1.4 است. بنابراین:

P#2.0 + P#1.4 = P#3.4
نتیجه:
I[AR1,P#1.4] معادل I3.4 است.

یعنی PLC در نهایت وضعیت ورودی I3.4 را بررسی می‌کند.
چرا به آن Area-Internal می‌گوییم؟
چون Area در خود دستور مشخص شده است. برای مثال در I[AR1,P#1.4] حرف I مشخص می‌کند که ناحیه موردنظر Input است. AR1 فقط برای تعیین موقعیت داخل آن ناحیه استفاده می‌شود.
۴ آدرس‌دهی غیرمستقیم رجیستری بین‌ناحیه‌ای
Register-Indirect Area-Crossing Addressing

در روش چهارم، علاوه بر شماره بایت و بیت، خود ناحیه حافظه نیز در Pointer موجود در Register قرار می‌گیرد.

به همین دلیل ساختار Pointer می‌تواند مشخص کند که نقطه شروع در کدام Area قرار دارد. در این روش، Registerهایی مانند AR1 می‌توانند برای دسترسی غیرمستقیم استفاده شوند و در دستور نوع داده نیز مشخص می‌شود.

LAR1 P#M10.0 // Pointer شامل Area=M و Offset=10.0 را در 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
مرحله اول؛ قرار دادن Area و Offset در AR1
LAR1 P#M10.0 // Pointer مربوط به ناحیه M و آدرس 10.0

برخلاف مثال قبلی، اینجا Pointer فقط یک Offset ساده نیست. در P#M10.0 هم Area و هم موقعیت مشخص شده است.

AR1 = P#M10.0
Area = M
Offset = 10.0
مرحله دوم؛ خواندن Byte
L B[AR1,P#4.0] // خواندن یک Byte با استفاده از AR1 و Offset

مقدار پایه Pointer برابر M10.0 است و Offset برابر P#4.0 است. بنابراین:

M10.0 + P#4.0 = MB14
نتیجه:
B[AR1,P#4.0] معادل MB14 است.

یعنی مقدار یک Byte از آدرس MB14 خوانده می‌شود.
مرحله سوم؛ دسترسی به خروجی Q
= Q[AR1,P#1.7] // قرار دادن نتیجه در خروجی Q با آدرس غیرمستقیم

این بار Offset برابر P#1.7 است. بنابراین از آدرس پایه 10.0 حرکت می‌کنیم:

10.0 + 1.7 = 11.7
نتیجه:
Q[AR1,P#1.7] معادل Q11.7 است.

بنابراین نتیجه دستور در نهایت در Q11.7 قرار می‌گیرد.
نکته مهم: تفاوت اصلی این روش با روش سوم در ساختار Pointer است. در روش سوم، Area در خود دستور مشخص می‌شود؛ اما در این روش Pointer می‌تواند اطلاعات Area و Offset را در خود داشته باشد.
مقایسه چهار روش آدرس‌دهی غیرمستقیم
شماره روش آدرس‌دهی مبنای آدرس نمونه نتیجه مثال
۱ 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
نکات مهم برای تحلیل آدرس‌دهی غیرمستقیم در STL
  • اگر در 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های زیمنس است.

چهار ساختار اصلی که در این مقاله بررسی شدند عبارت‌اند از:

۱. Memory Indirect Addressing with Area Pointer
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 باشد و امکان دسترسی غیرمستقیم بین نواحی مختلف را فراهم کند.

خرید و تعمیرات تجهیزات زیمنس

برق موشن ارائه‌دهنده خدمات فروش، مشاوره، راه‌اندازی و تعمیرات درایوهای زیمنس است. برای خرید تجهیزات زیمنس یا دریافت خدمات تعمیرات درایو زیمنس، بخش موردنظر خود را انتخاب کنید.

خرید، تعمیرات و اجرای پروژه SIEMENS

جهت خرید HMI زیمنس، PLC زیمنس، اینورتر SIEMENS و سایر محصولات اتوماسیون صنعتی یا برای تعمیرات و اجرای پروژه‌های اتوماسیون صنعتی زیمنس با برق موشن تماس بگیرید.

فروش محصولات SIEMENS 09331234717 تعمیرات تجهیزات SIEMENS 09011234717 اجرای پروژه‌های اتوماسیون صنعتی 09381234717
برق موشن نمایندگی زیمنس | فروش، تعمیرات و اجرای پروژه‌های اتوماسیون صنعتی
  • تنظیم پارامتر درایو GD20 اینوت | کاتالوگ فارسی اینورتر GD20

    منوال فارسی و تنظیم INVT GD20 آموزش تنظیم پارامترها، Multi Speed و مشخصات فنی اینورتر INVT GD20 مشخصات فنی اینورتر INVT GD20 اینورتر INVT GD20 یک درایو کنترل دور موتور AC با قابلیت کنترل V/F و کنترل برداری بدون سنسور Sensorless Vector Control است که برای کاربردهای عمومی صنعتی طراحی شده است. این سری در […]

  • راهنمای خرید پی ال سی فتک FATEK

    جهت خرید پی ال سی فتک کلیک کنید راهنمای انتخاب PLC فتک  انتخاب PLC مناسب یکی از مهم‌ترین بخش‌های طراحی و اجرای سیستم‌های اتوماسیون صنعتی است. بسیاری از مهندسان هنگام طراحی یا ارتقای یک پروژه، علاوه بر قابلیت‌های فنی، عواملی مانند قیمت، دسترسی به قطعات، سهولت برنامه‌نویسی و خدمات پس از فروش را نیز در […]

  • معرفی BOP G120 زیمنس

    l BOP درایو G120 چیست؟ راهنمای کامل BOP-2 زیمنس، دکمه‌ها، قابلیت‌ها و تنظیمات BOP درایو G120 یکی از تجهیزات مهم برای راه‌اندازی، تنظیم و مانیتورینگ درایوهای سری SINAMICS G120 زیمنس است. BOP که مخفف Basic Operator Panel است، یک پنل اپراتوری است که امکان دسترسی مستقیم به بسیاری از تنظیمات و اطلاعات درایو را فراهم […]

  • منوال و کاتالوگ اینورتر تکو

    درایوهای کنترل موتور یا اینورترهای فرکانس متغیر (VFD)از تجهیزات کلیدی در اتوماسیون صنعتی هستند که برای کنترل سرعت، گشتاور و جهت چرخش موتورهای الکتریکی به کارمی روند. شرکت TECO مجموعه ای از درایوهای عمومی و صنعتی را برای کاربردهای متنوع مانند فن، پمپ، نوار نقاله، ماشین آلات تولیدی و سامانه های تأسیساتی عرضه میکند. این […]

  • دانلود منوال و کاتالوگ درایو اینوونس

    دانلود منوال و کاتالوگ درایو اینوونس جایگاه درایوهای اینوونس در صنعت شرکت Inovance یکی از برندهای پیشرو و شناخته شده در حوزه اتوماسیون صنعتی و کنترل دورموتور (اینورتر) است که با ارائه طیف متنوعی از درایوهای AC، پاسخگوی نیاز صنایع سبک، متوسط و سنگین است. این برند با توسعه محصولات اقتصادی، صنعتی، سنگین کار و […]

  • اچ ام آی HMI چیست؟

    اچ ام آی HMI چیست؟ در دنیای مدرن اتوماسیون، (Interface Machine-Human (HMI نه تنها یک نمایشگر، بلکه قلب تپنده و چشم بینای سیستم های صنعتی است. HMI به عنوان یک پل ارتباطی دیجیتال،اطلاعات پیچیده دستگاه ها و PLCها را به زبانی ساده و گرافیکی برای اپراتور ترجمه میکند کالبدشکافی عملکرد HM HMI از دو بخش […]

  • معرفی کیپد درایو اینوت

    کیپد درایو اینوت چیست؟ راهنمای کامل دکمه‌های کیپد INVT و قابلیت‌های آن کیپد درایو اینوت یکی از مهم‌ترین قسمت‌های رابط کاربری درایوهای INVT است که به اپراتور و تکنسین اجازه می‌دهد بدون نیاز به کامپیوتر، بسیاری از تنظیمات، فرمان‌ها و اطلاعات مربوط به درایو را مشاهده و کنترل کند. درایوهای اینوت در مدل‌های مختلفی مانند […]

  • منوال درایوهای آی مستر

    درایوهای آی مستر درایوهای صنعتی iMaster از جمله اینورترهای پرکاربرد برای کنترل دور موتور در کاربردهای صنعتی سبک تا نیمه سنگین هستند. این درایوها عمدتا موتورهای القایی برای راه اندازی و کنترل سه فاز بهکار میروند و بسته به سری انتخابی، امکاناتی مانند کنترل F/V، کنترل برداری بدون سنسور(Vector Sensorless)، توابع حفاظتی، ورودی/خروجی های متنوع […]

  • معرفی HMI اینوت

    HMI اینوت INVT چیست؟ معرفی کامل سری‌ها، مدل‌ها، مشخصات و کاربردها HMI اینوت INVT یکی از تجهیزات مهم در اتوماسیون صنعتی است که برای ارتباط بین اپراتور، PLC، درایو و ماشین‌آلات صنعتی مورد استفاده قرار می‌گیرد. HMI اینوت با فراهم کردن یک رابط گرافیکی به اپراتور اجازه می‌دهد وضعیت ماشین را مشاهده کرده، پارامترهای فرآیند […]