描述
在STEP 7 (TIA 博途)中為使程序結(jié)構(gòu)更加清晰,您可以把多個輸入輸出地址定義在一組更高一級的PLC變量中。 那么,可能會發(fā)生這種情況,即使您只是訪問了定義為PLC數(shù)據(jù)類型的單個位地址,但整個輸出Word都會被覆蓋。
在下面的例子中,在一個S7-1500cpu中定義了2個輸出字節(jié)Q0和Q1,用戶程序中定義了PLC數(shù)據(jù)類型 "TypeMotor",包括4個元素,即"powerOn", "powerOff", "speedMin" and "speedMax"(都是Bool數(shù)據(jù)類型)。

圖1
圖1 數(shù)據(jù)塊"DB" 的"setFalse"變量和OB 主程序的Network 1 。
輸入變量 "init" 將輸出字節(jié) "QB1" 初始化為255。
DB變量 "se" 被聲明為 PLC 數(shù)據(jù)類型 "TypeMotor" 并預(yù)設(shè)值為"False"。
輸出變量 "set" [Q0.0] 也被聲明為 PLC 數(shù)據(jù)類型 "TypeMotor"。
用"MOVE" 指令將DB變量 "se" 覆蓋輸出變量 "set" [Q0.0]。
這樣輸出點(diǎn) Q0.0 到 Q0.3將為"False"。
情形1: 數(shù)據(jù)塊 "DB" 沒有設(shè)置優(yōu)化訪問

圖2
PLC 數(shù)據(jù)類型以Word 結(jié)束??截悢?shù)據(jù)結(jié)構(gòu)時, 在系統(tǒng)中填充位會被插入到數(shù)據(jù)傳輸中,因?yàn)閁DT在系統(tǒng)中總是以16位存在。這會導(dǎo)致當(dāng)您在程序中使用非優(yōu)化訪問的塊時整個輸出字將會被覆蓋。輸入和輸出區(qū)域沒有被優(yōu)化。 在情形1中 ,輸出字節(jié)"QB1" 也被寫入了 "0"。
情形2: 數(shù)據(jù)塊 "DB" 設(shè)置了優(yōu)化訪問

圖3
輸出字節(jié) "QB1" 沒有被覆蓋為 "0" 并且先前初始化的值被保留 。
注意
如果您用PLC數(shù)據(jù)類型定義了輸出字節(jié)QB0, 如例子中所示,但沒有在設(shè)備組態(tài)中定義輸出字節(jié)QB1或者說QB1不存在的話,那么就會有上面的錯誤提示信息。
補(bǔ)救措施
如果您只是訪問數(shù)據(jù)結(jié)構(gòu)中的單個數(shù)據(jù)元素,那么如上所描述的填充比特位對數(shù)據(jù)傳輸沒有影響。如果您傳送如圖1所示的整個數(shù)據(jù)結(jié)構(gòu),那么您應(yīng)該使用優(yōu)化的塊訪問。
S7-1200/S7-1500 新生成的DB塊會默認(rèn)設(shè)置為優(yōu)化訪問。 S7-300/S7-400 數(shù)據(jù)塊為“標(biāo)準(zhǔn)“的塊訪問屬性 ,如果您將這些塊用于 S7-1200/S7-1500,建議您更改為優(yōu)化訪問以確保更好的性能。 為此,您打開塊的屬性,并在“屬性”選項(xiàng)卡中啟用“優(yōu)化的塊訪問”功能。
(轉(zhuǎn)載)



