如果你使用自己制作的電纜,那么必須使用帶屏蔽外殼的D型接頭,屏蔽線應(yīng)當(dāng)和接頭的外殼連接,禁止將電纜的屏蔽層和GND連接,否則會(huì)造成通訊接口的損壞,請注意RS232不支持熱插拔,所以一定要斷電后在插拔通訊電纜;
107:在用CP340,CP341與第三方產(chǎn)品通訊時(shí)(如PC機(jī),用VB,VC讀數(shù)據(jù))怎樣識(shí)別聯(lián)線是否是好的?
在用CP340,CP341與PC機(jī)通訊時(shí),常常讀不出數(shù)據(jù),這樣有兩個(gè)方面原因。
其一,在PLC側(cè)程序是否正確。用上升沿觸發(fā)P_Send,可以看見TXD燈閃,這樣可以判斷PLC側(cè)程序沒問題;
其二,PC側(cè)VB,VC程序的問題及電纜線的聯(lián)接好壞,無從知道,如果聯(lián)線沒問題,就可以集中精力在PC側(cè)找原因,判定聯(lián)線是否接好,顯得非常重要,有一個(gè)小方法可以測出。在PLC側(cè)修改CP340用ASCII方式傳送,在發(fā)送DB塊中寫幾個(gè)字符形式的數(shù)據(jù)(chat 如'1','2','A'等)并間隔觸發(fā)P_Send功能塊。
在PC側(cè)修改串口參數(shù)與PLC一致,如波特率,數(shù)據(jù)長度,停止位,奇偶校驗(yàn),無握手信號(hào)等。在bbbbbbs下附件中打開"Hyper Terminal"建立一個(gè)直接到串口的連接,這樣就可以讀到從PLC中發(fā)送的數(shù)據(jù)如‘12A'等。同樣用"Send Text File"的功能,把一些字符送到PLC。這樣如果聯(lián)接電纜是好的,那么可以簡單地判斷問題是出在哪里。
108:如何使用CP341模板實(shí)現(xiàn)Modbus主站或從站通訊,我應(yīng)當(dāng)定購那些產(chǎn)品?
1)CP341 模塊: 6ES7 341-1xH01-0AE0 (x:= A: RS232; x:= B: TTY; x:= C: RS422/485)
2)**(MODBUS master): 6ES7 870-1AA01-0YA0
或者**(MODBUS slave): 6ES7 870-1AB01-0YA0
109:每當(dāng)斷電重啟后,CP341模板和調(diào)制解調(diào)器(如SAbbb的modem)之間的通訊出錯(cuò)是什么原因?
這是因?yàn)?DTR 、 RTS信號(hào)默認(rèn)為0造成的,可以在OB1中調(diào)用FC6 (V24_SET). 參數(shù)RTS 和 DTR 設(shè)置為"TRUE".
110:配置"CP 340 RS232C"打印工作應(yīng)注意什么?
調(diào)用功能塊FB4"P_PRINT"打印字符信息。功能塊"P_PRINT"傳送信息給通訊處理器CP340,CP340發(fā)送信息給打印機(jī)把信息打印出來。為了打印這些信息必須知道參數(shù)"P_PRINT","Pointer DB","Variables DB"和"Format bbbbbb"的相對關(guān)系。
111:CP 341 / CP 441-2 需要多少許可證(License)?
在任何情況下,每一個(gè)MODBUS站都需要一個(gè)單獨(dú)的許可證。6ES7 870-1AA01-0YA0包含軟件CD,文檔(PDF文件)和硬件狗。如果在同一個(gè)站使用幾個(gè)CP341或CP441通訊處理器,則每個(gè)CP都需要一個(gè)MODBUS許可證副本(copy license),即不帶手冊和軟件的MODBUS Dongle,只有一個(gè)硬件狗,訂貨號(hào)為6ES7 870-1AA01-0YA1。
注意事項(xiàng):
對于有兩個(gè)接口的 CP 441-2,僅需要一個(gè)許可證,并且每個(gè)接口都可以使用任何協(xié)議。
112:關(guān)于CP34x串行通訊中的起始位、數(shù)據(jù)位、校驗(yàn)位、停止位的說明?
CP34x通訊模板與其他設(shè)備進(jìn)行通訊時(shí),串口傳輸?shù)氖且粋€(gè)10位或11位的數(shù)據(jù)幀,在模塊的bbbbbeters屬性窗口中您可以設(shè)置數(shù)據(jù)幀的格式,對這個(gè)10或11位組成的數(shù)據(jù)幀的組成遵循以下規(guī)則:
幀的第一位必須是起始位,始終為1,不能修改;
起始位之后是7-8位數(shù)據(jù)位,由用戶收發(fā)的數(shù)據(jù)組成;
數(shù)據(jù)位之后是校驗(yàn)位,odd奇校驗(yàn),even偶校驗(yàn),any不校驗(yàn)但校驗(yàn)位為0,none無校驗(yàn)位;
校驗(yàn)位之后是停止位,可以設(shè)為1-2個(gè)位,始終為1,不能修改;
113:如何通過單向通信從S7-300 / 400訪問S7-200上的數(shù)據(jù)?
通過MPI,從帶有X_PUT / X_GET的S7-300 / 400 可以訪問幾個(gè)S7-200 CPU。在這種情況下,g S7-300 / 400 是主站,S7-200 是從站。
對于CPU22x系列的S7-200 CPU,可以在19,2 kBd 和 187,5 kBd下工作。從某個(gè)固件狀態(tài)起,CPU21x系列的S7-200 CPU只能控制波特率19,2 kBd。
114:使用通訊處理器(CP340, CP341, CP441-2, CP441-1)時(shí)對于協(xié)議 3964(R) 和 RK512 可以使用 2 線和 4 線模式嗎?
在點(diǎn)對點(diǎn)通訊中,在使用上述的通訊處理器時(shí),只能在 4 線模式中執(zhí)行協(xié)議 3964(R) 和 RK512.
115:當(dāng)傳輸字符串或ASCII字符應(yīng)注意什么?
當(dāng)傳送字符串必須確認(rèn)最高為254字符。一個(gè)bbbbbb(character bbbbbb)的數(shù)據(jù)格式最大256字符,包括254個(gè)字符,最大的字符長度在字符串的第一字節(jié)中定義,實(shí)際長度在第二個(gè)字節(jié)中定義,接下來的是字符ASCII格式。
當(dāng)傳送字符串?dāng)?shù)據(jù)時(shí),指針必須指向用戶數(shù)據(jù)的第一位而不是字符串的第一個(gè)位。
116:通過PROFIBUS-DP使用SFC 58/59或者 SFB 52/53進(jìn)行通信時(shí),存在通信限制嗎?
當(dāng)使用寫操作標(biāo)簽和讀操作標(biāo)簽(SFC 58/59或者SFB 52/53)時(shí),存在根據(jù)CPU而定的對活動(dòng)工作的限制:
CPU 31x-2DP: 每個(gè)DP鏈上允許同時(shí)進(jìn)行4個(gè)寫操作和4個(gè)讀操作。
CPU 317, CPU 318-2: 每個(gè)DP鏈上允許同時(shí)進(jìn)行8個(gè)寫操作和8個(gè)讀操作。
CPU 41x-2DP: 每個(gè)DP鏈上允許同時(shí)進(jìn)行8個(gè)寫操作和8個(gè)讀操作。
在外部鏈上,每個(gè)SFC/SFB同時(shí)進(jìn)行的寫操作和讀操作的數(shù)目總共不能超過32。因此,每個(gè)CPU和SFC/SFB上可以同時(shí)進(jìn)行最多40個(gè)(內(nèi)部鏈上8個(gè) + 外部鏈上32個(gè))作業(yè)。
如果在PROFIBUS Net上運(yùn)行幾個(gè)通信伙伴,請確保不要激活比指示值更多的作業(yè)。一個(gè)SFC/SFB可能持續(xù)幾個(gè)CPU循環(huán)周期.
118:可以用模擬輸入模塊SM 331-7NF00進(jìn)行參數(shù)設(shè)置的最大干擾頻率是多少?
通過硬件配置,可以設(shè)置參數(shù)為400Hz的最大干擾頻率。通過特殊的濾波器可以得到這個(gè)數(shù)值。
最小的有效綜合時(shí)間是10ms——這樣就可抑制100Hz的干擾頻率。模塊的最小基本執(zhí)行時(shí)間(釋放所有通路)是140ms.
119:關(guān)于機(jī)架故障,在編程OB86時(shí)需要注意哪些事項(xiàng)?
只要檢測出機(jī)架故障,操作系統(tǒng)就會(huì)調(diào)用OB86,例如:報(bào)告機(jī)架故障(例如:缺少IM或IM故障導(dǎo)致連接電纜中斷),機(jī)架的分布式電源故障,在總線系統(tǒng)PROFIBUS-DP的主站系統(tǒng)中,DP從站發(fā)生故障。
在S7-300和S7-400中處理故障的方法不同:
在S7-300中,當(dāng)中央機(jī)架出現(xiàn)故障時(shí),不調(diào)用OB 86;只有分布式機(jī)架發(fā)生故障才調(diào)用它。
在S7-400中,非分布式或分布式機(jī)架出現(xiàn)故障的情況下,均調(diào)用OB 86。
120:關(guān)于300的硬件安裝配置應(yīng)該注意什么?
通常一套S7-300 PLC系統(tǒng)有一個(gè)主機(jī)架,安裝有CPU的機(jī)架稱為主機(jī)架,當(dāng)主機(jī)架上的I/O模塊(最多8塊)上的控制點(diǎn)數(shù)不夠時(shí),可以再增加1-3個(gè)擴(kuò)展機(jī)架,每個(gè)擴(kuò)展機(jī)架最多可安裝8個(gè)I/O模塊,裝在4到11槽,3個(gè)擴(kuò)展機(jī)架最多安裝24個(gè)I/O模塊。
在使用擴(kuò)展機(jī)架時(shí),需要機(jī)架(Rack),電源模塊(PS),接口模塊(IM),連接電纜368,S7-300的模塊(信號(hào)模塊、通訊模塊、功能模塊等)。
S7-300的安裝機(jī)架是一種導(dǎo)軌。你可以使用該導(dǎo)軌,安裝S7-300系統(tǒng)的所有模板。S7-300既可以水平安裝,也可以垂直安裝。要注意其允許的環(huán)境溫度為:
垂直安裝:0 至 40°C、水平安裝:0 至 60°C、 CPU和電源必須安裝在左側(cè)或底部。 121:如何判斷電源出錯(cuò),如:電池故障?
如果電源(僅S7-400)或緩沖區(qū)中的一個(gè)錯(cuò)誤觸發(fā)一個(gè)事件,則CPU操作系統(tǒng)訪問OB81。
錯(cuò)誤糾正后,重新訪問OB81。電池故障情況下,如果電池檢測中的BATT.INDIC開關(guān)是激活的,則S7-400僅訪問OB81。如果沒有組態(tài)OB81,則CPU不會(huì)進(jìn)入操作狀態(tài)STOP。如果OB81不可用,則當(dāng)電源出錯(cuò)時(shí),CPU仍保持運(yùn)行。
122:如何診斷模擬量模板?
CPU 可以中斷用戶程序的執(zhí)行處理診斷報(bào)警塊OB 82。
在用戶程序中你可以調(diào)用OB 82 中的SFC 51 或SFC 59 以從模板中獲得更為詳細(xì)
的診斷信息。
診斷信息在OB 82 退出之前都是一致的當(dāng)OB 82 退出時(shí)將對模板作出診斷中斷響
應(yīng)。
123:對于小功率輸入的觸發(fā)器,如何避免線路損壞?
將觸發(fā)器連接到SM322-8BF,如果它的1信號(hào)功率輸入低于10mA(例如1mA),則可能會(huì)報(bào)告線路損壞。不建議禁用“Wire breakage”診斷,因?yàn)檫@將禁用所有的診斷,并且當(dāng)SM322-8BF在一定電流范圍(0.5到10mA)內(nèi)工作時(shí),可能無法安全地開關(guān)。
補(bǔ)救措施:接一個(gè)與觸發(fā)器平行的電阻,這樣至少有10mA(24V ca. 2.4 kOhm)的電流。該電阻應(yīng)該直接安放在觸發(fā)器上,從而可以方便檢測線路損壞。
124:如何為S7 318-2 CPU進(jìn)行操作系統(tǒng)更新?
創(chuàng)建一個(gè)操作系統(tǒng)更新卡所必需的條件:
1. S7存儲(chǔ)卡的類型:2 MB的閃存,訂貨號(hào)6ES7 953-8LM00-0AA0、6ES7 951-1KL00-0AA0
2. STEP 7 V3.1或更新版本
3. 具有外部PROM編程器的PC或者編程設(shè)備(PG),用于編程存儲(chǔ)卡
使用STEP7創(chuàng)建操作系統(tǒng)更新卡的步驟:
1. 下載所需的CPU文件;
2. 雙擊文件名將文件解壓縮;
3. 在Simatic Manager中執(zhí)行“File/S7 Memory Card/Delete”,刪除微存儲(chǔ)卡內(nèi)容;
4. 在Simatic Manager中選擇“PLC/Update CPU Operating System”對操作系統(tǒng)進(jìn)行編程。選擇目標(biāo)目錄并“打開”CPU_HD.UPD文件,開始編程過程;
5. 當(dāng)標(biāo)準(zhǔn)鼠標(biāo)指針重新出現(xiàn)時(shí),即完成對操作系統(tǒng)更新卡的編程。
執(zhí)行操作系統(tǒng)更新:
1. 切斷CPU所處機(jī)架的電源(PS);
2. 在CPU中插入準(zhǔn)備好的操作系統(tǒng)更新卡;
3. 接通CPU所處機(jī)架的電源(PS);
4. 操作系統(tǒng)從微存儲(chǔ)卡傳送到內(nèi)部CPU閃存EPROM。此時(shí),將點(diǎn)亮CPU的所有LED(INTF、EXTFFRCE、< span lang="EN-GB">CRST、RUN、< span lang="EN-GB">STOP);
5. 大約2分鐘后完成操作系統(tǒng)更新,此時(shí)STOP LED將慢速閃動(dòng)=>請求系統(tǒng)存儲(chǔ)器復(fù)位;
6. 切斷電源,插入操作所需的微存儲(chǔ)卡;
7. 接通電源,CPU執(zhí)行一次自動(dòng)存儲(chǔ)器復(fù)位,之后立即進(jìn)入準(zhǔn)備就緒狀態(tài)。.
注意:為執(zhí)行更新,必須從模塊中拆除電池.
125:模擬量模板的信號(hào)轉(zhuǎn)換時(shí)間如何計(jì)算?
轉(zhuǎn)換時(shí)間由基本轉(zhuǎn)換時(shí)間和模板的以下其它處理時(shí)間組成
1)電阻測試 2)斷線監(jiān)控
基本轉(zhuǎn)換時(shí)間直接取決于模板量輸入模板的轉(zhuǎn)換方法積分方法瞬時(shí)值轉(zhuǎn)換
對于積分轉(zhuǎn)換方法積分時(shí)間將直接影響轉(zhuǎn)換時(shí)間積分時(shí)間取決于你使用STEP 7 所設(shè)置的干擾頻率抑制。
126:是否可能在兩個(gè)DP從站之間運(yùn)行一個(gè)DP網(wǎng)絡(luò)?
不能。不可能建立從站-從站通信??偸切枰粋€(gè)主站來操作DP網(wǎng)絡(luò)。智能從站可以訪問其它從站的初始值(直接數(shù)據(jù)通信),但是總是需要DP主站來控制DP網(wǎng)絡(luò)。智能從站也可以不使用DP網(wǎng)絡(luò)而獨(dú)自工作(單機(jī)工作),但是它們不能作為DP主站來提供服務(wù)。僅可以與模塊接口共同工作。
127:對于有些模擬量輸入模板你可以使用STEP 7 設(shè)定模擬值的平滑指數(shù),它能起到什么作用?
使用平滑指數(shù):模擬值的平滑指數(shù)可以保證進(jìn)一步處理的穩(wěn)定模擬信號(hào);這對于模擬值與被測值之間的緩慢變化相適應(yīng)非常重要,例如溫度測量時(shí)。
平滑原理:被測值可以通過數(shù)字濾波進(jìn)行平滑平滑可以通過模板根據(jù)轉(zhuǎn)換數(shù)字化模擬值的規(guī)定數(shù)量計(jì)算平均值來實(shí)現(xiàn);用戶可以在最多四個(gè)等級(jí)賦值平滑參數(shù)無低平均高這四個(gè)等級(jí)決定了用于平均計(jì)算的模擬信號(hào)數(shù)量;所選平滑等級(jí)越高所平滑的模擬值將越穩(wěn)定時(shí)間越長直到在一個(gè)階躍響應(yīng)后適用所平滑的模擬信號(hào)。
128:模擬信號(hào)電纜應(yīng)該單端接地還是2端接地?
為了減少電子干擾對于模擬信號(hào)應(yīng)使用雙絞屏蔽電纜模擬信號(hào)電纜的屏蔽層應(yīng)該兩
端接地。
但是如果電纜兩端存在電位差將會(huì)在屏蔽層中產(chǎn)生等電線連接電流造成對模擬信號(hào)的干
擾在這種情況下你應(yīng)該讓電纜的屏蔽層一點(diǎn)接地。
129:模擬量信號(hào)為:7FFFH,是什么原因?
每個(gè)模擬量輸入模板都可提供被測值7FFFH 與發(fā)現(xiàn)故障時(shí)的參數(shù)賦值無關(guān),該被測值
可以是上溢故障或通道無使能
130:防止靜電放電危險(xiǎn)一般有哪些措施?
保證良好的接地:在處置對靜電敏感的設(shè)備時(shí)應(yīng)確保人體工作表面和包裝有良好的接地這樣可以避免充上靜電。
避免直接接觸:只在不可避免的情況下才接觸對靜電敏感的設(shè)備例如在維修時(shí)手持模板但不要接觸元件的針腳或印刷板的導(dǎo)體用這種方法使放電能量不會(huì)影響對靜電敏感的設(shè)備
如果必須在模板上進(jìn)行測量在開始測量之前必須先接觸接地的金屬部分使人體放電這種方法只適用于接地的測量設(shè)備。
131:S7-300/400 PLC支持哪些尋址方式?
1)直接尋址
1.直接地址:例如I0.0,Q1.7,PIW256,PQW512,MD20,T15,C16,DB1.DBB10,L10.0等
2.符號(hào)尋址:例如qq,ww.aa等
2)間接尋址
1.存儲(chǔ)器間接尋址:16位指針,例如OPN DB[MW2] 32位指針,例如A I[MD0]
2.寄存器間接尋址:32位指針,例如A I[AR1,P#0.0],A [AR1,P#0.0]
132:如何使用指針?
指針用來指向一個(gè)地址。使用這種尋址方式的優(yōu)點(diǎn)在于可以在程序運(yùn)行過程中實(shí)現(xiàn)變址。指針用于存儲(chǔ)器間接尋址
程序中用于存儲(chǔ)器間接尋址的語句包含一個(gè)指令、一個(gè)地址標(biāo)識(shí)符、以及一個(gè)偏移量(偏移量必須在方括號(hào)內(nèi)給出)。
下面給出一個(gè)雙字格式的指針的例子:
L P#8.7 把指針值裝載到累加器1
T I[MD2] 把指針值傳送到MD2
A I[MD2] 查詢I8.7的信號(hào)狀態(tài)
= Q[MD2] 給輸出位Q8.7賦值
存儲(chǔ)區(qū)域內(nèi)部尋址及交叉尋址:程序中采用這些尋址方式的語句包含一個(gè)指令以及下列內(nèi)容:地址標(biāo)識(shí)符、地址寄存器標(biāo)識(shí)符、偏移量。地址
寄存器(AR1、AR2)及偏移量必須寫在方括號(hào)內(nèi)。
存儲(chǔ)區(qū)域內(nèi)部尋址例程:指針不包含指示存儲(chǔ)區(qū)域的信息:
L P#8.7 把指針值裝載到累加器1
LAR1 把指針從累加器1裝載到AR1
A I[AR1,P#0.0] 查詢I8.7的信號(hào)狀態(tài)
= Q[AR1,P#1.1] 給輸出位Q10.0賦值
偏移量0.0不起作用。輸出Q10.0 等于8.7 (AR1) 加偏移量1.1。結(jié)果是10.0 ,而不是9.8。
存儲(chǔ)區(qū)域交叉尋址例程:在存儲(chǔ)區(qū)域交叉尋址中,指針中包含指示存儲(chǔ)區(qū)域的信息(例子中為 I 和 Q)。
L P#I8.7 把指針值及存儲(chǔ)區(qū)域標(biāo)識(shí)裝載到累加器1
LAR1 把存儲(chǔ)區(qū)域I 和地址8.7裝載到AR1
L P#Q8.7 把指針值和地址標(biāo)識(shí)符裝載到累加器1
LAR2 把存儲(chǔ)區(qū)域Q和地址8.7裝載到AR2
A [AR1,P#0.0] 查詢輸入位I8.7的信號(hào)狀態(tài)
= [AR2,P#1.1] 給輸出位Q10.0賦值
偏移量0.0不起作用。輸出Q10.0 等于8.7 (AR2) 加偏移量1.1。結(jié)果是10.0 ,而不是9.8,
133.如何用一個(gè)變量作索引實(shí)現(xiàn)在一個(gè)域中讀一個(gè)元素或?qū)懸粋€(gè)元素?
一個(gè)域(數(shù)據(jù)類型為ARRAY)是幾個(gè)相同數(shù)據(jù)元素的連接。在源代碼中一個(gè)單空間域的聲明執(zhí)行如下:
My_Array: ARRAY[4..11] OF INT;
它標(biāo)識(shí)了一個(gè)數(shù)據(jù)類型為“INTEGER”的8(=11-4+1)元素單空間域。
[NextPage]
為了訪問域中的一個(gè)元素,輸入域名并在方括號(hào)中輸入希望訪問的元素的號(hào)碼,比如:My_Array[6]。
在S7-SCL (結(jié)構(gòu)化控制語言- 符合IEC 1131-3 的結(jié)構(gòu)化文本)可以使用變量做索引:
i:INT:=46
My_Array[i]:=0
在FBD/LAD/STL中,索引必須是個(gè)常量,因此限制了可使用的域的范圍。
134:怎樣訪問復(fù)合數(shù)據(jù)類型數(shù)組單元的變量?
復(fù)合數(shù)據(jù)類型數(shù)組單元中的變量只有通過單獨(dú)的函數(shù)才能訪問。作為傳送參數(shù)這個(gè)函數(shù)擁有期望的數(shù)組數(shù)量并以數(shù)組[0]作為起始地址。對此函數(shù)的要求是數(shù)組置于一個(gè)數(shù)據(jù)塊中并且數(shù)組[0]不被當(dāng)前數(shù)據(jù)使用。這就決定了從參數(shù)傳送來的地址并將指定的數(shù)組拷貝到作為處理區(qū)的數(shù)組[0]。接下來可對數(shù)組進(jìn)行符號(hào)處理。然后它被拷貝回原始的數(shù)組號(hào)。
首先用這些參數(shù)定義并計(jì)算數(shù)組[0]的地址和要處理的數(shù)組數(shù)量。將這些值保存在函數(shù)的臨時(shí)變量內(nèi)。
L P##Field_Start // 輸入地址域[0]
LAR1
L D [AR1,P#0.0] // 把這些地址保存在類型為ANY的臨時(shí)變量中
T LD 0 // temp 'firststruc' = LD 0-9
T LD 10 // temp 'sourcestruc' = LD 10-19
L D [AR1,P#4.0]
T LD 4
T LD 14
L W [AR1,P#8.0]
T LW 8
T LW 18
L LD 16 // 定義期望數(shù)組的地址
LAR1
L #Indices
L LW 12
*I
SLD 3
+AR1
TAR1 LD 16
然后用SFC20 (BLKMOV)將要處理的數(shù)組拷貝到數(shù)組[0]。就可以根據(jù)應(yīng)用需求,對索引數(shù)組通過符號(hào)訪問。然后用SFC20 (BLKMOV)將數(shù)組[0]拷貝回原始區(qū)域。
[NextPage]
135:能否在STEP 7中使用間接尋址編寫循環(huán)程序?
可以,間接尋址允許尋址地址在程序運(yùn)行期間才可以確定的操作數(shù)。這意味著,程序的一部分可以重復(fù)執(zhí)行。在每個(gè)運(yùn)行周期內(nèi),循環(huán)編程為所使用的操作數(shù)分配不同的地址。
136:ANY指針類型的參數(shù)如何被傳送出塊邊界?
下面的例子解釋了系統(tǒng)功能塊SFC50“RD_LGADR”(讀模塊邏輯地址)內(nèi)參數(shù)的確定。例如,為功能塊FB1編程可分為下面幾個(gè)步驟:
?聲明一個(gè)IN變量“test”和一個(gè)TEMP變量“test2”,類型都為ANY(圖1)。
?將SFC50的參數(shù)“PEADDR”傳送到變量“test2”。
?通過為ANY指針“test”賦值,將數(shù)據(jù)傳送到臨時(shí)變量“test2”中。
語句L P##test首先將地址裝載到Accu1,然后通過LAR1語句裝載到地址寄存器AR1中(可能是LAR1 P##test的簡化格式)。通過寄存器間接尋址將ANY指針(10 字節(jié)長)中的地址信息讀出:
代碼注釋
0 L W[AR1,P#0.0] 讀出當(dāng)前Accu1中參數(shù)數(shù)據(jù)類型的代碼。
2 L W[AR1,P#2.0] 讀出Accu1中的重復(fù)因數(shù)。重復(fù)因數(shù)表明通過參數(shù)類型ANY傳遞的數(shù)據(jù)類型的大小。
4 L W[AR1,P#4.0] 讀數(shù)據(jù)塊的號(hào)或者從ANY指針中讀出“0”(這個(gè)對應(yīng)于ANY指針的第 4 到第 5 字節(jié))。
6 L D[AR1, P#6.0] 將區(qū)域指針讀入Accu1。
每次讀地址寄存器AR1之后,數(shù)據(jù)被保存或者緩存(如T LW 0)在臨時(shí)變量“test2”中(ANY指針)。按照Network 1中的語句順序,傳送到功能塊FB1 的ANY指針被復(fù)制到臨時(shí)變量“test2”中。
137:怎樣通過交叉區(qū)域寄存器間接尋址訪問功能塊的本地?cái)?shù)據(jù)或者功能?
這里必須預(yù)先定義本地?cái)?shù)據(jù)。您可以使用下列語句訪問FB或FC的本地?cái)?shù)據(jù):
對于存儲(chǔ)器間接指針尋址,本地變量必須聲明為臨時(shí)變量(temp):
L P##Lokalvariable
LAR1
L W[AR1,P#X.x]
此處不能使用變量類型“bbbbb”、“Output”和“In_Out”,將被語法檢查視為非法。
138:怎樣編程間接訪問一個(gè)ARRAY類型變量的元素?
一個(gè)位、字節(jié)或者字符域的尺寸是按照字節(jié)限制排列的——在所有其它情況下是按照字對齊的。表T6-1中給出了一個(gè)域的存儲(chǔ)示例。操作系統(tǒng)計(jì)算域中單個(gè)元素末端位置的位地址。域被分配到從下一個(gè)字地址(或字節(jié)地址)。下一個(gè)數(shù)據(jù)類型從下一個(gè)整字開始(或者整字節(jié)).
聲明部分:
在聲明部分,必須定義一個(gè)與將被間接尋址的ARRAY有著同一結(jié)構(gòu)的ARRAY。不一定非要將ARRAY聲明為IN-OUT變量;也可以聲明為TEMP、IN或OUT變量。
網(wǎng)絡(luò):
域?qū)挾?OFFSET)在網(wǎng)絡(luò)中定義。ARRAY中的單個(gè)元素的最小常規(guī)數(shù)據(jù)寬度是一個(gè)字節(jié);即使在兩個(gè)變量之間定義一個(gè)BOOL。有必要確定相關(guān)的域的寬度和確定下一個(gè)期望域的起始地址??墒褂孟旅娴乃惴ǎ?
地址(指數(shù)):b = 元素長度*(指數(shù) - 1)
創(chuàng)建具有不同數(shù)據(jù)類型的結(jié)構(gòu)時(shí),必須注意,在特定的環(huán)境下可能會(huì)自動(dòng)插入填充字節(jié)。
保存ARRAY數(shù)據(jù)類型:
示例:ARRAY [1..2,1..3] OF 整數(shù)將生成下列域:
多維域是按照順序保存的。在本例中整數(shù) [1,1]后面是整數(shù) [1,2],整數(shù) [1,3]后面是整數(shù)[2,1]。
139:STEP 7 以哪種格式存儲(chǔ)POINTER參數(shù)類型?
STEP 7以 6 個(gè)字節(jié)保存POINTER參數(shù)。表4-1顯示了用于保存POINTER參數(shù)類型的內(nèi)存區(qū)域以及每個(gè)字節(jié)中保存的數(shù)據(jù)。i POINTER參數(shù)類型保存了下列信息:
DB號(hào)(如果DB中沒有保存任何數(shù)據(jù)時(shí)為0)。
CPU中的內(nèi)存區(qū)域(表格中列出了不同內(nèi)存區(qū)域的十六進(jìn)制代碼)。
數(shù)據(jù)的地址(按照Byte.Bit格式)。
[NextPage]
如果將形式參數(shù)聲明為POINTER參數(shù)類型,則只需要指定內(nèi)存區(qū)域和地址。STEP 7自動(dòng)將輸入項(xiàng)目的格式轉(zhuǎn)換為指針格式。
140:如何間接訪問I/O地址區(qū)域?
下面演示了一個(gè)間接訪問PA區(qū)域的例子。您具有對輸出模塊只寫訪問和對輸入模塊只讀訪問的權(quán)利
FUNCTION_BLOCK FB 2
TITLE =
VERSION : 0.1
VAR_bbbbb
TargetAddress : DWORD := DW#16#FF; //Target address by PA address range
OutputValue : DWORD ; //Output value
P_Typ : BOOL ; //1=PE range, 0=PA range
END_VAR
VAR_OUTPUT
bbbbbValue : DWORD ; //bbbbb value
END_VAR
VAR_TEMP
TargetTmp : DWORD ;
END_VAR
BEGIN
NETWORK
TITLE =
U #P_Typ;
SPB PEA;
L #TargetAddress;
T #TargetTmp; //Load target address in the tempor鋜e store
SLD 3; //Calculate the formate of pointer Byte.Bit
T #TargetTmp; //Initialisation of temp variable with target address in L-Stack
L #OutputValue; //Load output value
T PAD [#TargetTmp]; //Transfere output value to target address
SPA End;
PEA: L #TargetAddress;
T #TargetTmp; //Load target address in the tempor鋜e store
SLD 3; //Calculate the formate of pointer Byte.Bit
T #TargetTmp; //Initialisation of temp variable with target address in L-Stack
L PED [#TargetTmp]; //Load output value
T #OutputValue; //Transfere output value to target address
End: CLR ;
END_FUNCTION_BLOCK
141:應(yīng)用軟件冗余當(dāng)一個(gè)長度錯(cuò)誤出現(xiàn)導(dǎo)致CPU處于STOP模式應(yīng)該作些什么?
[NextPage]
當(dāng)在OB100中設(shè)置軟件冗余功能塊FC100時(shí),必須注意下列情況:參數(shù)IEC_NO 的背景數(shù)據(jù)塊必須至少有兩個(gè)字的長度,同樣應(yīng)用于冗余用戶程序的參數(shù)DB_NO的數(shù)據(jù)塊也必須時(shí)這樣。
142:在S7程序中,有許多FC、FB塊, 我怎樣對其中的一些塊進(jìn)行保護(hù), 而其它的塊可以是開放的呢?
1) Step7中, 可以先任意打開一塊如OB1, 在"file"中選擇"Generate Source"或快捷方式"Ctrl+T",彈出一個(gè)畫面,填寫"bbbbbb name"如"tt",然后按OK確認(rèn),就會(huì)再彈出另一個(gè)畫面,左邊是你的程序中所有的塊,如果你需要保護(hù)哪些塊, 就把這些塊移到右邊,如FB1、FB2等等, 然后退出所有的程序塊,再進(jìn)入SIMATIC Manager中。
2) 在S7 Program Sources找到文件tt,雙擊tt打開,在第四行中加入"Know_How_Protect", 然后編譯, 無錯(cuò)后存盤。這樣FB1、FB2就被保護(hù)住,如想去掉保護(hù),在tt中去掉"Know_How_Protect"編譯存盤即可。
注意: 千萬不要丟失或刪除源文件(如tt), 否則程序被保護(hù), 用戶可以另存到其它目錄中,或Export Source到硬盤中,再刪除源文件,這樣別人只能看到未保護(hù)的塊。
143:SFB41,SFB42,SFB43和FB41,FB42,FB43的區(qū)別?
SFB41(CONT_C),SFB42(CONT_S),SFB43(PULSEGEN)塊和FB41(CONT_C),FB42(CONT_S),FB43(PULSEGEN)的區(qū)別:SFB41,42,43與FB41,42,43的參數(shù)設(shè)置是一樣的。SFB41,42,43只能用于CPU314IFM;FB41,42,43可用于CPU313以上的CPU(除CPU314IFM),因?yàn)镾FB41,42,43集成于CPU314IFM中,而在普通CPU中沒有這些塊。
144:如何在多例兼容功能塊中找到變量地址?
在多例兼容功能塊中,為塊參數(shù)和靜態(tài)本地?cái)?shù)據(jù)加載與地址寄存器AR2有關(guān)的絕對地址。如果要在情景數(shù)據(jù)塊中找到變量的絕對地址,則必須把域內(nèi)指針(只是AR2的地址)加載到變量地址。
樣例:
TAR2 //將地址寄存器加載到累加器AC1(偏移量)
UD DW#16#00FF_FFFF // 關(guān)閉區(qū)域ID
L P##variable //加載變量地址
+D // 增加偏移量和變量地址
LAR1 // 保存地址寄存器AR1中的結(jié)果
這樣可在AR1中獲得絕對地址以進(jìn)行進(jìn)一步處理。
當(dāng)功能塊作為本地實(shí)例調(diào)用時(shí),總要使用該方法。比如,在一個(gè)功能塊中創(chuàng)建可做為類型“FB”的靜態(tài)變量的功能塊。這樣所調(diào)用的情景數(shù)據(jù)塊的數(shù)據(jù)偏移量就存儲(chǔ)到情景數(shù)據(jù)塊中。單個(gè)實(shí)例的偏移量在AR2中。如果不調(diào)用作為本地實(shí)例的功能塊,則可以結(jié)束計(jì)算。值‘0'就在地址寄存器中。
注意事項(xiàng):如果改變程序中的地址寄存器AR2,那么也改變了變量的偏移量地址。因此就不能保證再對變量進(jìn)行正確訪問。在這種情況下,必須預(yù)先保存AR2,并在對程序動(dòng)作完之后將其復(fù)位為初始狀態(tài)。
樣例:
TAR2 // 在累加器中加載偏移量地址
T #save // 比如,靜態(tài)本地?cái)?shù)據(jù)域 0中的變量
L DID 0 // 地址絕對是由DI加載的beds<Y
L AR2 // 核對
145:怎樣才能訪問上一函數(shù)的本地?cái)?shù)據(jù)?
如要訪問以前的本地?cái)?shù)據(jù)(“V-e > L”數(shù)據(jù)),可以傳送一自創(chuàng)建ANY指針或絕對地址到被調(diào)用的FC。如果傳送的是自創(chuàng)建ANY指針,區(qū)域指針會(huì)指向其本地?cái)?shù)據(jù),而這是無意義的。> 因此“V”區(qū)域碼必須置于ANY指針中。此碼必須準(zhǔn)確傳送。當(dāng)指定絕對地址時(shí)可由編譯器完成此工作。
常規(guī)程序結(jié)構(gòu):
以ANY指針或絕對(地址)方式傳送:
LAR1 P##target //本地定義的ANY變量初始地址










