登录
首页 PLC论坛 西门子SIEMENS
回帖 发帖
正文

主题:求助:S7-300中的FC中的TEMP临时变量问题怎么理解?

点击:1681 回复:9

楼主
我创建FC1和FC2两个子程序,FC1中TEMP创建BOOL型0.0位,又在FC2中TEMP创建BOOL型0.0位,搞不明白了?
为什么我调用FC1中TEMP的0.0位置1时,FC2中的0.0也会同时置位?
按道理FC1和FC2中的临时变量都属于各自的局部变量,互不影响的,为什么FC1里的0.0接通FC2里的0.0呢?
求大神帮忙解释下
最后修改:2020/1/10 8:36:01
20-01-10 08:31

引用 byf394127375 在 2020/1/10 8:31:40 发言【内容省略】

TEMP使用的是PLC的临时区域,这个区域的特点是系统只管分配,不管回收的。
当你FC1申请临时区域时,FC1执行完毕后,原本FC1占用的临时区域被标记为不使用,然后FC2调用时,系统会将不使用的临时区域分配给FC2使用,但是分配给FC2的临时区域里面有没有数据系统是不管的,那是程序员的事情,因此使用临时区域的原则就是:先赋值,后使用。
Good Luck~
20-01-10 09:42

引用 cvlsam 在 2020/1/10 9:42:32 发言【内容省略】

您好,可以麻烦具体下,先赋值后使用方法么?
20-01-10 09:49

引用 byf394127375 在 2020/1/10 9:49:04 发言【内容省略】

附件 workpicture1.jpg
Good Luck~
20-01-10 10:37

引用 cvlsam 在 2020/1/10 10:37:10 发言【内容省略】

那我FC1内的temp的0.0没有复位情况下,同时又调用FC2,这时候FC2内的0.0也是接通的,按照先赋值,后执行原则,FC2中的点就无法复位,这样就没法用了
20-01-10 10:56

引用 byf394127375 在 2020/1/10 10:56:02 发言【内容省略】

FC1执行完毕后,不存在FC里面执行不退出的情况(发生这一情况的话看门狗错误),临时区就空出来分配给FC2,如果FC2不执行先赋值后使用的原则,那么它拿到的临时区地址里可能存在数据,因此,为了避免数据的混乱,就务必先赋值后使用。
要彻底确保不会互相干扰,那么就需要使用FB,系统为FB单独分配存储空间。
你目前的问题在于,FC2拿到的临时区中存在数据,因此导致程序的运行混乱,这个问题早先在论坛上已经多次讨论过了。
理解PLC的工作机制,包括各个存储区域的工作机制很重要。
Good Luck~
20-01-10 11:05

引用 cvlsam 在 2020/1/10 11:05:01 发言【内容省略】

不好意思再麻烦问您下,看门狗错误在哪里看
20-01-10 12:34

引用 byf394127375 在 2020/1/10 12:34:05 发言【内容省略】

模块诊断信息。
Good Luck~
20-01-10 12:51
简单说一下吧,就是你进入一个FC,temp的值不是知道的.
所以temp都是作为一个中间变量,用的时候先是别的运算的结果(先赋值),再用,用完了,就不管了,扔掉了.下次进来,又不知是什么了.
20-01-10 21:09
谢谢了明白
20-01-15 17:15

工控新闻

更多新闻资讯