آموزش زبان STL زیمنس؛ Counter، Data Block و Logic Control

آموزش STL در PLC زیمنس با مثال‌های کاربردی

فصل چهارم: دستورات Counter در STL

Counter یا شمارنده در PLC برای شمارش رویدادها استفاده می‌شود؛ برای مثال شمارش تعداد قطعات تولیدشده، تعداد دفعات عبور قطعه از سنسور، تعداد سیکل‌های دستگاه یا تعداد دفعات اجرای یک فرآیند.

نکته بسیار مهم درباره Counter:

مقدار Counter مستقیماً داخل ACCU قرار ندارد. هر Counter ناحیه حافظه مخصوص خودش را دارد. بنابراین وقتی از عبارتی مثل C10 استفاده می‌کنیم، منظور Counter شماره 10 است، نه اینکه مقدار Counter برابر 10 باشد.

برای مثال C10 یعنی شمارنده شماره 10 و ممکن است مقدار فعلی آن 0، 5، 25 یا هر مقدار دیگری در محدوده مجاز Counter باشد.

اگر بخواهیم مقدار فعلی C10 را بخوانیم، از دستور L C10 استفاده می‌کنیم. در این حالت مقدار Counter شماره 10 از ناحیه Counter خوانده شده و در ACCU1 قرار می‌گیرد.

دستور فعال‌سازی Counter

FR
دستور FR برای آزاد یا فعال کردن Counter هنگام تشخیص لبه مثبت نتیجه منطقی RLO استفاده می‌شود. زمانی که RLO از صفر به یک تغییر کند، Counter برای عملیات شمارش آماده می‌شود. استفاده از FR همیشه الزامی نیست و در بسیاری از برنامه‌ها خود تغییر RLO برای ایجاد لبه شمارش کافی است.
مثال کوتاه
A I0.0
FR C10

در این مثال C10 یعنی Counter شماره 10 و با لبه مثبت سیگنال I0.0 فعال می‌شود.

خواندن مقدار Counter

L C10
دستور L C10 مقدار فعلی Counter شماره 10 را از ناحیه Counter می‌خواند و در ACCU1 قرار می‌دهد. توجه کنید که C10 خودِ Counter شماره 10 است؛ عدد موجود در آن ممکن است مثلاً 25 باشد.
مثال کوتاه
L C10
T MW20

مقدار فعلی Counter شماره 10 در MW20 ذخیره می‌شود.

خواندن مقدار Counter به صورت BCD

LC C10
دستور LC مقدار فعلی Counter شماره 10 را به صورت BCD در ACCU1 قرار می‌دهد. این دستور زمانی کاربرد دارد که مقدار Counter را با فرمت BCD در ادامه برنامه استفاده کنیم.
مثال کوتاه
LC C10
T MW20

Reset کردن Counter

R C10
دستور R C10 برای صفر کردن Counter شماره 10 استفاده می‌شود. اگر RLO برابر یک باشد، مقدار Counter صفر خواهد شد.
مثال کوتاه
A I0.1
R C10

با فعال شدن I0.1، Counter شماره 10 صفر می‌شود.

قرار دادن مقدار اولیه Counter

S C10
دستور S C10 برای قرار دادن مقدار Preset در Counter شماره 10 استفاده می‌شود. مقدار موردنظر قبل از اجرای S باید در قالب مناسب در ACCU قرار گرفته باشد.
مثال کوتاه
L C#20
A I0.0
S C10

با برقرار شدن شرط I0.0، مقدار اولیه Counter شماره 10 برابر 20 قرار می‌گیرد.

شمارش افزایشی

CU C10
دستور CU برای افزایش مقدار Counter شماره 10 استفاده می‌شود. هر بار که RLO از صفر به یک تغییر کند، مقدار Counter یک واحد افزایش پیدا می‌کند.
مثال کوتاه
A I0.0
CU C10

اگر Counter شماره 10 در ابتدا مقدار 5 داشته باشد، با یک لبه مثبت مقدار آن به 6 تبدیل می‌شود.

شمارش کاهشی

CD C10
دستور CD برای کاهش مقدار Counter شماره 10 استفاده می‌شود. هر بار که RLO از صفر به یک تغییر کند، مقدار Counter یک واحد کاهش پیدا می‌کند.
مثال کوتاه
A I0.0
CD C10

اگر C10 مقدار 5 داشته باشد، یک لبه مثبت باعث می‌شود مقدار آن به 4 برسد.

مثال کاربردی شمارش قطعات

A I0.0
CU C1

A I0.1
R C1

در این مثال با هر پالس سنسور روی I0.0، Counter شماره 1 یک واحد افزایش پیدا می‌کند. ورودی I0.1 نیز به عنوان فرمان Reset استفاده شده است.

فصل پنجم: Data Block در STL

Data Block یا DB برای ذخیره اطلاعات موردنیاز برنامه PLC استفاده می‌شود. در پروژه‌های صنعتی معمولاً اطلاعات مربوط به یک ماشین، تنظیمات، پارامترها و مقادیر فرآیند داخل DB نگهداری می‌شوند.

در STEP 7 با دو مفهوم مهم روبه‌رو هستیم: Shared Data Block و Instance Data Block.

Shared DB می‌تواند توسط بخش‌های مختلف برنامه استفاده شود، در حالی که Instance DB به یک FB مربوط می‌شود و داده‌های همان FB را نگهداری می‌کند.

باز کردن Data Block

OPN DB10
دستور OPN برای باز کردن یک Data Block استفاده می‌شود. در این مثال DB10 یعنی Data Block شماره 10. بعد از باز شدن DB می‌توان با دستورات مربوط به DB به داده‌های آن دسترسی پیدا کرد.
مثال کوتاه
OPN DB10
L DBW0
T MW20

ابتدا DB10 باز می‌شود، سپس مقدار DBW0 خوانده شده و در MW20 قرار می‌گیرد.

جابه‌جایی Shared DB و Instance DB

CDB
دستور CDB برای Exchange کردن وضعیت Shared DB و Instance DB فعال استفاده می‌شود. با این دستور اطلاعات رجیسترهای مربوط به DBهای فعال با یکدیگر جابه‌جا می‌شوند.
مثال کوتاه
OPN DB10
OPN DI20
CDB

دریافت طول Shared DB

L DBLG
دستور L DBLG طول Shared Data Block فعال را در ACCU1 قرار می‌دهد. این قابلیت می‌تواند برای بررسی اندازه Data Block از داخل برنامه استفاده شود.
مثال کوتاه
OPN DB10
L DBLG
T MW10

دریافت شماره Shared DB

L DBNO
دستور L DBNO شماره Shared Data Block فعال را در ACCU1 قرار می‌دهد. به عنوان مثال اگر DB10 فعال باشد، مقدار شماره آن 10 خواهد بود.
مثال کوتاه
OPN DB10
L DBNO
T MW10

دریافت طول Instance DB

L DILG
دستور L DILG طول Instance Data Block فعال را در ACCU1 قرار می‌دهد. این دستور برای بررسی اندازه Instance DB فعال کاربرد دارد.
مثال کوتاه
OPN DI10
L DILG
T MW10

دریافت شماره Instance DB

L DINO
دستور L DINO شماره Instance Data Block فعال را در ACCU1 قرار می‌دهد. بنابراین می‌توان شماره Instance DB در حال استفاده را از داخل برنامه بررسی کرد.
مثال کوتاه
OPN DI10
L DINO
T MW10

مثال کاربردی Data Block

OPN DB10

L DBW0
T MW20

L DBW2
T MW22

در این مثال DB10 باز می‌شود و اطلاعات موجود در DBW0 و DBW2 به Markerهای MW20 و MW22 منتقل می‌شوند.

فصل ششم: Logic Control و دستورات Jump

در STL برنامه معمولاً از بالا به پایین اجرا می‌شود، اما با استفاده از دستورات Jump می‌توان مسیر اجرای برنامه را تغییر داد.

به کمک Jump می‌توان بر اساس وضعیت ورودی‌ها، نتیجه محاسبات، Overflow یا وضعیت BR تصمیم گرفت که کدام بخش برنامه اجرا شود.

Label چیست؟

Label یک نام برای مشخص کردن مقصد پرش است. مثلاً:

NEXT:

در این مثال NEXT نام Label است و هر دستور Jump می‌تواند برنامه را به این نقطه منتقل کند.

پرش بدون شرط

JU
دستور JU مخفف Jump Unconditional است. این دستور بدون توجه به وضعیت RLO یا نتیجه محاسبات، مستقیماً به Label مشخص‌شده پرش می‌کند.
مثال کوتاه
JU NEXT

L 10
T MW10

NEXT:
L 20
T MW10

بخش بین JU NEXT و NEXT اجرا نمی‌شود و برنامه مستقیماً به NEXT می‌رود.

پرش بر اساس مقدار ACCU

JL
دستور JL یا Jump to Label برای انتخاب یکی از چند مسیر پرش استفاده می‌شود. انتخاب مسیر بر اساس مقدار موجود در ACCU1 انجام می‌شود. مقدار موجود در بخش Low از ACCU1 مشخص می‌کند کدام مسیر انتخاب شود. بنابراین JL برای ساختارهای چندشاخه در STL بسیار کاربردی است.
مثال کوتاه
L 1
JL SELECT

JU SEG0
JU SEG1
JU SEG2

SEG0:
L 10
JU END

SEG1:
L 20
JU END

SEG2:
L 30

END:
T MW10
نکته مهم: در JL فقط یک Jump ساده نداریم؛ مقدار موجود در ACCU1 تعیین می‌کند برنامه به کدام Label از جدول Jump منتقل شود.

پرش در صورت RLO برابر یک

JC
دستور JC زمانی اجرا می‌شود که RLO برابر یک باشد. در این حالت برنامه به Label مشخص‌شده پرش می‌کند. این دستور برای ساختن شرط‌های IF در STL بسیار کاربردی است.
مثال کوتاه
A I0.0
JC RUN

JU STOP

RUN:
L 1
T MW10

STOP:
NOP 0

پرش در صورت RLO برابر صفر

JCN
دستور JCN زمانی پرش می‌کند که RLO برابر صفر باشد. به زبان ساده می‌توان از آن برای ساخت شرط «اگر شرط برقرار نبود، به این قسمت برو» استفاده کرد.
مثال کوتاه
A I0.0
JCN OFF

L 100
T MW10

OFF:
NOP 0

پرش با ذخیره RLO در BR

JCB
دستور JCB در صورتی که RLO برابر یک باشد پرش می‌کند و در عین حال وضعیت RLO را در بیت BR ذخیره می‌کند. بنابراین می‌توان از نتیجه ذخیره‌شده در BR در ادامه برنامه استفاده کرد.
مثال کوتاه
A I0.0
JCB RUN

L 0
T MW10

RUN:
L 1
T MW10

پرش در صورت RLO صفر با BR

JNB
دستور JNB در صورتی که RLO برابر صفر باشد پرش می‌کند و وضعیت RLO را در BR ذخیره می‌کند.
مثال کوتاه
A I0.0
JNB OFF

L 100
T MW10

OFF:
NOP 0

پرش در صورت BR برابر یک

JBI
دستور JBI زمانی پرش می‌کند که بیت BR برابر یک باشد. بنابراین باید وضعیت BR از قبل توسط برنامه ایجاد یا ذخیره شده باشد.
مثال کوتاه
A I0.0
SAVE
JBI RUN

L 0
T MW10

RUN:
L 1
T MW10

پرش در صورت BR برابر صفر

JNBI
دستور JNBI زمانی پرش می‌کند که بیت BR برابر صفر باشد. این دستور برای بررسی نتیجه‌ای که قبلاً در BR ذخیره شده است کاربرد دارد.
مثال کوتاه
A I0.0
SAVE
JNBI STOP

L 1
T MW10

STOP:
NOP 0

تفاوت OV و OS

وضعیت
مفهوم
کاربرد
OV
Overflow
وضعیت Overflow مربوط به نتیجه فعلی عملیات
OS
Stored Overflow
وضعیت ذخیره‌شده Overflow برای استفاده بعدی در همان چرخه

تفاوت اصلی این است که OV وضعیت Overflow جاری را نشان می‌دهد، در حالی که OS نتیجه Overflow را به صورت ذخیره‌شده نگه می‌دارد. به همین دلیل ممکن است OV در ادامه یک دستور تغییر کند، اما OS برای نگه‌داشتن اطلاعات Overflow قبلی مورد استفاده قرار گیرد.

پرش در صورت Overflow

JO
دستور JO مخفف Jump if Overflow است. اگر بیت OV برابر یک باشد، برنامه به Label مشخص‌شده پرش می‌کند. این دستور برای تشخیص خطا یا معتبر نبودن نتیجه عملیات ریاضی کاربرد دارد.
مثال کوتاه
L MW0
L 3
*I
JO OVER

T MW10
JU END

OVER:
L 0
T MW10

END:
NOP 0

پرش بر اساس Overflow ذخیره‌شده

JOS
دستور JOS مخفف Jump if Stored Overflow است. اگر بیت OS برابر یک باشد، برنامه به Label مشخص‌شده پرش می‌کند. این دستور زمانی مهم است که بخواهیم نتیجه Overflow ذخیره‌شده را بعداً بررسی کنیم.
مثال کوتاه
L MW0
L 3
*I
JOS OVER

T MW10

OVER:
NOP 0

پرش در صورت صفر بودن نتیجه

JZ
دستور JZ مخفف Jump if Zero است. اگر نتیجه عملیات محاسباتی برابر صفر باشد، برنامه به Label مشخص‌شده پرش می‌کند.
مثال کوتاه
L MW0
L MW2
-I
JZ ZERO

ZERO:
L 0
T MW10

پرش در صورت صفر نبودن نتیجه

JN
دستور JN در صورتی که نتیجه عملیات صفر نباشد، برنامه را به Label مشخص‌شده منتقل می‌کند.
مثال کوتاه
L MW0
L 0
-I
JN NOTZERO

NOTZERO:
L 1
T MW10

پرش در صورت مثبت بودن نتیجه

JP
دستور JP زمانی پرش می‌کند که نتیجه عملیات بزرگ‌تر از صفر باشد.
مثال کوتاه
L MW0
L 10
-I
JP POSITIVE

POSITIVE:
L 1
T MW10

پرش در صورت منفی بودن نتیجه

JM
دستور JM زمانی پرش می‌کند که نتیجه محاسبات کوچک‌تر از صفر باشد.
مثال کوتاه
L MW0
L 10
-I
JM NEGATIVE

NEGATIVE:
L 1
T MW10

پرش در صورت مثبت یا صفر

JPZ
دستور JPZ زمانی پرش می‌کند که نتیجه محاسبات بزرگ‌تر یا مساوی صفر باشد. بنابراین دو حالت مثبت و صفر را پوشش می‌دهد.
مثال کوتاه
L MW0
L 10
-I
JPZ OK

L 0
T MW10

OK:
L 1
T MW10

پرش در صورت منفی یا صفر

JMZ
دستور JMZ زمانی پرش می‌کند که نتیجه عملیات کوچک‌تر یا مساوی صفر باشد.
مثال کوتاه
L MW0
L 10
-I
JMZ LOW

L 1
T MW10

LOW:
L 0
T MW10

پرش در شرایط Unordered

JUO
دستور JUO مخفف Jump if Unordered است. در عملیات‌هایی که نتیجه می‌تواند وضعیت Unordered ایجاد کند، می‌توان از این دستور برای انتقال برنامه به مسیر مناسب استفاده کرد. این دستور بیشتر در محاسبات و مقایسه‌های خاص عددی اهمیت پیدا می‌کند.
مثال کوتاه
L MD10
L 0
/D
JUO ERROR

T MD14

ERROR:
L 0
T MD14

ایجاد حلقه تکرار

LOOP
دستور LOOP برای ایجاد یک حلقه تکرار در برنامه STL استفاده می‌شود. تعداد دفعات اجرای حلقه در بخش Low از ACCU1 قرار می‌گیرد. هر بار که دستور LOOP اجرا می‌شود، یک واحد از 8 بیت پایین ACCU1 یعنی ACCU-LL کم می‌شود. اگر مقدار ACCU-LL بعد از کاهش برابر صفر نباشد، برنامه به Label مشخص‌شده برمی‌گردد و حلقه ادامه پیدا می‌کند. وقتی ACCU-LL به صفر برسد، پرش انجام نمی‌شود و اجرای برنامه ادامه پیدا می‌کند.
مثال کوتاه
L 10

NEXT:
L MW10
L 1
+I
T MW10

LOOP NEXT
روند اجرای LOOP:
مقدار 10 ابتدا در ACCU-LL قرار می‌گیرد.
بعد از هر اجرای LOOP، یک واحد از ACCU-LL کم می‌شود.
تا زمانی که ACCU-LL صفر نشده باشد، برنامه دوباره به Label یعنی NEXT برمی‌گردد.
بنابراین در این مثال حلقه 10 بار اجرا می‌شود.

مثال ترکیبی از Jump

L MW10
L 50
-I
JM LOW

L MW10
L 50
-I
JP HIGH

JU NORMAL

LOW:
L 1
T MW20
JU END

NORMAL:
L 2
T MW20
JU END

HIGH:
L 3
T MW20

END:
NOP 0

در این مثال مقدار MW10 با عدد 50 مقایسه می‌شود. اگر نتیجه منفی باشد، مسیر LOW اجرا می‌شود. اگر نتیجه مثبت باشد، مسیر HIGH اجرا می‌شود. و در صورت صفر بودن نتیجه، برنامه وارد مسیر NORMAL خواهد شد.

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

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

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

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

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

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

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

    دانلود کاتالوگ و منوال درایو اشنایدر درایوهای Schneider Electric، محصول شرکت فرانسوی Schneider Electric، از معتبرترین و پرکاربردترین تجهیزات کنترل دور موتور در صنعت برق و اتوماسیون صنعتی هستند. این درایوها با نام تجاری *Altivar* شناخته می‌شوند و با تغییر فرکانس و ولتاژ خروجی، امکان کنترل دقیق سرعت، گشتاور و جهت چرخش موتورهای القایی را […]

  • منوال فارسی اینورتر اشنایدر ATV312 | کاتالوگ و راهنمای تنظیمات درایو ATV312

    راهنمای فارسی درایو ATV312 اینورتر اشنایدر ATV312 یکی از محبوب‌ترین محصولات خانواده Altivar شرکت Schneider Electric است که برای کنترل دور موتورهای آسنکرون سه‌فاز در کاربردهای صنعتی طراحی شده است. این سری به دلیل کیفیت ساخت بالا، قابلیت اطمینان، راه‌اندازی آسان و امکانات کنترلی متنوع، سال‌ها در کارخانه‌ها، خطوط تولید و ماشین‌آلات صنعتی مورد استفاده […]

  • اینورتر اینوت INVT GD600

    معرفی اینورتر GD600 INVT معرفی اینورتر INVT GD600 اینورتر INVT GD600 یک درایو صنعتی پیشرفته از شرکت INVT است که برای کنترل هم‌زمان چندین موتور در خطوط تولید طراحی شده است. این سری بر پایه معماری Common DC Bus ساخته شده و از دو واحد یکسوساز (Rectifier Unit) و اینورتر (Inverter Unit) تشکیل می‌شود. در […]

  • تنظیم پارامتر درایو GD10 اینوت | کاتالوگ فارسی اینورتر GD10

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

  • تنظیم پارامتر های اینورتر Santerno sinus vega

    تنظیم پارامتر های اینورتر سانترنو سینوس وگا Santerno sinus vega برای تنظیم پارامتر های اولیه اینورتر سانترنو سینوس وگا(Santerno sinus vega) ابتدا نیاز داریم بدانیم سیم بندی ترمینال های فرمان چگونه است. در تصویر زیر سیم کشی سیم های فرمان نشان داده شده است. دریافت منوال کامل سانترنو ترمینال GND   ﺗﺮﻣﯿﻨﺎل ﺟﻬﺖ اﺗﺼﺎل ﭘﺘانسیومتر  و […]

  • تنظیمات بوسترپمپ درایو دانفوس

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

  • آموزش زبان STL -دستورات ریاضی و ADDRESS REGISTER

    آموزش زبان STL زیمنس؛ دستورات ریاضی، ACCU و Load و Transfer آموزش ‌ STL در PLC زیمنس با مثال‌های کاربردی فصل هفتم: دستورات Math روی اعداد صحیح در این فصل وارد بخش محاسباتی STL می‌شویم. برای انجام عملیات ریاضی، CPU از رجیسترهای ACCU استفاده می‌کند. بنابراین درک درست ACCU1 و ACCU2 پیش‌نیاز کار با دستورات […]

  • معرفی ET200SP زیمنس

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