天天看點

西門子STEP7、博圖裡的資料塊(DB)編址規則

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

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

西門子STEP7、博圖裡的資料塊(DB)編址規則
西門子STEP7、博圖裡的資料塊(DB)編址規則

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

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

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

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

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

2021年2月4日

繼續閱讀