西門子 [S7-300]Step7 FC功能中的Temp變量的學(xué)習(xí)
西門子 [S7-300]start和driver是外部輸入輸出接口,。
例:如果在TEMP接口中新建一個變量A,,數(shù)據(jù)類型為BOOL,,地址0.0
1,,正確的FC程序如下:
| #start #A
|--| |---------()
|
| #A #driver
|--|/|---------()
2,,錯誤的例子:
| #A #driver
|--|/|---------()
|
| #start #A
|--| |---------()
分析:
程序的掃描是從上到下,。S7 FC中的接口TMEP中的變量必須遵守:先賦值后使用的原則,。
1、程序,,當start的值從0變?yōu)?,,A也將從0變?yōu)?。掃描到一段程序時,,因為A的值已經(jīng)發(fā)生改變,,程序?qū)⒊晒呙璧紸的常閉觸點從1變?yōu)?,那么driver線圈將成功得從原來的1改變?yōu)?,。
2,、程序,因為掃描到一段程序的時候CPU沒有發(fā)現(xiàn)A的值改變,。之后A值將一直保持不變,,即使start的值從0變?yōu)?,A值也不會發(fā)生改變,;結(jié)果是程序沒有反應(yīng),。
下面是大家的一些心得體會
西門子這一點比其他的PLC都靈活,F(xiàn)B的DB作為FB的變量的固定存放地址,而Temp則是有系統(tǒng)分配臨時區(qū)L地址,。
比如:存在FC1,,F(xiàn)C2兩個功能,它們都有兩個Temp,,那么當調(diào)用FC1時,,系統(tǒng)分配L區(qū)域地址給FC1的Temp,如分配了LB0,,LB1,,那么當FC1調(diào)用完成后,系統(tǒng)認為LB0,,LB1已經(jīng)不需要,,但是西門子的系統(tǒng)不會對臨時區(qū)進行清零,只是繼續(xù)分配,,當調(diào)用FC2時,,系統(tǒng)將LB0,LB1重新分配給FC2的Temp,,此時如果不遵循先賦值后使用的準則,,那么FC2的Temp使用的值將是FC1的Temp的值。
臨時變量可以用于所有塊中 (OB, FC, FB),。當塊執(zhí)行的時候它們被用來臨時存儲數(shù)據(jù),,當退出該塊時這些數(shù)據(jù)將丟失。因此, 在PLC掃描運行時, FC塊中的臨時變量TEMP不能自鎖!
TEMP變量不能自鎖的原因顯而易見:
每個掃描周期開始時,,TEMP變量的值并不像Q或M那樣可以保持上個周期的值,。除非明確對其賦值,否則它的值是不確定的,。
我使用TEMP只有一個原則:
一次出現(xiàn)某個TEMP變量,,必須是對其賦值(或線圈刷新)的寫指令,而不能是讀指令,。
如果出現(xiàn)問題,,建議使用STAT變量替代。
對TEMP的認識都有問題!
我的建議是做邏輯不用TEMP,只在做運算是用TEMP,會省去很多麻煩