签到有奖
消息提醒
运维工程师专区
官方商城
点击复制链接
关注该帖后,有多人参加探讨会对您通知与提示!
帖子
精华
被关注
论坛等级:至圣
注册时间:2003-06-06
钻石 如何晋级?
发布于 2023-02-20 10:13:40
20楼
M0.2只装载一次就没有问题的,我原来的问题是,M0.2作为全局的200MS脉冲标志使用,被多个子程序使用,主程序最后单独网络复位M0.2,就出现了较大的偏差!
引用17楼详细内容:
爬了半天楼,还是有点云里雾里。
总结一下吧,
中断程序要放到OB1里处理,先决条件是中断间隔必须永远大于OB1扫描周期,
其次,编程如下图
楼主的第二点总结的并不正确,有没有上升沿,无所谓的,中断在指令之前本扫描周期立即处理,在指令之后的下一个扫描周期处理
引用0楼详细内容:
今天测试程序,采用定时中断进行流量累计的时候,数据一直对不上。经过测试发现自己多年犯了一个致命BUG,实在惭愧,贴出来跟大家探讨探讨。
定时中断一般不受扫描周期影响,一般建议中断程序短小精悍。因此本人,常在中断程序置位标志位,通过该标志位再调用处理子程序。比如中断程序(200MS)将M0.0写1,然后用M0.0在主程序调用流量处理以及累计子程序(执行一次,然后将M0.0复位)。
提出问题如下:
中断里执行该程序与主程序里执行该程序,有没有区别?测试如下:
1、200MS中断里,对VD484进行0.2S累计,同时置位M0.2。
2、主程序里面使用M0.2,调用子程序,对VD480,进行0.2S累计。
3、通过M5.0,触发复位清零并开始同步计时,同时使用T250进行计时比较。
结果如下图,单位为S
结果证明,定时中断时间累计与T250定时器数据基本相同,但是主程序调用子程序,时间为1642.9S,比前者少了近300S。问题就出在子程序与中断程序执行不同步,中转标志M0.2,可能被丢失了!如下图,M0.2只要在箭头区间被置位,程序执行网络7,则直接被复位,那么本次M0.2将是无效的。
也许有人说,M0.2放的太靠后了。可以把M0.2使用完成后直接复位掉。但是只要M0.2开始和结束之间有程序,则就有被丢失的风险,无非是这个程序越短,影响越小而已。
如何避免此问题呢?
1、直接在中断里处理程序。
2、类似M0.2的中转标志,可以使用上升沿调用子程序,然后延时多周期再复位。
哦,这样啊!
简单!
使用100ms中断(原200ms中断的一半时间),中断里
LDN M0.2
= M0.2
然后再OB1里,在所有相关程序前取M0.2的上升沿即可,使用M0.2的上升沿标志触发相应程序,这样还避免了多线圈的问题。
请填写推广理由:
2025逐浪前行,诚邀您来赢取新年惊喜大奖!
助你技有所长,论有所获
首次发帖探讨工控技术话题 立获新人礼包,100中奖哦! (包含周边、书籍、兑奖西币)
共有8173条技术帖
恭喜,你发布的帖子
快扫描右侧二维码晒一晒吧!
再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!
分享
只看 楼主
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录