发布于 2015-07-26 13:13:42
113楼
楼上这位大侠,个人认为“难于理解...尽快淘汰”没有直接关系,SCL对于“一线”人员就不难理解吗?
下面一段程序是本人为一位坛友写的,用一个360°旋转的4位开关控制8个功能输出,本人故意用不太熟悉的SCL写的,原帖见:
http://www.ad.siemens.com.cn/club/bbs/post.aspx?b_id=4&a_id=1137972&s_id=0&num=0#anch
FUNCTION_BLOCK FBPlierControl
VAR_INPUT
ON :BOOL; //启动
END_VAR
VAR_OUTPUT
ComOut :WORD; //命令输出
Qxy AT ComOut :ARRAY[0..9] OF BOOL; //命令输出(继承)
END_VAR
VAR
NSS :BYTE; //开关新状态
CSS :BYTE; //开关当前状态
PSS :BYTE; //开关原先状态
CuSwSt AT CSS :ARRAY[0..7] OF BOOL; //开关当前状态(继承)
PrSwSt AT PSS :ARRAY[0..7] OF BOOL; //开关原先状态(继承)
FpNssCh1 :BOOL; //开关状态第1次变化上升沿
AuxFpNssCh1 :BOOL; //开关状态第1次变化上升沿辅助
FpNssCh2 :BOOL; //开关状态第2次变化上升沿
AuxFpNssCh2 :BOOL; //开关状态第2次变化上升沿辅助
OutConsent :BOOL; //命令输出使能
END_VAR
NSS := SHR(IN:=IB0,N:=3); //假定I0.3~I0.6接开关触点
NSS := NSS AND B#16#F; //右移3位后屏蔽其它信号
IF NOT ON AND (NSS = B#16#1) THEN //初始化
CSS := B#16#1;
PSS := B#16#8;
OutConsent := True;
ELSE
ComOut := W#16#0;
OutConsent := True;
END_IF;
IF ON THEN
IF (NSS <> CSS) AND (NSS = B#16#0) THEN //开关状态第1次变化上升沿
FpNssCh1 := ((NSS <> CSS) AND (NSS = B#16#0)) AND NOT AuxFpNssCh1;
END_IF;
AuxFpNssCh1 := (NSS <> CSS) AND (NSS = B#16#0);
IF (NSS <> CSS) AND (NSS <> B#16#0) THEN //开关状态第2次变化上升沿
FpNssCh2 := ((NSS <> CSS) AND (NSS <> B#16#0)) AND NOT AuxFpNssCh2;
END_IF;
AuxFpNssCh2 := (NSS <> CSS) AND (NSS <> B#16#0);
//开关状态第1次变化上升沿时,将‘当前状态’存入‘前个状态’,并禁止输出
IF (NSS <> CSS) AND (NSS = B#16#0) AND FpNssCh1 THEN
OutConsent := False;
PSS := CSS;
END_IF;
//开关状态第2次变化上升沿时,将‘新状态’存入‘当前状态’,并输出使能
IF (NSS <> CSS) AND (NSS <> B#16#0) AND FpNssCh2 THEN
CSS := NSS;
OutConsent := True;
END_IF;
END_IF;
IF OutConsent AND (((CSS = NSS) AND ON) OR NOT ON) THEN
Qxy[0] := CuSwSt[0] AND PrSwSt[3] AND NOT ON;
Qxy[1] := CuSwSt[1] AND PrSwSt[0];
Qxy[2] := CuSwSt[2] AND PrSwSt[1];
Qxy[3] := CuSwSt[3] AND PrSwSt[2];
Qxy[5] := CuSwSt[0] AND PrSwSt[3] AND ON;
Qxy[6] := CuSwSt[3] AND PrSwSt[0];
Qxy[7] := CuSwSt[2] AND PrSwSt[3];
Qxy[8] := CuSwSt[1] AND PrSwSt[2];
Qxy[9] := CuSwSt[0] AND PrSwSt[1];
END_IF;
END_FUNCTION_BLOCK
DATA_BLOCK DBPlierControl FBPlierControl
BEGIN
END_DATA_BLOCK
你认为这样写出的程序如果不加注释对于一线人员好理解吗?是否可以因此得出结论:希望SCL也尽快淘汰呢?
或许你会说本人水平有限,那么再看看老外写的一个程序吧
http://www.ad.siemens.com.cn/club/bbs/post.aspx?b_id=4&a_id=1133479&s_id=0&num=0#anch
上面这个帖子程序通过OB35的一个定时中断,得到100毫秒...1小时的定时脉冲上升沿,对一线人员好理解吗?恐怕还不如STL来得简单吧!
人的生命似洪水在奔流,不遇着岛屿、暗礁,难以激起美丽的浪花。