PLC#ST(Structured Text) 엔트리1

13351 단어 PLCSIMOTIONSIEMENS

ST(Structured Text)란 무엇입니까?


제어 과정이 갈수록 복잡해지면서 현재 자동화 시스템도 더욱 복잡한 데이터 처리 기능과 계산을 필요로 한다.
ST(Structured Text)는 이를 위해 설계된 언어입니다.IEC 61131-3에서 설계한 것으로 PASCAL-base의 고급 언어, 프로그래머가 임무를 간단하게 완성하도록 하는 것이 목표이다.씨엠네스뿐만 아니라 미쓰비시, 옴론, 코드시스템에도 다양한 제조사가 있는데 통상 명령만 다르다.

Siemens With TIA



GXWorks2



Simotion



시엠엔스의 SIMOTION ST는 SIMOTION 기기 동작 제어와 Technology를 간단하게 제어할 수 있는 테크놀로지 명령도 제작했다.(예: 포지셔닝, CAM 등...)
이번 입문편은 씨모션의 ST를 바탕으로 썼다.잘 부탁드립니다.

전언


먼저 영어 ST 어학처리서가 1천쪽 정도 나와 시엠니스를 의식을 잃게 했다.
여기에는 자주 등장하는'Syntax diaagram'이 있다.시엠슨의 설명서는 이런 그래프상의 일을 설명하는 것을 좋아하는 것 같지만 이해하기 어렵다.
여기서 먼저 익숙해져라.

1. Rule name: 즉, 해당 구문 이름
2.option: 있어도 되고 없어도 되는 선언
3. Iteration: Looping·반복.
4. Alternative: OR처럼 느껴지면 문제 없어요.

ST Source의 구성



ST Source는 일반 문자이며 여러 개의 Logical 선택 항목으로 나눌 수 있습니다.
ST Source의 주요 선택은 다음과 같습니다.
  • Unit Statement(Optional)
  • ST의 이름
  • Interface section
  • 변수, 구조, 프로그램(POU)의 성명
  • 다른 ST Source의 Import
  • Implementation section
  • 프로그램 등 주체의 위치
  • 다른 ST Source의 Import
  • POU (program organization unit)
  • 개별적으로 실행되는 프로그램 소스(Program, Function, Function Block)
  • Declaration section
  • 디지털, 구조 등의 정의(Interface section, Implementation section)
  • Statement section
  • POU의 실제 프로그램
  • 기본 문법


    PASCAL-base라서 쓰는 게 어렵지 않아요.
    중요한 것은 ";"잊지 않으면~ 웃어.자꾸 까먹어서... 그리고 SIMOTION의 EDOTR는 너무 약해요.
    변수, 함수가 없는 Auto-Fill입니다.

    변수 이름



    이것만 봐Graph, 응?라는 인상을 남겼다.
    나는 먼저 이 Graph를 두 개의 큰 틀로 나누었다.
    Identifier는 음~즉 변수 이름의 규정입니다.
  • 프레임 1은 변수 알파벳의 성명 규칙이다.
  • 테두리 2는 변수의 알파벳 이외의 규칙이다
  • 선언 변수
  • Letter 뿐만 아니라
  • ”_”결정하시겠습니까?
  • ”_”그 다음 Letter 또는 숫자
  • "_"역시그러니까 안 해도 돼.
  • \"\"그럼 다음은 Letter 또는 Digit입니다.
  • 문자도 넣어요?
  • 변수 성명 종료.
  • 이런 느낌이야.
    예를 들면 다음과 같습니다.
    경계 1: A, A,A、_9
    프레임 2의 5:A,A、_9
    경계 2의 6:A1,_9A
    프레임 2의 7: 그리고 Letter, Digit를 더하면 5로 돌아갈 수 있습니다.
    프레임 2의 8: 선언 끝
    A、A1、_A、_9、AB,ABC,_9A,_9_A...이러한 변수 이름이 적용됩니다.
    ○예약어는 당연히 사용할 수 없다.

    변수 정의



    기본 형식은 간단합니다. 변수 설명 이후에만 데이터 형식을 정의합니다.
    MyReal:REAL;
    MyBOOL:BOOL;
    MyInt:INT:=100;
    

    UDT(User defined Type)


    구조는 다음과 같은 세 곳에서 정의할 수 있다.
  • Interface section
  • Implementation section
  • Program organization unit (POU)
  • INTERFACE   
        TYPE  
            bRun            :BOOL;
            bCmdSet         :ARRAY[0..100]OF BOOL;
            sDrive          :STRUCT   
                ActSpeed    :REAL;
                SetSpeed    :REAL;
                ActPos      :REAL;
                SetPos      :REAL;   
            END_STRUCT    
        END_TYPE
        PROGRAM pou1;
    END_INTERFACE
    
    IMPLEMENTATION
        VAR_GLOBAL
            Drive1Run          :bRun;
            Drive1             :sDrive;
        END_VAR
    
        PROGRAM pou1   
            Drive1.SetSpeed     :=100.0;
            Drive1.SetPos       :=50.0;
        END_PROGRAM
    END_IMPLEMENTATION
    
    

    배열


    MyVar1:ARRAY[0..10]OF INT;
    MyRealArray:ARRAY[0..999]OF REAL;
    

    CONSTANT 선언


    VAR CONSTANT


    VAR CONSTANT
    
        PI              :REAL:=3.1415;
        BuzzerONTime    :TIME:=TIME#1h1m1s;
        Message         :STRING[40]:='Something Wrong..';
        TwoPI           :REAL:=PI*2;
    
    END_VAR
    

    VAR GLOBAL CONSTANT


    VAR_GLOBAL CONSTANT
    
        RefSpeed    :REAL:=1500.0;
        RefCurrent  :REAL:=14.5;
    
    END_VAR
    

    Statements


    여기에 3가지 기본 기능을 설명한다.

    제공 값(Value assignment)


    //Real
    r32Temp:=0.0;
    r32Temp:=3.3;
    
    //String
    str40   :='Hello World!';
    str40_1 :=str40;
    
    byteValue:=str40[5];
    str40[20]:=byteValue;
    
    MyArray1:=MyArray2;
    MyArray1[i]:=10;
    MyArray[5]:=23;
    
    struct1.element1:=TRUE;
    struct1.element2:=3.92;
    

    제어(제어)


    IF


    만약~이라면 이것을 해라, 그렇지 않으면 이렇다.
    
    IF r32Temp > 0.0 THEN
    
        str40:='r32Temp is >0';
    
    ELSIF r32temp = 0.0 THEN
    
        str40:='r32Temp is 0';
    
    ELSE
    
        str40:='r32Temp is <0';
    
    END_IF;
    
    

    Case


    IF 문은 복잡한 조건을 조합하여 조건 분류를 할 수 있으며, 변수가 이 값에서 시작되면
    그 가격부터 다른 처리를 한다면 CASE를 사용하는 것이 이해하기 쉽다.

    Valus List


    CASE i16Value OF
        1:
            speedSetPoint:=300.0;
        2:
            speedSetPoint:=600.0;
        3..10:
            speedSetPoint:=1500;
    
        ELSE
            speedSetPoint:=0.0;
    
            ;
    END_CASE;
    

    FOR Loop


    FOR i16Value:=0 TO 10 DO
        //
        boolList[i16Value]:=FALSE;
    
    END_FOR ;
    
    FOR i16Value:=0 TO 2 DO
        //
        boolList[i16Value]:=FALSE;
    
    END_FOR ;
    
    FOR i16Value:=10 TO -2 DO
        //
        boolList[i16Value]:=FALSE;
    
    END_FOR ;
    

    WHILE Loop


    여건이 생기기 전까지 LOOPING으로
    주의해야 할 것은 LOOPING이 시작되기 전에 조건을 검사하는 것이다.
    WHILE i16Value <=10 DO
        boolList[i16Value]:=TRUE;
        i16Value:=i16Value+1;
    
    END_WHILE;
    

    REPEAT


    WHILE LOOP과 비슷하게 같은 조건이 성립될 때까지 LOOPING을 유지했다.
    이곳은 WHHILE LOOP과 달리 LOOPING이 한 번 끝나고 조건을 점검한다.
    최소한 한번 시행한다는 얘기다.
    i16Value:=0;
    REPEAT
    
        boolList[i16Value]:=FALSE;
        UNTIL i16Value=10
    
    END_REPEAT;
    
    
    FOR i16Value:=10 TO -2 DO
        //
        boolList[i16Value]:=FALSE;
        IF bStopSw THEN
            EXIT;
        END_IF;
    
    END_FOR ;
    

    EXIT


    LOOPING이 중도에 종료하고 싶을 때 사용합니다.
    FOR i16Value:=10 TO -2 DO
        //
        boolList[i16Value]:=FALSE;
        IF bStopSw THEN
            EXIT;
        END_IF; 
    END_FOR ;
    

    CONTINUE


    LOOPING에서 조건이 있으면 프로그램을 실행하고 싶지 않지만, LOOPING은 계속 사용하고 싶을 때 사용한다.
    //if bStopSw is FALSE,i16sum=15
    //if bStopSw is TRUE,i16sum=9
    
    i16sum:=0;
    FOR i:=0 TO 2 DO
    
        FOR j:=0 TO 1 DO
            i16sum:=i16sum+1;
            IF bStopSw THEN
                CONTINUE;
                i16sum:=i16sum+1;
            END_IF;
        END_FOR;
        i16sum:=i16sum+1;
    
    END_FOR;
    

    RETURN


    RETURN 사용으로 LOOPING에서 멀어지는 것은 물론 프로그램이 종료된다.
    따라서 아래의 예는 RETURN의 조건이 성립된 후 i16sum:=1999이다.프로그램을 더 이상 실행하지 않습니다.
    Siemens의 STL "BEU"의 생각과 같으면 됩니다.
    FOR i16Value:=0 TO 10 DO
        //
        boolList[i16Value]:=FALSE;
        IF bStopSw THEN
            RETURN;
        END_IF;
    
    
    END_FOR ;
    
    //This statement will not be execute if bStopSw is TRUE
    i16sum:=1999;
    

    WAITFORCONDITION


    Motion Task에서 활동 대기 중조건이 TRUE가 되기 전에 프로그램 실행이 지연됩니다.
    WITH 이후의 Expression에는 다음 두 가지 상태만 표시됩니다.
  • FALSE&TRUE가 시작됩니다.즉 조건이 성립된 것이다.
  • FALSE, 조건 불성립.

  • Expression


    IMPLEMENTATION
    
    
        EXPRESSION  TriggerSensor
            TriggerSensor:=%I10.0;
        END_EXPRESSION  
    
    
        PROGRAM pou1
    
            WAITFORCONDITION TriggerSensor WITH TRUE DO
    
                %Q10.0:=TRUE;
                ;
            END_WAITFORCONDITION;
    
            ;
        END_PROGRAM
    
    
    END_IMPLEMENTATION
    
    

    GOTO


    대체로 사용할 수 있다.POU에서 좋아하는 곳으로 날아갈 수 있어요.
    Manual도 특수한 상황에서만 GOTO를 사용합니다.예를 들어, Troubleshooting은 구조 프로그램에 사용할 수 없습니다.

    Comments


    LineComment 및 BlockComment 가 있습니다.
  • Line Comment
  • //
  • Block Comment
  • (**)
  • //This is a line comment
        a:=0;
    
    (*
    This is a Block comment
    TEXTTEXTTEXTTEXTTEXT
    *)
        b:=0
    

    인스턴스


    앞의 글에는 인터페이스, PROGRAM 등 다양한 엉뚱한 단어들이 등장했으니 여기서 잠시 무시하자.
    나는 다음 입문2에서 이런 뜻을 설명하고 싶다.

    TIA SIMOTION


    먼저 TIA로 D445 1개를 추가합니다.

    Project>Oepn SIMOTION Configuration.

    PLC_1>PROGRAMS>Insert ST source file 을 클릭합니다.

    ST 소스의 이름을 입력하고 OK 를 클릭합니다.

    이런 화면이 나올 거예요.
    TIA는 GXWORKS와 조금 다르기 때문에 여기에 특별히 쓰지 않습니다.
    그럼 프로그램과 Function을 하나 쓰라고 가정해 보세요.
    Program에는 MyPB와 MyVariable 두 변수가 있는데, MyPB가 ON이면 MyVariable에 10을 쓴다.MyPB가 OFF인 경우 MyVariable에 0을 씁니다.간단명료하다.
    Function에는 정수 매개변수가 있으며, Function 내에서 정수를 실수로 변환한 다음 제곱을 *3.14로 반환합니다.

    먼저 INTERRACE에서 그 프로그램과 Function을 정의합니다.
    fcCal 및 myPou1 을 정의합니다.

    다음은 IMPLENTATION에서 프로그램을 작성합니다.
    이것은 fccal의 내용입니다.

    이것은 myPou1입니다.

    여러분 PROGRAM이에요?FUNCTION?아마도 각양각색의 의문이 나타날 것이다. 그러나 나는 다음에 이런 생각을 쓰기 시작할 것이라고 생각한다.그럼, 수고하셨습니다!
    기사도 여기에 실렸다.
    http://soup01.com/ja/2020/05/09/simotion-structuredtext-1/

    좋은 웹페이지 즐겨찾기