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

    پروتکل های ارتباطی زیمنس و معرفی شبکه های صنعتی Siemens در دنیای اتوماسیون صنعتی، ارتباط بین تجهیزات مختلف اهمیت بسیار زیادی دارد. شرکت زیمنس (Siemens) به عنوان یکی از بزرگترین تولیدکنندگان تجهیزات اتوماسیون صنعتی، سال‌هاست که شبکه‌ها و پروتکل‌های ارتباطی متنوعی را برای اتصال PLC، درایو، HMI، سنسورها و سیستم‌های کنترل ارائه کرده است. پروتکل […]

  • نرم افزار درایو زیمنس

    نرم افزار درایو زیمنس چیست؟ معرفی کامل نرم افزارهای تنظیم و برنامه نویسی درایو Siemens درایوهای صنعتی یکی از مهم‌ترین تجهیزات کنترل موتور در کارخانه‌ها و خطوط تولید هستند. شرکت زیمنس (Siemens) به عنوان یکی از بزرگ‌ترین تولیدکنندگان تجهیزات اتوماسیون صنعتی، برای تنظیم، راه‌اندازی، پارامتردهی و عیب‌یابی درایوهای خود نرم افزارهای تخصصی ارائه کرده است. […]

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

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

  • معرفی HMI اینوت | کاتالوگ HMI اینوت

    معرفی HMI اینوت + کاتالوگ HMI اینوت یا HMI INVT یکی از تجهیزات کاربردی در اتوماسیون صنعتی است که برای ایجاد ارتباط بین اپراتور و سیستم کنترل مورد استفاده قرار می‌گیرد. HMI یا Human Machine Interface به اپراتور اجازه می‌دهد اطلاعات مربوط به ماشین و فرآیند را مشاهده و بسیاری از پارامترهای سیستم را کنترل […]

  • انواع مدل های HMI اینوت

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

  • تنظیمات قطع و وصل برق درایو اینوت GD27

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

  • ماکرو های درایو V20 زیمنس

    تنظیم Connection Macro در درایو زیمنس در درایوهای زیمنس، Connection Macro برای انتخاب تنظیمات آماده مربوط به نحوه فرمان‌دهی، مرجع فرکانس، ورودی‌ها و خروجی‌های درایو استفاده می‌شود. این تنظیمات می‌توانند برای کاربردهای مختلف، فرآیند راه‌اندازی و تنظیم اولیه درایو را ساده‌تر کنند. نکته مهم: تغییر Connection Macro یک تنظیم یک‌باره محسوب می‌شود و طبق منوال، […]

  • تفاوت PLC دلتا و زیمنس؛ مقایسه امکانات، قیمت و کاربردها

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

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

    دانلود منوال و کاتالوگ درایو کومارک درایو یا اینورتر فرکانس متغیر، یکی از مهمترین تجهیزات در اتوماسیون صنعتی و کنترل دور موتورهای AC است. در میان برندهای موجود در بازار، Cumark با سری های مختلف ES توانسته جایگاهی در کاربردهای عمومی، نیمه سنگین و صنعتی پیدا کند. این درایوها برای کنترل سرعت، گشتاور، بهینه سازی […]