回复:HMI通讯差异分析

Zaxife

  • 帖子

    2450
  • 精华

    31
  • 被关注

    78

论坛等级:至圣

注册时间:2008-07-24

普通 普通 如何晋级?

发布于 2019-04-10 23:01:47

1楼

没明白你想表达什么。
中断跟主程序的SM0.5根本就是不同的工作方式,没任何可比性。
至于PID计算,可以用中断也可以不用中断,就看你能否接受不用中断时导致PID计算结果跟预期有少许偏差了。如果是间隔周期较长计算一次,完全可以在主程序中用SM0.5边缘来计算。至于在中断中计算PID,只要你不是经常改PID参数,完全不会有任何问题。又或者你的PID参数不是直接使用全局变量,而是每次计算时把参数传递给子程序temp变量计算temp变量的值的话,不管外部怎么改参数都不会影响PID计算结果。
至于通信,如果你用的是在主程序中使用库来实现?比如Modbus完全不用考虑数据不一致的问题,因为通信数据处理都是由主程序来处理的,只要主程序没执行完通信处理库是不会反馈数据回去的。如果是S7通信就要小心了,如果主程序周期长于通信周期2倍时间,同一个内存的值就会出现两次通信值不一定相同的情况。这个时候,你只能在主程序最后把通信数据映射到统一的通信交换数据区域,这样每次通信读写都是操作通信交换数据区域就不会出现数据不一致的问题。这种情况就像有人说过为什么在线时梯形图的值跟状态图表的值不一致一样的。
emmmmm.....形象一点来表达就是,你老板叫你做个柜子,然后你柜子还没做完但是你们老板你一直来要柜子,你只能给半成品给你们老板,你们老板就会说怎么跟预期的不一样。你就是主程序、你们老板就是通信,只要主程序还没处理完通信就来取走数据了肯定不是想要的结果了。所以必须另外开辟通信数据区域,主程序没完成的话,不管通信怎么读取都是未完成的初始值,只有主程序完成了把数据传递到通信数据区,通信来读取到的数据才是完成后有意义的数据。在多线程、实时系统中编程都要注意这种线程数据同步的问题。
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15635条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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