签到有奖
消息提醒
运维工程师专区
官方商城
点击复制链接
关注该帖后,有多人参加探讨会对您通知与提示!
帖子
精华
被关注
论坛等级:侠圣
注册时间:2013-03-08
普通 如何晋级?
发布于 2017-10-20 20:23:04
41楼
你好,楼主,这个源程序是风电程序呀,握手
引用楼主详细内容:
FUNCTION_BLOCK "DW_Mean30Seconds"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
IN : Real;
END_VAR
VAR_OUTPUT
OUT : Real;
VAR
i : Int := 1;
k : Int := 1;
iArrayMean30Seconds : Array[1..30] of DInt;
iSumArrayMean30Seconds : DInt;
IEC_Timer_0_Instance_1 {OriginalPartName := 'IEC_TIMER'; LibVersion := '1.0'} : TON_TIME;
BEGIN
#IEC_Timer_0_Instance_1(IN := 1,
PT := t#1s);
If #IEC_Timer_0_Instance_1.Q = TRUE Then
(*********************** 修改部分 *****************************************
定时器输入复位要用 #IEC_Timer_0_Instance_1(IN := 0, PT := t#1s);形式
#IEC_Timer_0_Instance_1.IN:=0; 写法无法把定时器Q断开。 之前程序确实执行不正确,原因就是定时器语法问题。
***********************************************************************************)
#IEC_Timer_0_Instance_1(IN := 0,
#iSumArrayMean30Seconds := #iSumArrayMean30Seconds - #iArrayMean30Seconds[#i];
#iArrayMean30Seconds[#i] := REAL_TO_DINT(#IN * 100);
#iSumArrayMean30Seconds := #iSumArrayMean30Seconds + #iArrayMean30Seconds[#i];
#OUT := DINT_TO_REAL(#iSumArrayMean30Seconds) / (#k * 100);
If #i < 30 Then
#i := #i + 1;
Else
#i := 1;
End_If;
(*Anzahl der Werte im Array*)
If #k < 30 Then
#k := #k + 1;
#k := 30;
(*----------END FUNKTIONBLOCK----------*)
END_FUNCTION_BLOCK
以上是一段老外编写的30S平均值得程序,这时大概10年前编的,用的是巴赫曼PLC写的,我给编译成TIA14的,编译时仅仅改动一点点,真是太方便了。以下是源程序截图。
对是风电上的程序,风电上几乎全部程序都在老外基础上更改的,所以做的还都挺规范的!我的QQ452745303欢迎交流沟通!
请填写推广理由:
2026共启We来,驰骋工控路,领跑新征程
助你技有所长,论有所获
首次发帖探讨工控技术话题 立获新人礼包,100中奖哦! (包含周边、书籍、兑奖西币)
共有10699条技术帖
恭喜,你发布的帖子
快扫描右侧二维码晒一晒吧!
再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!
分享
只看 楼主
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!