签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
上面的这块是子程序当中的内容
上面这是我调用子程序,vd684和vd688是累计值
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1596966&b_id=3&s_id=0&num=15
子程序这样可以的。
建议实参地址设置为保持型寄存器地址。
有问题的。sm0.5什么用的?
逻辑有问题。你加完的结果又回去重复加,为什么?10+1=11;11+1=12;12+1=13;14;15;16;17……有什么意义?
运行结构有问题。0.5不接通的时候输出是什么值?你猜?你依据什么猜的?
我的意思是实参地址设置为保持型寄存器地址。
回2楼季侠:
在子程序中定义sm0.5没有异议啊,楼主的含义是每秒钟时间段累加。
如果,担心这1秒钟时间段的流量变化大,可以适当修改这个录入流量时间。
我看你是半秒计半秒不计。
计的半秒都不知道计了几百次了,而不是你想象的一次。
回复请用回复栏。
我明白了,这样说不可以的,那个累加就会半秒内不停的加,而不是一秒一次。还有一个是子程序里面写sm没意义?
一秒一次。你要么引出到外部触发。要么子程序自己编程完成。子程序内用边缘指令肯定是不行的。
主程序:
子程序:
不晓得这样是否可以呢
这下好了。
感觉这样和你想要的结果不一样,因为你这样的话不是1秒或者0.1秒加一次,一个加个上升沿,不然结果会是一个扫描周期加一次。
如果要重复调用的话,是不可以的,如果只调用一次,是没有问题的。
你会吓到别人的。
累计值你用OUTPUT类型,单独调试一个的时候是正常的,如果程序中有多个子程序,结果可能就不是你预想的了。
上升沿的别人已经说了,就不说了。
还有一个隐藏的问题:浮点数累积的话,累积到一定程度,你会发现不会再往上累积了。
浮点数相加,相加的两个数相差不能超过10^7的数量级,否则就会出现13楼shine说的问题。为了解决这个,可以采用进制累加法,即sum1=sum+pv,如果sum1>sum1_sp,则sum2=sum2+sum1,sum1清零;如果sum2>sum2_sp,则sum3=sum3+sum2,sum2清零.。。。。。。。。。。。。。。。最后的累加值sum=∑sum(i).
浮点数大数加小数问题要注意,相差到一定级别小数就被“吃掉了“,如楼上说的。可以考虑将浮点数分成整数和小数部分,以双整数的方式处理。
bbs累积库plus.rar
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录