下表說(shuō)明了為什么不能以 fbd 或 lad 格式顯示 stl 程序的一些原因。雖然可以在 lad/stl/fbd 編輯器中將視圖設(shè)置為“fbd”或“l(fā)ad ”,但是程序代碼仍然完全以“stl”方 式顯示,或者部分程序段仍然以“stl”方式顯示。
序號(hào)
原因和補(bǔ)救措施
1
在一個(gè)程序段中編寫(xiě)了多個(gè)賦值
在 fbd 或 lad 中支持顯示使用 stl 語(yǔ)言編寫(xiě)的 step 7 程序。但是,在編寫(xiě)了 stl 程序之后,無(wú)法切換到 fbd 或 lad。
造成此問(wèn)題的一個(gè)原因可能是,在“s”或“r”賦值之后,又有一個(gè)新的賦值指令。 在 fbd 和 lad 中,對(duì)于在每個(gè)“s”或“r”賦值之后會(huì)有新的程序段,因?yàn)橐粋€(gè)程序段中只允許出現(xiàn)一個(gè)這樣的賦值操作。 在 stl 中,可以編制具有任意長(zhǎng)度和多個(gè)賦值的程序代碼。圖 01 給出了一個(gè) stl 程序,在該程序中,在賦值語(yǔ)句“s m1.1”之 后接著便是下一個(gè)子程序(指令“u e1.3”)。這樣便無(wú)法從 stl 轉(zhuǎn)換成 fbd 或 lad。
圖01
補(bǔ)救措施
將 stl 程序分成相關(guān)的幾個(gè)程序段,這樣在每個(gè)賦值 (“s”、“r”) 之后重新起始一個(gè)新程序段。如果賦值“u e1.3”之后的程序代碼是在第二個(gè)程序段中,如圖 02 中所示,則便可以從 stl 轉(zhuǎn)換成 fbd 或 lad。
圖02
另外可能的原因是在完成一系列的指令過(guò)程中,這些指令并不滿足結(jié)構(gòu)上的要求。在 stl 語(yǔ)言中對(duì)程序代碼的編寫(xiě)要比其它語(yǔ)言自由得多。
圖03
補(bǔ)救措施
使用結(jié)構(gòu)化的順序和括號(hào)來(lái)編寫(xiě)多條指令。
圖04
2
在 stl 視圖中插入了臨時(shí)變量
當(dāng)使用 lad/fbd 語(yǔ)言編制程序時(shí),編譯器在某些結(jié)構(gòu)中創(chuàng)建內(nèi)部本地?cái)?shù)據(jù),如圖 05 所示。
圖05
如果在 stl 視圖的 temp 變量區(qū)中聲明了一個(gè)變量,便會(huì)與程序中的絕對(duì)地址訪問(wèn)的本地?cái)?shù)據(jù)相沖突。然后便會(huì)給出下列錯(cuò)誤消息:
圖06
然后,編譯器創(chuàng)建的本地?cái)?shù)據(jù)便會(huì)變成用戶(hù)本地?cái)?shù)據(jù),這樣便無(wú)法再切換到 lad/fbd 視圖。
補(bǔ)救措施
在使用lad/fbd 語(yǔ)言時(shí),應(yīng)該始終在 lad/fbd 視圖中聲明本地?cái)?shù)據(jù)變量。這樣,當(dāng)聲明新的本地?cái)?shù)據(jù)時(shí),內(nèi)部編譯器會(huì)更改自己使用的本地?cái)?shù)據(jù)地址。
3
地址類(lèi)型檢查
已經(jīng)在 step 7 v5.0 中以功能塊圖 (fbd) 或梯形圖 (lad) 形式創(chuàng)建的程序段,在轉(zhuǎn)換成 step 7 v5.1 (或更高版本) 時(shí),程序段不能再以 fbd 或 lad 格式顯示,而只能以 stl 顯示。
對(duì)于 v5.1 及更高版本的 step 7,會(huì)對(duì)顯示類(lèi)型“fbd”和“l(fā)ad”進(jìn)行參數(shù)檢查,這樣如果存在不一致的參數(shù)聲明,則會(huì)阻止程序段 以 fbd/lad 的格式顯示。在 stl 中并沒(méi)有參數(shù)檢查,所以可以顯示。
舉例
在 step 7 v5.0 中,編制一個(gè)比較運(yùn)算程序,用于檢查兩個(gè)地址之間的差異。通過(guò)使用語(yǔ)句“<>i”,該運(yùn)算基于整數(shù)數(shù)據(jù)類(lèi)型 (整數(shù) :帶符號(hào)的 2 字節(jié)數(shù)據(jù))。為兩個(gè)地址分配參數(shù)類(lèi)型 word 是錯(cuò)誤的 (字:2 字節(jié)數(shù)據(jù)) 。其結(jié)果是,在 v5.0 中,可以在 fbd/lad 中顯示。但是,從版本 v5.1 開(kāi)始,就只能在 stl 中顯示相關(guān)的程序段了?,F(xiàn)在將被比較參數(shù)的數(shù)據(jù)類(lèi)型從字改成整數(shù),然后便可以再次在更高版本的 fbd/lad 中顯示程序段了。
注意
作為補(bǔ)救措施,也可以在 lad/fbd 編輯器的“l(fā)ad/fbd”標(biāo)簽中的“options > customize”下關(guān)閉類(lèi)型檢查。在切換 之后,開(kāi)始時(shí)沒(méi)有激活類(lèi)型檢查。只有在刪除了相關(guān)的數(shù)據(jù),然后又重新輸入它之后,類(lèi)型檢查才激活。
但是更好的方式是修正數(shù)據(jù)類(lèi)型,因?yàn)閿?shù)據(jù)類(lèi)型檢查是用于避免編程錯(cuò)誤的。
塊調(diào)用的類(lèi)型檢查是始終激活的,不能關(guān)閉。
圖07
4
丟失 nop 語(yǔ)句
只有在 stl 語(yǔ)句為相關(guān) lad/fbd 元件提供了完整的參數(shù),并且保持了規(guī)定的順序時(shí),才能將編程語(yǔ)言從 stl 切換成 lad/fbd。在 stl 中未使用的參數(shù)將被設(shè)置為 nop 0 (空操作,位組合是 16 個(gè)“0”)。圖 08 給出了一個(gè)接通延遲的示例程序。
圖08
如果沒(méi)有 nop 0 語(yǔ)句,則將無(wú)法在 fbd 或 lad 中顯示。