S7-300的n個常見問題解答之六
S7-300的n個常見問題解答之六
141:應用軟件冗余當一個長度錯誤出現導致CPU處于STOP模式應該作些什么?
當在OB100中設置軟件冗余功能塊FC100時,必須注意下列情況:參數IEC_NO 的背景數據塊必須至少有兩個字的長度,同樣應用于冗余用戶程序的參數 DB_NO的數據塊也必須時這樣。
142:在S7程序中,有許多FC、FB塊, 我怎樣對其中的一些塊進行保護, 而其它的塊可以是開放的呢?
1) Step7中, 可以先任意打開一塊如OB1, 在"file"中選擇"Generate Source"或快捷方式"Ctrl+T",彈出一個畫面,填寫"object name"如"tt",然后按OK確認,就會再彈出另一個畫面,左邊是你的程序中所有的塊,如果你需要保護哪些塊, 就把這些塊移到右邊,如FB1、FB2等等, 然后退出所有的程序塊,再進入SIMATIC Manager中。
2) 在S7 Program Sources找到文件tt,雙擊tt打開,在第四行中加入"Know_How_Protect", 然后編譯, 無錯后存盤。這樣FB1、FB2就被保護住,如想去掉保護,在tt中去掉"Know_How_Protect"編譯存盤即可。
注意: 千萬不要丟失或刪除源文件(如tt), 否則程序被保護, 用戶可以另存到其它目錄中,或Export Source到硬盤中,再刪除源文件,這樣別人只能看到未保護的塊。
143:SFB41,SFB42,SFB43和FB41,FB42,FB43的區別?
SFB41(CONT_C),SFB42(CONT_S),SFB43(PULSEGEN)塊和FB41(CONT_C),FB42(CONT_S),FB43(PULSEGEN)的區別: SFB41,42,43與FB41,42,43的參數設置是一樣的。SFB41,42,43只能用于CPU314IFM;FB41,42,43可用于CPU313以上的CPU(除CPU314IFM),因為SFB41,42,43集成于CPU314IFM中,而在普通CPU中沒有這些塊。
144:如何在多例兼容功能塊中找到變量地址?
在多例兼容功能塊中,為塊參數和靜態本地數據加載與地址寄存器AR2有關的絕對地址。如果要在情景數據塊中找到變量的絕對地址,則必須把域內指針(只是AR2的地址)加載到變量地址。
樣例:
TAR2 //將地址寄存器加載到累加器AC1(偏移量)
UD DW#16#00FF_FFFF // 關閉區域ID
L P##variable //加載變量地址
+D // 增加偏移量和變量地址
LAR1 // 保存地址寄存器AR1中的結果
這樣可在AR1中獲得絕對地址以進行進一步處理。
當功能塊作為本地實例調用時,總要使用該方法。比如,在一個功能塊中創建可做為類型“FB”的靜態變量的功能塊。這樣所調用的情景數據塊的數據偏移量就存儲到情景數據塊中。單個實例的偏移量在AR2中。如果不調用作為本地實例的功能塊,則可以結束計算。值‘ 0’就在地址寄存器中。
注意事項:如果改變程序中的地址寄存器AR2,那么也改變了變量的偏移量地址。因此就不能保證再對變量進行正確訪問。在這種情況下,必須預先保存AR2,并 在對程序動作完之后將其 復位為初始狀態。
樣例:
TAR2 // 在累加器中加載偏移量地址
T #save // 比如,靜態本地數據域 0中的變量
L DID 0 // 地址絕對是由DI加載的beds L AR2 // 核對
145:怎樣才能訪問上一函數的本地數據?
如要訪問以前的本地數據(“V-e > L”數據),可以傳送一自創建ANY指針或絕對地址到被調用的FC。如果傳送的是自創建ANY指針,區域指針會指向其本地數據,而這是無意義的。> 因此“V”區域碼必須置于ANY指針中。此碼必須準確傳送。當指定絕對地址時可由編譯器完成此工作。
常規程序結構:
以ANY指針或絕對(地址)方式傳送:
LAR1 P##target //本地定義的ANY變量初始地址
L W#16#87 //為“V”區域載入碼
T LB[AR1,P#6.0] //傳送到ANY變量
CALL FCxy
source1: = #target //傳送自創建的ANY指針
source2: = P#L 0.0 BYTE 8 //傳送完全L數據區
絕對尋址與通過ANY指針尋址的區別:
下圖顯示了絕對尋址與通過自創建ANY指針尋址間的區別。在這種情況下“ 87”碼不傳送,因此ANY指針指向其本地區域。
146:怎樣在DB內進行間接尋址?
請參照:
在DB內進行間接尋址例子
147:下面是一個在STEP7軟件中實現簡單指針尋址的例子程序,您可以參考它的結構實現您的指針尋址功能?
siemens指針尋址例子_cpu315
148:絕對地址和符號尋址的定義和區別是什么?
在STEP 7程序中要用到I/O信號、位寄存器、計數器、定時器、數據塊及功能塊。在程序中可以采用直接地址,或者更便于讀程序的符號尋址,例如Motor_A_On, 或采用你的公司或行業常用的代碼。這樣在你的用戶程序中就可以通過符號來尋址。
絕對地址:絕對地址由地址標識符和存儲器的位置組成,例如 Q1.0,I1.1, M2.0, FB21等。
符號地址 :如果為絕對地址指定一個符號名,程序會更便于閱讀和查錯。
STEP 7 可以自動將符號名翻譯成所需的絕對地址。如果要用符號名存取ARRAY、STRUCT、數據塊、局部數據、邏輯塊、以及用戶自定義數據類型, 必須首先為絕對地址指定一個符號名。
例如,可以為Q0.0 指定一個符號名MOTOR_ON,然后在程序中將MOTOR_ON作為一個地址使用。使用符號地址更容易將您的過程控制項目中的元件與程序中的元件相對應。
注意:在符號名中不允許使用兩個連續的下劃線,例如MOTOR__ON。
編程支持 :LAD、FBD、STL中地址、參數、塊名可用絕對地址或符號表示。
用菜單命令View > Display > Symbolic Representation,可以切換絕對地址和符號地址
為了使用符號地址編程更加容易,可以同時顯示絕對地址和符號名。使用菜單命令 View > Display > Symbol Information來激活。這就意味著STL語句的注釋包含了更多的信息。不能在該界面下進行修改,只能在符號表(symbol table)或變量聲明表(variable declaration table)中進行修改。
149:S7-300/400系統存儲區域共有多少種?
S7 CPU的系統存儲區域分為下表中列出的地址區域。在程序中可以根據相應的地址直接讀取數據。
150:如何把一個DATE_AND_TIME變量轉換為STRING變量?
為了以日期/時間字符串(STRING)形式顯示DATE_AND_TIME變量,必須DATE_AND_TIME 變量的專用字節轉換為相應的CHAR字符。
讀取DATE_AND_TIME 變量的專用字節并從這兩位數所在ASCII碼中創建專用位。將確定了的CHAR字符存儲在字符串的期望位置。
示例:
L 字節年
SLD 12
SRW 4
SRD 8
L W#16#3030
+ I
T 數字字符年
也可以用相反順序將一個STRING格式的日期/時間字符串轉換為一個DATE_AND_TIME變量。
文章版權歸西部工控xbgk所有,未經許可不得轉載。