زبان برنامهنویسی Statement List که به اختصاربا STL شناخته میشود، یکی از زبانهای برنامهنویسی استاندارد جهانی برای PLC میباشد. این زبان جزء یکی از پنچ زبان پرکاربرد و قدیمی برنامهنویسی PLC میباشد، که میتوان گفت بدون آموزش زبان STL، دانش برنامهنویسی کامل نخواد شد. این زبان در بسیاری از PLCهای معتبر قابل اجرا است ولی بیشترین کاربرد آن در PLC زیمنس میباشد. درنتیجه جهت یادگیری این زبان بهترین انتخاب شرکت در دورههای آموزش PLC زیمنس است. در این مقاله سعی بر تشریح جایگاه STL، ساختار حافظه CPU و دستورات برنامهنویسی به وسیله این زبان را داریم.
معرفی زبان برنامهنویسی STL
زبان STL یکی از زبانهای برنامهنویسی استاندارد PLC است که بر اساس دستورهای متنی و خط به خط نوشته میشود. این زبان شباهت زیادی به زبان اسمبلی (Assembly) دارد و به برنامهنویس این امکان را میدهد که با جزئیات دقیق روی عملیات کنترلی و منطقی کنترل داشته باشد. برخلاف زبانهای گرافیکی مانند Ladder Diagram یا Function Block Diagram که بیشتر بصری هستند، STL به صورت متنی و کد محور نوشته میشود، این ویژگی باعث میشود مهندسان بتوانند ساختار برنامه را بهتر درک کنند و در پروژههای پیچیده، کنترل و بهینهسازی دقیقتری روی فرآیندها اعمال نمایند. همچنین درآموزش PLC استفاده از این زبان، کمک بزرگی در درک بهتر برنامهنویسی برندهای مختلف PLC دارد. از جمله مزایای آموزش زبان STL میتوان به امکان کنترل دقیق و جزئی بر روی دستورات داده شده اشاره نمود. همچنین به دلیل ساختار برنامهنویسی خط به خط، سرعت بالایی در اجرای دستورات دارد. در بین زبانهای برنامهنویسی PLC، این زبان در پایینترین و ابتداییترین سطوح ماشین قرار دارد، به طوریکه زبانهای برنامهنویسی دیگر در نهایت به این زبان تبدیل شده و به CPU دانلود میشوند.
ساختار زبان برنامهنویسی STL
زبان STL بر پایه نوشتن دستورات خطی و متوالی طراحی شده است. هر خط برنامه یک دستور مشخصی را اجرا میکند و پردازشگر PLC این دستورات را از ابتدا تا انها، خط به خط اجرا میکند. جهت آموزش زبان STL نیاز به آشنایی با بخشهای مختلف این زبان میباشید، که در ادامه آنها را معرفی میکنیم.
- تعاریف: بخشی که مخصوص معرفی متغییرها، آدرسها و دادهها میباشد.
- نتورک بلوک: مخصوص تقسیم کد به شبکهها جهت سازماندهی بهتر میباشد.
- دستورالعملها: مجموعهای از دستورات منطقی، ریاضی و کنترلی که عملیات را اجرا میکنند.
همچنین میتوان گفت که دستورات STL از چهار بخش تشکیل شده است که در پایین مشاهده مینمایید. در ادامه به توضیح مختصر هر یک از این بخشها میپردازیم.
- Label: جهت دستورات پرش استفاده میشود.
- Command: مربوط به دستورات نوشته شده.
- Operand: این بخش میتواند به آدرس اطلاق داده شود.
- Comment: توضیحات مورد نیاز دستور نوشته میشود.
برنامهنویسی و فانکشن بلوک STL
در هر CPU تعدادی فانکشن و فانکشن بلوک وجود دارد که از نوع سیستمی میباشند و به اختصار به SFC و SFB شناخته میشوند. این فانکشنها در حافظه CPU ذخیره میشوند، و قابل پاک شدن نیستند و با ریاستارت و یا قطعووصلی پاک نمیشوند. هر چه CPU حجم حافظه بیشتری داشته باشد، از فانکشنهای بیشتر پشتیبانی میکند. جهت مشاهده لیست این فانکشنهای سیستمی میتوان با استفاده از پنجره Module Information به سربرگ Perfprmance Data رفته و نمونه دستورات سیسمی ذخیره شده را پیدا نمود. تمام فانکشنهای سیستمی در کتابخانه نرمافزار در زیر مجموعه Standrard Library مانند عکس زیر قرار دارند.
در پروژههای صنعتی، سه گروه دستوری عملیاتهای منطقی، دستورات مقایسهای و دستورات ریاضی، تقریبا هشتاد درصد کدهای STL را تشکیل میدهند و جهت آموزش زبان STL، پیشنهاد میشود از این دستورات استفاده شود. در ادامه به بررسی و معرفی این سه گروه فانکشن میپردازیم.
دستورات Bit Logic در STL
دستورات Bit Logic پایه و اساس هر برنامه PLC را تشکیل میدهند و امکان کار با ورودیها، خروجیها و بیتهای حافظه را فراهم میکنند .در زبان STL دستورات Bit Logic جهت کنترل وضعیت بیتها و انجام عملیاتی منطقی بین آنها به کار میرود. این دستورات عملیات را روی یک بیت انجام میدهند. با نوشتن این دستورات، هر خط بر روی وضعیت RLO که نتیجه منطقی عملیات میباشد، تاثیر میگذرد. در ادامه به معرفی این دستورات میپردازیم.
نام | نام کامل (Full Name) | عملکرد |
---|---|---|
A | AND | انجام عمل منطقی AND بین RLO و بیت انتخابشده |
AN | AND NOT | معکوس کردن بیت انتخابشده و سپس AND با RLO |
O | OR | انجام عمل منطقی OR بین RLO و بیت انتخابشده |
ON | OR NOT | معکوس کردن بیت انتخابشده و سپس OR با RLO |
X | Exclusive OR (XOR) | انجام عمل منطقی XOR بین RLO و بیت انتخابشده |
XN | Exclusive OR NOT | معکوس کردن بیت انتخابشده و سپس XOR با RLO |
NOT | NOT | معکوس کردن RLO فعلی |
S | SET | روشن کردن (Set) یک بیت مشخص |
R | RESET | خاموش کردن (Reset) یک بیت مشخص |
= | Assign | قرار دادن مقدار RLO در آدرس مقصد |
A( … ) | AND Block | شروع یک بلوک شرطی AND |
AN( … ) | AND NOT Block | شروع بلوک شرطی AND با بیت معکوس |
O( … ) | OR Block | شروع یک بلوک شرطی OR |
ON( … ) | OR NOT Block | شروع بلوک شرطی OR با بیت معکوس |
) | Close Block | پایان دادن به بلوک شرطی (بستن پرانتز) |
FP | Positive Edge Detection | تشخیص لبه مثبت سیگنال |
FN | Negative Edge Detection | تشخیص لبه منفی سیگنال |
SPB | Unconditional Jump | پرش بدون شرط به برچسب مشخصشده |
SPBN | Jump if Not (RLO=0) | پرش اگر RLO صفر باشد |
SPBNB | Jump if Not with Block | پرش اگر RLO صفر باشد (با عبور از بلوک) |
SPBB | Jump if (RLO=1) | پرش اگر RLO یک باشد |
=I | Assign to Input | قرار دادن RLO در ورودی مشخص |
=Q | Assign to Output | قرار دادن RLO در خروجی مشخص |
=M | Assign to Memory Bit | قرار دادن RLO در بیت حافظه مشخص |
L | Load | بارگذاری مقدار یا بیت در آکومولاتور برای عملیات بعدی |
دستورات مقایسهای زبان برنامهنویسی STL
دستورات مقایسهای جهت تحلیل دادههای عددی و تصمیمگیریهای شرطی در آموزش زبان STL ضروری هستند. در زبان STL، جهت مقایسه دو مقدار عددی یا بیتی از دستورات Comparison Instruction یا مقایسهای استفاده میشود. با استفاده از این دستورات میتوان به تصمیمگیری و تنیجهگیری اطلاعات پرداخت. در ادامه به معرفی دستورات مقایسهای در زبان STL میپردازیم.
نام | نام کامل (Full Name) | عملکرد |
---|---|---|
==I | Equal (Integer) | مقایسه برابری دو عدد صحیح (Integer) |
==D | Equal (Double Integer) | مقایسه برابری دو عدد صحیح 32 بیتی |
==R | Equal (Real) | مقایسه برابری دو عدد اعشاری (Real) |
<>I | Not Equal (Integer) | بررسی نابرابری دو عدد صحیح |
<>D | Not Equal (Double Integer) | بررسی نابرابری دو عدد صحیح 32 بیتی |
<>R | Not Equal (Real) | بررسی نابرابری دو عدد اعشاری |
>I | Greater Than (Integer) | بررسی بزرگتر بودن یک عدد صحیح از دیگری |
>D | Greater Than (Double Integer) | بررسی بزرگتر بودن یک عدد صحیح 32 بیتی از دیگری |
>R | Greater Than (Real) | بررسی بزرگتر بودن یک عدد اعشاری از دیگری |
<I | Less Than (Integer) | بررسی کوچکتر بودن یک عدد صحیح از دیگری |
<D | Less Than (Double Integer) | بررسی کوچکتر بودن یک عدد صحیح 32 بیتی از دیگری |
<R | Less Than (Real) | بررسی کوچکتر بودن یک عدد اعشاری از دیگری |
>=I | Greater or Equal (Integer) | بررسی بزرگتر یا مساوی بودن یک عدد صحیح |
>=D | Greater or Equal (Double Integer) | بررسی بزرگتر یا مساوی بودن یک عدد صحیح 32 بیتی |
>=R | Greater or Equal (Real) | بررسی بزرگتر یا مساوی بودن یک عدد اعشاری |
<=I | Less or Equal (Integer) | بررسی کوچکتر یا مساوی بودن یک عدد صحیح |
<=D | Less or Equal (Double Integer) | بررسی کوچکتر یا مساوی بودن یک عدد صحیح 32 بیتی |
<=R | Less or Equal (Real) | بررسی کوچکتر یا مساوی بودن یک عدد اعشاری |
دستورات محاسبات ریاضی در STL
- دستورات محاسباتی امکان انجام عملیات ریاضی پیچیده و کنترل فرآیندهای صنعتی را میسر میکنند. در آموزش زبان STL جهت انجام محاسبات ریاضی بر روی دادهها از دستورات Arithmetic استفاده میشود. این دادهها میتوانند عدد صحیح، عدد 32 بیتی و عدد اعشاری باشد. نوع داده با پسوند دستور به شکل زیر نمایش داده میشود. جهت مشاهده تمامی دستورات محاسباتی در STL به جدول زیر مراجعه نمایید.
- I = عدد صحیح ۱۶ بیتی (Integer)
- D = عدد صحیح ۳۲ بیتی (Double Integer)
- R = عدد اعشاری (Real)
نام | نام کامل (Full Name) | عملکرد |
---|---|---|
+I | Add Integer | جمع دو عدد صحیح 16 بیتی |
+D | Add Double Integer | جمع دو عدد صحیح 32 بیتی |
+R | Add Real | جمع دو عدد اعشاری (Real) |
-I | Subtract Integer | تفریق دو عدد صحیح 16 بیتی |
-D | Subtract Double Integer | تفریق دو عدد صحیح 32 بیتی |
-R | Subtract Real | تفریق دو عدد اعشاری |
*I | Multiply Integer | ضرب دو عدد صحیح 16 بیتی |
*D | Multiply Double Integer | ضرب دو عدد صحیح 32 بیتی |
*R | Multiply Real | ضرب دو عدد اعشاری |
/I | Divide Integer | تقسیم دو عدد صحیح 16 بیتی |
/D | Divide Double Integer | تقسیم دو عدد صحیح 32 بیتی |
/R | Divide Real | تقسیم دو عدد اعشاری |
MOD | Modulus | محاسبه باقیمانده تقسیم |
INC | Increment | افزایش یک واحد به عدد |
DEC | Decrement | کاهش یک واحد از عدد |
NEG | Negate | معکوس کردن علامت عدد (مثبت به منفی یا بالعکس) |
ABS | Absolute Value | محاسبه قدر مطلق عدد |
SQRT | Square Root | محاسبه ریشه دوم عدد (فقط برای Real) |
LN | Natural Logarithm | محاسبه لگاریتم طبیعی عدد |
EXP | Exponential | محاسبه توان e به عدد دادهشده |
SIN | Sine | محاسبه سینوس (زاویه به رادیان) |
COS | Cosine | محاسبه کسینوس (زاویه به رادیان) |
TAN | Tangent | محاسبه تانژانت (زاویه به رادیان) |
برنامهنویسی با فانکشنهای IEC
فانکشنهای این زبان برنامهنویسی که با IEC شناخته میشود، جهت عملیاتهای کنترلی و محاسباتی پیچیده و دشوار مورد استفاده قرار میگیرند. در واقع این توابع مجموعهای از فانکشن و فانکشن بلوکهای آماده هستند که در همه زبانهای برنامهنویسی PLC زیمنس به کار گرفته میشوند. این فانکشنها سیستمی نیستند و بایستی ابتدا خود فانکشن به CPU دانلود شوند و سپس برنامه دانلود بشود تا منجر به توقف نشود. فانکشنهای IEC را با توجه به عملکردشان میتوان به سه دستهی مربوط به تاریخ و زمان، مربوط به رشتههای استرینگ و مربوط به متغییرهای عددی، تقسیم نمود. درواقع IEC Functions استانداردهای بینالمللی را در برنامهنویسی PLC تضمین میکنند و قابلیت استفاده چند زبانه را فراهم میآورند. لیست کامل این فانکشنها را در جدول زیر مشاهده میفرمایید.
نام فانکشن | شرح به فارسی |
---|---|
FC3 D_TOD_DT | ترکیب تاریخ و زمان روز به یک مقدار تاریخ-زمان |
FC6 DT_DATE | استخراج تاریخ از مقدار تاریخ-زمان |
FC7 DT_DAY | استخراج روز هفته از مقدار تاریخ-زمان |
FC8 DT_TOD | استخراج زمان روز از مقدار تاریخ-زمان |
FC33 S5TI_TIM | تبدیل نوع داده S5TIME به TIME |
FC40 TIM_S5TI | تبدیل نوع داده TIME به S5TIME |
FC16 L_STRNG | تبدیل نوع داده LONGINT به رشته |
FC5 DI_STRNG | تبدیل نوع داده DINT به رشته |
FC30 R_STRNG | تبدیل نوع داده REAL به رشته |
FC38 STRNG_I | تبدیل رشته به نوع داده INT |
FC37 STRNG_DI | تبدیل رشته به نوع داده DINT |
FC39 STRNG_R | تبدیل رشته به نوع داده REAL |
FC9 EQ_DT | مقایسه دو مقدار تاریخ-زمان برای برابری |
FC12 GE_DT | مقایسه مقدار تاریخ-زمان برای بزرگتر یا مساوی بودن |
FC14 GT_DT | مقایسه مقدار تاریخ-زمان برای بزرگتر بودن |
FC18 LE_DT | مقایسه مقدار تاریخ-زمان برای کوچکتر یا مساوی بودن |
FC23 LT_DT | مقایسه مقدار تاریخ-زمان برای کوچکتر بودن |
FC28 NE_DT | مقایسه مقدار تاریخ-زمان برای نامساوی بودن |
FC10 EQ_STRNG | مقایسه رشتهها برای برابری |
FC13 GE_STRNG | مقایسه رشتهها برای بزرگتر یا مساوی بودن |
FC15 GT_STRNG | مقایسه رشتهها برای بزرگتر بودن |
FC19 LE_STRNG | مقایسه رشتهها برای کوچکتر یا مساوی بودن |
FC24 LT_STRNG | مقایسه رشتهها برای کوچکتر بودن |
FC29 NE_STRNG | مقایسه رشتهها برای نامساوی بودن |
FC21 LEN | طول متغیر رشتهای |
FC20 LEFT | بخش سمت چپ یک متغیر رشتهای |
FC32 RIGHT | بخش سمت راست یک متغیر رشتهای |
FC26 MID | بخش میانی یک متغیر رشتهای |
FC2 CONCAT | ترکیب دو متغیر رشتهای |
FC17 INSERT | وارد کردن در یک متغیر رشتهای |
FC4 DELETE | حذف در یک متغیر رشتهای |
FC31 REPLACE | جایگزینی در یک متغیر رشتهای |
FC11 FIND | جستجو در یک متغیر رشتهای |
FC1 AD_DT_TM | افزودن مدت زمان به یک زمان |
FC35 SB_DT_TM | کم کردن مدت زمان از یک زمان |
FC34 SB_DT_DT | کم کردن دو مقدار زمانی |
FC22 LIMIT | محدودیت |
FC25 MAX | انتخاب حداکثر مقدار |
FC27 MIN | انتخاب حداقل مقدار |
FC36 SEL | انتخاب دودویی |
نتیجهگیری
یادگیری دستورات گفته شده و فهم عمیق نحوه کارکرد آنها، پایهای اساسی برای توسعه برنامههای قابل اعتماد و بهینه در محیطهای صنعتی است. آموزش زبان STL با توجه به سادگی نسبی و قدرت انعطافپذیرش، گزینهای مناسب برای برنامهنویسانی است که میخواهند کنترل دقیقی روی روند اجرای برنامه داشته باشند. در نهایت، تسلط بر این دستورات و مفاهیم، مهندسان را قادر میسازد تا سیستمهای اتوماسیون را به شکل بهینه و قابل اطمینان طراحی، پیادهسازی و عیبیابی کنند.
دانلود منابع آموزشی زبان STL
اطلاعات جمعآوری شده در این مقاله بر اساس دانش مهندسین نیک صنعت در مورد PLC و زبان STL میباشد. همچنین جداول دستورات پرتکرار با توجه به استانداردهای بینالمللی IEC 61131-3 و منابع معتبرتهیه شده است. جهت مشاهده منابع علمی و مستندات فنی میتواند از طریق لینکهای زیر اقدام به دانلود آنها نمایید.
جزوه فارسی آموزش برنامهنویسی PLC به زبان STL
کتاب اتوماسیون کردن با STEP 7 به کمک زبان STL و SCL
منوال رسمی STL برای S7-300/S7-400 Siemens
تشریح زبانهای استاندارد IEC 61131-3 در سیستم SIMATIC S7
تشریح زبانهای استاندارد IEC 61131-3 در سیستم STEP 7
بخش STL در راهنمای TIA Portal برای S7-1500:
نظرات کاربران