这些天偶尔在看看C#由入门到放弃。 了解了一下函数的方法与类的实例(对象)就相当于西门子PLC的FC及FB背景数据。 由此想到了一个问题(PS:这问题看起来显得我都完全不懂PLC,差点私下微信向Zane版请教,想想为了造福大家,我就丢人点也没关系,在论坛上提出这个问题吧 ^_^),之前我写程序的习惯绝大部分都是FB,很少用FC, 就算用FC也是完全独立的调用,所以还真没好好想过这问题。
问题: PLC系统每次调用(假定一次扫描周期内有多次调用)FC时是新建一个FC的副本,还是按照代码顺序依次执行?
问题的场景: 新建一个小程序,包含OB1,FC1, 中断程序INT1。 两个全局布尔变量 mResult1,mResult2。
FC1有两个Int型Input变量,假设为In1和In2, FC内有若干代码:
... ... ... FC1的代码
........... FC1的代码 (华丽的分割线)
FC1 := In1>In2 ;
... ... ... FC1的代码
假定程序的执行顺序如下:
OB1内调用FC1,代码为mResult1 := FC1(In1:=20, In2:=10), 当FC1刚执行到 (华丽的分割线)时, 中断程序INT1触发了, 在中断程序INT1内仅调用FC1,代码为 mResult2 := FC1(In1:=30, In2:=40); 待中断程序INT1执行结束再返回到OB1执行完此周期, 问此时mResult1,mResult2分别为True还是False ?
先说说我的推断结果啊: mResult1=True , mResult2 = False (就是PLC系统每次调用FC时都会重新建立相应的临时变量区)
@Zane 谢谢!