回复:用SCL语言写的子程序,循环20次需要10多毫秒,帮我看一下程序有什么不合理之处

lc7815

西门子1847工业学习平台

  • 帖子

    14
  • 精华

    0
  • 被关注

    3

论坛等级:游士

注册时间:2003-06-06

普通 普通 如何晋级?

发布于 2012-04-15 02:27:01

12楼

在定义DB时,将数据尽量定义成数组结构,这样即优化程序循环体的结构,有减少数据转换的使用
比如:
DATA_BLOCK DB5
//
// Block Comment ...
//
STRUCT
A_Int :ARRAY[1..60] OF INT :=60(1);
A_Struct :ARRAY[1..60] OF STRUCT
a1 :REAL;
a2 :REAL;
END_STRUCT;
A_Bool :ARRAY[1..60] OF BOOL;
A_Bool_FP :ARRAY[1..60] OF BOOL;

END_STRUCT
BEGIN

END_DATA_BLOCK

FUNCTION FC1 : void

VAR_TEMP
totalout :INT;
i :INT;

END_VAR
BEGIN

totalout :=0;
FOR i :=1 TO 60 DO
//
IF DB5.A_Bool[i] & DB5.A_Bool_FP[i]=0 THEN
DB5.A_Int[i] :=DINT_TO_INT(ROUND(DB5.A_Struct[i].a1+DB5.A_Struct[i].a2));
totalout :=DB5.A_Int[i]+1;
END_IF;
DB5.A_Bool_FP[i] :=DB5.A_Bool[i];
END_FOR;

END_FUNCTION

你在SCL中使用间接寻址,如果不用数组,你还不如使用STL;SCL最大的寻址优势是使用数组的下标
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54621条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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