آموزش آدرس‌دهی غیرمستقیم در 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
برق موشن نمایندگی زیمنس | فروش، تعمیرات و اجرای پروژه‌های اتوماسیون صنعتی
  • تنظیمات بوسترپمپ درایو دانفوس

    تنظیمات بوسترپمپ درایو دانفوس درایو DANFOSS FC51  شرکت دانفوس یکی از پرکاربردترین اینورتر های شرکت دانفوس است . اينورتر FC51 با نام Micro VLT Danfoss که توسط شرکت دانفوس توليد می شود در محدوده توان 0.18 کيلو وات تا 22 کيلو وات موجود است . مدل تکفاز اين اينورتر، از 0.18 تا 2.2 کيلو وات […]

  • آموزش زبان STL -دستورات تایمر و شیفت رجیستر

    آموزش زبان STL زیمنس؛ کنترل برنامه، تایمر و عملیات داده آموزش دستورات Program Control، Shift و Rotate، Timer، Word Logic و Accumulator بخش دهم: Program Control دستورات Program Control برای کنترل روند اجرای برنامه استفاده می‌شوند. با کمک این دستورات می‌توان اجرای یک Block را پایان داد، بلوک دیگری را فراخوانی کرد یا بخشی از […]

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

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

  • PID پی ال سی فتک

    PID در پی ال سی فتک استفاده از PID با پی ال سی فتک یکی از راهکارهای کاربردی برای کنترل دقیق فرآیندهای صنعتی است. کنترل PID در PLC FATEK امکان کنترل پارامترهایی مانند دما، فشار، دبی، سطح و سرعت را فراهم می‌کند. مفهوم PID به زبان ساده (در محیط صنعتی) P: P (Proportional – تناسبی): […]

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

    کیپد ATV320 چیست؟ راهنمای کامل دکمه‌ها، تنظیمات و قابلیت‌های کیپد اشنایدر کیپد ATV320 یکی از مهم‌ترین ابزارهای کار با درایو Altivar Machine ATV320 اشنایدر الکتریک است. این پنل به کاربر اجازه می‌دهد بدون نیاز به کامپیوتر، بسیاری از پارامترهای درایو را مشاهده و تنظیم کند. درایو ATV320 یکی از درایوهای پرکاربرد اشنایدر در ماشین‌آلات صنعتی، […]

  • درایوهای Fuji

    درایوهای فرکانس متغیر(VFD)شرکت Electric Fuji از پیشرفته ترین تجهیزات کنترل دور موتور در صنعت هستند. این درایوها با تنظیم دقیق فرکانس و ولتاژ خروجی، علاوه بر بهینه سازی مصرف انرژی، کنترل گشتاور و سرعت را با دقت بالا فراهم میکنند. این مقاله به بررسی ساختار،کاربردها و نکات فنی سری های مختلف درایو فوجی میپردازد کاربردهای […]

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

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

  • HMI فتک | معرفی، مشخصات و کاربرد HMI FATEK

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

  • آموزش PLC دلتا؛ هر آنچه برای شروع باید بدانید

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