回复:分享一段小程序30秒平均值

v_wind

  • 帖子

    287
  • 精华

    3
  • 被关注

    36

论坛等级:侠圣

注册时间:2013-03-08

普通 普通 如何晋级?

发布于 2017-10-19 11:18:49

35楼

展开查看
以下是引用Mr S在2017-10-18 08:58:08的发言 >31楼

按照你的方法导入如下图


测试发现两个问题:

1.诊断出错

2. DB2定义两个REAL的变量,很短时间内修改"数据块_1".Data1的值,"数据块_1".Data2一直和"数据块_1".Data1的值一样,怎么没有求平均值。


是什么原因?求赐教。


以下是引用kayan在2017-10-17 16:37:54的发言 >28楼:你的图片上 iArray...

引用28楼详细内容:

你的图片上 iArrayMean30Seconds : Array[0..30] of DInt;开辟0..1,那肯定超限。文本可以保存到SCL扩展名,再导入到TIA里,不然容易在变量定义上出错。

以下是引用Mr S在2017-10-14 14:19:00的发言 >21楼:用TIA V14 测试...

引用21楼详细内容:

用TIA V14 测试怎么显示区域长度错误呢?

1.V14在线诊断

2.程序如下,编译无错:




定时器确实有问题,当FB_TON_1Second.IN为FALSE的时候,FB_TON_1Second.Q为还能为TURE,这和手册有矛盾.只好改成定时中断,效果还不错,但是移植其他平台相对麻烦了。

(***************************************************************************************)

下面是Cyclic interrupt

(***************************************************************************************)

If "mean".Ctrl = 1 Then

    "mean".iSumArrayMean30Seconds := "mean".iSumArrayMean30Seconds - "mean".iArrayMean30Seconds["mean".i];

    "mean".iArrayMean30Seconds["mean".i] := REAL_TO_DINT("mean".in * 100);

    "mean".iSumArrayMean30Seconds := "mean".iSumArrayMean30Seconds + "mean".iArrayMean30Seconds["mean".i];

    "mean".ont := DINT_TO_REAL("mean".iSumArrayMean30Seconds) / ("mean".k * 100);

    

(*inkrementieren des Array-Index*)

    If "mean".i < 30 Then

        "mean".i := "mean".i + 1;

    Else

        "mean".i := 1;

    End_If;

    

(*Anzahl der Werte im Array*)

    If "mean".k < 30 Then

        "mean".k := "mean".k + 1;

    Else

        "mean".k := 30;

    End_If;

Else

    "mean".i := 1;

    "mean".k := 1;

    "mean".iSumArrayMean30Seconds := 0;

    FILL_BLK(IN := 0,

             COUNT := 30,

             OUT => "mean".iArrayMean30Seconds[1]);

End_If;



评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有10700条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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