此場景利用IEC61331-3 SCL語法撰寫,程式代碼約130行。

現在很多大品牌的PLC 都支持國際電工委員會 IEC61131 標準中規範的五種程式語言的混合編程,即梯形圖(LD)、結構化文本(ST)、流程圖(SFC)、指令表(IL)和功能塊(FB)。

西門子所講的SCL就是ST語法。此語法也是近似於C#語言,因此很適合推廣給對結構化程式有興趣的人使用。

程式代碼

FUNCTION_BLOCK "SCL"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR
P1 : Bool;
P2 : Bool;
P3 : Bool;
P4 : Bool;
P1R {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG;
P2R {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG;
P3R {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG;
P4R {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG;
S { S7_SetPoint := 'True'} : Int;
FS2 {InstructionName := 'F_TRIG'; LibVersion := '1.0'} : F_TRIG;
FS1 {InstructionName := 'F_TRIG'; LibVersion := '1.0'} : F_TRIG;
s1 : Int;
RV1 {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG;
RV2 {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG;
END_VAR


BEGIN
IF "Start" = 1 AND "Entry conveyor 1" = 0 AND "Entry conveyor 2" = 0 AND "Conveyor 1" = 0 AND "Conveyor 2" = 0 THEN
"Entry conveyor 1" := "Entry conveyor 2" := 1;
ELSIF "Stop" = 0 OR "Emergency stop" = 0 THEN
"Entry conveyor 1" := "Entry conveyor 2" := "Conveyor 1" := "Conveyor 2" := 0;
"Pusher 1" := "Pusher 2" := 0;
#S := 0;
END_IF;

IF #S = 0 AND "Vision sensor 2" > 0 AND "Vision sensor 1" = 0THEN
"Entry conveyor 2" := 0;
"Entry conveyor 1" := 1;
ELSIF #S = 0 AND "Vision sensor 1" > 0 AND "Vision sensor 2" = 0THEN
"Entry conveyor 1" := 0;
"Entry conveyor 2" := 1;

ELSIF "Vision sensor 1" = 1 AND "Vision sensor 2" = 4 THEN
#S := 100;
ELSIF "Vision sensor 1" = 1 AND "Vision sensor 2" = 1 THEN
#S := 200;
ELSIF "Vision sensor 1" = 4 AND "Vision sensor 2" = 1 THEN
#S := 300;
ELSIF "Vision sensor 1" = 1 AND "Vision sensor 2" = 4 THEN
#S := 400;
END_IF;

// 1=Blue, 4=Green
#P1 := "Vision sensor 1" = 1 AND "Vision sensor 2" = 4;
#P2 := "Vision sensor 1" = 1 AND "Vision sensor 2" = 1;
#P3 := "Vision sensor 1" = 4 AND "Vision sensor 2" = 1;
#P4 := "Vision sensor 1" = 4 AND "Vision sensor 2" = 4;
#P1R(CLK:=#P1);#P2R(CLK:=#P2);#P3R(CLK:=#P3);#P4R(CLK:=#P4);
IF #P1R.Q THEN #S := 100; //正常
ELSIF #P2R.Q THEN #S := 200;//All Bule
ELSIF #P3R.Q THEN #S := 300;//相反
ELSIF #P4R.Q THEN #S := 400;//All Green
END_IF;
#FS1(CLK := "Sensor 1");#FS2(CLK := "Sensor 2");
CASE #S OF
100: //正常
"Entry conveyor 1" := "Entry conveyor 2" := "Conveyor 1" := "Conveyor 2" := 1;
#S := 0;
400: //All Green
"Entry conveyor 2" := 0;
"Entry conveyor 1":= "Conveyor 1" := 1;
#S := 401;
401:
IF #FS1.Q THEN
"Entry conveyor 1" := "Conveyor 1" := 0;
#S := 402;
END_IF;
402:
"Pusher 1" := 1;
#S := 403;
403:
IF "Pusher 1 front" THEN
"Pusher 1" := 0;
#S := 404;
END_IF;
404:
IF "Pusher 1 back" THEN
"Entry conveyor 1" := "Conveyor 2" := 1;
#S := 0;
END_IF;
;
200://All Bule
"Entry conveyor 1" := 0;
"Entry conveyor 2":= "Conveyor 2" := 1;
#S := 201;
201:
IF #FS2.Q THEN
"Entry conveyor 2" := "Conveyor 2" := 0;
#S := 202;
END_IF;
202:
"Pusher 2" := 1;
#S := 203;
203:
IF "Pusher 2 front" THEN
"Pusher 2" := 0;
#S := 204;
END_IF;
204:
IF "Pusher 2 back" THEN
"Entry conveyor 2" := "Conveyor 1" := 1;
#S := 0;
END_IF;
;
300://相反
"Entry conveyor 1" := 0;
"Entry conveyor 2":= "Conveyor 2" := 1;
#S := 301;
301:
IF #FS2.Q THEN
"Entry conveyor 2" := "Conveyor 2" := 0;
#S := 302;
END_IF;
302:
"Pusher 2" := 1;
#S := 303;
303:
IF "Pusher 2 front" THEN
"Pusher 2" := 0;
#S := 304;
END_IF;
304:
IF "Pusher 2 back" THEN
"Entry conveyor 1" := "Conveyor 1" := 1;
#S := 305;
END_IF;
305:
IF #FS1.Q THEN
"Entry conveyor 1" := "Conveyor 1" := 0;
#S := 306;
END_IF;
306:
"Pusher 1" := 1;
#S := 307;
307:
IF "Pusher 1 front" THEN
"Pusher 1" := 0;
#S := 308;
END_IF;
308:
IF "Pusher 1 back" THEN
"Entry conveyor 1" := "Entry conveyor 2":= "Conveyor 1":= "Conveyor 2" := 1;
#S := 0;
END_IF;
END_CASE;

"Start light" := "Entry conveyor 1" OR "Entry conveyor 2" OR "Conveyor 1" OR "Conveyor 2" OR #S>0 ;
"Stop light":= "Emergency stop"=0 OR "Stop"=0;
"Reset light" := "Reset";
END_FUNCTION_BLOCK

 

分格線---------------------------------------------------------------------------------------------------------------------------

我是Bob, 一起討論Siemens SIMATIC TIA portal PLC S7-400 S7-300 S7-1500 S7-1200 ET200SP S7-200 LOGO HMI Panel I4.0 西門子 自動化 工業4.0 HMS Ewon Anybus Codesys

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Bob 的頭像
    Bob

    鮑伯的PLC事件 (Bob's Blog)

    Bob 發表在 痞客邦 留言(0) 人氣()