西門子STEP7、博圖裏的數據塊(DB)編址規則

最近在爲PLC-Recorder開發DB變量導入功能時,仔細分析了STEP7和博圖裏導出的數據塊的結構(導出的只是結構,沒有偏移地址),並重點分析了偏移地址計算的規則,否則,沒法算出變量的地址,都是白扯了。西門子的DB塊內的變量除了前篇文章裏那些可能的數據類型,還有用戶數據類型(UDT)和一些特殊的類型(這在文獻裏很難找到,軟件也就沒法處理了)。DB塊內的變量是有結構區分的,並且層級可能很深,UDT可以算作層級類型之一,還包括STRUCT、ARRAY(數組),都需要特殊處理,否則地址計算就會出錯。對於UDT,由於裏面可能嵌套其他UDT、結構,因此,地址計算的程序必須具有遞歸計算的功能(我這個編程門外漢對於遞歸是很敬仰的,竟然在這裏也實現了遞歸功能)。總結一下幾個核心的規則,分享給大家:

1、從編程軟件導出DB源代碼要包括引用,這樣,所有必要的UDT都會在DB前面列出結構,否則你還要讓用戶去導出UDT,用戶會立馬放棄你這個功能。

   

2、在同一結構層級內,如果變量長度是偶數,則地址從偶數字節開始。如果長度非偶數(只有單字節變量和位符合這個條件),則從緊挨着的字節開始。

3、在同一結構層級內,同類型的變量地址可以連續計算,比如位變量,確定了第一個位變量的起始地址後(比如10.0),後面的就可以連續計算,比如:10.1、10.2...

4、每個結構(包括數組、STRUCT、UDT等)增加一個層級,其變量都是從偶數字節開始,結構退出後的下一個變量起始地址也是偶數。

5、字符串地址從偶數字節開始,但是下一個變量(比如位)可能從非偶數字節開始。

DB塊的導入,只是PLC-Recorder的一個細微功能,沒想到費了很大的勁。希望朋友們多向工控、工藝的朋友們推薦咱們的數據採集、記錄、分析軟件,在可能的場合,多去替代那些昂貴的進口軟件,軟件詳情請見連接

 

2021年2月4日

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章