回复:应用探讨——STL 是不是真的就会被淘汰?

老学童

  • 帖子

    782
  • 精华

    32
  • 被关注

    67

论坛等级:奇侠

注册时间:2011-06-22

黄金 黄金 如何晋级?

发布于 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来得简单吧!
人的生命似洪水在奔流,不遇着岛屿、暗礁,难以激起美丽的浪花。
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有11102条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。