最近在為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日
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/256870.html
標籤:其他
