一些S7-300的應用系統(tǒng)中,使用8通道模擬量模塊采集信號,當模塊數量較多時,讀模擬輸入量就很繁瑣。下面給出一個通用程序FC100,利用它可以方便地把模擬量讀回并順序存入數據塊,因為模入模塊的起始地址、通道數、存儲數據塊號及數據在數據塊中的存儲起始位置均是可變的,所以可在調用FC100時靈活確定。
Address Decl. Symbol Data Type Initial Value Comment
0.0 In PIW_Addr INT
模入模塊通道起始地址
2.0 In CH_LEN INT
要讀入的通道數
4.0 In DB_No INT
存儲數據塊號
6.0 In DBW_Addr INT
存儲在數據塊中的字地址
Network 1
L #DB_No
T LW0
OPN DB[LW 0] 打開存儲數據塊
L #PIW_Addr
SLD 3 形成模入模塊地址指針
T LD4 在臨時本地數據雙字LD 4中存儲模入模塊地址指針
L #DBW_Addr
SLD 3 形成數據塊存儲地址指針
T LD8 在臨時本地數據雙字LD 8中存入數據塊存儲地址指針
L #CH_LEN 以要讀入的通道數為循環(huán)次數,裝入累加器1
NEXT:T LW 0
將累加器1的值,裝入循環(huán)次數計數器LW0(臨時本地數據字)
L LD4
LARl 將模入模塊地址指針裝入地址寄存器1
L PIW[ARl,P#0.0] 讀模入模塊裝入累加器1
T LW2 將累加器1的內容暫存入緩沖器LW2
L LD8
LARl 將數據塊存儲地址指針裝入地址寄存器1
L LW2 將數據緩沖器中的內容裝入累加器1
T DBW[ARl,P#0.0] 將累加器的內容存入數據塊中
L LD4 AR1+P#2.0→AR1
+ L#16 ACC1+(.._0001_0 000)
T LD4 調整模入模塊地址指針,指向下一通道Acc1+(bb bbbb bxxx)
L LD8
+ L#16
T LD8 調整數據塊存儲地址指針,指向下一存儲地址
L LW0 將循環(huán)次數計數器LW0的值裝入累加器1
LOOP NEXT 若累加器1的值不為0,將累加器減1繼續(xù)循環(huán);若累加
器為0,則結束
在FC100中,寄存器間接尋址指令OP NDB[LW0]使用了臨時本地數據LW0,變量表中定義的臨時變量雖然也在L堆棧中,但不能用于存儲器間接尋址,從這里也可看出臨時本地數據與臨時變量的區(qū)別。程序中LW2、LD4和LD8起的作用也可用臨時變量替代。
下面舉例說明如何使用FC100。在某應用中,機架0的4號槽位安裝了一個8模入模塊(地址256開始),若要將前6個模入模塊信號讀回,存入DB50.DBW10開始的6個字單元中,可按下列形式調用FC100:
CALL FC100
PIW_Add:= 256
CH_LEN:= 6
DB_No:= 50
DBW_Addr:= 10
數據塊
數據塊定義在S7 CPU存儲器中,用戶可在存儲器中建立一個或多個數據塊。每個數據塊可大可小,但CPU對數據塊數量及數據總量有限制,如對于CPU314,用作數據塊的存儲器多為8 KB(8192 B),用戶定義的數據總量不能超出這個限制。對數據塊必須遵循先定義后使用的原則,否則,將造成系統(tǒng)錯誤。
1. 定義數據塊
在編程階段和運行程序中都能定義數據塊。大多數數據塊是在編程階段用STEP 7開發(fā)軟件包定義的,定義內容包括數據塊號及塊中的變量(包括變量符號名、數據類型以及初始值等),定義完成后,數據塊中變量的順序及類型決定了數據塊的數據結構,變量的數量決定了數據塊的大小。數據塊在使用前,必須作為用戶程序的一部分下載到CPU中。
如果確實需要,還可以在程序運行中動態(tài)定義一個數據塊。動態(tài)定義時,數據塊號是自動產生的,數據塊在存儲器中的位置是動態(tài)分配的。由于要定義的數據塊有可能大于CPU存儲器(用于數據塊的部分)的剩余空間,因此動態(tài)定義過程有可能失敗
2.訪問數據塊
在用戶程序中可能定義了許多數據塊,而每個數據塊中又有許多不同類型的數據,因此,訪問時需要明確數據塊號和數據塊中的數據類型與位置。根據明確數據塊號的不同方法,可以用多種方法訪問數據塊中的數據。
直接在訪問指令中寫明數據塊號,如:
L DB5.DBW10
T DB10.DBW20
L Motor_1.Speed 符號地址
另一種方法是“先打開后訪問”。在訪問某數據塊中的數據前,先“打開”這個數據塊,也就是將數據塊號(數據塊的起始地址)裝入數據塊寄存器。這樣,存放在數據塊中的數據就可利用數據塊起始地址加偏移量的方法來訪問。如:
OPN DB5
L DBW10
OPN DB10
T DBW20
在打開一個數據塊時,先打開的數據塊會自動關閉(沒有專門的數據塊關閉指令)。由于有兩個數據塊寄存器(DB和DI寄存器),因此,多可同時打開兩個數據塊。一個作為背景數據塊,數據塊的起始地址存儲在DI寄存器中;另一個作為共享數據塊,數據塊的起始地址存儲在DB寄存器中。打開背景數據塊,在調用FB時可以自動實現。由于調用FB時使用DI寄存器,因此,一般不在FB程序中用OPN DI n指令打開數據塊。
3. 背景數據塊和共享數據塊
背景數據塊和共享數據塊有不同的用途。任何FB、FC或OB均可讀寫存放在共享數據塊中的數據。背景數據塊是FB運行時的工作存儲區(qū),它存放FB的部分運行變量。調用FB時,必須一個相關的背景數據塊。作為規(guī)則,只有FB塊才能訪問存放在背景數據塊中的數據。
茂名回收西門子PLC模塊 茂名回收西門子PLC模塊