درس 1: مقدمه ای بر برنامه نویسی SCL در پورتال TIA زبان کنترل ساختاریافته (SCL) یک زبان برنامه نویسی سطح بالا است که در پورتال اتوماسیون کامل یکپارچه زیمنس (TIA) استفاده می شود. SCL مشابه سایر زبان های برنامه نویسی سطح بالا مانند C و Pascal است، اما به طور خاص برای کنترل کننده های منطقی قابل برنامه ریزی (PLC) و سایر دستگاه های اتوماسیون طراحی شده است. در این درس شما را با برنامه نویسی SCL در TIA Portal آشنا می کنیم. 

درس 2: انواع داده ها و متغیرهای SCL در برنامه نویسی SCL، درک انواع داده ها و متغیرهایی که می توانید استفاده کنید بسیار مهم است. SCL از چندین نوع داده از جمله BOOL، INT، REAL و STRING پشتیبانی می کند. این نوع داده ها را می توان برای ذخیره انواع مختلف داده مانند مقادیر بولی، اعداد صحیح، اعداد ممیز شناور و رشته های متنی استفاده کرد. در این درس، انواع داده ها و متغیرهای SCL را با جزئیات بیشتری مورد بحث قرار خواهیم داد. 

درس 3: ساختارهای کنترل SCL از ساختارهای کنترلی برای کنترل جریان اجرا در یک برنامه استفاده می شود. برنامه نویسی SCL از چندین ساختار کنترلی از جمله دستورات IF-THEN-ELSE، حلقه های FOR و WHILE و دستورات CASE پشتیبانی می کند. از این ساختارهای کنترلی می توان برای تصمیم گیری، حلقه زدن کد و انجام عملیات های دیگر استفاده کرد. در این درس، ساختارهای کنترل SCL را با جزئیات بیشتری مورد بحث قرار خواهیم داد. 

درس 4: توابع SCL و بلوک های عملکردی توابع و بلوک های تابع در برنامه نویسی SCL برای سازماندهی و استفاده مجدد کد استفاده می شوند. توابع بلوک‌های کد مستقلی هستند که وظیفه خاصی را انجام می‌دهند، در حالی که بلوک‌های تابع ماژول‌های قابل استفاده مجدد هستند که می‌توانند در چندین برنامه استفاده شوند. در این درس، توابع SCL و بلوک های تابع را با جزئیات بیشتری مورد بحث قرار خواهیم داد. 

درس 5: اشکال زدایی و عیب یابی SCL اشکال زدایی و عیب یابی مهارت های مهمی برای هر برنامه نویسی است. در برنامه نویسی SCL، چندین ابزار و تکنیک وجود دارد که می توان از آنها برای رفع اشکال و عیب یابی کد استفاده کرد. اینها شامل استفاده از نقاط شکست، گذر از کد و تجزیه و تحلیل خروجی برنامه است. در این درس، روش‌های اشکال‌زدایی و عیب‌یابی SCL را با جزئیات بیشتری مورد بحث قرار خواهیم داد. در نتیجه، برنامه نویسی SCL در TIA Portal یک مهارت مهم برای مهندسین اتوماسیون و برنامه نویسان PLC است. با تسلط بر برنامه نویسی SCL، می توانید برنامه های اتوماسیون کارآمد و قابل اعتمادی ایجاد کنید که می تواند به بهبود عملکرد فرآیندهای صنعتی کمک کند. از طریق پنج درس ذکر شده در این مقاله، می توانید پایه ای محکم در برنامه نویسی SCL به دست آورید و در راه تبدیل شدن به یک متخصص در برنامه نویسی اتوماسیون باشید.

درس 1: مقدمه ای بر برنامه نویسی SCL در پورتال TIA زبان کنترل ساختاریافته (SCL) یک زبان برنامه نویسی سطح بالا است که در پورتال اتوماسیون کامل یکپارچه زیمنس (TIA) استفاده می شود. SCL به طور خاص برای برنامه نویسی کنترل کننده های منطقی قابل برنامه ریزی (PLC) و سایر دستگاه های اتوماسیون طراحی شده است و مشابه دیگر زبان های برنامه نویسی سطح بالا مانند C و Pascal است. برنامه نویسی SCL معمولاً در شرایطی استفاده می شود که منطق نردبان یا نمودارهای بلوک عملکردی برای برنامه نویسی سیستم های اتوماسیون پیچیده کافی نیست. کد SCL می تواند برای ایجاد الگوریتم های پیچیده تر و ساختارهای کنترلی و همچنین برای پیاده سازی عملیات ریاضی و منطقی که به راحتی در سایر زبان های برنامه نویسی بیان نمی شوند، استفاده شود. برنامه نویسی SCL در TIA Portal به کاربران این امکان را می دهد که کد SCL را در یک محیط راحت و کاربر پسند ایجاد و ویرایش کنند. TIA Portal مجموعه ای جامع از ابزارها را برای توسعه و اشکال زدایی کد SCL، از جمله برجسته سازی نحو، تکمیل کد و ویژگی های اشکال زدایی ارائه می دهد. برای شروع برنامه نویسی SCL در TIA Portal، باید درک اولیه ای از مفاهیم برنامه نویسی و دانش برنامه نویسی PLC داشته باشید. همچنین باید با نرم افزار TIA Portal آشنایی داشته باشید و به PLC زیمنس یا سایر دستگاه های اتوماسیون سازگار دسترسی داشته باشید. در درس بعدی، انواع داده ها و متغیرهای SCL را با جزئیات بیشتری مورد بحث قرار خواهیم داد، که بلوک های سازنده برای نوشتن برنامه های SCL هستند.

درس 2: انواع داده ها و متغیرهای SCL برنامه نویسی SCL از چندین نوع داده پشتیبانی می کند که برای ذخیره انواع مختلف داده در یک برنامه استفاده می شود. این نوع داده ها عبارتند از: 

• BOOL: برای ذخیره مقادیر بولی (FALSE/TRUE) استفاده می شود 

 • INT: برای ذخیره مقادیر صحیح استفاده می شود 

• REAL: برای ذخیره مقادیر  اعشاری  استفاده می شود 

• STRING: برای ذخیره رشته های متنی استفاده می شود

متغیرها برای ذخیره داده ها در برنامه های SCL استفاده می شوند و با استفاده از یک نوع داده خاص اعلام می شوند. به عنوان مثال، برای اعلام متغیری به نام "myBool" با نوع داده BOOL، از کد زیر استفاده کنید:



VAR

;myVar : BOOL

END_VAR

هنگامی که یک متغیر اعلام شد، می توانید با استفاده از عملگر انتساب ":="، یک مقدار به آن اختصاص دهید. مثلا:

;myBool := TRUE'

همچنین می توانید بر روی متغیرها عملیاتی مانند عملیات حسابی، عملیات منطقی و عملیات مقایسه انجام دهید. مثلا:

VAR

;  myInt1 : INT := 5

;  myInt2 : INT := 10

;  mySum : INT

;  myBool : BOOL

END_VAR

mySum := myInt1 + myInt2; // assigns 15 to mySum 

myBool := myInt1 > myInt2; // assigns FALSE to myBool

علاوه بر انواع داده های پایه، SCL از آرایه ها، ساختارها و انواع تعریف شده توسط کاربر نیز پشتیبانی می کند. این انواع داده های پیشرفته را می توان برای ذخیره ساختارهای داده پیچیده تر و سازماندهی کدها به طور موثرتر مورد استفاده قرار داد. به طور خلاصه، انواع داده ها و متغیرهای SCL بلوک های اساسی برای نوشتن برنامه های SCL هستند. با درک انواع مختلف داده ها و انواع متغیرهای موجود، می توانید برنامه های کارآمد و موثری برای دستگاه های اتوماسیون ایجاد کنید. در درس بعدی، ساختارهای کنترل SCL را که برای کنترل جریان اجرا در یک برنامه SCL استفاده می شود، مورد بحث قرار خواهیم داد.

درس 3: ساختارهای کنترل SCL ساختارهای کنترلی SCL برای کنترل جریان اجرا در یک برنامه SCL استفاده می شود. آنها به شما این امکان را می دهند که برنامه های پیچیده تری ایجاد کنید که بسته به شرایط خاص می توانند تصمیم بگیرند، اقدامات را تکرار کنند و مسیرهای کد مختلف را اجرا کنند. رایج ترین ساختارهای کنترلی در برنامه نویسی SCL عبارتند از: 1. IF/THEN/ELSE: دستور IF به شما این امکان را می دهد که در صورت درست بودن یک شرط خاص، کد را اجرا کنید. اگر شرط نادرست است، می توانید به صورت اختیاری یک بلوک کد متفاوت را با استفاده از عبارت ELSE اجرا کنید.

IF myBool = TRUE THEN 

  // do something

ELSE

  // do something else

END_IF


2. FOR/TO/STEP: حلقه FOR به شما امکان می دهد یک بلوک کد را چند بار تکرار کنید. می توانید مقدار شروع، مقدار پایان و اندازه گام را برای حلقه مشخص کنید.

FOR i := 1 TO 10 STEP 2 DO

  // do something 

END_FOR

3. WHILE/DO: حلقه WHILE به شما امکان می دهد یک بلوک از کد را در حالی که یک شرط خاص درست است تکرار کنید. اجرای کد تا زمانی که شرط نادرست باشد به اجرای آن ادامه خواهد داد.


WHILE myBool = TRUE DO 

  // do something

END_WHILE


4. CASE: دستور CASE به شما امکان می دهد بسته به مقدار یک متغیر یا عبارت، بلوک های مختلف کد را اجرا کنید. این شبیه به عبارت switch در سایر زبان های برنامه نویسی است.

CASE myInt OF 

  1: // do something

  2: // do something else

  3: // do something different

  ELSE // handle default case

END_CASE

ساختارهای کنترلی نیز می توانند تو در تو باشند و به شما امکان می دهند جریان برنامه پیچیده تری ایجاد کنید. به عنوان مثال، شما می توانید از یک دستور IF در داخل یک حلقه FOR برای اجرای کد خاصی استفاده کنید، تنها زمانی که یک شرط خاص در طول هر تکرار حلقه برآورده شود. به طور خلاصه، ساختارهای کنترلی SCL به شما این امکان را می دهد که با کنترل جریان اجرا، برنامه های پیچیده تر و انعطاف پذیرتری ایجاد کنید. با استفاده از دستورات IF، حلقه‌های FOR، حلقه‌های WHILE و دستورات CASE، می‌توانید برنامه‌هایی ایجاد کنید که بسته به شرایط خاص تصمیم‌گیری کنند، اقدامات را تکرار کنند و مسیرهای کد مختلف را اجرا کنند. در درس بعدی، در مورد توابع SCL و بلوک های تابع بحث خواهیم کرد، که برای سازماندهی کد و بهبود کارایی برنامه استفاده می شود.

درس 4: توابع SCL و بلوک های عملکردی توابع SCL و بلوک های تابع برای سازماندهی کد و بهبود کارایی برنامه استفاده می شود. توابع و بلوک‌های تابع به شما امکان می‌دهند کدهایی را کپسوله کنید که وظیفه خاصی را انجام می‌دهند و استفاده مجدد و نگهداری آن را آسان‌تر می‌کنند. توابع در SCL مشابه توابع در سایر زبان های برنامه نویسی است. آنها پارامترهای ورودی را می گیرند، یک کار خاص را انجام می دهند و نتیجه را برمی گردانند. به عنوان مثال، می توانید تابعی ایجاد کنید که مربع یک عدد را محاسبه کند:


FUNCTION_BLOCK CalcSquare

  VAR_INPUT

;    num : REAL

  VAR_OUTPUT

;    result : REAL

  END_VAR


;  result := num * num


END_FUNCTION_BLOCK


در این مثال، بلوک تابع CalcSquare یک پارامتر ورودی به نام "num" از نوع REAL می گیرد. سپس مجذور "num" را محاسبه می کند و نتیجه را به یک متغیر خروجی به نام "result" که آن هم از نوع REAL است، اختصاص می دهد. هنگامی که یک بلوک تابع را تعریف کردید، می توانید با فراخوانی آن و ارسال پارامترهای ورودی لازم، از آن در برنامه خود استفاده کنید. مثلا: 

VAR

;  myNum : REAL := 5.0

;  myResult : REAL

END_VAR


;CalcSquare(num:=myNum, result:=myResult)

علاوه بر توابع، SCL از بلوک های تابع نیز پشتیبانی می کند. بلوک های تابعی شبیه توابع هستند، اما می توانند شامل متغیرهای داخلی، ورودی ها و خروجی ها باشند. آنها همچنین می توانند دارای عملکردهای متعددی باشند که امکان کپسوله کردن عملکردهای پیچیده تر در یک بلوک را فراهم می کند. به عنوان مثال، می توانید یک بلوک تابعی ایجاد کنید که شامل دو تابع است: یکی که مربع یک عدد را محاسبه می کند و دیگری که مکعب یک عدد را محاسبه می کند:

FUNCTION_BLOCK MathFuncs 

  VAR_INPUT

;    num : REAL

  VAR_OUTPUT

;    square : REAL

 ;   cube : REAL

  END_VAR


  FUNCTION CalcSquare

    VAR_INPUT

;      num : REAL

    VAR_OUTPUT

;      result : REAL

    END_VAR


;    result := num * num


  END_FUNCTION


  FUNCTION CalcCube

    VAR_INPUT

   ;   num : REAL

    VAR_OUTPUT

;      result : REAL

    END_VAR


;    result := num * num * num


   END_FUNCTION

;  square := CalcSquare(num:=num)

;  cube := CalcCube(num:=num)


END_FUNCTION_BLOCK

در این مثال، بلوک تابع MathFuncs یک پارامتر ورودی به نام "num" از نوع REAL می گیرد. سپس مربع و مکعب "num" را با استفاده از توابع CalcSquare و CalcCube به ترتیب محاسبه می کند. نتایج به متغیرهای خروجی با نام‌های "square" و "cube" نیز از نوع REAL اختصاص داده می‌شوند. توابع و بلوک های تابع را می توان برای بهبود کارایی و سازماندهی برنامه با کاهش تکرار کد و بهبود استفاده مجدد از کد استفاده کرد. با کپسوله کردن عملکرد در توابع و بلوک های تابع، می توانید برنامه های ماژولار و قابل نگهداری بیشتری ایجاد کنید. در درس بعدی، کتابخانه‌های SCL را مورد بحث قرار می‌دهیم که برای به اشتراک گذاشتن کد و عملکرد بین پروژه‌های مختلف استفاده می‌شوند.


درس 5: کتابخانه های SCL کتابخانه های SCL مجموعه ای از بلوک های تابع SCL، انواع داده ها و سایر کدهای قابل استفاده مجدد هستند که می توانند بین پروژه های مختلف به اشتراک گذاشته شوند. کتابخانه‌ها ابزار مهمی برای بهبود کارایی و کاهش تکرار کد هستند، زیرا به شما امکان می‌دهند از کدهایی که قبلاً توسعه و آزمایش شده‌اند استفاده مجدد کنید. کتابخانه های SCL در پورتال TIA با تعریف یک پروژه کتابخانه جدید ایجاد می شوند. هنگامی که یک پروژه کتابخانه ای ایجاد کردید، می توانید بلوک های تابع، انواع داده ها و سایر کدها را به پروژه اضافه کنید. سپس این عناصر را می توان به عنوان یک کتابخانه صادر کرد و در صورت نیاز به پروژه های دیگر وارد کرد. برای ایجاد یک پروژه کتابخانه جدید در TIA Portal، مراحل زیر را دنبال کنید: 1. در نمای پروژه بر روی دکمه "پروژه جدید" کلیک کنید. 2. «کتابخانه» را به عنوان نوع پروژه انتخاب کنید و نام و مکان پروژه را انتخاب کنید. 3. پس از ایجاد پروژه، می توانید بلوک های تابع، انواع داده و سایر کدها را با کلیک راست بر روی پروژه و انتخاب "Add New Object" به پروژه اضافه کنید. پس از ایجاد یک پروژه کتابخانه و افزودن عناصر به آن، می توانید کتابخانه را به عنوان فایلی که می تواند به پروژه های دیگر وارد شود صادر کنید. برای صادرات یک کتابخانه، مراحل زیر را دنبال کنید: 1. روی پروژه کتابخانه در نمای پروژه کلیک راست کرده و "Export" را انتخاب کنید. 2. یک نام و مکان برای فایل کتابخانه صادر شده انتخاب کنید و عناصری را که می خواهید در کتابخانه قرار دهید انتخاب کنید. 3. برای صادر کردن کتابخانه روی "پایان" کلیک کنید. برای وارد کردن یک کتابخانه به یک پروژه جدید یا موجود، مراحل زیر را دنبال کنید: 1. در نمای پروژه بر روی دکمه «افزودن شی جدید» کلیک کنید. 2. "Library" را به عنوان نوع شی انتخاب کنید و فایل کتابخانه ای را که می خواهید وارد کنید انتخاب کنید. 3. هنگامی که کتابخانه وارد شد، می توانید از بلوک های تابع، انواع داده ها و سایر کدهای تعریف شده در کتابخانه در پروژه خود استفاده کنید. از کتابخانه های SCL می توان برای به اشتراک گذاشتن کد و عملکرد بین پروژه های مختلف استفاده کرد و توسعه و نگهداری برنامه های پیچیده را آسان تر می کند. با تعریف بلوک های تابع قابل استفاده مجدد و انواع داده ها در یک کتابخانه، می توانید تکرار کد را کاهش دهید و سازماندهی کد را بهبود بخشید، که منجر به برنامه های کارآمدتر و قابل نگهداری می شود. به طور خلاصه، کتابخانه های SCL مجموعه ای از کدهای قابل استفاده مجدد هستند که می توانند بین پروژه های مختلف به اشتراک گذاشته شوند. کتابخانه ها با تعریف یک پروژه کتابخانه جدید، اضافه کردن بلوک های تابع و سایر کدها به پروژه و صادرات پروژه به عنوان یک فایل کتابخانه ایجاد می شوند. کتابخانه‌ها را می‌توان به پروژه‌های دیگر وارد کرد و توسعه و نگهداری برنامه‌های پیچیده را آسان‌تر کرد.

مثال برای scl

 در اینجا یک برنامه نمونه در SCL وجود دارد که 3 موتور را کنترل می کند:

// Define the input and output variables 

VAR

    // Inputs

    Start: BOOL;

    Speed: INT;


    // Outputs

    Motor1: BOOL;

    Motor2: BOOL;

    Motor3: BOOL;


END_VAR


// Define the function block instances

FB_MotorControl1: MotorControl;

FB_MotorControl2: MotorControl;

FB_MotorControl3: MotorControl;


// Define the function block types

TYPE MotorControl:

    // Inputs

    Start: BOOL;

    Speed: INT;


    // Outputs

    Motor: BOOL;


    // Internal variables

    MotorState: INT := 0;

END_TYPE


// Define the program logic

NETWORK

    // Motor 1

FB_MotorControl1.Start := Start;

FB_MotorControl1.Speed := Speed;

    Motor1 := FB_MotorControl1.Motor;


    // Motor 2

FB_MotorControl2.Start := Start;

FB_MotorControl2.Speed := Speed;

    Motor2 := FB_MotorControl2.Motor;


    // Motor 3

FB_MotorControl3.Start := Start;

FB_MotorControl3.Speed := Speed;

    Motor3 := FB_MotorControl3.Motor;

END_NETWORK


این برنامه سه موتور را تعریف می کند که توسط نمونه هایی از نوع بلوک تابع MotorControl کنترل می شوند. بلوک تابع MotorControl ورودی های Start و Speed را دریافت می کند و سیگنال موتوری را که موتور را کنترل می کند، خروجی می دهد. متغیر داخلی MotorState برای پیگیری وضعیت موتور استفاده می شود. منطق برنامه به سادگی ورودی های Start و Speed را برای هر نمونه MotorControl بر اساس ورودی های Start و Speed برنامه تنظیم می کند و خروجی های Motor هر نمونه MotorControl را به متغیرهای خروجی مربوطه Motor1، Motor2 و Motor3 اختصاص می دهد. البته، این فقط یک مثال ساده است و ویژگی های بلوک عملکرد MotorControl به موتور خاصی که کنترل می شود بستگی دارد. اما امیدواریم این به شما ایده دهد که چگونه می توان از SCL برای کنترل چندین موتور با استفاده از بلوک های عملکردی استفاده کرد.